diff --git a/INSTALL.md b/INSTALL.md
index 02851644ad..2759124bee 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -44,15 +44,15 @@ WSL1 is the preferred terminal to build **pokeemerald**. The following instructi
3. The next step is to choose and install a Linux distribution from the Microsoft Store. The following instructions will assume Ubuntu as the Linux distribution of choice.
Note for advanced users...
-
- > You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested.
+
+ > You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested.
4. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution.
Notes...
- > Note 1: If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog.
+ > Note 1: If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog.
> Note 2: If the link does not work, then open the Microsoft Store manually, and search for the Ubuntu app (choose the one with no version number).
@@ -102,8 +102,8 @@ cd /mnt/c/Users//Desktop/decomps
Notes...
-> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL.
-> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Desktop/decomp folder"`.
+> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL.
+> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Desktop/decomp folder"`.
> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed
@@ -213,8 +213,8 @@ Note that the directory **must exist** in Windows. If you want to store pokeemer
Notes...
-> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`.
-> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed
+> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`.
+> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)).
@@ -283,8 +283,8 @@ Note that the directory **must exist** in the folder system. If you want to stor
Note...
-
-> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"`
+
+> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"`
If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)).
@@ -305,7 +305,7 @@ Then proceed to [Choosing where to store pokeemerald (Linux)](#choosing-where-to
> then you will have to install devkitARM. Install all the above packages except binutils-arm-none-eabi, and follow the instructions to
> [install devkitARM on Debian/Ubuntu-based distributions](#installing-devkitarm-on-debianubuntu-based-distributions).
-
+
### Arch Linux
Run this command as root to install the necessary packages:
```bash
diff --git a/README.md b/README.md
index c23965485f..ce0b6b4c73 100644
--- a/README.md
+++ b/README.md
@@ -1,31 +1,28 @@
-# Pokémon Emerald
+# pokeemerald Expansion
-This is a decompilation of Pokémon Emerald.
+## What is the pokeemerald Expansion?
-It builds the following ROM:
+The pokeemerald Expansion is a collection of feature branches that can be integrated into existing [pokeemerald](https://github.com/pret/pokeemerald) projects.
-* [**pokeemerald.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1961) `sha1: f3ae088181bf583e55daf962a92bb46f4f1d07b7`
+## What feature branches are included?
-To set up the repository, see [INSTALL.md](INSTALL.md).
+- **[Battle Engine Upgrade](../tree/battle_engine):** Upgrades the battle engine in pokeemerald to newer Generation games' standards. It also adds newer moves and abilities.
+- **[Pokémon Expansion](../tree/pokemon_expansion):** Adds Pokémon from newer Generations and makes them available in the National Dex. It also updates base stats and other Pokémon info.
+- **[Item Expansion](../tree/item_expansion):** Adds items from newer Generations and also updates item effects for field use.
+- **[master](../tree/master):** Combines the above branches into one single branch for the sake of convenience. Note that this branch is only updated once in a while, so you must merge manually if you want the latest features.
+## Who maintains the project?
-## See also
+The project was originally started by DizzyEgg alongside other contributors.
-Other disassembly and/or decompilation projects:
-* [**Pokémon Red and Blue**](https://github.com/pret/pokered)
-* [**Pokémon Gold and Silver (Space World '97 demo)**](https://github.com/pret/pokegold-spaceworld)
-* [**Pokémon Yellow**](https://github.com/pret/pokeyellow)
-* [**Pokémon Trading Card Game**](https://github.com/pret/poketcg)
-* [**Pokémon Pinball**](https://github.com/pret/pokepinball)
-* [**Pokémon Stadium**](https://github.com/pret/pokestadium)
-* [**Pokémon Gold and Silver**](https://github.com/pret/pokegold)
-* [**Pokémon Crystal**](https://github.com/pret/pokecrystal)
-* [**Pokémon Ruby and Sapphire**](https://github.com/pret/pokeruby)
-* [**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)
+The project has now gotten larger and DizzyEgg is now maintaining the project as part of the ROM Hacking Hideout community. Some members of this community are taking on larger roles to help maintain the project.
+## Can I contribute even if I'm not a member of ROM Hacking Hideout?
-## Contacts
+Yes! Contributions are welcome via Pull Requests and they will be reviewed by maintainers. Please note that PRs to master are not accepted, as master is only intended to be a merged branch.
-You can find us on [Discord](https://discord.gg/d5dubZ3) and [IRC](https://web.libera.chat/?#pret).
+## What is ROM Hacking Hideout?
+
+A Discord-based ROM hacking community that has many members who hack using the disassembly and decompilation projects for Pokémon. Quite a few contributors to the original feature branches by DizzyEgg were members of ROM Hacking Hideout. You can call it RHH for short!
+
+[Click here to join the RHH Discord Server!](https://discord.gg/6CzjAG6GZk)
diff --git a/asm/macros/battle_ai_script.inc b/asm/macros/battle_ai_script.inc
index 5341e5a431..7f054c9863 100644
--- a/asm/macros/battle_ai_script.inc
+++ b/asm/macros/battle_ai_script.inc
@@ -227,15 +227,15 @@
.byte \battler
.endm
- .macro if_equal_ param0:req, param1:req
+ .macro if_equal_u32 param0:req, param1:req
.byte 0x26
- .byte \param0
+ .4byte \param0
.4byte \param1
.endm
- .macro if_not_equal_ param0:req, param1:req
+ .macro if_not_equal_u32 param0:req, param1:req
.byte 0x27
- .byte \param0
+ .4byte \param0
.4byte \param1
.endm
@@ -245,10 +245,10 @@
.4byte \param1
.endm
- .macro if_user_doesnt_go param0:req, param1:req
+ .macro if_cant_use_belch battler:req, ptr:req
.byte 0x29
- .byte \param0
- .4byte \param1
+ .byte \battler
+ .4byte \ptr
.endm
.macro nop_2A
@@ -315,13 +315,13 @@
.macro if_effect param0:req, param1:req
.byte 0x37
- .byte \param0
+ .2byte \param0
.4byte \param1
.endm
.macro if_not_effect param0:req, param1:req
.byte 0x38
- .byte \param0
+ .2byte \param0
.4byte \param1
.endm
@@ -467,24 +467,32 @@
.byte \battler
.endm
- .macro nop_52
+ .macro if_move_flag flag jumpptr
.byte 0x52
+ .4byte \flag
+ .4byte \jumpptr
.endm
- .macro nop_53
+ .macro if_field_status flag jumpptr
.byte 0x53
+ .4byte \flag
+ .4byte \jumpptr
.endm
- .macro nop_54
+ .macro get_move_accuracy
.byte 0x54
.endm
- .macro nop_55
+ .macro call_if_eq value, ptr
.byte 0x55
+ .2byte \value
+ .4byte \ptr
.endm
- .macro nop_56
+ .macro call_if_move_flag flag ptr
.byte 0x56
+ .4byte \flag
+ .4byte \ptr
.endm
.macro nop_57
@@ -551,7 +559,158 @@
.4byte \param2
.endm
+ .macro get_ally_chosen_move
+ .byte 0x63
+ .endm
+
+ .macro if_has_no_attacking_moves battler:req, param1:req
+ .byte 0x64
+ .byte \battler
+ .4byte \param1
+ .endm
+
+ .macro get_hazards_count battler:req, effect:req
+ .byte 0x65
+ .byte \battler
+ .2byte \effect
+ .endm
+
+ .macro if_doesnt_hold_berry battler:req, ptr:req
+ .byte 0x66
+ .byte \battler
+ .4byte \ptr
+ .endm
+
+ .macro if_share_type battler1:req, battler2:req, ptr:req
+ .byte 0x67
+ .byte \battler1
+ .byte \battler2
+ .4byte \ptr
+ .endm
+
+ .macro if_cant_use_last_resort battler:req, ptr:req
+ .byte 0x68
+ .byte \battler
+ .4byte \ptr
+ .endm
+
+ .macro if_has_move_with_split battler:req, split:req, ptr:req
+ .byte 0x69
+ .byte \battler
+ .byte \split
+ .4byte \ptr
+ .endm
+
+ .macro if_has_no_move_with_split battler:req, split:req, ptr:req
+ .byte 0x6A
+ .byte \battler
+ .byte \split
+ .4byte \ptr
+ .endm
+
+ .macro if_physical_moves_unusable attacker:req, target:req, ptr:req
+ .byte 0x6B
+ .byte \attacker
+ .byte \target
+ .4byte \ptr
+ .endm
+
+ .macro if_ai_can_go_down ptr:req
+ .byte 0x6C
+ .4byte \ptr
+ .endm
+
+ .macro if_has_move_with_type battler:req, type:req, ptr:req
+ .byte 0x6D
+ .byte \battler
+ .byte \type
+ .4byte \ptr
+ .endm
+
+ .macro if_no_move_used battler:req, ptr:req
+ .byte 0x6E
+ .byte \battler
+ .4byte \ptr
+ .endm
+
+ .macro if_has_move_with_flag battler:req, flag:req, ptr:req
+ .byte 0x6F
+ .byte \battler
+ .4byte \flag
+ .4byte \ptr
+ .endm
+
+ .macro if_battler_absent battler:req, ptr:req
+ .byte 0x70
+ .byte \battler
+ .4byte \ptr
+ .endm
+
+ .macro if_grounded battler:req, ptr:req
+ .byte 0x71
+ .byte \battler
+ .4byte \ptr
+ .endm
+
+ .macro get_best_dmg_hp_percent
+ .byte 0x72
+ .endm
+
+ .macro get_curr_dmg_hp_percent
+ .byte 0x73
+ .endm
+
+ .macro get_move_split_from_result
+ .byte 0x74
+ .endm
+
+ .macro get_considered_move_split
+ .byte 0x75
+ .endm
+
+ .macro get_considered_move_target
+ .byte 0x76
+ .endm
+
+ .macro compare_speeds battler1:req, battler2:req
+ .byte 0x77
+ .byte \battler1
+ .byte \battler2
+ .endm
+
+ .macro is_wakeup_turn battler:req
+ .byte 0x78
+ .byte \battler
+ .endm
+
+ .macro if_has_move_with_accuracy_lt battler:req, value:req, ptr:req
+ .byte 0x79
+ .byte \battler
+ .byte \value
+ .4byte \ptr
+ .endm
+
@ useful script macros
+ .macro if_has_physical_move battler:req, ptr:req
+ if_has_move_with_split \battler, SPLIT_PHYSICAL, \ptr
+ .endm
+
+ .macro if_has_no_physical_move battler:req, ptr:req
+ if_has_no_move_with_split \battler, SPLIT_PHYSICAL, \ptr
+ .endm
+
+ .macro if_has_special_move battler:req, ptr:req
+ if_has_move_with_split \battler, SPLIT_SPECIAL, \ptr
+ .endm
+
+ .macro if_has_no_special_move battler:req, ptr:req
+ if_has_no_move_with_split \battler, SPLIT_SPECIAL, \ptr
+ .endm
+
+ .macro if_holds_no_item battler, ptr:req
+ if_holds_item \battler, 0, \ptr
+ .endm
+
.macro get_curr_move_type
get_type AI_TYPE_MOVE
.endm
@@ -617,3 +776,8 @@
.macro if_any_move_encored battler:req, ptr:req
if_any_move_disabled_or_encored \battler, 1, \ptr
.endm
+
+ .macro call_if_always_hit ptr:req
+ get_move_accuracy
+ call_if_eq 0, \ptr
+ .endm
diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc
index 15c48c39f5..8dda8979e5 100644
--- a/asm/macros/battle_anim_script.inc
+++ b/asm/macros/battle_anim_script.inc
@@ -283,3 +283,62 @@
.macro jumpretfalse ptr:req
jumpreteq FALSE, \ptr
.endm
+
+ .macro jumpifdoublebattle ptr:req
+ createvisualtask AnimTask_IsDoubleBattle, 0
+ jumprettrue \ptr
+ .endm
+
+@ keep CFRU macros cause I'm lazy. todo: update to createsprite and createvisualtask, respectively
+.macro launchtemplate launchtemplatePtr launchtemplatePriority launchtemplateArgsNo launchtemplatearg0 launchtemplatearg1 launchtemplatearg2 launchtemplatearg3 launchtemplatearg4 launchtemplatearg5 launchtemplatearg6 launchtemplatearg7 launchtemplatearg8
+ .byte 0x2
+ .word \launchtemplatePtr
+ .byte \launchtemplatePriority
+ .byte \launchtemplateArgsNo
+ .hword \launchtemplatearg0
+ .hword \launchtemplatearg1
+ .hword \launchtemplatearg2
+ .hword \launchtemplatearg3
+ .hword \launchtemplatearg4
+ .hword \launchtemplatearg5
+ .hword \launchtemplatearg6
+ .hword \launchtemplatearg7
+ .hword \launchtemplatearg8
+ .endm
+
+.macro launchtask launchtaskPtr launchtaskPriority launchtaskArgsNo launchtaskarg0 launchtaskarg1 launchtaskarg2 launchtaskarg3 launchtaskarg4 launchtaskarg5 launchtaskarg6 launchtaskarg7 launchtaskarg8
+ .byte 0x3
+ .word \launchtaskPtr
+ .byte \launchtaskPriority
+ .byte \launchtaskArgsNo
+ .hword \launchtaskarg0
+ .hword \launchtaskarg1
+ .hword \launchtaskarg2
+ .hword \launchtaskarg3
+ .hword \launchtaskarg4
+ .hword \launchtaskarg5
+ .hword \launchtaskarg6
+ .hword \launchtaskarg7
+ .hword \launchtaskarg8
+ .endm
+
+.macro setblends setblends_value
+ .byte 0xC
+ .hword \setblends_value
+ .endm
+
+.macro launchsoundtask launchsoundtaskPtr launchsoundtaskArgsNo launchsoundtaskarg0 launchsoundtaskarg1 launchsoundtaskarg2 launchsoundtaskarg3 launchsoundtaskarg4 launchsoundtaskarg5 launchsoundtaskarg6 launchsoundtaskarg7 launchsoundtaskarg8
+ .byte 0x1F
+ .word \launchsoundtaskPtr
+ .byte \launchsoundtaskArgsNo
+ .hword \launchsoundtaskarg0
+ .hword \launchsoundtaskarg1
+ .hword \launchsoundtaskarg2
+ .hword \launchsoundtaskarg3
+ .hword \launchsoundtaskarg4
+ .hword \launchsoundtaskarg5
+ .hword \launchsoundtaskarg6
+ .hword \launchsoundtaskarg7
+ .hword \launchsoundtaskarg8
+ .endm
+
diff --git a/asm/macros/battle_frontier/battle_tower.inc b/asm/macros/battle_frontier/battle_tower.inc
index ccc777c507..46bbc392f6 100644
--- a/asm/macros/battle_frontier/battle_tower.inc
+++ b/asm/macros/battle_frontier/battle_tower.inc
@@ -89,3 +89,77 @@
setvar VAR_0x8004, BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA
special CallBattleTowerFunc
.endm
+
+ @Custom multi-battle commands
+
+ .macro choose_mons
+ fadescreen 1
+ special ChooseHalfPartyForBattle @ choose 3 mons for battle
+ waitstate
+ .endm
+
+ .macro multi_do type:req, partnerId:req, partnerPicId:req
+ special ReducePlayerPartyToSelectedMons
+ setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SET_DATA
+ setvar VAR_0x8005, FRONTIER_DATA_SELECTED_MON_ORDER
+ special CallFrontierUtilFunc @ saves the mon order, so the non-selected mons get restored afterwards
+ setvar VAR_0x8004, SPECIAL_BATTLE_MULTI
+ setvar VAR_0x8005, \type | MULTI_BATTLE_CHOOSE_MONS
+ setvar VAR_0x8006, \partnerId
+ setvar VAR_0x8007, \partnerPicId
+ special DoSpecialTrainerBattle
+ waitstate
+ setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SAVE_PARTY
+ special CallFrontierUtilFunc
+ special LoadPlayerParty
+ .endm
+
+ .macro multi_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req
+ special SavePlayerParty
+ trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
+ trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons
+ multi_do MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId
+ .endm
+
+ .macro multi_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req
+ special SavePlayerParty
+ trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
+ multi_do MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId
+ .endm
+
+ @ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out.
+ .macro multi_wild partnerId:req, partnerPicId:req
+ special SavePlayerParty
+ multi_do MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId
+ .endm
+
+ .macro multi_do_fixed type:req, partnerId:req, partnerPicId:req
+ setvar VAR_0x8004, SPECIAL_BATTLE_MULTI
+ setvar VAR_0x8005, \type
+ setvar VAR_0x8006, \partnerId
+ setvar VAR_0x8007, \partnerPicId
+ special DoSpecialTrainerBattle
+ waitstate
+ setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SAVE_PARTY
+ special CallFrontierUtilFunc
+ special LoadPlayerParty
+ .endm
+
+ .macro multi_fixed_2_vs_2 trainer1Id:req, trainer1LoseText:req, trainer2Id:req, trainer2LoseText:req, partnerId:req, partnerPicId:req
+ special SavePlayerParty
+ trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
+ trainerbattle TRAINER_BATTLE_SET_TRAINER_B, \trainer2Id, 0, NULL, \trainer2LoseText @ set second trainer mons
+ multi_do_fixed MULTI_BATTLE_2_VS_2, \partnerId, \partnerPicId
+ .endm
+
+ .macro multi_fixed_2_vs_1 trainer1Id:req, trainer1LoseText:req, partnerId:req, partnerPicId:req
+ special SavePlayerParty
+ trainerbattle TRAINER_BATTLE_SET_TRAINER_A, \trainer1Id, 0, NULL, \trainer1LoseText @ set first trainer mons
+ multi_do_fixed MULTI_BATTLE_2_VS_1, \partnerId, \partnerPicId
+ .endm
+
+ @ Wild mons need to be assigned to gEnemyParty 0 and 3 slots, other slots need to be cleared out.
+ .macro multi_fixed_wild partnerId:req, partnerPicId:req
+ special SavePlayerParty
+ multi_do_fixed MULTI_BATTLE_2_VS_WILD, \partnerId, \partnerPicId
+ .endm
diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc
index 73b3beca0b..50c5f7fd72 100644
--- a/asm/macros/battle_script.inc
+++ b/asm/macros/battle_script.inc
@@ -29,11 +29,11 @@
.byte 0x6
.endm
- .macro adjustnormaldamage
+ .macro adjustdamage
.byte 0x7
.endm
- .macro adjustnormaldamage2
+ .macro multihitresultmessage
.byte 0x8
.endm
@@ -150,14 +150,14 @@
.macro jumpifability battler:req, ability:req, ptr:req
.byte 0x1e
.byte \battler
- .byte \ability
+ .2byte \ability
.4byte \ptr
.endm
.macro jumpifsideaffecting battler:req, sidestatus:req, ptr:req
.byte 0x1f
.byte \battler
- .2byte \sidestatus
+ .4byte \sidestatus
.4byte \ptr
.endm
@@ -178,13 +178,22 @@
.4byte \ptr
.endm
- .macro jumpiftype battler:req, type:req, ptr:req
+ .macro jumpbasedontype battler:req, type:req, case:req, ptr:req
.byte 0x22
.byte \battler
.byte \type
+ .byte \case
.4byte \ptr
.endm
+ .macro jumpiftype battler:req, type:req, ptr:req
+ jumpbasedontype \battler, \type, 1, \ptr
+ .endm
+
+ .macro jumpifnottype battler:req, type:req, ptr:req
+ jumpbasedontype \battler, \type, 0, \ptr
+ .endm
+
.macro getexp battler:req
.byte 0x23
.byte \battler
@@ -363,16 +372,13 @@
.4byte \ptr
.endm
- .macro jumpiftype2 battler:req, type:req, ptr:req
+ .macro setroost
.byte 0x42
- .byte \battler
- .byte \type
- .4byte \ptr
.endm
.macro jumpifabilitypresent ability:req, ptr:req
.byte 0x43
- .byte \ability
+ .2byte \ability
.4byte \ptr
.endm
@@ -410,41 +416,42 @@
.byte \endMode
.byte \endState
.endm
-
+
@ Help macros for 5 uses of moveend command
-
+
@ All cases
.macro moveendall
setbyte sMOVEEND_STATE, 0
moveend 0, 0
.endm
-
+
@ Chosen case
.macro moveendcase case:req
setbyte sMOVEEND_STATE, \case
moveend 1, 0
.endm
-
+
@ All cases from (inclusive)
.macro moveendfrom from:req
setbyte sMOVEEND_STATE, \from
moveend 0, 0
.endm
-
+
@ All cases from 0 to (not inclusive)
.macro moveendto to:req
setbyte sMOVEEND_STATE, 0
moveend 2, \to
.endm
-
+
@ Cases from (inclusive) to (not inclusive)
.macro moveendfromto from:req, to:req
setbyte sMOVEEND_STATE, \from
moveend 2, \to
.endm
- .macro typecalc2
+ .macro sethealblock ptr:req
.byte 0x4a
+ .4byte \ptr
.endm
.macro returnatktoball
@@ -600,8 +607,9 @@
.byte 0x68
.endm
- .macro adjustsetdamage
+ .macro setgravity ptr:req
.byte 0x69
+ .4byte \ptr
.endm
.macro removeitem battler:req
@@ -630,7 +638,7 @@
.byte \battler
.endm
- .macro recordlastability battler:req
+ .macro recordability battler:req
.byte 0x70
.byte \battler
.endm
@@ -668,7 +676,7 @@
.byte 0x77
.endm
- .macro faintifabilitynotdamp
+ .macro tryexplosion
.byte 0x78
.endm
@@ -718,8 +726,9 @@
.4byte \ptr
.endm
- .macro nop
+ .macro setmiracleeye ptr:req
.byte 0x83
+ .4byte \ptr
.endm
.macro jumpifcantmakeasleep ptr:req
@@ -727,8 +736,9 @@
.4byte \ptr
.endm
- .macro stockpile
+ .macro stockpile id:req
.byte 0x85
+ .byte \id
.endm
.macro stockpiletobasedamage ptr:req
@@ -741,13 +751,13 @@
.4byte \ptr
.endm
- .macro negativedamage
+ .macro setdrainedhp
.byte 0x88
.endm
.macro statbuffchange flags:req, jumpptr:req
.byte 0x89
- .byte \flags
+ .2byte \flags
.4byte \jumpptr
.endm
@@ -902,8 +912,9 @@
.byte 0xab
.endm
- .macro remaininghptopower
+ .macro settailwind ptr:req
.byte 0xac
+ .4byte \ptr
.endm
.macro tryspiteppreduce ptr:req
@@ -934,7 +945,7 @@
.4byte \ptr
.endm
- .macro rolloutdamagecalculation
+ .macro handlerollout
.byte 0xb3
.endm
@@ -944,12 +955,13 @@
.4byte \ptr
.endm
- .macro furycuttercalc
+ .macro handlefurycutter
.byte 0xb5
.endm
- .macro friendshiptodamagecalculation
+ .macro setembargo ptr:req
.byte 0xb6
+ .4byte \ptr
.endm
.macro presentdamagecalculation
@@ -996,8 +1008,9 @@
.4byte \ptr
.endm
- .macro hiddenpowercalc
+ .macro setstickyweb ptr:req
.byte 0xc1
+ .4byte \ptr
.endm
.macro selectfirstvalidtarget
@@ -1031,7 +1044,7 @@
.byte 0xc8
.endm
- .macro jumpifattackandspecialattackcannotfall ptr:req
+ .macro trymemento ptr:req
.byte 0xc9
.4byte \ptr
.endm
@@ -1089,13 +1102,14 @@
.4byte \ptr
.endm
- .macro trysetroots ptr:req
+ .macro settoxicspikes ptr:req
.byte 0xd5
.4byte \ptr
.endm
- .macro doubledamagedealtifdamaged
+ .macro setgastroacid ptr:req
.byte 0xd6
+ .4byte \ptr
.endm
.macro setyawn ptr:req
@@ -1108,7 +1122,7 @@
.4byte \ptr
.endm
- .macro scaledamagebyhealthratio
+ .macro setroom
.byte 0xd9
.endm
@@ -1122,13 +1136,15 @@
.4byte \ptr
.endm
- .macro trysetgrudge ptr:req
+ .macro setstealthrock ptr:req
.byte 0xdc
.4byte \ptr
.endm
- .macro weightdamagecalculation
+ .macro setuserstatus3 flags:req, ptr:req
.byte 0xdd
+ .4byte \flags
+ .4byte \ptr
.endm
.macro assistattackselect ptr:req
@@ -1183,8 +1199,9 @@
.4byte \ptr
.endm
- .macro setweatherballtype
+ .macro jumpifsubstituteblocks ptr:req
.byte 0xe9
+ .4byte \ptr
.endm
.macro tryrecycleitem ptr:req
@@ -1252,165 +1269,767 @@
.byte 0xf8
.byte \position
.endm
-
+
+ .macro settelekinesis ptr:req
+ .byte 0xf9
+ .4byte \ptr
+ .endm
+
+ .macro swapstatstages stat:req
+ .byte 0xfa
+ .byte \stat
+ .endm
+
+ .macro averagestats stat:req
+ .byte 0xfb
+ .byte \stat
+ .endm
+
+ .macro jumpifoppositegenders ptr:req
+ .byte 0xfc
+ .4byte \ptr
+ .endm
+
+ .macro trygetbaddreamstarget ptr:req
+ .byte 0xfd
+ .4byte \ptr
+ .endm
+
+ .macro tryworryseed ptr:req
+ .byte 0xfe
+ .4byte \ptr
+ .endm
+
+ .macro metalburstdamagecalculator ptr:req
+ .byte 0xff
+ .4byte \ptr
+ .endm
+
@ various command changed to more readable macros
.macro cancelmultiturnmoves battler:req
various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES
.endm
-
+
.macro setmagiccoattarget battler:req
various \battler, VARIOUS_SET_MAGIC_COAT_TARGET
.endm
-
+
.macro getifcantrunfrombattle battler:req
various \battler, VARIOUS_IS_RUNNING_IMPOSSIBLE
.endm
-
+
.macro getmovetarget battler:req
various \battler, VARIOUS_GET_MOVE_TARGET
.endm
-
+
.macro getbattlerfainted battler:req
various \battler, VARIOUS_GET_BATTLER_FAINTED
.endm
-
+
.macro resetintimidatetracebits battler:req
various \battler, VARIOUS_RESET_INTIMIDATE_TRACE_BITS
.endm
-
+
.macro updatechoicemoveonlvlup battler:req
various \battler, VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP
.endm
-
+
.macro resetplayerfainted
various BS_ATTACKER, VARIOUS_RESET_PLAYER_FAINTED
.endm
-
+
.macro palaceflavortext battler:req
various \battler, VARIOUS_PALACE_FLAVOR_TEXT
.endm
-
+
.macro arenajudgmentwindow
various BS_ATTACKER, VARIOUS_ARENA_JUDGMENT_WINDOW
.endm
-
+
.macro arenaopponentmonlost
various BS_ATTACKER, VARIOUS_ARENA_OPPONENT_MON_LOST
.endm
-
+
.macro arenaplayermonlost
various BS_ATTACKER, VARIOUS_ARENA_PLAYER_MON_LOST
.endm
-
+
.macro arenabothmonlost
various BS_ATTACKER, VARIOUS_ARENA_BOTH_MONS_LOST
.endm
-
+
.macro forfeityesnobox battler:req
various \battler, VARIOUS_EMIT_YESNOBOX
.endm
-
+
.macro arenadrawreftextbox
various BS_ATTACKER, VARIOUS_DRAW_ARENA_REF_TEXT_BOX
.endm
-
+
.macro arenaerasereftextbox
various BS_ATTACKER, VARIOUS_ERASE_ARENA_REF_TEXT_BOX
.endm
-
+
.macro arenajudgmentstring id:req
various \id, VARIOUS_ARENA_JUDGMENT_STRING
.endm
-
+
.macro arenawaitmessage id:req
various \id, VARIOUS_ARENA_WAIT_STRING
.endm
-
+
.macro waitcry battler:req
various \battler, VARIOUS_WAIT_CRY
.endm
-
+
.macro returnopponentmon1toball battler:req
various \battler, VARIOUS_RETURN_OPPONENT_MON1
.endm
-
+
.macro returnopponentmon2toball battler:req
various \battler, VARIOUS_RETURN_OPPONENT_MON2
.endm
-
+
.macro volumedown
various BS_ATTACKER, VARIOUS_VOLUME_DOWN
.endm
-
+
.macro volumeup
various BS_ATTACKER, VARIOUS_VOLUME_UP
.endm
-
+
.macro setalreadystatusedmoveattempt battler:req
various \battler, VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT
.endm
-
+
.macro palacetryescapestatus battler:req
various \battler, VARIOUS_PALACE_TRY_ESCAPE_STATUS
.endm
-
+
.macro setoutcomeonteleport battler:req
various \battler, VARIOUS_SET_TELEPORT_OUTCOME
.endm
-
+
.macro playtrainerdefeatbgm battler:req
various \battler, VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC
.endm
+
+ .macro stattextbuffer battler:req
+ various \battler, VARIOUS_STAT_TEXT_BUFFER
+ .endm
+
+ .macro switchinabilities battler:req
+ various \battler, VARIOUS_SWITCHIN_ABILITIES
+ .endm
+
+ .macro savetarget
+ various BS_TARGET, VARIOUS_SAVE_TARGET
+ .endm
+
+ .macro restoretarget
+ various BS_TARGET, VARIOUS_RESTORE_TARGET
+ .endm
+
+ .macro instanthpdrop battler:req
+ various \battler, VARIOUS_INSTANT_HP_DROP
+ .endm
+
+ .macro clearstatus battler:req
+ various \battler, VARIOUS_CLEAR_STATUS
+ .endm
+
+ .macro restorepp battler:req
+ various \battler, VARIOUS_RESTORE_PP
+ .endm
+
+ .macro tryactivatemoxie battler:req
+ various \battler, VARIOUS_TRY_ACTIVATE_MOXIE
+ .endm
+
+ .macro tryactivatebeastboost battler:req
+ various \battler, VARIOUS_TRY_ACTIVATE_BEAST_BOOST
+ .endm
+
+ .macro tryactivatereceiver battler:req
+ various \battler, VARIOUS_TRY_ACTIVATE_RECEIVER
+ .endm
+
+ .macro tryactivatesoulheart
+ various BS_ATTACKER, VARIOUS_TRY_ACTIVATE_SOULHEART
+ .endm
+
+ .macro tryactivatefellstinger battler:req
+ various \battler, VARIOUS_TRY_ACTIVATE_FELL_STINGER
+ .endm
+
+ .macro playmoveanimation battler:req, move:req
+ various \battler, VARIOUS_PLAY_MOVE_ANIMATION
+ .2byte \move
+ .endm
+
+ .macro setluckychant battler:req, ptr:req
+ various \battler VARIOUS_SET_LUCKY_CHANT
+ .4byte \ptr
+ .endm
+
+ .macro suckerpunchcheck ptr:req
+ various BS_ATTACKER, VARIOUS_SUCKER_PUNCH_CHECK
+ .4byte \ptr
+ .endm
+
+ .macro setabilitysimple battler:req, ptr:req
+ various \battler VARIOUS_SET_SIMPLE_BEAM
+ .4byte \ptr
+ .endm
+
+ .macro tryentrainment ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_ENTRAINMENT
+ .4byte \ptr
+ .endm
+
+ .macro setlastusedability battler:req
+ various \battler, VARIOUS_SET_LAST_USED_ABILITY
+ .endm
+
+ .macro tryhealpulse battler:req, ptr:req
+ various \battler, VARIOUS_TRY_HEAL_PULSE
+ .4byte \ptr
+ .endm
+
+ .macro tryquash ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_QUASH
+ .4byte \ptr
+ .endm
+
+ .macro tryafteryou ptr:req
+ various BS_ATTACKER, VARIOUS_AFTER_YOU
+ .4byte \ptr
+ .endm
+
+ .macro trybestow ptr:req
+ various BS_ATTACKER, VARIOUS_BESTOW
+ .4byte \ptr
+ .endm
+
+ .macro invertstatstages battler:req
+ various \battler, VARIOUS_INVERT_STAT_STAGES
+ .endm
+
+ .macro setterrain ptr:req
+ various BS_ATTACKER, VARIOUS_SET_TERRAIN
+ .4byte \ptr
+ .endm
+
+ .macro trymefirst ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_ME_FIRST
+ .4byte \ptr
+ .endm
+
+ .macro jumpifbattleend ptr:req
+ various BS_ATTACKER, VARIOUS_JUMP_IF_BATTLE_END
+ .4byte \ptr
+ .endm
+
+ .macro tryelectrify ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_ELECTRIFY
+ .4byte \ptr
+ .endm
+
+ .macro tryreflecttype ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_REFLECT_TYPE
+ .4byte \ptr
+ .endm
+
+ .macro trysoak ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_SOAK
+ .4byte \ptr
+ .endm
+
+ .macro handlemegaevo battler:req, case:req
+ various \battler, VARIOUS_HANDLE_MEGA_EVO
+ .byte \case
+ .endm
+
+ .macro handleprimalreversion battler:req, case:req
+ various \battler, VARIOUS_HANDLE_PRIMAL_REVERSION
+ .byte \case
+ .endm
+
+ .macro handleformchange battler:req, case:req
+ various \battler, VARIOUS_HANDLE_FORM_CHANGE
+ .byte \case
+ .endm
+
+ .macro jumpifcantuselastresort battler:req, ptr:req
+ various \battler, VARIOUS_TRY_LAST_RESORT
+ .4byte \ptr
+ .endm
+
+ .macro argumentstatuseffect
+ various BS_ATTACKER, VARIOUS_ARGUMENT_STATUS_EFFECT
+ .endm
+
+ .macro tryhitswitchtarget ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_HIT_SWITCH_TARGET
+ .4byte \ptr
+ .endm
+
+ .macro tryautotomize battler:req, ptr:req
+ various \battler, VARIOUS_TRY_AUTOTOMIZE
+ .4byte \ptr
+ .endm
+
+ .macro jumpifcantusesynchronoise ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_SYNCHRONOISE
+ .4byte \ptr
+ .endm
+
+ .macro trycopycat ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_COPYCAT
+ .4byte \ptr
+ .endm
+
+ .macro showabilitypopup battler:req
+ various \battler, VARIOUS_ABILITY_POPUP
+ .endm
+
+ .macro updateabilitypopup battler:req
+ various \battler, VARIOUS_UPDATE_ABILITY_POPUP
+ .endm
+
+ .macro defogclear battler:req, clear:req, ptr:req
+ various \battler, VARIOUS_DEFOG
+ .byte \clear
+ .4byte \ptr
+ .endm
+
+ .macro jumpiftargetally ptr:req
+ various BS_ATTACKER, VARIOUS_JUMP_IF_TARGET_ALLY
+ .4byte \ptr
+ .endm
+
+ .macro trypsychoshift ptr:req
+ various BS_ATTACKER, VARIOUS_PSYCHO_SHIFT
+ .4byte \ptr
+ .endm
+
+ .macro curestatus battler:req
+ various \battler, VARIOUS_CURE_STATUS
+ .endm
+
+ .macro powertrick battler:req
+ various \battler, VARIOUS_POWER_TRICK
+ .endm
+
+ .macro argumenttomoveeffect
+ various BS_ATTACKER, VARIOUS_ARGUMENT_TO_MOVE_EFFECT
+ .endm
+
+ .macro jumpifnotgrounded battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_NOT_GROUNDED
+ .4byte \ptr
+ .endm
+
+ .macro handletrainerslidemsg battler:req, field:req
+ various \battler, VARIOUS_HANDLE_TRAINER_SLIDE_MSG
+ .byte \field
+ .endm
+
+ .macro trytrainerslidefirstdownmsg battler:req
+ various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF
+ .endm
+
+ .macro trytrainerslidelastonmsg battler:req
+ various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON
+ .endm
+
+ .macro setauroraveil battler:req
+ various \battler, VARIOUS_SET_AURORA_VEIL
+ .endm
+
+ .macro trysetthirdtype battler:req, ptr:req
+ various \battler, VARIOUS_TRY_THIRD_TYPE
+ .4byte \ptr
+ .endm
+
+ .macro tryaccupressure battler:req, ptr:req
+ various \battler, VARIOUS_ACUPRESSURE
+ .4byte \ptr
+ .endm
+
+ .macro setpowder battler:req
+ various \battler, VARIOUS_SET_POWDER
+ .endm
+
+ .macro spectralthiefprintstats
+ various BS_ATTACKER, VARIOUS_SPECTRAL_THIEF
+ .endm
+
+ .macro bringdownairbornebattler battler:req
+ various \battler, VARIOUS_GRAVITY_ON_AIRBORNE_MONS
+ .endm
+
+ .macro checkgrassyterrainheal battler:req, ptr:req
+ various \battler, VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS
+ .4byte \ptr
+ .endm
+
+ .macro jumpifnotberry battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_NOT_BERRY
+ .4byte \ptr
+ .endm
+
+ .macro jumpifroarfails ptr:req
+ various BS_ATTACKER, VARIOUS_JUMP_IF_ROAR_FAILS
+ .4byte \ptr
+ .endm
+
+ .macro tryinstruct ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_INSTRUCT
+ .4byte \ptr
+ .endm
+
+ .macro settracedability battler:req
+ various \battler, VARIOUS_TRACE_ABILITY
+ .endm
+
+ .macro updatenick battler:req
+ various \battler, VARIOUS_UPDATE_NICK
+ .endm
+
+ .macro tryillusionoff battler:req
+ various \battler, VARIOUS_TRY_ILLUSION_OFF
+ .endm
+
+ .macro spriteignore0hp val:req
+ various BS_ATTACKER, VARIOUS_SET_SPRITEIGNORE0HP
+ .byte \val
+ .endm
+
+ .macro getstatvalue battler:req, statId:req
+ various \battler, VARIOUS_GET_STAT_VALUE
+ .byte \statId
+ .endm
+
+ .macro jumpiffullhp battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_FULL_HP
+ .4byte \ptr
+ .endm
+
+ .macro losetype battler:req, type:req
+ various \battler, VARIOUS_LOSE_TYPE
+ .byte \type
+ .endm
+
+ .macro tryfriskmsg battler:req
+ various \battler, VARIOUS_TRY_FRISK
+ .endm
+
+ .macro jumpifshieldsdown battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED
+ .4byte \ptr
+ .endm
+
+ .macro trypoisontype attacker:req, target:req, ptr:req
+ various \attacker, VARIOUS_POISON_TYPE_IMMUNITY
+ .byte \target
+ .4byte \ptr
+ .endm
+
+ .macro tryparalyzetype attacker:req, target:req, ptr:req
+ various \attacker, VARIOUS_PARALYZE_TYPE_IMMUNITY
+ .byte \target
+ .4byte \ptr
+ .endm
+
+ .macro trysetfairylock ptr:req
+ various BS_ATTACKER, VARIOUS_TRY_FAIRY_LOCK
+ .4byte \ptr
+ .endm
+
+ .macro jumpifnoally battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_NO_ALLY
+ .4byte \ptr
+ .endm
+
+ .macro jumpifnoholdeffect battler:req, holdEffet:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_NO_HOLD_EFFECT
+ .byte \holdEffet
+ .4byte \ptr
+ .endm
+
+ .macro infatuatewithbattler battler1:req, battler2:req
+ various \battler1, VARIOUS_INFATUATE_WITH_BATTLER
+ .byte \battler2
+ .endm
+
+ .macro setlastuseditem battler:req
+ various \battler, VARIOUS_SET_LAST_USED_ITEM
+ .endm
+
+ .macro jumpifabsent battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_ABSENT
+ .4byte \ptr
+ .endm
+
+ .macro destroyabilitypopup
+ various BS_ABILITY_BATTLER, VARIOUS_DESTROY_ABILITY_POPUP
+ .endm
+
+ .macro gettotemboost ptr:req
+ various BS_ATTACKER, VARIOUS_TOTEM_BOOST
+ .4byte \ptr
+ .endm
+
+ .macro tryactivategrimneigh, battler:req
+ various \battler, VARIOUS_TRY_ACTIVATE_GRIM_NEIGH
+ .endm
+
+ .macro setzeffect
+ various BS_ATTACKER, VARIOUS_SET_Z_EFFECT
+ .endm
+ .macro consumeberry battler:req, restoreItem=FALSE
+ various \battler, VARIOUS_CONSUME_BERRY
+ .byte \restoreItem
+ .endm
+
+ .macro activateitemeffects battler:req
+ various \battler, VARIOUS_MOVEEND_ITEM_EFFECTS
+ .endm
+
+ .macro pickpocketsteal
+ various 0, VARIOUS_PICKPOCKET
+ .endm
+
+ .macro doterrainseed battler:req, ptr:req
+ various \battler, VARIOUS_TERRAIN_SEED
+ .4byte \ptr
+ .endm
+
+ .macro makeinvisible battler:req
+ various \battler, VARIOUS_MAKE_INVISIBLE
+ .endm
+
+ .macro tryroomservice battler:req, ptr:req
+ various \battler, VARIOUS_ROOM_SERVICE
+ .4byte \ptr
+ .endm
+
+ .macro jumpifterrainaffected battler:req, terrainFlags:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_TERRAIN_AFFECTED
+ .4byte \terrainFlags
+ .4byte \ptr
+ .endm
+
+ .macro jumpifpranksterblocked battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_PRANKSTER_BLOCKED
+ .4byte \ptr
+ .endm
+
+ .macro eeriespellppreduce ptr:req
+ various BS_TARGET, VARIOUS_EERIE_SPELL_PP_REDUCE
+ .4byte \ptr
+ .endm
+
+ .macro jumpifteamhealthy battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_TEAM_HEALTHY
+ .4byte \ptr
+ .endm
+
+ .macro tryhealquarterhealth battler:req, ptr:req
+ various \battler, VARIOUS_TRY_HEAL_QUARTER_HP
+ .4byte \ptr
+ .endm
+
+ .macro removeterrain
+ various BS_ATTACKER, VARIOUS_REMOVE_TERRAIN
+ .endm
+
+ .macro trytoclearprimalweather
+ various BS_ATTACKER, VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER
+ .endm
+
+ .macro setattackertostickywebuser
+ various BS_TARGET, VARIOUS_SET_ATTACKER_STICKY_WEB_USER
+ .endm
+
+ .macro getrototillertargets ptr:req
+ various BS_ATTACKER, VARIOUS_GET_ROTOTILLER_TARGETS
+ .4byte \ptr
+ .endm
+
+ .macro jumpifnotrototilleraffected battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED
+ .4byte \ptr
+ .endm
+
+ .macro tryactivatebattlebond battler:req
+ various \battler, VARIOUS_TRY_ACTIVATE_BATTLE_BOND
+ .endm
+
+ .macro jumpifcantreverttoprimal ptr:req
+ various BS_ATTACKER, VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL
+ .4byte \ptr
+ .endm
+
+ .macro applyplasmafists
+ various BS_ATTACKER, VARIOUS_APPLY_PLASMA_FISTS
+ .endm
+
+ .macro jumpifweatheraffected battler:req, weather:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_WEATHER_AFFECTED
+ .4byte \weather
+ .4byte \ptr
+ .endm
+
+ .macro jumpifspecies battler:req, species:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_SPECIES
+ .2byte \species
+ .4byte \ptr
+ .endm
+
+ .macro tryendneutralizinggas battler:req
+ various \battler, VARIOUS_TRY_END_NEUTRALIZING_GAS
+ .endm
+
+ .macro trytoapplymimicry battler:req, ptr:req
+ various \battler, VARIOUS_TRY_TO_APPLY_MIMICRY
+ .4byte \ptr
+ .endm
+
+ .macro trynoretreat battler:req, ptr:req
+ various \battler, VARIOUS_TRY_NO_RETREAT
+ .4byte \ptr
+ .endm
+
+ .macro trytarshot battler:req, ptr:req
+ various \battler, VARIOUS_TRY_TAR_SHOT
+ .4byte \ptr
+ .endm
+
+ .macro cantarshotwork battler:req, ptr:req
+ various \battler, VARIOUS_CAN_TAR_SHOT_WORK
+ .4byte \ptr
+ .endm
+
+ .macro checkpoltergeist battler:req, ptr:req
+ various \battler, VARIOUS_CHECK_POLTERGEIST
+ .4byte \ptr
+ .endm
+
+ .macro setoctolock battler:req, ptr:req
+ various \battler, VARIOUS_SET_OCTOLOCK
+ .4byte \ptr
+ .endm
+
+ .macro cutonethirdhpraisestats ptr:req
+ various BS_ATTACKER, VARIOUS_CUT_1_3_HP_RAISE_STATS
+ .4byte \ptr
+ .endm
+
+ .macro photongeysercheck battler:req
+ various \battler, VARIOUS_PHOTON_GEYSER_CHECK
+ .endm
+
+ .macro shellsidearmcheck
+ various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK
+ .endm
+
+ .macro jumpifcantfling battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_CANT_FLING
+ .4byte \ptr
+ .endm
+
+ .macro curecertainstatuses battler:req
+ various \battler, VARIOUS_CURE_CERTAIN_STATUSES
+ .endm
+
+ .macro tryresetnegativestatstages battler:req
+ various \battler, VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES
+ .endm
+
+ .macro jumpiflastuseditemberry ptr:req
+ various BS_ATTACKER, VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY
+ .4byte \ptr
+ .endm
+
+ .macro jumpiflastuseditemholdeffect battler:req, holdEffect:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT
+ .byte \holdEffect
+ .4byte \ptr
+ .endm
+
+ .macro savebattleritem battler:req
+ various \battler, VARIOUS_SAVE_BATTLER_ITEM
+ .endm
+
+ .macro restorebattleritem battler:req
+ various \battler, VARIOUS_RESTORE_BATTLER_ITEM
+ .endm
+
+ .macro battleritemtolastuseditem battler:req
+ various \battler, VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM
+ .endm
+
+ .macro setbeakblast battler:req
+ various \battler, VARIOUS_SET_BEAK_BLAST
+ .endm
+
+ .macro swapsidestatuses
+ various BS_ATTACKER, VARIOUS_SWAP_SIDE_STATUSES
+ .endm
+
@ helpful macros
.macro setstatchanger stat:req, stages:req, down:req
- setbyte sSTATCHANGER, \stat | \stages << 4 | \down << 7
+ setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7
.endm
-
+
.macro setmoveeffect effect:req
- setbyte cEFFECT_CHOOSER, \effect
+ sethword sMOVE_EFFECT, \effect
+ sethword sSAVED_MOVE_EFFECT, \effect
.endm
-
+
.macro chosenstatus1animation battler:req, status:req
chosenstatusanimation \battler, 0x0, \status
.endm
-
+
.macro chosenstatus2animation battler:req, status:req
chosenstatusanimation \battler, 0x1, \status
.endm
-
+
.macro sethword dst:req, value:req
setbyte \dst, (\value) & 0xFF
setbyte \dst + 1, ((\value) >> 8) & 0xFF
.endm
-
+
.macro setword dst:req, value:req
setbyte \dst, (\value) & 0xFF
setbyte \dst + 1, ((\value) >> 8) & 0xFF
setbyte \dst + 2, ((\value) >> 16) & 0xFF
setbyte \dst + 3, ((\value) >> 24) & 0xFF
.endm
-
+
.macro copybyte dst:req, src:req
copyarray \dst, \src, 0x1
.endm
-
+
.macro copyhword dst:req, src:req
copyarray \dst, \src, 0x2
.endm
-
+
.macro copyword dst:req, src:req
copyarray \dst, \src, 0x4
.endm
-
+
.macro jumpifbytenotequal byte1:req, byte2:req, jumpptr:req
jumpifarraynotequal \byte1, \byte2, 0x1, \jumpptr
.endm
-
+
.macro jumpifbyteequal byte1:req, byte2:req, jumpptr:req
jumpifarrayequal \byte1, \byte2, 0x1, \jumpptr
.endm
-
+
.macro jumpifmove move:req, jumpptr:req
jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpptr
.endm
@@ -1418,23 +2037,98 @@
.macro jumpifnotmove move:req, jumpptr:req
jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpptr
.endm
-
+
+ .macro jumpifnotchosenmove move:req, jumpptr:req
+ jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpptr
+ .endm
+
.macro jumpifstatus3 battler:req, status:req, jumpptr:req
jumpifstatus3condition \battler, \status, FALSE, \jumpptr
.endm
-
+
.macro jumpifnostatus3 battler:req, status:req, jumpptr:req
jumpifstatus3condition \battler, \status, TRUE, \jumpptr
.endm
-
+
.macro jumpifmovehadnoeffect jumpptr:req
jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpptr
.endm
-
+
.macro jumpifbattletype flags:req, jumpptr:req
jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
.endm
-
+
.macro jumpifnotbattletype flags:req, jumpptr:req
jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
.endm
+
+ .macro dmg_1_8_targethp
+ manipulatedamage DMG_1_8_TARGET_HP
+ .endm
+
+ .macro dmgtomaxattackerhp
+ manipulatedamage DMG_FULL_ATTACKER_HP
+ .endm
+
+ .macro dmgtocurrattackerhp
+ manipulatedamage DMG_CURR_ATTACKER_HP
+ .endm
+
+ .macro dmg_1_2_attackerhp
+ manipulatedamage DMG_1_2_ATTACKER_HP
+ .endm
+
+ .macro jumpifflowerveil jumpptr:req
+ jumpifnottype BS_TARGET, TYPE_GRASS, 1f
+ jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpptr
+ 1:
+ .endm
+
+ .macro jumpifflowerveilattacker jumpptr:req
+ jumpifnottype BS_ATTACKER, TYPE_GRASS, 1f
+ jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpptr
+ 1:
+ .endm
+
+ .macro setallytonexttarget jumpptr:req
+ jumpifbyte CMP_GREATER_THAN, gBattlerTarget, 0x1, 1f
+ addbyte gBattlerTarget, 0x2
+ goto \jumpptr
+ 1:
+ subbyte gBattlerTarget, 0x2
+ goto \jumpptr
+ .endm
+
+ .macro jumpifleafguardprotected battler:req, jumpptr:req
+ various \battler, VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED
+ .4byte \jumpptr
+ .endm
+
+ .macro jumpifsafeguard jumpptr:req
+ jumpifability BS_ATTACKER, ABILITY_INFILTRATOR, 1f
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpptr
+ 1:
+ .endm
+
+ @ Will jump to script pointer if the target weighs less than 200 kg, or 441 lbs.
+ .macro jumpifunder200 battler:req, ptr:req
+ various \battler, VARIOUS_JUMP_IF_UNDER_200
+ .4byte \ptr
+ .endm
+
+ @ Sets the sky drop status and does all other necessary operations
+ .macro setskydrop
+ various 0, VARIOUS_SET_SKY_DROP
+ .endm
+
+ @ Clears the sky drop status and does all other necessary operations.
+ @ If the target fainted in before this script is called, it goes to the given script.
+ .macro clearskydrop ptr:req
+ various 0, VARIOUS_CLEAR_SKY_DROP
+ .4byte \ptr
+ .endm
+
+ @ Accounts for if the target of Sky Drop was in confuse_lock when the attacker falls asleep due to Yawn.
+ .macro skydropyawn
+ various 0, VARIOUS_SKY_DROP_YAWN
+ .endm
diff --git a/asm/macros/event.inc b/asm/macros/event.inc
index a2d974fbeb..26391bd4a6 100644
--- a/asm/macros/event.inc
+++ b/asm/macros/event.inc
@@ -277,7 +277,7 @@
.endm
@ Blocks script execution until a command or C code manually unblocks it. Generally used with specific
- @ commands and specials. Calling EnableBothScriptContexts for instance will allow execution to continue.
+ @ commands and specials. Calling ScriptContext_Enable for instance will allow execution to continue.
.macro waitstate
.byte 0x27
.endm
@@ -1430,13 +1430,19 @@
.2byte \count
.endm
- @ Prepares to start a wild battle against a 'species' at 'level' holding 'item'. Running this command will not affect
- @ normal wild battles. You start the prepared battle with dowildbattle.
- .macro setwildbattle species:req, level:req, item=ITEM_NONE
+ @ Prepares to start a wild battle against a 'species' at 'level' holding 'item'.
+ @ If 'species2' is something other than SPECIES_NONE, then the battle is a double battle
+ @ that is also against 'species2' at 'level2' holding 'item2'.
+ @ Running this command will not affect normal wild battles. You start the prepared battle with dowildbattle.
+ @ If the player only has one Pokemon, a scripted double battle will be buggy.
+ .macro setwildbattle species:req, level:req, item=ITEM_NONE, species2=SPECIES_NONE, level2=0, item2=ITEM_NONE
.byte 0xb6
.2byte \species
.byte \level
.2byte \item
+ .2byte \species2
+ .byte \level2
+ .2byte \item2
.endm
@ Starts a wild battle against the Pokemon generated by setwildbattle. Blocks script execution until the battle finishes.
@@ -1940,6 +1946,67 @@
special CreateEventLegalEnemyMon
.endm
+ @ Set up a totem boost for the next battle.
+ @ 'battler' is the position of the mon you want to gain a boost. see B_POSITION_xx in include/constants/battle.h.
+ @ The rest of the arguments are the stat change values to each stat.
+ @ For example, giving the first opponent +1 to atk and -2 to speed would be: settotemboost B_POSITION_OPPONENT_LEFT, 1, 0, -2
+ .macro settotemboost battler:req, atk=0,def=0,speed=0,spatk=0,spdef=0,acc=0,evas=0
+ setvar VAR_0x8000, \battler
+ setvar VAR_0x8001, \atk
+ setvar VAR_0x8002, \def
+ setvar VAR_0x8003, \speed
+ setvar VAR_0x8004, \spatk
+ setvar VAR_0x8005, \spdef
+ setvar VAR_0x8006, \acc
+ setvar VAR_0x8007, \evas
+ special SetTotemBoost
+ .endm
+
+ @ useful totem boost macros
+ .macro totemboost_atk1 battler:req
+ settotemboost \battler, 1
+ .endm
+ .macro totemboost_def1 battler:req
+ settotemboost \battler, 0, 1
+ .endm
+ .macro totemboost_speed1 battler:req
+ settotemboost \battler, 0, 0, 1
+ .endm
+ .macro totemboost_spatk1 battler:req
+ settotemboost \battler, 0, 0, 0, 1
+ .endm
+ .macro totemboost_spdef1 battler:req
+ settotemboost \battler, 0, 0, 0, 0, 1
+ .endm
+ .macro totemboost_acc1 battler:req
+ settotemboost \battler, 0, 0, 0, 0, 0, 1
+ .endm
+ .macro totemboost_evas1 battler:req
+ settotemboost \battler, 0, 0, 0, 0, 0, 0, 1
+ .endm
+
+ .macro totemboost_atk2 battler:req
+ settotemboost \battler, 2
+ .endm
+ .macro totemboost_def2 battler:req
+ settotemboost \battler, 0, 2
+ .endm
+ .macro totemboost_speed2 battler:req
+ settotemboost \battler, 0, 0, 2
+ .endm
+ .macro totemboost_spatk2 battler:req
+ settotemboost \battler, 0, 0, 0, 2
+ .endm
+ .macro totemboost_spdef2 battler:req
+ settotemboost \battler, 0, 0, 0, 0, 2
+ .endm
+ .macro totemboost_acc2 battler:req
+ settotemboost \battler, 0, 0, 0, 0, 0, 2
+ .endm
+ .macro totemboost_evas2 battler:req
+ settotemboost \battler, 0, 0, 0, 0, 0, 0, 2
+ .endm
+
@ Attempts to trigger a special evolution method in the overworld.
@ There may be other conditions required which are coded for in GetEvolutionTargetSpecies.
@ EX: tryspecialevo EVO_WATER_SCROLL, FALSE, FALSE triggers Kubfu's EVO_WATER_SCROLL evolution
diff --git a/asm/macros/movement.inc b/asm/macros/movement.inc
index 62618379b6..a43dc07ac5 100644
--- a/asm/macros/movement.inc
+++ b/asm/macros/movement.inc
@@ -152,8 +152,8 @@
create_movement_action walk_slow_diag_northeast, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT
create_movement_action walk_slow_diag_southwest, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT
create_movement_action walk_slow_diag_southeast, MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT
- create_movement_action store_lock_anim, MOVEMENT_ACTION_STORE_AND_LOCK_ANIM
- create_movement_action free_unlock_anim, MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM
+ create_movement_action lock_anim, MOVEMENT_ACTION_LOCK_ANIM
+ create_movement_action unlock_anim, MOVEMENT_ACTION_UNLOCK_ANIM
create_movement_action walk_left_affine, MOVEMENT_ACTION_WALK_LEFT_AFFINE
create_movement_action walk_right_affine, MOVEMENT_ACTION_WALK_RIGHT_AFFINE
create_movement_action levitate, MOVEMENT_ACTION_LEVITATE
diff --git a/charmap.txt b/charmap.txt
index 2606076784..980a3e5dd8 100644
--- a/charmap.txt
+++ b/charmap.txt
@@ -401,6 +401,15 @@ B_TRAINER2_WIN_TEXT = FD 31
B_PARTNER_CLASS = FD 32
B_PARTNER_NAME = FD 33
B_BUFF3 = FD 34
+B_ATK_TRAINER_NAME = FD 35
+B_ATK_TRAINER_CLASS = FD 36
+B_ATK_TEAM1 = FD 37
+B_ATK_TEAM2 = FD 38
+B_DEF_NAME = FD 39
+B_DEF_TEAM1 = FD 3A
+B_DEF_TEAM2 = FD 3B
+B_ACTIVE_NAME = FD 3C
+B_ACTIVE_NAME2 = FD 3D @ no Illusion check
@ indicates the end of a town/city name (before " TOWN" or " CITY")
NAME_END = FC 00
diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s
deleted file mode 100644
index d856b926a2..0000000000
--- a/data/battle_ai_scripts.s
+++ /dev/null
@@ -1,3215 +0,0 @@
-#include "constants/battle.h"
-#include "constants/battle_ai.h"
-#include "constants/abilities.h"
-#include "constants/items.h"
-#include "constants/moves.h"
-#include "constants/battle_move_effects.h"
-#include "constants/hold_effects.h"
-#include "constants/pokemon.h"
- .include "asm/macros/battle_ai_script.inc"
- .include "constants/constants.inc"
-
- .section script_data, "aw", %progbits
-
- .align 2
-gBattleAI_ScriptsTable::
- .4byte AI_CheckBadMove @ AI_SCRIPT_CHECK_BAD_MOVE
- .4byte AI_TryToFaint @ AI_SCRIPT_TRY_TO_FAINT
- .4byte AI_CheckViability @ AI_SCRIPT_CHECK_VIABILITY
- .4byte AI_SetupFirstTurn @ AI_SCRIPT_SETUP_FIRST_TURN
- .4byte AI_Risky @ AI_SCRIPT_RISKY
- .4byte AI_PreferPowerExtremes @ AI_SCRIPT_PREFER_POWER_EXTREMES
- .4byte AI_PreferBatonPass @ AI_SCRIPT_PREFER_BATON_PASS
- .4byte AI_DoubleBattle @ AI_SCRIPT_DOUBLE_BATTLE
- .4byte AI_HPAware @ AI_SCRIPT_HP_AWARE
- .4byte AI_TrySunnyDayStart @ AI_SCRIPT_TRY_SUNNY_DAY_START
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Ret
- .4byte AI_Roaming @ AI_SCRIPT_ROAMING
- .4byte AI_Safari @ AI_SCRIPT_SAFARI
- .4byte AI_FirstBattle @ AI_SCRIPT_FIRST_BATTLE
-
-AI_CheckBadMove:
- if_target_is_ally AI_Ret
- if_move MOVE_FISSURE, AI_CBM_CheckIfNegatesType
- if_move MOVE_HORN_DRILL, AI_CBM_CheckIfNegatesType
- get_how_powerful_move_is
- if_equal MOVE_POWER_OTHER, AI_CheckBadMove_CheckSoundproof
-AI_CBM_CheckIfNegatesType:
- if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
- get_ability AI_TARGET
- if_equal ABILITY_VOLT_ABSORB, CheckIfVoltAbsorbCancelsElectric
- if_equal ABILITY_WATER_ABSORB, CheckIfWaterAbsorbCancelsWater
- if_equal ABILITY_FLASH_FIRE, CheckIfFlashFireCancelsFire
- if_equal ABILITY_WONDER_GUARD, CheckIfWonderGuardCancelsMove
- if_equal ABILITY_LEVITATE, CheckIfLevitateCancelsGroundMove
- goto AI_CheckBadMove_CheckSoundproof_
-
-CheckIfVoltAbsorbCancelsElectric:
- get_curr_move_type
- if_equal_ TYPE_ELECTRIC, Score_Minus12
- goto AI_CheckBadMove_CheckSoundproof_
-
-CheckIfWaterAbsorbCancelsWater:
- get_curr_move_type
- if_equal_ TYPE_WATER, Score_Minus12
- goto AI_CheckBadMove_CheckSoundproof_
-
-CheckIfFlashFireCancelsFire:
- get_curr_move_type
- if_equal_ TYPE_FIRE, Score_Minus12
- goto AI_CheckBadMove_CheckSoundproof_
-
-CheckIfWonderGuardCancelsMove:
- if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CheckBadMove_CheckSoundproof_
- goto Score_Minus10
-
-CheckIfLevitateCancelsGroundMove:
- get_curr_move_type
- if_equal_ TYPE_GROUND, Score_Minus10
-AI_CheckBadMove_CheckSoundproof_:
- get_how_powerful_move_is
- if_equal MOVE_POWER_OTHER, AI_CheckBadMove_CheckSoundproof @ Pointless check
-AI_CheckBadMove_CheckSoundproof:
- get_ability AI_TARGET
- if_not_equal ABILITY_SOUNDPROOF, AI_CheckBadMove_CheckEffect
- if_move MOVE_GROWL, Score_Minus10
- if_move MOVE_ROAR, Score_Minus10
- if_move MOVE_SING, Score_Minus10
- if_move MOVE_SUPERSONIC, Score_Minus10
- if_move MOVE_SCREECH, Score_Minus10
- if_move MOVE_SNORE, Score_Minus10
- if_move MOVE_UPROAR, Score_Minus10
- if_move MOVE_METAL_SOUND, Score_Minus10
- if_move MOVE_GRASS_WHISTLE, Score_Minus10
-AI_CheckBadMove_CheckEffect:
- if_effect EFFECT_SLEEP, AI_CBM_Sleep
- if_effect EFFECT_EXPLOSION, AI_CBM_Explosion
- if_effect EFFECT_DREAM_EATER, AI_CBM_DreamEater
- if_effect EFFECT_ATTACK_UP, AI_CBM_AttackUp
- if_effect EFFECT_DEFENSE_UP, AI_CBM_DefenseUp
- if_effect EFFECT_SPEED_UP, AI_CBM_SpeedUp
- if_effect EFFECT_SPECIAL_ATTACK_UP, AI_CBM_SpAtkUp
- if_effect EFFECT_SPECIAL_DEFENSE_UP, AI_CBM_SpDefUp
- if_effect EFFECT_ACCURACY_UP, AI_CBM_AccUp
- if_effect EFFECT_EVASION_UP, AI_CBM_EvasionUp
- if_effect EFFECT_ATTACK_DOWN, AI_CBM_AttackDown
- if_effect EFFECT_DEFENSE_DOWN, AI_CBM_DefenseDown
- if_effect EFFECT_SPEED_DOWN, AI_CBM_SpeedDown
- if_effect EFFECT_SPECIAL_ATTACK_DOWN, AI_CBM_SpAtkDown
- if_effect EFFECT_SPECIAL_DEFENSE_DOWN, AI_CBM_SpDefDown
- if_effect EFFECT_ACCURACY_DOWN, AI_CBM_AccDown
- if_effect EFFECT_EVASION_DOWN, AI_CBM_EvasionDown
- if_effect EFFECT_HAZE, AI_CBM_Haze
- if_effect EFFECT_BIDE, AI_CBM_HighRiskForDamage
- if_effect EFFECT_ROAR, AI_CBM_Roar
- if_effect EFFECT_TOXIC, AI_CBM_Toxic
- if_effect EFFECT_LIGHT_SCREEN, AI_CBM_LightScreen
- if_effect EFFECT_OHKO, AI_CBM_OneHitKO
- if_effect EFFECT_RAZOR_WIND, AI_CBM_HighRiskForDamage
- if_effect EFFECT_SUPER_FANG, AI_CBM_HighRiskForDamage
- if_effect EFFECT_MIST, AI_CBM_Mist
- if_effect EFFECT_FOCUS_ENERGY, AI_CBM_FocusEnergy
- if_effect EFFECT_CONFUSE, AI_CBM_Confuse
- if_effect EFFECT_ATTACK_UP_2, AI_CBM_AttackUp
- if_effect EFFECT_DEFENSE_UP_2, AI_CBM_DefenseUp
- if_effect EFFECT_SPEED_UP_2, AI_CBM_SpeedUp
- if_effect EFFECT_SPECIAL_ATTACK_UP_2, AI_CBM_SpAtkUp
- if_effect EFFECT_SPECIAL_DEFENSE_UP_2, AI_CBM_SpDefUp
- if_effect EFFECT_ACCURACY_UP_2, AI_CBM_AccUp
- if_effect EFFECT_EVASION_UP_2, AI_CBM_EvasionUp
- if_effect EFFECT_ATTACK_DOWN_2, AI_CBM_AttackDown
- if_effect EFFECT_DEFENSE_DOWN_2, AI_CBM_DefenseDown
- if_effect EFFECT_SPEED_DOWN_2, AI_CBM_SpeedDown
- if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, AI_CBM_SpAtkDown
- if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, AI_CBM_SpDefDown
- if_effect EFFECT_ACCURACY_DOWN_2, AI_CBM_AccDown
- if_effect EFFECT_EVASION_DOWN_2, AI_CBM_EvasionDown
- if_effect EFFECT_REFLECT, AI_CBM_Reflect
- if_effect EFFECT_POISON, AI_CBM_Toxic
- if_effect EFFECT_PARALYZE, AI_CBM_Paralyze
- if_effect EFFECT_SUBSTITUTE, AI_CBM_Substitute
- if_effect EFFECT_RECHARGE, AI_CBM_HighRiskForDamage
- if_effect EFFECT_LEECH_SEED, AI_CBM_LeechSeed
- if_effect EFFECT_DISABLE, AI_CBM_Disable
- if_effect EFFECT_LEVEL_DAMAGE, AI_CBM_HighRiskForDamage
- if_effect EFFECT_PSYWAVE, AI_CBM_HighRiskForDamage
- if_effect EFFECT_COUNTER, AI_CBM_HighRiskForDamage
- if_effect EFFECT_ENCORE, AI_CBM_Encore
- if_effect EFFECT_SNORE, AI_CBM_DamageDuringSleep
- if_effect EFFECT_SLEEP_TALK, AI_CBM_DamageDuringSleep
- if_effect EFFECT_FLAIL, AI_CBM_HighRiskForDamage
- if_effect EFFECT_MEAN_LOOK, AI_CBM_CantEscape
- if_effect EFFECT_NIGHTMARE, AI_CBM_Nightmare
- if_effect EFFECT_MINIMIZE, AI_CBM_EvasionUp
- if_effect EFFECT_CURSE, AI_CBM_Curse
- if_effect EFFECT_SPIKES, AI_CBM_Spikes
- if_effect EFFECT_FORESIGHT, AI_CBM_Foresight
- if_effect EFFECT_PERISH_SONG, AI_CBM_PerishSong
- if_effect EFFECT_SANDSTORM, AI_CBM_Sandstorm
- if_effect EFFECT_SWAGGER, AI_CBM_Confuse
- if_effect EFFECT_ATTRACT, AI_CBM_Attract
- if_effect EFFECT_RETURN, AI_CBM_HighRiskForDamage
- if_effect EFFECT_PRESENT, AI_CBM_HighRiskForDamage
- if_effect EFFECT_FRUSTRATION, AI_CBM_HighRiskForDamage
- if_effect EFFECT_SAFEGUARD, AI_CBM_Safeguard
- if_effect EFFECT_MAGNITUDE, AI_CBM_Magnitude
- if_effect EFFECT_BATON_PASS, AI_CBM_BatonPass
- if_effect EFFECT_SONICBOOM, AI_CBM_HighRiskForDamage
- if_effect EFFECT_RAIN_DANCE, AI_CBM_RainDance
- if_effect EFFECT_SUNNY_DAY, AI_CBM_SunnyDay
- if_effect EFFECT_BELLY_DRUM, AI_CBM_BellyDrum
- if_effect EFFECT_PSYCH_UP, AI_CBM_Haze
- if_effect EFFECT_MIRROR_COAT, AI_CBM_HighRiskForDamage
- if_effect EFFECT_SKULL_BASH, AI_CBM_HighRiskForDamage
- if_effect EFFECT_FUTURE_SIGHT, AI_CBM_FutureSight
- if_effect EFFECT_TELEPORT, Score_Minus10
- if_effect EFFECT_DEFENSE_CURL, AI_CBM_DefenseUp
- if_effect EFFECT_FAKE_OUT, AI_CBM_FakeOut
- if_effect EFFECT_STOCKPILE, AI_CBM_Stockpile
- if_effect EFFECT_SPIT_UP, AI_CBM_SpitUpAndSwallow
- if_effect EFFECT_SWALLOW, AI_CBM_SpitUpAndSwallow
- if_effect EFFECT_HAIL, AI_CBM_Hail
- if_effect EFFECT_TORMENT, AI_CBM_Torment
- if_effect EFFECT_FLATTER, AI_CBM_Confuse
- if_effect EFFECT_WILL_O_WISP, AI_CBM_WillOWisp
- if_effect EFFECT_MEMENTO, AI_CBM_Memento
- if_effect EFFECT_FOCUS_PUNCH, AI_CBM_HighRiskForDamage
- if_effect EFFECT_HELPING_HAND, AI_CBM_HelpingHand
- if_effect EFFECT_TRICK, AI_CBM_TrickAndKnockOff
- if_effect EFFECT_INGRAIN, AI_CBM_Ingrain
- if_effect EFFECT_SUPERPOWER, AI_CBM_HighRiskForDamage
- if_effect EFFECT_RECYCLE, AI_CBM_Recycle
- if_effect EFFECT_KNOCK_OFF, AI_CBM_TrickAndKnockOff
- if_effect EFFECT_ENDEAVOR, AI_CBM_HighRiskForDamage
- if_effect EFFECT_IMPRISON, AI_CBM_Imprison
- if_effect EFFECT_REFRESH, AI_CBM_Refresh
- if_effect EFFECT_LOW_KICK, AI_CBM_HighRiskForDamage
- if_effect EFFECT_MUD_SPORT, AI_CBM_MudSport
- if_effect EFFECT_TICKLE, AI_CBM_Tickle
- if_effect EFFECT_COSMIC_POWER, AI_CBM_CosmicPower
- if_effect EFFECT_BULK_UP, AI_CBM_BulkUp
- if_effect EFFECT_WATER_SPORT, AI_CBM_WaterSport
- if_effect EFFECT_CALM_MIND, AI_CBM_CalmMind
- if_effect EFFECT_DRAGON_DANCE, AI_CBM_DragonDance
- end
-
-AI_CBM_Sleep:
- get_ability AI_TARGET
- if_equal ABILITY_INSOMNIA, Score_Minus10
- if_equal ABILITY_VITAL_SPIRIT, Score_Minus10
- if_status AI_TARGET, STATUS1_ANY, Score_Minus10
- if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
- end
-
-AI_CBM_Explosion:
- if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
- get_ability AI_TARGET
- if_equal ABILITY_DAMP, Score_Minus10
- count_usable_party_mons AI_USER
- if_not_equal 0, AI_CBM_Explosion_End
- count_usable_party_mons AI_TARGET
- if_not_equal 0, Score_Minus10
- goto Score_Minus1
-
-AI_CBM_Explosion_End:
- end
-
-AI_CBM_Nightmare:
- if_status2 AI_TARGET, STATUS2_NIGHTMARE, Score_Minus10
- if_not_status AI_TARGET, STATUS1_SLEEP, Score_Minus8
- end
-
-AI_CBM_DreamEater:
- if_not_status AI_TARGET, STATUS1_SLEEP, Score_Minus8
- if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
- end
-
-AI_CBM_BellyDrum:
- if_hp_less_than AI_USER, 51, Score_Minus10
-AI_CBM_AttackUp:
- if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10
- end
-
-AI_CBM_DefenseUp:
- if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus10
- end
-
-AI_CBM_SpeedUp:
- if_stat_level_equal AI_USER, STAT_SPEED, MAX_STAT_STAGE, Score_Minus10
- end
-
-AI_CBM_SpAtkUp:
- if_stat_level_equal AI_USER, STAT_SPATK, MAX_STAT_STAGE, Score_Minus10
- end
-
-AI_CBM_SpDefUp:
- if_stat_level_equal AI_USER, STAT_SPDEF, MAX_STAT_STAGE, Score_Minus10
- end
-
-AI_CBM_AccUp:
- if_stat_level_equal AI_USER, STAT_ACC, MAX_STAT_STAGE, Score_Minus10
- end
-
-AI_CBM_EvasionUp:
- if_stat_level_equal AI_USER, STAT_EVASION, MAX_STAT_STAGE, Score_Minus10
- end
-
-AI_CBM_AttackDown:
- if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10
- get_ability AI_TARGET
- if_equal ABILITY_HYPER_CUTTER, Score_Minus10
- goto CheckIfAbilityBlocksStatChange
-
-AI_CBM_DefenseDown:
- if_stat_level_equal AI_TARGET, STAT_DEF, MIN_STAT_STAGE, Score_Minus10
- goto CheckIfAbilityBlocksStatChange
-
-AI_CBM_SpeedDown:
- if_stat_level_equal AI_TARGET, STAT_SPEED, MIN_STAT_STAGE, Score_Minus10
- if_ability AI_TARGET, ABILITY_SPEED_BOOST, Score_Minus10
- goto CheckIfAbilityBlocksStatChange
-
-AI_CBM_SpAtkDown:
- if_stat_level_equal AI_TARGET, STAT_SPATK, MIN_STAT_STAGE, Score_Minus10
- goto CheckIfAbilityBlocksStatChange
-
-AI_CBM_SpDefDown:
- if_stat_level_equal AI_TARGET, STAT_SPDEF, MIN_STAT_STAGE, Score_Minus10
- goto CheckIfAbilityBlocksStatChange
-
-AI_CBM_AccDown:
- if_stat_level_equal AI_TARGET, STAT_ACC, MIN_STAT_STAGE, Score_Minus10
- get_ability AI_TARGET
- if_equal ABILITY_KEEN_EYE, Score_Minus10
- goto CheckIfAbilityBlocksStatChange
-
-AI_CBM_EvasionDown:
- if_stat_level_equal AI_TARGET, STAT_EVASION, MIN_STAT_STAGE, Score_Minus10
-CheckIfAbilityBlocksStatChange:
- get_ability AI_TARGET
- if_equal ABILITY_CLEAR_BODY, Score_Minus10
- if_equal ABILITY_WHITE_SMOKE, Score_Minus10
- end
-
-AI_CBM_Haze:
- if_stat_level_less_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_less_than AI_USER, STAT_DEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_less_than AI_USER, STAT_SPEED, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_less_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_less_than AI_USER, STAT_SPDEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_less_than AI_USER, STAT_ACC, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_less_than AI_USER, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_more_than AI_TARGET, STAT_ATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_more_than AI_TARGET, STAT_DEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_more_than AI_TARGET, STAT_SPEED, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_more_than AI_TARGET, STAT_SPATK, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_more_than AI_TARGET, STAT_SPDEF, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_more_than AI_TARGET, STAT_ACC, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- if_stat_level_more_than AI_TARGET, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CBM_Haze_End
- goto Score_Minus10
-
-AI_CBM_Haze_End:
- end
-
-AI_CBM_Roar:
- count_usable_party_mons AI_TARGET
- if_equal 0, Score_Minus10
- get_ability AI_TARGET
- if_equal ABILITY_SUCTION_CUPS, Score_Minus10
- end
-
-AI_CBM_Toxic:
- get_target_type1
- if_equal TYPE_STEEL, Score_Minus10
- if_equal TYPE_POISON, Score_Minus10
- get_target_type2
- if_equal TYPE_STEEL, Score_Minus10
- if_equal TYPE_POISON, Score_Minus10
- get_ability AI_TARGET
- if_equal ABILITY_IMMUNITY, Score_Minus10
- if_status AI_TARGET, STATUS1_ANY, Score_Minus10
- if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
- end
-
-AI_CBM_LightScreen:
- if_side_affecting AI_USER, SIDE_STATUS_LIGHTSCREEN, Score_Minus8
- end
-
-AI_CBM_OneHitKO:
- if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
- get_ability AI_TARGET
- if_equal ABILITY_STURDY, Score_Minus10
- if_level_cond 1, Score_Minus10
- end
-
-AI_CBM_Magnitude:
- get_ability AI_TARGET
- if_equal ABILITY_LEVITATE, Score_Minus10
-AI_CBM_HighRiskForDamage:
- if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
- get_ability AI_TARGET
- if_not_equal ABILITY_WONDER_GUARD, AI_CBM_HighRiskForDamage_End
- if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CBM_HighRiskForDamage_End
- goto Score_Minus10
-
-AI_CBM_HighRiskForDamage_End:
- end
-
-AI_CBM_Mist:
- if_side_affecting AI_USER, SIDE_STATUS_MIST, Score_Minus8
- end
-
-AI_CBM_FocusEnergy:
- if_status2 AI_USER, STATUS2_FOCUS_ENERGY, Score_Minus10
- end
-
-AI_CBM_Confuse:
- if_status2 AI_TARGET, STATUS2_CONFUSION, Score_Minus5
- get_ability AI_TARGET
- if_equal ABILITY_OWN_TEMPO, Score_Minus10
- if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
- end
-
-AI_CBM_Reflect:
- if_side_affecting AI_USER, SIDE_STATUS_REFLECT, Score_Minus8
- end
-
-AI_CBM_Paralyze:
- if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
- get_ability AI_TARGET
- if_equal ABILITY_LIMBER, Score_Minus10
- if_status AI_TARGET, STATUS1_ANY, Score_Minus10
- if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
- end
-
-AI_CBM_Substitute:
- if_status2 AI_USER, STATUS2_SUBSTITUTE, Score_Minus8
- if_hp_less_than AI_USER, 26, Score_Minus10
- end
-
-AI_CBM_LeechSeed:
- if_status3 AI_TARGET, STATUS3_LEECHSEED, Score_Minus10
- get_target_type1
- if_equal TYPE_GRASS, Score_Minus10
- get_target_type2
- if_equal TYPE_GRASS, Score_Minus10
- end
-
-AI_CBM_Disable:
- if_any_move_disabled AI_TARGET, Score_Minus8
- end
-
-AI_CBM_Encore:
- if_any_move_encored AI_TARGET, Score_Minus8
- end
-
-AI_CBM_DamageDuringSleep:
- if_not_status AI_USER, STATUS1_SLEEP, Score_Minus8
- end
-
-AI_CBM_CantEscape:
- if_status2 AI_TARGET, STATUS2_ESCAPE_PREVENTION, Score_Minus10
- end
-
-AI_CBM_Curse:
- if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10
- if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus8
- end
-
-AI_CBM_Spikes:
- if_side_affecting AI_TARGET, SIDE_STATUS_SPIKES, Score_Minus10
- end
-
-AI_CBM_Foresight:
- if_status2 AI_TARGET, STATUS2_FORESIGHT, Score_Minus10
- end
-
-AI_CBM_PerishSong:
- if_status3 AI_TARGET, STATUS3_PERISH_SONG, Score_Minus10
- end
-
-AI_CBM_Sandstorm:
- get_weather
- if_equal AI_WEATHER_SANDSTORM, Score_Minus8
- end
-
-AI_CBM_Attract:
- if_status2 AI_TARGET, STATUS2_INFATUATION, Score_Minus10
- get_ability AI_TARGET
- if_equal ABILITY_OBLIVIOUS, Score_Minus10
- get_gender AI_USER
- if_equal MON_MALE, AI_CBM_Attract_CheckIfTargetIsFemale
- if_equal MON_FEMALE, AI_CBM_Attract_CheckIfTargetIsMale
- goto Score_Minus10
-
-AI_CBM_Attract_CheckIfTargetIsFemale:
- get_gender AI_TARGET
- if_equal MON_FEMALE, AI_CBM_Attract_End
- goto Score_Minus10
-
-AI_CBM_Attract_CheckIfTargetIsMale:
- get_gender AI_TARGET
- if_equal MON_MALE, AI_CBM_Attract_End
- goto Score_Minus10
-
-AI_CBM_Attract_End:
- end
-
-AI_CBM_Safeguard:
- if_side_affecting AI_USER, SIDE_STATUS_SAFEGUARD, Score_Minus8
- end
-
-AI_CBM_Memento:
- if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10
- if_stat_level_equal AI_TARGET, STAT_SPATK, MIN_STAT_STAGE, Score_Minus8
-AI_CBM_BatonPass:
- count_usable_party_mons AI_USER
- if_equal 0, Score_Minus10
- end
-
-AI_CBM_RainDance:
- get_weather
- if_equal AI_WEATHER_RAIN, Score_Minus8
- end
-
-AI_CBM_SunnyDay:
- get_weather
- if_equal AI_WEATHER_SUN, Score_Minus8
- end
-
-AI_CBM_FutureSight:
- if_side_affecting AI_TARGET, SIDE_STATUS_FUTUREATTACK, Score_Minus12
- if_side_affecting AI_USER, SIDE_STATUS_FUTUREATTACK, Score_Minus12
- score +5
- end
-
-AI_CBM_FakeOut:
- is_first_turn_for AI_USER
- if_equal FALSE, Score_Minus10
- end
-
-AI_CBM_Stockpile:
- get_stockpile_count AI_USER
- if_equal 3, Score_Minus10
- end
-
-AI_CBM_SpitUpAndSwallow:
- if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
- get_stockpile_count AI_USER
- if_equal 0, Score_Minus10
- end
-
-AI_CBM_Hail:
- get_weather
- if_equal AI_WEATHER_HAIL, Score_Minus8
- end
-
-AI_CBM_Torment:
- if_status2 AI_TARGET, STATUS2_TORMENT, Score_Minus10
- end
-
-AI_CBM_WillOWisp:
- get_ability AI_TARGET
- if_equal ABILITY_WATER_VEIL, Score_Minus10
- if_status AI_TARGET, STATUS1_ANY, Score_Minus10
- if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, Score_Minus10
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, Score_Minus10
- if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
- end
-
-AI_CBM_HelpingHand:
- if_not_double_battle Score_Minus10
- end
-
-AI_CBM_TrickAndKnockOff:
- get_ability AI_TARGET
- if_equal ABILITY_STICKY_HOLD, Score_Minus10
- end
-
-AI_CBM_Ingrain:
- if_status3 AI_USER, STATUS3_ROOTED, Score_Minus10
- end
-
-AI_CBM_Recycle:
- get_used_held_item AI_USER
- if_equal ITEM_NONE, Score_Minus10
- end
-
-AI_CBM_Imprison:
- if_status3 AI_USER, STATUS3_IMPRISONED_OTHERS, Score_Minus10
- end
-
-AI_CBM_Refresh:
- if_not_status AI_USER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, Score_Minus10
- end
-
-AI_CBM_MudSport:
- if_status3 AI_USER, STATUS3_MUDSPORT, Score_Minus10
- end
-
-AI_CBM_Tickle:
- if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10
- if_stat_level_equal AI_TARGET, STAT_DEF, MIN_STAT_STAGE, Score_Minus8
- end
-
-AI_CBM_CosmicPower:
- if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus10
- if_stat_level_equal AI_USER, STAT_SPDEF, MAX_STAT_STAGE, Score_Minus8
- end
-
-AI_CBM_BulkUp:
- if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10
- if_stat_level_equal AI_USER, STAT_DEF, MAX_STAT_STAGE, Score_Minus8
- end
-
-AI_CBM_WaterSport:
- if_status3 AI_USER, STATUS3_WATERSPORT, Score_Minus10
- end
-
-AI_CBM_CalmMind:
- if_stat_level_equal AI_USER, STAT_SPATK, MAX_STAT_STAGE, Score_Minus10
- if_stat_level_equal AI_USER, STAT_SPDEF, MAX_STAT_STAGE, Score_Minus8
- end
-
-AI_CBM_DragonDance:
- if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10
- if_stat_level_equal AI_USER, STAT_SPEED, MAX_STAT_STAGE, Score_Minus8
- end
-
-Score_Minus1:
- score -1
- end
-
-Score_Minus2:
- score -2
- end
-
-Score_Minus3:
- score -3
- end
-
-Score_Minus5:
- score -5
- end
-
-Score_Minus8:
- score -8
- end
-
-Score_Minus10:
- score -10
- end
-
-Score_Minus12:
- score -12
- end
-
-Score_Minus30:
- score -30
- end
-
-Score_Plus1:
- score +1
- end
-
-Score_Plus2:
- score +2
- end
-
-Score_Plus3:
- score +3
- end
-
-Score_Plus5:
- score +5
- end
-
-Score_Plus10:
- score +10
- end
-
-AI_CheckViability:
- if_target_is_ally AI_Ret
- if_effect EFFECT_SLEEP, AI_CV_Sleep
- if_effect EFFECT_ABSORB, AI_CV_Absorb
- if_effect EFFECT_EXPLOSION, AI_CV_SelfKO
- if_effect EFFECT_DREAM_EATER, AI_CV_DreamEater
- if_effect EFFECT_MIRROR_MOVE, AI_CV_MirrorMove
- if_effect EFFECT_ATTACK_UP, AI_CV_AttackUp
- if_effect EFFECT_DEFENSE_UP, AI_CV_DefenseUp
- if_effect EFFECT_SPEED_UP, AI_CV_SpeedUp
- if_effect EFFECT_SPECIAL_ATTACK_UP, AI_CV_SpAtkUp
- if_effect EFFECT_SPECIAL_DEFENSE_UP, AI_CV_SpDefUp
- if_effect EFFECT_ACCURACY_UP, AI_CV_AccuracyUp
- if_effect EFFECT_EVASION_UP, AI_CV_EvasionUp
- if_effect EFFECT_ALWAYS_HIT, AI_CV_AlwaysHit
- if_effect EFFECT_ATTACK_DOWN, AI_CV_AttackDown
- if_effect EFFECT_DEFENSE_DOWN, AI_CV_DefenseDown
- if_effect EFFECT_SPEED_DOWN, AI_CV_SpeedDown
- if_effect EFFECT_SPECIAL_ATTACK_DOWN, AI_CV_SpAtkDown
- if_effect EFFECT_SPECIAL_DEFENSE_DOWN, AI_CV_SpDefDown
- if_effect EFFECT_ACCURACY_DOWN, AI_CV_AccuracyDown
- if_effect EFFECT_EVASION_DOWN, AI_CV_EvasionDown
- if_effect EFFECT_HAZE, AI_CV_Haze
- if_effect EFFECT_BIDE, AI_CV_Bide
- if_effect EFFECT_ROAR, AI_CV_Roar
- if_effect EFFECT_CONVERSION, AI_CV_Conversion
- if_effect EFFECT_RESTORE_HP, AI_CV_Heal
- if_effect EFFECT_TOXIC, AI_CV_Toxic
- if_effect EFFECT_LIGHT_SCREEN, AI_CV_LightScreen
- if_effect EFFECT_REST, AI_CV_Rest
- if_effect EFFECT_OHKO, AI_CV_OneHitKO
- if_effect EFFECT_RAZOR_WIND, AI_CV_ChargeUpMove
- if_effect EFFECT_SUPER_FANG, AI_CV_SuperFang
- if_effect EFFECT_TRAP, AI_CV_Trap
- if_effect EFFECT_HIGH_CRITICAL, AI_CV_HighCrit
- if_effect EFFECT_CONFUSE, AI_CV_Confuse
- if_effect EFFECT_ATTACK_UP_2, AI_CV_AttackUp
- if_effect EFFECT_DEFENSE_UP_2, AI_CV_DefenseUp
- if_effect EFFECT_SPEED_UP_2, AI_CV_SpeedUp
- if_effect EFFECT_SPECIAL_ATTACK_UP_2, AI_CV_SpAtkUp
- if_effect EFFECT_SPECIAL_DEFENSE_UP_2, AI_CV_SpDefUp
- if_effect EFFECT_ACCURACY_UP_2, AI_CV_AccuracyUp
- if_effect EFFECT_EVASION_UP_2, AI_CV_EvasionUp
- if_effect EFFECT_ATTACK_DOWN_2, AI_CV_AttackDown
- if_effect EFFECT_DEFENSE_DOWN_2, AI_CV_DefenseDown
- if_effect EFFECT_SPEED_DOWN_2, AI_CV_SpeedDown
- if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, AI_CV_SpAtkDown
- if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, AI_CV_SpDefDown
- if_effect EFFECT_ACCURACY_DOWN_2, AI_CV_AccuracyDown
- if_effect EFFECT_EVASION_DOWN_2, AI_CV_EvasionDown
- if_effect EFFECT_REFLECT, AI_CV_Reflect
- if_effect EFFECT_POISON, AI_CV_Poison
- if_effect EFFECT_PARALYZE, AI_CV_Paralyze
- if_effect EFFECT_SWAGGER, AI_CV_Swagger
- if_effect EFFECT_SPEED_DOWN_HIT, AI_CV_SpeedDownFromChance
- if_effect EFFECT_SKY_ATTACK, AI_CV_ChargeUpMove
- if_effect EFFECT_VITAL_THROW, AI_CV_VitalThrow
- if_effect EFFECT_SUBSTITUTE, AI_CV_Substitute
- if_effect EFFECT_RECHARGE, AI_CV_Recharge
- if_effect EFFECT_LEECH_SEED, AI_CV_Toxic
- if_effect EFFECT_DISABLE, AI_CV_Disable
- if_effect EFFECT_COUNTER, AI_CV_Counter
- if_effect EFFECT_ENCORE, AI_CV_Encore
- if_effect EFFECT_PAIN_SPLIT, AI_CV_PainSplit
- if_effect EFFECT_SNORE, AI_CV_Snore
- if_effect EFFECT_LOCK_ON, AI_CV_LockOn
- if_effect EFFECT_SLEEP_TALK, AI_CV_SleepTalk
- if_effect EFFECT_DESTINY_BOND, AI_CV_DestinyBond
- if_effect EFFECT_FLAIL, AI_CV_Flail
- if_effect EFFECT_HEAL_BELL, AI_CV_HealBell
- if_effect EFFECT_THIEF, AI_CV_Thief
- if_effect EFFECT_MEAN_LOOK, AI_CV_Trap
- if_effect EFFECT_MINIMIZE, AI_CV_EvasionUp
- if_effect EFFECT_CURSE, AI_CV_Curse
- if_effect EFFECT_PROTECT, AI_CV_Protect
- if_effect EFFECT_FORESIGHT, AI_CV_Foresight
- if_effect EFFECT_ENDURE, AI_CV_Endure
- if_effect EFFECT_BATON_PASS, AI_CV_BatonPass
- if_effect EFFECT_PURSUIT, AI_CV_Pursuit
- if_effect EFFECT_MORNING_SUN, AI_CV_HealWeather
- if_effect EFFECT_SYNTHESIS, AI_CV_HealWeather
- if_effect EFFECT_MOONLIGHT, AI_CV_HealWeather
- if_effect EFFECT_RAIN_DANCE, AI_CV_RainDance
- if_effect EFFECT_SUNNY_DAY, AI_CV_SunnyDay
- if_effect EFFECT_BELLY_DRUM, AI_CV_BellyDrum
- if_effect EFFECT_PSYCH_UP, AI_CV_PsychUp
- if_effect EFFECT_MIRROR_COAT, AI_CV_MirrorCoat
- if_effect EFFECT_SKULL_BASH, AI_CV_ChargeUpMove
- if_effect EFFECT_SOLAR_BEAM, AI_CV_ChargeUpMove
- if_effect EFFECT_SEMI_INVULNERABLE, AI_CV_SemiInvulnerable
- if_effect EFFECT_SOFTBOILED, AI_CV_Heal
- if_effect EFFECT_FAKE_OUT, AI_CV_FakeOut
- if_effect EFFECT_SPIT_UP, AI_CV_SpitUp
- if_effect EFFECT_SWALLOW, AI_CV_Heal
- if_effect EFFECT_HAIL, AI_CV_Hail
- if_effect EFFECT_FLATTER, AI_CV_Flatter
- if_effect EFFECT_MEMENTO, AI_CV_SelfKO
- if_effect EFFECT_FACADE, AI_CV_Facade
- if_effect EFFECT_FOCUS_PUNCH, AI_CV_FocusPunch
- if_effect EFFECT_SMELLINGSALT, AI_CV_SmellingSalt
- if_effect EFFECT_TRICK, AI_CV_Trick
- if_effect EFFECT_ROLE_PLAY, AI_CV_ChangeSelfAbility
- if_effect EFFECT_SUPERPOWER, AI_CV_Superpower
- if_effect EFFECT_MAGIC_COAT, AI_CV_MagicCoat
- if_effect EFFECT_RECYCLE, AI_CV_Recycle
- if_effect EFFECT_REVENGE, AI_CV_Revenge
- if_effect EFFECT_BRICK_BREAK, AI_CV_BrickBreak
- if_effect EFFECT_KNOCK_OFF, AI_CV_KnockOff
- if_effect EFFECT_ENDEAVOR, AI_CV_Endeavor
- if_effect EFFECT_ERUPTION, AI_CV_Eruption
- if_effect EFFECT_SKILL_SWAP, AI_CV_ChangeSelfAbility
- if_effect EFFECT_IMPRISON, AI_CV_Imprison
- if_effect EFFECT_REFRESH, AI_CV_Refresh
- if_effect EFFECT_SNATCH, AI_CV_Snatch
- if_effect EFFECT_BLAZE_KICK, AI_CV_HighCrit
- if_effect EFFECT_MUD_SPORT, AI_CV_MudSport
- if_effect EFFECT_OVERHEAT, AI_CV_Overheat
- if_effect EFFECT_TICKLE, AI_CV_DefenseDown
- if_effect EFFECT_COSMIC_POWER, AI_CV_SpDefUp
- if_effect EFFECT_BULK_UP, AI_CV_DefenseUp
- if_effect EFFECT_POISON_TAIL, AI_CV_HighCrit
- if_effect EFFECT_WATER_SPORT, AI_CV_WaterSport
- if_effect EFFECT_CALM_MIND, AI_CV_SpDefUp
- if_effect EFFECT_DRAGON_DANCE, AI_CV_DragonDance
- end
-
-AI_CV_Sleep:
- if_has_move_with_effect AI_TARGET, EFFECT_DREAM_EATER, AI_CV_SleepEncourageSlpDamage
- if_has_move_with_effect AI_TARGET, EFFECT_NIGHTMARE, AI_CV_SleepEncourageSlpDamage
- goto AI_CV_Sleep_End
-
-AI_CV_SleepEncourageSlpDamage:
- if_random_less_than 128, AI_CV_Sleep_End
- score +1
-AI_CV_Sleep_End:
- end
-
-AI_CV_Absorb:
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_AbsorbEncourageMaybe
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_AbsorbEncourageMaybe
- goto AI_CV_Absorb_End
-
-AI_CV_AbsorbEncourageMaybe:
- if_random_less_than 50, AI_CV_Absorb_End
- score -3
-AI_CV_Absorb_End:
- end
-
-AI_CV_SelfKO:
- if_stat_level_less_than AI_TARGET, STAT_EVASION, 7, AI_CV_SelfKO_Encourage1
- score -1
- if_stat_level_less_than AI_TARGET, STAT_EVASION, 10, AI_CV_SelfKO_Encourage1
- if_random_less_than 128, AI_CV_SelfKO_Encourage1
- score -1
-AI_CV_SelfKO_Encourage1:
- if_hp_less_than AI_USER, 80, AI_CV_SelfKO_Encourage2
- if_target_faster AI_CV_SelfKO_Encourage2
- if_random_less_than 50, AI_CV_SelfKO_End
- goto Score_Minus3
-
-AI_CV_SelfKO_Encourage2:
- if_hp_more_than AI_USER, 50, AI_CV_SelfKO_Encourage4
- if_random_less_than 128, AI_CV_SelfKO_Encourage3
- score +1
-AI_CV_SelfKO_Encourage3:
- if_hp_more_than AI_USER, 30, AI_CV_SelfKO_End
- if_random_less_than 50, AI_CV_SelfKO_End
- score +1
- goto AI_CV_SelfKO_End
-
-AI_CV_SelfKO_Encourage4:
- if_random_less_than 50, AI_CV_SelfKO_End
- score -1
-AI_CV_SelfKO_End:
- end
-
-AI_CV_DreamEater:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_DreamEater_ScoreDown1
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_DreamEater_ScoreDown1
- goto AI_CV_DreamEater_End
-
-AI_CV_DreamEater_ScoreDown1:
- score -1
-AI_CV_DreamEater_End:
- end
-
-AI_CV_MirrorMove:
- if_target_faster AI_CV_MirrorMove2
- get_last_used_bank_move AI_TARGET
- if_not_in_hwords AI_CV_MirrorMove_EncouragedMovesToMirror, AI_CV_MirrorMove2
- if_random_less_than 128, AI_CV_MirrorMove_End
- score +2
- goto AI_CV_MirrorMove_End
-
-AI_CV_MirrorMove2:
- get_last_used_bank_move AI_TARGET
- if_in_hwords AI_CV_MirrorMove_EncouragedMovesToMirror, AI_CV_MirrorMove_End
- if_random_less_than 80, AI_CV_MirrorMove_End
- score -1
-AI_CV_MirrorMove_End:
- end
-
-AI_CV_MirrorMove_EncouragedMovesToMirror:
- .2byte MOVE_SLEEP_POWDER
- .2byte MOVE_LOVELY_KISS
- .2byte MOVE_SPORE
- .2byte MOVE_HYPNOSIS
- .2byte MOVE_SING
- .2byte MOVE_GRASS_WHISTLE
- .2byte MOVE_SHADOW_PUNCH
- .2byte MOVE_SAND_ATTACK
- .2byte MOVE_SMOKESCREEN
- .2byte MOVE_TOXIC
- .2byte MOVE_GUILLOTINE
- .2byte MOVE_HORN_DRILL
- .2byte MOVE_FISSURE
- .2byte MOVE_SHEER_COLD
- .2byte MOVE_CROSS_CHOP
- .2byte MOVE_AEROBLAST
- .2byte MOVE_CONFUSE_RAY
- .2byte MOVE_SWEET_KISS
- .2byte MOVE_SCREECH
- .2byte MOVE_COTTON_SPORE
- .2byte MOVE_SCARY_FACE
- .2byte MOVE_FAKE_TEARS
- .2byte MOVE_METAL_SOUND
- .2byte MOVE_THUNDER_WAVE
- .2byte MOVE_GLARE
- .2byte MOVE_POISON_POWDER
- .2byte MOVE_SHADOW_BALL
- .2byte MOVE_DYNAMIC_PUNCH
- .2byte MOVE_HYPER_BEAM
- .2byte MOVE_EXTREME_SPEED
- .2byte MOVE_THIEF
- .2byte MOVE_COVET
- .2byte MOVE_ATTRACT
- .2byte MOVE_SWAGGER
- .2byte MOVE_TORMENT
- .2byte MOVE_FLATTER
- .2byte MOVE_TRICK
- .2byte MOVE_SUPERPOWER
- .2byte MOVE_SKILL_SWAP
- .2byte -1
-
-AI_CV_AttackUp:
- if_stat_level_less_than AI_USER, STAT_ATK, 9, AI_CV_AttackUp2
- if_random_less_than 100, AI_CV_AttackUp3
- score -1
- goto AI_CV_AttackUp3
-
-AI_CV_AttackUp2:
- if_hp_not_equal AI_USER, 100, AI_CV_AttackUp3
- if_random_less_than 128, AI_CV_AttackUp3
- score +2
-AI_CV_AttackUp3:
- if_hp_more_than AI_USER, 70, AI_CV_AttackUp_End
- if_hp_less_than AI_USER, 40, AI_CV_AttackUp_ScoreDown2
- if_random_less_than 40, AI_CV_AttackUp_End
-AI_CV_AttackUp_ScoreDown2:
- score -2
-AI_CV_AttackUp_End:
- end
-
-AI_CV_DefenseUp:
- if_stat_level_less_than AI_USER, STAT_DEF, 9, AI_CV_DefenseUp2
- if_random_less_than 100, AI_CV_DefenseUp3
- score -1
- goto AI_CV_DefenseUp3
-
-AI_CV_DefenseUp2:
- if_hp_not_equal AI_USER, 100, AI_CV_DefenseUp3
- if_random_less_than 128, AI_CV_DefenseUp3
- score +2
-AI_CV_DefenseUp3:
- if_hp_less_than AI_USER, 70, AI_CV_DefenseUp4
- if_random_less_than 200, AI_CV_DefenseUp_End
-AI_CV_DefenseUp4:
- if_hp_less_than AI_USER, 40, AI_CV_DefenseUp_ScoreDown2
- get_last_used_bank_move AI_TARGET
- get_move_power_from_result
- if_equal 0, AI_CV_DefenseUp5
- get_last_used_bank_move AI_TARGET
- get_move_type_from_result
- if_not_in_bytes AI_CV_DefenseUp_PhysicalTypes, AI_CV_DefenseUp_ScoreDown2
- if_random_less_than 60, AI_CV_DefenseUp_End
-AI_CV_DefenseUp5:
- if_random_less_than 60, AI_CV_DefenseUp_End
-AI_CV_DefenseUp_ScoreDown2:
- score -2
-AI_CV_DefenseUp_End:
- end
-
-AI_CV_DefenseUp_PhysicalTypes:
- .byte TYPE_NORMAL
- .byte TYPE_FIGHTING
- .byte TYPE_POISON
- .byte TYPE_GROUND
- .byte TYPE_FLYING
- .byte TYPE_ROCK
- .byte TYPE_BUG
- .byte TYPE_GHOST
- .byte TYPE_STEEL
- .byte -1
-
-AI_CV_SpeedUp:
- if_target_faster AI_CV_SpeedUp2
- score -3
- goto AI_CV_SpeedUp_End
-
-AI_CV_SpeedUp2:
- if_random_less_than 70, AI_CV_SpeedUp_End
- score +3
-AI_CV_SpeedUp_End:
- end
-
-AI_CV_SpAtkUp:
- if_stat_level_less_than AI_USER, STAT_SPATK, 9, AI_CV_SpAtkUp2
- if_random_less_than 100, AI_CV_SpAtkUp3
- score -1
- goto AI_CV_SpAtkUp3
-
-AI_CV_SpAtkUp2:
- if_hp_not_equal AI_USER, 100, AI_CV_SpAtkUp3
- if_random_less_than 128, AI_CV_SpAtkUp3
- score +2
-AI_CV_SpAtkUp3:
- if_hp_more_than AI_USER, 70, AI_CV_SpAtkUp_End
- if_hp_less_than AI_USER, 40, AI_CV_SpAtkUp_ScoreDown2
- if_random_less_than 70, AI_CV_SpAtkUp_End
-AI_CV_SpAtkUp_ScoreDown2:
- score -2
-AI_CV_SpAtkUp_End:
- end
-
-AI_CV_SpDefUp:
- if_stat_level_less_than AI_USER, STAT_SPDEF, 9, AI_CV_SpDefUp2
- if_random_less_than 100, AI_CV_SpDefUp3
- score -1
- goto AI_CV_SpDefUp3
-
-AI_CV_SpDefUp2:
- if_hp_not_equal AI_USER, 100, AI_CV_SpDefUp3
- if_random_less_than 128, AI_CV_SpDefUp3
- score +2
-AI_CV_SpDefUp3:
- if_hp_less_than AI_USER, 70, AI_CV_SpDefUp4
- if_random_less_than 200, AI_CV_SpDefUp_End
-AI_CV_SpDefUp4:
- if_hp_less_than AI_USER, 40, AI_CV_SpDefUp_ScoreDown2
- get_last_used_bank_move AI_TARGET
- get_move_power_from_result
- if_equal 0, AI_CV_SpDefUp5
- get_last_used_bank_move AI_TARGET
- get_move_type_from_result
- if_in_bytes AI_CV_SpDefUp_PhysicalTypes, AI_CV_SpDefUp_ScoreDown2
- if_random_less_than 60, AI_CV_SpDefUp_End
-AI_CV_SpDefUp5:
- if_random_less_than 60, AI_CV_SpDefUp_End
-AI_CV_SpDefUp_ScoreDown2:
- score -2
-AI_CV_SpDefUp_End:
- end
-
-AI_CV_SpDefUp_PhysicalTypes:
- .byte TYPE_NORMAL
- .byte TYPE_FIGHTING
- .byte TYPE_POISON
- .byte TYPE_GROUND
- .byte TYPE_FLYING
- .byte TYPE_ROCK
- .byte TYPE_BUG
- .byte TYPE_GHOST
- .byte TYPE_STEEL
- .byte -1
-
-AI_CV_AccuracyUp:
- if_stat_level_less_than AI_USER, STAT_ACC, 9, AI_CV_AccuracyUp2
- if_random_less_than 50, AI_CV_AccuracyUp2
- score -2
-AI_CV_AccuracyUp2:
- if_hp_more_than AI_USER, 70, AI_CV_AccuracyUp_End
- score -2
-AI_CV_AccuracyUp_End:
- end
-
-AI_CV_EvasionUp:
- if_hp_less_than AI_USER, 90, AI_CV_EvasionUp2
- if_random_less_than 100, AI_CV_EvasionUp2
- score +3
-AI_CV_EvasionUp2:
- if_stat_level_less_than AI_USER, STAT_EVASION, 9, AI_CV_EvasionUp3
- if_random_less_than 128, AI_CV_EvasionUp3
- score -1
-AI_CV_EvasionUp3:
- if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_EvasionUp5
- if_hp_more_than AI_USER, 50, AI_CV_EvasionUp4
- if_random_less_than 80, AI_CV_EvasionUp5
-AI_CV_EvasionUp4:
- if_random_less_than 50, AI_CV_EvasionUp5
- score +3
-AI_CV_EvasionUp5:
- if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_EvasionUp6
- if_random_less_than 70, AI_CV_EvasionUp6
- score +3
-AI_CV_EvasionUp6:
- if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_EvasionUp7
- if_random_less_than 128, AI_CV_EvasionUp7
- score +2
-AI_CV_EvasionUp7:
- if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_EvasionUp8
- if_random_less_than 70, AI_CV_EvasionUp8
- score +3
-AI_CV_EvasionUp8:
- if_hp_more_than AI_USER, 70, AI_CV_EvasionUp_End
- if_stat_level_equal AI_USER, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CV_EvasionUp_End
- if_hp_less_than AI_USER, 40, AI_CV_EvasionUp_ScoreDown2
- if_hp_less_than AI_TARGET, 40, AI_CV_EvasionUp_ScoreDown2
- if_random_less_than 70, AI_CV_EvasionUp_End
-AI_CV_EvasionUp_ScoreDown2:
- score -2
-AI_CV_EvasionUp_End:
- end
-
-AI_CV_AlwaysHit:
- if_stat_level_more_than AI_TARGET, STAT_EVASION, 10, AI_CV_AlwaysHit_ScoreUp1
- if_stat_level_less_than AI_USER, STAT_ACC, 2, AI_CV_AlwaysHit_ScoreUp1
- if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_AlwaysHit2
- if_stat_level_less_than AI_USER, STAT_ACC, 4, AI_CV_AlwaysHit2
- goto AI_CV_AlwaysHit_End
-
-AI_CV_AlwaysHit_ScoreUp1:
- score +1
-AI_CV_AlwaysHit2:
- if_random_less_than 100, AI_CV_AlwaysHit_End
- score +1
-AI_CV_AlwaysHit_End:
- end
-
-AI_CV_AttackDown:
- if_stat_level_equal AI_TARGET, STAT_ATK, DEFAULT_STAT_STAGE, AI_CV_AttackDown3
- score -1
- if_hp_more_than AI_USER, 90, AI_CV_AttackDown2
- score -1
-AI_CV_AttackDown2:
- if_stat_level_more_than AI_TARGET, STAT_ATK, 3, AI_CV_AttackDown3
- if_random_less_than 50, AI_CV_AttackDown3
- score -2
-AI_CV_AttackDown3:
- if_hp_more_than AI_TARGET, 70, AI_CV_AttackDown4
- score -2
-AI_CV_AttackDown4:
- get_target_type1
- if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End
- get_target_type2
- if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End
- if_random_less_than 50, AI_CV_AttackDown_End
- score -2
-AI_CV_AttackDown_End:
- end
-
-AI_CV_AttackDown_UnknownTypeList:
- .byte TYPE_NORMAL
- .byte TYPE_FIGHTING
- .byte TYPE_GROUND
- .byte TYPE_ROCK
- .byte TYPE_BUG
- .byte TYPE_STEEL
- .byte -1
-
-AI_CV_DefenseDown:
- if_hp_less_than AI_USER, 70, AI_CV_DefenseDown2
- if_stat_level_more_than AI_TARGET, STAT_DEF, 3, AI_CV_DefenseDown3
-AI_CV_DefenseDown2:
- if_random_less_than 50, AI_CV_DefenseDown3
- score -2
-AI_CV_DefenseDown3:
- if_hp_more_than AI_TARGET, 70, AI_CV_DefenseDown_End
- score -2
-AI_CV_DefenseDown_End:
- end
-
-AI_CV_SpeedDownFromChance:
- if_move MOVE_ICY_WIND, AI_CV_SpeedDown
- if_move MOVE_ROCK_TOMB, AI_CV_SpeedDown
- if_move MOVE_MUD_SHOT, AI_CV_SpeedDown
- end
-
-AI_CV_SpeedDown:
- if_target_faster AI_CV_SpeedDown2
- score -3
- goto AI_CV_SpeedDown_End
-
-AI_CV_SpeedDown2:
- if_random_less_than 70, AI_CV_SpeedDown_End
- score +2
-AI_CV_SpeedDown_End:
- end
-
-AI_CV_SpAtkDown:
- if_stat_level_equal AI_TARGET, STAT_ATK, DEFAULT_STAT_STAGE, AI_CV_SpAtkDown3
- score -1
- if_hp_more_than AI_USER, 90, AI_CV_SpAtkDown2
- score -1
-AI_CV_SpAtkDown2:
- if_stat_level_more_than AI_TARGET, STAT_SPATK, 3, AI_CV_SpAtkDown3
- if_random_less_than 50, AI_CV_SpAtkDown3
- score -2
-AI_CV_SpAtkDown3:
- if_hp_more_than AI_TARGET, 70, AI_CV_SpAtkDown4
- score -2
-AI_CV_SpAtkDown4:
- get_target_type1
- if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End
- get_target_type2
- if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End
- if_random_less_than 50, AI_CV_SpAtkDown_End
- score -2
-AI_CV_SpAtkDown_End:
- end
-
-AI_CV_SpAtkDown_SpecialTypeList:
- .byte TYPE_FIRE
- .byte TYPE_WATER
- .byte TYPE_GRASS
- .byte TYPE_ELECTRIC
- .byte TYPE_PSYCHIC
- .byte TYPE_ICE
- .byte TYPE_DRAGON
- .byte TYPE_DARK
- .byte -1
-
-AI_CV_SpDefDown:
- if_hp_less_than AI_USER, 70, AI_CV_SpDefDown2
- if_stat_level_more_than AI_TARGET, STAT_SPDEF, 3, AI_CV_SpDefDown3
-AI_CV_SpDefDown2:
- if_random_less_than 50, AI_CV_SpDefDown3
- score -2
-AI_CV_SpDefDown3:
- if_hp_more_than AI_TARGET, 70, AI_CV_SpDefDown_End
- score -2
-AI_CV_SpDefDown_End:
- end
-
-AI_CV_AccuracyDown:
- if_hp_less_than AI_USER, 70, AI_CV_AccuracyDown2
- if_hp_more_than AI_TARGET, 70, AI_CV_AccuracyDown3
-AI_CV_AccuracyDown2:
- if_random_less_than 100, AI_CV_AccuracyDown3
- score -1
-AI_CV_AccuracyDown3:
- if_stat_level_more_than AI_USER, STAT_ACC, 4, AI_CV_AccuracyDown4
- if_random_less_than 80, AI_CV_AccuracyDown4
- score -2
-AI_CV_AccuracyDown4:
- if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_AccuracyDown5
- if_random_less_than 70, AI_CV_AccuracyDown5
- score +2
-AI_CV_AccuracyDown5:
- if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_AccuracyDown6
- if_random_less_than 70, AI_CV_AccuracyDown6
- score +2
-AI_CV_AccuracyDown6:
- if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_AccuracyDown7
- if_random_less_than 128, AI_CV_AccuracyDown7
- score +1
-AI_CV_AccuracyDown7:
- if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_AccuracyDown8
- if_random_less_than 70, AI_CV_AccuracyDown8
- score +2
-AI_CV_AccuracyDown8:
- if_hp_more_than AI_USER, 70, AI_CV_AccuracyDown_End
- if_stat_level_equal AI_TARGET, STAT_ACC, DEFAULT_STAT_STAGE, AI_CV_AccuracyDown_End
- if_hp_less_than AI_USER, 40, AI_CV_AccuracyDown_ScoreDown2
- if_hp_less_than AI_TARGET, 40, AI_CV_AccuracyDown_ScoreDown2
- if_random_less_than 70, AI_CV_AccuracyDown_End
-AI_CV_AccuracyDown_ScoreDown2:
- score -2
-AI_CV_AccuracyDown_End:
- end
-
-AI_CV_EvasionDown:
- if_hp_less_than AI_USER, 70, AI_CV_EvasionDown2
- if_stat_level_more_than AI_TARGET, STAT_EVASION, 3, AI_CV_EvasionDown3
-AI_CV_EvasionDown2:
- if_random_less_than 50, AI_CV_EvasionDown3
- score -2
-AI_CV_EvasionDown3:
- if_hp_more_than AI_TARGET, 70, AI_CV_EvasionDown_End
- score -2
-AI_CV_EvasionDown_End:
- end
-
-AI_CV_Haze:
- if_stat_level_more_than AI_USER, STAT_ATK, 8, AI_CV_Haze2
- if_stat_level_more_than AI_USER, STAT_DEF, 8, AI_CV_Haze2
- if_stat_level_more_than AI_USER, STAT_SPATK, 8, AI_CV_Haze2
- if_stat_level_more_than AI_USER, STAT_SPDEF, 8, AI_CV_Haze2
- if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_Haze2
- if_stat_level_less_than AI_TARGET, STAT_ATK, 4, AI_CV_Haze2
- if_stat_level_less_than AI_TARGET, STAT_DEF, 4, AI_CV_Haze2
- if_stat_level_less_than AI_TARGET, STAT_SPATK, 4, AI_CV_Haze2
- if_stat_level_less_than AI_TARGET, STAT_SPDEF, 4, AI_CV_Haze2
- if_stat_level_less_than AI_TARGET, STAT_ACC, 4, AI_CV_Haze2
- goto AI_CV_Haze3
-
-AI_CV_Haze2:
- if_random_less_than 50, AI_CV_Haze3
- score -3
-AI_CV_Haze3:
- if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_Haze4
- if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_Haze4
- if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_Haze4
- if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_Haze4
- if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Haze4
- if_stat_level_less_than AI_USER, STAT_ATK, 4, AI_CV_Haze4
- if_stat_level_less_than AI_USER, STAT_DEF, 4, AI_CV_Haze4
- if_stat_level_less_than AI_USER, STAT_SPATK, 4, AI_CV_Haze4
- if_stat_level_less_than AI_USER, STAT_SPDEF, 4, AI_CV_Haze4
- if_stat_level_less_than AI_USER, STAT_ACC, 4, AI_CV_Haze4
- if_random_less_than 50, AI_CV_Haze_End
- score -1
- goto AI_CV_Haze_End
-
-AI_CV_Haze4:
- if_random_less_than 50, AI_CV_Haze_End
- score +3
-AI_CV_Haze_End:
- end
-
-AI_CV_Bide:
- if_hp_more_than AI_USER, 90, AI_CV_Bide_End
- score -2
-AI_CV_Bide_End:
- end
-
-AI_CV_Roar:
- if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_Roar2
- if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_Roar2
- if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_Roar2
- if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_Roar2
- if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Roar2
- score -3
- goto AI_CV_Roar_End
-
-AI_CV_Roar2:
- if_random_less_than 128, AI_CV_Roar_End
- score +2
-AI_CV_Roar_End:
- end
-
-AI_CV_Conversion:
- if_hp_more_than AI_USER, 90, AI_CV_Conversion2
- score -2
-AI_CV_Conversion2:
- get_turn_count
- if_equal 0, AI_CV_Conversion_End
- if_random_less_than 200, Score_Minus2
-AI_CV_Conversion_End:
- end
-
-AI_CV_HealWeather:
- get_weather
- if_equal AI_WEATHER_HAIL, AI_CV_HealWeather_ScoreDown2
- if_equal AI_WEATHER_RAIN, AI_CV_HealWeather_ScoreDown2
- if_equal AI_WEATHER_SANDSTORM, AI_CV_HealWeather_ScoreDown2
- goto AI_CV_Heal
-
-AI_CV_HealWeather_ScoreDown2:
- score -2
-AI_CV_Heal:
- if_hp_equal AI_USER, 100, AI_CV_Heal3
- if_target_faster AI_CV_Heal4
- score -8
- goto AI_CV_Heal_End
-
-AI_CV_Heal2:
- if_hp_less_than AI_USER, 50, AI_CV_Heal5
- if_hp_more_than AI_USER, 80, AI_CV_Heal3
- if_random_less_than 70, AI_CV_Heal5
-AI_CV_Heal3:
- score -3
- goto AI_CV_Heal_End
-
-AI_CV_Heal4:
- if_hp_less_than AI_USER, 70, AI_CV_Heal5
- if_random_less_than 30, AI_CV_Heal5
- score -3
- goto AI_CV_Heal_End
-
-AI_CV_Heal5:
- if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Heal6
- if_random_less_than 100, AI_CV_Heal_End
-AI_CV_Heal6:
- if_random_less_than 20, AI_CV_Heal_End
- score +2
-AI_CV_Heal_End:
- end
-
-AI_CV_Toxic:
- if_user_has_no_attacking_moves AI_CV_Toxic3
- if_hp_more_than AI_USER, 50, AI_CV_Toxic2
- if_random_less_than 50, AI_CV_Toxic2
- score -3
-AI_CV_Toxic2:
- if_hp_more_than AI_TARGET, 50, AI_CV_Toxic3
- if_random_less_than 50, AI_CV_Toxic3
- score -3
-AI_CV_Toxic3:
- if_has_move_with_effect AI_USER, EFFECT_SPECIAL_DEFENSE_UP, AI_CV_Toxic4
- if_has_move_with_effect AI_USER, EFFECT_PROTECT, AI_CV_Toxic4
- goto AI_CV_Toxic_End
-
-AI_CV_Toxic4:
- if_random_less_than 60, AI_CV_Toxic_End
- score +2
-AI_CV_Toxic_End:
- end
-
-AI_CV_LightScreen:
- if_hp_less_than AI_USER, 50, AI_CV_LightScreen_ScoreDown2
- get_target_type1
- if_in_bytes AI_CV_LightScreen_SpecialTypeList, AI_CV_LightScreen_End
- get_target_type2
- if_in_bytes AI_CV_LightScreen_SpecialTypeList, AI_CV_LightScreen_End
- if_random_less_than 50, AI_CV_LightScreen_End
-AI_CV_LightScreen_ScoreDown2:
- score -2
-AI_CV_LightScreen_End:
- end
-
-AI_CV_LightScreen_SpecialTypeList:
- .byte TYPE_FIRE
- .byte TYPE_WATER
- .byte TYPE_GRASS
- .byte TYPE_ELECTRIC
- .byte TYPE_PSYCHIC
- .byte TYPE_ICE
- .byte TYPE_DRAGON
- .byte TYPE_DARK
- .byte -1
-
-AI_CV_Rest:
- if_target_faster AI_CV_Rest4
- if_hp_not_equal AI_USER, 100, AI_CV_Rest2
- score -8
- goto AI_CV_Rest_End
-
-AI_CV_Rest2:
- if_hp_less_than AI_USER, 40, AI_CV_Rest6
- if_hp_more_than AI_USER, 50, AI_CV_Rest3
- if_random_less_than 70, AI_CV_Rest6
-AI_CV_Rest3:
- score -3
- goto AI_CV_Rest_End
-
-AI_CV_Rest4:
- if_hp_less_than AI_USER, 60, AI_CV_Rest6
- if_hp_more_than AI_USER, 70, AI_CV_Rest5
- if_random_less_than 50, AI_CV_Rest6
-AI_CV_Rest5:
- score -3
- goto AI_CV_Rest_End
-
-AI_CV_Rest6:
- if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Rest7
- if_random_less_than 50, AI_CV_Rest_End
-AI_CV_Rest7:
- if_random_less_than 10, AI_CV_Rest_End
- score +3
-AI_CV_Rest_End:
- end
-
-AI_CV_OneHitKO:
- end
-
-AI_CV_SuperFang:
- if_hp_more_than AI_TARGET, 50, AI_CV_SuperFang_End
- score -1
-AI_CV_SuperFang_End:
- end
-
-AI_CV_Trap:
- if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Trap2
- if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Trap2
- if_status3 AI_TARGET, STATUS3_PERISH_SONG, AI_CV_Trap2
- if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Trap2
- goto AI_CV_Trap_End
-
-AI_CV_Trap2:
- if_random_less_than 128, AI_CV_Trap_End
- score +1
-AI_CV_Trap_End:
- end
-
-AI_CV_HighCrit:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_HighCrit_End
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_HighCrit_End
- if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CV_HighCrit2
- if_type_effectiveness AI_EFFECTIVENESS_x4, AI_CV_HighCrit2
- if_random_less_than 128, AI_CV_HighCrit_End
-
-AI_CV_HighCrit2:
- if_random_less_than 128, AI_CV_HighCrit_End
- score +1
-AI_CV_HighCrit_End:
- end
-
-AI_CV_Swagger:
- if_has_move AI_USER, MOVE_PSYCH_UP, AI_CV_SwaggerHasPsychUp
-AI_CV_Flatter:
- if_random_less_than 128, AI_CV_Confuse
- score +1
-AI_CV_Confuse:
- if_hp_more_than AI_TARGET, 70, AI_CV_Confuse_End
- if_random_less_than 128, AI_CV_Confuse2
- score -1
-AI_CV_Confuse2:
- if_hp_more_than AI_TARGET, 50, AI_CV_Confuse_End
- score -1
- if_hp_more_than AI_TARGET, 30, AI_CV_Confuse_End
- score -1
-AI_CV_Confuse_End:
- end
-
-AI_CV_SwaggerHasPsychUp:
- if_stat_level_more_than AI_TARGET, STAT_ATK, 3, AI_CV_SwaggerHasPsychUp_Minus5
- score +3
- get_turn_count
- if_not_equal 0, AI_CV_SwaggerHasPsychUp_End
- score +2
- goto AI_CV_SwaggerHasPsychUp_End
-
-AI_CV_SwaggerHasPsychUp_Minus5:
- score -5
-AI_CV_SwaggerHasPsychUp_End:
- end
-
-AI_CV_Reflect:
- if_hp_less_than AI_USER, 50, AI_CV_Reflect_ScoreDown2
- get_target_type1
- if_in_bytes AI_CV_Reflect_PhysicalTypeList, AI_CV_Reflect_End
- get_target_type2
- if_in_bytes AI_CV_Reflect_PhysicalTypeList, AI_CV_Reflect_End
- if_random_less_than 50, AI_CV_Reflect_End
-AI_CV_Reflect_ScoreDown2:
- score -2
-AI_CV_Reflect_End:
- end
-
-AI_CV_Reflect_PhysicalTypeList:
- .byte TYPE_NORMAL
- .byte TYPE_FIGHTING
- .byte TYPE_FLYING
- .byte TYPE_POISON
- .byte TYPE_GROUND
- .byte TYPE_ROCK
- .byte TYPE_BUG
- .byte TYPE_GHOST
- .byte TYPE_STEEL
- .byte -1
-
-AI_CV_Poison:
- if_hp_less_than AI_USER, 50, AI_CV_Poison_ScoreDown1
- if_hp_more_than AI_TARGET, 50, AI_CV_Poison_End
-AI_CV_Poison_ScoreDown1:
- score -1
-AI_CV_Poison_End:
- end
-
-AI_CV_Paralyze:
- if_target_faster AI_CV_Paralyze2
- if_hp_more_than AI_USER, 70, AI_CV_Paralyze_End
- score -1
- goto AI_CV_Paralyze_End
-
-AI_CV_Paralyze2:
- if_random_less_than 20, AI_CV_Paralyze_End
- score +3
-AI_CV_Paralyze_End:
- end
-
-AI_CV_VitalThrow:
- if_target_faster AI_CV_VitalThrow_End
- if_hp_more_than AI_USER, 60, AI_CV_VitalThrow_End
- if_hp_less_than AI_USER, 40, AI_CV_VitalThrow2
- if_random_less_than 180, AI_CV_VitalThrow_End
-AI_CV_VitalThrow2:
- if_random_less_than 50, AI_CV_VitalThrow_End
- score -1
-AI_CV_VitalThrow_End:
- end
-
-AI_CV_Substitute:
- if_hp_more_than AI_USER, 90, AI_CV_Substitute4
- if_hp_more_than AI_USER, 70, AI_CV_Substitute3
- if_hp_more_than AI_USER, 50, AI_CV_Substitute2
- if_random_less_than 100, AI_CV_Substitute2
- score -1
-AI_CV_Substitute2:
- if_random_less_than 100, AI_CV_Substitute3
- score -1
-AI_CV_Substitute3:
- if_random_less_than 100, AI_CV_Substitute4
- score -1
-AI_CV_Substitute4:
- if_target_faster AI_CV_Substitute_End
- get_last_used_bank_move AI_TARGET
- get_move_effect_from_result
- if_equal EFFECT_SLEEP, AI_CV_Substitute5
- if_equal EFFECT_TOXIC, AI_CV_Substitute5
- if_equal EFFECT_POISON, AI_CV_Substitute5
- if_equal EFFECT_PARALYZE, AI_CV_Substitute5
- if_equal EFFECT_WILL_O_WISP, AI_CV_Substitute5
- if_equal EFFECT_CONFUSE, AI_CV_Substitute6
- if_equal EFFECT_LEECH_SEED, AI_CV_Substitute7
- goto AI_CV_Substitute_End
-
-AI_CV_Substitute5:
- if_not_status AI_TARGET, STATUS1_ANY, AI_CV_Substitute8
- goto AI_CV_Substitute_End
-
-AI_CV_Substitute6:
- if_not_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Substitute8
- goto AI_CV_Substitute_End
-
-AI_CV_Substitute7:
- if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Substitute_End
-AI_CV_Substitute8:
- if_random_less_than 100, AI_CV_Substitute_End
- score +1
-AI_CV_Substitute_End:
- end
-
-AI_CV_Recharge:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Recharge_ScoreDown1
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Recharge_ScoreDown1
- if_target_faster AI_CV_Recharge2
- if_hp_more_than AI_USER, 40, AI_CV_Recharge_ScoreDown1
- goto AI_CV_Recharge_End
-
-AI_CV_Recharge2:
- if_hp_less_than AI_USER, 60, AI_CV_Recharge_End
-AI_CV_Recharge_ScoreDown1:
- score -1
-AI_CV_Recharge_End:
- end
-
-AI_CV_Disable:
- if_target_faster AI_CV_Disable_End
- get_last_used_bank_move AI_TARGET
- get_move_power_from_result
- if_equal 0, AI_CV_Disable2
- score +1
- goto AI_CV_Disable_End
-
-AI_CV_Disable2:
- if_random_less_than 100, AI_CV_Disable_End
- score -1
-AI_CV_Disable_End:
- end
-
-AI_CV_Counter:
- if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Counter_ScoreDown1
- if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Counter_ScoreDown1
- if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Counter_ScoreDown1
- if_hp_more_than AI_USER, 30, AI_CV_Counter2
- if_random_less_than 10, AI_CV_Counter2
- score -1
-AI_CV_Counter2:
- if_hp_more_than AI_USER, 50, AI_CV_Counter3
- if_random_less_than 100, AI_CV_Counter3
- score -1
-AI_CV_Counter3:
- if_has_move AI_USER, MOVE_MIRROR_COAT, AI_CV_Counter7
- get_last_used_bank_move AI_TARGET
- get_move_power_from_result
- if_equal 0, AI_CV_Counter5
- if_target_not_taunted AI_CV_Counter4
- if_random_less_than 100, AI_CV_Counter4
- score +1
-AI_CV_Counter4:
- get_last_used_bank_move AI_TARGET
- get_move_type_from_result
- if_not_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_ScoreDown1
- if_random_less_than 100, AI_CV_Counter_End
- score +1
- goto AI_CV_Counter_End
-
-AI_CV_Counter5:
- if_target_not_taunted AI_CV_Counter6
- if_random_less_than 100, AI_CV_Counter6
- score +1
-AI_CV_Counter6:
- get_target_type1
- if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
- get_target_type2
- if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
- if_random_less_than 50, AI_CV_Counter_End
-AI_CV_Counter7:
- if_random_less_than 100, AI_CV_Counter8
- score +4
-AI_CV_Counter8:
- end
-
-AI_CV_Counter_ScoreDown1:
- score -1
-AI_CV_Counter_End:
- end
-
-AI_CV_Counter_PhysicalTypeList:
- .byte TYPE_NORMAL
- .byte TYPE_FIGHTING
- .byte TYPE_FLYING
- .byte TYPE_POISON
- .byte TYPE_GROUND
- .byte TYPE_ROCK
- .byte TYPE_BUG
- .byte TYPE_GHOST
- .byte TYPE_STEEL
- .byte -1
-
-AI_CV_Encore:
- if_any_move_disabled AI_TARGET, AI_CV_Encore2
- if_target_faster AI_CV_Encore_ScoreDown2
- get_last_used_bank_move AI_TARGET
- get_move_effect_from_result
- if_not_in_bytes AI_CV_Encore_EncouragedMovesToEncore, AI_CV_Encore_ScoreDown2
-AI_CV_Encore2:
- if_random_less_than 30, AI_CV_Encore_End
- score +3
- goto AI_CV_Encore_End
-
-AI_CV_Encore_ScoreDown2:
- score -2
-AI_CV_Encore_End:
- end
-
-AI_CV_Encore_EncouragedMovesToEncore:
- .byte EFFECT_DREAM_EATER
- .byte EFFECT_ATTACK_UP
- .byte EFFECT_DEFENSE_UP
- .byte EFFECT_SPEED_UP
- .byte EFFECT_SPECIAL_ATTACK_UP
- .byte EFFECT_HAZE
- .byte EFFECT_ROAR
- .byte EFFECT_CONVERSION
- .byte EFFECT_TOXIC
- .byte EFFECT_LIGHT_SCREEN
- .byte EFFECT_REST
- .byte EFFECT_SUPER_FANG
- .byte EFFECT_SPECIAL_DEFENSE_UP_2
- .byte EFFECT_CONFUSE
- .byte EFFECT_POISON
- .byte EFFECT_PARALYZE
- .byte EFFECT_LEECH_SEED
- .byte EFFECT_SPLASH
- .byte EFFECT_ATTACK_UP_2
- .byte EFFECT_ENCORE
- .byte EFFECT_CONVERSION_2
- .byte EFFECT_LOCK_ON
- .byte EFFECT_HEAL_BELL
- .byte EFFECT_MEAN_LOOK
- .byte EFFECT_NIGHTMARE
- .byte EFFECT_PROTECT
- .byte EFFECT_SKILL_SWAP
- .byte EFFECT_FORESIGHT
- .byte EFFECT_PERISH_SONG
- .byte EFFECT_SANDSTORM
- .byte EFFECT_ENDURE
- .byte EFFECT_SWAGGER
- .byte EFFECT_ATTRACT
- .byte EFFECT_SAFEGUARD
- .byte EFFECT_RAIN_DANCE
- .byte EFFECT_SUNNY_DAY
- .byte EFFECT_BELLY_DRUM
- .byte EFFECT_PSYCH_UP
- .byte EFFECT_FUTURE_SIGHT
- .byte EFFECT_FAKE_OUT
- .byte EFFECT_STOCKPILE
- .byte EFFECT_SPIT_UP
- .byte EFFECT_SWALLOW
- .byte EFFECT_HAIL
- .byte EFFECT_TORMENT
- .byte EFFECT_WILL_O_WISP
- .byte EFFECT_FOLLOW_ME
- .byte EFFECT_CHARGE
- .byte EFFECT_TRICK
- .byte EFFECT_ROLE_PLAY
- .byte EFFECT_INGRAIN
- .byte EFFECT_RECYCLE
- .byte EFFECT_KNOCK_OFF
- .byte EFFECT_SKILL_SWAP
- .byte EFFECT_IMPRISON
- .byte EFFECT_REFRESH
- .byte EFFECT_GRUDGE
- .byte EFFECT_TEETER_DANCE
- .byte EFFECT_MUD_SPORT
- .byte EFFECT_WATER_SPORT
- .byte EFFECT_DRAGON_DANCE
- .byte EFFECT_CAMOUFLAGE
- .byte -1
-
-AI_CV_PainSplit:
- if_hp_less_than AI_TARGET, 80, AI_CV_PainSplit_ScoreDown1
- if_target_faster AI_CV_PainSplit2
- if_hp_more_than AI_USER, 40, AI_CV_PainSplit_ScoreDown1
- score +1
- goto AI_CV_PainSplit_End
-
-AI_CV_PainSplit2:
- if_hp_more_than AI_USER, 60, AI_CV_PainSplit_ScoreDown1
- score +1
- goto AI_CV_PainSplit_End
-
-AI_CV_PainSplit_ScoreDown1:
- score -1
-AI_CV_PainSplit_End:
- end
-
-AI_CV_Snore:
- score +2
- end
-
-AI_CV_LockOn:
- if_random_less_than 128, AI_CV_LockOn_End
- score +2
-AI_CV_LockOn_End:
- end
-
-AI_CV_SleepTalk:
- if_status AI_USER, STATUS1_SLEEP, Score_Plus10
- score -5
- end
-
-AI_CV_DestinyBond:
- score -1
- if_target_faster AI_CV_DestinyBond_End
- if_hp_more_than AI_USER, 70, AI_CV_DestinyBond_End
- if_random_less_than 128, AI_CV_DestinyBond2
- score +1
-AI_CV_DestinyBond2:
- if_hp_more_than AI_USER, 50, AI_CV_DestinyBond_End
- if_random_less_than 128, AI_CV_DestinyBond3
- score +1
-AI_CV_DestinyBond3:
- if_hp_more_than AI_USER, 30, AI_CV_DestinyBond_End
- if_random_less_than 100, AI_CV_DestinyBond_End
- score +2
-AI_CV_DestinyBond_End:
- end
-
-AI_CV_Flail:
- if_target_faster AI_CV_Flail2
- if_hp_more_than AI_USER, 33, AI_CV_Flail_ScoreDown1
- if_hp_more_than AI_USER, 20, AI_CV_Flail_End
- if_hp_less_than AI_USER, 8, AI_CV_Flail_ScoreUp1
- goto AI_CV_Flail3
-
-AI_CV_Flail2:
- if_hp_more_than AI_USER, 60, AI_CV_Flail_ScoreDown1
- if_hp_more_than AI_USER, 40, AI_CV_Flail_End
- goto AI_CV_Flail3
-
-AI_CV_Flail_ScoreUp1:
- score +1
-AI_CV_Flail3:
- if_random_less_than 100, AI_CV_Flail_End
- score +1
- goto AI_CV_Flail_End
-
-AI_CV_Flail_ScoreDown1:
- score -1
-AI_CV_Flail_End:
- end
-
-AI_CV_HealBell:
- if_status AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End
- if_status_in_party AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End
- score -5
-AI_CV_HealBell_End:
- end
-
-AI_CV_Thief:
- get_hold_effect AI_TARGET
- if_not_in_bytes AI_CV_Thief_EncourageItemsToSteal, AI_CV_Thief_ScoreDown2
- if_random_less_than 50, AI_CV_Thief_End
- score +1
- goto AI_CV_Thief_End
-
-AI_CV_Thief_ScoreDown2:
- score -2
-AI_CV_Thief_End:
- end
-
-AI_CV_Thief_EncourageItemsToSteal:
- .byte HOLD_EFFECT_CURE_SLP
- .byte HOLD_EFFECT_CURE_STATUS
- .byte HOLD_EFFECT_RESTORE_HP
- .byte HOLD_EFFECT_EVASION_UP
- .byte HOLD_EFFECT_LEFTOVERS
- .byte HOLD_EFFECT_LIGHT_BALL
- .byte HOLD_EFFECT_THICK_CLUB
- .byte -1
-
-AI_CV_Curse:
- get_user_type1
- if_equal TYPE_GHOST, AI_CV_Curse4
- get_user_type2
- if_equal TYPE_GHOST, AI_CV_Curse4
- if_stat_level_more_than AI_USER, STAT_DEF, 9, AI_CV_Curse_End
- if_random_less_than 128, AI_CV_Curse2
- score +1
-AI_CV_Curse2:
- if_stat_level_more_than AI_USER, STAT_DEF, 7, AI_CV_Curse_End
- if_random_less_than 128, AI_CV_Curse3
- score +1
-AI_CV_Curse3:
- if_stat_level_more_than AI_USER, STAT_DEF, DEFAULT_STAT_STAGE, AI_CV_Curse_End
- if_random_less_than 128, AI_CV_Curse_End
- score +1
- goto AI_CV_Curse_End
-
-AI_CV_Curse4:
- if_hp_more_than AI_USER, 80, AI_CV_Curse_End
- score -1
-AI_CV_Curse_End:
- end
-
-AI_CV_Protect:
- get_protect_count AI_USER
- if_more_than 1, AI_CV_Protect_ScoreDown2
- if_status AI_USER, STATUS1_TOXIC_POISON, AI_CV_Protect3
- if_status2 AI_USER, STATUS2_CURSED, AI_CV_Protect3
- if_status3 AI_USER, STATUS3_PERISH_SONG, AI_CV_Protect3
- if_status2 AI_USER, STATUS2_INFATUATION, AI_CV_Protect3
- if_status3 AI_USER, STATUS3_LEECHSEED, AI_CV_Protect3
- if_status3 AI_USER, STATUS3_YAWN, AI_CV_Protect3
- if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, AI_CV_Protect3
- if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, AI_CV_Protect3
- if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Protect_ScoreUp2
- if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Protect_ScoreUp2
- if_status3 AI_TARGET, STATUS3_PERISH_SONG, AI_CV_Protect_ScoreUp2
- if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Protect_ScoreUp2
- if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Protect_ScoreUp2
- if_status3 AI_TARGET, STATUS3_YAWN, AI_CV_Protect_ScoreUp2
- get_last_used_bank_move AI_TARGET
- get_move_effect_from_result
- if_not_equal EFFECT_LOCK_ON, AI_CV_Protect_ScoreUp2
- goto AI_CV_Protect2
-
-AI_CV_Protect_ScoreUp2:
- score +2
-AI_CV_Protect2:
- if_random_less_than 128, AI_CV_Protect4
- score -1
-AI_CV_Protect4:
- get_protect_count AI_USER
- if_equal 0, AI_CV_Protect_End
- score -1
- if_random_less_than 128, AI_CV_Protect_End
- score -1
- goto AI_CV_Protect_End
-
-AI_CV_Protect3:
- get_last_used_bank_move AI_TARGET
- get_move_effect_from_result
- if_not_equal EFFECT_LOCK_ON, AI_CV_Protect_End
-AI_CV_Protect_ScoreDown2:
- score -2
-AI_CV_Protect_End:
- end
-
-@ BUG: Foresight is only encouraged if the user is Ghost type or
-@ has high evasion, but should check target instead
-AI_CV_Foresight:
-.ifdef BUGFIX
- get_target_type1
- if_equal TYPE_GHOST, AI_CV_Foresight2
- get_target_type2
- if_equal TYPE_GHOST, AI_CV_Foresight2
- if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Foresight3
-.else
- get_user_type1
- if_equal TYPE_GHOST, AI_CV_Foresight2
- get_user_type2
- if_equal TYPE_GHOST, AI_CV_Foresight2
- if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_Foresight3
-.endif
- score -2
- goto AI_CV_Foresight_End
-
-AI_CV_Foresight2:
- if_random_less_than 80, AI_CV_Foresight_End
-AI_CV_Foresight3:
- if_random_less_than 80, AI_CV_Foresight_End
- score +2
-AI_CV_Foresight_End:
- end
-
-AI_CV_Endure:
- if_hp_less_than AI_USER, 4, AI_CV_Endure2
- if_hp_less_than AI_USER, 35, AI_CV_Endure3
-AI_CV_Endure2:
- score -1
- goto AI_CV_Endure_End
-
-AI_CV_Endure3:
- if_random_less_than 70, AI_CV_Endure_End
- score +1
-AI_CV_Endure_End:
- end
-
-AI_CV_BatonPass:
- if_stat_level_more_than AI_USER, STAT_ATK, 8, AI_CV_BatonPass2
- if_stat_level_more_than AI_USER, STAT_DEF, 8, AI_CV_BatonPass2
- if_stat_level_more_than AI_USER, STAT_SPATK, 8, AI_CV_BatonPass2
- if_stat_level_more_than AI_USER, STAT_SPDEF, 8, AI_CV_BatonPass2
- if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_BatonPass2
- goto AI_CV_BatonPass5
-
-AI_CV_BatonPass2:
- if_target_faster AI_CV_BatonPass3
- if_hp_more_than AI_USER, 60, AI_CV_BatonPass_End
- goto AI_CV_BatonPass4
-
-AI_CV_BatonPass3:
- if_hp_more_than AI_USER, 70, AI_CV_BatonPass_End
-AI_CV_BatonPass4:
- if_random_less_than 80, AI_CV_BatonPass_End
- score +2
- goto AI_CV_BatonPass_End
-
-AI_CV_BatonPass5:
- if_stat_level_more_than AI_USER, STAT_ATK, 7, AI_CV_BatonPass7
- if_stat_level_more_than AI_USER, STAT_DEF, 7, AI_CV_BatonPass7
- if_stat_level_more_than AI_USER, STAT_SPATK, 7, AI_CV_BatonPass7
- if_stat_level_more_than AI_USER, STAT_SPDEF, 7, AI_CV_BatonPass7
- if_stat_level_more_than AI_USER, STAT_EVASION, 7, AI_CV_BatonPass7
- goto AI_CV_BatonPass_ScoreDown2
-
-AI_CV_BatonPass7:
- if_target_faster AI_CV_BatonPass8
- if_hp_more_than AI_USER, 60, AI_CV_BatonPass_ScoreDown2
- goto AI_CV_BatonPass_End
-
-AI_CV_BatonPass8:
- if_hp_less_than AI_USER, 70, AI_CV_BatonPass_End
-AI_CV_BatonPass_ScoreDown2:
- score -2
-AI_CV_BatonPass_End:
- end
-
-AI_CV_Pursuit:
- is_first_turn_for AI_USER
- if_not_equal 0, AI_CV_Pursuit_End
- get_target_type1
- if_equal TYPE_GHOST, AI_CV_Pursuit2
- get_target_type1
- if_equal TYPE_PSYCHIC, AI_CV_Pursuit2
- get_target_type2
- if_equal TYPE_GHOST, AI_CV_Pursuit2
- get_target_type2
- if_equal TYPE_PSYCHIC, AI_CV_Pursuit2
- goto AI_CV_Pursuit_End
-
-AI_CV_Pursuit2:
- if_random_less_than 128, AI_CV_Pursuit_End
- score +1
-AI_CV_Pursuit_End:
- end
-
-AI_CV_RainDance:
- if_user_faster AI_CV_RainDance2
- get_ability AI_USER
- if_equal ABILITY_SWIFT_SWIM, AI_CV_RainDance3
-AI_CV_RainDance2:
- if_hp_less_than AI_USER, 40, AI_CV_RainDance_ScoreDown1
- get_weather
- if_equal AI_WEATHER_HAIL, AI_CV_RainDance3
- if_equal AI_WEATHER_SUN, AI_CV_RainDance3
- if_equal AI_WEATHER_SANDSTORM, AI_CV_RainDance3
- get_ability AI_USER
- if_equal ABILITY_RAIN_DISH, AI_CV_RainDance3
- goto AI_CV_RainDance_End
-
-AI_CV_RainDance3:
- score +1
- goto AI_CV_RainDance_End
-
-AI_CV_RainDance_ScoreDown1:
- score -1
-AI_CV_RainDance_End:
- end
-
-AI_CV_SunnyDay:
- if_hp_less_than AI_USER, 40, AI_CV_SunnyDay_ScoreDown1
- get_weather
- if_equal AI_WEATHER_HAIL, AI_CV_SunnyDay2
- if_equal AI_WEATHER_RAIN, AI_CV_SunnyDay2
- if_equal AI_WEATHER_SANDSTORM, AI_CV_SunnyDay2
- goto AI_CV_SunnyDay_End
-
-AI_CV_SunnyDay2:
- score +1
- goto AI_CV_SunnyDay_End
-
-AI_CV_SunnyDay_ScoreDown1:
- score -1
-AI_CV_SunnyDay_End:
- end
-
-AI_CV_BellyDrum:
- if_hp_less_than AI_USER, 90, AI_CV_BellyDrum_ScoreDown2
- goto AI_CV_BellyDrum_End
-
-AI_CV_BellyDrum_ScoreDown2:
- score -2
-AI_CV_BellyDrum_End:
- end
-
-AI_CV_PsychUp:
- if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_PsychUp2
- if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_PsychUp2
- if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_PsychUp2
- if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_PsychUp2
- if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_PsychUp2
- goto AI_CV_PsychUp_ScoreDown2
-
-AI_CV_PsychUp2:
- if_stat_level_less_than AI_USER, STAT_ATK, 7, AI_CV_PsychUp3
- if_stat_level_less_than AI_USER, STAT_DEF, 7, AI_CV_PsychUp3
- if_stat_level_less_than AI_USER, STAT_SPATK, 7, AI_CV_PsychUp3
- if_stat_level_less_than AI_USER, STAT_SPDEF, 7, AI_CV_PsychUp3
- if_stat_level_less_than AI_USER, STAT_EVASION, 7, AI_CV_PsychUp_ScoreUp1
- if_random_less_than 50, AI_CV_PsychUp_End
- goto AI_CV_PsychUp_ScoreDown2
-
-AI_CV_PsychUp_ScoreUp1:
- score +1
-AI_CV_PsychUp3:
- score +1
- end
-
-AI_CV_PsychUp_ScoreDown2:
- score -2
-AI_CV_PsychUp_End:
- end
-
-AI_CV_MirrorCoat:
- if_status AI_TARGET, STATUS1_SLEEP, AI_CV_MirrorCoat_ScoreDown1
- if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_MirrorCoat_ScoreDown1
- if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_MirrorCoat_ScoreDown1
- if_hp_more_than AI_USER, 30, AI_CV_MirrorCoat2
- if_random_less_than 10, AI_CV_MirrorCoat2
- score -1
-AI_CV_MirrorCoat2:
- if_hp_more_than AI_USER, 50, AI_CV_MirrorCoat3
- if_random_less_than 100, AI_CV_MirrorCoat3
- score -1
-AI_CV_MirrorCoat3:
- if_has_move AI_USER, MOVE_COUNTER, AI_CV_MirrorCoat_ScoreUp4
- get_last_used_bank_move AI_TARGET
- get_move_power_from_result
- if_equal 0, AI_CV_MirrorCoat5
- if_target_not_taunted AI_CV_MirrorCoat4
- if_random_less_than 100, AI_CV_MirrorCoat4
- score +1
-AI_CV_MirrorCoat4:
- get_last_used_bank_move AI_TARGET
- get_move_type_from_result
- if_not_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_ScoreDown1
- if_random_less_than 100, AI_CV_MirrorCoat_End
- score +1
- goto AI_CV_MirrorCoat_End
-
-AI_CV_MirrorCoat5:
- if_target_not_taunted AI_CV_MirrorCoat6
- if_random_less_than 100, AI_CV_MirrorCoat6
- score +1
-AI_CV_MirrorCoat6:
- get_target_type1
- if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
- get_target_type2
- if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
- if_random_less_than 50, AI_CV_MirrorCoat_End
-AI_CV_MirrorCoat_ScoreUp4:
- if_random_less_than 100, AI_CV_MirrorCoat_ScoreUp4_End
- score +4
-AI_CV_MirrorCoat_ScoreUp4_End:
- end
-
-AI_CV_MirrorCoat_ScoreDown1:
- score -1
-AI_CV_MirrorCoat_End:
- end
-
-AI_CV_MirrorCoat_SpecialTypeList:
- .byte TYPE_FIRE
- .byte TYPE_WATER
- .byte TYPE_GRASS
- .byte TYPE_ELECTRIC
- .byte TYPE_PSYCHIC
- .byte TYPE_ICE
- .byte TYPE_DRAGON
- .byte TYPE_DARK
- .byte -1
-
-AI_CV_ChargeUpMove:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_ChargeUpMove_ScoreDown2
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_ChargeUpMove_ScoreDown2
- if_has_move_with_effect AI_TARGET, EFFECT_PROTECT, AI_CV_ChargeUpMove_ScoreDown2
- if_hp_more_than AI_USER, 38, AI_CV_ChargeUpMove_End
- score -1
- goto AI_CV_ChargeUpMove_End
-
-AI_CV_ChargeUpMove_ScoreDown2:
- score -2
-AI_CV_ChargeUpMove_End:
- end
-
-AI_CV_SemiInvulnerable:
- if_doesnt_have_move_with_effect AI_TARGET, EFFECT_PROTECT, AI_CV_SemiInvulnerable2
- score -1
- goto AI_CV_SemiInvulnerable_End
-
-@ BUG: The scripts for checking type-resistance to weather for semi-invulnerable moves are swapped
-@ The result is that the AI is encouraged to stall while taking damage from weather
-AI_CV_SemiInvulnerable2:
- if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_SemiInvulnerable_TryEncourage
- if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_SemiInvulnerable_TryEncourage
- if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_SemiInvulnerable_TryEncourage
- get_weather
-.ifdef BUGFIX
- if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckIceType
- if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckSandstormTypes
-.else
- if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckSandstormTypes
- if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckIceType
-.endif
- goto AI_CV_SemiInvulnerable5
-
-AI_CV_SemiInvulnerable_CheckSandstormTypes:
- get_user_type1
- if_in_bytes AI_CV_SandstormResistantTypes, AI_CV_SemiInvulnerable_TryEncourage
- get_user_type2
- if_in_bytes AI_CV_SandstormResistantTypes, AI_CV_SemiInvulnerable_TryEncourage
- goto AI_CV_SemiInvulnerable5
-
-AI_CV_SemiInvulnerable_CheckIceType:
- get_user_type1
- if_equal TYPE_ICE, AI_CV_SemiInvulnerable_TryEncourage
- get_user_type2
- if_equal TYPE_ICE, AI_CV_SemiInvulnerable_TryEncourage
-AI_CV_SemiInvulnerable5:
- if_target_faster AI_CV_SemiInvulnerable_End
- get_last_used_bank_move AI_TARGET
- get_move_effect_from_result
- if_not_equal EFFECT_LOCK_ON, AI_CV_SemiInvulnerable_TryEncourage
- goto AI_CV_SemiInvulnerable_End
-
-AI_CV_SemiInvulnerable_TryEncourage:
- if_random_less_than 80, AI_CV_SemiInvulnerable_End
- score +1
-AI_CV_SemiInvulnerable_End:
- end
-
-AI_CV_SandstormResistantTypes:
- .byte TYPE_GROUND
- .byte TYPE_ROCK
- .byte TYPE_STEEL
- .byte -1
-
-AI_CV_FakeOut:
- score +2
- end
-
-AI_CV_SpitUp:
- get_stockpile_count AI_USER
- if_less_than 2, AI_CV_SpitUp_End
- if_random_less_than 80, AI_CV_SpitUp_End
- score +2
-AI_CV_SpitUp_End:
- end
-
-AI_CV_Hail:
- if_hp_less_than AI_USER, 40, AI_CV_Hail_ScoreDown1
- get_weather
- if_equal AI_WEATHER_SUN, AI_CV_Hail2
- if_equal AI_WEATHER_RAIN, AI_CV_Hail2
- if_equal AI_WEATHER_SANDSTORM, AI_CV_Hail2
- goto AI_CV_Hail_End
-
-AI_CV_Hail2:
- score +1
- goto AI_CV_Hail_End
-
-AI_CV_Hail_ScoreDown1:
- score -1
-AI_CV_Hail_End:
- end
-
-@ BUG: Facade score is increased if the target is statused, but should be if the user is
-AI_CV_Facade:
-.ifdef BUGFIX
- if_not_status AI_USER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End
-.else
- if_not_status AI_TARGET, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End
-.endif
- score +1
-AI_CV_Facade_End:
- end
-
-AI_CV_FocusPunch:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_FocusPunch2
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_FocusPunch2
- if_status AI_TARGET, STATUS1_SLEEP, AI_CV_FocusPunch_ScoreUp1
- if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_FocusPunch3
- if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_FocusPunch3
- is_first_turn_for AI_USER
- if_not_equal 0, AI_CV_FocusPunch_End
- if_random_less_than 100, AI_CV_FocusPunch_End
- score +1
- goto AI_CV_FocusPunch_End
-
-AI_CV_FocusPunch2:
- score -1
- goto AI_CV_FocusPunch_End
-
-AI_CV_FocusPunch3:
- if_random_less_than 100, AI_CV_FocusPunch_End
- if_status2 AI_USER, STATUS2_SUBSTITUTE, Score_Plus5
-AI_CV_FocusPunch_ScoreUp1:
- score +1
-AI_CV_FocusPunch_End:
- end
-
-AI_CV_SmellingSalt:
- if_status AI_TARGET, STATUS1_PARALYSIS, AI_CV_SmellingSalt_ScoreUp1
- goto AI_CV_SmellingSalt_End
-
-AI_CV_SmellingSalt_ScoreUp1:
- score +1
-AI_CV_SmellingSalt_End:
- end
-
-AI_CV_Trick:
- get_hold_effect AI_USER
- if_in_bytes AI_CV_Trick_EffectsToEncourage2, AI_CV_Trick3
- if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick4
-AI_CV_Trick2:
- score -3
- goto AI_CV_Trick_End
-
-AI_CV_Trick3:
- get_hold_effect AI_TARGET
- if_in_bytes AI_CV_Trick_EffectsToEncourage2, AI_CV_Trick2
- score +5
- goto AI_CV_Trick_End
-
-AI_CV_Trick4:
- get_hold_effect AI_TARGET
- if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick2
- if_random_less_than 50, AI_CV_Trick_End
- score +2
-AI_CV_Trick_End:
- end
-
-AI_CV_Trick_EffectsToEncourage:
- .byte HOLD_EFFECT_CONFUSE_SPICY
- .byte HOLD_EFFECT_CONFUSE_DRY
- .byte HOLD_EFFECT_CONFUSE_SWEET
- .byte HOLD_EFFECT_CONFUSE_BITTER
- .byte HOLD_EFFECT_CONFUSE_SOUR
- .byte HOLD_EFFECT_MACHO_BRACE
- .byte HOLD_EFFECT_CHOICE_BAND
- .byte -1
-
-AI_CV_Trick_EffectsToEncourage2:
- .byte HOLD_EFFECT_CHOICE_BAND
- .byte -1
-
-AI_CV_ChangeSelfAbility:
- get_ability AI_USER
- if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility2
- get_ability AI_TARGET
- if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility3
-AI_CV_ChangeSelfAbility2:
- score -1
- goto AI_CV_ChangeSelfAbility_End
-
-AI_CV_ChangeSelfAbility3:
- if_random_less_than 50, AI_CV_ChangeSelfAbility_End
- score +2
-AI_CV_ChangeSelfAbility_End:
- end
-
-AI_CV_ChangeSelfAbility_AbilitiesToEncourage:
- .byte ABILITY_SPEED_BOOST
- .byte ABILITY_BATTLE_ARMOR
- .byte ABILITY_SAND_VEIL
- .byte ABILITY_STATIC
- .byte ABILITY_FLASH_FIRE
- .byte ABILITY_WONDER_GUARD
- .byte ABILITY_EFFECT_SPORE
- .byte ABILITY_SWIFT_SWIM
- .byte ABILITY_HUGE_POWER
- .byte ABILITY_RAIN_DISH
- .byte ABILITY_CUTE_CHARM
- .byte ABILITY_SHED_SKIN
- .byte ABILITY_MARVEL_SCALE
- .byte ABILITY_PURE_POWER
- .byte ABILITY_CHLOROPHYLL
- .byte ABILITY_SHIELD_DUST
- .byte -1
-
-AI_CV_Superpower:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Superpower_ScoreDown1
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Superpower_ScoreDown1
- if_stat_level_less_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE, AI_CV_Superpower_ScoreDown1
- if_target_faster AI_CV_Superpower2
- if_hp_more_than AI_USER, 40, AI_CV_Superpower_ScoreDown1
- goto AI_CV_Superpower_End
-
-AI_CV_Superpower2:
- if_hp_less_than AI_USER, 60, AI_CV_Superpower_End
-AI_CV_Superpower_ScoreDown1:
- score -1
-AI_CV_Superpower_End:
- end
-
-AI_CV_MagicCoat:
- if_hp_more_than AI_TARGET, 30, AI_CV_MagicCoat2
- if_random_less_than 100, AI_CV_MagicCoat2
- score -1
-AI_CV_MagicCoat2:
- is_first_turn_for AI_USER
- if_equal FALSE, AI_CV_MagicCoat4
- if_random_less_than 150, AI_CV_MagicCoat_End
- score +1
- goto AI_CV_MagicCoat_End
-
-AI_CV_MagicCoat3:
- if_random_less_than 50, AI_CV_MagicCoat_End
-AI_CV_MagicCoat4:
- if_random_less_than 30, AI_CV_MagicCoat_End
- score -1
-AI_CV_MagicCoat_End:
- end
-
-AI_CV_Recycle:
- get_used_held_item AI_USER
- if_not_in_bytes AI_CV_Recycle_ItemsToEncourage, AI_CV_Recycle_ScoreDown2
- if_random_less_than 50, AI_CV_Recycle_End
- score +1
- goto AI_CV_Recycle_End
-
-AI_CV_Recycle_ScoreDown2:
- score -2
-AI_CV_Recycle_End:
- end
-
-AI_CV_Recycle_ItemsToEncourage:
- .byte ITEM_CHESTO_BERRY
- .byte ITEM_LUM_BERRY
- .byte ITEM_STARF_BERRY
- .byte -1
-
-AI_CV_Revenge:
- if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Revenge_ScoreDown2
- if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Revenge_ScoreDown2
- if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Revenge_ScoreDown2
- if_random_less_than 180, AI_CV_Revenge_ScoreDown2
- score +2
- goto AI_CV_Revenge_End
-
-AI_CV_Revenge_ScoreDown2:
- score -2
-AI_CV_Revenge_End:
- end
-
-AI_CV_BrickBreak:
- if_side_affecting AI_TARGET, SIDE_STATUS_REFLECT, AI_CV_BrickBreak_ScoreUp1
- goto AI_CV_BrickBreak_End
-
-AI_CV_BrickBreak_ScoreUp1:
- score +1
-AI_CV_BrickBreak_End:
- end
-
-AI_CV_KnockOff:
- if_hp_less_than AI_TARGET, 30, AI_CV_KnockOff_End
- is_first_turn_for AI_USER
- if_more_than 0, AI_CV_KnockOff_End
- if_random_less_than 180, AI_CV_KnockOff_End
- score +1
-AI_CV_KnockOff_End:
- end
-
-AI_CV_Endeavor:
- if_hp_less_than AI_TARGET, 70, AI_CV_Endeavor_ScoreDown1
- if_target_faster AI_CV_Endeavor2
- if_hp_more_than AI_USER, 40, AI_CV_Endeavor_ScoreDown1
- score +1
- goto AI_CV_Endeavor_End
-
-AI_CV_Endeavor2:
- if_hp_more_than AI_USER, 50, AI_CV_Endeavor_ScoreDown1
- score +1
- goto AI_CV_Endeavor_End
-
-AI_CV_Endeavor_ScoreDown1:
- score -1
-AI_CV_Endeavor_End:
- end
-
-AI_CV_Eruption:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Eruption_ScoreDown1
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Eruption_ScoreDown1
- if_target_faster AI_CV_Eruption2
- if_hp_more_than AI_TARGET, 50, AI_CV_Eruption_End
- goto AI_CV_Eruption_ScoreDown1
-
-AI_CV_Eruption2:
- if_hp_more_than AI_TARGET, 70, AI_CV_Eruption_End
-AI_CV_Eruption_ScoreDown1:
- score -1
-AI_CV_Eruption_End:
- end
-
-AI_CV_Imprison:
- is_first_turn_for AI_USER
- if_more_than 0, AI_CV_Imprison_End
- if_random_less_than 100, AI_CV_Imprison_End
- score +2
-AI_CV_Imprison_End:
- end
-
-AI_CV_Refresh:
- if_hp_less_than AI_TARGET, 50, AI_CV_Refresh_ScoreDown1
- goto AI_CV_Refresh_End
-
-AI_CV_Refresh_ScoreDown1:
- score -1
-AI_CV_Refresh_End:
- end
-
-AI_CV_Snatch:
- is_first_turn_for AI_USER
- if_equal TRUE, AI_CV_Snatch3
- if_random_less_than 30, AI_CV_Snatch_End
- if_target_faster AI_CV_Snatch2
- if_hp_not_equal AI_USER, 100, AI_CV_Snatch5
- if_hp_less_than AI_TARGET, 70, AI_CV_Snatch5
- if_random_less_than 60, AI_CV_Snatch_End
- goto AI_CV_Snatch5
-
-AI_CV_Snatch2:
- if_hp_more_than AI_TARGET, 25, AI_CV_Snatch5
- if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, AI_CV_Snatch3
- if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, AI_CV_Snatch3
- goto AI_CV_Snatch4
-
-AI_CV_Snatch3:
- if_random_less_than 150, AI_CV_Snatch_End
- score +2
- goto AI_CV_Snatch_End
-
-AI_CV_Snatch4:
- if_random_less_than 230, AI_CV_Snatch5
- score +1
- goto AI_CV_Snatch_End
-
-AI_CV_Snatch5:
- if_random_less_than 30, AI_CV_Snatch_End
- score -2
-AI_CV_Snatch_End:
- end
-
-AI_CV_MudSport:
- if_hp_less_than AI_USER, 50, AI_CV_MudSport_ScoreDown1
- get_target_type1
- if_equal TYPE_ELECTRIC, AI_CV_MudSport2
- get_target_type2
- if_equal TYPE_ELECTRIC, AI_CV_MudSport2
- goto AI_CV_MudSport_ScoreDown1
-
-AI_CV_MudSport2:
- score +1
- goto AI_CV_MudSport_End
-
-AI_CV_MudSport_ScoreDown1:
- score -1
-AI_CV_MudSport_End:
- end
-
-AI_CV_Overheat:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Overheat_ScoreDown1
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Overheat_ScoreDown1
- if_target_faster AI_CV_Overheat2
- if_hp_more_than AI_USER, 60, AI_CV_Overheat_End
- goto AI_CV_Overheat_ScoreDown1
-
-AI_CV_Overheat2:
- if_hp_more_than AI_USER, 80, AI_CV_Overheat_End
-AI_CV_Overheat_ScoreDown1:
- score -1
-AI_CV_Overheat_End:
- end
-
-AI_CV_WaterSport:
- if_hp_less_than AI_USER, 50, AI_CV_WaterSport_ScoreDown1
- get_target_type1
- if_equal TYPE_FIRE, AI_CV_WaterSport2
- get_target_type2
- if_equal TYPE_FIRE, AI_CV_WaterSport2
- goto AI_CV_WaterSport_ScoreDown1
-
-AI_CV_WaterSport2:
- score +1
- goto AI_CV_WaterSport_End
-
-AI_CV_WaterSport_ScoreDown1:
- score -1
-AI_CV_WaterSport_End:
- end
-
-AI_CV_DragonDance:
- if_target_faster AI_CV_DragonDance2
- if_hp_more_than AI_USER, 50, AI_CV_DragonDance_End
- if_random_less_than 70, AI_CV_DragonDance_End
- score -1
- goto AI_CV_DragonDance_End
-
-AI_CV_DragonDance2:
- if_random_less_than 128, AI_CV_DragonDance_End
- score +1
-AI_CV_DragonDance_End:
- end
-
-AI_TryToFaint:
- if_target_is_ally AI_Ret
- if_can_faint AI_TryToFaint_TryToEncourageQuickAttack
- get_how_powerful_move_is
- if_equal MOVE_NOT_MOST_POWERFUL, Score_Minus1
- if_type_effectiveness AI_EFFECTIVENESS_x4, AI_TryToFaint_DoubleSuperEffective
- end
-
-AI_TryToFaint_DoubleSuperEffective:
- if_random_less_than 80, AI_TryToFaint_End
- score +2
- end
-
-AI_TryToFaint_TryToEncourageQuickAttack:
- if_effect EFFECT_EXPLOSION, AI_TryToFaint_End
- if_not_effect EFFECT_QUICK_ATTACK, AI_TryToFaint_ScoreUp4
- score +2
-AI_TryToFaint_ScoreUp4:
- score +4
-AI_TryToFaint_End:
- end
-
-AI_SetupFirstTurn:
- if_target_is_ally AI_Ret
- get_turn_count
- if_not_equal 0, AI_SetupFirstTurn_End
- get_considered_move_effect
- if_not_in_bytes AI_SetupFirstTurn_SetupEffectsToEncourage, AI_SetupFirstTurn_End
- if_random_less_than 80, AI_SetupFirstTurn_End
- score +2
-AI_SetupFirstTurn_End:
- end
-
-AI_SetupFirstTurn_SetupEffectsToEncourage:
- .byte EFFECT_ATTACK_UP
- .byte EFFECT_DEFENSE_UP
- .byte EFFECT_SPEED_UP
- .byte EFFECT_SPECIAL_ATTACK_UP
- .byte EFFECT_SPECIAL_DEFENSE_UP
- .byte EFFECT_ACCURACY_UP
- .byte EFFECT_EVASION_UP
- .byte EFFECT_ATTACK_DOWN
- .byte EFFECT_DEFENSE_DOWN
- .byte EFFECT_SPEED_DOWN
- .byte EFFECT_SPECIAL_ATTACK_DOWN
- .byte EFFECT_SPECIAL_DEFENSE_DOWN
- .byte EFFECT_ACCURACY_DOWN
- .byte EFFECT_EVASION_DOWN
- .byte EFFECT_CONVERSION
- .byte EFFECT_LIGHT_SCREEN
- .byte EFFECT_SPECIAL_DEFENSE_UP_2
- .byte EFFECT_FOCUS_ENERGY
- .byte EFFECT_CONFUSE
- .byte EFFECT_ATTACK_UP_2
- .byte EFFECT_DEFENSE_UP_2
- .byte EFFECT_SPEED_UP_2
- .byte EFFECT_SPECIAL_ATTACK_UP_2
- .byte EFFECT_SPECIAL_DEFENSE_UP_2
- .byte EFFECT_ACCURACY_UP_2
- .byte EFFECT_EVASION_UP_2
- .byte EFFECT_ATTACK_DOWN_2
- .byte EFFECT_DEFENSE_DOWN_2
- .byte EFFECT_SPEED_DOWN_2
- .byte EFFECT_SPECIAL_ATTACK_DOWN_2
- .byte EFFECT_SPECIAL_DEFENSE_DOWN_2
- .byte EFFECT_ACCURACY_DOWN_2
- .byte EFFECT_EVASION_DOWN_2
- .byte EFFECT_REFLECT
- .byte EFFECT_POISON
- .byte EFFECT_PARALYZE
- .byte EFFECT_SUBSTITUTE
- .byte EFFECT_LEECH_SEED
- .byte EFFECT_MINIMIZE
- .byte EFFECT_CURSE
- .byte EFFECT_SWAGGER
- .byte EFFECT_CAMOUFLAGE
- .byte EFFECT_YAWN
- .byte EFFECT_DEFENSE_CURL
- .byte EFFECT_TORMENT
- .byte EFFECT_FLATTER
- .byte EFFECT_WILL_O_WISP
- .byte EFFECT_INGRAIN
- .byte EFFECT_IMPRISON
- .byte EFFECT_TEETER_DANCE
- .byte EFFECT_TICKLE
- .byte EFFECT_COSMIC_POWER
- .byte EFFECT_BULK_UP
- .byte EFFECT_CALM_MIND
- .byte EFFECT_CAMOUFLAGE
- .byte -1
-
-@ ~60% chance to prefer moves that do 0 or 1 damage, or are in sIgnoredPowerfulMoveEffects
-@ Oddly this group includes moves like Explosion and Eruption, so the AI strategy isn't very coherent
-AI_PreferPowerExtremes:
- if_target_is_ally AI_Ret
- get_how_powerful_move_is
- if_not_equal MOVE_POWER_OTHER, AI_PreferPowerExtremes_End
- if_random_less_than 100, AI_PreferPowerExtremes_End
- score +2
-AI_PreferPowerExtremes_End:
- end
-
-AI_Risky:
- if_target_is_ally AI_Ret
- get_considered_move_effect
- if_not_in_bytes AI_Risky_EffectsToEncourage, AI_Risky_End
- if_random_less_than 128, AI_Risky_End
- score +2
-AI_Risky_End:
- end
-
-AI_Risky_EffectsToEncourage:
- .byte EFFECT_SLEEP
- .byte EFFECT_EXPLOSION
- .byte EFFECT_MIRROR_MOVE
- .byte EFFECT_OHKO
- .byte EFFECT_HIGH_CRITICAL
- .byte EFFECT_CONFUSE
- .byte EFFECT_METRONOME
- .byte EFFECT_PSYWAVE
- .byte EFFECT_COUNTER
- .byte EFFECT_DESTINY_BOND
- .byte EFFECT_SWAGGER
- .byte EFFECT_ATTRACT
- .byte EFFECT_PRESENT
- .byte EFFECT_ALL_STATS_UP_HIT
- .byte EFFECT_BELLY_DRUM
- .byte EFFECT_MIRROR_COAT
- .byte EFFECT_FOCUS_PUNCH
- .byte EFFECT_REVENGE
- .byte EFFECT_TEETER_DANCE
- .byte -1
-
-AI_PreferBatonPass:
- if_target_is_ally AI_Ret
- count_usable_party_mons AI_USER
- if_equal 0, AI_PreferBatonPassEnd
- get_how_powerful_move_is
- if_not_equal MOVE_POWER_OTHER, AI_PreferBatonPassEnd
- if_has_move_with_effect AI_USER, EFFECT_BATON_PASS, AI_PreferBatonPass_GoForBatonPass
- if_random_less_than 80, AI_Risky_End
-AI_PreferBatonPass_GoForBatonPass:
- if_move MOVE_SWORDS_DANCE, AI_PreferBatonPass2
- if_move MOVE_DRAGON_DANCE, AI_PreferBatonPass2
- if_move MOVE_CALM_MIND, AI_PreferBatonPass2
- if_effect EFFECT_PROTECT, AI_PreferBatonPass_End
- if_move MOVE_BATON_PASS, AI_PreferBatonPass_EncourageIfHighStats
- if_random_less_than 20, AI_Risky_End
- score +3
-AI_PreferBatonPass2:
- get_turn_count
- if_equal 0, Score_Plus5
- if_hp_less_than AI_USER, 60, Score_Minus10
- goto Score_Plus1
-
-AI_PreferBatonPass_End:
- get_last_used_bank_move AI_USER
- if_in_hwords sMovesTable_ProtectMoves, Score_Minus2
- score +2
- end
-
-sMovesTable_ProtectMoves:
- .2byte MOVE_PROTECT
- .2byte MOVE_DETECT
- .2byte -1
-
-AI_PreferBatonPass_EncourageIfHighStats:
- get_turn_count
- if_equal 0, Score_Minus2
- if_stat_level_more_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE + 2, Score_Plus3
- if_stat_level_more_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE + 1, Score_Plus2
- if_stat_level_more_than AI_USER, STAT_ATK, DEFAULT_STAT_STAGE, Score_Plus1
- if_stat_level_more_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE + 2, Score_Plus3
- if_stat_level_more_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE + 1, Score_Plus2
- if_stat_level_more_than AI_USER, STAT_SPATK, DEFAULT_STAT_STAGE, Score_Plus1
- end
-
-AI_PreferBatonPassEnd:
- end
-
-AI_DoubleBattle:
- if_target_is_ally AI_TryOnAlly
- if_move MOVE_SKILL_SWAP, AI_DoubleBattleSkillSwap
- get_curr_move_type
- if_move MOVE_EARTHQUAKE, AI_DoubleBattleAllHittingGroundMove
- if_move MOVE_MAGNITUDE, AI_DoubleBattleAllHittingGroundMove
- if_equal TYPE_ELECTRIC, AI_DoubleBattleElectricMove
- if_equal TYPE_FIRE, AI_DoubleBattleFireMove
- get_ability AI_USER
- if_not_equal ABILITY_GUTS, AI_DoubleBattleCheckUserStatus
- if_has_move AI_USER_PARTNER, MOVE_HELPING_HAND, AI_DoubleBattlePartnerHasHelpingHand
- end
-
-AI_DoubleBattlePartnerHasHelpingHand:
- get_how_powerful_move_is
- if_not_equal MOVE_POWER_OTHER, Score_Plus1
- end
-
-AI_DoubleBattleCheckUserStatus:
- if_status AI_USER, STATUS1_ANY, AI_DoubleBattleCheckUserStatus2
- end
-
-AI_DoubleBattleCheckUserStatus2:
- get_how_powerful_move_is
- if_equal MOVE_POWER_OTHER, Score_Minus5
- score +1
- if_equal MOVE_MOST_POWERFUL, Score_Plus2
- end
-
-AI_DoubleBattleAllHittingGroundMove:
- if_ability AI_USER_PARTNER, ABILITY_LEVITATE, Score_Plus2
- if_type AI_USER_PARTNER, TYPE_FLYING, Score_Plus2
- if_type AI_USER_PARTNER, TYPE_FIRE, Score_Minus10
- if_type AI_USER_PARTNER, TYPE_ELECTRIC, Score_Minus10
- if_type AI_USER_PARTNER, TYPE_POISON, Score_Minus10
- if_type AI_USER_PARTNER, TYPE_ROCK, Score_Minus10
- goto Score_Minus3
-
-AI_DoubleBattleSkillSwap:
- get_ability AI_USER
- if_equal ABILITY_TRUANT, Score_Plus5
- get_ability AI_TARGET
- if_equal ABILITY_SHADOW_TAG, Score_Plus2
- if_equal ABILITY_PURE_POWER, Score_Plus2
- end
-
-AI_DoubleBattleElectricMove:
- if_no_ability AI_TARGET_PARTNER, ABILITY_LIGHTNING_ROD, AI_DoubleBattleElectricMoveEnd
- score -2
- if_no_type AI_TARGET_PARTNER, TYPE_GROUND, AI_DoubleBattleElectricMoveEnd
- score -8
-AI_DoubleBattleElectricMoveEnd:
- end
-
-AI_DoubleBattleFireMove:
- if_flash_fired AI_USER, AI_DoubleBattleFireMove2
- end
-
-AI_DoubleBattleFireMove2:
- goto Score_Plus1
-
-AI_TryOnAlly:
- get_how_powerful_move_is
- if_equal MOVE_POWER_OTHER, AI_TryStatusMoveOnAlly
- get_curr_move_type
- if_equal TYPE_FIRE, AI_TryFireMoveOnAlly
-AI_DiscourageOnAlly:
- goto Score_Minus30
-
-AI_TryFireMoveOnAlly:
- if_ability AI_USER_PARTNER, ABILITY_FLASH_FIRE, AI_TryFireMoveOnAlly_FlashFire
- goto AI_DiscourageOnAlly
-
-AI_TryFireMoveOnAlly_FlashFire:
- if_flash_fired AI_USER_PARTNER, AI_DiscourageOnAlly
- goto Score_Plus3
-
-AI_TryStatusMoveOnAlly:
- if_move MOVE_SKILL_SWAP, AI_TrySkillSwapOnAlly
- if_move MOVE_WILL_O_WISP, AI_TryStatusOnAlly
- if_move MOVE_TOXIC, AI_TryStatusOnAlly
- if_move MOVE_HELPING_HAND, AI_TryHelpingHandOnAlly
- if_move MOVE_SWAGGER, AI_TrySwaggerOnAlly
- goto Score_Minus30_
-
-AI_TrySkillSwapOnAlly:
- get_ability AI_TARGET
- if_equal ABILITY_TRUANT, Score_Plus10
- get_ability AI_USER
- if_not_equal ABILITY_LEVITATE, AI_TrySkillSwapOnAlly2
- get_ability AI_TARGET
- if_equal ABILITY_LEVITATE, Score_Minus30_
- get_target_type1
- if_not_equal TYPE_ELECTRIC, AI_TrySkillSwapOnAlly2
- score +1
- get_target_type2
- if_not_equal TYPE_ELECTRIC, AI_TrySkillSwapOnAlly2
- score +1
- end
-
-AI_TrySkillSwapOnAlly2:
- if_not_equal ABILITY_COMPOUND_EYES, Score_Minus30_
- if_has_move AI_USER_PARTNER, MOVE_FIRE_BLAST, AI_TrySkillSwapOnAllyPlus3
- if_has_move AI_USER_PARTNER, MOVE_THUNDER, AI_TrySkillSwapOnAllyPlus3
- if_has_move AI_USER_PARTNER, MOVE_CROSS_CHOP, AI_TrySkillSwapOnAllyPlus3
- if_has_move AI_USER_PARTNER, MOVE_HYDRO_PUMP, AI_TrySkillSwapOnAllyPlus3
- if_has_move AI_USER_PARTNER, MOVE_DYNAMIC_PUNCH, AI_TrySkillSwapOnAllyPlus3
- if_has_move AI_USER_PARTNER, MOVE_BLIZZARD, AI_TrySkillSwapOnAllyPlus3
- if_has_move AI_USER_PARTNER, MOVE_MEGAHORN, AI_TrySkillSwapOnAllyPlus3
- goto Score_Minus30_
-
-AI_TrySkillSwapOnAllyPlus3:
- goto Score_Plus3
-
-AI_TryStatusOnAlly:
- get_ability AI_TARGET
- if_not_equal ABILITY_GUTS, Score_Minus30_
- if_status AI_TARGET, STATUS1_ANY, Score_Minus30_
- if_hp_less_than AI_USER, 91, Score_Minus30_
- goto Score_Plus5
-
-AI_TryHelpingHandOnAlly:
- if_random_less_than 64, Score_Minus1
- goto Score_Plus2
-
-AI_TrySwaggerOnAlly:
- if_holds_item AI_TARGET, ITEM_PERSIM_BERRY, AI_TrySwaggerOnAlly2
- goto Score_Minus30_
-
-AI_TrySwaggerOnAlly2:
- if_stat_level_more_than AI_TARGET, STAT_ATK, 7, AI_TrySwaggerOnAlly_End
- score +3
-AI_TrySwaggerOnAlly_End:
- end
-
-Score_Minus30_:
- score -30
- end
-
-AI_HPAware:
- if_target_is_ally AI_TryOnAlly
- if_hp_more_than AI_USER, 70, AI_HPAware_UserHasHighHP
- if_hp_more_than AI_USER, 30, AI_HPAware_UserHasMediumHP
- get_considered_move_effect
- if_in_bytes AI_HPAware_DiscouragedEffectsWhenLowHP, AI_HPAware_TryToDiscourage
- goto AI_HPAware_ConsiderTarget
-
-AI_HPAware_UserHasHighHP:
- get_considered_move_effect
- if_in_bytes AI_HPAware_DiscouragedEffectsWhenHighHP, AI_HPAware_TryToDiscourage
- goto AI_HPAware_ConsiderTarget
-
-AI_HPAware_UserHasMediumHP:
- get_considered_move_effect
- if_in_bytes AI_HPAware_DiscouragedEffectsWhenMediumHP, AI_HPAware_TryToDiscourage
- goto AI_HPAware_ConsiderTarget
-
-AI_HPAware_TryToDiscourage:
- if_random_less_than 50, AI_HPAware_ConsiderTarget
- score -2
-AI_HPAware_ConsiderTarget:
- if_hp_more_than AI_TARGET, 70, AI_HPAware_TargetHasHighHP
- if_hp_more_than AI_TARGET, 30, AI_HPAware_TargetHasMediumHP
- get_considered_move_effect
- if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetLowHP, AI_HPAware_TargetTryToDiscourage
- goto AI_HPAware_End
-
-AI_HPAware_TargetHasHighHP:
- get_considered_move_effect
- if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetHighHP, AI_HPAware_TargetTryToDiscourage
- goto AI_HPAware_End
-
-AI_HPAware_TargetHasMediumHP:
- get_considered_move_effect
- if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetMediumHP, AI_HPAware_TargetTryToDiscourage
- goto AI_HPAware_End
-
-AI_HPAware_TargetTryToDiscourage:
- if_random_less_than 50, AI_HPAware_End
- score -2
-AI_HPAware_End:
- end
-
-AI_HPAware_DiscouragedEffectsWhenHighHP:
- .byte EFFECT_EXPLOSION
- .byte EFFECT_RESTORE_HP
- .byte EFFECT_REST
- .byte EFFECT_DESTINY_BOND
- .byte EFFECT_FLAIL
- .byte EFFECT_ENDURE
- .byte EFFECT_MORNING_SUN
- .byte EFFECT_SYNTHESIS
- .byte EFFECT_MOONLIGHT
- .byte EFFECT_SOFTBOILED
- .byte EFFECT_MEMENTO
- .byte EFFECT_GRUDGE
- .byte EFFECT_OVERHEAT
- .byte -1
-
-AI_HPAware_DiscouragedEffectsWhenMediumHP:
- .byte EFFECT_EXPLOSION
- .byte EFFECT_ATTACK_UP
- .byte EFFECT_DEFENSE_UP
- .byte EFFECT_SPEED_UP
- .byte EFFECT_SPECIAL_ATTACK_UP
- .byte EFFECT_SPECIAL_DEFENSE_UP
- .byte EFFECT_ACCURACY_UP
- .byte EFFECT_EVASION_UP
- .byte EFFECT_ATTACK_DOWN
- .byte EFFECT_DEFENSE_DOWN
- .byte EFFECT_SPEED_DOWN
- .byte EFFECT_SPECIAL_ATTACK_DOWN
- .byte EFFECT_SPECIAL_DEFENSE_DOWN
- .byte EFFECT_ACCURACY_DOWN
- .byte EFFECT_EVASION_DOWN
- .byte EFFECT_BIDE
- .byte EFFECT_CONVERSION
- .byte EFFECT_LIGHT_SCREEN
- .byte EFFECT_MIST
- .byte EFFECT_FOCUS_ENERGY
- .byte EFFECT_ATTACK_UP_2
- .byte EFFECT_DEFENSE_UP_2
- .byte EFFECT_SPEED_UP_2
- .byte EFFECT_SPECIAL_ATTACK_UP_2
- .byte EFFECT_SPECIAL_DEFENSE_UP_2
- .byte EFFECT_ACCURACY_UP_2
- .byte EFFECT_EVASION_UP_2
- .byte EFFECT_ATTACK_DOWN_2
- .byte EFFECT_DEFENSE_DOWN_2
- .byte EFFECT_SPEED_DOWN_2
- .byte EFFECT_SPECIAL_ATTACK_DOWN_2
- .byte EFFECT_SPECIAL_DEFENSE_DOWN_2
- .byte EFFECT_ACCURACY_DOWN_2
- .byte EFFECT_EVASION_DOWN_2
- .byte EFFECT_CONVERSION_2
- .byte EFFECT_SAFEGUARD
- .byte EFFECT_BELLY_DRUM
- .byte EFFECT_TICKLE
- .byte EFFECT_COSMIC_POWER
- .byte EFFECT_BULK_UP
- .byte EFFECT_CALM_MIND
- .byte EFFECT_DRAGON_DANCE
- .byte -1
-
-AI_HPAware_DiscouragedEffectsWhenLowHP:
- .byte EFFECT_ATTACK_UP
- .byte EFFECT_DEFENSE_UP
- .byte EFFECT_SPEED_UP
- .byte EFFECT_SPECIAL_ATTACK_UP
- .byte EFFECT_SPECIAL_DEFENSE_UP
- .byte EFFECT_ACCURACY_UP
- .byte EFFECT_EVASION_UP
- .byte EFFECT_ATTACK_DOWN
- .byte EFFECT_DEFENSE_DOWN
- .byte EFFECT_SPEED_DOWN
- .byte EFFECT_SPECIAL_ATTACK_DOWN
- .byte EFFECT_SPECIAL_DEFENSE_DOWN
- .byte EFFECT_ACCURACY_DOWN
- .byte EFFECT_EVASION_DOWN
- .byte EFFECT_BIDE
- .byte EFFECT_CONVERSION
- .byte EFFECT_LIGHT_SCREEN
- .byte EFFECT_MIST
- .byte EFFECT_FOCUS_ENERGY
- .byte EFFECT_ATTACK_UP_2
- .byte EFFECT_DEFENSE_UP_2
- .byte EFFECT_SPEED_UP_2
- .byte EFFECT_SPECIAL_ATTACK_UP_2
- .byte EFFECT_SPECIAL_DEFENSE_UP_2
- .byte EFFECT_ACCURACY_UP_2
- .byte EFFECT_EVASION_UP_2
- .byte EFFECT_ATTACK_DOWN_2
- .byte EFFECT_DEFENSE_DOWN_2
- .byte EFFECT_SPEED_DOWN_2
- .byte EFFECT_SPECIAL_ATTACK_DOWN_2
- .byte EFFECT_SPECIAL_DEFENSE_DOWN_2
- .byte EFFECT_ACCURACY_DOWN_2
- .byte EFFECT_EVASION_DOWN_2
- .byte EFFECT_RAGE
- .byte EFFECT_CONVERSION_2
- .byte EFFECT_LOCK_ON
- .byte EFFECT_SAFEGUARD
- .byte EFFECT_BELLY_DRUM
- .byte EFFECT_PSYCH_UP
- .byte EFFECT_MIRROR_COAT
- .byte EFFECT_SOLAR_BEAM
- .byte EFFECT_ERUPTION
- .byte EFFECT_TICKLE
- .byte EFFECT_COSMIC_POWER
- .byte EFFECT_BULK_UP
- .byte EFFECT_CALM_MIND
- .byte EFFECT_DRAGON_DANCE
- .byte -1
-
-AI_HPAware_DiscouragedEffectsWhenTargetHighHP:
- .byte -1
-
-AI_HPAware_DiscouragedEffectsWhenTargetMediumHP:
- .byte EFFECT_ATTACK_UP
- .byte EFFECT_DEFENSE_UP
- .byte EFFECT_SPEED_UP
- .byte EFFECT_SPECIAL_ATTACK_UP
- .byte EFFECT_SPECIAL_DEFENSE_UP
- .byte EFFECT_ACCURACY_UP
- .byte EFFECT_EVASION_UP
- .byte EFFECT_ATTACK_DOWN
- .byte EFFECT_DEFENSE_DOWN
- .byte EFFECT_SPEED_DOWN
- .byte EFFECT_SPECIAL_ATTACK_DOWN
- .byte EFFECT_SPECIAL_DEFENSE_DOWN
- .byte EFFECT_ACCURACY_DOWN
- .byte EFFECT_EVASION_DOWN
- .byte EFFECT_MIST
- .byte EFFECT_FOCUS_ENERGY
- .byte EFFECT_ATTACK_UP_2
- .byte EFFECT_DEFENSE_UP_2
- .byte EFFECT_SPEED_UP_2
- .byte EFFECT_SPECIAL_ATTACK_UP_2
- .byte EFFECT_SPECIAL_DEFENSE_UP_2
- .byte EFFECT_ACCURACY_UP_2
- .byte EFFECT_EVASION_UP_2
- .byte EFFECT_ATTACK_DOWN_2
- .byte EFFECT_DEFENSE_DOWN_2
- .byte EFFECT_SPEED_DOWN_2
- .byte EFFECT_SPECIAL_ATTACK_DOWN_2
- .byte EFFECT_SPECIAL_DEFENSE_DOWN_2
- .byte EFFECT_ACCURACY_DOWN_2
- .byte EFFECT_EVASION_DOWN_2
- .byte EFFECT_POISON
- .byte EFFECT_PAIN_SPLIT
- .byte EFFECT_PERISH_SONG
- .byte EFFECT_SAFEGUARD
- .byte EFFECT_TICKLE
- .byte EFFECT_COSMIC_POWER
- .byte EFFECT_BULK_UP
- .byte EFFECT_CALM_MIND
- .byte EFFECT_DRAGON_DANCE
- .byte -1
-
-AI_HPAware_DiscouragedEffectsWhenTargetLowHP:
- .byte EFFECT_SLEEP
- .byte EFFECT_EXPLOSION
- .byte EFFECT_ATTACK_UP
- .byte EFFECT_DEFENSE_UP
- .byte EFFECT_SPEED_UP
- .byte EFFECT_SPECIAL_ATTACK_UP
- .byte EFFECT_SPECIAL_DEFENSE_UP
- .byte EFFECT_ACCURACY_UP
- .byte EFFECT_EVASION_UP
- .byte EFFECT_ATTACK_DOWN
- .byte EFFECT_DEFENSE_DOWN
- .byte EFFECT_SPEED_DOWN
- .byte EFFECT_SPECIAL_ATTACK_DOWN
- .byte EFFECT_SPECIAL_DEFENSE_DOWN
- .byte EFFECT_ACCURACY_DOWN
- .byte EFFECT_EVASION_DOWN
- .byte EFFECT_BIDE
- .byte EFFECT_CONVERSION
- .byte EFFECT_TOXIC
- .byte EFFECT_LIGHT_SCREEN
- .byte EFFECT_OHKO
- .byte EFFECT_SUPER_FANG //Maybe supposed to be EFFECT_RAZOR_WIND
- .byte EFFECT_SUPER_FANG
- .byte EFFECT_MIST
- .byte EFFECT_FOCUS_ENERGY
- .byte EFFECT_CONFUSE
- .byte EFFECT_ATTACK_UP_2
- .byte EFFECT_DEFENSE_UP_2
- .byte EFFECT_SPEED_UP_2
- .byte EFFECT_SPECIAL_ATTACK_UP_2
- .byte EFFECT_SPECIAL_DEFENSE_UP_2
- .byte EFFECT_ACCURACY_UP_2
- .byte EFFECT_EVASION_UP_2
- .byte EFFECT_ATTACK_DOWN_2
- .byte EFFECT_DEFENSE_DOWN_2
- .byte EFFECT_SPEED_DOWN_2
- .byte EFFECT_SPECIAL_ATTACK_DOWN_2
- .byte EFFECT_SPECIAL_DEFENSE_DOWN_2
- .byte EFFECT_ACCURACY_DOWN_2
- .byte EFFECT_EVASION_DOWN_2
- .byte EFFECT_POISON
- .byte EFFECT_PARALYZE
- .byte EFFECT_PAIN_SPLIT
- .byte EFFECT_CONVERSION_2
- .byte EFFECT_LOCK_ON
- .byte EFFECT_SPITE
- .byte EFFECT_PERISH_SONG
- .byte EFFECT_SWAGGER
- .byte EFFECT_FURY_CUTTER
- .byte EFFECT_ATTRACT
- .byte EFFECT_SAFEGUARD
- .byte EFFECT_PSYCH_UP
- .byte EFFECT_MIRROR_COAT
- .byte EFFECT_WILL_O_WISP
- .byte EFFECT_TICKLE
- .byte EFFECT_COSMIC_POWER
- .byte EFFECT_BULK_UP
- .byte EFFECT_CALM_MIND
- .byte EFFECT_DRAGON_DANCE
- .byte -1
-
-@ Given the AI_TryOnAlly at the beginning it's possible that this was the start of a more
-@ comprehensive double battle AI script
-AI_TrySunnyDayStart:
- if_target_is_ally AI_TryOnAlly
- if_not_effect EFFECT_SUNNY_DAY, AI_TrySunnyDayStart_End
-.ifndef BUGFIX @ funcResult has not been set in this script yet, below call is nonsense
- if_equal FALSE, AI_TrySunnyDayStart_End
-.endif
- is_first_turn_for AI_USER
- if_equal FALSE, AI_TrySunnyDayStart_End
- score +5
-AI_TrySunnyDayStart_End:
- end
-
-AI_Roaming:
- if_status2 AI_USER, STATUS2_WRAPPED, AI_Roaming_End
- if_status2 AI_USER, STATUS2_ESCAPE_PREVENTION, AI_Roaming_End
- get_ability AI_TARGET
- if_equal ABILITY_SHADOW_TAG, AI_Roaming_End
- get_ability AI_USER
- if_equal ABILITY_LEVITATE, AI_Roaming_Flee
- get_ability AI_TARGET
- if_equal ABILITY_ARENA_TRAP, AI_Roaming_End
-AI_Roaming_Flee:
- flee
-
-AI_Roaming_End:
- end
-
-AI_Safari:
- if_random_safari_flee AI_Safari_Flee
- watch
-
-AI_Safari_Flee:
- flee
-
-AI_FirstBattle:
- if_hp_equal AI_TARGET, 20, AI_FirstBattle_Flee
- if_hp_less_than AI_TARGET, 20, AI_FirstBattle_Flee
- end
-
-AI_FirstBattle_Flee:
- flee
-
-AI_Ret:
- end
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s
index eff53de845..dcafffe50c 100644
--- a/data/battle_anim_scripts.s
+++ b/data/battle_anim_scripts.s
@@ -4,6 +4,9 @@
#include "constants/songs.h"
#include "constants/sound.h"
#include "constants/moves.h"
+#include "constants/pokemon.h"
+#include "constants/items.h"
+#include "constants/battle_config.h"
.include "asm/macros.inc"
.include "asm/macros/battle_anim_script.inc"
.include "constants/constants.inc"
@@ -152,7 +155,7 @@ gBattleAnims_Moves::
.4byte Move_AMNESIA
.4byte Move_KINESIS
.4byte Move_SOFT_BOILED
- .4byte Move_HI_JUMP_KICK
+ .4byte Move_HIGH_JUMP_KICK
.4byte Move_GLARE
.4byte Move_DREAM_EATER
.4byte Move_POISON_GAS
@@ -281,7 +284,7 @@ gBattleAnims_Moves::
.4byte Move_MEMENTO
.4byte Move_FACADE
.4byte Move_FOCUS_PUNCH
- .4byte Move_SMELLING_SALT
+ .4byte Move_SMELLING_SALTS
.4byte Move_FOLLOW_ME
.4byte Move_NATURE_POWER
.4byte Move_CHARGE
@@ -371,7 +374,449 @@ gBattleAnims_Moves::
.4byte Move_WATER_PULSE
.4byte Move_DOOM_DESIRE
.4byte Move_PSYCHO_BOOST
- .4byte Move_COUNT @ cannot be reached, because last move is Psycho Boost
+@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@
+ .4byte Move_ROOST
+ .4byte Move_GRAVITY
+ .4byte Move_MIRACLE_EYE
+ .4byte Move_WAKE_UP_SLAP
+ .4byte Move_HAMMER_ARM
+ .4byte Move_GYRO_BALL
+ .4byte Move_HEALING_WISH
+ .4byte Move_BRINE
+ .4byte Move_NATURAL_GIFT
+ .4byte Move_FEINT
+ .4byte Move_PLUCK
+ .4byte Move_TAILWIND
+ .4byte Move_ACUPRESSURE
+ .4byte Move_METAL_BURST
+ .4byte Move_U_TURN
+ .4byte Move_CLOSE_COMBAT
+ .4byte Move_PAYBACK
+ .4byte Move_ASSURANCE
+ .4byte Move_EMBARGO
+ .4byte Move_FLING
+ .4byte Move_PSYCHO_SHIFT
+ .4byte Move_TRUMP_CARD
+ .4byte Move_HEAL_BLOCK
+ .4byte Move_WRING_OUT
+ .4byte Move_POWER_TRICK
+ .4byte Move_GASTRO_ACID
+ .4byte Move_LUCKY_CHANT
+ .4byte Move_ME_FIRST
+ .4byte Move_COPYCAT
+ .4byte Move_POWER_SWAP
+ .4byte Move_GUARD_SWAP
+ .4byte Move_PUNISHMENT
+ .4byte Move_LAST_RESORT
+ .4byte Move_WORRY_SEED
+ .4byte Move_SUCKER_PUNCH
+ .4byte Move_TOXIC_SPIKES
+ .4byte Move_HEART_SWAP
+ .4byte Move_AQUA_RING
+ .4byte Move_MAGNET_RISE
+ .4byte Move_FLARE_BLITZ
+ .4byte Move_FORCE_PALM
+ .4byte Move_AURA_SPHERE
+ .4byte Move_ROCK_POLISH
+ .4byte Move_POISON_JAB
+ .4byte Move_DARK_PULSE
+ .4byte Move_NIGHT_SLASH
+ .4byte Move_AQUA_TAIL
+ .4byte Move_SEED_BOMB
+ .4byte Move_AIR_SLASH
+ .4byte Move_XSCISSOR
+ .4byte Move_BUG_BUZZ
+ .4byte Move_DRAGON_PULSE
+ .4byte Move_DRAGON_RUSH
+ .4byte Move_POWER_GEM
+ .4byte Move_DRAIN_PUNCH
+ .4byte Move_VACUUM_WAVE
+ .4byte Move_FOCUS_BLAST
+ .4byte Move_ENERGY_BALL
+ .4byte Move_BRAVE_BIRD
+ .4byte Move_EARTH_POWER
+ .4byte Move_SWITCHEROO
+ .4byte Move_GIGA_IMPACT
+ .4byte Move_NASTY_PLOT
+ .4byte Move_BULLET_PUNCH
+ .4byte Move_AVALANCHE
+ .4byte Move_ICE_SHARD
+ .4byte Move_SHADOW_CLAW
+ .4byte Move_THUNDER_FANG
+ .4byte Move_ICE_FANG
+ .4byte Move_FIRE_FANG
+ .4byte Move_SHADOW_SNEAK
+ .4byte Move_MUD_BOMB
+ .4byte Move_PSYCHO_CUT
+ .4byte Move_ZEN_HEADBUTT
+ .4byte Move_MIRROR_SHOT
+ .4byte Move_FLASH_CANNON
+ .4byte Move_ROCK_CLIMB
+ .4byte Move_DEFOG
+ .4byte Move_TRICK_ROOM
+ .4byte Move_DRACO_METEOR
+ .4byte Move_DISCHARGE
+ .4byte Move_LAVA_PLUME
+ .4byte Move_LEAF_STORM
+ .4byte Move_POWER_WHIP
+ .4byte Move_ROCK_WRECKER
+ .4byte Move_CROSS_POISON
+ .4byte Move_GUNK_SHOT
+ .4byte Move_IRON_HEAD
+ .4byte Move_MAGNET_BOMB
+ .4byte Move_STONE_EDGE
+ .4byte Move_CAPTIVATE
+ .4byte Move_STEALTH_ROCK
+ .4byte Move_GRASS_KNOT
+ .4byte Move_CHATTER
+ .4byte Move_JUDGMENT
+ .4byte Move_BUG_BITE
+ .4byte Move_CHARGE_BEAM
+ .4byte Move_WOOD_HAMMER
+ .4byte Move_AQUA_JET
+ .4byte Move_ATTACK_ORDER
+ .4byte Move_DEFEND_ORDER
+ .4byte Move_HEAL_ORDER
+ .4byte Move_HEAD_SMASH
+ .4byte Move_DOUBLE_HIT
+ .4byte Move_ROAR_OF_TIME
+ .4byte Move_SPACIAL_REND
+ .4byte Move_LUNAR_DANCE
+ .4byte Move_CRUSH_GRIP
+ .4byte Move_MAGMA_STORM
+ .4byte Move_DARK_VOID
+ .4byte Move_SEED_FLARE
+ .4byte Move_OMINOUS_WIND
+ .4byte Move_SHADOW_FORCE
+@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@
+ .4byte Move_HONE_CLAWS
+ .4byte Move_WIDE_GUARD
+ .4byte Move_GUARD_SPLIT
+ .4byte Move_POWER_SPLIT
+ .4byte Move_WONDER_ROOM
+ .4byte Move_PSYSHOCK
+ .4byte Move_VENOSHOCK
+ .4byte Move_AUTOTOMIZE
+ .4byte Move_RAGE_POWDER
+ .4byte Move_TELEKINESIS
+ .4byte Move_MAGIC_ROOM
+ .4byte Move_SMACK_DOWN
+ .4byte Move_STORM_THROW
+ .4byte Move_FLAME_BURST
+ .4byte Move_SLUDGE_WAVE
+ .4byte Move_QUIVER_DANCE
+ .4byte Move_HEAVY_SLAM
+ .4byte Move_SYCHRONOISE
+ .4byte Move_ELECTRO_BALL
+ .4byte Move_SOAK
+ .4byte Move_FLAME_CHARGE
+ .4byte Move_COIL
+ .4byte Move_LOW_SWEEP
+ .4byte Move_ACID_SPRAY
+ .4byte Move_FOUL_PLAY
+ .4byte Move_SIMPLE_BEAM
+ .4byte Move_ENTRAINMENT
+ .4byte Move_AFTER_YOU
+ .4byte Move_ROUND
+ .4byte Move_ECHOED_VOICE
+ .4byte Move_CHIP_AWAY
+ .4byte Move_CLEAR_SMOG
+ .4byte Move_STORED_POWER
+ .4byte Move_QUICK_GUARD
+ .4byte Move_ALLY_SWITCH
+ .4byte Move_SCALD
+ .4byte Move_SHELL_SMASH
+ .4byte Move_HEAL_PULSE
+ .4byte Move_HEX
+ .4byte Move_SKY_DROP
+ .4byte Move_SHIFT_GEAR
+ .4byte Move_CIRCLE_THROW
+ .4byte Move_INCINERATE
+ .4byte Move_QUASH
+ .4byte Move_ACROBATICS
+ .4byte Move_REFLECT_TYPE
+ .4byte Move_RETALIATE
+ .4byte Move_FINAL_GAMBIT
+ .4byte Move_BESTOW
+ .4byte Move_INFERNO
+ .4byte Move_WATER_PLEDGE
+ .4byte Move_FIRE_PLEDGE
+ .4byte Move_GRASS_PLEDGE
+ .4byte Move_VOLT_SWITCH
+ .4byte Move_STRUGGLE_BUG
+ .4byte Move_BULLDOZE
+ .4byte Move_FROST_BREATH
+ .4byte Move_DRAGON_TAIL
+ .4byte Move_WORK_UP
+ .4byte Move_ELECTROWEB
+ .4byte Move_WILD_CHARGE
+ .4byte Move_DRILL_RUN
+ .4byte Move_DUAL_CHOP
+ .4byte Move_HEART_STAMP
+ .4byte Move_HORN_LEECH
+ .4byte Move_SACRED_SWORD
+ .4byte Move_RAZOR_SHELL
+ .4byte Move_HEAT_CRASH
+ .4byte Move_LEAF_TORNADO
+ .4byte Move_STEAMROLLER
+ .4byte Move_COTTON_GUARD
+ .4byte Move_NIGHT_DAZE
+ .4byte Move_PSYSTRIKE
+ .4byte Move_TAIL_SLAP
+ .4byte Move_HURRICANE
+ .4byte Move_HEAD_CHARGE
+ .4byte Move_GEAR_GRIND
+ .4byte Move_SEARING_SHOT
+ .4byte Move_TECHNO_BLAST
+ .4byte Move_RELIC_SONG
+ .4byte Move_SECRET_SWORD
+ .4byte Move_GLACIATE
+ .4byte Move_BOLT_STRIKE
+ .4byte Move_BLUE_FLARE
+ .4byte Move_FIERY_DANCE
+ .4byte Move_FREEZE_SHOCK
+ .4byte Move_ICE_BURN
+ .4byte Move_SNARL
+ .4byte Move_ICICLE_CRASH
+ .4byte Move_V_CREATE
+ .4byte Move_FUSION_FLARE
+ .4byte Move_FUSION_BOLT
+@@@@@@@@@@@@ GEN 6 @@@@@@@@@@@@
+ .4byte Move_FLYING_PRESS
+ .4byte Move_MAT_BLOCK
+ .4byte Move_BELCH
+ .4byte Move_ROTOTILLER
+ .4byte Move_STICKY_WEB
+ .4byte Move_FELL_STINGER
+ .4byte Move_PHANTOM_FORCE
+ .4byte Move_TRICK_OR_TREAT
+ .4byte Move_NOBLE_ROAR
+ .4byte Move_ION_DELUGE
+ .4byte Move_PARABOLIC_CHARGE
+ .4byte Move_FORESTS_CURSE
+ .4byte Move_PETAL_BLIZZARD
+ .4byte Move_FREEZE_DRY
+ .4byte Move_DISARMING_VOICE
+ .4byte Move_PARTING_SHOT
+ .4byte Move_TOPSY_TURVY
+ .4byte Move_DRAINING_KISS
+ .4byte Move_CRAFTY_SHIELD
+ .4byte Move_FLOWER_SHIELD
+ .4byte Move_GRASSY_TERRAIN
+ .4byte Move_MISTY_TERRAIN
+ .4byte Move_ELECTRIFY
+ .4byte Move_PLAY_ROUGH
+ .4byte Move_FAIRY_WIND
+ .4byte Move_MOONBLAST
+ .4byte Move_BOOMBURST
+ .4byte Move_FAIRY_LOCK
+ .4byte Move_KINGS_SHIELD
+ .4byte Move_PLAY_NICE
+ .4byte Move_CONFIDE
+ .4byte Move_DIAMOND_STORM
+ .4byte Move_STEAM_ERUPTION
+ .4byte Move_HYPERSPACE_HOLE
+ .4byte Move_WATER_SHURIKEN
+ .4byte Move_MYSTICAL_FIRE
+ .4byte Move_SPIKY_SHIELD
+ .4byte Move_AROMATIC_MIST
+ .4byte Move_EERIE_IMPULSE
+ .4byte Move_VENOM_DRENCH
+ .4byte Move_POWDER
+ .4byte Move_GEOMANCY
+ .4byte Move_MAGNETIC_FLUX
+ .4byte Move_HAPPY_HOUR
+ .4byte Move_ELECTRIC_TERRAIN
+ .4byte Move_DAZZLING_GLEAM
+ .4byte Move_CELEBRATE
+ .4byte Move_HOLD_HANDS
+ .4byte Move_BABY_DOLL_EYES
+ .4byte Move_NUZZLE
+ .4byte Move_HOLD_BACK
+ .4byte Move_INFESTATION
+ .4byte Move_POWER_UP_PUNCH
+ .4byte Move_OBLIVION_WING
+ .4byte Move_THOUSAND_ARROWS
+ .4byte Move_THOUSAND_WAVES
+ .4byte Move_LANDS_WRATH
+ .4byte Move_LIGHT_OF_RUIN
+ .4byte Move_ORIGIN_PULSE
+ .4byte Move_PRECIPICE_BLADES
+ .4byte Move_DRAGON_ASCENT
+ .4byte Move_HYPERSPACE_FURY
+@@@@@@@@@@@@ GEN 7 @@@@@@@@@@@@
+ .4byte Move_SHORE_UP
+ .4byte Move_FIRST_IMPRESSION
+ .4byte Move_BANEFUL_BUNKER
+ .4byte Move_SPIRIT_SHACKLE
+ .4byte Move_DARKEST_LARIAT
+ .4byte Move_SPARKLING_ARIA
+ .4byte Move_ICE_HAMMER
+ .4byte Move_FLORAL_HEALING
+ .4byte Move_HIGH_HORSEPOWER
+ .4byte Move_STRENGTH_SAP
+ .4byte Move_SOLAR_BLADE
+ .4byte Move_LEAFAGE
+ .4byte Move_SPOTLIGHT
+ .4byte Move_TOXIC_THREAD
+ .4byte Move_LASER_FOCUS
+ .4byte Move_GEAR_UP
+ .4byte Move_THROAT_CHOP
+ .4byte Move_POLLEN_PUFF
+ .4byte Move_ANCHOR_SHOT
+ .4byte Move_PSYCHIC_TERRAIN
+ .4byte Move_LUNGE
+ .4byte Move_FIRE_LASH
+ .4byte Move_POWER_TRIP
+ .4byte Move_BURN_UP
+ .4byte Move_SPEED_SWAP
+ .4byte Move_SMART_STRIKE
+ .4byte Move_PURIFY
+ .4byte Move_REVELATION_DANCE
+ .4byte Move_CORE_ENFORCER
+ .4byte Move_TROP_KICK
+ .4byte Move_INSTRUCT
+ .4byte Move_BEAK_BLAST
+ .4byte Move_CLANGING_SCALES
+ .4byte Move_DRAGON_HAMMER
+ .4byte Move_BRUTAL_SWING
+ .4byte Move_AURORA_VEIL
+ .4byte Move_SHELL_TRAP
+ .4byte Move_FLEUR_CANNON
+ .4byte Move_PSYCHIC_FANGS
+ .4byte Move_STOMPING_TANTRUM
+ .4byte Move_SHADOW_BONE
+ .4byte Move_ACCELEROCK
+ .4byte Move_LIQUIDATION
+ .4byte Move_PRISMATIC_LASER
+ .4byte Move_SPECTRAL_THIEF
+ .4byte Move_SUNSTEEL_STRIKE
+ .4byte Move_MOONGEIST_BEAM
+ .4byte Move_TEARFUL_LOOK
+ .4byte Move_ZING_ZAP
+ .4byte Move_NATURES_MADNESS
+ .4byte Move_MULTI_ATTACK
+ .4byte Move_MIND_BLOWN
+ .4byte Move_PLASMA_FISTS
+ .4byte Move_PHOTON_GEYSER
+ .4byte Move_ZIPPY_ZAP
+ .4byte Move_SPLISHY_SPLASH
+ .4byte Move_FLOATY_FALL
+ .4byte Move_PIKA_PAPOW
+ .4byte Move_BOUNCY_BUBBLE
+ .4byte Move_BUZZY_BUZZ
+ .4byte Move_SIZZLY_SLIDE
+ .4byte Move_GLITZY_GLOW
+ .4byte Move_BADDY_BAD
+ .4byte Move_SAPPY_SEED
+ .4byte Move_FREEZY_FROST
+ .4byte Move_SPARKLY_SWIRL
+ .4byte Move_VEEVEE_VOLLEY
+ .4byte Move_DOUBLE_IRON_BASH
+@@@@@@@@@@@@ GEN 8 @@@@@@@@@@@@
+ .4byte Move_DYNAMAX_CANNON
+ .4byte Move_SNIPE_SHOT
+ .4byte Move_JAW_LOCK
+ .4byte Move_STUFF_CHEEKS
+ .4byte Move_NO_RETREAT
+ .4byte Move_TAR_SHOT
+ .4byte Move_MAGIC_POWDER
+ .4byte Move_DRAGON_DARTS
+ .4byte Move_TEATIME
+ .4byte Move_OCTOLOCK
+ .4byte Move_BOLT_BEAK
+ .4byte Move_FISHIOUS_REND
+ .4byte Move_COURT_CHANGE
+ .4byte Move_CLANGOROUS_SOUL
+ .4byte Move_BODY_PRESS
+ .4byte Move_DECORATE
+ .4byte Move_DRUM_BEATING
+ .4byte Move_SNAP_TRAP
+ .4byte Move_PYRO_BALL
+ .4byte Move_BEHEMOTH_BLADE
+ .4byte Move_BEHEMOTH_BASH
+ .4byte Move_AURA_WHEEL
+ .4byte Move_BREAKING_SWIPE
+ .4byte Move_BRANCH_POKE
+ .4byte Move_OVERDRIVE
+ .4byte Move_APPLE_ACID
+ .4byte Move_GRAV_APPLE
+ .4byte Move_SPIRIT_BREAK
+ .4byte Move_STRANGE_STEAM
+ .4byte Move_LIFE_DEW
+ .4byte Move_OBSTRUCT
+ .4byte Move_FALSE_SURRENDER
+ .4byte Move_METEOR_ASSAULT
+ .4byte Move_ETERNA_BEAM
+ .4byte Move_STEEL_BEAM
+ .4byte Move_EXPANDING_FORCE
+ .4byte Move_STEEL_ROLLER
+ .4byte Move_SCALE_SHOT
+ .4byte Move_METEOR_BEAM
+ .4byte Move_SHELL_SIDE_ARM
+ .4byte Move_MISTY_EXPLOSION
+ .4byte Move_GRASSY_GLIDE
+ .4byte Move_RISING_VOLTAGE
+ .4byte Move_TERRAIN_PULSE
+ .4byte Move_SKITTER_SMACK
+ .4byte Move_BURNING_JEALOUSY
+ .4byte Move_LASH_OUT
+ .4byte Move_POLTERGEIST
+ .4byte Move_CORROSIVE_GAS
+ .4byte Move_COACHING
+ .4byte Move_FLIP_TURN
+ .4byte Move_TRIPLE_AXEL
+ .4byte Move_DUAL_WINGBEAT
+ .4byte Move_SCORCHING_SANDS
+ .4byte Move_JUNGLE_HEALING
+ .4byte Move_WICKED_BLOW
+ .4byte Move_SURGING_STRIKES
+ .4byte Move_THUNDER_CAGE
+ .4byte Move_DRAGON_ENERGY
+ .4byte Move_FREEZING_GLARE
+ .4byte Move_FIERY_WRATH
+ .4byte Move_THUNDEROUS_KICK
+ .4byte Move_GLACIAL_LANCE
+ .4byte Move_ASTRAL_BARRAGE
+ .4byte Move_EERIE_SPELL
+@@@@ Z MOVES
+ .4byte Move_BREAKNECK_BLITZ
+ .4byte Move_ALL_OUT_PUMMELING
+ .4byte Move_SUPERSONIC_SKYSTRIKE
+ .4byte Move_ACID_DOWNPOUR
+ .4byte Move_TECTONIC_RAGE
+ .4byte Move_CONTINENTAL_CRUSH
+ .4byte Move_SAVAGE_SPIN_OUT
+ .4byte Move_NEVER_ENDING_NIGHTMARE
+ .4byte Move_CORKSCREW_CRASH
+ .4byte Move_INFERNO_OVERDRIVE
+ .4byte Move_HYDRO_VORTEX
+ .4byte Move_BLOOM_DOOM
+ .4byte Move_GIGAVOLT_HAVOC
+ .4byte Move_SHATTERED_PSYCHE
+ .4byte Move_SUBZERO_SLAMMER
+ .4byte Move_DEVASTATING_DRAKE
+ .4byte Move_BLACK_HOLE_ECLIPSE
+ .4byte Move_TWINKLE_TACKLE
+ .4byte Move_CATASTROPIKA
+ .4byte Move_10000000_VOLT_THUNDERBOLT
+ .4byte Move_STOKED_SPARKSURFER
+ .4byte Move_EXTREME_EVOBOOST
+ .4byte Move_PULVERIZING_PANCAKE
+ .4byte Move_GENESIS_SUPERNOVA
+ .4byte Move_SINISTER_ARROW_RAID
+ .4byte Move_MALICIOUS_MOONSAULT
+ .4byte Move_OCEANIC_OPERETTA
+ .4byte Move_SPLINTERED_STORMSHARDS
+ .4byte Move_LETS_SNUGGLE_FOREVER
+ .4byte Move_CLANGOROUS_SOULBLAZE
+ .4byte Move_GUARDIAN_OF_ALOLA
+ .4byte Move_SEARING_SUNRAZE_SMASH
+ .4byte Move_MENACING_MOONRAZE_MAELSTROM
+ .4byte Move_LIGHT_THAT_BURNS_THE_SKY
+ .4byte Move_SOUL_STEALING_7_STAR_STRIKE
+@@@ Last Move - cannot be reached
+ .4byte Move_COUNT
.align 2
gBattleAnims_StatusConditions::
@@ -384,6 +829,7 @@ gBattleAnims_StatusConditions::
.4byte Status_Freeze @ B_ANIM_STATUS_FRZ
.4byte Status_Curse @ B_ANIM_STATUS_CURSED
.4byte Status_Nightmare @ B_ANIM_STATUS_NIGHTMARE
+ .4byte Status_Powder
.align 2
gBattleAnims_General::
@@ -396,7 +842,7 @@ gBattleAnims_General::
.4byte General_TurnTrap @ B_ANIM_TURN_TRAP
.4byte General_HeldItemEffect @ B_ANIM_HELD_ITEM_EFFECT
.4byte General_SmokeballEscape @ B_ANIM_SMOKEBALL_ESCAPE
- .4byte General_FocusBand @ B_ANIM_FOCUS_BAND
+ .4byte General_HangedOn @ B_ANIM_HANGED_ON
.4byte General_Rain @ B_ANIM_RAIN_CONTINUES
.4byte General_Sun @ B_ANIM_SUN_CONTINUES
.4byte General_Sandstorm @ B_ANIM_SANDSTORM_CONTINUES
@@ -410,6 +856,19 @@ gBattleAnims_General::
.4byte General_FocusPunchSetUp @ B_ANIM_FOCUS_PUNCH_SETUP
.4byte General_IngrainHeal @ B_ANIM_INGRAIN_HEAL
.4byte General_WishHeal @ B_ANIM_WISH_HEAL
+ .4byte General_MegaEvolution @ B_ANIM_MEGA_EVOLUTION
+ .4byte General_IllusionOff @ B_ANIM_ILLUSION_OFF
+ .4byte General_FormChange @ B_ANIM_FORM_CHANGE
+ .4byte General_SlideOffScreen @ B_ANIM_SLIDE_OFFSCREEN
+ .4byte General_RestoreBg @ B_ANIM_RESTORE_BG
+ .4byte General_TotemFlare @ B_ANIM_TOTEM_FLARE
+ .4byte General_GulpMissile @ B_ANIM_GULP_MISSILE
+ .4byte General_StrongWinds @ B_ANIM_STRONG_WINDS
+ .4byte General_PrimalReversion @ B_ANIM_PRIMAL_REVERSION
+ .4byte General_AquaRingHeal @ B_ANIM_AQUA_RING_HEAL
+ .4byte General_BeakBlastSetUp @ B_ANIM_BEAK_BLAST_SETUP
+ .4byte General_ShellTrapSetUp @ B_ANIM_SHELL_TRAP_SETUP
+ .4byte General_ZMoveActivate @ B_ANIM_ZMOVE_ACTIVATE
.align 2
gBattleAnims_Special::
@@ -420,7 +879,13447 @@ gBattleAnims_Special::
.4byte Special_BallThrowWithTrainer @ B_ANIM_BALL_THROW_WITH_TRAINER
.4byte Special_SubstituteToMon @ B_ANIM_SUBSTITUTE_TO_MON
.4byte Special_MonToSubstitute @ B_ANIM_MON_TO_SUBSTITUTE
+ .4byte Special_CriticalCaptureBallThrow @ B_ANIM_CRITICAL_CAPTURE_THROW
+@@@@@@@@@@@@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@@@@@@@@@@@@
+Move_ROOST:
+ loadspritegfx ANIM_TAG_WHITE_FEATHER
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ monbg ANIM_ATTACKER
+ splitbgprio_all
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_TARGET
+ delay 0
+ createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 64, 2, 104, 11304, 32, 1
+ delay 6
+ createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 32, 2, 104, 11304, 32, 1
+ createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 0, 2, 104, 11304, 32, 1
+ delay 6
+ createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 224, 2, 104, 11304, 32, 1
+ createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 128, 2, 104, 11304, 32, 1
+ delay 6
+ createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 192, 2, 104, 11304, 32, 1
+ createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 160, 2, 104, 11304, 32, 1
+ delay 6
+ createsprite gFallingFeatherSpriteTemplate, ANIM_ATTACKER, 0, 0, -16, 96, 2, 104, 11304, 32, 1
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ call HealingEffect
+ waitforvisualfinish
+ end
+
+Move_GRAVITY:
+ fadetobg BG_COSMIC
+ waitbgfadein
+ createvisualtask AnimTask_SetAnimTargetToAttackerOpposite, 1
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ShakeAndSinkMon, 5, ANIM_ATTACKER, 2, 0, 96, 30
+ createvisualtask AnimTask_ShakeAndSinkMon, 5, ANIM_DEF_PARTNER, 2, 0, 96, 30
+ createvisualtask AnimTask_ShakeAndSinkMon, 5, ANIM_ATK_PARTNER, 2, 0, 96, 30
+ createvisualtask AnimTask_ShakeAndSinkMon, 5, ANIM_TARGET, 2, 0, 96, 30
+ waitforvisualfinish
+ restorebg
+ waitbgfadeout
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 3, 0, 1, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_ATK_PARTNER, 3, 0, 1, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 1, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 1, 1
+ setarg 0x7, 0xffff
+ waitbgfadein
+ waitforvisualfinish
+ end
+
+Move_MIRACLE_EYE:
+ loadspritegfx ANIM_TAG_TEAL_ALERT
+ loadspritegfx ANIM_TAG_OPENING_EYE
+ loadspritegfx ANIM_TAG_ROUND_WHITE_HALO
+ monbg ANIM_DEF_PARTNER
+ call SetPsychicBackground
+ playsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_TARGET
+ createsprite gOpeningEyeSpriteTemplate, ANIM_ATTACKER, 5, 0, 0, 1, 0
+ createsprite gWhiteHaloSpriteTemplate, ANIM_ATTACKER, 5
+ delay 40
+ playsewithpan SE_M_LEER, SOUND_PAN_TARGET
+ createvisualtask AnimTask_BlendColorCycle, 2, 1, 1, 2, 0, 10, RGB_BLACK
+ call MindReaderEyeSpikeEffect
+ waitforvisualfinish
+ call UnsetPsychicBg
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_WAKE_UP_SLAP:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET
+ createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 0, 0, 10, 1, 3, 0
+ waitforvisualfinish
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 2
+ waitforvisualfinish
+ createsprite gSmellingSaltExclamationSpriteTemplate, ANIM_TARGET, 2, 1, 8, 3
+ loopsewithpan SE_M_SWAGGER2, +63, 16, 3
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_HAMMER_ARM:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ROCKS
+ loadspritegfx ANIM_TAG_SLAM_HIT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 3, 0, 4
+ delay 1
+ createsprite gSlamHitSpriteTemplate, ANIM_ATTACKER, 2, 0, 0
+ delay 3
+ setarg 7, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, -8, 1, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 5, 1
+ createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 32, 3, 4
+ createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 8, 31, 2, 2
+ createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -4, 28, 2, 3
+ createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 2, 0, 0, 5
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_GYRO_BALL:
+ loadspritegfx ANIM_TAG_IMPACT
+ loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
+ createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0
+ waitforvisualfinish
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4
+ waitforvisualfinish
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4
+ delay 3
+ waitforvisualfinish
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, 1, 0
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3
+ waitforvisualfinish
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 0, 0
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 1, 0
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1
+ waitforvisualfinish
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 0, 1
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 1, 1
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5
+ delay 3
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7
+ waitforvisualfinish
+ end
+
+Move_HEALING_WISH:
+ loadspritegfx ANIM_TAG_GREEN_SPARKLE
+ setalpha 0, 16
+ createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1
+ playsewithpan SE_M_MOONLIGHT, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, -12, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, -24, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, 21, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, 0, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, ANIM_ATTACKER, 40, 10, 0
+ delay 20
+ createvisualtask AnimTask_MoonlightEndFade, 2
+ waitforvisualfinish
+ end
+
+Move_BRINE:
+ loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB
+ loadspritegfx ANIM_TAG_WATER_IMPACT
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_DIVE, -64
+ waitforvisualfinish
+ delay 16
+ createvisualtask AnimTask_WaterSpoutRain, 5
+ playsewithpan SE_M_SURF, +63
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_NATURAL_GIFT:
+ loadspritegfx ANIM_TAG_SPARKLE_2
+ loadspritegfx ANIM_TAG_HOLLOW_ORB
+ monbg ANIM_ATTACKER
+ splitbgprio ANIM_ATTACKER
+ createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 16, RGB(27, 31, 18)
+ playsewithpan SE_M_MEGA_KICK, -64
+ call GrantingStarsEffect
+ waitforvisualfinish
+ delay 1
+ createvisualtask AnimTask_DragonDanceWaver, 5
+ playsewithpan SE_M_TELEPORT, -64
+ delay 8
+ createvisualtask AnimTask_BlendPalInAndOutByTag, 5, 10249, 19456, 14, 0, 3
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 128
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 170
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 213
+ delay 30
+ playsewithpan SE_M_TELEPORT, -64
+ delay 30
+ playsewithpan SE_M_TELEPORT, -64
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ delay 1
+ end
+
+Move_FEINT:
+ loadspritegfx ANIM_TAG_FEINT
+ createsprite gFeintSwipeSpriteTemplate, ANIM_ATTACKER, 10, -32, 0, 15
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
+ delay 15
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
+ delay 15
+ waitforvisualfinish
+ delay 5
+ createsprite gFeintZoomSpriteTemplate, ANIM_ATTACKER, 10, 0, 0
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ end
+
+Move_PLUCK:
+ loadspritegfx ANIM_TAG_SEED_BROWN
+ loadspritegfx ANIM_TAG_IMPACT
+ playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 40, -10, -5, 1, 2
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 3, 0, 20, 2, 1
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 7, 1, 20, 1, 1
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -3, 5, 25, 2, -1
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 4, -4, 30, 3, -1
+ delay 30
+ playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 40, 5, 10, 1, 2
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 3, -4, 20, 1, 1
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 7, -6, 20, 0, 1
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -3, -9, 25, 1, -1
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 4, -4, 30, 2, -1
+ delay 30
+ playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 1, 2
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -3, -4, 20, 1, 1
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 7, -6, 25, 0, 1
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -4, -10, 25, 1, 1
+ createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 4, -4, 25, 1, 2
+ waitforvisualfinish
+ end
+
+Move_TAILWIND:
+ loadspritegfx ANIM_TAG_FLYING_DIRT
+ playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER
+ call SetHighSpeedBg
+ monbg ANIM_ATK_PARTNER
+ setalpha 12, 8
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 4, 4
+ createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 10
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 10, 2304, 96, 0
+ delay 12
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 90, 2048, 96, 0
+ delay 12
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 50, 2560, 96, 0
+ delay 12
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 20, 2304, 96, 0
+ delay 12
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 70, 1984, 96, 0
+ delay 12
+ createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0, 2816, 96, 0
+ delay 10
+ createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 0
+ waitforvisualfinish
+ stopsound
+ call UnsetHighSpeedBg
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ delay 1
+ end
+
+Move_ACUPRESSURE:
+ loadspritegfx ANIM_TAG_ACCUPRESSURE
+ loadspritegfx ANIM_TAG_SPARK_2
+ createsprite gAccupressureSpriteTemplate, ANIM_ATTACKER, 40, 0, -40, 40
+ waitforvisualfinish
+ call ElectricityEffect
+ end
+
+Move_METAL_BURST:
+ loadspritegfx ANIM_TAG_ECLIPSING_ORB
+ loadspritegfx ANIM_TAG_RED_ORB
+ loopsewithpan SE_M_TRI_ATTACK, -64, 18, 3
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 0
+ createvisualtask AnimTask_DefenseCurlDeformMon, 5
+ waitforvisualfinish
+ setarg 7, -1
+ playsewithpan SE_M_REFLECT, -64
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 0
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 32
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 64
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 96
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 128
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 160
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 20, 192
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224
+ waitforvisualfinish
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1
+ waitforvisualfinish
+ end
+
+Move_U_TURN:
+ loadspritegfx ANIM_TAG_ROUND_SHADOW
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_CanBattlerSwitch, 1, ANIM_ATTACKER
+ jumpretfalse UTurnVisible
+ createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, TRUE
+UTurnContinue:
+ delay 20
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ createvisualtask AnimTask_CanBattlerSwitch, 1, ANIM_ATTACKER
+ jumpretfalse UTurnLast
+ invisible ANIM_ATTACKER
+UTurnLast:
+ blendoff
+ waitforvisualfinish
+ end
+UTurnVisible:
+ createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE
+ goto UTurnContinue
+
+Move_CLOSE_COMBAT:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ call SetHighSpeedBg
+ createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 10
+ createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1
+ playsewithpan SE_M_VITAL_THROW2, +63
+ delay 10
+ createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1
+ playsewithpan SE_M_MEGA_KICK2, +63
+ delay 10
+ createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 10
+ createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1
+ playsewithpan SE_M_VITAL_THROW2, +63
+ delay 10
+ createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1
+ playsewithpan SE_M_MEGA_KICK2, +63
+ delay 10
+ call UnsetHighSpeedBg
+ clearmonbg ANIM_TARGET
+ blendoff
+ delay 1
+ setarg 7, 0x1000
+ delay 1
+ end
+
+Move_PAYBACK:
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ fadetobg BG_DARK
+ waitbgfadein
+ delay 0
+ setalpha 12, 8
+ createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 30, 1
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, 1, 0
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, 1, 0
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, 1, 0
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, 1, 0
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, 1, 0
+ playsewithpan SE_M_COMET_PUNCH, +63
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ restorebg
+ waitbgfadein
+ end
+
+Move_ASSURANCE:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE
+ monbg ANIM_TARGET
+ fadetobg BG_DARK
+ waitbgfadein
+ delay 0
+ setalpha 12, 8
+ createsprite gPalmSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0
+ playsewithpan SE_M_VITAL_THROW2, -64
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ delay 0
+ restorebg
+ waitbgfadein
+ end
+
+Move_EMBARGO:
+ loadspritegfx ANIM_TAG_RED_ORB
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ loopsewithpan SE_M_POISON_POWDER, +63, 18, 10
+ call EmbargoOrbs1
+ call EmbargoOrbs1
+ call EmbargoOrbs1
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 10, 1
+ playsewithpan SE_M_NIGHTMARE, +63
+ clearmonbg ANIM_DEF_PARTNER
+ end
+EmbargoOrbs1:
+ createsprite gPowerOrbs_Float, ANIM_ATTACKER, 2, 0, -20, 85, 80, 0
+ delay 12
+ createsprite gPowerOrbs_Float, ANIM_ATTACKER, 2, 0, -10, 170, 80, 0
+ delay 12
+ createsprite gPowerOrbs_Float, ANIM_ATTACKER, 2, 0, -15, 0, 80, 0
+ delay 12
+ return
+
+Move_FLING:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_BLACK_BALL
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ createsprite gBlackBallSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25
+ playsewithpan SE_M_SWAGGER, -64
+ waitforvisualfinish
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1
+ playsewithpan SE_M_VITAL_THROW, +63
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_PSYCHO_SHIFT:
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS
+ loadspritegfx ANIM_TAG_HOLLOW_ORB
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_THIN_RING
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ playsewithpan SE_M_MEGA_KICK, -64
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0
+ delay 30
+ waitforvisualfinish
+ createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 1, 0
+ playsewithpan SE_M_SUPERSONIC, -64
+ delay 14
+ createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 1, 0
+ playsewithpan SE_M_SUPERSONIC, -64
+ delay 14
+ createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 1, 0
+ playsewithpan SE_M_SUPERSONIC, -64
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ end
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+
+Move_TRUMP_CARD:
+ loadspritegfx ANIM_TAG_TRUMP_CARD
+ loadspritegfx ANIM_TAG_CUT
+ loadspritegfx ANIM_TAG_TRUMP_CARD_PARTICLES
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_TARGET
+ createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 0, 32
+ delay 2
+ createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 1, 32
+ delay 2
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_TARGET
+ createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 0, 32
+ delay 2
+ createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 2, 32
+ delay 2
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_TARGET
+ createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 2, 32
+ delay 2
+ createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 2, 32
+ delay 2
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_TARGET
+ playsewithpan SE_M_CUT, SOUND_PAN_TARGET
+ createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0
+ createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 1, 32
+ delay 2
+ createsprite gTrumpCardSpriteTemplate, ANIM_ATTACKER, 40, 40, 0, 1, 32
+ delay 3
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1
+ createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 1, 12, -5, -4, 0
+ createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 0, 13, 5, 4, 1
+ createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 1, 8, -3, 0, 2
+ createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 2, 12, -5, 4, 3
+ delay 2
+ createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 1, 10, 1, -4, 4
+ createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 0, 13, 5, 6, 1
+ createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 1, 12, -2, 1, 3
+ createsprite gTrumpCardParticleSpriteTempalte, ANIM_ATTACKER, 40, 0, 0, 2, 13, -2, 1, 2
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ waitforvisualfinish
+ end
+
+Move_HEAL_BLOCK:
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ monbg ANIM_TARGET
+ createsoundtask SoundTask_PlaySeChangingVolume, SE_M_ABSORB_2, SOUND_PAN_TARGET, 256, -16, 0, 2
+ createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 0, -5, 1, 0
+ delay 7
+ createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, 10, 1, 0
+ delay 7
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1 | 4, 4, 2, 12, 0, RGB_BLACK
+ createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 0, -5, 1, 0
+ delay 7
+ createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, 10, 1, 0
+ delay 7
+ createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, -15, 1, 0
+ delay 7
+ createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 10, -5, 1, 0
+ delay 7
+ waitforvisualfinish
+ delay 11
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1 | 4, 4, 2, 0, 12, RGB_BLACK
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+Move_WRING_OUT:
+ loadspritegfx ANIM_TAG_WRING_OUT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, FALSE
+ delay 3
+ createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE
+ delay 3
+ createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE
+ delay 3
+ createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE
+ delay 3
+ createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE
+ delay 3
+ createsprite gWringOutHandSpriteTemplate, ANIM_TARGET, 40, 0, 0, 48, 3, 32, TRUE
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ waitforvisualfinish
+ end
+
+Move_POWER_TRICK:
+ loadspritegfx ANIM_TAG_POWER_TRICK
+ loopsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET 0xa 0x3
+ createvisualtask AnimTask_UproarDistortion 0x2, 0x0
+ createsprite gPowerTrickSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 0, SOUND_PAN_TARGET, 0
+ delay 0x10
+ createvisualtask AnimTask_UproarDistortion 0x2, 0x0
+ delay 0x10
+ createvisualtask AnimTask_UproarDistortion 0x2, 0x0
+ waitforvisualfinish
+ end
+
+Move_GASTRO_ACID:
+ loadspritegfx ANIM_TAG_GREEN_POISON_BUBBLE
+ monbg ANIM_DEF_PARTNER
+ createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, FALSE
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ delay 5
+ createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, 24, 0, FALSE
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ delay 5
+ createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, -24, 0, FALSE
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ delay 15
+ createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1
+ createvisualtask AnimTask_BlendColorCycle, 2, ANIM_PAL_DEF, 2, 2, 0, 12, RGB(30, 0, 31)
+ createsprite gGreenPoisonDrip, ANIM_TARGET, 2, 0, -22, 0, 15, 55, FALSE
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 10
+ createsprite gGreenPoisonDrip, ANIM_TARGET, 2, -26, -24, 0, 15, 55, FALSE
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 10
+ createsprite gGreenPoisonDrip, ANIM_TARGET, 2, 15, -27, 0, 15, 50, FALSE
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 10
+ createsprite gGreenPoisonDrip, ANIM_TARGET, 2, -15, -17, 0, 10, 45, FALSE
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 10
+ createsprite gGreenPoisonDrip, ANIM_TARGET, 2, 27, -22, 0, 15, 50, FALSE
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_LUCKY_CHANT:
+ loadspritegfx ANIM_TAG_GOLD_STARS
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ createsprite gLuckyChantBigStarsSpriteTemplate, 2, 4, 0, -18, 8, 140
+ createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 16, -18, 8, 100
+ createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, -16, -18, 8, 100
+ delay 15
+ createsprite gLuckyChantBigStarsSpriteTemplate 2, 4, 0, -18, 8, 140
+ createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 32, -18, 8, 100
+ createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, -32, -18, 8, 100
+ delay 15
+ createsprite gLuckyChantBigStarsSpriteTemplate 2, 4, 0, -18, 8, 140
+ createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 24, -18, 8, 100
+ createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, -18, -18, 8, 100
+ delay 30
+ createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 16, -18, 0, 100
+ createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, -16, -18, 0, 100
+ delay 30
+ createsprite gLuckyChantSmallStarsSpriteTemplate, 2, 4, 20, -16, 14, 80
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ unloadspritegfx ANIM_TAG_GOLD_STARS
+ end
+
+Move_ME_FIRST:
+ end
+
+Move_COPYCAT:
+ loadspritegfx ANIM_TAG_GRAY_ORB
+ loadspritegfx ANIM_TAG_THIN_RING
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_BlendColorCycle, 2, 2, 8, 1, 0, 12, RGB_WHITE
+ createvisualtask AnimTask_StockpileDeformMon, 5
+ call StockpileAbsorb
+ call StockpileAbsorb
+ waitforvisualfinish
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 12, 0, RGB_WHITE
+ waitforvisualfinish
+ createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0
+ playsewithpan SE_M_SUPERSONIC, -64
+ delay 14
+ createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0
+ playsewithpan SE_M_SUPERSONIC, -64
+ delay 14
+ createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0
+ playsewithpan SE_M_SUPERSONIC, -64
+ waitforvisualfinish
+ end
+
+Move_POWER_SWAP:
+ loadspritegfx ANIM_TAG_COLORED_ORBS
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32
+ delay 2
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32
+
+ waitforvisualfinish
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0, 42, -32
+ delay 2
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1, 42, 32
+ delay 2
+ waitforvisualfinish
+ end
+
+Move_GUARD_SWAP:
+ loadspritegfx ANIM_TAG_COLORED_ORBS
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32
+ delay 2
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32
+
+ waitforvisualfinish
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 0, 42, -32
+ delay 2
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32
+ delay 2
+ createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 3, 1, 42, 32
+ delay 2
+ waitforvisualfinish
+ end
+
+Move_PUNISHMENT:
+ loadspritegfx ANIM_TAG_SCRATCH
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan 155, SOUND_PAN_TARGET
+ createsprite gPunishmentSpriteTemplate, 2, 4, 0, 0, 1, 0
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ createsprite gPunishmentImpactSpriteTemplate 2, 4, 0, 0, 1, 2
+ createvisualtask AnimTask_ShakeMon 2, ANIM_TARGET, 3, 0, 6, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_LAST_RESORT:
+ fadetobg BG_COSMIC
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 2, 4, 0, 128, 0, -1
+ waitbgfadein
+ loadspritegfx ANIM_TAG_IMPACT
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ createsprite gComplexPaletteBlendSpriteTemplate, 2, 7, 2, 4, 2, RGB(31, 31, 31), 10, 0, 0
+ waitforvisualfinish
+ delay 10
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 18, 6, 2, 4
+ waitforvisualfinish
+ createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 0, 16, 16, RGB(31, 31, 31)
+ createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4
+ delay 3
+ waitforvisualfinish
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ createsprite gBasicHitSplatSpriteTemplate, 132, 4, -10, 0, 1, 0
+ createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 1, -32, 0, 0, 3
+ waitforvisualfinish
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 8, -256, 0, 0
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 8, -256, 1, 0
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 0, 4, 0, 12, 1
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 4, 0, 12, 1
+ createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 2, 16, 0, RGB(31, 31, 31)
+ waitforvisualfinish
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 8, -256, 0, 1
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 8, -256, 1, 1
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 0, 5
+ delay 3
+ createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 1, 0, 7
+ waitforvisualfinish
+ call UnsetHighSpeedBg
+ end
+
+Move_WORRY_SEED:
+ loadspritegfx ANIM_TAG_WORRY_SEED
+ loadspritegfx ANIM_TAG_SMALL_CLOUD
+ playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER
+ createsprite gWorrySeedSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 32, -32
+ waitforvisualfinish
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET
+ createsprite gSmallCloudTemplate, ANIM_ATTACKER, 3, -2, -1, 0, -1, -1
+ createsprite gSmallCloudTemplate, ANIM_ATTACKER, 3, 3, 1, 1, 2, -1
+ createsprite gSmallCloudTemplate, ANIM_ATTACKER, 3, -2, 1, 2, 1, -2
+ createsprite gSmallCloudTemplate, ANIM_ATTACKER, 3, 3, -2, 1, -1, -2
+ waitforvisualfinish
+ end
+
+Move_SUCKER_PUNCH:
+ loadspritegfx ANIM_TAG_POISON_JAB
+ loadspritegfx ANIM_TAG_IMPACT
+ createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4
+ createsprite gSuckerPunchSpriteTemplate, 130, 6, -18, 5, 40, 8, 160, 0
+ delay 4
+ createsprite gBasicHitSplatSpriteTemplate, 130, 4, -8, 8, 1, 2
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 6, 384, 1, 2
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4
+ end
+
+Move_TOXIC_SPIKES:
+ loadspritegfx ANIM_TAG_TOXIC_SPIKES
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ monbg ANIM_DEF_PARTNER
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28
+ createsprite gToxicSpikesSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 24, 30
+ delay 10
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28
+ createsprite gToxicSpikesSpriteTemplate, ANIM_TARGET, 2, 20, 0, -24, 24, 30
+ delay 10
+ waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28
+ createsprite gToxicSpikesSpriteTemplate, ANIM_TARGET, 2, 20, 0, 24, 24, 30
+ delay 40
+ call PoisonBubblesEffect
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_HEART_SWAP:
+ end
+
+Move_AQUA_RING:
+General_AquaRingHeal:
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS
+ loadspritegfx ANIM_TAG_GUARD_RING
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUARD_RING, 0, 14, 14, RGB_BLUE
+ monbg ANIM_ATK_PARTNER
+ setalpha 12, 8
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 23, 1
+ delay 5
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 10, 10, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, -15, 0, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 20, 10, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 0, -10, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, -10, 15, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 25, 20, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, -20, 20, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 12, 0, 25, 0
+ setalpha 8, 8
+ playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER,
+ createsprite gGuardRingSpriteTemplate, 2, 0
+ delay 4
+ createsprite gGuardRingSpriteTemplate, 2, 0
+ delay 4
+ createsprite gGuardRingSpriteTemplate, 2, 0
+ waitforvisualfinish
+ playsewithpan SE_SHINY, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_BlendColorCycle, 2, 10, 0, 2, 10, RGB(31, 31, 31)
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+Move_MAGNET_RISE:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_SPARK_2
+ delay 0
+ createvisualtask AnimTask_BlendColorCycle 2, 31, -31, 1, 5, 5, RGB(31, 31, 20)
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_WindUpLunge, 5, 7, 0, -12, 4, 10, 10, 12, 6
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 32, 24, 190, 12, 0, 1, 0
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 80, 24, 22, 12, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 156, 24, 121, 13, 0, 1, 1
+ delay 0
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ delay 4
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 100, 24, 60, 10, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 170, 24, 42, 11, 0, 1, 1
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 238, 24, 165, 10, 0, 1, 1
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 32, 24, 190, 12, 0, 1, 0
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 80, 24, 22, 12, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 156, 24, 121, 13, 0, 1, 1
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 100, 24, 60, 10, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 170, 24, 42, 11, 0, 1, 1
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 238, 24, 165, 10, 0, 1, 1
+ delay 0
+ createvisualtask AnimTask_BlendColorCycle, 2, 31, -31, 1, 0, 0, RGB(31, 31, 20)
+ delay 20
+ createvisualtask AnimTask_BlendColorCycle, 2, 31, -31, 1, 7, 7, RGB(31, 31, 20)
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendColorCycle, 2, 31, -31, 1, 0, 0, RGB(31, 31, 20)
+ waitforvisualfinish
+ end
+
+Move_FLARE_BLITZ:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ monbg ANIM_TARGET
+ splitbgprio_foes ANIM_TARGET
+ setalpha 12, 8
+ createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 2
+ createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 2
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 2
+ createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 2
+ createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 6
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 2
+ createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 2
+ createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 10
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 2
+ createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 2
+ waitforvisualfinish
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 1, 4
+ waitforvisualfinish
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 6
+ waitforvisualfinish
+ call SetImpactBackground
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1
+ createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0
+ createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, 192, 176, 40
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, 1, 0
+ createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1
+ createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, -192, 240, 40
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, 1, 0
+ createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1
+ createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, 192, -160, 40
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, 1, 0
+ createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1
+ createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, -192, -112, 40
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, 1, 0
+ createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1
+ createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, 160, 48, 40
+ playsewithpan SE_M_COMET_PUNCH, +63
+ delay 5
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, 1, 0
+ createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1
+ createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, -224, -32, 40
+ createsprite gFireSpreadSpriteTemplate, 0x81, 0, 10, 112, -128, 40
+ playsewithpan SE_M_COMET_PUNCH, +63
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_BLACK
+ playsewithpan SE_M_COMET_PUNCH, +63
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 9
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ delay 2
+ restorebg
+ waitbgfadein
+ end
+
+Move_FORCE_PALM:
+ loadspritegfx ANIM_TAG_SHADOW_BALL
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET
+ createsprite gKarateChopSpriteTemplate, 2, 8, -16, 0, 0, 0, 10, 1, 3, 0
+ waitforvisualfinish
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createsprite gForcePalmSpriteTemplate 3, 4, 0, 0, 1, 2
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_AURA_SPHERE:
+ loadspritegfx ANIM_TAG_METEOR
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ monbg ANIM_ATK_PARTNER
+ splitbgprio ANIM_ATTACKER
+ setalpha 12, 8
+ call SetAuraSphereBG
+ playsewithpan SE_M_SKY_UPPERCUT, 0
+ delay 60
+ createsprite gAuraSphereBlast, ANIM_TARGET, 3, 0
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ delay 16
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ call UnsetHighSpeedBg
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ delay 1
+ end
+
+SetAuraSphereBG:
+ fadetobg BG_AURA_SPHERE
+ goto SetHighSpeedBgFade
+
+Move_ROCK_POLISH:
+ loadspritegfx ANIM_TAG_WHITE_STREAK
+ loadspritegfx ANIM_TAG_SPARKLE_3
+ setalpha 12, 8
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 0, 12, RGB_BLACK
+ waitforvisualfinish
+ loopsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 10, 7
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -10, 3
+ delay 1
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 24, -19
+ delay 1
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -28, -15
+ delay 2
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -6, -30
+ delay 1
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -20, 6
+ delay 1
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 28, 2
+ delay 2
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -14, -25
+ delay 1
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 9, -2
+ delay 2
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -1, 0
+ delay 1
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 21, 4
+ delay 2
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 28, 20
+ delay 2
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -7, 24
+ delay 2
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -11, 1
+ delay 2
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 12, -18
+ delay 2
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -21, -14
+ delay 1
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -29, 7
+ delay 2
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 15, 28
+ delay 1
+ createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -21, -16
+ delay 2
+ waitforvisualfinish
+ playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -20, 9
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -10, -15
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 1, 17
+ delay 1
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -23, -16
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, -6
+ delay 1
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -16, -7
+ delay 1
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 22, -7
+ delay 1
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -19, 11
+ delay 1
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 12, 12
+ delay 1
+ createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 0, -17
+ waitforvisualfinish
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 12, 0, RGB_BLACK
+ waitforvisualfinish
+ blendoff
+ end
+
+Move_POISON_JAB:
+ loadspritegfx ANIM_TAG_PURPLE_JAB
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ setalpha 12, 8
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 3, -31, 10
+ delay 2
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -18, -25, 10
+ delay 2
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 27, 17, 10
+ delay 2
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -26, 18, 10
+ delay 2
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 10, 30, 10
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -7, 4, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -17, -27, 10
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -4, -6, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 2, 31, 10
+ createvisualtask AnimTask_SwayMon, 5, 0, 3, 0x2000, 6, ANIM_TARGET
+ createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB(16, 0, 16), 12, 0, 1
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 6, 4, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 15, -27, 10
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -6, 8, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -31, -2, 10
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, 6, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -26, -18, 10
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -6, -8, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 8, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -8, 0, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -7, -5, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ call PoisonBubblesEffect
+ waitforvisualfinish
+ blendoff
+ end
+
+Move_DARK_PULSE:
+ loadspritegfx ANIM_TAG_THIN_RING
+ monbg ANIM_TARGET
+ fadetobg BG_DARK
+ waitbgfadein
+ delay 0
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12
+ createvisualtask AnimTask_SpiteTargetShadow, 2
+ loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 20, 3
+ delay 8
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12
+ delay 8
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12
+ delay 8
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12
+ delay 8
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12
+ delay 8
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12
+ delay 8
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ delay 1
+ restorebg
+ waitbgfadein
+ end
+
+Move_NIGHT_SLASH:
+ loadspritegfx ANIM_TAG_SLASH
+ createvisualtask AnimTask_BlendNightSlash, 2, ANIM_TARGET, 2, 0, 8, 1
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 0, 12, RGB_BLACK
+ waitforvisualfinish
+ createsprite gNightSlashLeftSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ delay 4
+ createsprite gNightSlashLeftSpriteTemplate, ANIM_TARGET, 2, 1, 8, 0
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1
+ delay 40
+ createsprite gNightSlashRightSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0
+ createsprite gNightSlashRightSpriteTemplate, ANIM_TARGET, 2, 1, 8, 0
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 18, 1
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 12, 0, RGB_BLACK
+ waitforvisualfinish
+ end
+
+Move_AQUA_TAIL:
+ loadspritegfx ANIM_TAG_WATER_IMPACT
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 23, 1
+ delay 5
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 10, 10, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, -16, 0, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 20, 10, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 0, -10, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, -10, 15, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 25, 20, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, -20, 20, 25, 0
+ delay 4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, 2, 4, 12, 0, 25, 0
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_SLAM_HIT_2
+ loadspritegfx ANIM_TAG_IMPACT
+ createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 6
+ delay 4
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET
+ createsprite gAquaTailKnockOffSpriteTemplate, 130, 2, -16, -16
+ delay 8
+ createsprite gComplexPaletteBlendSpriteTemplate, 2, 7, 31, 5, 1, RGB(31, 31, 31), 10, 0, 0
+ createsprite gAquaTailHitSpriteTemplate, 131, 4, 0, 0, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 1, -12, 10, 0, 3
+ createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 0, 5
+ delay 3
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 0, 3, 6, 1
+ delay 5
+ createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 1, 0, 6
+ delay 10
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_SEED_BOMB:
+ loadspritegfx ANIM_TAG_SEED
+ loadspritegfx ANIM_TAG_EXPLOSION
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ delay 5
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ delay 5
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ delay 5
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 30, 1
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0
+ delay 6
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 1, 0
+ delay 6
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 1, 0
+ delay 6
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 1, 0
+ delay 6
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 1, 0
+ delay 6
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0
+ delay 6
+ createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 1, 0
+ delay 6
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 1, 0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 1, 0
+ delay 6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 1, 0
+ waitforvisualfinish
+ end
+
+Move_AIR_SLASH:
+ loadspritegfx ANIM_TAG_SLASH
+ call SetSkyBg
+ createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ delay 4
+ createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, 8, 0
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 18, 1
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ waitforvisualfinish
+ call UnsetSkyBg
+ end
+
+Move_XSCISSOR:
+ loadspritegfx ANIM_TAG_CUT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5
+ createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3
+ createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0
+ createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
+ delay 5
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1
+ createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 10, 0, 0
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_BUG_BUZZ:
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
+ loadspritegfx ANIM_TAG_THIN_RING
+ monbg ANIM_DEF_PARTNER
+ call SetBugBg
+ createvisualtask AnimTask_UproarDistortion, 2, 0
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 29, -12, 0
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -12, -29, 1
+ delay 16
+ createvisualtask AnimTask_UproarDistortion, 2, 0
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 12, -29, 1
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -29, -12, 0
+ delay 16
+ createvisualtask AnimTask_UproarDistortion, 2, 0
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, -24, 1
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, -24, 0
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ call UnsetBugBg
+ end
+
+Move_DRAGON_PULSE:
+ loadspritegfx ANIM_TAG_DRAGON_PULSE
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK
+ waitforvisualfinish
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
+ call DragonPulseParticle
+ call DragonPulseParticle
+ createvisualtask AnimTask_SwayMon, 5, 0, 6, 51200, 4, ANIM_TARGET
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(30, 10, 13)
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ waitforvisualfinish
+ delay 1
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, RGB_BLACK
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_TARGET
+ end
+DragonPulseParticle:
+ createsprite gDragonPulseSpriteTemplate, 130, 6, 16, 0, 0, 0, 13, 0
+ delay 4
+ return
+
+Move_DRAGON_RUSH:
+ loadspritegfx ANIM_TAG_SLAM_HIT_2
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ROCKS
+ loadspritegfx ANIM_TAG_RED_HEART
+ createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 6
+ delay 4
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET
+ createsprite gDragonRushSpriteTemplate, 131, 2, -16, -16
+ delay 8
+ createsprite gComplexPaletteBlendSpriteTemplate, 2, 7, 31, 5, 1, RGB(31, 31, 31), 10, 0, 0
+ createsprite gBasicHitSplatSpriteTemplate, 3, 4, 0, 0, 1, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1
+ waitforvisualfinish
+ playsewithpan 131, SOUND_PAN_TARGET
+ createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 0, 20, 24, 14, 2
+ createsprite gRockFragmentSpriteTemplate, 2, 6, 5, 0, -20, 24, 14, 1
+ createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 5, 20, -24, 14, 2
+ createsprite gRockFragmentSpriteTemplate, 2, 6, -5, 0, 20, 24, 14, 2
+ createsprite gRockFragmentSpriteTemplate, 2, 6, 0, -5, 30, 18, 8, 2
+ createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 0, 30, -18, 8, 2
+ createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 0, -30, 18, 8, 2
+ createsprite gRockFragmentSpriteTemplate, 2, 6, 0, 0, -30, -18, 8, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_POWER_GEM: @ Copy of Hidden Power with background blackened
+ loadspritegfx ANIM_TAG_POWER_GEM
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 1, 0, 7, RGB_BLACK
+ waitforvisualfinish
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ waitforvisualfinish
+ delay 30
+ createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB_WHITE, 12, 5, 1
+ delay 4
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER
+ createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 0
+ createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 42
+ createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 84
+ createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 126
+ createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 168
+ createsprite gPowerGemOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 210
+ delay 52
+ setarg 7, -1
+ playsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 0
+ createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 32
+ createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 64
+ createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 96
+ createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 128
+ createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 160
+ createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 192
+ createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 1, 7, 0, RGB_BLACK
+ waitforvisualfinish
+ end
+
+Move_DRAIN_PUNCH:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ loadspritegfx ANIM_TAG_ORBS
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_VITAL_THROW2, -64
+ createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1
+ delay 20
+ call MegaDrainAbsorbEffect
+ waitforvisualfinish
+ delay 15
+ call HealingEffect
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_VACUUM_WAVE:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_THIN_RING
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, -8, 1, 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0, 0x7FFF, 3
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_FOCUS_BLAST:
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_METEOR
+ loadspritegfx ANIM_TAG_FLAT_ROCK
+ monbg ANIM_ATK_PARTNER
+ splitbgprio ANIM_ATTACKER
+ setalpha 12, 8
+ call SetFocusBlastBG
+ createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 2, 0
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ call UnsetHighSpeedBg
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ delay 1
+ end
+
+SetFocusBlastBG:
+ fadetobg BG_FOCUS_BLAST
+ goto SetHighSpeedBgFade
+
+Move_ENERGY_BALL:
+ loadspritegfx ANIM_TAG_ENERGY_BALL
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 8, RGB_BLACK
+ waitforvisualfinish
+ delay 15
+ createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_MIST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 5, 0, 5
+ createsprite gEnergyBallSpriteTemplate, ANIM_TARGET, 2, 12, 4, 8
+ waitforvisualfinish
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 8, 1
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 8, 0, RGB_BLACK
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_BRAVE_BIRD:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_BIRD
+ call SetSkyBg
+ monbg ANIM_ATTACKER
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 0, 16, RGB_WHITE
+ delay 4
+ createvisualtask AnimTask_AttackerFadeToInvisible, 5, 0
+ waitforvisualfinish
+ createvisualtask SoundTask_PlaySE2WithPanning, 5, 238, SOUND_PAN_ATTACKER
+ createsprite gSkyAttackBirdSpriteTemplate, ANIM_TARGET, 2
+ delay 14
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 10, 0, 18, 1
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, 141, SOUND_PAN_TARGET
+ delay 20
+ createvisualtask AnimTask_AttackerFadeFromInvisible, 5, 1
+ delay 2
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 15, 0, RGB_WHITE
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ call UnsetSkyBg
+ end
+
+Move_EARTH_POWER:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ loadspritegfx ANIM_TAG_FIRE_PLUME
+ createvisualtask AnimTask_HorizontalShake, 3, 5, 10, 50
+ createvisualtask AnimTask_HorizontalShake, 3, 1, 10, 50
+ playsewithpan SE_M_EARTHQUAKE, SOUND_PAN_TARGET
+ delay 40
+ loopsewithpan 145, SOUND_PAN_TARGET 11, 3
+ createvisualtask AnimTask_ShakeMon 5, 5, ANIM_TARGET, 0, 3, 25, 1
+ createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, 5, 0
+ delay 1
+ createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, -10, -15
+ delay 1
+ createsprite gDragonRageFirePlumeSpriteTemplate, 130, 3, 1, 0, 25
+ delay 1
+ createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, 15, 5
+ delay 1
+ createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, -25, 0
+ delay 1
+ createsprite gDragonRageFirePlumeSpriteTemplate, 130, 3, 1, 30, 30
+ delay 1
+ createsprite gDragonRageFirePlumeSpriteTemplate, 130, 3, 1, -27, 25
+ delay 1
+ createsprite gDragonRageFirePlumeSpriteTemplate, 194, 3, 1, 0, 8
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, 194, 3, 0, 0, 4
+ waitforvisualfinish
+ end
+
+Move_SWITCHEROO:
+ fadetobg BG_DARK
+ waitbgfadein
+ loadspritegfx ANIM_TAG_ITEM_BAG
+ loadspritegfx ANIM_TAG_SPEED_DUST
+ createsprite gTrickBagSpriteTemplate, 2, 2, -39, 80
+ createsprite gTrickBagSpriteTemplate, 2, 2, -39, 208
+ delay 16
+ playsewithpan SE_M_SKETCH, 0
+ createvisualtask AnimTask_StretchTargetUp, 3, 0
+ createvisualtask AnimTask_StretchAttackerUp, 3, 0
+ delay 30
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ delay 24
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ delay 16
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ delay 16
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ delay 16
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ delay 16
+ playsewithpan SE_M_DOUBLE_TEAM, 0
+ delay 16
+ playsewithpan SE_M_ATTRACT, 0
+ createvisualtask AnimTask_ShakeMon, 3, ANIM_ATTACKER, 5, 0, 7, 2
+ createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 5, 0, 7, 2
+ waitforvisualfinish
+ restorebg
+ waitbgfadein
+ end
+
+Move_GIGA_IMPACT:
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ createvisualtask AnimTask_IsContest, 2
+ jumprettrue SetGigaImpactContestsBG
+ createvisualtask AnimTask_IsTargetPlayerSide, 2
+ jumpretfalse SetGigaImpactOpponentBG
+ goto SetGigaImpactPlayerBG
+SetGigaImpactOpponentBG:
+ fadetobg BG_GIGA_IMPACT_OPPONENT
+ goto GigaImpactContinuity
+SetGigaImpactPlayerBG:
+ fadetobg BG_GIGA_IMPACT_PLAYER
+ goto GigaImpactContinuity
+SetGigaImpactContestsBG:
+ fadetobg BG_GIGA_IMPACT_CONTEST
+ goto GigaImpactContinuity
+GigaImpactContinuity:
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, ANIM_ATTACKER
+ waitforvisualfinish
+ delay 11
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5
+ delay 6
+ waitbgfadeout
+ createsprite gBasicHitSplatSpriteTemplate, 4, 4, -10, 0, 1, 0
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ delay 1
+ createsprite gSlideMonToOffsetSpriteTemplate 2, 5, 1, -16, 0, 0, 4
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMonInPlace 2, 5, 1, 4, 0, 12, 1
+ waitforvisualfinish
+ delay 2
+ createsprite gSlideMonToOriginalPosSpriteTemplate 2, 3, 0, 0, 5
+ delay 3
+ createsprite gSlideMonToOriginalPosSpriteTemplate 2, 3, 1, 0, 6
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ restorebg
+ waitbgfadein
+ waitforvisualfinish
+ end
+
+Move_NASTY_PLOT:
+ loadspritegfx ANIM_TAG_AMNESIA
+ fadetobg BG_DARK
+ waitbgfadeout
+ createvisualtask AnimTask_FadeScreenToWhite, 5
+ waitbgfadein
+ delay 8
+ createsprite gQuestionMarkSpriteTemplate, 20, 0
+ playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER,
+ delay 54
+ loopsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER, 16, 3
+ waitforvisualfinish
+ call UnsetPsychicBg
+ end
+
+Move_BULLET_PUNCH:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -8, 0, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -16, 8, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 8, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, -16, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 8, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 8, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 24, 0, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 24, 16, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 24, 16, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -24, 16, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -24, 16, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -24, -8, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -24, -8, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -24, 8, 8, 1, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -24, 8, 1, 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 2
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 9, 0, 8, 1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_AVALANCHE:
+ loadspritegfx ANIM_TAG_ROCKS
+ loadspritegfx ANIM_TAG_ICE_CHUNK
+ monbg ANIM_DEF_PARTNER
+ createsprite gShakeMonOrTerrainSpriteTemplate, 2, 4, 7, 1, 11, 1
+ createsprite gAvalancheSpriteTemplate, 130, 4, -5, 1, -5, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate, 130, 4, 5, 0, 6, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate, 130, 4, 19, 1, 10, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate 130, 4, -17, 2, -20, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 50, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 5, 50, 1
+ delay 2
+ call SnowSlide1
+ call SnowSlide1
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+SnowSlide1:
+ createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 28, 1, 10, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -10, 1, -5, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 10, 0, 6, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 24, 1, 10, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -32, 2, -10, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, 30, 2, 10, 1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 2
+ return
+
+Move_ICE_SHARD:
+ monbg ANIM_TARGET
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS
+ fadetobg BG_ICE
+ waitbgfadein
+ createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_BUBBLE_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 4, 4, 0, 10
+ createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, 70, 0, 42, 35
+ createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, 58, 0, 30, 35
+ createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, -12, 0, 22, 40
+ createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, 0, 0, 10, 40
+ delay 5
+ createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -30, 10, -12, 45
+ createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -42, 10, -24, 45
+ createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -20, 10, -36, 45
+ createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -32, 10, -24, 45
+ delay 5
+ createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, 20, 22, 45
+ createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, -2, 20, 10, 45
+ createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 20, -2, 30
+ createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, 8, 20, 10, 30
+ delay 1
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, -31, 0, 7, RGB(0, 20, 31)
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 25, 1
+ waitforvisualfinish
+ delay 20
+ call IceCrystalEffectShort
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, 5, 7, 0, RGB(0, 20, 31)
+ waitforvisualfinish
+ restorebg
+ waitbgfadein
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_SHADOW_CLAW:
+ loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL
+ loadspritegfx ANIM_TAG_CLAW_SLASH
+ loadspritegfx ANIM_TAG_TORN_METAL
+ fadetobg BG_GHOST
+ waitbgfadein
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gHorizontalLungeSpriteTemplate ANIM_ATTACKER, 2, 6, 4
+ delay 4
+ createvisualtask AnimTask_ShakeMon2 2, ANIM_TARGET, 2, 0, 18, 1
+ createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, -10, 0
+ createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, 10, 0
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ delay 12,
+ createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, -10, 1
+ createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, 10, 1
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ waitforvisualfinish
+ restorebg
+ waitbgfadein
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_TARGET
+ end
+
+Move_THUNDER_FANG:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_LIGHTNING
+ loadspritegfx ANIM_TAG_SHARP_TEETH
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, RGB_BLACK
+ waitforvisualfinish
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
+ delay 1
+ createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48
+ delay 1
+ createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, -16
+ delay 1
+ createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, 16
+ delay 1
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10
+ createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10
+ delay 1
+ playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
+ delay 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2
+ delay 1
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_BLACK
+ delay 20
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ delay 1
+ end
+
+Move_ICE_FANG:
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS
+ loadspritegfx ANIM_TAG_SHARP_TEETH
+ loadspritegfx ANIM_TAG_IMPACT
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB(12, 26, 31)
+ delay 20
+ playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET
+ createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 0
+ createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 64
+ createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 128
+ createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 192
+ delay 5
+ createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 32
+ createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 96
+ createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 160
+ createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 224
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10
+ createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10
+ waitforvisualfinish
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 7, 1
+ delay 15
+ call IceCrystalEffectShort
+ delay 5
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 9, 0, RGB(12, 26, 31)
+ waitforvisualfinish
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, RGB_BLACK
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ delay 1
+ end
+
+Move_FIRE_FANG:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ loadspritegfx ANIM_TAG_SHARP_TEETH
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB_RED
+ createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 0
+ createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 64
+ createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 128
+ createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 196
+ createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10
+ createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ delay 10
+ waitforvisualfinish
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 7, 1
+ call FireSpreadEffect
+ delay 4
+ playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 9, 0, RGB_RED
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ delay 1
+ end
+
+Move_SHADOW_SNEAK:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond
+ loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ monbg ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x0000
+ waitforvisualfinish
+ playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x12 0x6 0x1 0x3
+ launchtask AnimTask_AttackerFadeToInvisible 0x2 0x1 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ invisible ANIM_ATTACKER
+ delay 0x1
+ launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30
+ delay 0x30
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xF 0x0
+ createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0
+ call ShadowSneakMovement
+ createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0
+ call ShadowSneakMovement
+ createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0
+ call ShadowSneakMovement
+ createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0
+ call ShadowSneakMovement
+ waitforvisualfinish
+ visible ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x0000
+ waitforvisualfinish
+ end
+ShadowSneakMovement:
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ delay 0x4
+ return
+
+Move_MUD_BOMB:
+ loadspritegfx ANIM_TAG_MUD_SAND
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25
+ delay 5
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25
+ delay 5
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25
+ delay 5
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25
+ delay 11
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 42, 27, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 42, 27, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -27, 44, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 39, -28, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -42, -42, 20
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 5
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 0, 40, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -8, -44, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -46, -28, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 46, 9, 20
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 5
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 42, 0, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -43, -12, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 16, -46, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -16, 44, 20
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 5
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 0, 40, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -8, -44, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -46, -28, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 46, 9, 20
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 5
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 42, 0, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -43, -12, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, 16, -46, 20
+ createsprite gMudBombSplash, ANIM_TARGET, 2, -16, 44, 20
+ waitforvisualfinish
+ end
+
+Move_PSYCHO_CUT:
+ loadspritegfx ANIM_TAG_SPIRAL
+ loadspritegfx ANIM_TAG_PSYCHO_CUT
+ monbg ANIM_ATK_PARTNER
+ createsprite gPsychoCutSpiralSpriteTemplate, 2, 4, 0, 0, 0, 0
+ createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 0, 4, RGB_BLACK
+ createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 0, 10, RGB(20, 12, 23)
+ delay 30
+ clearmonbg ANIM_ATK_PARTNER
+ waitforvisualfinish
+ monbg ANIM_TARGET
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER,
+ createsprite gPsychoCutSpriteTemplate, 130, 5, 20, 0, -8, 0, 20
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 4, 0, RGB_BLACK
+ createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 10, 0, RGB(20, 12, 23)
+ clearmonbg ANIM_TARGET
+ blendoff
+ waitforvisualfinish
+ end
+
+Move_ZEN_HEADBUTT:
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_WATER_IMPACT
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 2, 0, 4, 0
+ waitforvisualfinish
+ createsprite gZenHeadbuttSpriteTemplate, 66, 1, 0
+ delay 18,
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 2,
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ loadspritegfx ANIM_TAG_IMPACT
+ createsprite gBowMonSpriteTemplate, 2, 1, 0
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 2
+ createsprite gBowMonSpriteTemplate, 2, 1, 1
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 0, 2, 0, 4, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1
+ createsprite gBowMonSpriteTemplate, 2, 1, 2
+ createsprite gAquaTailHitSpriteTemplate, 131, 4, 0, 0, 1, 1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 4, 4, 0, 0
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ delay 1
+ end
+
+Move_MIRROR_SHOT:
+ loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
+ createvisualtask AnimTask_MetallicShine, 5, 1, 0, 0
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 10, RGB_WHITEALPHA
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(21, 21, 21)
+ waitforvisualfinish
+ createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 10, 0, RGB_WHITEALPHA
+ createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+
+Move_FLASH_CANNON:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS
+ loadspritegfx ANIM_TAG_GUST
+ loadspritegfx ANIM_TAG_FLASH_CANNON_BALL
+ monbg ANIM_ATTACKER
+ setalpha 13, 8
+ createvisualtask AnimTask_ElectricChargingParticles, 2, 0, 60, 2, 12
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 30
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 30
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ createsprite gFlashCannonGrayChargeTemplate, ANIM_ATTACKER, 2, 0
+ delay 25
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 20
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 15
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 10
+ delay 6
+ loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 6, 5
+ waitforvisualfinish
+ playsewithpan SE_M_PAY_DAY, SOUND_PAN_ATTACKER
+ createsprite gFlashCannonBallMovementTemplate, ANIM_TARGET, 2, 0, 0, 0x15
+ clearmonbg ANIM_ATTACKER
+ waitforvisualfinish
+ playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_Flash, 2
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 16, 0, 0x1f
+ createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 15, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+Move_ROCK_CLIMB:
+ createvisualtask AnimTask_Splash, 2, 2, ANIM_ATTACKER, 3
+ delay 8
+ loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_MUD_SAND
+ loadspritegfx ANIM_TAG_ROCKS
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ createvisualtask AnimTask_Rollout, 2, 0
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, 5, 0, 1, 30, 1, RGB(0, 16, 1)
+ createsprite gBasicHitSplatSpriteTemplate, 131, 4, -15, 8, 1, 1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ createsprite gBasicHitSplatSpriteTemplate, 131, 4, -5, -12, 1, 1
+ delay 1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ createsprite gBasicHitSplatSpriteTemplate, 131, 4, 0, -32, 1, 1
+ delay 1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ createsprite gBasicHitSplatSpriteTemplate, 131, 4, 5, -52, 1, 1
+ createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 1, -25, 16, 1, 4
+ delay 4
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 0, 3, 6, 1
+ delay 30
+ createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 0, 6
+ delay 4
+ createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 1, 0, 6
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_DEFOG:
+ loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
+ createsprite gLusterPurgeCircleSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0
+ delay 20
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, -1
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, 2, 0, 16, -1
+ waitforvisualfinish
+ waitforvisualfinish
+ delay 16
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, -1
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+
+Move_TRICK_ROOM::
+ call InitRoomAnimation
+ fadetobg BG_TRICK_ROOM
+ waitbgfadein
+ delay 0x40
+ restorebg
+ waitbgfadein
+ blendoff
+ end
+InitRoomAnimation:
+ setalpha 8, 8
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET
+ launchtask AnimTask_ScaleMonAndRestore 5 5 0xfffa 0xfffa 15, 1 1
+ return
+
+Move_DRACO_METEOR:
+ loadspritegfx ANIM_TAG_WARM_ROCK
+ loadspritegfx ANIM_TAG_GOLD_STARS
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ICE_SPIKES
+ playsewithpan SE_M_CHARGE, SOUND_PAN_TARGET
+ fadetobg BG_COSMIC
+ waitbgfadein
+ waitforvisualfinish
+ createsprite gDracoMeteorSmashSpriteTemplate, 131, 5, -47, -63, 72, 32, 30
+ delay 10
+ createsprite gDracoMeteorSmashSpriteTemplate, 131, 5, -111, -63, 8, 32, 30
+ delay 40
+ createsprite gDracoMetorSpriteTemplate, 131, 4, 0, 0, 0, 30
+ createsprite gDracoMeteorSmashSpriteTemplate, 131, 5, -79, -63, 40, 32, 30
+ delay 20
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 10
+ restorebg
+ waitbgfadein
+ waitforvisualfinish
+ end
+
+Move_DISCHARGE:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_SPARK_2
+ delay 0
+ createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 20)
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, 0, 1, 0
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, 0, 1, 1
+ delay 0
+ createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 20)
+ delay 10
+ createvisualtask AnimTask_BlendColorCycle 2, 3, -31, 1, 5, 5, RGB(31, 31, 20)
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, 0, 1, 1
+ loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_IMPACT
+ waitbgfadein
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
+ createsprite gLusterPurgeCircleSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0
+ delay 20
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, 2, 0, 16, RGB_WHITEALPHA
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(0, 0, 23)
+ waitforvisualfinish
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET
+ delay 3
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2
+ createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
+ createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
+ createvisualtask AnimTask_HorizontalShake, 5, ANIM_DEF_PARTNER, 5, 14
+ createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATK_PARTNER, 5, 14
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ call DischargeElectrify
+ waitforvisualfinish
+ end
+DischargeElectrify:
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_DEF_PARTNER
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_ATK_PARTNER
+ delay 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_DEF_PARTNER
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_ATK_PARTNER
+ delay 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_DEF_PARTNER
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_ATK_PARTNER
+ delay 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_DEF_PARTNER
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_ATK_PARTNER
+ delay 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_DEF_PARTNER
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_ATK_PARTNER
+ delay 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_DEF_PARTNER
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_ATK_PARTNER
+ delay 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_DEF_PARTNER
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_ATK_PARTNER
+ delay 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_DEF_PARTNER
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_ATK_PARTNER
+ return
+
+Move_LAVA_PLUME:
+ loadspritegfx ANIM_TAG_FIRE_PLUME
+ loopsewithpan 152, SOUND_PAN_ATTACKER, 9, 2
+ createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_RED
+ createvisualtask AnimTask_ShakeMon2 2, ANIM_TARGET, 1, 0, 32, 1
+ createvisualtask AnimTask_ShakeMon2 2, ANIM_DEF_PARTNER, 1, 0, 32, 1
+ createvisualtask AnimTask_ShakeMon2 2, ANIM_ATK_PARTNER, 1, 0, 32, 1
+ waitforvisualfinish
+ createsprite gLavaPlumeSpriteTemplate, 130, 1, 0
+ createsprite gLavaPlumeSpriteTemplate, 130, 1, 32
+ createsprite gLavaPlumeSpriteTemplate, 130, 1, 64
+ createsprite gLavaPlumeSpriteTemplate, 130, 1, 96
+ createsprite gLavaPlumeSpriteTemplate, 130, 1, 128
+ createsprite gLavaPlumeSpriteTemplate, 130, 1, 160
+ createsprite gLavaPlumeSpriteTemplate, 130, 1, 192
+ createsprite gLavaPlumeSpriteTemplate, 130, 1, 224
+ playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ end
+
+Move_LEAF_STORM:
+ loadspritegfx ANIM_TAG_RAZOR_LEAF
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_LEAF
+ monbg ANIM_DEF_PARTNER
+ splitbgprio_foes ANIM_TARGET
+ setalpha 12, 8
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 12, RGB(13, 31, 12)
+ waitforvisualfinish
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0
+ delay 3
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 5, 0, 50, 1
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -8, 11, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -16, 19, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 12, 19, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -20, 23, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 16, 23, 0, 0
+ delay 3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 14, -12, 0, -24, 27, 0, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0
+ delay 3
+ waitforvisualfinish
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 0, -36, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 24, -12, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 24, 12, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 0, 36, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -24, 12, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -24, -12, 10
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ delay 2
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 36, 0, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 12, -24, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 12, 24, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -36, 0, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -12, 24, 10
+ createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, -12, -24, 10
+ waitforvisualfinish
+ blendoff
+ delay 0
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 12, 0, RGB(13, 31, 12)
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_POWER_WHIP:
+ loadspritegfx ANIM_TAG_WHIP_HIT
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 10
+ delay 6
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET
+ createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 0, 0
+ delay 6
+ call SetImpactBackground
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1
+ restorebg
+ waitbgfadein
+ end
+
+Move_ROCK_WRECKER:
+ jumpargeq 7, 1, RockWrecker_1
+ fadetobg BG_ROCK_WRECKER
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 5, -1024, 0, 1, -1
+ goto RockWrecker_2
+RockWrecker_1:
+ fadetobg BG_ROCK_WRECKER
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 5, -1024, 0, 0, -1
+ loadspritegfx ANIM_TAG_ROCKS
+ loadspritegfx ANIM_TAG_IMPACT
+ createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 6
+ delay 3
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ createsprite gRockBlastRockSpriteTemplate, 130, 6, 16, 0, 0, 0, 25, 257
+ waitforvisualfinish
+ createsprite gBasicHitSplatSpriteTemplate, 131, 4, 0, 0, 1, 1
+ playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET
+ createsprite gRockFragmentSpriteTemplate, 130, 6, 0, 0, 20, 24, 14, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1
+ createsprite gRockFragmentSpriteTemplate, 130, 6, 5, 0, -20, 24, 14, 1
+ createsprite gRockFragmentSpriteTemplate, 130, 6, 0, 5, 20, -18, 14, 2
+ createsprite gRockFragmentSpriteTemplate, 130, 6, -5, 0, -20, -18, 14, 2
+ waitforvisualfinish
+ call UnsetPsychicBg
+ end
+RockWrecker_2:
+ loadspritegfx ANIM_TAG_ROCKS
+ loadspritegfx ANIM_TAG_IMPACT
+ createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 6
+ delay 3
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ createsprite gRockBlastRockSpriteTemplate, 130, 6, 16, 0, 0, 0, 25, 257
+ waitforvisualfinish
+ createsprite gBasicHitSplatSpriteTemplate, 131, 4, 0, 0, 1, 1
+ playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET
+ createsprite gRockFragmentSpriteTemplate 130, 6, 0, 0, 20, 24, 14, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1
+ createsprite gRockFragmentSpriteTemplate 130, 6, 5, 0, -20, 24, 14, 1
+ createsprite gRockFragmentSpriteTemplate 130, 6, 0, 5, 20, -18, 14, 2
+ createsprite gRockFragmentSpriteTemplate 130, 6, -5, 0, -20, -18, 14, 2
+ waitforvisualfinish
+ call UnsetPsychicBg
+ end
+
+Move_CROSS_POISON:
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ loadspritegfx ANIM_TAG_CROSS_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_WHITE, 10, 0, 10
+ createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1
+ waitforvisualfinish
+ call PoisonBubblesEffect
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_GUNK_SHOT:
+ loadspritegfx ANIM_TAG_WATER_ORB
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ loadspritegfx ANIM_TAG_WATER_IMPACT
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ call SetGunkShotBG
+ createvisualtask AnimTask_ShakeMon 5, 5, ANIM_ATTACKER, 0, 2, 40, 1
+ delay 6
+ panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0
+ createvisualtask AnimTask_StartSinAnimTimer, 5, 1, 100
+ call GunkShotParticles
+ call GunkShotParticles
+ call GunkShotParticles
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 27, 1
+ loopsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET, 3, 15
+ call GunkShotImpact
+ call GunkShotParticles
+ call GunkShotParticles
+ call GunkShotImpact
+ call GunkShotParticles
+ call GunkShotParticles
+ call GunkShotImpact
+ call GunkShotParticles
+ call GunkShotParticles
+ call GunkShotImpact
+ call GunkShotParticles
+ call GunkShotParticles
+ call GunkShotImpact
+ delay 1
+ delay 1
+ call GunkShotImpact
+ call PoisonBubblesEffect
+ waitforvisualfinish
+ call UnsetHighSpeedBg
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+GunkShotParticles:
+ createsprite gGunkShoParticlesSpriteTemplate, 3, 4, 10, 10, 0, 16
+ createsprite gGunkShoParticlesSpriteTemplate, 3, 4, 10, 10, 0, -16
+ delay 1
+ createsprite gGunkShoParticlesSpriteTemplate, 3, 4, 10, 10, 0, 16
+ createsprite gGunkShoParticlesSpriteTemplate, 3, 4, 10, 10, 0, -16
+ delay 1
+ return
+GunkShotImpact:
+ createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, 15, 1, 1
+ createsprite gGunkShotImpactSpriteTemplate, 4, 4, 0, -15, 1, 1
+ return
+SetGunkShotBG:
+ fadetobg BG_GUNK_SHOT
+ goto SetHighSpeedBgFade
+
+
+Move_IRON_HEAD:
+ loadspritegfx ANIM_TAG_GUST
+ loadspritegfx ANIM_TAG_IMPACT
+ loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
+ createvisualtask AnimTask_MetallicShine, 5, 1, 0, 0
+ waitforvisualfinish
+ createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 2
+ createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 1
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 7, 1
+ createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2
+ createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1
+ waitforvisualfinish
+ end
+
+Move_MAGNET_BOMB:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_SPARK_2
+ delay 0
+ playsewithpan 119, 192
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 32, 24, 190, 12, 0, 1, 0
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 80, 24, 22, 12, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate, 0, 7, 156, 24, 121, 13, 0, 1, 1
+ delay 0
+ playsewithpan 119, 192
+ createsprite gSparkElectricitySpriteTemplate 0, 7, 100, 24, 60, 10, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate 0, 7, 170, 24, 42, 11, 0, 1, 1
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate 0, 7, 238, 24, 165, 10, 0, 1, 1
+ delay 0
+ loadspritegfx ANIM_TAG_RED_ORB
+ playsewithpan 152, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ waitforvisualfinish
+ delay 30
+ createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(19, 31, 31), 12, 5, 1
+ delay 4
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ playsewithpan 217, SOUND_PAN_ATTACKER
+ createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 0
+ createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 42
+ createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 84
+ createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 126
+ createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 168
+ createsprite gHiddenPowerOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 210
+ delay 52
+ setarg 7, -1
+ playsewithpan 207, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 0
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 32
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 64
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 96
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 128
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 160
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 192
+ createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224
+ loadspritegfx ANIM_TAG_GRAY_SMOKE
+ loadspritegfx ANIM_TAG_BLACK_BALL
+ playsewithpan 177, 63
+ createsprite gOctazookaSmokeSpriteTemplate, 130, 4, 8, 8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, 130, 4, -8, -8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, 130, 4, 8, -8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, 130, 4, -8, 8, 1, 0
+ waitforvisualfinish
+ playsewithpan 177, 63
+ createsprite gOctazookaSmokeSpriteTemplate, 130, 4, 8, 8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, 130, 4, -8, -8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, 130, 4, 8, -8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, 130, 4, -8, 8, 1, 0
+ waitforvisualfinish
+ end
+
+Move_STONE_EDGE:
+ loadspritegfx ANIM_TAG_STONE_EDGE
+ loadspritegfx ANIM_TAG_IMPACT
+ playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 528, 30, 13, 50, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 32, 480, 20, 16, -46, 1
+ delay 2
+ loopsewithpan 131, SOUND_PAN_TARGET 24, 3
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 576, 20, 8, 42, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 31, 400, 25, 11, -42, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 512, 25, 16, 46, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 464, 30, 15, 49, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 528, 30, 13, 50, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 32, 480, 20, 16, -46, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 576, 20, 8, 42, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 31, 400, 25, 11, -42, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 512, 25, 16, 46, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 464, 30, 15, 49, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 528, 30, 13, 50, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 32, 480, 20, 16, -46, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 576, 20, 8, 42, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 31, 400, 25, 11, -42, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 28, 512, 25, 16, 46, 1
+ delay 2
+ createsprite gStoneEdgeSpriteTemplate, 130, 7, 0, 33, 464, 30, 15, 49, 1
+ delay 2
+ createsprite gBasicHitSplatSpriteTemplate, 131, 4, -32, -16, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 3, 0, 12, 1
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 3, 3, 0, 12, 1
+ delay 4
+ createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 4
+ createsprite gRandomPosHitSplatSpriteTemplate, 131, 2, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 4
+ createsprite gBasicHitSplatSpriteTemplate, 131, 4, 32, 20, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_CAPTIVATE:
+ loadspritegfx ANIM_TAG_MAGENTA_HEART
+ loadspritegfx ANIM_TAG_SPARKLE_2
+ createvisualtask AnimTask_RockMonBackAndForth, 5, 3, 0, 2, 0
+ createsprite gMagentaHeartSpriteTemplate, 3, 2, 0, 20
+ playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER
+ delay 15
+ createsprite gMagentaHeartSpriteTemplate, 3, 2, -20, 20
+ playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER
+ delay 15
+ createsprite gMagentaHeartSpriteTemplate, 3, 2, 20, 20
+ playsewithpan 228, SOUND_PAN_ATTACKER,
+ call GrantingStarsEffect
+ waitforvisualfinish
+ end
+
+Move_STEALTH_ROCK:
+ loadspritegfx ANIM_TAG_STEALTH_ROCK
+ monbg ANIM_DEF_PARTNER
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28
+ createsprite gStealthRockSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 24, 30
+ delay 10
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28
+ createsprite gStealthRockSpriteTemplate, ANIM_TARGET, 2, 20, 0, -24, 24, 30
+ delay 10
+ waitplaysewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 28
+ createsprite gStealthRockSpriteTemplate, ANIM_TARGET, 2, 20, 0, 24, 24, 30
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_GRASS_KNOT:
+ loadspritegfx ANIM_TAG_RAZOR_LEAF
+ loadspritegfx ANIM_TAG_IMPACT
+ createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4
+ createsprite gGrassKnotSpriteTemplate, 130, 6, -18, 19, 40, 8, 160, 0
+ delay 4
+ createsprite gBasicHitSplatSpriteTemplate, 130, 4, -8, 8, 1, 2
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 6, 384, 1, 2
+ playsewithpan SE_M_VITAL_THROW2 SOUND_PAN_TARGET
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4
+ end
+
+Move_CHATTER:
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
+ loadspritegfx ANIM_TAG_THIN_RING
+ loadspritegfx ANIM_TAG_MUSIC_NOTES
+ monbg ANIM_DEF_PARTNER
+ createvisualtask AnimTask_UproarDistortion, 2, 0
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1f, 8
+ createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 0xff
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0x1d, -12, 0
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 0xffe3, 1
+ delay 16
+ createvisualtask AnimTask_UproarDistortion, 2, 0
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1f, 8
+ createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 0xff
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 12, 0xffe3, 1
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0xffe3, -12, 0
+ delay 16
+ createvisualtask AnimTask_UproarDistortion, 2, 0
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1f, 8
+ createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 0xff
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0x18, 0xffe8, 1
+ createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0xffe8, 0xffe8, 0
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @FreezingCrystalsSingleBattle particles
+ createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, -10, -10, 0
+ delay 4
+ createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 10, 20, 0
+ delay 4
+ createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 0xfffb, 10, 0
+ delay 4
+ createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 0x11, -12, 0
+ delay 4
+ createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 0xfff1, 15, 0
+ delay 4
+ createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 0, 0, 0
+ delay 4
+ createsprite gChatterSingNotesTemplate, ANIM_TARGET, 2, 20, 2, 0
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_JUDGMENT:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_GREEN_SPIKE
+ loadspritegfx ANIM_TAG_GUST
+ loadspritegfx ANIM_TAG_ORBS
+ loadspritegfx ANIM_TAG_ELECTRICITY
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUST, 0, 14, 14, 0
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HANDS_AND_FEET, 0, 10, 10, 0
+ monbg ANIM_TARGET
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 15, 32767
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 83, 1
+ createsprite gJudgmentBlackChargeTemplate, ANIM_TARGET, 1, 1, ANIM_TARGET
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET
+ call JudgmentInwardSpikes
+ delay 5
+ call JudgmentInwardSpikes2
+ delay 5
+ call JudgmentInwardSpikes
+ delay 5
+ call JudgmentInwardSpikes2
+ delay 5
+ call JudgmentInwardSpikes
+ delay 5
+ call JudgmentInwardSpikes2
+ delay 5
+ call JudgmentInwardSpikes2
+ delay 0x2F
+ call JudgmentOutwardSpikes
+ delay 5
+ call JudgmentOutwardSpikes2
+ delay 5
+ call JudgmentOutwardSpikes
+ delay 5
+ call JudgmentOutwardSpikes2
+ delay 5
+ call JudgmentOutwardSpikes
+ delay 5
+ call JudgmentOutwardSpikes2
+ delay 5
+ call JudgmentOutwardSpikes
+ delay 5
+ call JudgmentOutwardSpikes2
+ delay 5
+ call JudgmentOutwardSpikes
+ delay 5
+ call JudgmentOutwardSpikes2
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 15, 0, 32767
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+JudgmentOutwardSpikes:
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0, 0xFF90, 16 @up
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 95, 0xFF9D, 16 @upper right
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x73, 0, 16 @right
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x4F, 0x37, 16 @lower right
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0, 0x53, 16 @down
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFFB0, 0x43, 16 @lower left
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFF60, 0, 16 @left
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFFAA, 0xFF94, 16 @upper left
+ playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER
+ return
+JudgmentOutwardSpikes2:
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x2D, 0xFF9D, 16 @between up and upper right
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xDF, 0xFF9D, 16 @between right and upper right
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x9F, 0x37, 16 @between right and lower right
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0x1F, 0x37, 16 @between lower right and down
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFFE0, 0x43, 16 @between lower left and down
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFF60, 0x43, 16 @between left and lower left
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFF2A, 0xFFAA, 16 @between left and upper left
+ createsprite gJudgmentGrayOutwardSpikesTemplate, ANIM_TARGET, 2, 1, 1, 0xFFDA, 0xFF94, 16 @between up and upper left
+ playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER
+ return
+JudgmentInwardSpikes:
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0, 0xFF90, 16 @up
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 95, 0xFF9D, 16 @upper right
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x73, 0, 16 @right
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x4F, 0x37, 16 @lower right
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0, 0x53, 16 @down
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFB0, 0x43, 16 @lower left
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFF60, 0, 16 @left
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFAA, 0xFF94, 16 @upper left
+ return
+JudgmentInwardSpikes2:
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x2D, 0xFF9D, 16 @between up and upper right
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xDF, 0xFF9D, 16 @between right and upper right
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x9F, 0x37, 16 @between right and lower right
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0x1F, 0x37, 16 @between lower right and down
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFE0, 0x43, 16 @between lower left and down
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFF60, 0x43, 16 @between left and lower left
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFF2A, 0xFFAA, 16 @between left and upper left
+ createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFDA, 0xFF94, 16 @between up and upper left
+ return
+
+Move_BUG_BITE:
+ loadspritegfx ANIM_TAG_ROCKS
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ delay 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1
+ waitforvisualfinish
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 20, 24, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 5, 0, -20, 24, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 5, 20, -24, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -5, 0, -20, -24, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, -5, 30, 18, 8, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 30, -18, 8, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1
+ delay 8
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 10, 5, 30, 29, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 15, 5, -10, 29, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 30, -19, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 5, 5, -30, -19, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, 40, 23, 8, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 10, 5, 40, -13, 8, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1
+ delay 8
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -10, -5, 10, 19, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -5, -5, -30, 19, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, 10, -29, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -15, -5, -30, -29, 14, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -10, -10, 20, 13, 8, 2
+ createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, -10, -5, 20, -23, 8, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1
+ delay 8
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_CHARGE_BEAM:
+ loadspritegfx ANIM_TAG_BLACK_BALL_2
+ loadspritegfx ANIM_TAG_SPARK_2
+ delay 0
+ createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 22)
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, 0, 1, 0
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, 0, 1, 1
+ delay 0
+ createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22)
+ delay 10
+ createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 22)
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, 0, 1, 0
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, 0, 1, 1
+ delay 0
+ createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, 0, 1, 1
+ delay 0
+ createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22)
+ delay 20
+ createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 7, 7, RGB(31, 31, 22)
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0
+ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0
+ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 128, 20, 0, 0
+ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 192, 20, 2, 0
+ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 32, 20, 0, 0
+ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 96, 20, 1, 0
+ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 160, 20, 0, 0
+ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0
+ delay 4
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22)
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER
+ createsprite gZapCannonBallSpriteTemplate, ANIM_TARGET, 3, 10, 0, 0, 0, 30, 0
+ createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 0
+ createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 64, 40, 1
+ createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 128, 40, 0
+ createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 192, 40, 2
+ createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 32, 40, 0
+ createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 96, 40, 1
+ createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 160, 40, 0
+ createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 224, 40, 2
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1
+ delay 15
+ waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 19
+ call ElectricityEffect
+ waitforvisualfinish
+ end
+
+Move_WOOD_HAMMER:
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4
+ waitforvisualfinish
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4
+ delay 3
+ createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 0, 10, 0, 0
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, 1, 0
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ delay 1
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -16, 0, 0, 4
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1
+ waitforvisualfinish
+ delay 2
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5
+ delay 3
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_AQUA_JET:
+ loadspritegfx ANIM_TAG_SPARKLE_6
+ loadspritegfx ANIM_TAG_ROUND_SHADOW
+ loadspritegfx ANIM_TAG_SPLASH
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ createsprite gDiveBallSpriteTemplate, 2, 4, 0, 0, 13, 336
+ waitforvisualfinish
+ playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER
+ createsprite gDiveWaterSplashSpriteTemplate, 3, 1, 0
+ call DiveSetUpWaterDroplets
+ call DiveSetUpWaterDroplets
+ call DiveSetUpWaterDroplets
+ call DiveSetUpWaterDroplets
+ call DiveSetUpWaterDroplets
+ loadspritegfx ANIM_TAG_WATER_IMPACT
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ createsprite gDiveWaterSplashSpriteTemplate, 131, 1, 1
+ call DiveAttackWaterDroplets
+ call DiveAttackWaterDroplets
+ call DiveAttackWaterDroplets
+ call DiveAttackWaterDroplets
+ call DiveAttackWaterDroplets
+ delay 12
+ call RisingWaterHitEffect
+ waitforvisualfinish
+ visible 0
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_ATTACK_ORDER:
+ loadspritegfx ANIM_TAG_ATTACK_ORDER
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ROCKS
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_TARGET
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 70, 5, 70, 30
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 55, 6, 60, 25
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 60, 7, 60, 30
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 55, 10, 60, 30
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 100, 50, 4, 50, 26
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 105, 25, 8, 60, 20
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 40, 10, 48, 30
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 30, 6, 45, 25
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 120, 35, 10, 60, 30
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 105, 20, 8, 40, 0
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 20, 255, 15, 32, 0
+ createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 5, 110, 10, 8, 32, 20
+ waitforvisualfinish
+ createsprite gBasicHitSplatSpriteTemplate 131, 4, -32, -16, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 3, 0, 12, 1
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 5, 1, 3, 0, 12, 1
+ delay 4
+ createsprite gRandomPosHitSplatSpriteTemplate 131, 2, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 4
+ createsprite gRandomPosHitSplatSpriteTemplate 131, 2, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 4
+ createsprite gBasicHitSplatSpriteTemplate 131, 4, 32, 20, 1, 3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_DEFEND_ORDER:
+ loadspritegfx ANIM_TAG_ATTACK_ORDER
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ROCKS
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_TARGET
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 120, 70, 5, 70, 30
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 55, 6, 60, 25
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 60, 7, 60, 30
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 55, 10, 60, 30
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 100, 50, 4, 50, 26
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 105, 25, 8, 60, 20
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 40, 10, 48, 30
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 120, 30, 6, 45, 25
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 35, 10, 60, 30
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 105, 20, 8, 40, 0
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 20, 255, 15, 32, 0
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 110, 10, 8, 32, 20
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ delay 1
+ call BideSetUp
+ waitforvisualfinish
+ end
+
+Move_HEAL_ORDER:
+ loadspritegfx ANIM_TAG_ATTACK_ORDER
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ROCKS
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_TARGET
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 120, 70, 5, 70, 30
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 55, 6, 60, 25
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 60, 7, 60, 30
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 55, 10, 60, 30
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 100, 50, 4, 50, 26
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 105, 25, 8, 60, 20
+ delay 1
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 40, 10, 48, 30
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 120, 30, 6, 45, 25
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 115, 35, 10, 60, 30
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 105, 20, 8, 40, 0
+ delay 3
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 20, 255, 15, 32, 0
+ createsprite gAttackOrderParticleSpriteTemplate, 130, 5, 110, 10, 8, 32, 20
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ delay 1
+ call HealingEffect
+ waitforvisualfinish
+ end
+
+Move_HEAD_SMASH:
+ loadspritegfx ANIM_TAG_IMPACT
+ call SetImpactBackground
+ createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 2
+ createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 1
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1
+ createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2
+ createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1
+ loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 8, 3
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ delay 2
+ restorebg
+ waitbgfadein
+ end
+
+Move_DOUBLE_HIT:
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 4
+ delay 6
+ createsprite gBasicHitSplatSpriteTemplate, 2, 4, 0, 0, 1, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 8
+ waitforvisualfinish
+ createsprite gHorizontalLungeSpriteTemplate, 2, 2, 4, 4
+ delay 6
+ createsprite gBasicHitSplatSpriteTemplate, 2, 4, 0, 0, 1, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 8
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_ROAR_OF_TIME:
+ loadspritegfx ANIM_TAG_ORBS
+ loadspritegfx ANIM_TAG_EXPLOSION
+ loadspritegfx ANIM_TAG_WATER_GUN
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 16, 0
+ delay 0x20
+ monbg ANIM_ATK_PARTNER
+ setalpha 0xc, 0x8
+ loopsewithpan 133, SOUND_PAN_ATTACKER 13 3
+ call RecoverAbsorbEffect
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 16, 0, 0
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 16, -1
+ createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, 0xff
+ delay 0x20
+ createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 10, 0, 20, 1
+ playsewithpan 170, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1
+ delay 6
+ playsewithpan 170, SOUND_PAN_TARGET
+ createsprite gRoarOfTimeBombTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, 1, 1
+ delay 6
+ playsewithpan 170, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 16, 1, 1
+ delay 6
+ playsewithpan 170, SOUND_PAN_TARGET
+ createsprite gRoarOfTimeBombTemplate, ANIM_ATTACKER, 3, 0xffe8, -12, 1, 1
+ delay 6
+ playsewithpan 170, SOUND_PAN_TARGET
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1
+ delay 6
+ playsewithpan 170, SOUND_PAN_TARGET
+ createsprite gRoarOfTimeBombTemplate, ANIM_ATTACKER, 3, 0xffe8, 0x18, 1, 1
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 16, 0, -1
+ waitforvisualfinish
+ end
+
+Move_SPACIAL_REND:
+ loadspritegfx ANIM_TAG_PUNISHMENT_BLADES
+ loadspritegfx ANIM_TAG_PINK_HEART_2 @ANIM_TAG_BERRY_EATEN
+ monbg ANIM_ATK_PARTNER
+ setalpha 12, 8
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 16, 0
+ loopsewithpan 133, SOUND_PAN_ATTACKER 13 2
+ createsprite gSpacialRendBladesTemplate, ANIM_ATTACKER, 3, 0, 0, 0x38, 0
+ delay 2
+ createsprite gSpacialRendBladesTemplate, ANIM_ATTACKER, 3, 0, 0, 0x38, 4
+ delay 2
+ createsprite gSpacialRendBladesTemplate, ANIM_ATTACKER, 3, 0, 0, 0x38, 8
+ delay 2
+ createsprite gSpacialRendBladesTemplate, ANIM_ATTACKER, 3, 0, 0, 0x38, 12
+ waitforvisualfinish
+ fadetobgfromset BG_SPACIAL_REND_ON_OPPONENT BG_SPACIAL_REND_ON_PLAYER BG_SPACIAL_REND_ON_OPPONENT
+ waitbgfadein
+ loopsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET, 3, 5
+ createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 0, 10, SOUND_PAN_ATTACKER, 0xb0, 0x28
+ createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0xff40, 0xf0, 0x28
+ createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, SOUND_PAN_ATTACKER, 0xff60, 0x28
+ createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0xff40, 0xff90, 0x28
+ createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0xa0, 0x30, 0x28
+ createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0xff20, 0xffe0, 0x28
+ createsprite gSpacialRendBladesTemplate2, ANIM_TARGET, 1, 5, 0, 10, 0x70, 0xff80, 0x28
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1
+ waitforvisualfinish
+ restorebg
+ waitbgfadein
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 0, 0
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+Move_LUNAR_DANCE:
+ loadspritegfx ANIM_TAG_MOON
+ loadspritegfx ANIM_TAG_GREEN_SPARKLE
+ loadspritegfx ANIM_TAG_HOLLOW_ORB
+ setalpha 0, 16
+ createsprite gSimplePaletteBlendSpriteTemplate, 2, 5, 1, 1, 0, 16, 0
+ waitforvisualfinish
+ createsprite gMoonSpriteTemplate, 2, 2, 120, 56
+ createvisualtask AnimTask_AlphaFadeIn, 3, 5, 0, 16, 16, 0, 1
+ playsewithpan 211, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, 40, 2, -12, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, 40, 2, -18, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, 40, 2, 21, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, 40, 2, 0, 0
+ delay 30
+ createsprite gMoonlightSparkleSpriteTemplate, 40, 2, 10, 0
+ delay 20
+ createvisualtask AnimTask_MoonlightEndFade, 2, 0
+ createvisualtask AnimTask_DragonDanceWaver, 5, 0
+ playsewithpan 203, SOUND_PAN_ATTACKER
+ delay 8
+ createvisualtask AnimTask_BlendPalInAndOutByTag, 5, 5, ANIM_TAG_HOLLOW_ORB, RGB(0, 0, 19), 14, 0, 3
+ createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 0
+ createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 43
+ createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 85
+ createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 128
+ createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 170
+ createsprite gDragonDanceOrbSpriteTemplate, 2, 1, 213
+ delay 30
+ playsewithpan 203, SOUND_PAN_ATTACKER
+ delay 30
+ playsewithpan 203, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ delay 1
+ end
+
+Move_CRUSH_GRIP:
+ loadspritegfx ANIM_TAG_EXPLOSION
+ loadspritegfx ANIM_TAG_ACCUPRESSURE
+ loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE
+ setalpha 15, 0
+ createsprite gCrushGripHandTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 25, 0x101
+ waitforvisualfinish
+ createvisualtask AnimTask_CompressTargetHorizontally, 2
+ createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0, 0, 1, 1
+ delay 3
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0x18, 0xffe8, 1, 1
+ delay 3
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0xfff0, 16, 1, 1
+ delay 3
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0xffe8, -12, 1, 1
+ delay 3
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 16, 16, 1, 1
+ waitforvisualfinish
+ blendoff
+ end
+
+Move_MAGMA_STORM:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ fadetobg BG_MAGMA_STORM @Add new bg
+ waitbgfadeout
+ createvisualtask AnimTask_MoveSeismicTossBg, 3
+ playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
+ loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 5, 8
+ createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1
+ createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7)
+ call FireSpinEffect
+ call FireSpinEffect
+ createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7)
+ call FireSpinEffect
+ call FireSpinEffect
+ createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7)
+ call FireSpinEffect
+ restorebg
+ waitbgfadeout
+ setarg 7, 0xFFF
+ waitbgfadein
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_DARK_VOID:
+ loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond
+ loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour
+ loadspritegfx ANIM_TAG_SPARKLE_2 @Healing Stars
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison
+ fadetobg BG_DARK_VOID
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 5, 0, 0xFFA0, 1, 0xffff
+ waitbgfadein
+ createvisualtask AnimTask_DestinyBondWhiteShadow, 5, 0, 0x30
+ loopsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_ATTACKER, 5, 2
+ delay 0x30
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfd00, 0x15, 0, 0x70 @Last is speed
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0xfd00, 0x15, 0, 0x70 @Last is speed
+ delay 0x40
+ invisible ANIM_TARGET
+ invisible ANIM_DEF_PARTNER
+ createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0, 0x20, 0x3c
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 16
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0, 16
+ delay 0x20
+ call UnsetPsychicBg
+ visible ANIM_TARGET
+ visible ANIM_DEF_PARTNER
+ end
+
+Move_SEED_FLARE:
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
+ loadspritegfx ANIM_TAG_LEAF @green color
+ loadspritegfx ANIM_TAG_RAZOR_LEAF @green color 2
+ loadspritegfx ANIM_TAG_ORBS @charging circles
+ loadspritegfx ANIM_TAG_FLYING_DIRT @heat wave animation
+ monbg ANIM_ATTACKER
+ setalpha 14, 8
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 12, 32767
+ waitforvisualfinish
+ playsewithpan 133, SOUND_PAN_ATTACKER
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0, 0x28, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0, 0xffd8, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, -20, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 20, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, -20, 16
+ delay 2
+ createsprite gSeedFlareGreenChargeTemplate, ANIM_ATTACKER 2, 0
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, 20, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, -20, 30, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 20, 0xffe2, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, -20, 0xffe2, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 20, 30, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, 0, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 0, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0, 0x28, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0, 0xffd8, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, -20, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 20, 16
+ delay 2
+ createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0xffd8, -20, 16
+ delay 30
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 0x28, 1
+ createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 10, 0x900, 0x60, 1
+ createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, 20, 1
+ createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, -20, 1
+ delay 2
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x5a, 0x800, 0x60, 1
+ delay 8
+ createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x32, 0xa00, 0x60, 1
+ createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, 20, 1
+ createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, -20, 1
+ delay 2
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 20, 0x900, 0x60, 1
+ delay 8
+ createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x46, 0x7c0, 0x60, 1
+ createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, 20, 1
+ createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, -20, 1
+ delay 2
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ delay 8
+ createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0, 0xb00, 0x60, 1
+ delay 10
+ createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x3c, 0xa00, 0x60, 1
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 12, 0, 32767
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+
+Move_OMINOUS_WIND:
+ loadspritegfx ANIM_TAG_SPARKLE_6
+ panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET 2, 0
+ playsewithpan 228, 0
+ delay 0
+ monbg ANIM_DEF_PARTNER
+ @bankBG_over_partnerBG
+ delay 0
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 5, 1, 0, 0, 0, 0
+ delay 0
+ createvisualtask AnimTask_GetAttackerSide, 2, 0
+ jumpargeq 7, 1, OminousWindFadeToBg
+ fadetobg BG_GHOST
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 5, RGB(0, 16, 1), 0, 0, -1
+ goto OminousWindHit
+OminousWindFadeToBg:
+ fadetobg BG_GHOST
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 5, -1535, 0, 0, -1
+ goto OminousWindHit
+OminousWindHit:
+ delay 0
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 4, 4, RGB_BLACK
+ waitbgfadein
+ createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1
+ createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1
+ createsprite gSilverWindBigSparkSpriteTemplate, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1
+ createsprite gSilverWindBigSparkSpriteTemplate, ANIM_ATTACKER, 120, -40, 14, 128, 4, 1, 2, 1
+ delay 0
+ createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1
+ createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1
+ createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1
+ createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_ATTACKER, 120, -40, 14, 128, 4, 1, 2, 1
+ delay 0
+ createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1
+ createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1
+ createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1
+ createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_ATTACKER, 120, -40, 14, 128, 4, 1, 2, 1
+ delay 6
+ createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -4, 16, 0, 6, 1, 2, 1
+ createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -16, 12, 192, 5, 2, 3, 1
+ delay 0
+ createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_TARGET, 66, -4, 16, 0, 6, 1, 2, 1
+ createsprite gSilverWindMediumSparkSpriteTemplate, ANIM_TARGET, 66, -16, 12, 192, 5, 2, 3, 1
+ delay 0
+ createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_TARGET, 66, -4, 16, 0, 6, 1, 2, 1
+ createsprite gSilverWindSmallSparkSpriteTemplate, ANIM_TARGET, 66, -16, 12, 192, 5, 2, 3, 1
+ waitforvisualfinish
+ playsewithpan SE_M_GUST2, SOUND_PAN_TARGET
+ clearmonbg ANIM_DEF_PARTNER
+ delay 0
+ restorebg
+ waitbgfadeout
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 4, 0, RGB_BLACK
+ setarg 7, -1
+ waitbgfadein
+ end
+
+Move_SHADOW_FORCE:
+ loadspritegfx ANIM_TAG_ROUND_SHADOW
+ loadspritegfx ANIM_TAG_IMPACT
+ choosetwoturnanim ShadowForcePrep ShadowForceAttack
+ShadowForceWaitEnd:
+ waitforvisualfinish
+ end
+ShadowForcePrep:
+ monbg ANIM_ATTACKER
+ playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER,
+ createsprite gSimplePaletteBlendSpriteTemplate ANIM_ATTACKER, 2, 1, 3, 0, 16, RGB_BLACK
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, 0
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 0
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATK_PARTNER, 0
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_DEF_PARTNER, 0
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3
+ createvisualtask AnimTask_AttackerFadeToInvisible, 2, 1
+ delay 80
+ createsprite gSimplePaletteBlendSpriteTemplate ANIM_ATTACKER, 2, 1, 3, 16, 0, RGB_BLACK
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, 1
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, 1
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATK_PARTNER, 1
+ createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_DEF_PARTNER, 1
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ invisible 0
+ delay 1
+ goto ShadowForceWaitEnd
+ShadowForceAttack:
+ monbg ANIM_ATTACKER
+ splitbgprio ANIM_ATTACKER
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ call ShadowForceBg
+ waitbgfadein
+ delay 10
+ playsewithpan SOUND_PAN_ATTACKER, 192
+ createvisualtask AnimTask_NightShadeClone, 5, 85
+ delay 70
+ createvisualtask AnimTask_ShakeMon2 2, 1, 2, 0, 12, 1
+ createvisualtask AnimTask_BlendColorCycle 2, 4, 0, 2, 0, 13, 0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ delay 1
+ call UnsetPsychicBg
+ waitbgfadein
+ goto ShadowForceWaitEnd
+ShadowForceBg:
+ fadetobg BG_DARK
+ waitbgfadeout
+ createvisualtask AnimTask_FadeScreenToWhite, 5
+ waitbgfadein
+ return
+
+@@@@@@@@@@@@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@@@@@@@@@@@@
+Move_HONE_CLAWS:
+ loadspritegfx ANIM_TAG_SWIPE
+ call HoneClawsAnim
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SWIPE, 0, 6, 6, RGB_BLACK
+ call HoneClawsAnim
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SWIPE, 0, 10, 10, RGB_BLACK
+ call HoneClawsAnim
+ end
+HoneClawsAnim:
+ createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 2, 2
+ delay 4
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET
+ createsprite gFurySwipesSpriteTemplate, ANIM_TARGET, 2, 16, 0, 1
+ delay 10
+ createsprite gHorizontalLungeSpriteTemplate, ANIM_TARGET, 2, 2, 2
+ delay 4
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET
+ createsprite gFurySwipesSpriteTemplate, ANIM_TARGET, 2, -16, 0, 0
+ delay 10
+ return
+
+Move_WIDE_GUARD:
+ loadspritegfx ANIM_TAG_ICE_SPIKES @motion from icy wind
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink color
+ loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color
+ loadspritegfx ANIM_TAG_ROCKS @brown color
+ loadspritegfx ANIM_TAG_CONVERSION @conversion
+ loadspritegfx ANIM_TAG_WATER_ORB @blue color
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ createvisualtask AnimTask_RockMonBackAndForth, 0x5, 0x0, 0x3, 0x0
+ waitplaysewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0x10
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xffe8, 0xffe8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xfff8, 0xffe8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x8, 0xffe8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x18, 0xffe8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xffe8, 0xfff8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xfff8, 0xfff8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x8, 0xfff8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x18, 0xfff8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xffe8, 0x8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xfff8, 0x8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x8, 0x8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x18, 0x8
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xffe8, 0x18
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0xfff8, 0x18
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x8, 0x18
+ delay 3
+ createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x18, 0x18
+ delay 0x14
+ playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET
+ createvisualtask AnimTask_ConversionAlphaBlend, 5
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+
+Move_GUARD_SPLIT::
+ loadspritegfx ANIM_TAG_BLUEGREEN_ORB
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0xC, 0x0
+ loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3
+ call GuardSplitLaunch
+ call GuardSplitLaunch
+ call GuardSplitLaunch
+ call GuardSplitLaunch
+ call GuardSplitLaunch
+ call GuardSplitLaunch
+ call GuardSplitLaunch
+ call GuardSplitLaunch
+ call GuardSplitLaunch
+ call GuardSplitLaunch
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0xC, 0x0, 0x0
+ waitforvisualfinish
+ end
+GuardSplitLaunch:
+ createsprite gGuardSwapOrbs1Template, ANIM_TARGET, 2, 0xfff4, 0x0
+ createsprite gGuardSwapOrbs2Template, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1E, 0x0
+ delay 0x5
+ return
+
+Move_POWER_SPLIT::
+ loadspritegfx ANIM_TAG_RED_HEART
+ loadspritegfx ANIM_TAG_BLUEGREEN_ORB
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0xC, 0x0
+ loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3
+ call PowerSplitLaunch
+ call PowerSplitLaunch
+ call PowerSplitLaunch
+ call PowerSplitLaunch
+ call PowerSplitLaunch
+ call PowerSplitLaunch
+ call PowerSplitLaunch
+ call PowerSplitLaunch
+ call PowerSplitLaunch
+ call PowerSplitLaunch
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0xC, 0x0, 0x0
+ waitforvisualfinish
+ end
+PowerSplitLaunch:
+ createsprite gPowerSplitOrbs1Template, ANIM_TARGET, 2, 0xfff4, 0x0
+ createsprite gPowerSplitOrbs2Template, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1E, 0x0
+ delay 5
+ return
+
+Move_WONDER_ROOM::
+ call InitRoomAnimation
+ fadetobg BG_WONDER_ROOM
+ waitbgfadein
+ delay 0x40
+ restorebg
+ waitbgfadein
+ blendoff
+ end
+
+Move_PSYSHOCK:
+ monbg ANIM_TARGET
+ setalpha 8, 8
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1
+ createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, 767
+ waitforvisualfinish
+ loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -6, -6, 15, ANIM_TARGET, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_VENOSHOCK:
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ loadspritegfx ANIM_TAG_TOXIC_BUBBLE
+ createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -24, 16, 1, 1
+ playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET
+ delay 5
+ createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -16, 16, 1, 1
+ playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET
+ delay 5
+ createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -8, 16, 1, 1
+ playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET
+ delay 5
+ createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, 0, 16, 1, 1
+ playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET
+ delay 5
+ createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, 8, 16, 1, 1
+ playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET
+ delay 5
+ createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, 16, 16, 1, 1
+ playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET
+ delay 5
+ createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, 24, 16, 1, 1
+ playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET
+ delay 5
+ waitforvisualfinish
+ delay 15
+ end
+
+Move_AUTOTOMIZE:
+ loadspritegfx ANIM_TAG_METAL_BITS @Metal Bits
+ setalpha 12, 8
+ monbg ANIM_ATK_PARTNER
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0x18, 0x6, 0x4, 0x4
+ createvisualtask AnimTask_TraceMonBlended 0x2, 0x0, 0x4, 0x7, 0xa
+ playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER
+ createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x0
+ createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x1
+ delay 0xc
+ createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x2
+ createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x3
+ delay 0xc
+ createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x0
+ createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x1
+ delay 0xc
+ createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x2
+ createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x3
+ delay 0x18
+ waitforvisualfinish
+ stopsound
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+Move_RAGE_POWDER::
+ loadspritegfx ANIM_TAG_SPORE @Powder
+ loadspritegfx ANIM_TAG_HEART_STAMP @Red Colour
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 0x12, 0xa
+ call RagePowderSprinkle
+ call RagePowderSprinkle
+ call RagePowderSprinkle
+ createvisualtask AnimTask_BlendColorCycle, ANIM_ATTACKER, 0x2, ANIM_PAL_ATK, 0x2, 0x2, 0x0, 0xb, 0x1f
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+RagePowderSprinkle:
+ createsprite gRagePowderRedPowderTemplate, ANIM_ATTACKER, 0x2, 0x0, 0xffec, 0x55, 0x50, 0x0
+ delay 0xc
+ createsprite gRagePowderRedPowderTemplate, ANIM_ATTACKER, 0x2, 0x0, 0xfff6, 0xaa, 0x50, 0x0
+ delay 0xc
+ createsprite gRagePowderRedPowderTemplate, ANIM_ATTACKER, 0x2, 0x0, 0xfff1, 0x0, 0x50, 0x0
+ delay 0xc
+ return
+
+Move_TELEKINESIS::
+ loadspritegfx ANIM_TAG_SPARKLE_4 @detect
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0x9, 0x0
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 0x1, 0x0, 0x9, 0x7fff
+ delay 0x12
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 0xd, 0x14, 0xffec
+ waitforvisualfinish
+ loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x3
+ createvisualtask AnimTask_SwayMon, 0x5, 0x1, 0x18, 0xD0, 0x1, ANIM_TARGET
+ waitforvisualfinish
+ delay 0xA
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x9, 0x0, 0x0
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 0x2, 0x9, 0x0, 0x7fff
+ waitforvisualfinish
+ end
+
+Move_MAGIC_ROOM::
+ call InitRoomAnimation
+ fadetobg BG_MAGIC_ROOM
+ waitbgfadein
+ delay 0x40
+ restorebg
+ waitbgfadein
+ blendoff
+ end
+
+Move_SMACK_DOWN::
+ loadspritegfx ANIM_TAG_BLACK_BALL
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ROCKS
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ createsprite gRockBlastRockSpriteTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x0, 0x0, 0x15, 0xffe7
+ waitforvisualfinish
+ createvisualtask AnimTask_SmokescreenImpact, 0x8, 0x400, 0x1902
+ fadetobg BG_IN_AIR
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 5, 0x0, 0x0, 0x0, 0xffff
+ createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3
+ goto SeismicTossWeak
+
+Move_STORM_THROW:
+ call StormThorwAnim
+ call StormThorwAnim
+ call StormThorwAnim
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
+ delay 1
+ createvisualtask AnimTask_RotateMonSpriteToSide, 2, 10, 0xC00, 1, 2
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 3
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4
+ waitforvisualfinish
+ end
+StormThorwAnim:
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
+ delay 6
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7
+ delay 8
+ return
+
+Move_FLAME_BURST:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ loadspritegfx ANIM_TAG_EXPLOSION
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20
+ delay 18
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 16, 1
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 0, 1, 0
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 192, 76, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -192, 76, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 20, 140, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -20, 140, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 192, -160, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -192, -160, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 82, -112, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -82, -112, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 160, -52, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -160, -52, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 224, -32, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -224, -32, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, 112, -128, 70
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 0, -112, -128, 70
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 3
+ createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 14, -14, 1, 0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ waitforvisualfinish
+ end
+
+Move_SLUDGE_WAVE:
+ panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SLUDGE_WAVE
+ waitforvisualfinish
+ end
+
+Move_QUIVER_DANCE:
+ loadspritegfx ANIM_TAG_HOLLOW_ORB
+ monbg ANIM_ATTACKER
+ call SetBugBg
+ createvisualtask AnimTask_DragonDanceWaver, 5
+ playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
+ delay 8
+ createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB_GREEN, 14, 0, 3
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 128
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 170
+ createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 213
+ delay 30
+ playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
+ delay 30
+ playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ call UnsetBugBg
+ end
+
+Move_HEAVY_SLAM:
+ loadspritegfx ANIM_TAG_CLAW_SLASH
+ loadspritegfx ANIM_TAG_IMPACT
+ loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
+ createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0
+ waitforvisualfinish
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, ANIM_ATTACKER
+ waitforvisualfinish
+ delay 11
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5
+ delay 6
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, 1, 0
+ loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2
+ delay 1
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1
+ waitforvisualfinish
+ delay 10
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6
+ delay 5
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_SYCHRONOISE:
+ loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring
+ loadspritegfx ANIM_TAG_SPARK_2 @yellow color
+ loadspritegfx ANIM_TAG_WATER_ORB @blue color
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @violet color
+ loadspritegfx ANIM_TAG_SMALL_EMBER @flame wheel particle
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @aero particles
+ monbg ANIM_DEF_PARTNER
+ splitbgprio_foes ANIM_TARGET
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0x0, 0xC, 0x0 @Darken
+ waitforvisualfinish
+ panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1
+ delay 0x1
+ createsprite gSynchronoiseBlueRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1
+ delay 0x1
+ createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1
+ delay 0x25
+ panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ createsprite gSynchronoiseBlueRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1
+ delay 0x1
+ createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1
+ delay 0x1
+ createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1
+ waitforvisualfinish
+ loopsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET, 0x3, 0x5
+ createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, SOUND_PAN_ATTACKER, 0xb0, 0x28
+ createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xff40, 0xf0, 0x28
+ createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, SOUND_PAN_ATTACKER, 0xff60, 0x28
+ createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xff40, 0xff90, 0x28
+ createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xa0, 0x30, 0x28
+ createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xff20, 0xffe0, 0x28
+ createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0x70, 0xff80, 0x28
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x1, 0xC, 0x0, 0x0 @Darken
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_ELECTRO_BALL:
+ loadspritegfx ANIM_TAG_SPARK_2 @yelow
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ createsprite gGrowingChargeOrb2SpriteTemplate, ANIM_ATTACKER, 2, 0
+ delay 0x19
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0x14
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0xF
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0x6
+ loopsewithpan SE_M_CHARGE, 0xC, 0x6, 0x5
+ waitforvisualfinish
+ createsprite gElectroBallCannonBallTemplate, ANIM_TARGET, 2, 16, 16, 8
+ waitforvisualfinish
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET
+ createvisualtask AnimTask_ShakeMon2, 0x2, ANIM_TARGET, 0x4, 0x0, 0x8, 0x1
+ call ElectricityEffect
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_SOAK:
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES
+ loadspritegfx ANIM_TAG_WATER_IMPACT
+ monbg ANIM_TARGET
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ createsprite gWaterGunProjectileSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 40, -25
+ playsewithpan SE_M_BUBBLE, 192
+ delay 2
+ createsprite gWaterGunProjectileSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 5, 0, 40, -25
+ playsewithpan SE_M_BUBBLE, 192
+ delay 2
+ createsprite gWaterGunProjectileSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, -5, 0, 40, -25
+ playsewithpan SE_M_BUBBLE, 192
+ delay 30
+ playsewithpan SE_M_WATERFALL, 63
+ createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 17, 1
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, RGB_BLUE
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0
+ delay 2
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 5, 0, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 5, 0
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 5, 0
+ delay 2
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -5, 0, 1, 1
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, -5, 0
+ createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, -5, 0
+ delay 2
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_FLAME_CHARGE:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x20, 0x6
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 0x2, 0x0, 0xc, 0x6, 0x6, 0x3
+ call FlameChargeSwirl
+ delay 0x9
+ call FlameChargeSwirl
+ delay 0x9
+ call FlameChargeSwirl
+ delay 0x9
+ call FlameChargeSwirl
+ delay 0x9
+ call FlameChargeSwirl
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x18 0x0 0x0 0x5
+ delay 0x3
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x0
+ createvisualtask AnimTask_ShakeMon, 0x2, 0x1, 0x6, 0x0, 0x8, 0x1
+ call FireSpreadEffect
+ playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 0x8
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x7
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+FlameChargeSwirl:
+ launchtemplate gFlameChargeEmberTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ return
+
+Move_COIL:
+ loadspritegfx ANIM_TAG_TENDRILS
+ loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4
+ launchtemplate gConstrictBindingSpriteTemplate 0x84, 0x4, 0x0 0x10 0x0 0x2
+ delay 0x7
+ launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0x0 0x0 0x2
+ launchtemplate gConstrictBindingSpriteTemplate 0x82, 0x4, 0x0 0x8 0x1 0x2
+ delay 0x7
+ launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0xfff8 0x1 0x2
+ delay 0x8
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x3 0x0 0x6 0x1
+ delay 0x14
+ launchtask AnimTask_ShakeMon2 0x83 0x5 0x1 0x4 0x0 0x5 0x1
+ launchtask AnimTask_StretchTargetUp 0x3 0x0
+ playsewithpan SE_M_BIND, SOUND_PAN_TARGET
+ setarg 0x7 0xffff
+ waitforvisualfinish
+ end
+
+Move_LOW_SWEEP:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_IMPACT
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4
+ createsprite gSlidingKickSpriteTemplate, ANIM_TARGET, 2, -24, 14, 40, 8, 160, 0
+ delay 4
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 2
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4
+ end
+
+Move_ACID_SPRAY:
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ monbg ANIM_TARGET
+ createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, -20, FALSE
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ delay 33
+ createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(30, 0, 31)
+ playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 10, 15, 55, FALSE
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -20, 15, 55, FALSE
+ delay 3
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 5, 15, 55, FALSE
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -10, 15, 55, FALSE
+ delay 3
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 30, 15, 55, FALSE
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -30, 15, 55, FALSE
+ delay 3
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 2, 15, 55, FALSE
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -5, 15, 55, FALSE
+ delay 3
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 20, 15, 55, FALSE
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+Move_FOUL_PLAY:
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ loadspritegfx ANIM_TAG_THIN_RING
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @Black colour
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4
+ delay 0x6
+ launchtemplate gFoulPlayImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1
+ playsewithpan SE_M_VITAL_THROW SOUND_PAN_TARGET
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 0x3, 0xa, 0x0, 0x0
+ launchtemplate gFoulPlayRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0
+ delay 0x8
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 0x3, 0xa, 0x0, 0x0
+ launchtemplate gFoulPlayRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_SIMPLE_BEAM:
+ loadspritegfx ANIM_TAG_GOLD_RING @psybeam
+ loadspritegfx ANIM_TAG_ROCKS @brown color
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink color
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ setalpha 8, 8
+ monbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_BUBBLE_BEAM, SOUND_PAN_ATTACKER
+ call SimpleBeamsRegular
+ call SimpleBeamsRegular
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x7FFF
+ launchtask AnimTask_SwayMon 0x5 0x5 0x0 0x6 0x800 0x4 ANIM_TARGET
+ call SimpleBeamWithRings
+ call SimpleBeamWithRings
+ call SimpleBeamWithRings
+ call SimpleBeamWithRings
+ call SimpleBeamWithRings
+ launchtemplate gSimpleBeamBrownRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
+ delay 0x2
+ launchtemplate gSimpleBeamPinkRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
+ delay 0x2
+ stopsound
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7FFF
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+SimpleBeamsRegular:
+ launchtemplate gSimpleBeamBrownTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0
+ delay 0x2
+ launchtemplate gSimpleBeamPinkTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0
+ delay 0x2
+ return
+SimpleBeamWithRings:
+ launchtemplate gSimpleBeamBrownTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0
+ launchtemplate gSimpleBeamBrownRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
+ delay 0x2
+ launchtemplate gSimpleBeamPinkTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0xd 0x0
+ launchtemplate gSimpleBeamPinkRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
+ delay 0x2
+ return
+
+Move_ENTRAINMENT:
+ createvisualtask AnimTask_TeeterDanceMovement, 5
+ playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER
+ delay 0x18
+ playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER
+ delay 0x18
+ playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER
+ delay 0x18
+ playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER
+ delay 0x18
+ playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x1f 0x1
+ waitforvisualfinish
+ end
+
+Move_AFTER_YOU:
+ loadspritegfx ANIM_TAG_ANGER @rage
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @green color
+ launchtask AnimTask_SwayMon 0x5 0x5 0x1 0xF 0x600 0x2 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0xffec 0xffe0
+ launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0xfffb 0xffe5
+ playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER
+ delay 0x14
+ launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0x14 0xffe0
+ launchtemplate gAfterYouGreenRageTemplate 0x2 0x3 0x0 0x23 0xffe5
+ playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ end
+
+Move_ROUND:
+ loadspritegfx ANIM_TAG_MUSIC_NOTES
+ createvisualtask AnimTask_MusicNotesRainbowBlend, 2
+ waitforvisualfinish
+ monbg ANIM_TARGET
+ createvisualtask SoundTask_PlayCryHighPitch, 2, 0, 255
+ createvisualtask AnimTask_UproarDistortion, 2, 0
+ createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 7, 0, 12
+ delay 5
+ createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 6, 1, 12
+ delay 5
+ createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 1, 2, 12
+ delay 5
+ createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 2, 3, 12
+ delay 20
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 13, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ createvisualtask AnimTask_MusicNotesClearRainbowBlend, 2
+ waitforvisualfinish
+ end
+
+Move_ECHOED_VOICE:
+ loadspritegfx ANIM_TAG_METAL_SOUND_WAVES
+ monbg ANIM_DEF_PARTNER
+ splitbgprio_foes ANIM_TARGET
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x2 0x0 0x8 0x1
+ call MetalSoundPlayNote
+ call MetalSoundPlayNote
+ call MetalSoundPlayNote
+ call MetalSoundPlayNote
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ delay 0x0
+ waitforvisualfinish
+ end
+MetalSoundPlayNote:
+ panse SE_M_UPROAR, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0
+ launchtemplate gMetalSoundSpriteTemplate 0x82 0x6 0x10 0x0 0x0 0x0 0x1e 0x0
+ delay 0x2
+ return
+
+Move_CHIP_AWAY:
+ loadspritegfx ANIM_TAG_IMPACT
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x7FFF
+ waitforvisualfinish
+ monbg ANIM_ATK_PARTNER
+ setalpha 12, 8
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x18 0x6 0x1 0x5
+ delay 0x4
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1
+ launchtemplate gBasicHitSplatSpriteTemplate 0x84, 0x4, 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_VITAL_THROW2 SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x7FFF
+ waitforvisualfinish
+ blendoff
+ end
+
+Move_CLEAR_SMOG:
+ loadspritegfx ANIM_TAG_MIST_CLOUD
+ monbg ANIM_TARGET
+ splitbgprio_all
+ setalpha 12, 8
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_MIST_CLOUD, 0, 6, 6, RGB(26, 0, 26)
+ loopsewithpan SE_M_MIST, SOUND_PAN_TARGET, 17, 10
+ call ClearSmogCloud
+ call ClearSmogCloud
+ call ClearSmogCloud
+ call ClearSmogCloud
+ call ClearSmogCloud
+ call ClearSmogCloud
+ call ClearSmogCloud
+ delay 120
+ loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 18, 2
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB_WHITE
+ delay 10
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+ClearSmogCloud:
+ createsprite gMistCloudSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, 48, 240, 1, 0
+ delay 7
+ return
+
+Move_STORED_POWER:
+ loadspritegfx ANIM_TAG_RED_ORB_2
+ loadspritegfx ANIM_TAG_IMPACT
+ call SetPsychicBackground
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_SpitUpDeformMon, 5
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 8, 2
+ delay 45
+ playsewithpan SE_M_SPIT_UP, SOUND_PAN_ATTACKER
+ delay 3
+ createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 0, 12
+ createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 32, 12
+ createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 64, 12
+ createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 96, 12
+ createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 128, 12
+ createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 160, 12
+ createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 192, 12
+ createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 224, 12
+ delay 10
+ createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, 0, 1, 8, 1, 0
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -12, 10, 1, 1
+ delay 5
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, -10, 1, 1
+ waitforvisualfinish
+ call UnsetPsychicBg
+ waitforvisualfinish
+ end
+
+Move_QUICK_GUARD:
+ loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @hand
+ loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles
+ setalpha 12, 8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x2 0x0 0xa 0x7FFF
+ delay 0x10
+ monbg ANIM_ATTACKER
+ launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xE 0x0 0x8 0x0 0x0
+ launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xfff2 0x0 0x8 0x0 0x0
+ delay 0x1
+ launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xE 0x0 0x8 0x0 0x0
+ launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xfff2 0x0 0x8 0x0 0x0
+ delay 0x1
+ launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xE 0x0 0x8 0x0 0x0
+ launchtemplate gQuickGuardArmImpactTemplate 0x83 0x5 0xfff2 0x0 0x8 0x0 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x0 0xffe3 @up
+ launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x16 0xffec @upper right
+ launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x1D 0x0 @right
+ launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0xffe9 0xffec @upper left
+ launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0xffe2 0x0 @left
+ launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x0 0x1c @down
+ launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0x16 0x13 @lower left
+ launchtemplate gSpinningSparkleSpriteTemplate 0xd 0x2 0xffea 0x13 @lower right
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_ATTACKER
+ end
+
+Move_ALLY_SWITCH:
+ end
+
+Move_SCALD:
+ loadspritegfx ANIM_TAG_WATER_ORB
+ loadspritegfx ANIM_TAG_WATER_IMPACT
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1
+ delay 6
+ panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
+ createvisualtask AnimTask_StartSinAnimTimer, 5, 100
+ call ScaldBeams
+ call ScaldBeams
+ call ScaldBeams
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_RED
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1
+ call ScaldHitSplats
+ call ScaldBeams
+ call ScaldBeams
+ call ScaldHitSplats
+ call ScaldBeams
+ call ScaldBeams
+ call ScaldHitSplats
+ call ScaldBeams
+ call ScaldBeams
+ call ScaldHitSplats
+ call ScaldBeams
+ call ScaldBeams
+ call ScaldHitSplats
+ delay 2
+ call ScaldHitSplats
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+ScaldBeams:
+ createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 0
+ delay 1
+ createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 0
+ delay 1
+ return
+
+ScaldHitSplats:
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 1
+ return
+
+Move_SHELL_SMASH:
+ loadspritegfx ANIM_TAG_SHELL_RIGHT
+ loadspritegfx ANIM_TAG_SHELL_LEFT
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ROCKS
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER
+ createsprite gShellSmashRightShellSpriteTemplate, ANIM_ATTACKER, 2, 0xffd7, 0x0, 0x2, 0x333, 0x0, 0xa
+ createsprite gShellSmashLeftShellSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x0, 0x6, 0xfccd, 0x0, 0xa
+ delay 10
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1
+ createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x8, 0x1, 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 5, 1
+ waitforvisualfinish
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x18, 0xe, 0x2
+ createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x5, 0x0, 0xffec, 0x18, 0xe, 0x1
+ createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x5, 0x14, 0xffe8, 0xe, 0x2
+ createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0xfffb, 0x0, 0xffec, 0xffe8, 0xe, 0x2
+ createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0x1e, 0x12, 0x8, 0x2
+ createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0xffee, 0x8, 0x2
+ createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xffe2, 0x12, 0x8, 0x2
+ createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xffe2, 0xffee, 0x8, 0x2
+ createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 7, 1
+ waitforvisualfinish
+ end
+
+Move_HEAL_PULSE:
+ loadspritegfx ANIM_TAG_GREEN_SPARKLE
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ loadspritegfx ANIM_TAG_THIN_RING
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8
+ createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -16, 32, -3, 1
+ delay 3
+ createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 16, 32, -3, -1
+ delay 3
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8
+ createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 32, 32, -3, 1
+ delay 3
+ createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -32, 32, -3, 1
+ delay 3
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8
+ createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 0, 32, -3, 1
+ delay 3
+ createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1
+ delay 3
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8
+ createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1
+ delay 3
+ createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 24, 32, -3, 1
+ delay 3
+ createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -24, 32, -3, 1
+ waitforvisualfinish
+ waitsound
+ call HealingEffect2
+ end
+
+Move_HEX:
+ loadspritegfx ANIM_TAG_PURPLE_FLAME
+ loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x4C4A @;Deep purple
+ waitforvisualfinish
+ monbg ANIM_TARGET
+ splitbgprio_all
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ waitbgfadein
+ launchtask AnimTask_PurpleFlamesOnTarget 0x3 0x0
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x2 0x0 0x25 0x1
+ playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET
+ delay 0x20
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xc 0x4C4A @;Deep purple
+ launchtemplate gCurseGhostSpriteTemplate 0x84, 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x10 0x0 0x4C4A @;Deep purple
+ waitforvisualfinish
+ end
+
+Move_SKY_DROP:
+ loadspritegfx ANIM_TAG_ROUND_SHADOW
+ loadspritegfx ANIM_TAG_IMPACT
+ choosetwoturnanim SkyDropSetup SkyDropUnleash
+ end
+SkyDropSetup:
+ invisible ANIM_ATTACKER
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES @mist ball
+ loadspritegfx ANIM_TAG_WHITE_FEATHER
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ delay 0x0
+ playsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER
+ launchtemplate gSkyDropFlyBallTemplate 0x80 0x6 0x0 0x0 0x0 0x0 0x1e 0x0
+ waitforvisualfinish
+ invisible ANIM_TARGET
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gSkyDropTargetFlyingTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ end
+SkyDropUnleash:
+ visible ANIM_TARGET
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
+ launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0
+ delay 0x7
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ launchtemplate gBasicHitSplatSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x5 0xb 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_SHIFT_GEAR:
+ loadspritegfx ANIM_TAG_GEAR @Gear
+ monbg ANIM_ATTACKER
+ playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER
+ launchtemplate gShiftGearGearsTemplate 0x2 0x5 ANIM_ATTACKER 0xFFF3 0x8 0x65 0xa
+ launchtemplate gShiftGearGearsTemplate 0x2 0x5 ANIM_ATTACKER 0xE 0xFFF8 0x65 0xa
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ end
+
+Move_CIRCLE_THROW:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_THIN_RING
+ loadspritegfx ANIM_TAG_ICE_CHUNK
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0xc 0x4 0x1 0x2
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x14 0x0 0x0 0x4
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1
+ launchtemplate gCircleThrowRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 0x1
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe8 0x0 0x0 0x4
+ launchtemplate gCircleThrowRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0
+ waitforvisualfinish
+ delay 0x3
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x7
+ delay 0xb
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0xa
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_INCINERATE:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ monbg ANIM_TARGET
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ delay 1
+ createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_SwayMon, 5, 0, 3, 0xc00, 8, ANIM_TARGET
+ createvisualtask AnimTask_SwayMon, 5, 0, 3, 0xc00, 8, ANIM_DEF_PARTNER
+ delay 3
+ createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
+ delay 3
+ createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 3
+ createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
+ delay 3
+ createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 3
+ createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
+ delay 3
+ createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 3
+ createsprite gIncinerateSpriteTemplate, ANIM_TARGET, 2, 6, 20, 0, -16, 24, 20
+ delay 5
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 8, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 0, 8, 1
+ createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB_RED, 12, 1, 1
+ createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_DEF_PARTNER, RGB_RED, 12, 1, 1
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 5
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 0, 9
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_QUASH:
+ loadspritegfx ANIM_TAG_ASSURANCE_HAND @hand
+ fadetobg BG_DARK
+ waitbgfadein
+ setalpha 12, 8
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtemplate gQuashArmHitTemplate 0x83, 0x3 0x0 0xffe0 0xf
+ delay 0x13
+ playsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_SquishTarget 0x2 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ restorebg
+ waitbgfadein
+ end
+
+Move_ACROBATICS:
+ loadspritegfx ANIM_TAG_ROUND_SHADOW
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336
+ waitforvisualfinish
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
+ createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3
+ delay 7
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0
+ createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 11, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_REFLECT_TYPE:
+ loadspritegfx ANIM_TAG_GUARD_RING @ring around user
+ loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color
+ loadspritegfx ANIM_TAG_PURPLE_FLAME @violet color
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink color
+ monbg ANIM_TARGET
+ setalpha 8, 8
+ playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
+ launchtemplate gReflectTypeBlueStringTemplate 0x82 0x2 0x0 0xa
+ delay 0x4
+ launchtemplate gReflectTypeVioletStringTemplate 0x82 0x2 0x0 0xfffe
+ delay 0x4
+ launchtemplate gReflectTypeWhiteStringTemplate 0x82 0x2 0x0 0x16
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ delay 0x1F
+ monbg ANIM_ATTACKER
+ playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER
+ launchtemplate gReflectTypeWhiteRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gReflectTypePinkRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gReflectTypeVioletRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gReflectTypeBlueRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gReflectTypeWhiteRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gReflectTypePinkRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gReflectTypeVioletRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gReflectTypeBlueRingTemplate 0x2 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+
+Move_RETALIATE:
+ loadspritegfx ANIM_TAG_CUT @Cut
+ monbg ANIM_DEF_PARTNER
+ setalpha 9, 8
+ launchtask AnimTask_AttackerPunchWithTrace 0x2 0x2 0x7128 0xa
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_CUT, SOUND_PAN_TARGET
+ launchtemplate gGuillotineSpriteTemplate 0x2 0x1 0x0
+ launchtemplate gGuillotineSpriteTemplate 0x2 0x1 0x1
+ delay 0x38
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x10 0x43D
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x043D
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_FINAL_GAMBIT:
+ loadspritegfx ANIM_TAG_PINK_CLOUD @yawn animation
+ loadspritegfx ANIM_TAG_WATER_IMPACT @blue colour
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion animation
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 @Darken
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0xa 0x1
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x2 0x0 0x8 0x7fff
+ waitforvisualfinish
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER
+ launchtemplate gFinalGambitBlueYawnTemplate 0x2 0x3 0x0 0x0 0x25
+ delay 0x4
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1
+ launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1
+ waitforvisualfinish
+ monbg ANIM_TARGET
+ delay 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gFinalGambitExplosionTemplate 0x3 0x4 0x0 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ end
+
+Move_BESTOW:
+ monbg ANIM_TARGET
+ splitbgprio ANIM_TARGET
+ panse SE_M_METRONOME, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ launchtask AnimTask_CreateBestowItem 0x2 0x6 0x14 0x0 0x0 0x0 0x28 0xffe7
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_ITEM_BAG @;The generated item sprite uses this tag
+ clearmonbg ANIM_TARGET
+ end
+
+Move_INFERNO:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ call SetImpactBackground
+ loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 40, 4
+ createvisualtask AnimTask_ShakeMon, 5, 1, 0, 2, 94, 1
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 9, RGB_RED
+ call InfernoAnim
+ call InfernoAnim
+ call InfernoAnim
+ call InfernoAnim
+ call InfernoAnim
+ call InfernoAnim
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 9, 0, RGB_RED
+ restorebg
+ waitbgfadein
+ waitforvisualfinish
+ end
+InfernoAnim:
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 50, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, -25, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -46, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 23, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 42, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -21, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -42, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 21, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 46, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -23, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, -50, 1
+ delay 1
+ createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 25, 1
+ delay 1
+ return
+
+Move_WATER_PLEDGE:
+ loadspritegfx ANIM_TAG_WATER_ORB
+ loadspritegfx ANIM_TAG_WATER_IMPACT
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+
+@left fountain
+
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1
+ delay 6
+ panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
+
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, ANIM_TARGET, 1
+
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, ANIM_TARGET, 1
+
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+
+@middle fountain (also continues left fountain)
+
+ panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
+
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_BLUE
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1
+
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1
+
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1
+
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+@right fountain (also continues middle and left fountains)
+
+ panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
+
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, ANIM_TARGET, 1
+
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+ createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, ANIM_TARGET, 1
+
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_FIRE_PLEDGE:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+
+@left fountain
+
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1
+ delay 6
+ panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
+
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+
+@middle fountain (also continues left fountain)
+
+ panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
+
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_RED
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1
+
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+@right fountain (also continues middle and left fountains)
+
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_GRASS_PLEDGE:
+ loadspritegfx ANIM_TAG_LEAF
+ loadspritegfx ANIM_TAG_WHIP_HIT
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1
+ delay 6
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET
+ createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, -16, 0
+
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+
+@middle fountain (also continues left fountain)
+
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET
+ createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 0, 0
+
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 11, RGB_GREEN
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1
+
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+@right fountain (also continues middle and left fountains)
+
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET
+ createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 16, 0
+
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 24, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2
+ createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, -24, 10, -40, 2
+ delay 4
+
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_VOLT_SWITCH:
+ loadspritegfx ANIM_TAG_SPARK
+ loadspritegfx ANIM_TAG_SPARK_2
+ loadspritegfx ANIM_TAG_THIN_RING
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 4
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8
+ delay 4
+ createvisualtask AnimTask_ShakeMon, 5, 1, 0, 3, 45, 1
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8
+ delay 4
+ createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x3BDF, 8
+ delay 4
+ call ElectricityEffect
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_CanBattlerSwitch 1, ANIM_ATTACKER
+ jumpretfalse VoltSwitchContinue
+ createvisualtask AnimTask_IsTargetSameSide 1
+ jumprettrue VoltSwitchAgainstPartner
+ createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, -2
+VoltSwitchContinue:
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ createvisualtask AnimTask_CanBattlerSwitch 1, ANIM_ATTACKER
+ jumpretfalse VoltSwitchLast
+ invisible ANIM_ATTACKER
+VoltSwitchLast:
+ delay 8
+ end
+@ Attacking the same side requires a change of direction
+@ why would you attack your partner though?!
+VoltSwitchAgainstPartner:
+ createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, +2
+ goto VoltSwitchContinue
+
+Move_STRUGGLE_BUG:
+ loadspritegfx ANIM_TAG_MOVEMENT_WAVES
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 2, 0, 9, 0x0a1f
+ waitforvisualfinish
+ createvisualtask AnimTask_FlailMovement, 2, 0
+ createsprite gMovementWavesSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 2
+ createsprite gMovementWavesSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 2
+ loopsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER, 0x8, 0x2
+ waitforvisualfinish
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1
+ createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0
+ createvisualtask AnimTask_ShakeTargetPartnerBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 2, 9, 0, 0x0a1f
+ delay 5
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1
+ delay 5
+ createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_BULLDOZE:
+ launchtask AnimTask_Splash 0x2 0x2 0x0 0x3
+ delay 0x8
+ goto Move_EARTHQUAKE
+
+Move_FROST_BREATH:
+ loadspritegfx ANIM_TAG_ICE_CHUNK
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ loadspritegfx ANIM_TAG_FIRE_PLUME
+ fadetobg BG_ICE
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x300 0x0 0x0 0xffff
+ waitbgfadein
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x0 0x0 0x2 0x28 0x1
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x82 0x5 0x0 0xf 0x0 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gFrostBreathBlueBreathTemplate 0x82 0x5 0x1e 0xf 0x0 0xa 0xa
+ waitforvisualfinish
+ loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0xb, 0x3
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x3 0x19 0x1
+ launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0x5 0x0
+ delay 0x1
+ launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0xfff6 0xfff1
+ delay 0x1
+ launchtemplate gFrostBreathBlueRageTemplate 0x82, 0x3, 0x1 0x0 0x19
+ delay 0x1
+ launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0xf 0x5
+ delay 0x1
+ launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0xffe7 0x0
+ delay 0x1
+ launchtemplate gFrostBreathBlueRageTemplate 0x82, 0x3, 0x1 0x1e 0x1e
+ delay 0x1
+ launchtemplate gFrostBreathBlueRageTemplate 0x82, 0x3, 0x1 0xffe5 0x19
+ delay 0x1
+ launchtemplate gFrostBreathBlueRageTemplate 0xc2 0x3 0x1 0x0 0x8
+ waitforvisualfinish
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0xc2 0x3 0x0 0x0 0x4
+ waitforvisualfinish
+ call UnsetPsychicBg
+ end
+
+Move_DRAGON_TAIL:
+ loadspritegfx ANIM_TAG_ROCKS
+ loadspritegfx ANIM_TAG_SLAM_HIT
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SLAM_HIT, 0x2, 0xD, 0xD, 0x5CAE
+ waitforvisualfinish
+ setalpha 12, 8
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x14 0x3 0x0 0x4
+ delay 0x1
+ launchtemplate gSlamHitSpriteTemplate 0x2 0x2 0x0 0x0
+ delay 0x3
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfff4 0xa 0x0 0x3
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5
+ call TailWhackDown
+ delay 0x3
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x0 0x3 0x6 0x1
+ waitforvisualfinish
+ delay 0x5
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+TailWhackDown:
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 4 0xfff6 0xfff8 1 1
+ playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET
+ launchtemplate gRockScatterSpriteTemplate, 0x82, 4, -12, 0x1b, 2, 3
+ launchtemplate gRockScatterSpriteTemplate, 0x82, 4, 8, 28, 3, 4
+ launchtemplate gRockScatterSpriteTemplate, 0x82, 4, -4, 30, 2, 3
+ launchtemplate gRockScatterSpriteTemplate, 0x82, 4, 12, 25, 4, 4
+ return
+
+Move_WORK_UP:
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -28, 26, 2
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 28, 26, 2
+ delay 5
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -23, 10, 2
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 23, 10, 2
+ delay 5
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -18, 26, 3
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 18, 26, 3
+ delay 14
+ createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB(31, 2, 4)
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -13, 26, 2
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 13, 26, 2
+ delay 5
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -8, 10, 2
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 8, 10, 2
+ delay 5
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -3, 26, 3
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 3, 26, 3
+ delay 14
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -2, 26, 2
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 2, 26, 2
+ delay 5
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -7, 10, 2
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 7, 10, 2
+ delay 5
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 26, 3
+ createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 12, 26, 3
+ waitforvisualfinish
+ end
+
+Move_ELECTROWEB:
+ loadspritegfx ANIM_TAG_SPIDER_WEB
+ loadspritegfx ANIM_TAG_WEB_THREAD
+ loadspritegfx ANIM_TAG_SPARK_2
+ monbg ANIM_DEF_PARTNER
+ delay 0
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPIDER_WEB, 0, 6, 6, RGB(31, 30, 1)
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, RGB_BLACK
+ waitforvisualfinish
+ splitbgprio ANIM_TARGET
+ waitforvisualfinish
+ playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
+ createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, TRUE
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ delay 1
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK
+
+ @ ElectricityEffect looks ugly against both opponents, to do later
+ jumpifdoublebattle Move_ELECTROWEB_Wait
+
+ call ElectricityEffect
+Move_ELECTROWEB_Wait:
+ waitforvisualfinish
+ end
+
+Move_WILD_CHARGE:
+ loadspritegfx ANIM_TAG_SPARK_2
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gGrowingShockWaveOrbSpriteTemplate 0x2 0x0 @electric circle
+ delay 0x1e
+ waitforvisualfinish
+ loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2
+ call ScreenFlash
+ waitforvisualfinish
+ call ScreenFlash
+ waitforvisualfinish
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0
+ waitforvisualfinish
+ delay 0xb
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5
+ delay 0x6
+ launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x10 0x1
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ call ElectricityEffect
+ waitforvisualfinish
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+ScreenFlash:
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x07FE
+ return
+
+Move_DRILL_RUN:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_HORN_HIT
+ setalpha 12, 8
+ fadetobg BG_FISSURE
+ waitbgfadeout
+ launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff
+ launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x0
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 0x2
+ launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x1
+ launchtemplate gHornHitSpriteTemplate 0x84 0x3 0x0 0x0 0xc
+ waitforvisualfinish
+ playse 0x14
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x2 0x0 0x28 0x1
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0xa 0x0 0x28 0x1
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x3
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x2 0x1 0x3
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xfffc 0x3 0x1 0x3
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xfff8 0xfffb 0x1 0x3
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x4 0xfff4 0x1 0x3
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x10 0x0 0x1 0x3
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x5 0x12 0x1 0x3
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xffef 0xc 0x1 0x2
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0xffeb 0xfff1 0x1 0x2
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x8 0xffe5 0x1 0x2
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x20 0x0 0x1 0x2
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x2
+ waitforvisualfinish
+ call UnsetPsychicBg
+ end
+
+Move_DUAL_CHOP:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @hand
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @purple
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4
+ delay 0x6
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x5 0x0 0x6 0x1
+ launchtemplate gKarateChopSpriteTemplate 0x2 0x8 0xffe0 0x0 0x0 0x0 0xa 0x1 0x3 0x0 @left
+ launchtemplate gKarateChopSpriteTemplate 0x2 0x8 0x0515 0x0 0x0 0x0 0xa 0x1 0x3 0x0 @right
+ waitforvisualfinish
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtemplate gDualChopImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x4 0x0 0x6 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_HEART_STAMP:
+ loadspritegfx ANIM_TAG_HEART_STAMP
+ monbg ANIM_TARGET
+ loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 0xc, 0x3
+ launchtemplate gHeartStampSpinningHeartTemplate, 0x80, 0x4 0x0 0x0 0x1 0x1e
+ delay 0x1E
+ clearmonbg ANIM_TARGET
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon2 0x83 0x5 0x1 0x4 0x0 0x5 0x1
+ launchtask AnimTask_StretchTargetUp 0x3 0x0
+ waitforvisualfinish
+ end
+
+Move_HORN_LEECH:
+ loadspritegfx ANIM_TAG_HORN_LEECH @Horn
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_ORBS
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ launchtemplate gHornLeechHornTemplate 0x82, 0x3, 0x0 0x0 0x25
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ call GigaDrainAbsorbEffect
+ waitforvisualfinish
+ call HealingEffect
+ waitforvisualfinish
+ end
+
+Move_SACRED_SWORD:
+ loadspritegfx ANIM_TAG_CUT @Cut
+ loadspritegfx ANIM_TAG_SWORD @Sword
+ loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour
+ loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER
+ launchtemplate gSwordsDanceBladeSpriteTemplate 0x2 0x2 0x0 0x0
+ delay 0x16
+ launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2715 0x2 0x2 0x7ff2 0x10 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ delay 0x1
+ monbg ANIM_TARGET
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ launchtemplate gSacredSwordBladesTemplate 0x81 0x5 0x0 0xa 0x0 0xFF00 0xA
+ launchtemplate gSacredSwordCutTemplate 0x2 0x3 0x28 0xffe0 0x0
+ delay 0x5
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x0 0x3 0xa 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ waitforvisualfinish
+ end
+
+Move_RAZOR_SHELL:
+ loadspritegfx ANIM_TAG_RAZOR_SHELL
+ loadspritegfx ANIM_TAG_CUT
+ monbg ANIM_TARGET
+ launchtemplate gRazorShellTemplate 0x2 0x5 ANIM_TARGET 0x0 0x0 25 0
+ playsewithpan SE_M_CUT, SOUND_PAN_TARGET
+ launchtemplate gCuttingSliceSpriteTemplate 0x1 0x3 0x28 0xffe0 0x0
+ delay 0x5
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xa 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ waitforvisualfinish
+ end
+
+Move_HEAT_CRASH:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_WARM_ROCK
+ loadspritegfx ANIM_TAG_ROCKS
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_SUCCESS, SOUND_PAN_TARGET
+ launchtemplate gHeatCrashEruptionRockTemplate 0x3 0x3 0x0 0xffe0 0xf
+ delay 0x13
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0xfff8 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x4 0x9 0x1
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ delay 0x5
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x5 0x1
+ launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0xfff4 0x20 0x3 0x4
+ launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0x8 0x1f 0x2 0x2
+ launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0xfffc 0x1c 0x2 0x3
+ launchtemplate gRockScatterSpriteTemplate 0x82, 0x4, 0xc 0x1e 0x4 0x3
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_LEAF_TORNADO:
+ loadspritegfx ANIM_TAG_GUST @Gust
+ loadspritegfx ANIM_TAG_LEAF @Leaves
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ playsewithpan SE_M_GUST, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x2f 0x1
+ launchtemplate gEllipticalGustSpriteTemplate 0x2 0x2 0x0 0xfff0
+ launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46
+ call LeafTornadoVortex
+ call LeafTornadoVortex
+ call LeafTornadoVortex
+ waitforvisualfinish
+ stopsound
+ clearmonbg ANIM_TARGET
+ end
+LeafTornadoVortex:
+ launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x1
+ delay 0x2
+ launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x1
+ delay 0x2
+ launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x1
+ delay 0x2
+ launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x1
+ delay 0x2
+ launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x1
+ delay 0x2
+ launchtemplate gLeafTornadoVortexTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x1
+ delay 0x2
+ return
+
+Move_STEAMROLLER:
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5
+ delay 6
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, 1, 0
+ loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 6, 3
+ delay 1
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 3, 1, 0
+ delay 1
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 10, 6, 1, 0
+ delay 1
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1
+ waitforvisualfinish
+ delay 10
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6
+ delay 5
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_COTTON_GUARD:
+ loadspritegfx ANIM_TAG_SPORE
+ monbg ANIM_ATK_PARTNER
+ setalpha 12, 8
+ loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET 0x12 0x6
+ call CreateCottonSpores
+ call CottonSporesSpiralInward
+ call CottonSporesSpiralInward
+ call CottonSporesSpiralInward
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+CottonSporesSpiralInward:
+ launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0x28 0xfff6 0xd
+ delay 0x3
+ launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xffdd 0xfff6 0xd
+ delay 0x3
+ launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xf 0xffd8 0xd
+ delay 0x3
+ launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xfff6 0xffe0 0xd
+ delay 0x3
+ launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0x19 0xffec 0xd
+ delay 0x3
+ launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0xffd8 0xffec 0xd
+ delay 0x3
+ launchtemplate gCottonGuardSporeTemplate 0x2 0x3 0x5 0xffd8 0xd
+ delay 0x3
+ return
+
+Move_NIGHT_DAZE:
+ loadspritegfx ANIM_TAG_THIN_RING @uproar
+ loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color
+ loadspritegfx ANIM_TAG_RED_ORB @circles
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ playsewithpan SE_ORB, SOUND_PAN_ATTACKER
+ launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x0
+ launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x20
+ launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x40
+ launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x60
+ launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x80
+ launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0xa0
+ launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0x0
+ launchtemplate gNightDazeVioletCirclesTemplate 0x82 0x1 0xe0
+ delay 0x1
+ launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ delay 0x1
+ launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ delay 0xF
+ launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ delay 0x1
+ launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ delay 0x1
+ launchtemplate gNightDazeVioletRingsTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x1f 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x2002
+ delay 0x6
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x2002
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ end
+
+Move_PSYSTRIKE:
+ monbg ANIM_TARGET
+ setalpha 8, 8
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1
+ createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_RED
+ waitforvisualfinish
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
+ loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -9, -9, 15, ANIM_TARGET, 1
+ waitforvisualfinish
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_TAIL_SLAP:
+ loadspritegfx ANIM_TAG_IMPACT @Hit
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @Aeroblast
+ loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blades
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ choosetwoturnanim TailSlapRight TailSlapLeft
+TailSlapContinue:
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+TailSlapRight:
+ launchtemplate gTailSlapTemplate 0x2 0x4 0xfff8 0x0 0x1 0x0
+ goto TailSlapContinue
+TailSlapLeft:
+ launchtemplate gTailSlapTemplate 0x2 0x4 0x8 0x0 0x1 0x0
+ goto TailSlapContinue
+
+Move_HURRICANE:
+ loadspritegfx ANIM_TAG_GUST
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ fadetobg BG_HURRICANE
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x1000 0x0 0x1 0xffff
+ waitbgfadein
+ playsewithpan SE_M_GUST, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x40 0x1
+ call HurricaneGust
+ delay 0xA
+ call HurricaneGust
+ delay 0xA
+ call HurricaneGust
+ delay 0xA
+ call HurricaneGust
+ delay 0xA
+ call HurricaneGust
+ delay 0xA
+ call HurricaneGust
+ waitforvisualfinish
+ stopsound
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ call UnsetPsychicBg
+ end
+HurricaneGust:
+ createsprite gEllipticalGustSpriteTemplate, ANIM_ATTACKER, 2, 0, -16
+ createvisualtask AnimTask_AnimateGustTornadoPalette, 5, 1, 70
+ return
+
+Move_HEAD_CHARGE:
+ loadspritegfx ANIM_TAG_IMPACT
+ fadetobgfromset BG_GIGA_IMPACT_OPPONENT, BG_GIGA_IMPACT_PLAYER, BG_GIGA_IMPACT_OPPONENT
+ waitbgfadein
+ launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x0
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 0x2
+ launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x1
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x0 0x2 0x0 0x4 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1
+ launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x2
+ launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ restorebg
+ waitbgfadeout
+ end
+
+Move_GEAR_GRIND:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_GEAR @Gear
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER
+ launchtemplate gGearGrindTemplate 0x2 0x6 0xffe0 0xffe0 0x0 0x333 0x333 0xa
+ launchtemplate gGearGrindTemplate 0x2 0x6 0x20 0x20 0x0 0xfccd 0xfccd 0xa
+ delay 0xa
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0x5 0x2
+ waitforvisualfinish
+ launchtemplate gGearGrindTemplate 0x2 0x6 0x20 0xffe0 0x0 0xfccd 0x333 0xa
+ launchtemplate gGearGrindTemplate 0x2 0x6 0xffe0 0x20 0x0 0x333 0xfccd 0xa
+ delay 0xa
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x8 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x8 0x4 0x2
+ waitforvisualfinish
+ stopsound
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_SEARING_SHOT:
+ loadspritegfx ANIM_TAG_SPARK_2 @yellow color
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_WARM_ROCK @eruption
+ createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ELECTRIC_ORBS, 0x0, 0xC, 0xC, 0x0E3E @Orange
+ createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_WARM_ROCK, 0x0, 0xB, 0xB, 0x01BE @Orange
+ monbg ANIM_ATTACKER
+ setalpha 8, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0
+ waitforvisualfinish
+ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x1F
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0x1e
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0x1e
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gSearingShotRedChargeTemplate 0x2 0x1 0x0
+ delay 0x19
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0x14
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0xf
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x0 0x1e 0x19 0xffec
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x20 0x1e 0x19 0xffec
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x40 0x1e 0x19 0xffec
+ delay 0x2
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x60 0x1e 0x19 0xffec
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0xffec
+ delay 0x2
+ launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0xffec
+ launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0xffec
+ delay 0x2
+ launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0xffec
+ delay 0xF
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x0 0x1e 0x19 0x0
+ delay 0x2
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x20 0x1e 0x19 0x0
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x40 0x1e 0x19 0x0
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x60 0x1e 0x19 0x0
+ delay 0x2
+ launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0x0
+ delay 0x2
+ launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0x0
+ launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0x0
+ delay 0x2
+ launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0x0
+ delay 0x15
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x1F
+ clearmonbg ANIM_ATTACKER
+ fadetobg BG_FIRE
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xA00 0x0 0x1 0xffff
+ waitbgfadein
+ delay 0x1E
+ monbg ANIM_ATK_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK_PARTNER | ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER 0x2 0x0 0x9 0x1F
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x1B 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x1B 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATK_PARTNER 0x3 0x0 0x1B 0x1
+ playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, -5, -5, 0x1 0x1E ANIM_TARGET
+ launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, 5, 10, 0x1 0x1E ANIM_TARGET
+ launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, -5, -5, 0x1 0x1E ANIM_DEF_PARTNER
+ launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, 5, 10, 0x1 0x1E ANIM_DEF_PARTNER
+ launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, -5, -5, 0x1 0x1E ANIM_ATK_PARTNER
+ launchtemplate gSearingShotEruptionImpactTemplate 0x83 0x5, 5, 10, 0x1 0x1E ANIM_ATK_PARTNER
+ delay 0x1E
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK_PARTNER | ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER 0x2 0x9 0x0 0x1F
+ delay 0x1E
+ call UnsetPsychicBg
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+Move_TECHNO_BLAST:
+ launchtask AnimTask_TechnoBlast 0x5 0x0
+ jumpargeq 0x0, TYPE_FIRE, TechnoBlastFire
+ jumpargeq 0x0, TYPE_WATER, TechnoBlastWater
+ jumpargeq 0x0, TYPE_ELECTRIC, TechnoBlastElectric
+ jumpargeq 0x0, TYPE_ICE, TechnoBlastIce
+TechnoBlastNormal:
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
+ loadspritegfx ANIM_TAG_ORBS @circles
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray color
+ loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast
+ loadspritegfx ANIM_TAG_SPARK_2 @blast particles
+ loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal
+ monbg ANIM_ATTACKER
+ setblends 0x80E
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 0xE, 0x8
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x28 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffd8 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0x28 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0xffd8 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0xffec 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x14 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffec 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteChargeTemplate 0x2 0x1 0x0
+ call TechnoBlastWhiteCircles
+ call TechnoBlastWhiteCircles
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x28 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffd8 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0x28 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0xffd8 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0xffec 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x14 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffec 0x10
+ delay 0x2
+ waitforvisualfinish
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastWhiteBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0
+ launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
+ launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
+ launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
+ launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
+ launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
+ launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
+ launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
+ launchtemplate gTechnoBlastWhiteSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2
+ waitforvisualfinish
+ playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
+ launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_ATTACKER
+ end
+TechnoBlastWhiteCircles:
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0x14 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffec 0x1e 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x14 0xffe2 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffec 0xffe2 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x14 0x1e 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0x0 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x0 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x28 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffd8 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0x28 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x0 0xffd8 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0xffec 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0x28 0x14 0x10
+ delay 0x2
+ launchtemplate gTechnoBlastWhiteCircleTemplate 0x2 0x3 0xffd8 0xffec 0x10
+ delay 0x2
+ return
+
+TechnoBlastElectric:
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
+ loadspritegfx ANIM_TAG_ORBS @circles
+ loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast
+ loadspritegfx ANIM_TAG_SPARK_2 @blast particles
+ loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal
+ monbg ANIM_ATTACKER
+ setblends 0x80E
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 0xE, 0x8
+ launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 0x0
+ call TechnoBlastCharging1
+ delay 0xF
+ call TechnoBlastCharging2
+ delay 0xF
+ call TechnoBlastCharging1
+ delay 0xF
+ call TechnoBlastCharging2
+ delay 0xF
+ call TechnoBlastCharging1
+ delay 0xF
+ call TechnoBlastCharging2
+ delay 0xF
+ call TechnoBlastCharging1
+ delay 0xF
+ call TechnoBlastCharging2
+ delay 0xF
+ waitforvisualfinish
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastYellowBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0
+ launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
+ launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
+ launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
+ launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
+ launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
+ launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
+ launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
+ launchtemplate gTechnoBlastYellowSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2
+ waitforvisualfinish
+ playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
+ launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1
+ delay 0x2
+ launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0
+ delay 0x2
+ launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2
+ delay 0x2
+ launchtemplate gTechnoBlastYellowSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_ATTACKER
+ end
+TechnoBlastCharging1:
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ return
+TechnoBlastCharging2:
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ return
+
+TechnoBlastWater:
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
+ loadspritegfx ANIM_TAG_WATER_ORB @blue color
+ loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast
+ loadspritegfx ANIM_TAG_SPARK_2 @blast particles
+ loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal
+ loadspritegfx ANIM_TAG_BUBBLE @bubbles
+ monbg ANIM_ATTACKER
+ setblends 0x80E
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x1
+ waitforvisualfinish
+ launchtemplate gTechnoBlastBlueChargeTemplate 0x2 0x1 0x0
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastBlueBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0
+ launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
+ launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
+ launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
+ launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
+ launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
+ launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
+ launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
+ launchtemplate gTechnoBlastBlueSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2
+ waitforvisualfinish
+ playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
+ launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x1
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x1
+ delay 0x2
+ launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x1
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x1
+ delay 0x2
+ launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x1
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x1
+ delay 0x2
+ launchtemplate gTechnoBlastBlueSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x1
+ launchtemplate gTechnoBlastBlueBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_ATTACKER
+ end
+
+TechnoBlastFire:
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color
+ loadspritegfx ANIM_TAG_SMALL_RED_EYE @another red color
+ loadspritegfx ANIM_TAG_SMALL_EMBER @fire
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
+ loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast
+ loadspritegfx ANIM_TAG_SPARK_2 @blast particles
+ loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal
+ monbg ANIM_ATTACKER
+ setblends 0x80E
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ launchtemplate gTechnoBlastRedChargeTemplate 0x2 0x1 0x0
+ delay 0x5
+ call TechnoBlastFireSpiral
+ call TechnoBlastFireSpiral
+ call TechnoBlastFireSpiral
+ waitforvisualfinish
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastRedBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0
+ launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
+ launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
+ launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
+ launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
+ launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
+ launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
+ launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
+ launchtemplate gTechnoBlastRedSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2
+ waitforvisualfinish
+ playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
+ launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40
+ createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40
+ delay 0x2
+ launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0
+ delay 0x2
+ launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0
+ delay 0x2
+ launchtemplate gTechnoBlastRedSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_ATTACKER
+ end
+TechnoBlastFireSpiral:
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ return
+
+TechnoBlastIce:
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice
+ loadspritegfx ANIM_TAG_ICE_CHUNK @ice color
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
+ loadspritegfx ANIM_TAG_BLACK_BALL_2 @blast
+ loadspritegfx ANIM_TAG_SPARK_2 @blast particles
+ loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal
+ monbg ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ launchtemplate gTechnoBlastIceChargeTemplate 0x2 0x1 0x0
+ delay 0x5
+ call TechnoBlastIceChargeParticles
+ call TechnoBlastIceChargeParticles
+ call TechnoBlastIceChargeParticles
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfff6 0xfff6 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xa 0x14 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfffb 0xa 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x11 0xfff4 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ waitforvisualfinish
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gTechnoBlastIceBlastTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0
+ launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
+ launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
+ launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
+ launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
+ launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
+ launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
+ launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
+ launchtemplate gTechnoBlastIceSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2
+ waitforvisualfinish
+ playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
+ launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0x8 0x8 0x1 0x0
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0
+ delay 0x2
+ launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0
+ delay 0x2
+ launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0
+ delay 0x2
+ launchtemplate gTechnoBlastIceSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ end
+TechnoBlastIceChargeParticles:
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfff6 0xfff6 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xa 0x14 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfffb 0xa 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x11 0xfff4 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0xfff1 0xf 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gTechnoBlastIceCrystalsTemplate 0x2 0x4 0x14 0x2 0x0 0x2
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ return
+
+Move_RELIC_SONG:
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
+ loadspritegfx ANIM_TAG_THIN_RING
+ loadspritegfx ANIM_TAG_MUSIC_NOTES
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_DEF_PARTNER
+ launchtask AnimTask_MusicNotesRainbowBlend 0x2 0x0
+ waitforvisualfinish
+ createvisualtask SoundTask_PlayCryWithEcho, 2, ANIM_ATTACKER, 2
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x7 0x0 0xc
+ delay 0x5
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x6 0x1 0xc
+ delay 0x5
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xc 0xffe3 0x1
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe3 0xfff4 0x0
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x1 0x2 0xc
+ delay 0x5
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x3 0xc
+ delay 0x5
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x18 0xffe8 0x1
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe8 0xffe8 0x0
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x3 0x0 0xc
+ delay 0x5
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x1 0xc
+ delay 0x5
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x5 0x2 0xc
+ delay 0x5
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x6 0x3 0xc
+ delay 0x5
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xc 0xffe3 0x1
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe3 0xfff4 0x0
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x0 0xc
+ delay 0x5
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x2 0x1 0xc
+ delay 0x5
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x18 0xffe8 0x1
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe8 0xffe8 0x0
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x1 0x2 0xc
+ delay 0x5
+ launchtemplate gWavyMusicNotesSpriteTemplate 0x82, 0x3, 0x5 0x3 0xc
+ delay 0x5
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1
+ waitforvisualfinish
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x3 0x0 0xc 0x1
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x3 0x3 0x0 0xc 0x1
+ delay 0x5
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x5
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x5
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ launchtask AnimTask_MusicNotesClearRainbowBlend 0x2 0x0
+ waitforvisualfinish
+ end
+
+Move_SECRET_SWORD:
+ loadspritegfx ANIM_TAG_CUT @Cut
+ loadspritegfx ANIM_TAG_SWORD @Sword
+ loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour
+ loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x0
+ launchtemplate gSwordsDanceBladeSpriteTemplate 0x2 0x2 0x0 0x0
+ delay 0x16
+ launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2715 0x2 0x2 0x7ff2 0x10 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ delay 0x1
+ monbg ANIM_TARGET
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ launchtemplate gSecretSwordBladesTemplate 0x81 0x5 0x0 0xa 0x0 0xFF00 0xA
+ launchtemplate gCuttingSliceSpriteTemplate 0x2 0x3 0x28 0xffe0 0x0
+ delay 0x5
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x0 0x3 0xa 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x10 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ waitforvisualfinish
+ end
+
+Move_GLACIATE:
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice
+ loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke
+ loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ fadetobg BG_ICE
+ waitbgfadeout
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfff4 0x68 0x0 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfff4 0x48 0x1 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfffa 0x38 0x1 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xfffa 0x58 0x0 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x0 0x38 0x0 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x0 0x58 0x1 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x6 0x48 0x0 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x6 0x68 0x1 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xc 0x48 0x0 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0xc 0x38 0x1 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x12 0x50 0x0 0x4b
+ launchtemplate gGlaciateSmokeTemplate 0x84 0x5 0x0 0x12 0x48 0x1 0x4b
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER), 0x2, 0x0, 0xA, 0x7FFF
+ call IceCrystalEffectLong
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER), 0x2, 0xA, 0x0, 0x7FFF
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_DEF_PARTNER
+ call UnsetPsychicBg
+ end
+
+Move_BOLT_STRIKE::
+ loadspritegfx ANIM_TAG_SPARK_2 @Electricity
+ loadspritegfx ANIM_TAG_IMPACT @Hit
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS @Electric Balls
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @Electric Circle
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x07FE
+ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x40 0x0 0x2
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0xc
+ launchtemplate gGrowingShockWaveOrbSpriteTemplate 0x2 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 0x8
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x12 0x6 0x2 0x4
+ delay 0xA
+ fadetobg BG_BOLT_STRIKE
+ waitbgfadeout
+ waitforvisualfinish
+ monbg ANIM_TARGET
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5
+ delay 0x6
+ launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x07FE
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0x20 0x1
+ playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
+ call ElectricityEffect
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x07FE
+ playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
+ call ElectricityEffect
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x07FE
+ call UnsetPsychicBg
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0
+ blendoff
+ waitforvisualfinish
+ end
+
+Move_BLUE_FLARE::
+ loadspritegfx ANIM_TAG_SMALL_EMBER @Fire
+ loadspritegfx ANIM_TAG_METAL_BITS @Blue Flare Colour
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x0
+ loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x7, 0x9
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10
+ delay 0x2
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x1 0x0 0x9 0x1F
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10
+ delay 0x2
+ launchtemplate gBlueFlareFlameJabTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10
+ waitforvisualfinish
+ playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
+ call BlueFlareFireSpin
+ call BlueFlareFireSpin
+ call BlueFlareFireSpin
+ fadetobg BG_FIRE_2
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x1000 0x0 0x0 0xFFFF
+ waitbgfadein
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ call BlueFlareFlameSpreadEffect
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x1 0x9 0x0 0x1f
+ call UnsetPsychicBg
+ waitforvisualfinish
+ end
+BlueFlareFireSpin:
+ launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x1
+ delay 0x2
+ launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x1
+ delay 0x2
+ launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x1
+ delay 0x2
+ launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x1
+ delay 0x2
+ launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x1
+ delay 0x2
+ launchtemplate gBlueFlareFlameSwirlTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x1
+ delay 0x2
+ return
+BlueFlareFlameSpreadEffect:
+ launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0x0 0xb0 0x28
+ launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xff40 0xf0 0x28
+ launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0x0 0xff60 0x28
+ launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xff40 0xff90 0x28
+ launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xa0 0x30 0x28
+ launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0xff20 0xffe0 0x28
+ launchtemplate gBlueFlareBurnTemplate 0x81 0x5 0x0 0xa 0x70 0xff80 0x28
+ return
+
+Move_FIERY_DANCE::
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x14be
+ waitforvisualfinish
+ playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x2 0x40 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x9 0x1f
+ call FireSpinEffect
+ call FireSpinEffect
+ call FireSpinEffect
+ playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
+ call FireSpinEffect
+ call FireSpinEffect
+ call FireSpinEffect
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x9 0x0 0x1f
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x14be
+ waitforvisualfinish
+ end
+
+Move_FREEZE_SHOCK::
+ loadspritegfx ANIM_TAG_SPARK
+ loadspritegfx ANIM_TAG_SPARK_2
+ loadspritegfx ANIM_TAG_ICE_CHUNK @Ice Ball
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @Electric Circle
+ choosetwoturnanim FreezeShockCharge FreezeShockAttack
+FreezeShockCharge:
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x0 0xf 0x7fff
+ launchtemplate gFreezeShockCircleTemplate 0x2 0x0 @electric circle
+ delay 0x14
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff
+ waitforvisualfinish
+ end
+FreezeShockAttack:
+ loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0x5, 0x5
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0
+ monbg ANIM_TARGET
+ waitforvisualfinish
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER
+ launchtemplate gFreezeShockIceBallTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
+ delay 0xf
+ waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 0x13
+ call ElectricityEffect
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0
+ waitforvisualfinish
+ end
+
+Move_ICE_BURN::
+ loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke
+ loadspritegfx ANIM_TAG_ICE_CHUNK @white color
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ choosetwoturnanim IceBurnCharge, IceBurnUnleash
+ waitforvisualfinish
+ end
+IceBurnCharge:
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0x4, 0x3
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x8 0x0 0x0
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x0 0xf 0x7fff
+ delay 0x14
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ end
+IceBurnUnleash:
+ monbg ANIM_TARGET
+ fadetobg BG_ICE
+ waitbgfadeout
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x7fff
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfff4 0x68 0x0 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfff4 0x48 0x1 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfffa 0x38 0x1 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xfffa 0x58 0x0 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x0 0x38 0x0 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x0 0x58 0x1 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x6 0x48 0x0 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x6 0x68 0x1 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xc 0x48 0x0 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0xc 0x38 0x1 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x12 0x50 0x0 0x4b
+ launchtemplate gIceBurnSmokeTemplate 0x84 0x5 0x0 0x12 0x48 0x1 0x4b
+ call FireSpreadEffect
+ playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7fff
+ waitforvisualfinish
+ restorebg
+ clearmonbg ANIM_TARGET
+ end
+
+Move_SNARL::
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
+ loadspritegfx ANIM_TAG_THIN_RING
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_DEF_PARTNER
+ fadetobg BG_DARK
+ waitbgfadeout
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x1d 0xfff4 0x0
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xfff4 0xffe3 0x1
+ delay 0x10
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xc 0xffe3 0x1
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe3 0xfff4 0x0
+ delay 0x10
+ launchtask AnimTask_UproarDistortion 0x2 0x1 0x0
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0x18 0xffe8 0x1
+ launchtemplate gJaggedMusicNoteSpriteTemplate 0x2 0x4 0x0 0xffe8 0xffe8 0x0
+ waitforvisualfinish
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x3 0x0 0xc 0x1
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x3 0x3 0x0 0xc 0x1
+ delay 0x4
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ call UnsetPsychicBg
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_ICICLE_CRASH::
+ loadspritegfx ANIM_TAG_ICICLE_SPEAR @Icicle
+ fadetobg BG_ICE
+ waitbgfadein
+ monbg ANIM_DEF_PARTNER
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xfffb 0x0 0xfffb 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x5 0x0 0x6 0x1
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x13 0x0 0xa 0x01
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffe9 0x0 0xfff6 0x1
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x5 0x32 0x1
+ delay 0x2
+ call LaunchIcicleCrashSpear
+ call LaunchIcicleCrashSpear
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ restorebg
+ waitbgfadeout
+ end
+LaunchIcicleCrashSpear:
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x1c 0x0 0xa 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xfff6 0x0 0xfffb 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xa 0x0 0x6 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x18 0x0 0xa 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffe0 0x0 0xfff6 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gIcicleCrashSpearTemplate 0x82, 0x4, 0x1e 0x0 0xa 0x0
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x2
+ return
+
+Move_V_CREATE::
+ loadspritegfx ANIM_TAG_SMALL_EMBER @fire blast flame
+ loadspritegfx ANIM_TAG_THIN_RING @calm mind animation
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color
+ loadspritegfx ANIM_TAG_ECLIPSING_ORB @defense curl animation
+ monbg ANIM_ATK_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0 @Darken
+ launchtemplate gVCreateRedOrbTemplate 0x2 0x4 0x0 0x11 0x0 0x1
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gVCreateRedRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x1f
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
+ call VCreateFlames
+ call VCreateFlames
+ call VCreateFlames
+ call VCreateFlames
+ call VCreateFlames
+ call VCreateFlames
+ call VCreateFlames
+ call VCreateFlames
+ call VCreateFlames
+ call VCreateFlames
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_SMALL_EMBER
+ unloadspritegfx ANIM_TAG_THIN_RING
+ unloadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
+ unloadspritegfx ANIM_TAG_ECLIPSING_ORB
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion animation
+ loadspritegfx ANIM_TAG_CLAW_SLASH @dragon claw animation
+ clearmonbg ANIM_ATK_PARTNER
+ fadetobg BG_FIRE @Mr. DS Fire
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xA00 0x0 0x1 0xffff
+ waitbgfadein
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa
+ delay 0x23
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x5 0x32 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x1f
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 0x1 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 0x1 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 0x1 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 0x1 0x1
+ waitforvisualfinish
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4
+ launchtemplate gClawSlashSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0
+ launchtemplate gClawSlashSpriteTemplate 0x82, 0x3, 0xa 0xfff6 0x1
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x1f
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x1f
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ call UnsetPsychicBg
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0xffff
+ waitforvisualfinish
+ end
+VCreateFlames:
+ launchtemplate gVCreateFlameTemplate 0x82 0x5 0x0 0x1 0x16 0xFFEA 0x10 @upperright
+ launchtemplate gVCreateFlameTemplate 0x82 0x5 0x0 0x1 0xFFEE 0xFFEE 0x10 @upperleft
+ delay 0x3
+ return
+
+Move_FUSION_FLARE::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @ball
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @ball palette
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @flame palette
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES @particles
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SMALL_BUBBLES, 0x0, 0xD, 0xD, 0x015B @Reddish Orange
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ call FusionFlareBuff
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x1F
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x8 0x1 0x0
+ delay 0x8
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtemplate gFusionFlareRedBallUpTemplate 0x2 0x0
+ delay 0x20
+ launchtemplate gFusionFlareRedBallTemplate 0x3 0x3 0x0 0xffA0 0x2F
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1
+ delay 0x29
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xb 0x1F
+ delay 0x5
+ launchtemplate gFusionFlareRedRingTemplate 0x3 0x6 0x1 0x1 0x1 0x1 0x1F 0x8
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0
+ launchtemplate gFusionFlareRedBubblesTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x2 0x10
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+FusionFlareBuff:
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+
+Move_FUSION_BOLT::
+ loadspritegfx ANIM_TAG_SPARK
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_ELECTRICITY
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 0x0, 0x0, 0xE, 0x0
+ waitforvisualfinish
+ launchtemplate gVoltTackleOrbSlideSpriteTemplate 0x1 0x0
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ invisible ANIM_ATTACKER
+ waitforvisualfinish
+ delay 0x8
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x0
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x1
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET
+ waitforvisualfinish
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x3
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET
+ waitforvisualfinish
+ launchtemplate gFusionBoltBallTemplate 0x82 0x1 0x10
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER
+ delay 0x8
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0xa 0x0 0x12 0x1
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x1 0x10 0x10
+ delay 0x2
+ launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x1 0xfff0 0xfff0
+ delay 0x8
+ launchtask AnimTask_VoltTackleAttackerReappear 0x5 0x0
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x3 0x0 0x9 0x1
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10
+ delay 0x2
+ launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0xE 0x0 0x0
+ waitforvisualfinish
+ end
+
+@@@@@@@@@@@@@@@@@@@@@@@ GEN 6 @@@@@@@@@@@@@@@@@@@@@@@
+Move_FLYING_PRESS::
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly/bounce
+ loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke
+ setblends 0xF
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ waitforvisualfinish
+ delay 0xF
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
+ launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0
+ delay 0x2
+ launchtask AnimTask_SquishTarget 0x2 0x0
+ delay 0x5
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0x8 0x1 0x0
+ delay 0x2
+ launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0xfff8 0x1 0x0
+ delay 0x2
+ launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0xfff8 0x1 0x0
+ delay 0x2
+ launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0x8 0x1 0x0
+ delay 0x2
+ launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0x8 0x1 0x0
+ delay 0x2
+ launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0xfff8 0x1 0x0
+ delay 0x2
+ launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0x8 0xfff8 0x1 0x0
+ delay 0x2
+ launchtemplate gOctazookaSmokeSpriteTemplate 0x80 0x4 0xfff8 0x8 0x1 0x0
+ waitforvisualfinish
+ blendoff
+ end
+
+Move_MAT_BLOCK::
+ loadspritegfx ANIM_TAG_CONVERSION
+ loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL @green color
+ monbg ANIM_ATK_PARTNER
+ splitbgprio ANIM_ATTACKER
+ setblends 0x10
+ delay 0x0
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0x18
+ launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0x18
+ delay 0x3
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0x8
+ launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0x8
+ delay 0x3
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0xfff8
+ launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0xfff8
+ delay 0x3
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0xfff8 0xffe8
+ launchtemplate gMatBlockGreenConversionTemplate 0x2 0x2 0x8 0xffe8
+ delay 0x14
+ launchtask AnimTask_ConversionAlphaBlend 0x5 0x0
+ waitforvisualfinish
+ delay 0x1
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+Move_BELCH::
+ loadspritegfx ANIM_TAG_BERRY_NORMAL
+ loadspritegfx ANIM_TAG_EXPLOSION @Explosion
+ monbg ANIM_TARGET
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_SUCCESS, SOUND_PAN_ATTACKER
+ launchtemplate gBelchBerryTemplate 0x2 0x6 0x14 0xfff8 0xfff8 0xfff8 0x14 0xffe0
+ delay 0x13
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0xa 0x0 0x14 0x1
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 0x1 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 0x1 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 0x1 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 0x1 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0x18 0x1 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_ROTOTILLER::
+ loadspritegfx ANIM_TAG_MUD_SAND
+ loadspritegfx ANIM_TAG_DIRT_MOUND
+ loadspritegfx ANIM_TAG_GREEN_SPARKLE
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x112C
+ waitforvisualfinish
+ launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x0 0xb4
+ launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x1 0xb4
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x6 0x4 0x2 0x4
+ call DigThrowDirt
+ call DigThrowDirt
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x6 0x4 0x2 0x4
+ call DigThrowDirt
+ call DigThrowDirt
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x112C
+ waitforvisualfinish
+ end
+
+Move_STICKY_WEB:
+ loadspritegfx ANIM_TAG_SPIDER_WEB
+ loadspritegfx ANIM_TAG_WEB_THREAD
+ monbg ANIM_DEF_PARTNER
+ delay 0
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, RGB_BLACK
+ waitforvisualfinish
+ splitbgprio ANIM_TARGET
+ loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 9, 6
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ waitforvisualfinish
+ playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
+ createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, TRUE
+ delay 50
+ playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
+ createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, -30, 30, TRUE
+ delay 50
+ playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
+ createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 30, -30, TRUE
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ delay 1
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK
+ end
+
+Move_FELL_STINGER:
+ loadspritegfx ANIM_TAG_NEEDLE
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ splitbgprio ANIM_TARGET
+ fadetobg BG_DARK
+ waitbgfadein
+ delay 0
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
+ createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20
+ waitforvisualfinish
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 5, 1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ waitforvisualfinish
+ delay 1
+ restorebg
+ waitbgfadein
+ clearmonbg ANIM_TARGET
+ end
+
+Move_PHANTOM_FORCE:
+ choosetwoturnanim PhantomForceSetUp, PhantomForceUnleash
+PhantomForceEnd:
+ end
+PhantomForceSetUp:
+ invisible ANIM_ATTACKER
+ goto PhantomForceEnd
+PhantomForceUnleash:
+ visible ANIM_ATTACKER
+ goto PhantomForceEnd
+
+Move_TRICK_OR_TREAT:
+ end
+
+Move_NOBLE_ROAR:
+ loadspritegfx ANIM_TAG_NOISE_LINE
+ monbg ANIM_ATTACKER
+ splitbgprio ANIM_ATTACKER
+ setalpha 8, 8
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 8, RGB(4, 0, 0)
+ waitforvisualfinish
+ createvisualtask SoundTask_PlayCryHighPitch, 2, ANIM_ATTACKER, 2
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, ANIM_ATTACKER, 1
+ call RoarEffect
+ delay 10
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 9, 1
+ delay 10
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 8, 0, RGB(4, 0, 0)
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ waitforvisualfinish
+ delay 20
+ end
+
+Move_ION_DELUGE:
+ end
+
+Move_PARABOLIC_CHARGE:
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_SPARK
+ loadspritegfx ANIM_TAG_LIGHTNING
+ loadspritegfx ANIM_TAG_ORBS
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 6, RGB(18, 16, 3)
+ waitforvisualfinish
+ createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 3, 20, 20
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ delay 12
+ createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2
+ delay 30
+ jumpifdoublebattle ParabolicChargeDouble
+ createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_TARGET
+ delay 12
+ waitforvisualfinish
+ createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_TARGET
+ playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1
+ createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 16, 16, RGB_BLACK
+ delay 4
+ createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 0, 0, RGB_BLACK
+ParabolicChargeHeal:
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ waitforvisualfinish
+ call HealingEffect
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 6, 0, RGB(18, 16, 3)
+ waitforvisualfinish
+ blendoff
+ end
+ParabolicChargeDouble:
+ createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_TARGET
+ createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_DEF_PARTNER
+ createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_ATK_PARTNER
+ delay 12
+ waitforvisualfinish
+ createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_TARGET
+ createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_DEF_PARTNER
+ createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_ATK_PARTNER
+ playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 6, 18, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_ATK_PARTNER, 0, 6, 18, 1
+ createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 16, 16, RGB_BLACK
+ delay 4
+ createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 0, 0, RGB_BLACK
+ goto ParabolicChargeHeal;
+
+Move_FORESTS_CURSE:
+ loadspritegfx ANIM_TAG_ROOTS @frenzy plant
+ loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @curse
+ monbg ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x8 0x02E3
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1
+ waitforvisualfinish
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1
+ waitforvisualfinish
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x64 0x64 0x8 0x1 0x14 0x28 0x0
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x14 0x64 0x10 0x2 0xa 0x23 0x1
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0xc8 0x50 0x8 0x1 0x28 0x14 0x0
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x50 0x3c 0xa 0x3 0x14 0x32 0x0
+ launchtemplate gForestsCurseIngrainTemplate 0x42 0x7 0x8c 0x64 0x10 0x1 0x14 0x1e 0x1
+ waitforvisualfinish
+ launchtemplate gCurseGhostSpriteTemplate 0x82 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0xe 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x8 0x0 0x02E3
+ delay 0x3
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ end
+
+Move_PETAL_BLIZZARD::
+ loadspritegfx ANIM_TAG_LEAF
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_FLOWER
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET
+ createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 120, 70, 5, 70, 30
+ delay 0x1
+ createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x37, 0x6, 0x3c, 0x19
+ delay 0x1
+ createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x3c, 0x7, 0x3c, 0x1e
+ launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x73 0x37 0xA 0x3c 0x1e
+ delay 0x3
+ launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x64 0x32 0x4 0x32 0x1A
+ delay 0x1
+ launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x69 0x19 0x8 0x3c 0x14
+ delay 0x1
+ launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x73 0x28 0xA 0x30 0x1E
+ delay 0x3
+ launchtemplate gPetalBlizzardTwister1Template 0x82 0x5 0x78 0x1E 0x6 0x2d 0x19
+ createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x23, 0xA, 0x3c, 0x1e
+ delay 0x3
+ launchtemplate gPetalBlizzardTwister2Template 0x82 0x5 0x69 0x14 0x8 0x28 0x0
+ delay 0x3
+ createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xff, 0xf, 0x20, 0x0
+ createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x6e, 0xA, 0x8, 0x20, 0x14
+ waitforvisualfinish
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 ANIM_TARGET 0x3 0x0 0xC 0x1
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0xC 0x1
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 ANIM_ATK_PARTNER 0x3 0x0 0xC 0x1
+ delay 0x4
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_FREEZE_DRY::
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS
+ loadspritegfx ANIM_TAG_IMPACT
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB(12, 26, 31)
+ delay 20
+ playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET
+ createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 0
+ createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 64
+ createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 128
+ createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 192
+ delay 5
+ createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 32
+ createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 96
+ createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 160
+ createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 224
+ delay 17
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 3, 1
+ waitforvisualfinish
+ delay 15
+ call IceCrystalEffectShort
+ delay 5
+ loadspritegfx ANIM_TAG_ICE_CUBE
+ createvisualtask AnimTask_FrozenIceCube, 2
+ waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 17
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 9, 0, RGB(12, 26, 31)
+ waitforvisualfinish
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, RGB_BLACK
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_DISARMING_VOICE::
+ loadspritegfx ANIM_TAG_NOISE_LINE
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6e7d
+ waitforvisualfinish
+ launchtask SoundTask_PlayDoubleCry 0x2 0x2 0x0 0xff
+ call RoarEffect
+ delay 0xA
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x1 0x0 0x1A 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x1A 0x1
+ waitforvisualfinish
+ launchtask SoundTask_WaitForCry 0x5 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6e7d
+ waitforvisualfinish
+ end
+
+Move_PARTING_SHOT:
+ loadspritegfx ANIM_TAG_NOISE_LINE
+ fadetobg BG_DARK
+ waitbgfadein
+ delay 0
+ createvisualtask SoundTask_PlayDoubleCry, 2, 0, 255
+ call RoarEffect
+ delay 10
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 9, 1
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 9, 1
+ waitforvisualfinish
+ createvisualtask SoundTask_WaitForCry, 5
+ waitforvisualfinish
+ delay 1
+ restorebg
+ waitbgfadein
+ end
+
+Move_TOPSY_TURVY:
+ loadspritegfx ANIM_TAG_SWEAT_DROP
+ setalpha 12, 8
+ createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 1, 2, 0, 4, RGB_BLACK
+ waitforvisualfinish
+ createvisualtask AnimTask_RotateVertically, 2, ANIM_TARGET, 768
+ createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 4, 5, 0, 8, RGB(9, 0, 16)
+ playsewithpan SE_ROTATING_GATE, SOUND_PAN_TARGET
+ delay 116
+ createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 4, 5, 8, 0, RGB(9, 0, 16)
+ playsewithpan SE_FALL, SOUND_PAN_TARGET
+ waitforvisualfinish
+ createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 1, 2, 4, 0, RGB_BLACK
+ waitforvisualfinish
+ blendoff
+ end
+
+Move_DRAINING_KISS:
+ loadspritegfx ANIM_TAG_ORBS
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_RED_HEART
+ loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3
+ createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER
+ delay 15
+ createsprite gRedHeartProjectileSpriteTemplate, ANIM_TARGET, 3, 20, -8
+ waitforvisualfinish
+ playsewithpan SE_M_ATTRACT, SOUND_PAN_TARGET
+ createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 160, -32
+ createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -256, -40
+ createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 128, -16
+ createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 416, -38
+ createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -128, -22
+ createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31
+ waitforvisualfinish
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2
+ delay 5
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1
+ waitforvisualfinish
+ delay 3
+ call AbsorbEffect
+ waitforvisualfinish
+ delay 15
+ call HealingEffect
+ waitforvisualfinish
+ end
+
+Move_CRAFTY_SHIELD::
+ loadspritegfx ANIM_TAG_CRAFTY_SHIELD
+ monbg ANIM_ATK_PARTNER
+ splitbgprio ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x5 0x4DBF
+ setblends 0x10
+ delay 0x0
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0xffe8
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0xffe8
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0xffe8
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0xffe8
+ delay 0x3
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0xfff8
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0xfff8
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0xfff8
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0xfff8
+ delay 0x3
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0x8
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0x8
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0x8
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0x8
+ delay 0x3
+ playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xffe8 0x18
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0xfff8 0x18
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x8 0x18
+ delay 0x3
+ launchtemplate gCraftyShieldPinkConversionTemplate 0x2 0x2 0x18 0x18
+ delay 0x14
+ playsewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER
+ launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2722 0x1 0x1 0x37ff 0xc 0x0 0x0
+ delay 0x6
+ launchtask AnimTask_ConversionAlphaBlend 0x5 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x5 0x0 0x4DBF
+ waitforvisualfinish
+ delay 0x1
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+Move_FLOWER_SHIELD::
+ loadspritegfx ANIM_TAG_FLOWER
+ loadspritegfx ANIM_TAG_IMPACT
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6e7d
+ waitforvisualfinish
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ launchtemplate gPetalDanceBigFlowerSpriteTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x10 0xffe8 0x8 0x64
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xfff0 0xffe8 0x8 0x64
+ delay 0xf
+ launchtemplate gPetalDanceBigFlowerSpriteTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x20 0xffe8 0x8 0x64
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xffe0 0xffe8 0x8 0x64
+ delay 0xf
+ launchtemplate gPetalDanceBigFlowerSpriteTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x18 0xffe8 0x8 0x64
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xffe8 0xffe8 0x8 0x64
+ delay 0x1e
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x10 0xffe8 0x0 0x64
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xfff0 0xffe8 0x0 0x64
+ delay 0x1e
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0x14 0xfff0 0xe 0x50
+ launchtemplate gPetalDanceSmallFlowerSpriteTemplate 0x2 0x4 0xffec 0xfff2 0x10 0x50
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6e7d
+ waitforvisualfinish
+ blendoff
+ end
+
+Move_GRASSY_TERRAIN::
+ loadspritegfx ANIM_TAG_ORBS @Recover Ball
+ loadspritegfx ANIM_TAG_GREEN_SPARKLE @Green Star
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ waitforvisualfinish
+ delay 30
+ createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(11, 26, 11), 12, 5, 1
+ delay 4
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER
+ createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 0
+ createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 42
+ createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 84
+ createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126
+ createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168
+ createsprite gGrassyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 4, RGB(11, 26, 11)
+ delay 52
+ setarg 7, 0xFFFF
+ playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 0
+ createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 32
+ createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 64
+ createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 96
+ createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 128
+ createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 160
+ createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 192
+ createsprite gGrassyTerrainStarTemplate, ANIM_TARGET, 2, 224
+ panse_adjustnone SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0x0
+ waitforvisualfinish
+ delay 4
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(31, 24, 31)
+ waitforvisualfinish
+ end
+
+Move_MISTY_TERRAIN::
+ loadspritegfx ANIM_TAG_ORBS @Recover Ball
+ loadspritegfx ANIM_TAG_WATER_GUN @Light Blue Colour
+ loadspritegfx ANIM_TAG_GREEN_SPARKLE
+ playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ waitforvisualfinish
+ delay 30
+ createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(31, 24, 31), 12, 5, 1
+ delay 4
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER
+ createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 0
+ createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 42
+ createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 84
+ createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126
+ createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168
+ createsprite gMistyTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 7, RGB(31, 24, 31)
+ delay 52
+ setarg 7, 0xFFFF
+ playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 0
+ createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 32
+ createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 64
+ playse SE_M_COSMIC_POWER
+ createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 96
+ createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 128
+ createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 160
+ createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 192
+ createsprite gMistyTerrainStarTemplate, ANIM_TARGET, 2, 224
+ waitforvisualfinish
+ delay 4
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 7, 0, RGB(31, 24, 31)
+ waitforvisualfinish
+ end
+
+Move_ELECTRIFY::
+ loadspritegfx ANIM_TAG_GUARD_RING @ring around user
+ loadspritegfx ANIM_TAG_SPARK_2 @yellow color
+ loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color
+ loadspritegfx ANIM_TAG_SPARK @electric travel
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ monbg ANIM_ATTACKER
+ loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET 0xa 0x4
+ launchtemplate gElectrifyRingTemplate 0x2 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0x4
+ launchtemplate gElectrifyRingTemplate 0x2 0x0
+ delay 0x4
+ launchtemplate gElectrifyRingTemplate 0x2 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ waitforvisualfinish
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0 0x28 0x2
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
+ launchtemplate gZapCannonSparkSpriteTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2
+ delay 0xA
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x0 0xB 0x039B
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x3 0x039B
+ delay 0x4
+ clearmonbg ANIM_ATTACKER
+ delay 0x1
+ monbg ANIM_DEF_PARTNER
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET
+ launchtemplate gElectrifyYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0
+ delay 0x1
+ launchtemplate gElectrifyYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8
+ delay 0x1
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1
+ launchtemplate gElectrifyYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8
+ delay 0x1
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0
+ delay 0x2
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1
+ delay 0x2
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2
+ delay 0x2
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0
+ delay 0x2
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0xB 0x0 0x039B
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x3 0x0 0x039B
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_PLAY_ROUGH::
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_PINK_HEART
+ loadspritegfx ANIM_TAG_DUCK
+ monbg 0x3
+ setalpha 12, 8
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0xa
+ waitplaysewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER, 0x14
+ waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x1e
+ waitplaysewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER, 0x28
+ waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x32
+ waitplaysewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER, 0x3c
+ waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x46
+ waitplaysewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER, 0x50
+ waitplaysewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x5a
+ launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4
+ launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4
+ launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff00 0xffd6
+ launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x80 0xfff2
+ launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x1a0 0xffda
+ launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff80 0xffea
+ delay 0x0
+ call SubmissionHit
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1
+ delay 0x0
+ call SubmissionHit
+ playsewithpan SE_M_DIVE, SOUND_PAN_TARGET
+ launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff00 0xffd6
+ launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x80 0xfff2
+ launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0x1a0 0xffda
+ launchtemplate gPinkHeartSpriteTemplate 0x83 0x2 0xff80 0xffea
+ delay 0x0
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea
+ launchtemplate gDizzyPunchDuckSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1
+ delay 0x0
+ call SubmissionHit
+ waitforvisualfinish
+ delay 0xD
+ stopsound
+ clearmonbg 0x3
+ blendoff
+ waitforvisualfinish
+ end
+
+Move_FAIRY_WIND::
+ loadspritegfx ANIM_TAG_PINK_CLOUD
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6e7d
+ waitforvisualfinish
+ playsewithpan SE_M_GUST, SOUND_PAN_TARGET
+ launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0x14 0x1
+ delay 0x5
+ launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x5 0x16 0xffee 0x1
+ delay 0x5
+ launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0xfff6 0x16 0xf 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x12 0x1
+ delay 0x5
+ launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0xffec 0x1
+ delay 0x5
+ launchtemplate gFairyWindCloudTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0xc 0x1
+ delay 0x5
+ waitforvisualfinish
+ stopsound
+ playsewithpan SE_M_GUST2, SOUND_PAN_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6e7d
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_MOONBLAST:
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES
+ loadspritegfx ANIM_TAG_MOON
+ loadspritegfx ANIM_TAG_GREEN_SPARKLE
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ setalpha 0, 16
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, 0
+ waitforvisualfinish
+ createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 120, 56
+ createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1
+ panse SE_M_BARRIER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 0
+ delay 40
+ playsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER
+ createsprite gMistBallSpriteTemplate, ANIM_ATTACKER, 5, 0, 0, 0, 0, 30, 0
+ delay 30
+ loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 5, 4
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 10, 0
+ delay 4
+ createvisualtask AnimTask_MoonlightEndFade, 2
+ waitforvisualfinish
+ blendoff
+ end
+
+Move_BOOMBURST:
+ loadspritegfx ANIM_TAG_EXPLOSION
+ loadspritegfx ANIM_TAG_THIN_RING
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10
+ createvisualtask SoundTask_PlayCryWithEcho, 5
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0
+ createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1
+ createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATK_PARTNER, 1, 0, 6, 1
+ createvisualtask SoundTask_WaitForCry, 2, 1, 0, 6, 1
+ delay 20
+ jumpifdoublebattle Boomburst_Doubles
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1
+ delay 4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 24, -24, 1, 1
+ delay 4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -16, 16, 1, 1
+ delay 4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -24, -12, 1, 1
+ delay 4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1
+Boomburst_Last:
+ delay 4
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10
+ waitforvisualfinish
+ end
+Boomburst_Doubles:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 2, 1
+ delay 4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 24, -24, 1, 1
+ delay 4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -16, 16, 1, 1
+ delay 4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -24, -12, 1, 1
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, -24, -12, 2, 1
+ delay 4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1
+ goto Boomburst_Last
+
+Move_FAIRY_LOCK::
+ loadspritegfx ANIM_TAG_CHAIN_LINK @Chain Colour
+ loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Fairy Lock Chain
+ setalpha 8, 8
+ monbg ANIM_ATK_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6B1F
+ waitforvisualfinish
+ loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x7
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x33
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2
+ waitforvisualfinish
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x32
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x6
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x35
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6B1F
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+Move_KINGS_SHIELD::
+ loadspritegfx ANIM_TAG_PROTECT @protect
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0x0, 0xC, 0xC, 0x318C @Gray
+ goto Move_PROTECT
+
+Move_PLAY_NICE::
+ loadspritegfx ANIM_TAG_RED_HEART
+ loopsewithpan SE_M_SANDSTORM, SOUND_PAN_ATTACKER, 0xc, 0x3
+ launchtask AnimTask_SwayMon 0x5 0x5 0x0 0xc 0x1000 0x4 0x0
+ delay 0xF
+ launchtemplate gRedHeartProjectileSpriteTemplate 0x83 0x2 0x14 0xfff8
+ end
+
+Move_CONFIDE::
+ loadspritegfx ANIM_TAG_CONFIDE @Confide Bubble
+ launchtask AnimTask_Splash 0x2 0x2 ANIM_ATTACKER 0x3
+ launchtemplate gConfideBubbleTemplate 0xb 0x2 0x0 0x64
+ playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ end
+
+Move_DIAMOND_STORM::
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x1888
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ICE_CRYSTALS, 0, 0xD, 0xD, 0x7DDE @Pink
+ waitforvisualfinish
+ panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff6 0x0 0xfff6 0x48 0x1
+ launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x50 0x0 0x0 0x1
+ delay 0x3
+ launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff1 0x0 0xfff1 0x48 0x1
+ launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x50 0x0 0x0 0x1
+ delay 0x3
+ launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfffb 0x0 0xfffb 0x48 0x1
+ launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x50 0x0 0x0 0x1
+ delay 0x3
+ launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff6 0x0 0xfff6 0x48 0x1
+ launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x50 0x0 0x0 0x1
+ delay 0x3
+ launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xffec 0x0 0xffec 0x48 0x1
+ launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x50 0x0 0x0 0x1
+ delay 0x3
+ launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xfff1 0x0 0xfff1 0x48 0x1
+ launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x50 0x0 0x0 0x1
+ delay 0x3
+ launchtemplate gSwirlingSnowballSpriteTemplate 0x28 0x6 0x0 0xffe7 0x0 0xffe7 0x48 0x1
+ launchtemplate gDiamondStormBlizzardTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x50 0x0 0x0 0x1
+ delay 0x3
+ playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x78 0x46 0x5 0x46 0x1e
+ delay 0x1
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x37 0x6 0x3c 0x19
+ delay 0x1
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x3c 0x7 0x3c 0x1e
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x37 0xa 0x3c 0x1e
+ delay 0x3
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x64 0x32 0x4 0x32 0x1a
+ delay 0x1
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x69 0x19 0x8 0x3c 0x14
+ delay 0x1
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x28 0xa 0x30 0x1e
+ delay 0x3
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x78 0x1e 0x6 0x2d 0x19
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x73 0x23 0xa 0x3c 0x1e
+ delay 0x3
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x69 0x14 0x8 0x28 0x0
+ delay 0x3
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x14 0xff 0xf 0x20 0x0
+ launchtemplate gDiamondStormDiamondsTemplate 0x82 0x5 0x6e 0xa 0x8 0x20 0x14
+ waitforvisualfinish
+ @this is the buffet part
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x3
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x3 0x0 0xc 0x1
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x3 0x3 0x0 0xc 0x1
+ delay 0x4
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x3
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x3
+ playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xF 0x0 0x1888
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_STEAM_ERUPTION::
+ loadspritegfx ANIM_TAG_STEAM_ERUPTION @Steam Eruption Particle
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x043D
+ delay 0x20
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x9 0x1f
+ call SteamEruptionBreath
+ delay 0x2
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x15 0x1
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ call SteamEruptionBreath
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x9 0x0 0x1f
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x043D
+ waitforvisualfinish
+ end
+SteamEruptionBreath:
+ launchtemplate gSteamEruptionBreathTemplate 0x82 0x5 0x0 0x5 0x0 0x5 0x14
+ delay 0x1
+ return
+
+Move_HYPERSPACE_HOLE::
+ loadspritegfx ANIM_TAG_IMPACT @Hits
+ loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond
+ loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison Colour
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x7FFF
+ waitforvisualfinish
+ playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER
+ invisible ANIM_ATTACKER
+ delay 0x1
+ visible ANIM_ATTACKER
+ delay 0x1
+ invisible ANIM_ATTACKER
+ delay 0x1
+ visible ANIM_ATTACKER
+ delay 0x1
+ invisible ANIM_ATTACKER
+ waitsound
+ launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30
+ delay 0x17
+ launchtask AnimTask_IsTargetSameSide 0x2 0x0
+ launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0
+ delay 0x19
+ visible ANIM_ATTACKER
+ invisible ANIM_ATTACKER
+ delay 0x5
+ launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0
+ call HyperspaceHoleMovement
+ launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0xa 0x14 0x0
+ call HyperspaceHoleMovement
+ launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0xfffb 0xa 0x0
+ call HyperspaceHoleMovement
+ launchtemplate gHyperspaceHoleImpactTemplate 0x82, 0x3, 0x11 0xfff4 0x0
+ call HyperspaceHoleMovement
+ waitforvisualfinish
+ visible ANIM_ATTACKER
+ delay 0x1
+ invisible ANIM_ATTACKER
+ delay 0x1
+ visible ANIM_ATTACKER
+ delay 0x1
+ invisible ANIM_ATTACKER
+ delay 0x1
+ visible ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x7FFF
+ waitforvisualfinish
+ end
+HyperspaceHoleMovement:
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1
+ delay 0x4
+ return
+
+Move_WATER_SHURIKEN::
+ loadspritegfx ANIM_TAG_WATER_ORB @blue color
+ loadspritegfx ANIM_TAG_YELLOW_STAR @swift
+ loadspritegfx ANIM_TAG_BLUE_RING_2 @rings
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES @bubbles
+ loadspritegfx ANIM_TAG_IMPACT @hydro pump hit
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0x87, 0xffc0, SOUND_PAN_TARGET, 0x5, 0x5, 0x0, 0x5
+ launchtemplate gWaterShurikenStarTemplate 0x82, 0x3, 0x0 0x0 0x27
+ delay 0x8
+ launchtemplate gWaterShurikenRingTemplate 0x82, 0x4, 0x0 0x0 0x28 0xf
+ delay 0x5
+ launchtemplate gWaterShurikenRingTemplate 0x82, 0x4, 0x0 0x0 0x28 0xf
+ delay 0x5
+ launchtemplate gWaterShurikenRingTemplate 0x82, 0x4, 0x0 0x0 0x28 0xf
+ delay 0xC
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gWaterShurikenImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_MYSTICAL_FIRE::
+ call SetPsychicBackground
+ loadspritegfx ANIM_TAG_FIRE
+ setalpha 8, 8
+ playse 0xb1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0xa 0x1
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x0 0x2 0x0 0x8 0x7fff
+ waitforvisualfinish
+ waitsound
+ blendoff
+ launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0xffff 0x0
+ delay 0x1
+ launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x0 0x1
+ delay 0x1
+ launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0xffff 0xffff
+ delay 0x1
+ launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x2 0x1
+ delay 0x1
+ launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x1 0xffff
+ delay 0x1
+ launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0xffff 0x1
+ delay 0x1
+ launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x1 0xfffe
+ delay 0x1
+ launchtemplate gLargeFlameScatterSpriteTemplate 0x82 0x6 0x0 0x0 0x1e 0x1e 0x3 0x1
+ playse 0x8c
+ waitforvisualfinish
+ call UnsetPsychicBg
+ end
+
+Move_SPIKY_SHIELD::
+ loadspritegfx ANIM_TAG_PROTECT
+ loadspritegfx ANIM_TAG_GREEN_SPIKE
+ monbg ANIM_ATK_PARTNER
+ splitbgprio ANIM_ATTACKER
+ waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10
+ launchtemplate gProtectSpriteTemplate 0x2 0x3 0x18 0x0 0x5a
+ delay 0xF
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x0 0xFFE0 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x16 0xFFEA 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x1E 0x0 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x14 0x14 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x0 0x1C 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0xFFED 0x13 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0xFFE5 0x0 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0xFFEE 0xFFEE 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x0 0xFFE7 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x11 0xFFEF 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x17 0x0 0x10
+ delay 0x2
+ launchtemplate gNeedleArmSpikeSpriteTemplate 0x82 0x5 0x0 0x1 0x10 0x10 0x10
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ end
+
+Move_AROMATIC_MIST::
+ loadspritegfx ANIM_TAG_PINK_PETAL
+ playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x6E7D
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x64
+ delay 0x19
+ setpan 0x0
+ call SweetScentEffect
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x2 0x37 0x0
+ setpan SOUND_PAN_TARGET
+ createvisualtask AnimTask_BlendColorCycle, 2, (ANIM_PAL_DEF | ANIM_PAL_DEF_PARTNER), 1, 5, 5, 13, 0x56bf
+ call SweetScentEffect
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x6E7D
+ waitforvisualfinish
+ end
+
+Move_EERIE_IMPULSE::
+ loadspritegfx ANIM_TAG_THIN_RING @hypervoice circle
+ loadspritegfx ANIM_TAG_SPARK @electric particles
+ loadspritegfx ANIM_TAG_SPARK_2 @electric particles
+ loadspritegfx ANIM_TAG_BLUE_STAR @heal particles
+ loadspritegfx ANIM_TAG_SPARK_H @lighter yellow particle
+ loadspritegfx ANIM_TAG_GOLD_RING @psybeam ring
+ monbg ANIM_DEF_PARTNER
+ waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET 0x13
+ delay 0x4
+ launchtemplate gEerieImpulseRingTemplate 0x0 0x7 0x2d 0x0 0x0 0x0 0x0 0x0 0x1
+ delay 0xB
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 1
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 2
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 1
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 2
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 1
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0
+ launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 2
+ waitforvisualfinish
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0x0 0xfffb 0x1 0x0 0x20 0x10
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1
+ delay 0x7
+ launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0xfff1 0xa 0x1 0x0 0x20 0x10
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0
+ delay 0x7
+ launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0xfff1 0xfff1 0x1 0x0 0x20 0x10
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2
+ delay 0x7
+ launchtemplate gEerieImpulseImpactTemplate 0x2 0x6 0xa 0xfffb 0x1 0x0 0x20 0x10
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0
+ launchtemplate gElectricitySpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_VENOM_DRENCH::
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ monbg ANIM_DEF_PARTNER
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfffb 0x1 0xfffb 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x5 0x0 0x6 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x13 0x1 0xa 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe9 0x2 0xfff6 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ call AcidDrench
+ call AcidDrench
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+AcidDrench:
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1c 0x1 0xa 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfff6 0x1 0xfffb 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xa 0x0 0x6 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x18 0x1 0xa 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe0 0x2 0xfff6 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1e 0x2 0xa 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET
+ delay 0x2
+ return
+
+Move_POWDER::
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color
+ loadspritegfx ANIM_TAG_SPORE @powder
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 0x12, 0xa
+ call POWDER_SPORE
+ call POWDER_SPORE
+ call POWDER_SPORE
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+POWDER_SPORE:
+ launchtemplate gPowderBlackSporeTemplate 0x2 0x5 0x0 0xffec 0x55 0x50 0x0
+ delay 0xc
+ launchtemplate gPowderBlackSporeTemplate 0x2 0x5 0x0 0xfff6 0xaa 0x50 0x0
+ delay 0xc
+ launchtemplate gPowderBlackSporeTemplate 0x2 0x5 0x0 0xfff1 0x0 0x50 0x0
+ delay 0xc
+ return
+
+Move_GEOMANCY::
+ loadspritegfx ANIM_TAG_ZYGARDE_HEXES @Hex
+ loadspritegfx ANIM_TAG_GUARD_RING @safeguard
+ loadspritegfx ANIM_TAG_PAW_PRINT @yellow color
+ loadspritegfx ANIM_TAG_WHIP_HIT @green color
+ loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color
+ loadspritegfx ANIM_TAG_SMALL_EMBER @dragon claw buff / red color
+ monbg ANIM_ATK_PARTNER
+ setalpha 8, 8
+ choosetwoturnanim GeomancyChargeUp GeomancyUnleash
+GeomancyChargeUp:
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @endure buff effect
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_COSMIC_POWER, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x5f 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x1F
+ call GeomancyRingBuff
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x2C0
+ call GeomancyRingBuff
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x7C60
+ call GeomancyRingBuff
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x5 0x0 0x7C60
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_ATK_PARTNER
+ end
+GeomancyRingBuff:
+ launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x0
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x0
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyBlueCellVortexTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x0
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x2
+ launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x0
+ delay 0x2
+ launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x0
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyBlueCellVortexTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x0
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x0
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x2
+ launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x0
+ delay 0x2
+ launchtemplate gGeomancyBlueCellVortexTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x0
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRedCellVortexTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x0
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyGreenCellVortexTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x0
+ delay 0x2
+ return
+GeomancyUnleash:
+ loadspritegfx ANIM_TAG_FIRE_PLUME @dragon rage
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x24CF
+ playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ delay 0x1
+ launchtemplate gGeomancyRingTemplate 0x2 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x10 0x4D01
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x25 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0x5 0x1F
+ launchtemplate gGeomancyRedCellRaiseTemplate 0x2 0x5 0x14 0x20 0xffd0 0x32 0x1
+ launchtemplate gGeomancyGreenCellRaiseTemplate 0x2 0x5 0x0 0x20 0xffda 0x19 0x1
+ launchtemplate gGeomancyBlueCellRaiseTemplate 0x2 0x5 0x20 0x20 0xffe4 0x28 0x1
+ launchtemplate gGeomancyRedCellRaiseTemplate 0x2 0x5 0xffec 0x20 0xffd0 0x32 0x1
+ launchtemplate gGeomancyGreenCellRaiseTemplate 0x2 0x5 0x14 0x20 0xffe4 0x3c 0x1
+ launchtemplate gGeomancyBlueCellRaiseTemplate 0x2 0x5 0x0 0x20 0xffe4 0x1e 0x1
+ call GeomancyRageBuff
+ call GeomancyRageBuff
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x4D01
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x5 0x0 0x1F
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_ATK_PARTNER
+ end
+GeomancyRageBuff:
+ launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0x5 0x0
+ delay 0x1
+ launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0xfff6 0xfff1
+ delay 0x1
+ launchtemplate gGeomancyYellowRageTemplate 0x82, 0x3, 0x0 0x0 0x19
+ delay 0x1
+ launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0xf 0x5
+ delay 0x1
+ launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0xffe7 0x0
+ delay 0x1
+ launchtemplate gGeomancyYellowRageTemplate 0x82, 0x3, 0x0 0x1e 0x1e
+ delay 0x1
+ launchtemplate gGeomancyYellowRageTemplate 0x82, 0x3, 0x0 0xffe5 0x19
+ delay 0x1
+ launchtemplate gGeomancyYellowRageTemplate 0xc2 0x3 0x0 0x0 0x8
+ delay 0x1
+ return
+
+Move_MAGNETIC_FLUX::
+ loadspritegfx ANIM_TAG_THIN_RING @uproar
+ loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect
+ loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color
+ createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK), 2, 0, 9, 0x243B
+ createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK_PARTNER), 2, 0, 9, 0x243B
+ loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 0x12, 0x3
+ launchtask AnimTask_DefenseCurlDeformMon 0x5 0x0
+ call MagneticFluxSparks1
+ delay 0xA
+ call MagneticFluxSparks2
+ delay 0xA
+ call MagneticFluxSparks1
+ delay 0xA
+ launchtemplate gMagneticFluxUproarTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ call MagneticFluxSparks2
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK), 2, 9, 0, 0x243B
+ createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_DEF | ANIM_PAL_ATK_PARTNER), 2, 9, 0, 0x243B
+ waitforvisualfinish
+ end
+MagneticFluxSparks1:
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ return
+MagneticFluxSparks2:
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ return
+
+Move_HAPPY_HOUR::
+ loadspritegfx ANIM_TAG_COIN
+ monbg ANIM_ATTACKER
+ loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 0x8, 10
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xfffb 0x0 0xfffb 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x5 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x13 0x0 0xa 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffe9 0x0 0xfff6 0x1
+ delay 0x2
+ call CoinShower
+ call CoinShower
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ end
+CoinShower:
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x1c 0x0 0xa 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xfff6 0x0 0xfffb 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xa 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x18 0x0 0xa 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffe0 0x0 0xfff6 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x1
+ delay 0x2
+ launchtemplate gHappyHourCoinShowerTemplate 0x82, 0x4, 0x1e 0x0 0xa 0x1
+ delay 0x2
+ return
+
+Move_ELECTRIC_TERRAIN::
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ waitforvisualfinish
+ delay 30
+ createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(27, 27, 0), 12, 5, 1
+ delay 4
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER
+ createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 0
+ createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 42
+ createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 84
+ createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126
+ createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168
+ createsprite gElectricTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 4, RGB(28, 28, 0)
+ delay 52
+ setarg 7, 0xFFFF
+ playsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 0
+ createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 32
+ createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 64
+ createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 96
+ createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 128
+ createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 160
+ createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 192
+ createsprite gElectricTerrainFlyingBallTemplate, ANIM_TARGET, 2, 224
+ loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 0x16, 0x3
+ waitforvisualfinish
+ delay 2
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(28, 28, 0)
+ waitforvisualfinish
+ end
+
+Move_DAZZLING_GLEAM::
+ loadspritegfx ANIM_TAG_SPARKLE_2
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ launchtemplate gSimplePaletteBlendSpriteTemplate 0x2 0x5 0x1 0x2 0x0 0xd 0x7fff
+ playsewithpan SE_M_TWISTER, SOUND_PAN_ATTACKER
+ @call 0x081D56B3 -> middle of GrantingStarsEffect
+ createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 12, -5, 0, 0, 32, 60
+ delay 8
+ waitforvisualfinish
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x0 0x3 0x0 0x10 0x7fff
+ delay 0x4
+ playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtemplate gSimplePaletteBlendSpriteTemplate 0x2 0x5 0x1 0x0 0xd 0x0 0x7fff
+ waitforvisualfinish
+ clearmonbg 0x0
+ blendoff
+ end
+
+Move_CELEBRATE::
+ loadspritegfx ANIM_TAG_ITEM_BAG
+ launchtemplate gCelebrateBagTemplate 0x2 0x1 0x0
+ playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER
+ delay 0x12
+ playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER
+ delay 0x47
+ loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER 0x16 0x3
+ end
+
+Move_HOLD_HANDS::
+ loadspritegfx ANIM_TAG_TAG_HAND @hand
+ loadspritegfx ANIM_TAG_MAGENTA_HEART @charm
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0xc 0x6 0x6 0x3
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ delay 0x8
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ delay 0x8
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ delay 0x8
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ delay 0x8
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ delay 0x8
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ delay 0x8
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ delay 0x8
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ delay 0x8
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ delay 0x8
+ launchtemplate gHoldHandsHeartTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ waitforvisualfinish
+ launchtask AnimTask_HelpingHandAttackerMovement 0x5 0x0
+ launchtemplate gHelpingHandClapSpriteTemplate 0x28 0x1 0x0
+ launchtemplate gHelpingHandClapSpriteTemplate 0x28 0x1 0x1
+ delay 0x13
+ playsewithpan SE_M_ENCORE, 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x2 0x2 0x0 0x5 0x1
+ delay 0xe
+ playsewithpan SE_M_ENCORE, 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x2 0x2 0x0 0x5 0x1
+ delay 0x14
+ playsewithpan SE_M_ENCORE, 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x2 0x3 0x0 0xa 0x1
+ launchtask AnimTask_BlendMonInAndOut 0x2 0x5 0x2 0x3ff 0xc 0x1 0x1
+ end
+
+Move_BABY_DOLL_EYES::
+ loadspritegfx ANIM_TAG_LEER
+ loadspritegfx ANIM_TAG_PINK_CLOUD
+ loadspritegfx ANIM_TAG_OPENING_EYE @eye
+ setalpha 8, 8
+ monbg ANIM_DEF_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xA 0x7FFF
+ waitforvisualfinish
+ launchtemplate gOpeningEyeSpriteTemplate 0x5 0x4 0x0 0x0 0x1 0x0
+ delay 0x20
+ playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffb 0xfffb 0xa 0x0 0x1
+ waitforvisualfinish
+ delay 0xa
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x1 0x0 0x9 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x9 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0xA 0x0 0x7FFF
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_NUZZLE::
+ loadspritegfx ANIM_TAG_MAGENTA_HEART
+ loadspritegfx ANIM_TAG_ITEM_BAG
+ loadspritegfx ANIM_TAG_SPARK_2
+ loadspritegfx ANIM_TAG_IMPACT
+ launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0
+ launchtemplate gMagentaHeartSpriteTemplate 0x3 0x2 0x0 0x14
+ playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER
+ delay 0xf
+ launchtemplate gMagentaHeartSpriteTemplate 0x3 0x2 0xffec 0x14
+ playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER
+ delay 0xf
+ launchtemplate gMagentaHeartSpriteTemplate 0x3 0x2 0x14 0x14
+ playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x2
+ call ElectricityEffectNoSound
+ waitforvisualfinish
+ end
+
+Move_HOLD_BACK::
+ loadspritegfx ANIM_TAG_PAW_PRINT @ yellow/brown
+ loadspritegfx ANIM_TAG_IMPACT @ hit
+ loadspritegfx ANIM_TAG_PURPLE_SWIPE @ swipe
+ loadspritegfx ANIM_TAG_THIN_RING @ ring
+ loadspritegfx ANIM_TAG_DUCK @ dizzy punch
+ loadspritegfx ANIM_TAG_PAIN_SPLIT @ pain split
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
+ launchtemplate gHoldBackSwipeTemplate 0x82, 0x3, 0x0 0x0 0x1
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x3 0x0 0xa 0x1
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x2
+ launchtemplate gHoldBackRingTemplate 0x3 0x4 0x0 0x0 0x100 0x0
+ launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0
+ launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8
+ launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0
+ launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda
+ launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea
+ launchtemplate gHoldBackStarsTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_INFESTATION::
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_DEF, 0x2, 0x0, 0x9, 0x7320
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x4f 0x1
+ loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0x0, 0x4F
+ call InfestationVortex
+ call InfestationVortex
+ call InfestationVortex
+ call InfestationVortex
+ call InfestationVortex
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7320
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+InfestationVortex:
+ launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 0x1
+ delay 0x1
+ launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 0x1
+ delay 0x1
+ launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a 0x1
+ delay 0x1
+ launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 0x1
+ delay 0x1
+ launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e 0x1
+ delay 0x1
+ launchtemplate gInfestationBubbleTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce 0x1
+ delay 0x1
+ return
+
+Move_POWER_UP_PUNCH:
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_BREATH
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createvisualtask AnimTask_GrowAndShrink, 2,
+ playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 1
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_OBLIVION_WING::
+ loadspritegfx ANIM_TAG_HYDRO_PUMP
+ loadspritegfx ANIM_TAG_ROUND_SHADOW
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x289F @Pinkish Red
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0x0, 0xD, 0xD, 0x289F @Pinkish Red
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xE 0x0 @Black
+ waitforvisualfinish
+ createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5
+ call OblivionWingBeam
+ call OblivionWingBeam
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 40 0x1
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x4 0x0 0xc 0x289F @Pinkish Red
+ call OblivionWingBeam
+ call OblivionWingBeam
+ call OblivionWingBeam
+ call OblivionWingBeam
+ call OblivionWingBeam
+ call OblivionWingBeam
+ call OblivionWingBeam
+ call OblivionWingBeam
+ call OblivionWingBeam
+ call OblivionWingBeam
+ delay 15
+ visible ANIM_ATTACKER
+ call HealingEffect
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xE 0x0 0x0 @From black
+ waitforvisualfinish
+ end
+OblivionWingBeam:
+ launchtemplate gOblivionWingBeamTemplate 0x82, 0x6, 0, -90, 0, 20, 0x15 0x0
+ delay 0x2
+ launchtemplate gOblivionWingBeamTemplate 0x82, 0x6, 0, -90, 0, 20, 0x15 0x0
+ delay 0x2
+ return
+
+Move_THOUSAND_ARROWS::
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
+ loadspritegfx ANIM_TAG_ELECTRICITY @charge animation
+ loadspritegfx ANIM_TAG_LEAF @green color
+ loadspritegfx ANIM_TAG_RAZOR_LEAF @green color 2
+ loadspritegfx ANIM_TAG_ZYGARDE_HEXES @hexagon
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @arrow
+ loadspritegfx ANIM_TAG_NEEDLE @sting
+ monbg ANIM_ATTACKER
+ setblends 0x80e
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ launchtemplate gThousandArrowsGreenChargeTemplate 0x2 0x1 0x0
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0x18
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0x18
+ call ThousandArrowsHexes
+ call ThousandArrowsHexes
+ call ThousandArrowsHexes
+ call ThousandArrowsHexes
+ call ThousandArrowsHexes
+ call ThousandArrowsHexes
+ call ThousandArrowsHexes
+ launchtemplate gThousandArrowsGreenDischargeTemplate 0x2 0x3 0x0 0x10 0x10
+ delay 0x2
+ launchtemplate gThousandArrowsGreenDischargeTemplate 0x2 0x3 0x0 0xfff0 0xfff0
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 0x30
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x32
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x32
+ call ThousandArrowsDown
+ call ThousandArrowsDown
+ call ThousandArrowsDown
+ call ThousandArrowsDown
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0xffff
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+ThousandArrowsHexes:
+ launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0xfffc 0xfff0
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0x100D 0xfff0
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0x4 0xfff4
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenHexTemplate 0x82, 0x3, 0x0 0xfff0 0xfff0
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ return
+ThousandArrowsDown:
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xdc 0x3c
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x3c 0x64
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x8c 0x37
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xb4 0x32
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x14 0x5a
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x5a 0x5a
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xa0 0x3c
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x1e 0x5a
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0x78 0x3c
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gThousandArrowsGreenArrowTemplate 0x82, 0x3, 0x1 0xc8 0x28
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ return
+
+Move_THOUSAND_WAVES::
+ loadspritegfx ANIM_TAG_ZYGARDE_HEXES @Hex
+ loadspritegfx ANIM_TAG_FLYING_DIRT @heat wave animation
+ loadspritegfx ANIM_TAG_LEAF @green color
+ loadspritegfx ANIM_TAG_IMPACT @pound hits
+ monbg ANIM_ATK_PARTNER
+ setalpha 8, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x0
+ launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x2b
+ launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x55
+ launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0x80
+ launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0xaa
+ launchtemplate gThousandWavesGreenWheelTemplate 0x2 0x1 0xd5
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER @I placed this one here, because it ruins the teleport animation
+ loopsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x3, 0x15
+ call ThousandWavesRecover
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0xfff6 0xd
+ delay 0x3
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffdd 0x8 0xd
+ delay 0x3
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffdd 0xfff6 0xd
+ delay 0x3
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x8 0xd
+ delay 0x3
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xf 0xffd8 0xd
+ delay 0x3
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xfff6 0xffe0 0xd
+ delay 0x3
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x5 0x27 0xd
+ delay 0x3
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x19 0xffec 0xd
+ delay 0x3
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0xffec 0xd
+ delay 0x3
+ launchtask AnimTask_AttackerStretchAndDisappear 0x2 0x0
+ playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x5 0xffd8 0xd
+ waitforvisualfinish
+ panse SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ delay 0x4
+ launchtask AnimTask_MoveHeatWaveTargets 0x5 0x0
+ delay 0xc
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0xa 0x900 0x60 0x1
+ delay 0x2
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x5a 0x800 0x60 0x1
+ delay 0x2
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x32 0xa00 0x60 0x1
+ delay 0x2
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x14 0x900 0x60 0x1
+ delay 0x2
+ call ThousandWavesRotatingImpact
+ call ThousandWavesRotatingImpact
+ waitforvisualfinish
+ launchtask AnimTask_ExtremeSpeedMonReappear 0x2 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0xffff
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_DEF_PARTNER
+ end
+ThousandWavesRecover:
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x28 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0xffd8 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x0 0x28 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x0 0xffd8 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0xffec 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x14 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0xffec 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0x14 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffec 0x1e 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x14 0xffe2 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffec 0xffe2 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x14 0x1e 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0xffd8 0x0 0x10
+ delay 0x2
+ launchtemplate gThousandWavesGreenRecoverTemplate 0x2 0x3 0x28 0x0 0x10
+ delay 0x2
+ return
+ThousandWavesRotatingImpact:
+ launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x1c 0x180 0x32 0x8 0x32 0x1 @1
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x46 0x7c0 0x60 0x1
+ delay 0x2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0x0 0x0 0x3
+ launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x20 0xf0 0x28 0xb 0xffd2 0x1 @2
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x0 0xb00 0x60 0x1
+ delay 0x2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0x5 0xfff4 0x3
+ launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x21 0x1a0 0x28 0x4 0x2a 0x1 @3
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x3c 0xa00 0x60 0x1
+ delay 0x2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0xfffa 0x9 0x3
+ launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x1f 0x120 0x2d 0x6 0xffd6 0x1 @4
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0xa 0x900 0x60 0x1
+ delay 0x2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0xfffa 0xfff4 0x3
+ launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x1c 0x1c0 0x2d 0xb 0x2e 0x1 @5
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x5a 0x800 0x60 0x1
+ delay 0x2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0x5 0x9 0x3
+ launchtemplate gThousandWavesRotatingImpactTemplate 0x82 0x7 0x23 0x21 0x1d0 0x32 0xa 0xffce 0x1 @6
+ launchtemplate gThousandWavesGreenWaveTemplate 0x28 0x4 0x32 0xa00 0x60 0x1
+ delay 0x2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtemplate gThousandWavesPoundImpactTemplate 0x82, 0x4, 0x1 0xfffa 0x0 0x3
+ return
+
+Move_LANDS_WRATH::
+ loadspritegfx ANIM_TAG_WATER_ORB @whirl motion
+ loadspritegfx ANIM_TAG_SPARK_2 @yellow color
+ monbg ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xE 0x0
+ waitforvisualfinish
+ call LandsWrathVortex
+ call LandsWrathVortex
+ call LandsWrathVortex
+ call LandsWrathVortex
+ waitforvisualfinish
+ fadetobg BG_FISSURE
+ waitbgfadeout
+ playsewithpan SE_M_EARTHQUAKE, 0x0
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x32
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x32
+ launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff
+ waitbgfadein
+ waitforvisualfinish
+ call UnsetPsychicBg
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0
+ clearmonbg ANIM_ATTACKER
+ end
+LandsWrathVortex:
+ playsewithpan SE_M_SACRED_FIRE2 SOUND_PAN_TARGET
+ launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x0
+ delay 0x2
+ launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x0
+ delay 0x2
+ launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x0
+ delay 0x2
+ launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x0
+ delay 0x2
+ launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x0
+ delay 0x2
+ launchtemplate gLandsWrathVortexTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x0
+ delay 0x2
+ return
+
+Move_LIGHT_OF_RUIN::
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS @launchtask particles
+ loadspritegfx ANIM_TAG_ORBS @beam particles
+ loadspritegfx ANIM_TAG_ELECTRICITY @discharge
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink color
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 0xC, 0xC, 0x6DDE @Pink
+ waitforvisualfinish
+ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x14 0x0 0x2
+ panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x6B1F
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1
+ createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, 0x1f, 0x10, 0, 0
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ call LightOfRuinBeam
+ delay 0x20
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gLightOfRuinPinkDischargeTemplate 0x2 0x3 0x1 0x10 0x10
+ delay 0x2
+ launchtemplate gLightOfRuinPinkDischargeTemplate 0x2 0x3 0x1 0xfff0 0xfff0
+ delay 0x5
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x5 0xb 0x1
+ launchtemplate gLightOfRuinPinkExplosionTemplate 0x3 0x4 0x0 0x0 0x1 0x1
+ delay 0x10
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x7FFF
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x1 0x0 0x0 0x0
+ waitforvisualfinish
+ end
+LightOfRuinBeam:
+ launchtemplate gLightOfRuinPinkOrbsTemplate 0x82 0x0
+ launchtemplate gLightOfRuinPinkOrbsTemplate 0x82 0x0
+ delay 0x1
+ return
+
+Move_ORIGIN_PULSE::
+ loadspritegfx ANIM_TAG_THIN_RING @uproar
+ loadspritegfx ANIM_TAG_WATER_ORB @blue color
+ loadspritegfx ANIM_TAG_ORBS @circles
+ loadspritegfx ANIM_TAG_GREEN_SPIKE @inward
+ loadspritegfx ANIM_TAG_IMPACT @hits
+ setalpha 8, 8
+ fadetobg BG_WATER
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x400 0x0 0x1 0xffff
+ waitbgfadein
+ launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ delay 0x10
+ launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ delay 0x10
+ launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ playsewithpan SE_INTRO_BLAST, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x0
+ launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x2b
+ launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x55
+ launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0x80
+ launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0xaa
+ launchtemplate gOriginPulseOrbTemplate 0x2 0x1 0xd5
+ delay 0x35
+ launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ delay 0x10
+ launchtemplate gOriginPulseRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ waitforvisualfinish
+ delay 0x2F
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x0 0xFF90 0x10 @up
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x5F 0xFF9D 0x10 @upper right
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x73 0x0 0x10 @right
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x4F 0x37 0x10 @lower right
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x0 0x53 0x10 @down
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFB0 0x43 0x10 @lower left
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF60 0x0 0x10 @left
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFAA 0xFF94 0x10 @upper left
+ delay 0x5
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x2D 0xFF9D 0x10 @between up and upper right
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xDF 0xFF9D 0x10 @between right and upper right
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x9F 0x37 0x10 @between right and lower right
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0x1F 0x37 0x10 @between lower right and down
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFE0 0x43 0x10 @between lower left and down
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF60 0x43 0x10 @between left and lower left
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF2A 0xFFAA 0x10 @between left and upper left
+ launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFDA 0xFF94 0x10 @between up and upper left
+ waitforvisualfinish
+ monbg ANIM_DEF_PARTNER
+ launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffb0 0xfff0 0x1 0x1
+ stopsound
+ playsewithpan SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER
+ delay 0x5
+ launchtemplate gOriginPulseBlueImpactTemplate 0x83 0x2 0x1 0x1
+ delay 0x5
+ launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0x0 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gOriginPulseBlueImpactTemplate 0x83 0x2 0x1 0x1
+ delay 0x5
+ launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffc0 0x14 0x1 0x1
+ delay 0x5
+ launchtemplate gOriginPulseBlueImpactTemplate 0x83 0x2 0x1 0x1
+ delay 0x5
+ launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffe0 0x5 0x1 0x1
+ waitsound
+ call UnsetPsychicBg
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_PRECIPICE_BLADES::
+ loadspritegfx ANIM_TAG_LARGE_SPIKE
+ loadspritegfx ANIM_TAG_FIRE_PLUME
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LARGE_SPIKE, 0, 10, 10, 0x159F @Blood orange
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ fadetobg 0x15
+ waitbgfadeout
+ launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x5
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x5
+ playsewithpan SE_M_EARTHQUAKE, 0x0
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7, ANIM_TARGET, PrecipiceBladesOpponent
+PrecipiceBladesPlayer:
+ launchtemplate gPrecipiceBladesSpikeTemplate 3, 0x5, ANIM_ATTACKER, -45, 5, 145 0x0
+ delay 10
+ launchtemplate gPrecipiceBladesSpikeTemplate 3, 0x5, ANIM_ATTACKER, 10, 7, 135 0x0
+ delay 10
+ launchtemplate gPrecipiceBladesSpikeTemplate 4, 0x5, ANIM_ATTACKER, -30, 15, 125 0x0
+ delay 5
+ launchtemplate gPrecipiceBladesSpikeTemplate 5, 0x5, ANIM_ATTACKER, -10, 17, 120 0x0
+PrecipiceBladesContinue:
+ delay 0x10
+ launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, -15, 18, ANIM_TARGET
+ launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, -15, 18, ANIM_DEF_PARTNER
+ delay 0x20
+ launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, 15, 18, ANIM_TARGET
+ launchtemplate gPrecipiceBladesPlumeTemplate 0x82, 0x3, 15, 18, ANIM_DEF_PARTNER
+ delay 0x20
+ stopsound
+ playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET
+ launchtemplate gPrecipiceBladesLargeSpikeTemplate 0x82, 0x5, ANIM_TARGET, 0, -25, 40, 0x0
+ launchtemplate gPrecipiceBladesLargeSpikeTemplate 0x82, 0x5, ANIM_DEF_PARTNER, 0, -25, 40, 0x0
+ delay 0x6
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x82, 0x5, ANIM_TARGET, -20 0 0x6 0x1
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x82, 0x5, ANIM_DEF_PARTNER, -20 0 0x6 0x1
+ delay 0x22
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x82, 0x3 ANIM_TARGET 0x0 0x6
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x82, 0x3 ANIM_DEF_PARTNER 0x0 0x6
+ waitforvisualfinish
+ call UnsetPsychicBg
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+PrecipiceBladesOpponent:
+ launchtemplate gPrecipiceBladesSpikeTemplate 0x43, 0x5, ANIM_ATTACKER, 35, -5, 145 0x0
+ delay 10
+ launchtemplate gPrecipiceBladesSpikeTemplate 0x43, 0x5, ANIM_ATTACKER, -20, -7, 135 0x0
+ delay 10
+ launchtemplate gPrecipiceBladesSpikeTemplate 0x44, 0x5, ANIM_ATTACKER, 20, -15, 125 0x0
+ delay 5
+ launchtemplate gPrecipiceBladesSpikeTemplate 0x45, 0x5, ANIM_ATTACKER, 0, -17, 120 0x0
+ goto PrecipiceBladesContinue
+
+Move_DRAGON_ASCENT::
+ loadspritegfx ANIM_TAG_DRAGON_ASCENT
+ loadspritegfx ANIM_TAG_IMPACT
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 11, 11, RGB(16, 31, 16)
+ fadetobg BG_COSMIC
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg, 0x2 0x4, 0, 128, 0, -1
+ waitbgfadein
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ invisible ANIM_ATTACKER
+ launchtemplate gDragonAscentFlyUpTemplate 0x2 0x7 0x0 0x0 0x400 0x24 0x15 0x1 ANIM_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal, 0xa 0x5, (ANIM_PAL_ATK | ANIM_PAL_BG | ANIM_PAL_BG_4 | ANIM_PAL_BG_5), 4, 0, 14, RGB(21, 31, 27)
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtask AnimTask_StartSlidingBg, 0x5 0x4, -7304, -784, 1, -1
+ delay 2
+ launchtask AnimTask_BlendBattleAnimPal, 0xa 0x5, (ANIM_PAL_ATK | ANIM_PAL_BG | ANIM_PAL_BG_4 | ANIM_PAL_BG_5), 0, 14, 0, RGB(21, 31, 27)
+ waitforvisualfinish
+ delay 1
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ launchtemplate gDragonAscentDrakeTemplate, 2, 0x1 5
+ delay 1
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ launchtemplate gBasicHitSplatSpriteTemplate, 0x84, 0x4, -10, 0, 1, 0
+ launchtemplate gSlideMonToOffsetSpriteTemplate, 2, 0x5, 0x1, -32, 0, 0, 3
+ launchtask AnimTask_ShakeMonInPlace, 0x2 0x5, ANIM_TARGET, 6, 0, 12, 1
+ launchtask AnimTask_BlendBattleAnimPal, 0xa 0x5, (ANIM_PAL_ATK | ANIM_PAL_BG | ANIM_PAL_BG_4 | ANIM_PAL_BG_5), 2, 16, 0, RGB(26, 31, 0)
+ waitforvisualfinish
+ delay 3
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate, 2, 0x3, 1, 0, 7
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_DEF_PARTNER
+ call UnsetPsychicBg
+ end
+
+Move_HYPERSPACE_FURY::
+ loadspritegfx ANIM_TAG_HOOPA_HAND @Hoopa Hand
+ loadspritegfx ANIM_TAG_HOOPA_RING @Hoopa Ring
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER
+ launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x0
+ delay 0x5
+ launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x4
+ delay 0x5
+ launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x8
+ delay 0x5
+ launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0xc
+ delay 0x5
+ launchtemplate gHyperspaceFuryRingTemplate 0x3 0x4 0x0 0x0 0x38 0x10
+ delay 0x15
+ invisible ANIM_ATTACKER
+ waitforvisualfinish
+ fadetobg BG_HYPERSPACE_FURY
+ waitbgfadeout
+ launchtask AnimTask_SetPsychicBackground 0x5 0x0
+ waitbgfadein
+ loopsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET, 0x2, 0x10
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x20 0x1
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtask AnimTask_IsTargetSameSide 0x2 0x0
+ launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x2
+ launchtemplate gHyperspaceFuryHandTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10
+ call HyperspaceFuryRandomImpact
+ delay 0x7
+ launchtask SoundTask_PlayDoubleCry 0x2 0x2 ANIM_ATTACKER 0xff
+ visible ANIM_ATTACKER
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x0 0x3 0x20 0x1
+ playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ invisible ANIM_ATTACKER
+ call UnsetPsychicBg
+ waitforvisualfinish
+ visible ANIM_ATTACKER
+ delay 0x1
+ invisible ANIM_ATTACKER
+ delay 0x1
+ visible ANIM_ATTACKER
+ delay 0x1
+ invisible ANIM_ATTACKER
+ delay 0x1
+ visible ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x0 0x0
+ end
+HyperspaceFuryRandomImpact:
+ launchtemplate gHyperspaceFuryImpactTemplate 0x83 0x2 0x1 0x1
+ return
+
+@@@@@@@@@@@@@@@@@@@@@@@ GEN 7 @@@@@@@@@@@@@@@@@@@@@@@
+Move_SHORE_UP::
+ loadspritegfx ANIM_TAG_FLYING_DIRT @sandstorm
+ loadspritegfx ANIM_TAG_BLUE_STAR @heal2
+ playsewithpan SE_M_SANDSTORM, 0x0
+ launchtask AnimTask_LoadSandstormBackground 0x5 0x1 0x0
+ delay 0x10
+ launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0xa 0x900 0x60 0x0
+ delay 0xa
+ launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x5a 0x800 0x60 0x0
+ delay 0xa
+ launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x32 0xa00 0x60 0x0
+ delay 0xa
+ launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x14 0x900 0x60 0x0
+ delay 0xa
+ launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x46 0x7c0 0x60 0x0
+ delay 0xa
+ launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x0 0xb00 0x60 0x0
+ delay 0xa
+ launchtemplate gFlyingSandCrescentSpriteTemplate 0x28 0x4 0x3c 0xa00 0x60 0x0
+ call HealingEffect
+ waitforvisualfinish
+ end
+
+Move_FIRST_IMPRESSION::
+ loadspritegfx ANIM_TAG_SWEAT_BEAD @astonish
+ loadspritegfx ANIM_TAG_IMPACT @pound hit
+ loadspritegfx ANIM_TAG_RAZOR_LEAF @green
+ launchtemplate gSprayWaterDropletSpriteTemplate 0x85 0x2 0x0 0x1
+ playsewithpan SE_M_SKETCH, SOUND_PAN_TARGET
+ launchtemplate gSprayWaterDropletSpriteTemplate 0x85 0x2 0x1 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
+ launchtask AnimTask_StretchTargetUp 0x3 0x0
+ waitforvisualfinish
+ delay 0x19
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x6
+ waitforvisualfinish
+ monbg ANIM_TARGET @This is placed here on purpose (to not ruin astonishs animation)
+ delay 0x1
+ launchtemplate gFirstImpressionPoundTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0
+ loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET 0xA 0x2
+ delay 0x1
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe4 0x0 0x0 0x3
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1
+ waitforvisualfinish
+ delay 0xa
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x6
+ delay 0x5
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+Move_BANEFUL_BUNKER::
+ loadspritegfx ANIM_TAG_PROTECT @protect
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @poison
+ monbg ANIM_ATK_PARTNER
+ splitbgprio ANIM_ATTACKER
+ waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER 0x10
+ launchtemplate gProtectSpriteTemplate 0x2 0x3 0x18 0x0 0x5a
+ launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ delay 0x4
+ launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ delay 0x4
+ launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0x14 0xa 0x19 0x0
+ delay 0x4
+ launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0
+ delay 0x4
+ launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0
+ delay 0x4
+ launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0x19 0x14 0x19 0x0
+ delay 0x4
+ launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xffec 0x14 0x19 0x0
+ delay 0x4
+ launchtemplate gBanefulBunkerPoisonBubbleTemplate 0x2 0x4 0xc 0x0 0x19 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ end
+
+Move_SPIRIT_SHACKLE::
+ loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow
+ loadspritegfx ANIM_TAG_CHAIN_LINK @Chain
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
+ launchtemplate gSpiritShackleArrowTemplate 0x82 0x5 0x10 0x0 0x0 0x0 0xf
+ delay 0x8
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xa 0x1
+ waitforvisualfinish
+ loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x1c, 0x2
+ launchtemplate gSpiritShackleChainTemplate 0x82 0x2 0xfff0 0xfff0
+ delay 0x4
+ launchtemplate gSpiritShackleChainTemplate 0x82 0x2 0xfff0 0x0
+ delay 0x4
+ launchtemplate gSpiritShackleChainTemplate 0x82 0x2 0xfff0 0x10
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_DARKEST_LARIAT::
+ fadetobg BG_DARK
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x0 0x0 0xffff
+ waitbgfadein
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @purple color
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0xa
+ waitplaysewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 0x14
+ waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x1e
+ waitplaysewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 0x28
+ waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x32
+ waitplaysewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 0x3c
+ waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x46
+ waitplaysewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 0x50
+ waitplaysewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x5a
+ launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4
+ launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4
+ call DarkestLariatImpact
+ call DarkestLariatImpact
+ call DarkestLariatImpact
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ call UnsetPsychicBg
+ end
+DarkestLariatImpact:
+ launchtemplate gDarkestLariatImpactTemplate 0x3 0x4 0x0 0xfff4 0x1 0x1
+ delay 0x8
+ launchtemplate gDarkestLariatImpactTemplate 0x3 0x4 0xfff4 0x8 0x1 0x1
+ delay 0x8
+ launchtemplate gDarkestLariatImpactTemplate 0x3 0x4 0xc 0x0 0x1 0x1
+ delay 0x8
+ return
+
+Move_SPARKLING_ARIA::
+ loadspritegfx ANIM_TAG_WATER_ORB @blue color
+ loadspritegfx ANIM_TAG_BUBBLE @circles
+ loadspritegfx ANIM_TAG_HYDRO_PUMP @hydro pump
+ monbg ANIM_ATTACKER
+ setblends 0x80E
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xE 0x0
+ waitforvisualfinish
+ launchtemplate gSparklingAriaBlueChargeTemplate 0x2 0x1 0x0
+ call SparklingAriaCharge
+ call SparklingAriaCharge
+ call SparklingAriaCharge
+ waitforvisualfinish
+ delay 0x1E
+ playsewithpan SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER
+ call SparklingAriaRain
+ call SparklingAriaRain
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xE 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+SparklingAriaRain:
+ launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0xdc 0x3c
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gSparklingAriaBubbleRainTemplate 0x82, 0x3, 0x1 0x3c 0x64
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x8c 0x37
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0xb4 0x32
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x14 0x5a
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gSparklingAriaBubbleRainTemplate 0x82, 0x3, 0x1 0x5a 0x5a
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0xa0 0x3c
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x1e 0x5a
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gSparklingAriaRainTemplate 0x82, 0x3, 0x1 0x78 0x3c
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ launchtemplate gSparklingAriaBubbleRainTemplate 0x82, 0x3, 0x1 0xc8 0x28
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
+ delay 0x2
+ return
+SparklingAriaCharge:
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0x14 0xa 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0x19 0x14 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xffec 0x14 0x19 0x0
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER
+ launchtemplate gSparklingAriaBubblesTemplate 0x2 0x4 0xc 0x0 0x19 0x0
+ delay 0x4
+ return
+
+Move_ICE_HAMMER::
+ loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @punch
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice
+ loadspritegfx ANIM_TAG_ECLIPSING_ORB @gray color
+ loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET
+ launchtemplate gIceHammerPunchStompTemplate 0x83, 0x3 0x0 0xffe0 0xf
+ delay 0x13
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ launchtask AnimTask_SquishTarget 0x2 0x0
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfff4 0x68 0x0 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfff4 0x48 0x1 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfffa 0x38 0x1 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xfffa 0x58 0x0 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x0 0x38 0x0 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x0 0x58 0x1 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x6 0x48 0x0 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x6 0x68 0x1 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xc 0x48 0x0 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0xc 0x38 0x1 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x12 0x50 0x0 0x4b
+ launchtemplate gIceHammerSmokesTemplate 0x84, 0x5 0x0 0x12 0x48 0x1 0x4b
+ call IceCrystalEffectShort
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ blendoff
+ end
+
+Move_FLORAL_HEALING::
+ loadspritegfx ANIM_TAG_SPARKLE_2 @heal
+ loadspritegfx ANIM_TAG_FLOWER @flowers
+ loadspritegfx ANIM_TAG_LEAF @leaves
+ loadspritegfx ANIM_TAG_ORBS @circles
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink particles
+ monbg ANIM_ATTACKER
+ monbg ANIM_TARGET
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ call CIRCLES_LEAVES
+ call CIRCLES_LEAVES
+ waitforvisualfinish
+ panse SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ playsewithpan SE_M_TWISTER, 0x0
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x46 0x1 0x40
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3c 0x0 0x40
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x50 0x1 0x40
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3a 0x0 0x78
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5a 0x0 0x40
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x30 0x0 0x40 @2
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5f 0x1 0x50
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x4b 0x1 0x40
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x55 0x0 0x78
+ delay 0x2
+ loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 0x12, 0xa
+ call FloralHealingSpores
+ call FloralHealingSpores
+ call FloralHealingSpores
+ waitforvisualfinish
+ playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER
+ launchtemplate gGrantingStarsSpriteTemplate 0x10 0x7 0xfff1 0x0 0x1 0x0 0x20 0x3c 0x1
+ delay 0x8
+ launchtemplate gGrantingStarsSpriteTemplate 0x10 0x7 0xc 0xfffb 0x1 0x0 0x20 0x3c 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ clearmonbg ANIM_ATTACKER
+ end
+FloralHealingSpores:
+ launchtemplate gFloralHealingFlowerTemplate 0x2 0x5 0x0 0xffec 0x55 0x50 0x0
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x46 0x1 0x40
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3c 0x0 0x40
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x50 0x1 0x40
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3a 0x0 0x78
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5a 0x0 0x40
+ delay 0x3
+ launchtemplate gFloralHealingFlowerTemplate 0x2 0x5 0x0 0xfff6 0xaa 0x50 0x0
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x30 0x0 0x40
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5f 0x1 0x50
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x4b 0x1 0x40
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x55 0x0 0x78
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x46 0x1 0x40
+ delay 0x3
+ launchtemplate gFloralHealingFlowerTemplate 0x2 0x5 0x0 0xfff1 0x0 0x50 0x0
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3c 0x0 0x40
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x50 0x1 0x40
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x3a 0x0 0x78
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x64 0x0 0x78
+ delay 0x2
+ launchtemplate gFloralHealingWindLeavesTemplate 0x2 0x3 0x5a 0x0 0x40
+ delay 0x2
+ launchtemplate gSweetScentPetalSpriteTemplate 0x2 0x3 0x30 0x0 0x40
+ delay 0x3
+ return
+CIRCLES_LEAVES:
+ launchtemplate gFloralHealingOrbsTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x0
+ delay 0x2
+ launchtemplate gFloralHealingLeavesTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x0
+ delay 0x2
+ launchtemplate gFloralHealingOrbsTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x0
+ delay 0x2
+ launchtemplate gFloralHealingLeavesTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x0
+ delay 0x2
+ launchtemplate gFloralHealingOrbsTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x0
+ delay 0x2
+ launchtemplate gFloralHealingLeavesTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x0
+ delay 0x2
+ return
+
+Move_HIGH_HORSEPOWER::
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @horseshoe
+ monbg ANIM_TARGET
+ delay 0x2
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x10 0x0
+ setalpha 12, 8
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET
+ launchtemplate gHighHorsepowerHorseshoeTemplate 0x3 0x4 0x0 0x0 0x1 0x32
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x7 0x7fff
+ delay 0x32
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ call SetImpactBackground
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x16 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x0 0x7fff
+ launchtemplate gComplexPaletteBlendSpriteTemplate 0x2 0x7 0x1f 0x3 0x1 0x0 0x8 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ delay 0x2
+ restorebg
+ waitbgfadein
+ end
+
+Move_STRENGTH_SAP::
+ loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke
+ loadspritegfx ANIM_TAG_TEAL_ALERT @inward
+ loadspritegfx ANIM_TAG_RED_HEART @heart color
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink color
+ loadspritegfx ANIM_TAG_ORBS @absorb
+ loadspritegfx ANIM_TAG_SPARKLE_2 @stars
+ monbg ANIM_DEF_PARTNER
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0x8 0x3 0x1 0x0
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x46 0x0 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x28 0x28 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xa 0xffc4 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffce 0xffd8 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffd8 0x28 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x32 0xffce 0x6
+ delay 0x2
+ launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x1 0x0
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x32 0xffe2 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x3c 0xa 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x0 0x3c 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x0 0xffd8 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffc4 0x14 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffc4 0xffe2 0x6
+ delay 0x2
+ launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x1 0x0
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffce 0x32 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffc4 0x14 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0xffd8 0xffd8 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x14 0xffc4 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x32 0xffce 0x6
+ launchtemplate gStrengthSapRedInwardTemplate 0x4 0x3 0x23 0x28 0x6
+ delay 0x2
+ launchtemplate gStrengthSapRedSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x1 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x3 0x07FD
+ delay 0x5
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET
+ launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x0 0x5 0x8 0x1a
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET
+ launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xa 0xfffb 0xfff8 0x1a
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET
+ launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xfffb 0xf 0x10 0x21
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET
+ launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x0 0xfff1 0xfff0 0x24
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET
+ launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x0 0x5 0x8 0x1a
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET
+ launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xa 0xfffb 0xfff8 0x1a
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET
+ launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0xfff6 0x14 0x14 0x27
+ delay 0x4
+ playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET
+ launchtemplate gStrengthSapAbsorbTemplate 0x3 0x4 0x5 0xffee 0xffec 0x23
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x3 0x0 0x07FD
+ loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3
+ call GrantingStarsEffect
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_SOLAR_BLADE::
+ loadspritegfx ANIM_TAG_ORBS
+ choosetwoturnanim SolarBeamSetUp SolarBladeUnleash
+SolarBladeUnleash:
+ loadspritegfx ANIM_TAG_SWORD @swords dance
+ loadspritegfx ANIM_TAG_CLAW_SLASH @blade hit
+ loadspritegfx ANIM_TAG_SPARK_2 @yellow color
+ loadspritegfx ANIM_TAG_SUNLIGHT @sun rays
+ monbg ANIM_ATTACKER
+ setblends 0x30d
+ createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 1, 0, 6, 0x7fff
+ waitforvisualfinish
+ playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x10 0x6 0x1 0x4
+ launchtemplate gSwordsDanceBladeSpriteTemplate 0x2 0x2 0x0 0x0
+ call SolarBladeSunRays
+ call SolarBladeSunRays
+ call SolarBladeSunRays
+ call SolarBladeSunRays
+ launchtask AnimTask_FlashAnimTagWithColor 0x2 0x7 0x2715 0x2 0x2 0x7ff2 0x10 0x0 0x0
+ waitforvisualfinish
+ call SetSolarBeamBg
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ launchtemplate gSolarBladeImpactTemplate 0x82, 0x3, 0x0 0x0 0x1
+ delay 0x2
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0xC 0x1
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal 10, (ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS), 1, 6, 0, 0x7fff
+ waitforvisualfinish
+ call UnsetPsychicBg
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+SolarBladeSunRays:
+ launchtemplate gSunlightRaySpriteTemplate 0x28 0x0
+ delay 0x6
+ return
+
+Move_LEAFAGE::
+ loadspritegfx ANIM_TAG_RAZOR_LEAF @leaf
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ monbg ANIM_DEF_PARTNER
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
+ launchtemplate gRazorLeafCutterSpriteTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0x14 0x1
+ launchtemplate gRazorLeafCutterSpriteTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0xffec 0x1
+ launchtemplate gRazorLeafCutterSpriteTemplate 0x83 0x7 0x14 0xfff6 0x14 0x0 0x16 0x0 0x1
+ delay 0x14
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ launchtemplate gLeafageImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_SPOTLIGHT::
+ loadspritegfx ANIM_TAG_SPOTLIGHT
+ loadspritegfx ANIM_TAG_TAG_HAND
+ launchtask AnimTask_CreateSpotlight 0x2 0x0
+ launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0
+ waitforvisualfinish
+ playsewithpan SE_CONTEST_ICON_CHANGE, SOUND_PAN_ATTACKER
+ launchtemplate gSpotlightSpriteTemplate 0x82 0x2 0x0 0xfff8
+ delay 0x40
+ launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0xa 0x0 0x1
+ waitforvisualfinish
+ launchtask AnimTask_RemoveSpotlight 0x2 0x0
+ end
+
+Move_TOXIC_THREAD::
+ loadspritegfx ANIM_TAG_STRING
+ loadspritegfx ANIM_TAG_WEB_THREAD
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_STRING, 0, 0xA, 0xA, 0x6038 @Purple
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WEB_THREAD, 0x0, 0xA, 0xA, 0x6038 @Purple
+ monbg ANIM_DEF_PARTNER
+ delay 0x0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x9 0x0
+ waitforvisualfinish
+ loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 0x9, 0x6
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ call SpiderWebThread
+ waitforvisualfinish
+ playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
+ launchtemplate gToxicThreadString 0x82 0x2 0x0 0xa
+ delay 0x4
+ launchtemplate gToxicThreadString 0x82 0x2 0x0 0xfffe
+ delay 0x4
+ launchtemplate gToxicThreadString 0x82 0x2 0x0 0x16
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ delay 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x9 0x0 0x0
+ end
+
+Move_LASER_FOCUS::
+ loadspritegfx ANIM_TAG_EYE_SPARKLE @red
+ loadspritegfx ANIM_TAG_OPENING_EYE @eyes
+ loadspritegfx ANIM_TAG_LEER @leer
+ monbg ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ launchtemplate gLaserFocusRedEyesTemplate 0x5 0x4 0x0 0x0 0x0 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0x18 0xfff4
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ end
+
+Move_GEAR_UP::
+ loadspritegfx ANIM_TAG_GEAR
+ loadspritegfx ANIM_TAG_SPARK_2 @sparks
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x039B
+ launchtemplate gGearUpGearsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0xF
+ playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER
+ launchtemplate gGearUpGearsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0xF
+ playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER
+ launchtemplate gGearUpGearsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0xF
+ playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER
+ call GearUpSparks
+ call GearUpSparks
+ call GearUpSparks
+ playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x039B
+ waitforvisualfinish
+ end
+GearUpSparks:
+ playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0xF
+ playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0xF
+ return
+
+Move_THROAT_CHOP::
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @karate chop
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET
+ launchtemplate gKarateChopSpriteTemplate 0x2 0x8 0xfff0 0x0 0x0 0x0 0xa 0x1 0x3 0x0
+ waitforvisualfinish
+ launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101
+ launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ delay 0x3
+ launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ delay 0x3
+ launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ delay 0x3
+ launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ delay 0x3
+ launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ delay 0x3
+ launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ delay 0x3
+ launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ delay 0x3
+ launchtemplate gThroatChopRedImpactTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1
+ waitforvisualfinish
+ launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_POLLEN_PUFF::
+ launchtask AnimTask_IsTargetSameSide 0x5 0x0
+ jumpargeq 0x0, 0x1, PollenPuffAlly
+PollenPuffOpponent:
+ loadspritegfx ANIM_TAG_SPARKLE_2 @stars
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink color
+ loadspritegfx ANIM_TAG_BLACK_BALL_2 @circle launch
+ loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color
+ loadspritegfx ANIM_TAG_SPORE @ball
+ loadspritegfx ANIM_TAG_FLAT_ROCK @brown color
+ loadspritegfx ANIM_TAG_ORBS @hit
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x0
+ waitforvisualfinish
+ launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0
+ launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ delay 0xD
+ launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ delay 0xD
+ launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ delay 0xD
+ launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ clearmonbg ANIM_ATTACKER
+ waitforvisualfinish
+ stopsound
+ monbg ANIM_TARGET
+ launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xA0 0x28 0x0
+ launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x110 0x28 0x0
+ launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xB0 0x28 0x0
+ launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x100 0x28 0x0
+ launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x90 0x28 0x0
+ launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x110 0x28 0x0
+ launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xB0 0x28 0x0
+ launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x100 0x28 0x0
+ delay 0x1
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gPollenPuffSporeTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0
+ waitforvisualfinish
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x0 0xFFE0 0x10 @up
+ launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0xFFEE 0xFFEE 0x10 @upperleft
+ launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x0 0x1C 0x10 @down
+ delay 0x4
+ launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0xFFE5 0x0 0x10 @left
+ launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x14 0x14 0x10 @lowerright
+ launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0xFFED 0x13 0x10 @lowerleft
+ delay 0x4
+ launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x1E 0x0 0x10 @right
+ launchtemplate gPollenPuffImpactTemplates 0x82 0x5 0x1 0x1 0x16 0xFFEA 0x10 @upperright
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+PollenPuffAlly:
+ loadspritegfx ANIM_TAG_SPARKLE_2 @stars
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink color
+ loadspritegfx ANIM_TAG_BLACK_BALL_2 @circle launch
+ loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color
+ loadspritegfx ANIM_TAG_SPORE @ball
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x8 0x0
+ waitforvisualfinish
+ launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0
+ launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ delay 0xD
+ launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ delay 0xD
+ launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ delay 0xD
+ launchtemplate gPollenPuffPinkStarTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER
+ clearmonbg ANIM_ATTACKER
+ waitforvisualfinish
+ stopsound
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER
+ monbg ANIM_TARGET
+ launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0
+ launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0
+ launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x90 0x28 0x0
+ launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0
+ launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0
+ launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0
+ launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x90 0x28 0x0
+ launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0
+ delay 0x1
+ launchtemplate gPollenPuffSporeTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_SPARKLE_2 @stars
+ loadspritegfx ANIM_TAG_BLUE_STAR @heal
+ playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER
+ launchtemplate gPollenPuffHealTemplate 0x2 0x4 0x0 0xfffb 0x1 0x0
+ delay 0x7
+ launchtemplate gPollenPuffHealTemplate 0x2 0x4 0xfff1 0xa 0x1 0x0
+ delay 0x7
+ launchtemplate gPollenPuffHealTemplate 0x2 0x4 0xfff1 0xfff1 0x1 0x0
+ delay 0x7
+ launchtemplate gPollenPuffHealTemplate 0x2 0x4 0xa 0xfffb 0x1 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x8 0x1 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_ANCHOR_SHOT::
+ loadspritegfx ANIM_TAG_CHAIN_LINK
+ loadspritegfx ANIM_TAG_ANCHOR
+ playsewithpan SE_FALL SOUND_PAN_TARGET
+ monbg ANIM_TARGET
+ launchtemplate gAnchorShotAngledAnchorTemplate 0x2 0x3 0x0 0x0 0x35
+ waitforvisualfinish
+ launchtemplate gAnchorShotAnchorTemplate 0x3 0x3 0x0 0xffe0 0xf
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1
+ delay 0x25
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1
+ waitforvisualfinish
+ loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER 0x1c 0x2
+ launchtemplate gAnchorShotChainTemplate 0x82 0x2 0xfff0 0xfff0
+ delay 0x4
+ launchtemplate gAnchorShotChainTemplate 0x82 0x2 0xfff0 0x0
+ delay 0x4
+ launchtemplate gAnchorShotChainTemplate 0x82 0x2 0xfff0 0x10
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+Move_PSYCHIC_TERRAIN::
+ loadspritegfx ANIM_TAG_ORBS @Recover Ball
+ loadspritegfx ANIM_TAG_GREEN_SPARKLE @Green Star
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @Purple Colour
+ playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ waitforvisualfinish
+ delay 30
+ createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(27, 0, 13), 12, 5, 1
+ delay 4
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER
+ createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 0
+ createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 42
+ createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 84
+ createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 126
+ createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 168
+ createsprite gPsychicTerrainOrbsTemplate, ANIM_ATTACKER, 2, 26, 210
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 0, 4, RGB(27, 0, 13)
+ delay 52
+ setarg 7, 0xFFFF
+ playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
+ createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 0
+ createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 32
+ createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 64
+ createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 96
+ createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 128
+ createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 160
+ createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 192
+ createsprite gPsychicTerrainStarTemplate, ANIM_TARGET, 2, 224
+ loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x3
+ waitforvisualfinish
+ delay 4
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_BG, 3, 4, 0, RGB(27, 0, 13)
+ waitforvisualfinish
+ end
+
+Move_LUNGE::
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_TEAL_ALERT @hit particles
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @psycho boost charge
+ loadspritegfx ANIM_TAG_LEAF @green
+ loadspritegfx ANIM_TAG_RAZOR_LEAF @green
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES @ball
+ monbg ANIM_ATK_PARTNER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x3 0x0 0xf0 0x0
+ loopsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0xe, 0xa
+ launchtemplate gLungeGreenChargeTemplate 0x2 0x0
+ delay 0x6e
+ delay 0x3e
+ playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
+ delay 0x15
+ clearmonbg ANIM_ATK_PARTNER
+ invisible ANIM_ATTACKER
+ waitforvisualfinish
+ playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER
+ launchtemplate gLungeGreenBubbleTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0
+ delay 0xF
+ monbg ANIM_DEF_PARTNER
+ delay 0x1
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x46 0x0 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x28 0x28 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xa 0xffc4 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffce 0xffd8 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffd8 0x28 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x32 0xffce 0x6
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x5 0xb 0x1
+ delay 0x2
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x32 0xffe2 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x3c 0xa 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x0 0x3c 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x0 0xffd8 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffc4 0x14 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffc4 0xffe2 0x6
+ delay 0x2
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffce 0x32 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffc4 0x14 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0xffd8 0xffd8 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x14 0xffc4 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x32 0xffce 0x6
+ launchtemplate gTealAlertSpriteTemplate 0x4 0x3 0x23 0x28 0x6
+ waitforvisualfinish
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtemplate gLungeGreenImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2
+ waitforvisualfinish
+ visible ANIM_ATTACKER
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_FIRE_LASH::
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ monbg ANIM_DEF_PARTNER
+ splitbgprio_foes ANIM_TARGET
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x18 0x0 0x0 0x6
+ delay 0x4
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x5 0x0 0x8 0x1
+ launchtask AnimTask_BlendMonInAndOut 0x3 0x5 0x1 0x1f 0xc 0x1 0x1
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
+ loadspritegfx ANIM_TAG_SLASH
+ launchtemplate gSlashSliceSpriteTemplate 0x82, 0x3, 0x1 0xfff8 0x0
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gSlashSliceSpriteTemplate 0x82, 0x3, 0x1 0x8 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x12 0x1
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ delay 0x7
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x9
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_POWER_TRIP::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color
+ loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ monbg ANIM_DEF_PARTNER
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call PowerTripBuffUp
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call PowerTripBuffUp
+ delay 0x8
+ call PowerTripBuffUp
+ waitforvisualfinish
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtemplate gPowerTripImpactTemplate 0x2 0x4 0xFFF5 0xA 0x1 0x2
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x5
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtemplate gPowerTripImpactTemplate 0x2 0x4 0x0 0xFFF5 0x1 0x2
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x5
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtemplate gPowerTripImpactTemplate 0x2 0x4 0xA 0x0 0x1 0x2
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+PowerTripBuffUp:
+ launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gPowerTripFocusEnergyTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+
+Move_BURN_UP::
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color
+ loadspritegfx ANIM_TAG_PINK_CLOUD @yawn
+ loadspritegfx ANIM_TAG_SMALL_EMBER @fire
+ monbg ANIM_DEF_PARTNER
+ setblends 0x120C
+ fadetobg BG_FIRE
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xA00 0x0 0x1 0xffff
+ waitbgfadein
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x5 0x1c
+ waitforvisualfinish
+ launchtask AnimTask_AllocBackupPalBuffer 0x5 0x0
+ waitforvisualfinish
+ launchtask AnimTask_CopyPalUnfadedToBackup 0x5 0x2 0x0 0x1
+ delay 0x1
+ launchtask AnimTask_CopyPalFadedToUnfaded 0x5 0x1 0x0
+ delay 0x1
+ loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2
+ launchtask AnimTask_CopyPalUnfadedToBackup 0x5 0x2 0x1 0x0
+ delay 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x0 0xd 0x1c
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x2 0x0 0xf 0x1
+ waitforvisualfinish
+ delay 0x1E
+ launchtemplate gUproarRingSpriteTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ waitforvisualfinish
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtemplate gBurnUpRedYawnTemplate 0x80, 0x6 0x0 0x0 0x0 0x0 0x1e 0x0
+ delay 0x1
+ launchtask AnimTask_CopyPalFadedToUnfaded 0x5 0x1 0x1
+ delay 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x0 0xd 0x4a52
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x3 0x0 0xf 0x1
+ delay 0xF
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x0 0xC 0x1C
+ delay 0x1
+ launchtask AnimTask_CopyPalUnfadedFromBackup 0x5 0x2 0x0 0x1
+ delay 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x5 0x0 0x1c
+ delay 0x1
+ launchtask AnimTask_CopyPalUnfadedFromBackup 0x5 0x2 0x1 0x0
+ delay 0x1
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x2 0x0 0xf 0x1
+ call FireSpreadEffect
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xd 0x0 0x4a52
+ delay 0x1
+ launchtask AnimTask_FreeBackupPalBuffer 0x5 0x0
+ delay 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0xC 0x0 0x1C
+ waitforvisualfinish
+ call UnsetPsychicBg
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_SPEED_SWAP::
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_ICE_CHUNK @blue green
+ loadspritegfx ANIM_TAG_ORBS @circle
+ monbg ANIM_TARGET
+ panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0
+ delay 0xf
+ launchtemplate gSpeedSwapCircleTemplate 0x82 0x2 0xfff4 0x18
+ delay 0x5
+ launchtemplate gSpeedSwapRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x0 0xFFE0 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x16 0xFFEA 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x1E 0x0 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0x0 0x1C 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0xFFED 0x13 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0xFFE5 0x0 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x1 0x0 0xFFEE 0xFFEE 0x10
+ waitforvisualfinish
+ panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0
+ launchtemplate gSpeedSwapOrbMissileTemplate 0x80 0x6 0x0 0x0 0x0 0x0 0x1e 0x0
+ launchtemplate gSpeedSwapRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x0 0xFFE0 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x16 0xFFEA 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x1E 0x0 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x14 0x14 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0x0 0x1C 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0xFFED 0x13 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0xFFE5 0x0 0x10
+ launchtemplate gSpeedSwapOrbTemplate 0x82 0x5 0x0 0x0 0xFFEE 0xFFEE 0x10
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+Move_SMART_STRIKE::
+ loadspritegfx ANIM_TAG_POWER_GEM @gem
+ loadspritegfx ANIM_TAG_AIR_WAVE @sonicboom
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball
+ loadspritegfx ANIM_TAG_LOCK_ON
+ launchtemplate gLockOnTargetSpriteTemplate 0x28 0x0
+ launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x1
+ launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x2
+ launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x3
+ launchtemplate gLockOnMoveTargetSpriteTemplate 0x28 0x1 0x4
+ delay 0x78
+ setarg 0x7 0xffff
+ waitforvisualfinish
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ call SonicBoomProjectile
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0xa 0x1
+ loadspritegfx ANIM_TAG_FLASH_CANNON_BALL
+ launchtemplate gSmartStrikeImpactTemplate 0x84 0x5 0x0 0x0 0x8 0x1 0x0
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x0 0xffe8 0xa
+ launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x11 0xffef 0xa
+ launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x18 0x0 0xa
+ launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x11 0x11 0xa
+ launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0x0 0x18 0xa
+ launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0xffef 0x11 0xa
+ launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0xffe8 0x0 0xa
+ launchtemplate gSmartStrikeGemTemplate 0x82 0x5 0x1 0x1 0xffef 0xffef 0xa
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ waitforvisualfinish
+ end
+
+Move_PURIFY::
+ loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @Ball
+ loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke
+ loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour
+ monbg ANIM_TARGET
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ launchtemplate gPurifyWhiteBallTemplate 0x2 0x6 0x14 0xfff8 0xfff8 0xfff8 0x14 0xffe0
+ delay 0x13
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfff4 0x68 0x0 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfff4 0x48 0x1 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfffa 0x38 0x1 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xfffa 0x58 0x0 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x0 0x38 0x0 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x0 0x58 0x1 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x6 0x48 0x0 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x6 0x68 0x1 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xc 0x48 0x0 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0xc 0x38 0x1 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x12 0x50 0x0 0x4b
+ launchtemplate gPurifySmokeTemplate 0x84 0x5 0x0 0x12 0x48 0x1 0x4b
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_REVELATION_DANCE::
+ loadspritegfx ANIM_TAG_ORBS @circles
+ loadspritegfx ANIM_TAG_FLOWER @particles
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @another yellow
+ loadspritegfx ANIM_TAG_AIR_WAVE @sonicboom
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ monbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0
+ launchtemplate gRevelationDanceYellowOrbsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x10 0xffe8 0x8 0x64
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xfff0 0xffe8 0x8 0x64
+ delay 0xf
+ launchtemplate gRevelationDanceYellowOrbsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x20 0xffe8 0x8 0x64
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xffe0 0xffe8 0x8 0x64
+ delay 0xf
+ launchtemplate gRevelationDanceYellowOrbsTemplate 0x2 0x4 0x0 0xffe8 0x8 0x8c
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x18 0xffe8 0x8 0x64
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xffe8 0xffe8 0x8 0x64
+ delay 0x1e
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x10 0xffe8 0x0 0x64
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xfff0 0xffe8 0x0 0x64
+ delay 0x1e
+ launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0x14 0xfff0 0xe 0x50
+ launchtemplate gRevelationDanceYellowFlowerTemplate 0x2 0x4 0xffec 0xfff2 0x10 0x50
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_FLOWER @particles
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_SMALL_EMBER @light yellow
+ playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
+ launchtemplate gRevelationDanceYellowAirWaveTemplate 0x82 0x5 0x10 0x0 0x0 0x0 0xf
+ waitforvisualfinish
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtemplate gRevelationDanceYellowImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x2
+ launchtemplate gRevelationDanceYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8
+ launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0x0 0xb0 0x28
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_ATTACKER
+ launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xff40 0xf0 0x28
+ launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0x0 0xff60 0x28
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_ATTACKER
+ launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xff40 0xff90 0x28
+ launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xa0 0x30 0x28
+ launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0xff20 0xffe0 0x28
+ launchtemplate gRevelationDanceYellowDispersalTemplate 0x81 0x5 0x0 0xa 0x70 0xff80 0x28
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xF 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+Move_CORE_ENFORCER::
+ loadspritegfx ANIM_TAG_SPARK_2 @yellow color
+ loadspritegfx ANIM_TAG_LEAF @green color
+ loadspritegfx ANIM_TAG_RAZOR_LEAF @another green color
+ loadspritegfx ANIM_TAG_WATER_ORB @blue color
+ loadspritegfx ANIM_TAG_THIN_RING @rings
+ loadspritegfx ANIM_TAG_SHOCK_3 @circle from thunderbolt
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ fadetobg BG_COSMIC
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xFC00 0x1 0xffff
+ waitbgfadein
+ loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER 0xd 0xA
+ launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ launchtemplate gCoreEnforcerBlueRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ waitforvisualfinish
+ launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ waitforvisualfinish
+ launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ launchtemplate gCoreEnforcerYellowRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ waitforvisualfinish
+ launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ waitforvisualfinish
+ launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ launchtemplate gCoreEnforcerGreenRingTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ waitforvisualfinish
+ launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gCoreEnforcerGreenChargeTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gCoreEnforcerCircleChargeTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_SPARK_2 @yellow color
+ unloadspritegfx ANIM_TAG_LEAF @green color
+ unloadspritegfx ANIM_TAG_RAZOR_LEAF @another green color
+ unloadspritegfx ANIM_TAG_WATER_ORB @blue color
+ unloadspritegfx ANIM_TAG_THIN_RING @rings
+ unloadspritegfx ANIM_TAG_SHOCK_3 @circle from thunderbolt
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_ORBS @charging particles
+ loadspritegfx ANIM_TAG_SNORE_Z
+ loadspritegfx ANIM_TAG_EXPLOSION
+ clearmonbg ANIM_ATTACKER
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 0xD, 0xD, 0x079F @Yellow
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 0xA, 0xA, 0x7501 @Royal Blue
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SNORE_Z, 0, 0xA, 0xA, 0x0688 @Green
+ delay 0x10
+ monbg ANIM_TARGET
+ launchtask AnimTask_CreateSmallSolarBeamOrbs 0x5 0x0
+ panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_TARGET 0x2 0x0 0x41 0x1
+ launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_DEF_PARTNER 0x2 0x0 0x41 0x1
+ launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x0
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff5 0xffe2 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfffa 0xffe2 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xffff 0xffe2 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x5 0xffe2 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xA 0xffe2 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xF 0xffe2 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x14 0xffe2 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xF 0xffe7 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x2
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xC 0xffea 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x9 0xffed 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x6 0xfff0 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x3 0xfff3 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x3
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x0 0xfff6 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfffc 0xfff9 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff9 0xfffc 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff6 0xffff 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x4
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff3 0x3 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfff8 0x3 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xfffd 0x3 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x2 0x3 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x5
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x7 0x3 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0xC 0x3 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x11 0x3 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerImpactTemplate 0x83 0x4 0x16 0x3 0x1 0x3
+ delay 0x1
+ launchtemplate gCoreEnforcerBeamTemplate 0x83 0x4 0xf 0x0 0x14 0x6
+ delay 0x7
+ launchtemplate gCoreEnforcerSnoreTemplate 0x2 0x2 0x0 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0x1e 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_DEF_PARTNER 0x2 0x0 0x1e 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_ATK_PARTNER 0x2 0x0 0x1e 0x1
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gCoreEnforcerExplosionTemplate 0x3 0x4 0xffe8 0x18 ANIM_TARGET 0x1
+ waitforvisualfinish
+ call UnsetPsychicBg
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_TROP_KICK::
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @kick
+ loadspritegfx ANIM_TAG_LEAF @leaves
+ loadspritegfx ANIM_TAG_FLOWER @flowers
+ monbg ANIM_DEF_PARTNER
+ launchtemplate gTropKickGreenFootTemplate 0x2 0x8 0xfff0 0x8 0x0 0x0 0xa 0x1 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 0xA
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, 192, 176, 40
+ launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, -192, 240, 40
+ launchtemplate gTropKickFlowerTemplate, ANIM_TARGET, 5, 0, 10, 192, -160, 40
+ launchtemplate gTropKickFlowerTemplate, ANIM_TARGET, 5, 0, 10, -192, -112, 40
+ launchtemplate gTropKickFlowerTemplate, ANIM_TARGET, 5, 0, 10, 160, 48, 40
+ launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, -224, -32, 40
+ launchtemplate gTropKickLeavesTemplate, ANIM_TARGET, 5, 0, 10, 112, -128, 40
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_INSTRUCT::
+ loadspritegfx ANIM_TAG_FINGER @finger
+ loadspritegfx ANIM_TAG_SPOTLIGHT @spotlight
+ setalpha 12, 8
+ launchtemplate gMetronomeFingerSpriteTemplate 0xc 0x1 0x0
+ delay 0x18
+ loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 0x16, 0x3
+ waitforvisualfinish
+ launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0
+ waitforvisualfinish
+ launchtemplate gSpotlightSpriteTemplate 0x82 0x2 0x0 0xfff8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x8 0x7DB9
+ delay 0x4
+ monbg ANIM_TARGET
+ launchtask AnimTask_BlendMonInAndOut 0x5 0x5 0x0 0x37b 0xc 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x29 0x1
+ playsewithpan SE_M_BIND, SOUND_PAN_TARGET
+ delay 0x1A
+ launchtask AnimTask_BlendMonInAndOut 0x5 0x5 0x0 0x37b 0xc 0x1 0x1
+ playsewithpan SE_M_BIND, SOUND_PAN_TARGET
+ delay 0x1A
+ launchtask AnimTask_BlendMonInAndOut 0x5 0x5 0x0 0x37b 0xc 0x1 0x1
+ playsewithpan SE_M_BIND, SOUND_PAN_TARGET
+ delay 0x1D
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x8 0x0 0x7DB9
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+General_BeakBlastSetUp:
+ loadspritegfx ANIM_TAG_SMALL_EMBER @Fire
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ delay 0x3
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x1f
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0
+ waitforvisualfinish
+ end
+Move_BEAK_BLAST::
+ loadspritegfx ANIM_TAG_IMPACT
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x0 0x9 0x1F
+ waitforvisualfinish
+ launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x0
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 0x2
+ launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x1
+ delay 0x2
+ loopsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET 0x4 0x8
+ launchtask AnimTask_DrillPeckHitSplats 0x5 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x12 0x1
+ waitforvisualfinish
+ launchtemplate gBowMonSpriteTemplate 0x2 0x1 0x2
+ waitforvisualfinish
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x6
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_ATK 0x2 0x9 0x0 0x1F
+ waitforvisualfinish
+ end
+
+Move_CLANGING_SCALES::
+ loadspritegfx ANIM_TAG_METAL_SOUND_WAVES @metal sound
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @purple color
+ monbg ANIM_DEF_PARTNER
+ splitbgprio_foes ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x2002
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_METAL_SOUND_WAVES, 0, 10, 10, 0x642D
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x2 0x0 0x8 0x1
+ call ClangingScalesMetalSound
+ call ClangingScalesMetalSound
+ call ClangingScalesMetalSound
+ call ClangingScalesMetalSound
+ delay 0x5
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x0 0x3 0xf 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ delay 0x0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x2002
+ waitforvisualfinish
+ end
+ClangingScalesMetalSound:
+ panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ launchtemplate gClangingScalesPurpleMetalSoundTemplate 0x82 0x7 0x10 0x0 0x0 0x0 0x1e 0x0 ANIM_TARGET
+ launchtemplate gClangingScalesPurpleMetalSoundTemplate 0x82 0x7 0x10 0x0 0x0 0x0 0x1e 0x0 ANIM_DEF_PARTNER
+ delay 0x2
+ return
+
+Move_DRAGON_HAMMER::
+ loadspritegfx ANIM_TAG_ROUND_SHADOW
+ loadspritegfx ANIM_TAG_GRAY_SMOKE
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, 0x7D7F @Pinkish purple
+ fadetobg BG_COSMIC
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0, -500, 0x0 0xffff
+ waitbgfadein
+ setblends 0xF
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5
+ delay 0x6
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
+ launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0
+ delay 0x2
+ launchtask AnimTask_SquishTarget 0x2 0x0
+ delay 0x5
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, 8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, -8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, -8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, 8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, -8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, -8, 1, 0
+ delay 2
+ createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 0
+ delay 51
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5
+ waitforvisualfinish
+ call UnsetPsychicBg
+ blendoff
+ end
+
+Move_BRUTAL_SWING::
+ loadspritegfx ANIM_TAG_IMPACT @hits
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ fadetobg BG_DARK
+ waitbgfadeout
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0
+ waitforvisualfinish
+ delay 0xb
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x1a 0x0 0x0 0x5
+ delay 0x6
+ launchtemplate gBrutalSwingBasicImpactTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x15 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x0 0x3 0x15 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATK_PARTNER 0x0 0x3 0x15 0x1
+ delay 0x4
+ launchtemplate gBrutalSwingRandomImpactTemplate 0x83 0x2 0x1 0x1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gBrutalSwingRandomImpactTemplate 0x83 0x2 0x1 0x1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gBrutalSwingBasicImpactTemplate 0x83 0x4 0x20 0x14 0x1 0x1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitsound
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x6
+ waitforvisualfinish
+ restorebg
+ blendoff
+ clearmonbg ANIM_TARGET
+ end
+
+Move_AURORA_VEIL::
+ loadspritegfx ANIM_TAG_GUARD_RING
+ fadetobg BG_AURORA
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x400 0x0 0x0 0xffff
+ waitbgfadein
+ monbg ANIM_ATK_PARTNER
+ setalpha 8, 8
+ playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER
+ launchtemplate gAuroraVeilRingTemplate 0x2 0x0
+ delay 0x4
+ launchtemplate gAuroraVeilRingTemplate 0x2 0x0
+ delay 0x4
+ launchtemplate gAuroraVeilRingTemplate 0x2 0x0
+ waitforvisualfinish
+ playsewithpan SE_SHINY, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0xa 0x0 0x2 0x0 0xa 0x7fff
+ waitforvisualfinish
+ call UnsetPsychicBg
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+General_ShellTrapSetUp:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ call FireSpreadEffect
+ delay 0x4
+ playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ delay 0x15
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0xA 0x1 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xA 0x0 0x1 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xA 0xA 0x1 0x2
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+Move_SHELL_TRAP::
+ShellTrapUnleash:
+ loadspritegfx ANIM_TAG_IMPACT @pound
+ loadspritegfx ANIM_TAG_SMALL_RED_EYE @red
+ loadspritegfx ANIM_TAG_SMALL_EMBER @fire
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @fire launches
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red
+ monbg ANIM_TARGET
+ waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10
+ delay 0x6
+ launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2
+ delay 0x5
+ waitforvisualfinish
+ call ShellTrapFireLaunch1
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1
+ delay 0x3
+ call ShellTrapFireLaunch2
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x3
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+ShellTrapFireLaunch1:
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x38 0x4 0x4 0x1
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0x4 0x4 0x1
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x38 0x4 0x4 0x1
+ delay 0x3
+ return
+ShellTrapFireLaunch2:
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x38 0x4 0x4 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0x4 0x4 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x3
+ launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x38 0x4 0x4 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
+ delay 0x3
+ return
+
+Move_FLEUR_CANNON::
+ loadspritegfx ANIM_TAG_ORBS @beam particles
+ loadspritegfx ANIM_TAG_ELECTRICITY @discharge
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink color
+ loadspritegfx ANIM_TAG_PINK_HEART @pink color
+ setalpha 12, 8
+ monbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x7440
+ waitforvisualfinish
+ panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1
+ createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, 0x1f, 16, 0, 0
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ call FleurCannonBeam
+ delay 0x20
+ launchtemplate gFleurCannonDischargeTemplate 0x2 0x3 0x1 0x10 0x10
+ delay 0x2
+ launchtemplate gFleurCannonDischargeTemplate 0x2 0x3 0x1 0xfff0 0xfff0
+ delay 0x5
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x5 0xb 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x7440
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+FleurCannonBeam:
+ launchtemplate gFleurCannonOrbTemplate 0x82 0x0
+ launchtemplate gFleurCannonOrbTemplate 0x82 0x0
+ delay 0x1
+ launchtemplate gFleurCannonOrbTemplate 0x82 0x0
+ launchtemplate gFleurCannonOrbTemplate 0x82 0x0
+ delay 0x1
+ return
+
+Move_PSYCHIC_FANGS::
+ loadspritegfx ANIM_TAG_SHARP_TEETH @Teeth
+ loadspritegfx ANIM_TAG_IMPACT @Hit
+ loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL @Screen
+ loadspritegfx ANIM_TAG_TORN_METAL @Broken Screen
+ monbg ANIM_TARGET
+ call SetPsychicBackground
+ setalpha 12, 8
+ choosetwoturnanim PsychicFangsRegular PsychicFangsDestroyWall
+PsychicFangsRegular:
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0xffe0 0x1 0x333 0x333 0xa
+ launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0x20 0x5 0xfccd 0xfccd 0xa
+ delay 0xa
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0x5 0x2
+ delay 0x10
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0xffe0 0x7 0xfccd 0x333 0xa
+ launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0x20 0x3 0x333 0xfccd 0xa
+ delay 0xa
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x8 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x8 0x4 0x2
+PsychicFangsEnd:
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ call UnsetPsychicBg
+ end
+PsychicFangsDestroyWall:
+ launchtemplate gBrickBreakWallSpriteTemplate 0x3 0x5 0x1 0x0 0x0 0x21 0xa
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0xffe0 0x1 0x333 0x333 0xa
+ launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0x20 0x5 0xfccd 0xfccd 0xa
+ delay 0xa
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0x5 0x2
+ delay 0x10
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0x20 0xffe0 0x7 0xfccd 0x333 0xa
+ launchtemplate gSharpTeethSpriteTemplate 0x2 0x6 0xffe0 0x20 0x3 0x333 0xfccd 0xa
+ delay 0xa
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x8 0x0 0x1 0x1
+ launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x0 0xfff8 0xfff4
+ launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x1 0x8 0xfff4
+ launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x2 0xfff8 0xc
+ launchtemplate gBrickBreakWallShardSpriteTemplate 0x2 0x4 0x1 0x3 0x8 0xc
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x8 0x4 0x2
+ delay 0x10
+ goto PsychicFangsEnd
+
+Move_STOMPING_TANTRUM::
+ loadspritegfx ANIM_TAG_ROCKS @rock colour
+ loadspritegfx ANIM_TAG_SMALL_ROCK @small rock
+ loadspritegfx ANIM_TAG_IMPACT @pound hit
+ loadspritegfx ANIM_TAG_SMALL_EMBER @hit color
+ monbg ANIM_TARGET
+ launchtask AnimTask_Splash 0x2 0x2 ANIM_ATTACKER 0x3
+ delay 0x5
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x5
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x5
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x0
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x1
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x2
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x3
+ call StompingTantrumImpact
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x25
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x0
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x1
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x2
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x3
+ call StompingTantrumImpact
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x25
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x0
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x1
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x2
+ launchtemplate gStompingTantrumRockTemplate 0x2 0x2 0x0 0x3
+ call StompingTantrumImpact
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+StompingTantrumImpact:
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x1
+ return
+
+Move_SHADOW_BONE::
+ loadspritegfx ANIM_TAG_BONE
+ loadspritegfx ANIM_TAG_IMPACT
+ fadetobg BG_NIGHTMARE
+ waitbgfadein
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_BONEMERANG, SOUND_PAN_TARGET
+ launchtemplate gSpinningBoneSpriteTemplate 0x2 0x5 0xffd6 0xffe7 0x0 0x0 0xf
+ delay 0xc
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x5 0x5 0x1
+ launchtemplate gComplexPaletteBlendSpriteTemplate 0x2 0x7 0x7 0x5 0x1 0x0 0xa 0x0 0x0
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ launchtask AnimTask_NightmareClone 0x2 0x0
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x28 0x1
+ playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET
+ waitforvisualfinish
+ restorebg
+ waitbgfadein
+ clearmonbg 0x3
+ blendoff
+ end
+
+Move_ACCELEROCK::
+ loadspritegfx ANIM_TAG_ROCKS
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_ATK_PARTNER
+ setalpha 12, 8
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x18 0x6 0x1 0x5
+ launchtask AnimTask_TraceMonBlended 0x2 0x4 0x0 0x4 0x7 0x3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ delay 0x4
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x5 0x0 0x6 0x1
+ launchtemplate gBasicHitSplatSpriteTemplate 0x84, 0x4, 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x5 0x1 0x3 0x0 0x5 0x1
+ launchtemplate gRockFragmentSpriteTemplate 0x82 0x6 0x5 0x0 0xffec 0x18 0xe 0x1
+ launchtemplate gRockFragmentSpriteTemplate 0x82 0x6 0x0 0x5 0x14 0xffe8 0xe 0x2
+ launchtemplate gRockFragmentSpriteTemplate 0x82 0x6 0xfffb 0x0 0xffec 0xffe8 0xe 0x2
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x5 0x1 0x3 0x0 0x5 0x1
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ waitforvisualfinish
+ end
+
+Move_LIQUIDATION::
+ loadspritegfx ANIM_TAG_WATER_IMPACT
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4
+ delay 0x6
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET
+ waitforvisualfinish
+ call RisingWaterHitEffect
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_PRISMATIC_LASER::
+ loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color
+ loadspritegfx ANIM_TAG_SPARK_H @yellow color
+ loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color
+ loadspritegfx ANIM_TAG_RAZOR_LEAF @green color
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @violet color
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
+ loadspritegfx ANIM_TAG_TEAL_ALERT @straight lines
+ loadspritegfx ANIM_TAG_GREEN_SPIKE @needle arm animation
+ loadspritegfx ANIM_TAG_NEEDLE @sting
+ monbg ANIM_ATTACKER
+ setblends 0x80E
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0
+ playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER
+ launchtemplate gPrismaticLaserChargeTemplate 0x2 0x1 0x0
+ call PrismaticLaserInwardSpikes
+ playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER
+ call PrismaticLaserInwardSpikes
+ playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER
+ call PrismaticLaserInwardSpikes
+ playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER
+ call PrismaticLaserInwardSpikes
+ playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER
+ delay 0x1E
+ call PrismaticLaserOutwardSpikes
+ delay 0x5
+ call PrismaticLaserOutwardSpikes2
+ delay 0x5
+ call PrismaticLaserOutwardSpikes
+ delay 0x5
+ call PrismaticLaserOutwardSpikes2
+ delay 0x5
+ call PrismaticLaserOutwardSpikes
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_TEAL_ALERT
+ unloadspritegfx ANIM_TAG_GREEN_SPIKE
+ unloadspritegfx ANIM_TAG_ICE_CHUNK
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ delay 0x1E
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0xa 0x32
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0xa 0x32
+ playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
+ call PrismaticLaserRain
+ call PrismaticLaserRain
+ call PrismaticLaserRain
+ call PrismaticLaserRain
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+PrismaticLaserOutwardSpikes:
+ launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0x0 0xFF90 0x10 @up
+ launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0x5F 0xFF9D 0x10 @upper right
+ launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0x73 0x0 0x10 @right
+ launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0x4F 0x37 0x10 @lower right
+ launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0x0 0x53 0x10 @down
+ launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0xFFB0 0x43 0x10 @lower left
+ launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0xFF60 0x0 0x10 @left
+ launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0xFFAA 0xFF94 0x10 @upper left
+ playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER
+ return
+PrismaticLaserOutwardSpikes2:
+ launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0xFFE0 0x43 0x10 @between lower left and down
+ launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0x1F 0x37 0x10 @between lower right and down
+ launchtemplate gPrismaticLaserYellowOutwardTemplate 0x82 0x5 0x0 0x1 0xFFDA 0xFF94 0x10 @between up and upper left
+ launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0xFF60 0x43 0x10 @between left and lower left
+ launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0xFF2A 0xFFAA 0x10 @between left and upper left
+ launchtemplate gPrismaticLaserVioletOutwardTemplate 0x82 0x5 0x0 0x1 0x2D 0xFF9D 0x10 @between up and upper right
+ launchtemplate gPrismaticLaserRedOutwardTemplate 0x82 0x5 0x0 0x1 0xDF 0xFF9D 0x10 @between right and upper right
+ launchtemplate gPrismaticLaserGreenOutwardTemplate 0x82 0x5 0x0 0x1 0x9F 0x37 0x10 @between right and lower right
+ playsewithpan SE_M_MIST, SOUND_PAN_ATTACKER
+ return
+PrismaticLaserInwardSpikes:
+ launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0x0 0xFF90 0x10 @up
+ launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0xFFE0 0x43 0x10 @between lower left and down
+ delay 0x1
+ launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0x5F 0xFF9D 0x10 @upper right
+ launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0x1F 0x37 0x10 @between lower right and down
+ launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0xFFDA 0xFF94 0x10 @between up and upper left
+ delay 0x1
+ launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0x73 0x0 0x10 @right
+ launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0xFF60 0x43 0x10 @between left and lower left
+ delay 0x1
+ launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0x4F 0x37 0x10 @lower right
+ launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0xFF2A 0xFFAA 0x10 @between left and upper left
+ delay 0x1
+ launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0x0 0x53 0x10 @down
+ launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0x2D 0xFF9D 0x10 @between up and upper right
+ delay 0x1
+ launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0xFFB0 0x43 0x10 @lower left
+ launchtemplate gPrismaticLaserRedInwardTemplate 0x82 0x5 0x0 0x0 0xDF 0xFF9D 0x10 @between right and upper right
+ delay 0x1
+ launchtemplate gPrismaticLaserYellowInwardTemplate 0x82 0x5 0x0 0x0 0xFF60 0x0 0x10 @left
+ launchtemplate gPrismaticLaserGreenInwardTemplate 0x82 0x5 0x0 0x0 0x9F 0x37 0x10 @between right and lower right
+ delay 0x1
+ launchtemplate gPrismaticLaserVioletInwardTemplate 0x82 0x5 0x0 0x0 0xFFAA 0xFF94 0x10 @upper left
+ delay 0x1
+ return
+PrismaticLaserRain:
+ launchtemplate gPrismaticLaserYellowRainTemplate 0x82, 0x4, 35, 0x3c, 4, ANIM_TARGET
+ delay 0x2
+ launchtemplate gPrismaticLaserGreenRainTemplate 0x82, 0x4, -30, 0x44, 4, ANIM_TARGET
+ delay 0x2
+ launchtemplate gPrismaticLaserRedRainTemplate 0x82, 0x4, 27, 0x37, 4, ANIM_TARGET
+ delay 0x2
+ launchtemplate gPrismaticLaserVioletRainTemplate 0x82, 0x4, -20, 0x32, 4, ANIM_TARGET
+ delay 0x2
+ launchtemplate gPrismaticLaserYellowRainTemplate 0x82, 0x4, 33, 0x3a, 4, ANIM_TARGET
+ delay 0x2
+ launchtemplate gPrismaticLaserGreenRainTemplate 0x82, 0x4, -12, 0x3a, 4, ANIM_TARGET
+ delay 0x2
+ launchtemplate gPrismaticLaserRedRainTemplate 0x82, 0x4, 19, 0x3c, 4, ANIM_TARGET
+ delay 0x2
+ launchtemplate gPrismaticLaserVioletRainTemplate 0x82, 0x4, -38, 0x3a, 4, ANIM_TARGET
+ delay 0x2
+ launchtemplate gPrismaticLaserYellowRainTemplate 0x82, 0x4, 5, 0x3c, 4, ANIM_TARGET
+ delay 0x2
+ launchtemplate gPrismaticLaserGreenRainTemplate 0x82, 0x4, -23, 0x28, 4, ANIM_TARGET
+ return
+
+Move_SPECTRAL_THIEF::
+ choosetwoturnanim SpectralThiefSteal SpectralThiefUnleash
+SpectralThiefUnleash:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @Black Colour
+ loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour
+ loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke
+ loadspritegfx ANIM_TAG_WHITE_SHADOW @destiny bond
+ loadspritegfx ANIM_TAG_IMPACT @hits
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ fadetobg BG_GHOST
+ waitbgfadein
+ delay 0x5
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0x8 0x0 0x0
+ invisible 0x0
+ delay 0x2
+ launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x0 0x0
+ delay 0x2
+ launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x0 0x0
+ delay 0x2
+ launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x0 0x0
+ delay 0x2
+ launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0x8 0x0 0x0
+ delay 0x2
+ launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0xfff8 0x0 0x0
+ delay 0x2
+ launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0x8 0xfff8 0x0 0x0
+ delay 0x2
+ launchtemplate gSpectralThiefBlackSmokeTemplate 0x82, 0x4, 0xfff8 0x8 0x0 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x30
+ delay 0x30
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x2 0x0 0x18 0x1
+ launchtask AnimTask_BlendBattleAnimPalExclude 0x2 0x5 0x6 0x1 0x0 0xc 0x77bd
+ delay 0x18
+ launchtask AnimTask_BlendBattleAnimPalExclude 0x2 0x5 0x6 0x1 0xc 0x0 0x77bd
+ waitforvisualfinish
+ setblends 0x1000
+ delay 0x1
+ monbg_static ANIM_TARGET
+ launchtask AnimTask_MoveTargetMementoShadow 0x5 0x0
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg_static ANIM_TARGET
+ delay 0x1
+ blendoff
+ delay 0x1
+ setalpha 12, 8
+ monbg ANIM_TARGET
+ delay 0x1
+ launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x4
+ launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xa 0x14 0x0
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x4
+ launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xfffb 0xa 0x0
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x4
+ launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0x11 0xfff4 0x0
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x4
+ launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0xfff1 0xf 0x0
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x4
+ launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0x0 0x0 0x0
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x4
+ launchtemplate gSpectralThiefThiefImpactTemplate 0x82, 0x3, 0x14 0x2 0x0
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ waitforvisualfinish
+ visible 0x0
+ delay 0x2
+ restorebg
+ waitbgfadein
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+SpectralThiefSteal:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color
+ loadspritegfx ANIM_TAG_ORBS @mimic
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ setblends 0x50b
+ splitbgprio_all
+ panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0
+ delay 0xf
+ launchtemplate gSpectralThiefBlackOrbsTemplate 0x82 0x2 0xfff4 0x18
+ delay 0xB
+ setarg 0x7 0xffff
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call SpectralThiefBuffUp
+ delay 0x8
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call SpectralThiefBuffUp
+ delay 0x8
+ call SpectralThiefBuffUp
+ waitforvisualfinish
+ blendoff
+ end
+SpectralThiefBuffUp:
+ launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gSpectralThiefBlackBuffTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+
+Move_SUNSTEEL_STRIKE::
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @black color
+ loadspritegfx ANIM_TAG_ROCKS @rock colour
+ loadspritegfx ANIM_TAG_SMALL_ROCK @small rock
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET
+ launchtemplate gSunsteelStrikeBlackFlyBallTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x1 0x1A
+ delay 0x18
+ launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x0 @The rock particles mess up the fly animation
+ launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x1
+ launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x2
+ launchtemplate gSunsteelStrikeRocksTemplate 0x2 0x2 0x0 0x3
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ unloadspritegfx ANIM_TAG_AIR_WAVE_2 @black color
+ loadspritegfx ANIM_TAG_METEOR @superpower
+ loadspritegfx ANIM_TAG_GOLD_RING @beam
+ loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ playsewithpan SE_ORB, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_BG | ANIM_PAL_ATK), 3, 0, 15, 0
+ waitforvisualfinish
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ stopsound
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ launchtemplate gSunsteelStrikeSuperpowerTemplate 0x82 0x1 0x14
+ delay 0x14
+ launchtemplate gSunsteelStrikeRedImpactTemplate 0x2 0x4 0x0 0x0 0x1 0x0
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x6 0x0 0x8 0x1
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_METEOR @superpower
+ unloadspritegfx ANIM_TAG_GOLD_RING @beam
+ unloadspritegfx ANIM_TAG_SMALL_RED_EYE @red color
+ unloadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_SMALL_EMBER @FireSpreadEffect
+ call FireSpreadEffect
+ delay 0x4
+ playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ visible ANIM_ATTACKER
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_BG | ANIM_PAL_ATK), 3, 15, 0, 0
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_TARGET
+ end
+SunsteelStrikeBeam:
+ launchtemplate gSunsteelStrikeYellowBeamTemplate 0x82 0x1 0x14
+ delay 0x1
+ launchtemplate gSunsteelStrikeRedBeamTemplate 0x82 0x1 0x14
+ delay 0x1
+ return
+
+Move_MOONGEIST_BEAM::
+ loadspritegfx ANIM_TAG_MOON
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_ORBS @hyper beam
+ loadspritegfx ANIM_TAG_WATER_GUN @water gun colour
+ loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple colour
+ setalpha 8, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 15, 15, 0x7FFF @White
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 15, 15, 0x7FFC @Light Blue
+ waitforvisualfinish
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET
+ launchtemplate gMoonSpriteTemplate 0x80 0x2 0x20 0x15
+ launchtask AnimTask_AlphaFadeIn 0x3 0x5 0x0 0x10 0x10 0x0 0x1
+ call MoongeistBeamCharge
+ call MoongeistBeamCharge
+ call MoongeistBeamCharge
+ call MoongeistBeamCharge
+ launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 0x0 @;Charge circle
+ call MoongeistBeamCharge
+ delay 0x20
+ createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xCC, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1
+ createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, 0x1f, 0x10, 0, 0
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0xb 0x6739
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ call MoongeistBeamOrbs
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0xb 0x0 0x6739
+ delay 0x1A
+ stopsound
+ launchtask AnimTask_MoonlightEndFade 0x2 0x0
+ end
+MoongeistBeamCharge:
+ launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, 40, 0, 0, 0, 30, 10 @From right
+ launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, -40, 0, 0, 0, 30, -10 @From left
+ launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, -25, -40, 0, 0, 30, -20 @From top left
+ launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, 25, -40, 0, 0, 30, 20 @From top right
+ launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, 25, 20, 0, 0, 30, 20 @From bottom right
+ launchtemplate gMoongeistBeamChargeTemplate 0, 0x6, -25, 40, 0, 0, 30, -20 @From bottom left
+ delay 0x5
+ return
+MoongeistBeamOrbs:
+ launchtemplate gMoongeistBeamBlueOrbsTemplate 0x82 0x0
+ launchtemplate gMoongeistBeamPurpleOrbsTemplate 0x82 0x0
+ delay 0x1
+ return
+
+Move_TEARFUL_LOOK::
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES @tears
+ loadspritegfx ANIM_TAG_OPENING_EYE @eye
+ monbg ANIM_DEF_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x5 0x7DE0
+ waitforvisualfinish
+ playsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_TARGET
+ launchtemplate gOpeningEyeSpriteTemplate 0x5 0x4 0x0 0x0 0x1 0x0
+ delay 0x35
+ loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 0xC, 0x2
+ delay 0x8
+ launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x0
+ launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x1
+ launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x2
+ launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x3
+ delay 0x8
+ launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x0
+ launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x1
+ launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x2
+ launchtemplate gTearDropSpriteTemplate 0x2 0x2 0x1 0x3
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x5 0x0 0x7DE0
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
+Move_ZING_ZAP::
+ loadspritegfx ANIM_TAG_SPARK_2 @sparks
+ loadspritegfx ANIM_TAG_YELLOW_BALL @ball
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_SPARK_H @yellow color
+ loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color
+ monbg ANIM_TARGET
+ call ZingZapSparks1
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1
+ delay 0xA
+ call ZingZapSparks2
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1
+ delay 0xA
+ call ZingZapSparks1
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1
+ delay 0xA
+ call ZingZapSparks2
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x4 0x0 0x6 0x1
+ delay 0xA
+ launchtask AnimTask_TranslateMonEllipticalRespectSide 0x2 0x5 0x0 0x18 0x6 0x1 0x5
+ delay 0x4
+ call ZingZapSparks1
+ invisible 0x0
+ launchtemplate gZingZapYellowBallTemplate 0x82, 0x3, 0x0 0x0 0xF
+ delay 0xA
+ call ZingZapSparks2
+ delay 0x5
+ stopsound
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtemplate gZingZapRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x4 0x0 0x6 0x1
+ call ElectricityEffect
+ visible 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+ZingZapSparks1:
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ return
+ZingZapSparks2:
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ return
+
+Move_NATURES_MADNESS::
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_SPARKLE_2 @stars
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink
+ loadspritegfx ANIM_TAG_ICE_CHUNK @blue green
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_TEAL_ALERT @charge particles
+ loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green
+ monbg ANIM_ATTACKER
+ setblends 0x80E
+ delay 0x1
+ loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xa 0xa 0x19 0x0
+ delay 0x4
+ launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x0
+ delay 0x4
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x14 0xa 0x19 0x0
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x14 0xa 0x19 0x0
+ delay 0x4
+ launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x0
+ delay 0x4
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x0
+ delay 0x4
+ launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x19 0x14 0x19 0x0
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x19 0x14 0x19 0x0
+ delay 0x4
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xffec 0x14 0x19 0x0
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xffec 0x14 0x19 0x0
+ delay 0x4
+ launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1F 0x8
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xc 0x0 0x19 0x0
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xc 0x0 0x19 0x0
+ clearmonbg ANIM_ATTACKER
+ delay 0x1
+ monbg ANIM_TARGET
+ waitforvisualfinish
+ launchtemplate gNaturesMadnessGrayRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0
+ playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
+ delay 0xe
+ launchtemplate gNaturesMadnessGrayRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0
+ playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
+ delay 0xe
+ launchtemplate gNaturesMadnessGrayRingTemplate 0x28 0x4 0x0 0x0 0x1 0x0
+ playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gNaturesMadnessPinkRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xa 0xa 0x19 0x1
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x1
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x14 0xa 0x19 0x1
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x1
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x1
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0x19 0x14 0x19 0x1
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xffec 0x14 0x19 0x1
+ launchtemplate gNaturesMadnessPinkStarsTemplate 0x2 0x4 0xc 0x0 0x19 0x1
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xa 0xa 0x19 0x1
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff1 0x0 0x19 0x1
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x14 0xa 0x19 0x1
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x0 0xfff6 0x19 0x1
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xfff6 0xf 0x19 0x1
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0x19 0x14 0x19 0x1
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xffec 0x14 0x19 0x1
+ launchtemplate gNaturesMadnessCrystalsTemplate 0x2 0x4 0xc 0x0 0x19 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x5
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ delay 0x5
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_MULTI_ATTACK::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_CUT @cut
+ monbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call MultiAttackBuff
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x7fff
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call MultiAttackBuff
+ delay 0x8
+ call MultiAttackBuff
+ waitforvisualfinish
+ delay 0xF
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ launchtemplate gCuttingSliceSpriteTemplate 0x2 0x3 0x28 0xffe0 0x0
+ launchtemplate gCuttingSliceSpriteTemplate 0x2 0x3 0x28 0xffd0 0x0
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+MultiAttackBuff:
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+
+Move_MIND_BLOWN::
+ loadspritegfx ANIM_TAG_PINK_HEART @pink color
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES @blue color
+ loadspritegfx ANIM_TAG_BLACEPHALON_HEAD @head
+ loadspritegfx ANIM_TAG_ORBS @circles
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xC 0x0
+ waitforvisualfinish
+ playsewithpan SE_FALL, SOUND_PAN_TARGET
+ launchtemplate gMindBlownHeadTemplate 0x82, 0x3, 0x0 0x0 0x25
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0xf 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_DEF_PARTNER 0x2 0x0 0xf 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_ATK_PARTNER 0x2 0x0 0xf 0x1
+ delay 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMindBlownBlueImpactTemplate 0x83 0x2 0x1 0x0
+ launchtemplate gMindBlownPinkImpactTemplate 0x83 0x2 0x1 0x0
+ call MindBlownBlueOrbs
+ delay 0x1
+ call MindBlownPinkOrbs
+ delay 0x1
+ call MindBlownBlueOrbs
+ delay 0x1
+ call MindBlownPinkOrbs
+ delay 0x1
+ call MindBlownBlueOrbs
+ delay 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_TARGET
+ end
+MindBlownBlueOrbs:
+ launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x0 0xFF90 0x8 @up
+ launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x5F 0xFF9D 0x8 @upper right
+ launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x73 0x0 0x8 @right
+ launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x4F 0x37 0x8 @lower right
+ launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0x0 0x53 0x8 @down
+ launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0xFFB0 0x43 0x8 @lower left
+ launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0xFF60 0x0 0x8 @left
+ launchtemplate gMindBlownBlueOrbsTemplate 0x82 0x5 0x1 0x1 0xFFAA 0xFF94 0x8 @upper left
+ return
+MindBlownPinkOrbs:
+ launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0x2D 0xFF9D 0x8 @between up and upper right
+ launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xDF 0xFF9D 0x8 @between right and upper right
+ launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0x9F 0x37 0x8 @between right and lower right
+ launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0x1F 0x37 0x8 @between lower right and down
+ launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFFE0 0x43 0x8 @between lower left and down
+ launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFF60 0x43 0x8 @between left and lower left
+ launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFF2A 0xFFAA 0x8 @between left and upper left
+ launchtemplate gMindBlownPinkOrbsTemplate 0x82 0x5 0x1 0x1 0xFFDA 0xFF94 0x8 @between up and upper left
+ return
+
+Move_PLASMA_FISTS::
+ loadspritegfx ANIM_TAG_SHOCK_3 @charge
+ loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect
+ loadspritegfx ANIM_TAG_SPARK @shock wave
+ loadspritegfx ANIM_TAG_IMPACT @thunder punch
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @thunder punch
+ loadspritegfx ANIM_TAG_LIGHTNING @thunder punch
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x0
+ waitforvisualfinish
+ launchtemplate gPlasmaFistsChargeTemplate 0x2 0x1 0x0
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x3 0x5c 0x1
+ call PlasmaFistSpark1
+ delay 0xA
+ call PlasmaFistSpark2
+ delay 0xA
+ call PlasmaFistSpark1
+ delay 0xA
+ call PlasmaFistSpark2
+ delay 0xA
+ call PlasmaFistSpark1
+ delay 0xA
+ call PlasmaFistSpark2
+ delay 0xA
+ call PlasmaFistSpark1
+ delay 0xA
+ call PlasmaFistSpark2
+ delay 0xA
+ call PlasmaFistSpark1
+ delay 0xA
+ call PlasmaFistSpark2
+ delay 0xA
+ call PlasmaFistSpark1
+ delay 0xA
+ call PlasmaFistSpark2
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ launchtask AnimTask_ShockWaveProgressingBolt 0x5 0x0
+ waitforvisualfinish
+ monbg ANIM_TARGET
+ call PlasmaFistsImpact
+ waitforvisualfinish
+ call PlasmaFistsImpact
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xC 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+PlasmaFistSpark1:
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x2 0x0 0xb 0x5bff
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ return
+PlasmaFistSpark2:
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ return
+PlasmaFistsImpact:
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtemplate gFistFootSpriteTemplate 0x84 0x5 0x0 0x0 0x8 0x1 0x0
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1
+ delay 0x1
+ launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xffd0
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x2 0x2 0x0 0x10
+ delay 0x1
+ playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
+ launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101
+ delay 0x2
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1
+ launchtemplate gBasicHitSplatSpriteTemplate 0x3 0x4 0x0 0x0 0x1 0x2
+ return
+
+Move_PHOTON_GEYSER::
+ loadspritegfx ANIM_TAG_SHOCK_3 @charge
+ loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect
+ loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color
+ loadspritegfx ANIM_TAG_THIN_RING @calm mind
+ loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color
+ loadspritegfx ANIM_TAG_ORBS @recover
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ launchtemplate gPhotonGeyserChargeTemplate 0x2 0x1 0x0
+ call PhotonGeyserSparks1
+ launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0xffd8 0xffd8 0x10
+ launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x0 0x28 0x10
+ delay 0xA
+ call PhotonGeyserSparks2
+ delay 0xA
+ call PhotonGeyserSparks1
+ delay 0xA
+ call PhotonGeyserSparks2
+ delay 0xA
+ call PhotonGeyserSparks1
+ launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x0 0xffd8 0x10
+ launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x28 0x14 0x10
+ delay 0xA
+ call PhotonGeyserSparks2
+ delay 0xA
+ call PhotonGeyserSparks1
+ delay 0xA
+ call PhotonGeyserSparks2
+ delay 0xA
+ call PhotonGeyserSparks1
+ launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0xffd8 0x0 0x10
+ launchtemplate gPowerAbsorptionOrbSpriteTemplate 0x2 0x3 0x28 0x0 0x10
+ delay 0xA
+ call PhotonGeyserSparks2
+ delay 0xA
+ call PhotonGeyserSparks1
+ delay 0xA
+ call PhotonGeyserSparks2
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xF 0x0
+ clearmonbg ANIM_ATTACKER
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER
+ unloadspritegfx ANIM_TAG_ORBS @recover
+ unloadspritegfx ANIM_TAG_SHOCK_3 @charge
+ loadspritegfx ANIM_TAG_YELLOW_BALL @confuse ray (for zap cannon)
+ loadspritegfx ANIM_TAG_BLACK_BALL_2 @zap cannon
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray color
+ launchtemplate gPhotonGeyserWhiteRingTemplate 0x3 0x6 0x0 0x0 0x0 0x0 0x1f 0x8
+ launchtemplate gPhotonGeyserZapBallTemplate 0x83 0x6 0xa 0x0 0x0 0x0 0x1e 0x0
+ launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
+ launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
+ launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
+ launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
+ launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
+ launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
+ launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
+ launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xe0 0x28 0x2
+ waitforvisualfinish
+ monbg ANIM_TARGET
+ launchtemplate gPhotonGeyserYellowRingTemplate 0x3 0x6 0x0 0x0 0x1 0x0 0x1f 0x8
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x5 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ unloadspritegfx ANIM_TAG_YELLOW_BALL @confuse ray (for zap cannon)
+ unloadspritegfx ANIM_TAG_BLACK_BALL_2 @zap cannon
+ unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray color
+ @Shoot beam to the sky
+ loadspritegfx ANIM_TAG_STRAIGHT_BEAM
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x6 0x0 0x10 0x43FF @Light yellow
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x4 0x0 0x60 0x1
+ panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ call PhotonGeyserBeam
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x10 0x0 0x43FF @Light yellow
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xF 0x0 0x0
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+PhotonGeyserSparks1:
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gThinRingShrinkingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ delay 0x0
+ launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ return
+PhotonGeyserSparks2:
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gPhotonGeyserSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ return
+PhotonGeyserBeam:
+ launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, 19, ANIM_TARGET, 180, 2, 6
+ delay 0x1
+ launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, 3, ANIM_TARGET, 180, 2, 5
+ delay 0x1
+ launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -13, ANIM_TARGET, 180, 2, 4
+ delay 0x1
+ launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -29, ANIM_TARGET, 180, 2, 3
+ delay 0x1
+ launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -45, ANIM_TARGET, 180, 2, 2
+ delay 0x1
+ launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -61, ANIM_TARGET, 180, 2, 1
+ delay 0x1
+ launchtemplate gPhotonGeyserBeam 0x83, 0x6, 0, -77, ANIM_TARGET, 180, 2, 0
+ return
+
+Move_ZIPPY_ZAP::
+ end @to do:
+
+Move_SPLISHY_SPLASH::
+ end @to do:
+
+Move_FLOATY_FALL::
+ end @to do:
+
+Move_PIKA_PAPOW::
+ end @to do:
+
+Move_BOUNCY_BUBBLE::
+ end @to do:
+
+Move_BUZZY_BUZZ::
+ end @to do:
+
+Move_SIZZLY_SLIDE::
+ end @to do:
+
+Move_GLITZY_GLOW::
+ end @to do:
+
+Move_BADDY_BAD::
+ end @to do:
+
+Move_SAPPY_SEED::
+ end @to do:
+
+Move_FREEZY_FROST::
+ end @to do:
+
+Move_SPARKLY_SWIRL::
+ end @to do:
+
+Move_VEEVEE_VOLLEY::
+ end @to do:
+
+Move_DOUBLE_IRON_BASH::
+ loadspritegfx ANIM_TAG_GUST
+ loadspritegfx ANIM_TAG_IMPACT
+ loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2
+ launchtask AnimTask_MetallicShine 0x5 0x3 0x0 0x0 0x0
+ waitforvisualfinish
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ loopsewithpan SE_M_WING_ATTACK, SOUND_PAN_ATTACKER, 0x14, 0x2
+ launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xc 0x4 0x1 0x4
+ launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46
+ launchtemplate gGustToTargetSpriteTemplate 0x2 0x5 0xffe7 0x0 0x0 0x0 0x0 @wing attack
+ launchtemplate gGustToTargetSpriteTemplate 0x2 0x5 0x19 0x0 0x0 0x0 0x0 @wing attack
+ delay 0x18
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x18 0x0 0x0 0x9
+ delay 0x11
+ launchtemplate gBasicHitSplatSpriteTemplate 0x84, 0x4, 0x0 0x0 0x1 0x1
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe0 0x0 0x0 0x3
+ waitforvisualfinish
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ waitforvisualfinish
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0xb
+ waitforvisualfinish
+ delay 0x3
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+@@@@@@@@@@@@@@@@@@@@@@@ GEN 8 @@@@@@@@@@@@@@@@@@@@@@@
+Move_DYNAMAX_CANNON::
+ goto Move_HYPER_BEAM
+
+Move_SNIPE_SHOT::
+ loadspritegfx ANIM_TAG_IMPACT_2
+ loadspritegfx ANIM_TAG_LEER
+ launchtask AnimTask_BlendBattleAnimPal 10 5 ANIM_PAL_BG 0 0 16, 0 @;Black
+ waitforvisualfinish
+ launchtemplate gLeerSpriteTemplate 0x82, 2 0x18 -12
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ delay 0x20
+ playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET
+ launchtemplate gSnipeShotBallTemplate 0x82, 3, 0 0 16,
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon2 2 5 1 4 0 8, 1
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 10 5 ANIM_PAL_BG 0 16, 0 0 @;Black
+ waitforvisualfinish
+ end
+
+Move_JAW_LOCK::
+ loadspritegfx ANIM_TAG_SHARP_TEETH
+ loadspritegfx ANIM_TAG_IMPACT
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0B1D @Light orange
+ monbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x7 0x0 @Black
+ waitforvisualfinish
+ playsewithpan SE_M_BITE, SOUND_PAN_TARGET
+ launchtemplate gJawLockTeethTemplate 0x2 0x7 0xffe0 0xffe0 0x1 0x333 0x333 0xa 15
+ launchtemplate gJawLockTeethTemplate 0x2 0x7 0x20 0x20 0x5 0xfccd 0xfccd 0xa 15
+ delay 0xa
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff8 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x7 0xA 0x2
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x0 @;Black
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ delay 0x1
+ end
+
+Move_STUFF_CHEEKS::
+ loadspritegfx ANIM_TAG_BERRY_NORMAL
+ loadspritegfx ANIM_TAG_SHARP_TEETH
+ loadspritegfx ANIM_TAG_THIN_RING
+ loadspritegfx ANIM_TAG_SPARKLE_2
+ playsewithpan SE_M_METRONOME, 0xc0
+ launchtemplate gFloatingBerryTemplate 1 0x1 0x0
+ delay 0x45
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 0x1 BERRYEAT_ON_PLAYER
+BerryEatingOpponent:
+ call BiteOpponent
+ delay 0x10
+ call BiteOpponent
+ delay 0xA
+ goto POST_BERRY_EAT
+BERRYEAT_ON_PLAYER:
+ call BitePlayer
+ delay 0x10
+ call BitePlayer
+ delay 0xA
+POST_BERRY_EAT:
+ playsewithpan SE_SHINY, 0xc0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x2 0x3 0x7 0x0 0x67f1
+ launchtemplate gThinRingExpandingSpriteTemplate 3 0x4 0x0 0x0 0x0 0x0
+ waitforvisualfinish
+ end
+BitePlayer:
+ playsewithpan SE_M_BITE, 0x3f
+ launchtemplate gSharpTeethSpriteTemplate 2 0x6 0x27 0xffD0 0x0 0x0 0x333 0xa
+ launchtemplate gSharpTeethSpriteTemplate 2 0x6 0x27 0x10 0x4 0x0 0xfccd 0xa
+ return
+BiteOpponent:
+ playsewithpan SE_M_BITE, 0x3f
+ launchtemplate gSharpTeethSpriteTemplate 2 0x6 0xffDF 0xffD0 0x0 0x0 0x333 0xa
+ launchtemplate gSharpTeethSpriteTemplate 2 0x6 0xffDF 0x10 0x4 0x0 0xfccd 0xa
+ return
+
+Move_NO_RETREAT::
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER 0x7 0x12
+ launchtemplate gNoRetreatFlameTemplate 2, 0x5 ANIM_ATTACKER, 20, 10, 0xA0, 0
+ launchtemplate gNoRetreatFlameTemplate 2, 0x5 ANIM_ATTACKER, -20, 10, 0xA0, 0
+ launchtask AnimTask_TeeterDanceMovement 0x5 0x0
+ waitforvisualfinish
+ end
+
+Move_TAR_SHOT::
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 15, 15, 0 @Black
+ monbg ANIM_TARGET
+ launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0x0 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ delay 0x5
+ launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0xffe8 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ delay 0xf
+ launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_TARGET 0x2 0x0 0xa 0x1
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0x10 0x0 @;Black
+ launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xffe6 0xffe8 0x0 0xf 0x37
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 0xa
+ launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xf 0xffe5 0x0 0xC 0x32
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 0xa
+ launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xfff1 0xffef 0x0 0xa 0x2d
+ playsewithpan SE_M_BUBBLE SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+Move_MAGIC_POWDER::
+ loadspritegfx ANIM_TAG_POISON_POWDER
+ loadspritegfx ANIM_TAG_WATER_GUN
+ loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER 0xE 0x8
+ launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xffe2 0xffea 0x75 0x50 0x5 0x1
+ launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xa 0xffea 0x75 0x50 0xfffb 0x1
+ launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xffe7 0xffea 0x75 0x70 0x5 0x3
+ delay 0xf
+ launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfffb 0xffea 0x75 0x50 0xfffb 0x1
+ launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0x5 0xffea 0x75 0x60 0x5 0x1
+ launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0x0 0xffea 0x75 0x45 0xfffb 0x1
+ launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xfff1 0xffea 0x75 0x70 0x5 0x2
+ delay 0x1e
+ launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfff1 0xffea 0x75 0x70 0x5 0x2
+ launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xf 0xffea 0x75 0x50 0xfffb 0x1
+ launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfff6 0xffea 0x75 0x60 0x7 0x2
+ launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0xfffb 0xffea 0x75 0x5a 0xfff8 0x0
+ delay 0x14
+ launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0xfff6 0xffea 0x75 0x50 0xfffb 0x1
+ launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0x0 0xffea 0x75 0x59 0x5 0x2
+ launchtemplate gMagicPowderBluePowderTemplate 0x82 0x6 0x14 0xffea 0x75 0x70 0xfff8 0x2
+ launchtemplate gPoisonPowderParticleSpriteTemplate 0x82 0x6 0x5 0xffea 0x75 0x50 0x5 0x1
+ waitforvisualfinish
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET
+ launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffa 0xfffa 0xf 0x1 0x1
+ waitforvisualfinish
+ end
+
+Move_DRAGON_DARTS::
+ loadspritegfx ANIM_TAG_DREEPY
+ loadspritegfx ANIM_TAG_EXPLOSION
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER
+ launchtemplate gDreepyMissileTemplate 0x82, 0x3, 0x0 0x0 0x19
+ delay 0x19
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x10 0x1
+ launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x0 0x0 0x1 0x1
+ waitforvisualfinish
+ end
+
+Move_TEATIME::
+ goto Move_MILK_DRINK
+
+Move_OCTOLOCK::
+ loadspritegfx ANIM_TAG_TENDRILS
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_TENDRILS, 0, 12, 12, 0x3D98 @Pinkish Red
+ loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET 0x6 0x4
+ launchtemplate gConstrictBindingSpriteTemplate 0x84, 0x4, 0x0 0x10 0x0 0x2
+ delay 0x7
+ launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0x0 0x0 0x2
+ launchtemplate gConstrictBindingSpriteTemplate 0x82, 0x4, 0x0 0x8 0x1 0x2
+ delay 0x7
+ launchtemplate gConstrictBindingSpriteTemplate 0x83 0x4 0x0 0xfff8 0x1 0x2
+ delay 0x8
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x3 0x0 0x6 0x1
+ delay 0x14
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0x8 0x1f
+ playsewithpan SE_M_BIND, SOUND_PAN_TARGET
+ setarg 0x7 0xffff
+ waitforvisualfinish
+ end
+
+Move_BOLT_BEAK::
+ loadspritegfx ANIM_TAG_HORN_HIT
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_SPARK_2
+ loadspritegfx ANIM_TAG_ELECTRICITY
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0, 12, 12, 0x76E1 @Blue Electricity
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HORN_HIT, 0, 12, 12, 0x079D @Yellow
+ call BoltBeakSparks
+ waitforvisualfinish
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff
+ createsprite gHorizontalLungeSpriteTemplate, 0x2, 0x2, 0x4, 0x4
+ delay 0x4
+ createsprite gHornHitSpriteTemplate, 0x84, 0x3, 0x8, 0x8, 0xa
+ waitforvisualfinish
+ createsprite gFlashingHitSplatSpriteTemplate, 0x83, 0x4, 0x0, 0x0, 0x1, 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1
+ waitforvisualfinish
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x4 0xffe1 0x2 0x0 0x6 0x5bff
+ call ElectricityEffect
+ waitforvisualfinish
+ end
+BoltBeakSparks:
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0
+ delay 0x0
+ createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0
+ createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1
+ delay 0x0
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff
+ delay 0xa
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x5 0x5 0x5bff
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0
+ createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1
+ delay 0x0
+ createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1
+ delay 0x0
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x76E1
+ delay 0x14
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x4 0x4 0x76E1
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x0, 0x0
+ createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x40, 0x14, 0x1, 0x0
+ createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x80, 0x14, 0x0, 0x0
+ createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x2, 0x0
+ createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0x20, 0x14, 0x0, 0x0
+ createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0x60, 0x14, 0x1, 0x0
+ createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xa0, 0x14, 0x0, 0x0
+ createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xe0, 0x14, 0x2, 0x0
+ delay 0x4
+ return
+
+Move_FISHIOUS_REND::
+ loadspritegfx ANIM_TAG_SHARP_TEETH @Teeth
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x726A @Blue Teeth
+ playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET
+ launchtemplate gFishiousRendTeethTemplate, 0x80, 0x2, 50, 4
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x4 0x0 0xC 0x2
+ call FishousRendBubbles
+ waitforvisualfinish
+ end
+FishousRendBubbles:
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xF 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xF 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xffec 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xffec 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff1 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfff6 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xfffb 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x0 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0x5 0x0
+ delay 0x2
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0
+ launchtemplate gSmallDriftingBubblesSpriteTemplate 0x4 0x2 0xA 0x0
+ return
+
+Move_COURT_CHANGE::
+ goto Move_TRICK_ROOM
+
+Move_CLANGOROUS_SOUL::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_WATER_ORB @blue
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @purple
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey
+ loadspritegfx ANIM_TAG_SPARKLE_2 @stars
+ launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0
+ call ClangorousSoulStarBuffEffect
+ call ClangorousSoulStarBuffEffect
+ call ClangorousSoulStarBuffEffect
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @fist
+ createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0xfff0, 0, 0, 0, 10, ANIM_ATTACKER, ANIM_RIGHT_FIST, 1
+ createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0x10, 0, 0, 0, 10, ANIM_ATTACKER, ANIM_LEFT_FIST, 1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ playsewithpan SE_SHINY, SOUND_PAN_ATTACKER
+ launchtemplate gClangorousSoulRedRingTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ waitforvisualfinish
+ end
+ClangorousSoulStarBuffEffect:
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtemplate gClangorousSoulBlueBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gClangorousSoulPurpleBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c
+ delay 0x4
+ launchtemplate gClangorousSoulWhiteBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c
+ return
+
+Move_BODY_PRESS::
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly and bounce animation
+ loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 0xD, 0xD, 0x1E5D @Orange
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0
+ delay 0x7
+ launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150 @Fly up
+ waitforvisualfinish
+ delay 0x2F
+ launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0 @Bounce down
+ delay 0x2
+ playsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_SquishTarget 0x2 0x0
+ waitforvisualfinish
+ end
+
+Move_DECORATE::
+ goto Move_FLOWER_SHIELD
+
+Move_DRUM_BEATING::
+ loadspritegfx ANIM_TAG_MUSIC_NOTES
+ loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE
+ loadspritegfx ANIM_TAG_ROOTS
+ loadspritegfx ANIM_TAG_IMPACT
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_MUSIC_NOTES, 0, 0xD, 0xD, 0x03AC @Green
+ monbg ANIM_TARGET
+ splitbgprio ANIM_TARGET
+ setalpha 12, 8
+ call BellyDrumRight
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0
+ playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER
+ delay 0xf
+ call BellyDrumLeft
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0
+ playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER
+ delay 0xf
+ call BellyDrumRight
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80
+ playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER
+ delay 0x7
+ call BellyDrumLeft
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80
+ playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER
+ delay 0x7
+ call BellyDrumRight
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0
+ playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER
+ delay 0x7
+ call BellyDrumLeft
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0
+ playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER
+ launchtemplate gFrenzyPlantRootSpriteTemplate 0x2 0x6 0x55 0x10 0x6 0x0 0x3 0x50
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET
+ delay 0x5
+ launchtemplate gFrenzyPlantRootSpriteTemplate 0x2 0x6 0x55 0xfff0 0xfffa 0x0 0x2 0x4b
+ playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET
+ delay 0x5
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff6 0xfff6 0x1 0x3
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x3 0x5 ANIM_TARGET 0x8 0x0 0x14 0x1
+ delay 0x3
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xa 0x8 0x1 0x3
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ delay 0x3
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xa 0xfffd 0x1 0x2
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ delay 0x3
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfffd 0x1 0x1 0x2
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0xfff6 0x1 0x1 0x1
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0xa 0x1 0x1
+ playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ blendoff
+ end
+
+Move_SNAP_TRAP:: @ placeholder
+ goto Move_BITE
+
+Move_PYRO_BALL::
+ loadspritegfx ANIM_TAG_FLAT_ROCK
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop
+ launchtemplate gPyroBallRockTemplate, 2, 0x3, 0, 0, 0
+ delay 0x19
+ playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop
+ delay 0x19
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x3 0x0 0x7 0x043D
+ launchtemplate gPyroBallBurningRockTemplate, 2, 0x3, 0, 0, 0
+ delay 0x19
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET
+ delay 0x19
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET
+ launchtemplate gPyroBallFlamesUpTemplate, 2, 0x3, 0, 0, 1
+ delay 0x19
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
+ launchtemplate gPyroBallEmberBallTemplate, 2, 0x6, 0, 10, 0, 5, 20, -20
+ waitforvisualfinish
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_DEF 0x2 0x2 0x0 0xc 0x1f
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0xf 0x1
+ call FireSpreadEffect
+ delay 0x20
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x7 0x0 0x043D
+ waitforvisualfinish
+ end
+
+Move_BEHEMOTH_BLADE::
+ goto Move_SACRED_SWORD
+
+Move_BEHEMOTH_BASH::
+ goto Move_SUNSTEEL_STRIKE
+
+Move_AURA_WHEEL::
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_SPARK
+ loadspritegfx ANIM_TAG_SPARK_2
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK, 0x0, 0xC, 0xC, 0x303B @Pinkish-Red Electricity
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0x0, 0xC, 0xC, 0x76E1 @Blue Electricity
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0x0, 0xA, 0xA, 0x303B @Pinkish-Red
+ setalpha 12, 8
+ monbg ANIM_DEF_PARTNER
+ splitbgprio_foes ANIM_TARGET
+ launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x0
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gAuraWheelRedElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x4
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x8
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gAuraWheelRedElectricityTemplate 3, 0x4 0x0 0x0 0x38 0xc
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x10
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gAuraWheelRedElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gAuraWheelBlueElectricityTemplate 3, 0x4 0x0 0x0 0x38 0x18
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 2, 0x5 0x0 0x18 0x0 0x0 0x6
+ delay 0x4
+ playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x17 0x1
+ launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0xfff6 0x0 0x1 0x0
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 2, 12, 0, 0x76E1 @Revert blue Electricity
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84, 0x8 0x0 0x0 0x30 0x2c 0xc0 0x28 0x2 0x8003
+ delay 0x7
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 2, 0x3 0x0 0x0 0x9
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
+Move_BREAKING_SWIPE::
+ loadspritegfx ANIM_TAG_IMPACT @hits
+ loadspritegfx ANIM_TAG_SPARK_2
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, 0x001F @Red
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0, 12, 12, 0x001F @Red
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xffe0 0xfff0 0x1 0x1
+ launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0x5 0x0 0x5 0x0
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x3 0x15 0x1
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x0 0x3 0x15 0x1
+ delay 0x4
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x1
+ launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gRandomPosHitSplatSpriteTemplate 0x83 0x2 0x1 0x1
+ launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0xfff8 0x8 0x5 0x2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x20 0x14 0x1 0x1
+ launchtemplate gBreakingSwipeCenteredElectricity 0x82, 0x4, 0xffec 0xf 0x5 0x1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitsound
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_TARGET
+ end
+
+Move_BRANCH_POKE::
+ loadspritegfx ANIM_TAG_BRANCH
+ loadspritegfx ANIM_TAG_IMPACT
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ launchtemplate gBranchPokeBranchTemplate, 0x82, 0x3 0x0 0x0 0x25
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x5 0x0 0x6 0x1
+ launchtemplate gFlashingHitSplatSpriteTemplate, 0x83, 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ waitforvisualfinish
+ end
+
+Move_OVERDRIVE::
+ loadspritegfx ANIM_TAG_THIN_RING
+ loadspritegfx ANIM_TAG_SPARK_2
+ loadspritegfx ANIM_TAG_ELECTRICITY
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0, 12, 12, 0x76E1 @Blue Electricity
+ call BoltBeakSparks
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_THIN_RING, 0, 12, 12, 0x17BF @Yellow Electricity
+ call OverdriveRings
+ delay 0x8
+ call OverdriveRings
+ delay 0x10
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_THIN_RING, 0, 0, 12, 0x76E1 @Blue Electricity
+ waitforvisualfinish
+ end
+OverdriveRings:
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET
+ launchtemplate gSimplePaletteBlendSpriteTemplate 0x2 0x5 0x1f 0x3 0x8 0x0 0x3ff
+ launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffb 0xfffb 0x5 0x0 0x0
+ launchtemplate gHyperVoiceRingSpriteTemplate 0x0 0x7 0x2d 0x0 0x0 0x0 0x0 0x0 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x1 0x0 0x6 0x1
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x3 0x1 0x0 0x6 0x1
+ launchtask AnimTask_ShakeBattleTerrain 0x2 0x4 0x1 0x0 0x6 0x1
+ launchtask SoundTask_WaitForCry 0x5 0x0
+ return
+
+Move_APPLE_ACID::
+ loadspritegfx ANIM_TAG_APPLE
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, 0x061D @Orange
+ playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER
+ launchtemplate gAppleAcidFloatingAppleTemplate 0xc 0x1 0x0
+ delay 0x30
+ monbg ANIM_TARGET
+ launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0x0 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ delay 0x5
+ launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0x18 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ delay 0x5
+ launchtemplate gAppleAcidLaunchTemplate 0x82, 0x6 0x14 0x0 0x28 0x1 0xffe8 0x0
+ playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
+ delay 0xf
+ launchtask AnimTask_ShakeMon2 0x5 0x5 ANIM_TARGET 0x2 0x0 0xa 0x1
+ launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0x0 0xffea 0x0 0xf 0x37
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 0xa
+ launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xffe6 0xffe8 0x0 0xf 0x37
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 0xa
+ launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xf 0xffe5 0x0 0xf 0x32
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 0xa
+ launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0xfff1 0xffef 0x0 0xa 0x2d
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ delay 0xa
+ launchtemplate gAppleAcidDripTemplate 0x82, 0x5 0x1b 0xffea 0x0 0xf 0x32
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+Move_GRAV_APPLE::
+ loadspritegfx ANIM_TAG_APPLE
+ fadetobg BG_IN_AIR
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff
+ waitbgfadein
+ call SmallAppleShower
+ call SmallAppleShower
+ launchtemplate gGravAppleLargeApple, 0x82, 0x4, 0x0, 0x3c, 4, ANIM_TARGET
+ delay 0x7
+ playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0 0x15 0x0 0x4
+ delay 0x30
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10
+ waitforvisualfinish
+ call UnsetPsychicBg
+ end
+SmallAppleShower:
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, 35, 0x3c, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, -30, 0x44, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, 27, 0x37, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, -20, 0x32, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, 33, 0x3a, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, -12, 0x3a, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, 19, 0x3c, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, -38, 0x3a, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, 5, 0x3c, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ launchtemplate gGravAppleSmallApple, 0x82, 0x4, -23, 0x28, 4, ANIM_TARGET
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x2
+ return
+
+Move_SPIRIT_BREAK::
+ goto Move_PSYCHIC
+
+Move_STRANGE_STEAM::
+ loadspritegfx ANIM_TAG_PINK_CLOUD
+ loadspritegfx ANIM_TAG_FINGER
+ loadspritegfx ANIM_TAG_WATER_GUN @blue colour
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FINGER, 0, 10, 10, 0x4798 @Green
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x4, 0xA
+ call StrangeSteamCloud
+ call StrangeSteamCloud
+ call StrangeSteamCloud
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x2 0x0 0x2A 0x1
+ call StrangeSteamCloud
+ call StrangeSteamCloud
+ call StrangeSteamCloud
+ call StrangeSteamCloud
+ call StrangeSteamCloud
+ call StrangeSteamCloud
+ call StrangeSteamCloud
+ call StrangeSteamCloud
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+StrangeSteamCloud:
+ launchtemplate gStrangeSteamPinkCloudTemplate 0x82 0x5 0xf 0xf 0x14 0x0 0x0
+ launchtemplate gStrangeSteamGreenCloudTemplate 0x82 0x5 0xf 0xf 0x14 0xa 0x5
+ launchtemplate gStrangeSteamPinkCloudTemplate 0x82 0x5 0xf 0xf 0x14 0xfff6 0xfffb
+ launchtemplate gStrangeSteamGreenCloudTemplate 0x82 0x5 0xf 0xf 0x14 0x14 0xa
+ launchtemplate gStrangeSteamBlueCloudTemplate 0x82 0x5 0xf 0xf 0x14 0xffec 0xfff6
+ delay 0x2
+ return
+
+Move_LIFE_DEW::
+ loadspritegfx ANIM_TAG_WATER_DROPLET
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ monbg ANIM_ATK_PARTNER
+ launchtemplate gLifeDewDropletTemplate, 2, 0x3, 0, 0, ANIM_ATTACKER
+ launchtemplate gLifeDewDropletTemplate, 2, 0x3, 0, 0, ANIM_ATK_PARTNER
+ delay 0x15
+ playsewithpan SE_M_BUBBLE, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER
+ launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 0, -5, ANIM_ATTACKER, FALSE
+ launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 0, -5, ANIM_ATK_PARTNER, FALSE
+ delay 0x7
+ launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, 10, ANIM_ATTACKER, FALSE
+ launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, 10, ANIM_ATK_PARTNER, FALSE
+ delay 0x7
+ launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, -15, ANIM_ATTACKER, FALSE
+ launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, -15, -15, ANIM_ATK_PARTNER, FALSE
+ delay 0x7
+ launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 10, -5, ANIM_ATTACKER, FALSE
+ launchtemplate gLifeDewSpecialOrbsTemplate, 2, 0x4, 10, -5, ANIM_ATK_PARTNER, FALSE
+ delay 0x7
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ end
+
+Move_OBSTRUCT::
+ loadspritegfx ANIM_TAG_NOISE_LINE @growl
+ loadspritegfx ANIM_TAG_PROTECT
+ loadspritegfx ANIM_TAG_OBSTRUCT_CROSS
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_NOISE_LINE, 0, 10, 10, 0 @Black
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 10, 10, 0 @Black
+ launchtask SoundTask_PlayDoubleCry 0x2 0x2 ANIM_ATTACKER 0xff
+ call RoarEffect
+ waitforvisualfinish
+ delay 0x10
+ monbg ANIM_ATK_PARTNER
+ splitbgprio ANIM_ATTACKER
+ waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10
+ launchtemplate gProtectSpriteTemplate, 2, 0x3 0x18 0x0 0x5a @;Protect
+ waitforvisualfinish
+ launchtemplate gObstructCrossTemplate, 2, 0x4 0x0 0x0 0x1 0x24
+ playsewithpan SE_M_LEER, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ end
+
+Move_FALSE_SURRENDER::
+ goto Move_FEINT
+
+Move_METEOR_ASSAULT::
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS
+ loadspritegfx ANIM_TAG_METEOR
+ loadspritegfx ANIM_TAG_EXPLOSION
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 12, 12, 0x0B1D @Light orange
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_ATK, 1, 0, 9, 0x0B1D @Light orange
+ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x30 0x0 0x4
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ invisible ANIM_ATTACKER
+ launchtemplate gGrowingSuperpowerTemplate, 0x83, 0x1 0x0
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ delay 0xF
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_ATK | ANIM_PAL_BG), 1, 0x10, 0x10, 0x7FFF @Screen flash white
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0 0x5 0x20 0x1
+ call BasicExplosion
+ call BasicExplosion
+ waitforvisualfinish
+ visible ANIM_ATTACKER
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, (ANIM_PAL_ATK | ANIM_PAL_BG), 1, 0x10, 0, 0x7FFF @Screen revert from white
+ waitforvisualfinish
+ end
+BasicExplosion:
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x0 0x0 0x1 0x1
+ delay 0x3
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x18 0xffe8 0x1 0x1
+ delay 0x3
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0xfff0 0x10 0x1 0x1
+ delay 0x3
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0xffe8 0xfff4 0x1 0x1
+ delay 0x3
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate, 0x83, 0x4 0x10 0x10 0x1 0x1
+ return
+
+Move_ETERNA_BEAM::
+ goto Move_HYPER_BEAM
+
+Move_STEEL_BEAM::
+ loadspritegfx ANIM_TAG_CLAW_SLASH
+ loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
+ createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0
+ delay 48
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS
+ loadspritegfx ANIM_TAG_GUST
+ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x14 0x0 0x2
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 20
+ loadspritegfx ANIM_TAG_STEEL_BEAM
+ call SetSteelBeamBackground
+ panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
+ createvisualtask AnimTask_CreateSmallSteelBeamOrbs, 5
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1
+ delay 4
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 10, RGB(24, 24, 48)
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2
+ delay 4
+ createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 65, 1
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6
+ delay 4
+ call SteelBeam_Continuity
+ call SteelBeam_Continuity
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 10, 0, RGB(24, 24, 48)
+ call UnsetHighSpeedBg
+ end
+SteelBeam_Continuity:
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5
+ delay 4
+ createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6
+ delay 4
+ return
+SetSteelBeamBackground:
+ createvisualtask AnimTask_GetAttackerSide, 2
+ jumprettrue SetSteelBeamBgPlayer
+ fadetobg BG_STEEL_BEAM_OPPONENT
+ goto SetHighSpeedBgFade
+SetSteelBeamBgPlayer:
+ fadetobg BG_STEEL_BEAM_PLAYER
+
+Move_EXPANDING_FORCE::
+ end @to do:
+
+Move_STEEL_ROLLER::
+ goto Move_GYRO_BALL
+
+Move_SCALE_SHOT::
+ end @to do:
+
+Move_METEOR_BEAM::
+ end @to do:
+
+Move_SHELL_SIDE_ARM::
+ launchtask AnimTask_ShellSideArm 0x5 0x0
+ jumpargeq 0x0, TRUE, Move_SHELL_SIDE_ARM_PHYSICAL
+ jumpargeq 0x0, FALSE, Move_SHELL_SIDE_ARM_SPECIAL
+Move_SHELL_SIDE_ARM_PHYSICAL: @ Modified Body Slam, placeholder
+ loadspritegfx ANIM_TAG_IMPACT
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 6, 6, RGB_MAGENTA
+ monbg ANIM_DEF_PARTNER
+ setalpha 12, 8
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, ANIM_ATTACKER
+ waitforvisualfinish
+ delay 11
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5
+ delay 6
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0
+ loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2
+ delay 1
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3
+ waitforvisualfinish
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1
+ waitforvisualfinish
+ delay 10
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6
+ delay 5
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+Move_SHELL_SIDE_ARM_SPECIAL: @ Modified Snipe Shot, placeholder
+ loadspritegfx ANIM_TAG_IMPACT_2
+ loadspritegfx ANIM_TAG_LEER
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT_2, 0, 6, 6, RGB_MAGENTA
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LEER, 0, 6, 6, RGB_MAGENTA
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x82, 2 0x18 -12
+ waitforvisualfinish
+ delay 0x20
+ playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET
+ launchtemplate gSnipeShotBallTemplate 0x82, 3, 0 0 24,
+ waitforvisualfinish
+ launchtask AnimTask_ShakeMon2 2 5 1 4 0 8, 1
+ waitforvisualfinish
+ end
+
+Move_MISTY_EXPLOSION::
+ end @to do:
+
+Move_GRASSY_GLIDE::
+ end @to do:
+
+Move_RISING_VOLTAGE::
+ end @to do:
+
+Move_TERRAIN_PULSE::
+ loadspritegfx ANIM_TAG_DRAGON_PULSE
+ monbg ANIM_TARGET
+ setalpha 12, 8
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK
+ launchtask AnimTask_TerrainPulse 0x5 0x0
+ jumpargeq 0x0, TYPE_ELECTRIC, TerrainPulseElectric
+ jumpargeq 0x0, TYPE_GRASS, TerrainPulseGrass
+ jumpargeq 0x0, TYPE_FAIRY, TerrainPulseFairy
+ jumpargeq 0x0, TYPE_PSYCHIC, TerrainPulsePsychic
+TerrainPulseNormal:
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB_WHITE
+ waitforvisualfinish
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
+ call DragonPulseParticle
+ call DragonPulseParticle
+ createvisualtask AnimTask_SwayMon, 5, 0, 2, 51200, 24, ANIM_TARGET
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB_WHITE
+ goto TerrainPulseEnd
+
+TerrainPulseElectric:
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(27, 27, 0)
+ waitforvisualfinish
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
+ call DragonPulseParticle
+ call DragonPulseParticle
+ createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(27, 27, 0)
+ goto TerrainPulseEnd
+
+TerrainPulseGrass:
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(11, 26, 11)
+ waitforvisualfinish
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
+ call DragonPulseParticle
+ call DragonPulseParticle
+ createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(11, 26, 11)
+ goto TerrainPulseEnd
+
+TerrainPulseFairy:
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(31, 24, 31)
+ waitforvisualfinish
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
+ call DragonPulseParticle
+ call DragonPulseParticle
+ createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(31, 24, 31)
+ goto TerrainPulseEnd
+
+TerrainPulsePsychic:
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(27, 0, 13)
+ waitforvisualfinish
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
+ call DragonPulseParticle
+ call DragonPulseParticle
+ createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
+ createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(27, 0, 13)
+ goto TerrainPulseEnd
+
+TerrainPulseEnd:
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ call DragonPulseParticle
+ waitforvisualfinish
+ delay 1
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, RGB_BLACK
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_TARGET
+ end
+
+Move_SKITTER_SMACK::
+ end @to do:
+
+Move_BURNING_JEALOUSY::
+ goto Move_OVERHEAT
+
+Move_LASH_OUT::
+ end @to do:
+
+Move_POLTERGEIST::
+ loadspritegfx ANIM_TAG_EYE_SPARKLE
+ loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond
+ loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_POLTERGEIST
+ fadetobg BG_NIGHTMARE
+ waitbgfadein
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 0, 16, RGB_BLACK
+ waitforvisualfinish
+ createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, -16, -8
+ createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 16, -8
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 16, 0, RGB_BLACK
+ playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER
+ delay 0x1
+ launchtask AnimTask_DestinyBondWhiteShadow 0x5 0x2 0x0 0x24
+ delay 0x30
+ playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET
+ createvisualtask AnimTask_PoltergeistItem, 2
+ waitforvisualfinish
+ setalpha 12, 8
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x5 0x5 0x1
+ launchtemplate gComplexPaletteBlendSpriteTemplate 0x2 0x7 0x7 0x5 0x1 0x0 0xa 0x0 0x0
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ launchtask AnimTask_NightmareClone 0x2 0x0
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x28 0x1
+ playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET
+ waitforvisualfinish
+ restorebg
+ waitbgfadein
+ clearmonbg 0x3
+ blendoff
+ end
+
+Move_CORROSIVE_GAS::
+ end @to do:
+
+Move_COACHING::
+ end @to do:
+
+Move_FLIP_TURN::
+ end @to do:
+
+Move_TRIPLE_AXEL::
+ end @to do:
+
+Move_DUAL_WINGBEAT::
+ end @to do:
+
+Move_SCORCHING_SANDS::
+ end @to do:
+
+Move_JUNGLE_HEALING::
+ goto Move_AROMATHERAPY
+
+Move_WICKED_BLOW::
+ end @to do:
+
+Move_SURGING_STRIKES::
+ end @to do:
+
+Move_THUNDER_CAGE::
+ end @to do:
+
+Move_DRAGON_ENERGY::
+ end @to do:
+
+Move_FREEZING_GLARE::
+ end @to do:
+
+Move_FIERY_WRATH::
+ end @to do:
+
+Move_THUNDEROUS_KICK::
+ end @to do:
+
+Move_GLACIAL_LANCE::
+ end @to do:
+
+Move_ASTRAL_BARRAGE::
+ end @to do:
+
+Move_EERIE_SPELL::
+ end @to do:
+
+@@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@
Move_NONE:
Move_MIRROR_MOVE:
Move_POUND:
@@ -936,6 +14835,25 @@ EmberFireHit:
delay 4
return
+SetImpactBackground:
+ delay 2
+ createvisualtask AnimTask_IsContest, 2
+ jumprettrue SetImpactContestsBG
+ createvisualtask AnimTask_IsTargetPlayerSide, 2
+ jumpretfalse SetImpactOpponentBG
+ jumprettrue SetImpactPlayerBG
+SetImpactBackgroundRet:
+ return
+SetImpactOpponentBG:
+ changebg BG_IMPACT_OPPONENT
+ goto SetImpactBackgroundRet
+SetImpactPlayerBG:
+ changebg BG_IMPACT_PLAYER
+ goto SetImpactBackgroundRet
+SetImpactContestsBG:
+ changebg BG_IMPACT_CONTESTS
+ goto SetImpactBackgroundRet
+
Move_MEGA_PUNCH:
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
@@ -960,24 +14878,6 @@ Move_MEGA_PUNCH:
restorebg
waitbgfadein
end
-SetImpactBackground:
- delay 2
- createvisualtask AnimTask_IsContest, 2
- jumprettrue SetImpactContestsBG
- createvisualtask AnimTask_IsTargetPlayerSide, 2
- jumpretfalse SetImpactOpponentBG
- jumprettrue SetImpactPlayerBG
-SetImpactBackgroundRet:
- return
-SetImpactOpponentBG:
- changebg BG_IMPACT_OPPONENT
- goto SetImpactBackgroundRet
-SetImpactPlayerBG:
- changebg BG_IMPACT_PLAYER
- goto SetImpactBackgroundRet
-SetImpactContestsBG:
- changebg BG_IMPACT_CONTESTS
- goto SetImpactBackgroundRet
Move_MEGA_KICK:
loadspritegfx ANIM_TAG_IMPACT
@@ -2704,7 +16604,7 @@ Move_MEDITATE:
delay 16
playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
waitforvisualfinish
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_AGILITY:
@@ -2771,7 +16671,7 @@ Move_TELEPORT:
createvisualtask AnimTask_Teleport, 2
playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
delay 15
- call UnsetPsychicBackground
+ call UnsetPsychicBg
waitforvisualfinish
end
@@ -2864,7 +16764,7 @@ Move_AMNESIA:
delay 54
loopsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER, 16, 3
waitforvisualfinish
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_KINESIS:
@@ -2883,7 +16783,7 @@ Move_KINESIS:
delay 70
playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER
waitforvisualfinish
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_GLARE:
@@ -3122,17 +17022,31 @@ Move_SPITE:
clearmonbg ANIM_TARGET
end
+SetHighSpeedBg:
+ createvisualtask AnimTask_GetAttackerSide, 2
+ jumprettrue SetHighSpeedBgPlayer
+ fadetobg BG_HIGHSPEED_OPPONENT
+ goto SetHighSpeedBgFade
+SetHighSpeedBgPlayer:
+ fadetobg BG_HIGHSPEED_PLAYER
+SetHighSpeedBgFade:
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 5, -2304, 0, 1, -1
+ waitbgfadein
+ return
+
+UnsetHighSpeedBg:
+ restorebg
+ waitbgfadeout
+ setarg 7, -1
+ waitbgfadein
+ return
+
Move_MACH_PUNCH:
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
monbg ANIM_ATK_PARTNER
- createvisualtask AnimTask_GetAttackerSide, 2
- jumprettrue MachPunchAgainstPlayer
- fadetobg BG_HIGHSPEED_OPPONENT
-MachPunchContinue:
- waitbgfadeout
- createvisualtask AnimTask_StartSlidingBg, 5, -2304, 0, 1, -1
- waitbgfadein
+ call SetHighSpeedBg
delay 0
setalpha 9, 8
createvisualtask AnimTask_AttackerPunchWithTrace, 2, RGB(8, 9, 28), 10
@@ -3145,14 +17059,8 @@ MachPunchContinue:
waitforvisualfinish
clearmonbg ANIM_ATK_PARTNER
blendoff
- restorebg
- waitbgfadeout
- setarg 7, 0xFFFF
- waitbgfadein
+ call UnsetHighSpeedBg
end
-MachPunchAgainstPlayer:
- fadetobg BG_HIGHSPEED_PLAYER
- goto MachPunchContinue
Move_FORESIGHT:
loadspritegfx ANIM_TAG_MAGNIFYING_GLASS
@@ -3386,13 +17294,7 @@ Move_MOONLIGHT:
Move_EXTREME_SPEED:
loadspritegfx ANIM_TAG_SPEED_DUST
loadspritegfx ANIM_TAG_IMPACT
- createvisualtask AnimTask_GetAttackerSide, 2
- jumprettrue ExtremeSpeedAgainstPlayer
- fadetobg BG_HIGHSPEED_OPPONENT
-ExtremeSpeedContinue:
- waitbgfadeout
- createvisualtask AnimTask_StartSlidingBg, 5, -2304, 0, 1, -1
- waitbgfadein
+ call SetHighSpeedBg
createvisualtask AnimTask_AttackerStretchAndDisappear, 2
loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 3
waitforvisualfinish
@@ -3417,19 +17319,13 @@ ExtremeSpeedContinue:
createvisualtask AnimTask_ExtremeSpeedMonReappear, 2
loopsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 8, 4
waitforvisualfinish
- restorebg
- waitbgfadeout
- setarg 7, 0xFFFF
- waitbgfadein
+ call UnsetHighSpeedBg
clearmonbg ANIM_TARGET
blendoff
delay 1
setarg 7, 0x1000
delay 1
end
-ExtremeSpeedAgainstPlayer:
- fadetobg BG_HIGHSPEED_PLAYER
- goto ExtremeSpeedContinue
Move_UPROAR:
loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
@@ -3536,7 +17432,7 @@ Move_FACADE:
loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 24, 3
end
-Move_SMELLING_SALT:
+Move_SMELLING_SALTS:
loadspritegfx ANIM_TAG_TAG_HAND
loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT
createsprite gSmellingSaltsHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 2
@@ -3831,7 +17727,7 @@ Move_SKILL_SWAP:
createvisualtask AnimTask_SkillSwap, 3, ANIM_ATTACKER
createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB_WHITE, 12, 3, 1
waitforvisualfinish
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_IMPRISON:
@@ -3848,7 +17744,7 @@ Move_IMPRISON:
createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 1, 10
playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_ATTACKER
clearmonbg ANIM_DEF_PARTNER
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_GRUDGE:
@@ -3943,7 +17839,7 @@ Move_LUSTER_PURGE:
waitforvisualfinish
clearmonbg ANIM_ATTACKER
blendoff
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_MIST_BALL:
@@ -4338,7 +18234,7 @@ Move_EXTRASENSORY:
waitforvisualfinish
blendoff
clearmonbg ANIM_DEF_PARTNER
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_AERIAL_ACE:
@@ -4554,10 +18450,10 @@ Move_SHOCK_WAVE:
delay 12
createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2
delay 30
- createvisualtask AnimTask_ShockWaveProgressingBolt, 5
+ createvisualtask AnimTask_ShockWaveProgressingBolt, 5, ANIM_TARGET
delay 12
waitforvisualfinish
- createvisualtask AnimTask_ShockWaveLightning, 5
+ createvisualtask AnimTask_ShockWaveLightning, 5, ANIM_TARGET
playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
waitforvisualfinish
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1
@@ -4721,7 +18617,7 @@ Move_CONFUSION:
clearmonbg ANIM_DEF_PARTNER
blendoff
delay 1
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_PSYCHIC:
@@ -4738,7 +18634,7 @@ Move_PSYCHIC:
clearmonbg ANIM_DEF_PARTNER
blendoff
delay 1
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_FUTURE_SIGHT:
@@ -4746,7 +18642,7 @@ Move_FUTURE_SIGHT:
FutureSightContinue:
waitforvisualfinish
delay 1
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
FutureSight:
monbg ANIM_ATK_PARTNER
@@ -4769,7 +18665,7 @@ Move_THUNDER:
waitbgfadein
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK
delay 16
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
delay 1
createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 16, -36
@@ -4786,7 +18682,7 @@ Move_THUNDER:
createsprite gLightningSpriteTemplate, ANIM_TARGET, 6, -16, 16
playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
delay 5
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 1
createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 24, -32
delay 1
@@ -4794,9 +18690,9 @@ Move_THUNDER:
delay 1
createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 24, 16
delay 30
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 5
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 1
createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -32
playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
@@ -4805,11 +18701,11 @@ Move_THUNDER:
delay 1
createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16
delay 10
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 1
createvisualtask AnimTask_ShakeTargetInPattern, 2, 30, 3, TRUE, 0
delay 2
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 1
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK
waitforvisualfinish
@@ -4831,7 +18727,7 @@ Move_THUNDER_PUNCH:
createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1
delay 1
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 1
createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48
delay 1
@@ -4840,7 +18736,7 @@ Move_THUNDER_PUNCH:
createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, 16
delay 1
playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 2
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2
@@ -4868,12 +18764,12 @@ Move_SACRED_FIRE:
delay 1
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 20, 10, 50, 5, 1, 1
delay 1
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 1
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 16, 50, 5, 0, 1
delay 1
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -20, 10, 50, 5, -1, 1
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 1
waitforvisualfinish
playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
@@ -4885,10 +18781,10 @@ Move_SACRED_FIRE:
playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
createsprite gLargeFlameSpriteTemplate, ANIM_TARGET, 2, 16, 0, 80, 16, 0, 1
delay 1
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 1
waitforvisualfinish
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 1
playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 0
@@ -5520,13 +19416,7 @@ SolarBeamUnleash1:
Move_BLIZZARD:
loadspritegfx ANIM_TAG_ICE_CRYSTALS
monbg ANIM_DEF_PARTNER
- createvisualtask AnimTask_GetAttackerSide, 2
- jumprettrue BlizzardAgainstPlayer
- fadetobg BG_HIGHSPEED_OPPONENT
-BlizzardContinue:
- waitbgfadeout
- createvisualtask AnimTask_StartSlidingBg, 5, -2304, 0, 1, -1
- waitbgfadein
+ call SetHighSpeedBg
waitforvisualfinish
panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
call BlizzardIceCrystals
@@ -5536,10 +19426,7 @@ BlizzardContinue:
call IceCrystalEffectLong
waitforvisualfinish
delay 20
- restorebg
- waitbgfadeout
- setarg 7, 0xFFFF
- waitbgfadein
+ call UnsetHighSpeedBg
clearmonbg ANIM_DEF_PARTNER
end
BlizzardIceCrystals:
@@ -5565,9 +19452,6 @@ BlizzardIceCrystals:
createsprite gBlizzardIceCrystalSpriteTemplate, ANIM_ATTACKER, 40, 0, 20, 0, 20, 80, 0, 0, 1
delay 3
return
-BlizzardAgainstPlayer:
- fadetobg BG_HIGHSPEED_PLAYER
- goto BlizzardContinue
Move_POWDER_SNOW:
loadspritegfx ANIM_TAG_ICE_CRYSTALS
@@ -5999,31 +19883,31 @@ SludgeBombProjectile:
Move_ACID:
loadspritegfx ANIM_TAG_POISON_BUBBLE
monbg ANIM_DEF_PARTNER
- createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0
+ createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, TRUE
playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
delay 5
- createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 24, 0
+ createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 24, 0, TRUE
playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
delay 5
- createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, -24, 0
+ createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, -24, 0, TRUE
playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
delay 15
createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1
createvisualtask AnimTask_ShakeMon2, 5, ANIM_DEF_PARTNER, 2, 0, 10, 1
createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 2, 2, 0, 12, RGB(30, 0, 31)
- createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -22, 0, 15, 55
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -22, 0, 15, 55, TRUE
playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
delay 10
- createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, -26, -24, 0, 15, 55
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, -26, -24, 0, 15, 55, TRUE
playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
delay 10
- createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 15, -27, 0, 15, 50
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 15, -27, 0, 15, 50, TRUE
playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
delay 10
- createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, -15, -17, 0, 10, 45
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, -15, -17, 0, 10, 45, TRUE
playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
delay 10
- createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 27, -22, 0, 15, 50
+ createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 27, -22, 0, 15, 50, TRUE
playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET
waitforvisualfinish
clearmonbg ANIM_DEF_PARTNER
@@ -6296,7 +20180,7 @@ Move_CRABHAMMER:
end
Move_SURF:
- createvisualtask AnimTask_CreateSurfWave, 2, FALSE
+ createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SURF
delay 24
panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
waitforvisualfinish
@@ -6406,7 +20290,7 @@ FlyUnleash:
monbg ANIM_DEF_PARTNER
setalpha 12, 8
playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
- createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20
+ createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE
delay 20
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1
@@ -6495,7 +20379,7 @@ Move_JUMP_KICK:
blendoff
end
-Move_HI_JUMP_KICK:
+Move_HIGH_JUMP_KICK:
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -6968,7 +20852,7 @@ Move_FIRE_PUNCH:
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1
call FireSpreadEffect
delay 4
- playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
waitforvisualfinish
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 9, 0, RGB_RED
waitforvisualfinish
@@ -7027,7 +20911,7 @@ Move_DREAM_EATER:
clearmonbg ANIM_DEF_PARTNER
blendoff
delay 1
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
DreamEaterAbsorb:
playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
@@ -7145,7 +21029,7 @@ Move_PSYBEAM:
call PsybeamRings
waitforvisualfinish
delay 1
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
PsybeamRings:
createsprite gGoldRingSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 13, 0
@@ -7161,7 +21045,7 @@ Move_HYPNOSIS:
createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 18, 31)
waitforvisualfinish
delay 1
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
HypnosisRings:
playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER
@@ -7185,7 +21069,7 @@ Move_PSYWAVE:
call PsywaveRings
waitforvisualfinish
delay 1
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
PsywaveRings:
createsprite gPsywaveRingSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, 16
@@ -7494,7 +21378,7 @@ Move_SPIDER_WEB:
call SpiderWebThread
waitforvisualfinish
playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
- createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2
+ createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, FALSE
waitforvisualfinish
clearmonbg ANIM_DEF_PARTNER
delay 1
@@ -8049,7 +21933,7 @@ Move_TRI_ATTACK:
createvisualtask AnimTask_ShakeTargetInPattern, 2, 20, 3, TRUE, 1
waitforvisualfinish
loadspritegfx ANIM_TAG_LIGHTNING
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48
delay 1
@@ -8059,7 +21943,7 @@ Move_TRI_ATTACK:
delay 20
createvisualtask AnimTask_ShakeTargetInPattern, 2, 20, 3, TRUE, 0
delay 2
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
waitforvisualfinish
loadspritegfx ANIM_TAG_ICE_CRYSTALS
call IceCrystalEffectShort
@@ -8278,7 +22162,7 @@ Move_TRANSFORM:
monbg ANIM_ATTACKER
playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48
- createvisualtask AnimTask_TransformMon, 2, 0
+ createvisualtask AnimTask_TransformMon, 2, 0, 0
waitforvisualfinish
clearmonbg ANIM_ATTACKER
end
@@ -8487,7 +22371,7 @@ Move_BLAZE_KICK:
createsprite gSpinningHandOrFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 30
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE
delay 30
- playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 14, 1
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE
@@ -8594,7 +22478,7 @@ ArmThrustLeft:
Move_MUDDY_WATER:
panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
- createvisualtask AnimTask_CreateSurfWave, 2, TRUE
+ createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_MUDDY_WATER
waitforvisualfinish
end
@@ -9102,7 +22986,7 @@ Move_BLAST_BURN:
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 40, 20, 24, 0, 0, 0
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 24, 0, 0, 0
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -40, 20, 24, 0, 0, 0
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 25
playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -96, 0, 24, 0, 0, 0
@@ -9116,7 +23000,7 @@ Move_BLAST_BURN:
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 60, 30, 24, 0, 0, 0
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 48, 24, 0, 0, 0
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -60, 30, 24, 0, 0, 0
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
waitforvisualfinish
clearmonbg ANIM_DEF_PARTNER
blendoff
@@ -9154,6 +23038,32 @@ Move_ROCK_TOMB:
waitforvisualfinish
end
+SetBugBg:
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 0, 4, RGB_BLACK
+ createvisualtask AnimTask_GetAttackerSide, 2
+ jumprettrue SetBugBgPlayer
+ fadetobg BG_BUG_OPPONENT
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 5, 1536, 0, 0, -1
+ goto SetBugBgFade
+SetBugBgPlayer:
+ fadetobg BG_BUG_PLAYER
+ waitbgfadeout
+ createvisualtask AnimTask_StartSlidingBg, 5, -1536, 0, 0, -1
+SetBugBgFade:
+ delay 0
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 4, 4, RGB_BLACK
+ waitbgfadein
+ return
+
+UnsetBugBg:
+ restorebg
+ waitbgfadeout
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 4, 0, RGB_BLACK
+ setarg 7, -1
+ waitbgfadein
+ return
+
Move_SILVER_WIND:
loadspritegfx ANIM_TAG_SPARKLE_6
panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
@@ -9162,16 +23072,7 @@ Move_SILVER_WIND:
monbg ANIM_DEF_PARTNER
splitbgprio_all
delay 0
- createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 0, 0, 4, RGB_BLACK
- createvisualtask AnimTask_GetTargetSide, 2
- jumprettrue SilverWindOnPlayer
- fadetobg BG_BUG_OPPONENT
- waitbgfadeout
- createvisualtask AnimTask_StartSlidingBg, 5, 1536, 0, 0, -1
-SilverWindContinue:
- delay 0
- createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 4, 4, RGB_BLACK
- waitbgfadein
+ call SetBugBg
createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1
createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1
createsprite gSilverWindBigSparkSpriteTemplate, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1
@@ -9199,17 +23100,8 @@ SilverWindContinue:
playsewithpan SE_M_GUST2, SOUND_PAN_TARGET
clearmonbg ANIM_DEF_PARTNER
delay 0
- restorebg
- waitbgfadeout
- createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 0, 4, 0, RGB_BLACK
- setarg 7, 0xFFFF
- waitbgfadein
+ call UnsetBugBg
end
-SilverWindOnPlayer:
- fadetobg BG_BUG_PLAYER
- waitbgfadeout
- createvisualtask AnimTask_StartSlidingBg, 5, -1536, 0, 0, -1
- goto SilverWindContinue
Move_SNATCH:
playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
@@ -9328,17 +23220,17 @@ Move_OVERHEAT:
delay 5
waitforvisualfinish
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, 3, ANIM_TARGET, 0
- playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 10, 0, 25, 1
delay 6
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, -5, ANIM_TARGET, 0
- playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
delay 8
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, 10, ANIM_TARGET, 0
- playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
delay 8
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 0
- playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
createvisualtask AnimTask_CopyPalFadedToUnfaded, 5, 1
delay 1
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, -1, 0, 13, RGB(18, 18, 18)
@@ -9368,7 +23260,7 @@ Move_HYDRO_CANNON:
playsewithpan SE_M_SURF, SOUND_PAN_ATTACKER
createsprite gHydroCannonChargeSpriteTemplate, ANIM_TARGET, 2
delay 10
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
delay 30
panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
call HydroCannonBeam
@@ -9385,7 +23277,7 @@ Move_HYDRO_CANNON:
call HydroCannonBeam
createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0
waitforvisualfinish
- createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257
+ createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4
waitforvisualfinish
clearmonbg ANIM_DEF_PARTNER
blendoff
@@ -9547,7 +23439,7 @@ Move_PSYCHO_BOOST:
waitforvisualfinish
clearmonbg ANIM_ATK_PARTNER
blendoff
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
Move_KNOCK_OFF:
@@ -9635,17 +23527,50 @@ Move_SKY_UPPERCUT:
end
Move_SECRET_POWER:
+ createvisualtask AnimTask_GetFieldTerrain, 5
+ jumpargeq 0, STATUS_FIELD_MISTY_TERRAIN, Move_FAIRY_WIND
+ jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, Move_NEEDLE_ARM
+ jumpargeq 0, STATUS_FIELD_ELECTRIC_TERRAIN, Move_THUNDER_SHOCK
+ jumpargeq 0, STATUS_FIELD_PSYCHIC_TERRAIN, Move_CONFUSION
createvisualtask AnimTask_GetBattleTerrain, 5
- jumpargeq 0, BATTLE_TERRAIN_GRASS, Move_NEEDLE_ARM
- jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, Move_MAGICAL_LEAF
- jumpargeq 0, BATTLE_TERRAIN_SAND, Move_MUD_SHOT
- jumpargeq 0, BATTLE_TERRAIN_UNDERWATER, Move_WATERFALL
- jumpargeq 0, BATTLE_TERRAIN_WATER, Move_SURF
- jumpargeq 0, BATTLE_TERRAIN_POND, Move_BUBBLE_BEAM
- jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, Move_ROCK_THROW
- jumpargeq 0, BATTLE_TERRAIN_CAVE, Move_BITE
- jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH
+ jumpargeq 0, BATTLE_TERRAIN_GRASS, Move_NEEDLE_ARM
+ jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, Move_MAGICAL_LEAF
+ jumpargeq 0, BATTLE_TERRAIN_SAND, Move_MUD_SHOT
+ jumpargeq 0, BATTLE_TERRAIN_UNDERWATER, Move_WATERFALL
+ jumpargeq 0, BATTLE_TERRAIN_WATER, Move_SURF
+ jumpargeq 0, BATTLE_TERRAIN_POND, Move_BUBBLE_BEAM
+ jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, Move_ROCK_THROW
+ jumpargeq 0, BATTLE_TERRAIN_CAVE, Move_BITE
+ jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH
+ jumpargeq 0, BATTLE_TERRAIN_SOARING, Move_GUST
+ jumpargeq 0, BATTLE_TERRAIN_SKY_PILLAR, Move_GUST
+ jumpargeq 0, BATTLE_TERRAIN_BURIAL_GROUND, Move_SHADOW_SNEAK
+ jumpargeq 0, BATTLE_TERRAIN_PUDDLE, Move_MUD_SHOT
+ jumpargeq 0, BATTLE_TERRAIN_MARSH, Move_MUD_SHOT
+ jumpargeq 0, BATTLE_TERRAIN_SWAMP, Move_MUD_SHOT
+.if B_SECRET_POWER_ANIMATION >= GEN_7
+ jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_ICE_SHARD
+.else
+ jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_AVALANCHE
+.endif
+ jumpargeq 0, BATTLE_TERRAIN_ICE, Move_ICE_SHARD
+ jumpargeq 0, BATTLE_TERRAIN_VOLCANO, Move_INCINERATE
+ jumpargeq 0, BATTLE_TERRAIN_DISTORTION_WORLD, Move_POUND
+ jumpargeq 0, BATTLE_TERRAIN_SPACE, Move_SWIFT
+ jumpargeq 0, BATTLE_TERRAIN_ULTRA_SPACE, Move_PSYWAVE
+.if B_SECRET_POWER_ANIMATION >= GEN_7
+ jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_SPIT_UP
+ goto Move_SPIT_UP
+.elseif B_SECRET_POWER_ANIMATION == GEN_6
+ jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM
+ goto Move_BODY_SLAM
+.elseif B_SECRET_POWER_ANIMATION == GEN_5 || B_SECRET_POWER_ANIMATION == GEN_4
+ jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM
+ goto Move_MUD_SLAP
+.else
+ jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH
goto Move_SLAM
+.endif
Move_TWISTER:
loadspritegfx ANIM_TAG_LEAF
@@ -10130,21 +24055,22 @@ WaterBubblesEffectLong:
ElectricityEffect:
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET
- createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0
+ElectricityEffectNoSound:
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET
delay 2
- createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET
delay 2
- createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET
delay 2
- createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET
delay 2
- createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET
delay 2
- createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET
delay 2
- createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET
delay 2
- createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1
+ createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET
return
ConfusionEffect:
@@ -10163,7 +24089,7 @@ SetPsychicBackground:
waitbgfadein
return
-UnsetPsychicBackground:
+UnsetPsychicBg:
restorebg
waitbgfadeout
setarg 7, 0xFFFF
@@ -10296,6 +24222,9 @@ Status_Nightmare:
clearmonbg ANIM_DEF_PARTNER
end
+Status_Powder:
+ end
+
General_CastformChange:
createvisualtask AnimTask_IsMonInvisible, 2
jumpreteq TRUE, CastformChangeSkipAnim
@@ -10304,7 +24233,7 @@ CastformChangeContinue:
monbg ANIM_ATTACKER
playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48
- createvisualtask AnimTask_TransformMon, 2, 1
+ createvisualtask AnimTask_TransformMon, 2, 1, 0
waitforvisualfinish
clearmonbg ANIM_ATTACKER
end
@@ -10358,6 +24287,9 @@ General_TurnTrap:
jumpargeq 0, TRAP_ANIM_WHIRLPOOL, Status_Whirlpool
jumpargeq 0, TRAP_ANIM_CLAMP, Status_Clamp
jumpargeq 0, TRAP_ANIM_SAND_TOMB, Status_SandTomb
+ jumpargeq 0, TRAP_ANIM_MAGMA_STORM, Status_MagmaStorm
+ jumpargeq 0, TRAP_ANIM_INFESTATION, Status_Infestation
+ jumpargeq 0, TRAP_ANIM_SNAP_TRAP, Status_Snap_Trap
goto Status_BindWrap
Status_BindWrap:
loadspritegfx ANIM_TAG_TENDRILS
@@ -10383,6 +24315,32 @@ Status_FireSpin:
stopsound
end
+Status_MagmaStorm:
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ fadetobg BG_MAGMA_STORM
+ waitbgfadeout
+ createvisualtask AnimTask_MoveSeismicTossBg, 3
+ playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
+ loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 5, 8
+ createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3
+ createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1
+ createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7)
+ call FireSpinEffect
+ call FireSpinEffect
+ createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7)
+ call FireSpinEffect
+ call FireSpinEffect
+ createvisualtask AnimTask_BlendColorCycle, 2, 6, 4, 2, 2, 0, 12, RGB(22, 9, 7)
+ call FireSpinEffect
+ restorebg
+ waitbgfadeout
+ setarg 7, 0xFFF
+ waitbgfadein
+ stopsound
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ end
+
Status_Whirlpool:
loadspritegfx ANIM_TAG_WATER_ORB
monbg ANIM_DEF_PARTNER
@@ -10418,6 +24376,9 @@ Status_Clamp:
waitforvisualfinish
end
+Status_Snap_Trap: @ placeholder
+ goto Move_BITE
+
Status_SandTomb:
loadspritegfx ANIM_TAG_MUD_SAND
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0)
@@ -10431,6 +24392,22 @@ Status_SandTomb:
stopsound
end
+Status_Infestation:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles
+ monbg ANIM_DEF_PARTNER
+ splitbgprio ANIM_TARGET
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, ANIM_PAL_DEF, 0x2, 0x0, 0x9, 0x7320
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 30 0x1
+ loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0x0, 30
+ call InfestationVortex
+ call InfestationVortex
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xA 0x5 ANIM_PAL_DEF 0x2 0x9 0x0 0x7320
+ waitforvisualfinish
+ clearmonbg ANIM_DEF_PARTNER
+ end
+
General_HeldItemEffect:
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_SPARKLE_2
@@ -10491,7 +24468,7 @@ General_SmokeballEscape:
blendoff
end
-General_FocusBand:
+General_HangedOn:
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_ATTACKER, 7, 0, 9, RGB_RED
playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
createvisualtask AnimTask_SlideMonForFocusBand, 5, 30, 128, 0, 1, 2, 0, 1
@@ -10589,7 +24566,7 @@ General_FutureSightHit:
blendoff
waitforvisualfinish
delay 1
- call UnsetPsychicBackground
+ call UnsetPsychicBg
end
General_DoomDesireHit:
@@ -10672,6 +24649,241 @@ General_WishHeal:
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK
end
+General_IllusionOff:
+ monbg ANIM_TARGET
+ createvisualtask AnimTask_TransformMon, 2, 0, 1
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ end
+
+General_FormChange:
+ monbg ANIM_ATTACKER
+ createvisualtask AnimTask_TransformMon, 2, 0, 1
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ end
+
+General_SlideOffScreen:
+ createvisualtask AnimTask_SlideOffScreen, 5, ANIM_TARGET, +3
+ waitforvisualfinish
+ createvisualtask AnimTask_SetInvisible, 1, ANIM_TARGET, TRUE
+ waitforvisualfinish
+ end
+
+General_MegaEvolution:
+ loadspritegfx ANIM_TAG_MEGA_STONE
+ loadspritegfx ANIM_TAG_MEGA_PARTICLES
+ loadspritegfx ANIM_TAG_MEGA_SYMBOL
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3
+ createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11)
+ call MegaEvolutionParticles
+ call MegaEvolutionParticles
+ call MegaEvolutionParticles
+ waitforvisualfinish
+ playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
+ createsprite gMegaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0
+ delay 20
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
+ waitforvisualfinish
+ createvisualtask AnimTask_TransformMon, 2, 0, 1
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
+ createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14
+ waitforvisualfinish
+ createsprite gMegaSymbolSpriteTemplate ANIM_ATTACKER, 2
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+MegaEvolutionParticles:
+ createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, 40, -10, 13
+ delay 3
+ createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, -35, -10, 13
+ delay 3
+ createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, 15, -40, 13
+ delay 3
+ createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, -10, -32, 13
+ delay 3
+ createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, 25, -20, 13
+ delay 3
+ createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, -40, -20, 13
+ delay 3
+ createsprite gMegaParticlesSpriteTemplate, ANIM_ATTACKER, 2, 5, -40, 13
+ delay 3
+ return
+
+General_RestoreBg:
+ restorebg
+ waitbgfadein
+ end
+
+end
+
+General_ZMoveActivate:
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_Z_MOVE_SYMBOL @Z-Move Symbol
+ loadspritegfx ANIM_TAG_WHIP_HIT @green color
+ loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color
+ loadspritegfx ANIM_TAG_PAW_PRINT @yellow color
+ monbg ANIM_ATTACKER
+ setblends 0x80c
+ fadetobg BG_ZMOVE_ACTIVATE
+ waitbgfadein
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x0 0x0 0xFFFF
+ playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendColorCycle, 0x2, 0x6, ANIM_PAL_ATK, 0x0, 0x6, 0x0, 0xb, 0x76BC
+ call ZMoveBuffEffect
+ call ZMoveBuffEffect
+ call ZMoveBuffEffect
+ launchtemplate gZMoveSymbolSpriteTemplate 0x29 0x4 0x0 0x0 0x0 0x0
+ call ZMoveBuffEffect
+ call ZMoveBuffEffect
+ waitforvisualfinish
+ call UnsetPsychicBg
+ blendoff
+ clearmonbg ANIM_ATTACKER
+ end
+ZMoveBuffEffect:
+ launchtemplate gBlueZMoveEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x3
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 @Red Buff
+ delay 0x3
+ launchtemplate gGreenZMoveEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x3
+ launchtemplate gYellowZMoveEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x3
+ return
+
+General_TotemFlare::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY
+ loadspritegfx ANIM_TAG_WHIP_HIT @green color
+ loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color
+ loadspritegfx ANIM_TAG_PAW_PRINT @yellow color
+ monbg ANIM_ATTACKER
+ setblends 0x80c
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x0 0x6 0x0 0xb 0x1f
+ call RainbowEndureEffect
+ call RainbowEndureEffect
+ call RainbowEndureEffect
+ call RainbowEndureEffect
+ call RainbowEndureEffect
+ waitforvisualfinish
+ blendoff
+ clearmonbg ANIM_ATTACKER
+ end
+
+RainbowEndureEffect:
+ launchtemplate gBlueEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x3
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1 @Red Buff
+ delay 0x3
+ launchtemplate gGreenEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x3
+ launchtemplate gYellowEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x3
+ return
+
+General_GulpMissile: @ Tackle anim (placeholder)
+ loadspritegfx ANIM_TAG_IMPACT
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4
+ delay 6
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_ATTACKER, 2
+ createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 3, 0, 6, 1
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ end
+
+General_StrongWinds::
+ loadspritegfx ANIM_TAG_FLYING_DIRT
+ playsewithpan SE_M_GUST, 0
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 12, 12, RGB(20, 20, 20)
+ waitforvisualfinish
+ createvisualtask AnimTask_LoadWindstormBackground, 5, FALSE
+ delay 32
+ waitforvisualfinish
+ stopsound
+ end
+
+General_PrimalReversion::
+ launchtask AnimTask_PrimalReversion 0x5 0x0
+ jumpargeq 0x0, ITEM_RED_ORB, General_PrimalReversion_Omega
+ jumpargeq 0x1, ITEM_BLUE_ORB, General_PrimalReversion_Alpha
+General_PrimalReversion_Alpha:
+ loadspritegfx ANIM_TAG_ALPHA_STONE
+ loadspritegfx ANIM_TAG_PRIMAL_PARTICLES
+ loadspritegfx ANIM_TAG_ALPHA_SYMBOL
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3
+ createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11)
+ call PrimalReversionParticles
+ call PrimalReversionParticles
+ call PrimalReversionParticles
+ waitforvisualfinish
+ playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
+ createsprite gAlphaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0
+ delay 20
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
+ waitforvisualfinish
+ createvisualtask AnimTask_TransformMon, 2, 0, 1
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
+ createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14
+ waitforvisualfinish
+ createsprite gAlphaSymbolSpriteTemplate ANIM_ATTACKER, 2
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+General_PrimalReversion_Omega:
+ loadspritegfx ANIM_TAG_OMEGA_STONE
+ loadspritegfx ANIM_TAG_PRIMAL_PARTICLES
+ loadspritegfx ANIM_TAG_OMEGA_SYMBOL
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3
+ createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11)
+ call PrimalReversionParticles
+ call PrimalReversionParticles
+ call PrimalReversionParticles
+ waitforvisualfinish
+ playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
+ createsprite gOmegaStoneSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0
+ delay 20
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
+ waitforvisualfinish
+ createvisualtask AnimTask_TransformMon, 2, 0, 1
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
+ createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14
+ waitforvisualfinish
+ createsprite gOmegaSymbolSpriteTemplate ANIM_ATTACKER, 2
+ waitforvisualfinish
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+PrimalReversionParticles:
+ createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 40, -10, 13
+ delay 3
+ createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, -35, -10, 13
+ delay 3
+ createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 15, -40, 13
+ delay 3
+ createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, -10, -32, 13
+ delay 3
+ createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 25, -20, 13
+ delay 3
+ createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, -40, -20, 13
+ delay 3
+ createsprite gPrimalParticlesSpriteTemplate, ANIM_ATTACKER, 2, 5, -40, 13
+ delay 3
+ return
+
SnatchMoveTrySwapFromSubstitute:
createvisualtask AnimTask_IsAttackerBehindSubstitute, 2
jumprettrue SnatchMoveSwapSubstituteForMon
@@ -10755,3 +24967,5641 @@ Special_SubstituteToMon:
Special_MonToSubstitute:
createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, FALSE
end
+
+Special_CriticalCaptureBallThrow:
+ createvisualtask AnimTask_LoadBallGfx, 2
+ delay 0
+ playsewithpan SE_FALL, 0
+ createvisualtask AnimTask_ThrowBall, 2
+ createvisualtask AnimTask_IsBallBlockedByTrainer, 2
+ jumpreteq -1, BallThrowTrainerBlock
+ goto BallThrowEnd
+
+@@@@@@@@@@ Z MOVES @@@@@@@@@@
+Move_BREAKNECK_BLITZ::
+ loadspritegfx ANIM_TAG_HOLLOW_ORB
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_METEOR
+ loadspritegfx ANIM_TAG_FLAT_ROCK
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x5 0x20 @ shake screen
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x5 0x20 @ shake banks
+ playsewithpan SE_M_EARTHQUAKE, 0x0
+ monbg ANIM_ATTACKER
+ splitbgprio ANIM_ATTACKER
+ delay 0x1
+ launchtask AnimTask_BlendPalInAndOutByTag, 0x5, 0x5, ANIM_TAG_HOLLOW_ORB, 0x4c00, 0xe, 0x0, 0x3
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x0
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x2b
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x55
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x80
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xaa
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xd5
+ delay 0xf
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x0
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x2b
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x55
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0x80
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xaa
+ launchtemplate gBreakneckBlitzDanceSpriteTemplate 0x2 0x1 0xd5
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ fadetobg BG_DRILL
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x300 0x1 0xffff
+ waitbgfadein
+ setblends 0x80c
+ delay 0x10
+ launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa
+ delay 0x23
+ invisible ANIM_ATTACKER
+ launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ delay 0x8
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1 @ 0, 0
+ delay 0x1
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0xa 0xfff6 0x1 0x1 @ +10, -10
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ delay 0x1
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0xf 0xfff1 0x1 0x1 @ +15, -15
+ delay 0x1
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x14 0xffec 0x1 0x1 @ +20, -20
+ delay 0x1
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtemplate gBreakneckBlitzHitSpriteTemplate 0x83 0x4 0x19 0xffe7 0x1 0x1 @ +25, -25
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4
+ waitforvisualfinish
+ launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x8 0xfe00 0x1 0x0
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x0 0x4 0x0 0xc 0x1
+ launchtask AnimTask_ShakeMonInPlace 0x2 0x5 0x1 0x4 0x0 0xc 0x1
+ waitforvisualfinish
+ delay 0x4
+ launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x8 0xfe00 0x1 0x1
+ delay 0xa
+ delay 0x19
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x6
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5
+ waitforvisualfinish
+ delay 0x10
+ blendoff
+ clearmonbg ANIM_DEF_PARTNER
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ call UnsetPsychicBg
+ end
+
+
+Move_ALL_OUT_PUMMELING:
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_IMPACT
+ loadspritegfx ANIM_TAG_METEOR
+ loadspritegfx ANIM_TAG_FLAT_ROCK
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ call EndureEffect
+ loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x1f
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call EndureEffect
+ waitforvisualfinish
+ fadetobg BG_ROCK_WRECKER
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x800 0x0 0x0 0xffff
+ waitbgfadein
+ setblends 0x80c
+ monbg ANIM_DEF_PARTNER
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 SOUND_PAN_TARGET 0x1
+ launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 ANIM_FOOT_1 0x1
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x8
+ launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xfffa 0x12 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x8
+ launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffc0 0x10 0x0 0x0 0xa 0x1 ANIM_FIST_1 0x1
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x8
+ launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x15 0x0 0x0 0xa 0x1 ANIM_FOOT_2 0x1
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x8
+ launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffd0 0x14 0x0 0x0 0xa 0x1 ANIM_FIST_1 0x1
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x8
+ launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffe0 0x17 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x8
+ launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffc0 0x11 0x0 0x0 0xa 0x1 ANIM_FOOT_1 0x1
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x8
+ launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffb0 0x10 0x0 0x0 0xa 0x1 ANIM_FOOT_2 0x1
+ delay 0x2
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x8
+ launchtemplate gAllOutPummelingOnslaughtSpriteTemplate 0x2 0x8 0xffa0 0x15 0x0 0x0 0xa 0x1 ANIM_CHOP 0x1
+ delay 0x2
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ delay 0x10
+ launchtask AnimTask_WindUpLunge 0x5 0x7 0x0 0xffe8 0x8 0x17 0xa 0x28 0xa
+ delay 0x23
+ invisible ANIM_ATTACKER
+ launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ delay 0xc
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffd0 0x0 0x0 0x4
+ waitforvisualfinish
+ delay 0x30
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x5
+ waitforvisualfinish
+ delay 0x10
+ blendoff
+ clearmonbg ANIM_DEF_PARTNER
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ call UnsetPsychicBg
+ end
+
+
+Move_SUPERSONIC_SKYSTRIKE:
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly
+ loadspritegfx ANIM_TAG_MUD_SAND @ dig
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy
+ loadspritegfx ANIM_TAG_BIRD @ sky attack bird
+ loadspritegfx ANIM_TAG_IMPACT @ hit
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ monbg ANIM_DEF_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0x8 0x0 0x0
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x0 0x2 0x10
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x1 0xf 0x0 0x7fff
+ clearmonbg ANIM_DEF_PARTNER
+ call EndureEffect
+ delay 0x8
+ call EndureEffect
+ delay 0x20
+ delay 0xA
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ delay 0x2
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12
+ delay 0x30
+ launchtask AnimTask_DoomDesireLightBeam 0x5 0x0
+ delay 0x9
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ delay 0x9
+ playsewithpan SE_M_MORNING_SUN, 0x0
+ delay 0x9
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET
+ delay 0x19
+ fadetobg BG_SKY
+ waitbgfadeout
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 0x1 SupersonicSkystrikeOnPlayer
+SupersonicSkystrikeOnOpponent:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf800 0x800 0x0 0xffff
+ goto FinishSupersonicSkystrike
+SupersonicSkystrikeOnPlayer:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x800 0xf800 0x0 0xffff
+FinishSupersonicSkystrike:
+ waitbgfadein
+ waitforvisualfinish
+ monbg ANIM_DEF_PARTNER
+ setblends 0x80c
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ launchtemplate gSupersonicSkystrikeFlySpriteTemplate 0x2 0x1 0x14
+ delay 0x10
+ launchtemplate gBasicHitSplatSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffd0 0xfff0 0x18 @ 12, -24, -16, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xfff0 0xfff6 0x18 @ 16, -38, -10, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffcc 0xffee 0x18 @ 14, -20, -18, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffe0 0xfff0 0x18 @ 12, -36, -16, 24
+ delay 0x30
+ clearmonbg ANIM_DEF_PARTNER
+ blendoff
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10
+ call UnsetPsychicBg
+ waitforvisualfinish
+ end
+
+
+Move_ACID_DOWNPOUR:
+ loadspritegfx ANIM_TAG_BLUE_ORB @ reversal
+ loadspritegfx ANIM_TAG_POISON_JAB @ poison jab
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @ poison bubbles
+ fadetobg BG_POISON
+ waitbgfadeout
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 0x1 AcidDownpourOnPlayer
+AcidDownpourOnOpponent:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xff10 0x1 0xffff
+ goto FinishAcidDownpour
+AcidDownpourOnPlayer:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf0 0x1 0xffff
+FinishAcidDownpour:
+ waitbgfadein
+ setblends 0x80c
+ monbg ANIM_ATTACKER
+ loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 0xd, 0x6
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x32 0x1
+ call AcidDownpourFlareOnAttacker
+ call AcidDownpourFlareOnAttacker
+ call AcidDownpourFlareOnAttacker
+ delay 0x5
+ clearmonbg ANIM_ATTACKER
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ blendoff
+ delay 0x20
+ loopsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET, 0xd, 0x3
+ launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x0
+ launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x2a
+ launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x54
+ launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0x7e
+ launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0xa8
+ launchtemplate gAcidDownpourReversalSpriteTemplate 0x2 0x2 0x1a 0xd2
+ delay 0x20
+ panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ launchtask AnimTask_CreateSurfWave 0x2 0x1 ANIM_SURF_PAL_SLUDGE_WAVE
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x7 0xd87c
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x32 0x1
+ call AcidDownpourFlare
+ call AcidDownpourFlare
+ delay 0x15
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0x15 0x0 0x2a
+ delay 0x2c
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x7 0x0 0xd87c
+ invisible ANIM_TARGET
+ waitforvisualfinish
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10
+ restorebg
+ waitbgfadeout
+ setarg 0x7 0xffff
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitbgfadein
+ waitforvisualfinish
+ end
+AcidDownpourFlare:
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_TARGET
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_TARGET
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_TARGET
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_TARGET
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_TARGET
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_TARGET
+ delay 0x2
+ return
+AcidDownpourFlareOnAttacker:
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gAcidDownpourAuraSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x2
+ return
+
+
+Move_TECTONIC_RAGE:
+ loadspritegfx ANIM_TAG_DIRT_MOUND @ dig
+ loadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks
+ loadspritegfx ANIM_TAG_ROCKS @ rollout
+ loadspritegfx ANIM_TAG_IMPACT @ hit
+ launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x0 0xb4
+ launchtemplate gDirtMoundSpriteTemplate 0x1 0x3 0x0 0x1 0xb4
+ monbg_static ANIM_ATTACKER
+ delay 0x1
+ launchtask AnimTask_DigDownMovement 0x2 0x1 0x0
+ delay 0x6
+ call DigThrowDirt
+ call DigThrowDirt
+ call DigThrowDirt
+ call DigThrowDirt
+ launchtask AnimTask_TectonicRageRollout 0x2 0x0
+ call DigThrowDirt
+ setblends 0x80c
+ delay 0x20
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ monbg ANIM_TARGET
+ launchtemplate gBasicHitSplatSpriteTemplate 0x4 0x4 0x0 0x0 0x1 0x2
+ delay 0x1
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4
+ delay 0xa
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ invisible ANIM_TARGET
+ delay 0x5
+ invisible ANIM_ATTACKER
+ waitforvisualfinish
+ delay 0xa
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10
+ fadetobg BG_TECTONIC_RAGE @ brown/yellow sky uppercut
+ unloadspritegfx ANIM_TAG_DIRT_MOUND @ dig
+ unloadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks
+ unloadspritegfx ANIM_TAG_ROCKS @ rollout
+ unloadspritegfx ANIM_TAG_IMPACT @ hit
+ loadspritegfx ANIM_TAG_WARM_ROCK @ eruption
+ loadspritegfx ANIM_TAG_FIRE_PLUME @ blast burn
+ loadspritegfx ANIM_TAG_EXPLOSION_2 @ explosion
+ waitbgfadeout
+ visible ANIM_TARGET
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff
+ waitbgfadein
+ playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound
+ delay 0x1e
+ launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0xc8 0xffe0 0x0 0x64 0x0
+ launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x1e 0xffe0 0x10 0x5a 0x1
+ launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x96 0xffe0 0x20 0x3c 0x2
+ launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x5a 0xffe0 0x30 0x50 0x3
+ launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x6e 0xffe0 0x40 0x32 0x0
+ launchtemplate gEruptionFallingRockSpriteTemplate 0x28 0x5 0x3c 0xffe0 0x50 0x46 0x1
+ delay 0x16
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x8 0x3c
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x8 0x3c
+ loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc
+ delay 0x30
+ call TectonicRageExplosion
+ playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0
+ call TectonicRageExplosion
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0
+ call TectonicRageExplosion
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0
+ launchtemplate gTectonicRageBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0
+ call TectonicRageExplosion
+ waitforvisualfinish
+ call UnsetPsychicBg
+ waitbgfadein
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+TectonicRageExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gTectonicRageExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ return
+
+
+Move_CONTINENTAL_CRUSH::
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly
+ loadspritegfx ANIM_TAG_MUD_SAND @ dig
+ loadspritegfx ANIM_TAG_ROCKS @ rocks
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy
+ loadspritegfx ANIM_TAG_IMPACT @ hit
+ loadspritegfx ANIM_TAG_REALLY_BIG_ROCK
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call ContinentalCrashBuffEffect
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call ContinentalCrashBuffEffect
+ delay 0x8
+ call ContinentalCrashBuffEffect
+ delay 0x4
+ delay 0xA
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ delay 0x2
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12
+ delay 0x30
+ launchtask AnimTask_GetTimeOfDay 0x2 0x0
+ jumpargeq 0x0 0x0 ContinentalCrushDay
+ jumpargeq 0x0 0x2 ContinentalCrushAfternoon
+ContinentalCrushNight:
+ fadetobg BG_BLUE_SKY_NIGHT
+ goto FinishContinentalCrush
+ContinentalCrushDay:
+ fadetobg BG_BLUE_SKY_DAY
+ goto FinishContinentalCrush
+ContinentalCrushAfternoon:
+ fadetobg BG_BLUE_SKY_AFTERNOON
+FinishContinentalCrush:
+ delay 0x18
+ invisible ANIM_TARGET
+ waitbgfadeout
+ delay 0x5
+ visible ANIM_ATTACKER
+ delay 0x4
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ call ContinentalCrushStockpileRocks
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ call ContinentalCrushStockpileRocks
+ launchtemplate gContinentalCrushGrowingRockSpriteTemplate 0x2 0x1 0x0
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x2dd3
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ call ContinentalCrushStockpileRocks
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ call ContinentalCrushStockpileRocks
+ invisible ANIM_ATTACKER
+ waitforvisualfinish
+ fadetobg BG_IN_AIR
+ waitbgfadeout
+ visible ANIM_TARGET
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xf800 0x0 0xffff
+ waitbgfadein
+ loopsewithpan SE_FALL, SOUND_PAN_ATTACKER, 0x20, 0x4 @;Falling sound
+ delay 0x1e
+ launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0xc8 0xffe0 0x0 0x64 0x0
+ launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x1e 0xffe0 0x10 0x5a 0x1
+ launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x96 0xffe0 0x20 0x3c 0x2
+ launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x5a 0xffe0 0x30 0x50 0x3
+ launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x6e 0xffe0 0x40 0x32 0x0
+ launchtemplate gContinentalCrushEruptionSpriteTemplate 0x28 0x5 0x3c 0xffe0 0x50 0x46 0x1
+ delay 0x16
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x5 0x8 0x1c
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x4 0x8 0x1c
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW @ fly
+ unloadspritegfx ANIM_TAG_MUD_SAND @ dig
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy
+ unloadspritegfx ANIM_TAG_IMPACT @ hit
+ loadspritegfx ANIM_TAG_REALLY_BIG_ROCK
+ delay 0x30
+ launchtemplate gContinentalCrushBigRockStompSpriteTemplate, 0x82, 0x4, 0, 0x3c, 3, ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x7 0x0000
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0xffd0 0xfff0 0x18 @ 12, -24, -16, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0xfff0 0xfff6 0x18 @ 16, -38, -10, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0xffcc 0xffee 0x18 @ 14, -20, -18, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0xffe0 0xfff0 0x18 @ 12, -36, -16, 24
+ delay 0x5
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x7 0x0 0x0000 @undo pal change on tgt
+ delay 0x10
+ waitforvisualfinish
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10
+ waitforvisualfinish
+ restorebg
+ waitbgfadeout
+ setarg 0x7 0xffff
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitbgfadein
+ delay 0x4
+ waitforvisualfinish
+ end
+ContinentalCrashBuffEffect:
+ launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gContinentalCrushFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+ContinentalCrushStockpileRocks:
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0xffc0 0x20 @ 0,-32
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x2c 0xffd4 0x20 @ +44,-44
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x3c 0x0 0x20 @ +60,0
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x28 0x28 0x20 @ +40,+40
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0x38 0x20 @ +0,+56
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffda 0x26 0x20 @ -38,+38
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffca 0x0 0x20 @ -54, +0
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0xffdc 0xffdc 0x20 @ -36, -36
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x0 0xffce 0x20 @ 0, -50
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x22 0xffde 0x20 @ +34, -34
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x2e 0x0 0x20 @ +46, +0
+ delay 0x2
+ launchtemplate gContinentalCrushNeedleArmSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0x0 0x20 0x20 0x20 @ +32, +32
+ delay 0x2
+ return
+
+
+Move_SAVAGE_SPIN_OUT::
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_RAZOR_LEAF @green color
+ loadspritegfx ANIM_TAG_STRING @string shot
+ loadspritegfx ANIM_TAG_SPIDER_WEB @spider web
+ loadspritegfx ANIM_TAG_MUD_SAND @rocks
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ monbg ANIM_ATTACKER
+ setblends 0x80c
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0
+ launchtemplate gSavageSpinOutGreenChargeSpriteTemplate 0x2 0x1 0x0
+ delay 0x19
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0x14
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ delay 0xf
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x4 0x0 0x0
+ clearmonbg ANIM_ATTACKER
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ call gSavageSpinOutStringBlastSpriteTemplateSHOT
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x5 0x0 0x32 0x1
+ call gSavageSpinOutStringBlastSpriteTemplateSHOT
+ call gSavageSpinOutStringBlastSpriteTemplateSHOT
+ call gSavageSpinOutStringBlastSpriteTemplateSHOT
+ launchtemplate gSpiderWebSpriteTemplate 0x82 0x0 @ spider web
+ call gSavageSpinOutStringBlastSpriteTemplateSHOT
+ delay 0xe
+ blendoff
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_STRING
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_COCOON
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ delay 0x1
+ invisible ANIM_TARGET
+ delay 0x0
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ delay 0x0
+ jumpargeq 0x7 ANIM_TARGET SavageSpinOutOnPlayer
+SavageSpinOutOnOpponent:
+ launchtemplate gSavageSpinOutCacoonSpriteTemplate 0x82 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x80
+ goto FinishSavageSpinOut
+SavageSpinOutOnPlayer:
+ launchtemplate gSavageSpinOutCacoonSpriteTemplate 0x3 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x80
+FinishSavageSpinOut:
+ fadetobg BG_IN_AIR
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff @+0x1000
+ waitbgfadein
+ delay 0x10
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed @0
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed
+ call SlowSavageSpinOutBackgroundSpeed @-0x1000
+ delay 0x4
+ call SavageSpinOutCrash_2 @SeismicToss2
+ delay 0xa
+ call SavageSpinOutCrash_1 @SeismicToss1
+ delay 0xa
+ call SavageSpinOutCrash_2 @SeismicToss2
+ delay 0xa
+ call SavageSpinOutCrash_1 @SeismicToss1
+ delay 0xc
+ call UnsetPsychicBg
+ setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - no idea why though - something to do with the background scrolling
+ launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ delay 0x1E
+ unloadspritegfx ANIM_TAG_MUD_SAND
+ unloadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_CUT @cut
+ loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray
+ launchtask AnimTask_ShakeMonInPlace 0x82 0x5 ANIM_TARGET 0x4 0x0 0xc 0x1
+ launchtask AnimTask_ShakeMonInPlace 0x82 0x5 ANIM_TARGET 0x4 0x0 0xc 0x1
+ createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffe0, 0x0
+ createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffd0, 0x0
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ delay 0xc
+ playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ launchtemplate gSpiderWebSpriteTemplate 0x82 0x0 @ spider web
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSavageSpinOutWhiteExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ waitforvisualfinish
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+gSavageSpinOutStringBlastSpriteTemplateSHOT:
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x0 0x0
+ launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x0 0x0
+ delay 0x3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x1 0x0
+ launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x1 0x0
+ delay 0x3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x2 0x0
+ launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x2 0x0
+ delay 0x3
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0xe 0xfff4 0x0 0xfff4 0xf 0x3 0x0
+ launchtemplate gSavageSpinOutStringBlastSpriteTemplate 0x82 0x7 0x1a 0x8 0xc 0x8 0xf 0x3 0x0
+ delay 0x3
+ return
+SavageSpinOutCrash_1:
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff8, 0x1, 0x1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffe8 0xfff0 0x18
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xffda 0xfff6 0x18
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffec 0xffee 0x18
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffdc 0xfff0 0x18
+ return
+SavageSpinOutCrash_2:
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xfff8, 0x1, 0x1
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffd0 0xfff0 0x18
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xfff0 0xfff6 0x18
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffcc 0xffee 0x18
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffe0 0xfff0 0x18
+ return
+SlowSavageSpinOutBackgroundSpeed:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xfd56 0x0 0xffff @-0x2aa
+ delay 0x1
+ return
+
+
+Move_NEVER_ENDING_NIGHTMARE::
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple hand
+ loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @purple
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @hex
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call NeverendingNightmareBuffEffect
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x40c0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call NeverendingNightmareBuffEffect
+ delay 0x8
+ call NeverendingNightmareBuffEffect
+ playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
+ call NeverendingNightmareAttackerRings
+ delay 0x1
+ call NeverendingNightmareAttackerRings
+ delay 0x1
+ call NeverendingNightmareAttackerRings
+ delay 0xa
+ playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET
+ call NeverendingNightmareTargetRings
+ delay 0x1
+ call NeverendingNightmareTargetRings
+ delay 0x1
+ call NeverendingNightmareTargetRings
+ delay 0x1
+ waitforvisualfinish
+ fadetobg BG_NEVERENDING_NIGHTMARE
+ waitbgfadein
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x4 0x78 0x1
+ playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET
+ call NeverendingNightmareHands
+ call NeverendingNightmareHands
+ delay 0xa
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x10 0x40c0 @ fade to purple
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ loadspritegfx ANIM_TAG_EXPLOSION_2
+ unloadspritegfx ANIM_TAG_THIN_RING
+ launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_VERTICAL_HEX, 0x2, 0xA, 0xA, 0x580A @;Purple
+ call NeverendingNightmareGeyser
+ playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_TARGET
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ call NeverendingNightmareGeyser
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ call NeverendingNightmareGeyser
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0
+ launchtemplate gNeverEndingNightmareBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ call NeverendingNightmareGeyser
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x10 0x0 0x40c0 @ fade to normal
+ waitforvisualfinish
+ restorebg
+ waitbgfadeout
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+NeverendingNightmareBuffEffect:
+ launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gNeverEndingNightmareFocusEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+NeverendingNightmareTargetRings:
+ launchtemplate gNeverEndingNightmareRingTargetSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0
+ delay 0x8
+ return
+NeverendingNightmareAttackerRings:
+ launchtemplate gNeverEndingNightmareRingAttackerSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ delay 0xe
+ return
+NeverendingNightmareHands:
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0xffc0 0x20 @ 0,-32
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x2c 0xffd4 0x20 @ +44,-44
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x3c 0x0 0x20 @ +60,0
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x28 0x28 0x20 @ +40,+40
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0x38 0x20 @ +0,+56
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffda 0x26 0x20 @ -38,+38
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffca 0x0 0x20 @ -54, +0
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0xffdc 0xffdc 0x20 @ -36, -36
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x0 0xffce 0x20 @ 0, -50
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x22 0xffde 0x20 @ +34, -34
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x2e 0x0 0x20 @ +46, +0
+ delay 0x2
+ launchtemplate gNeverEndingNightmareHandSpriteTemplate 0x82 0x5 ANIM_TARGET 0x0 0x20 0x20 0x20 @ +32, +32
+ delay 0x2
+ return
+NeverendingNightmareGeyser:
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xfff1, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xfffb, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0x0012, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0x0005, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10
+ delay 0x0
+ createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10
+ return
+
+
+Move_CORKSCREW_CRASH::
+ loadspritegfx ANIM_TAG_SPIKES @metal bits
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_CORKSCREW @drill
+ loadspritegfx ANIM_TAG_WHIRLWIND_LINES @whirlwind
+ loadspritegfx ANIM_TAG_MUD_SAND @rock
+ monbg ANIM_ATTACKER
+ invisible ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0x6318 @fade atker to gray
+ launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_SPIKES, 0x0, 0xC, 0xC, 0x6318 @;Gray
+ playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x4f 0x1
+ launchtemplate gCorkscrewCrashChargeSpriteTemplate 0x2 0x1 0x0
+ call CorkscrewCrashMetalFlare
+ call CorkscrewCrashMetalFlare
+ call CorkscrewCrashMetalFlare
+ call CorkscrewCrashMetalFlare
+ call CorkscrewCrashMetalFlare
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0x6318 @fade atker back
+ waitforvisualfinish
+ stopsound
+ invisible ANIM_ATTACKER
+ launchtemplate gCorkscrewCrashCorkscrewFlyUpSpriteTemplate 0x2 0x7 0x0 0x0 0x4e0 0x24 0x15 0x1 ANIM_ATTACKER
+ playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER
+ fadetobg BG_HIGHSPEED_OPPONENT
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x0 0x1 0xffff
+ waitbgfadein
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET CorkscrewCrashOnPlayer
+CorkscrewCrashOnOpponent:
+ launchtemplate gCorkscrewCrashRightUpSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15
+ waitforvisualfinish
+ delay 0xa
+ launchtemplate gCorkscrewCrashLeftUpSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15
+ waitforvisualfinish
+ visible ANIM_TARGET
+ delay 0x5
+ goto FinishCorkscrewCrash
+CorkscrewCrashOnPlayer:
+ launchtemplate gCorkscrewCrashLeftDownSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15
+ waitforvisualfinish
+ delay 0xa
+ launchtemplate gCorkscrewCrashRightDownSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15
+ waitforvisualfinish
+ visible ANIM_TARGET
+ delay 0x5
+FinishCorkscrewCrash:
+ launchtemplate gCorkscrewCrashStrikeSpriteTemplate 0x82 0x1 0x14
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ delay 0x10
+ stopsound
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x0
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0xf 0x0 0x4 @ shove target down a bit
+ waitforvisualfinish
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET
+ launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xffc0 0x0f
+ delay 0xf
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x30
+ launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03
+ call CorkscrewCrashSpinningWind
+ call CorkscrewCrashSprayRocks
+ delay 0x6
+ call CorkscrewCrashSprayRocks
+ delay 0x6
+ call CorkscrewCrashSprayRocks
+ delay 0x6
+ call CorkscrewCrashSprayRocks
+ delay 0x0
+ launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03
+ delay 0x6
+ call CorkscrewCrashSprayRocks
+ delay 0x6
+ call CorkscrewCrashSprayRocks
+ delay 0x6
+ call CorkscrewCrashSprayRocks
+ delay 0x1
+ launchtemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate 0x83 0x3 0x0 0xfffe 0x03
+ delay 0x4
+ call CorkscrewCrashSprayRocks
+ delay 0x6
+ call CorkscrewCrashSprayRocks
+ delay 0x6
+ call CorkscrewCrashSprayRocks
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x2, 0x0, 0x10, 0x7fff
+ waitforvisualfinish
+ delay 0x10
+ call ResetFromWhiteScreen
+ waitforvisualfinish
+ end
+CorkscrewCrashSpinningWind:
+ launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0xfff8 0x1 0x2c 0x0
+ launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x0 0x1 0x3c 0x1
+ launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x8 0x1 0x3c 0x2
+ launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x10 0x1 0x3c 0x3
+ launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x18 0x1 0x3c 0x4
+ launchtemplate gWhirlwindLineSpriteTemplate 0x3 0x5 0x0 0x20 0x1 0x3c 0x0
+ return
+CorkscrewCrashMetalFlare:
+ launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gCorkscrewCrashMetalBitSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x2
+ return
+CorkscrewCrashSprayRocks:
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0xc 0xffe8 0xfff0 0x18
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x0 0x10 0xffda 0xfff6 0x18
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xe 0xffec 0xffee 0x18
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 0x1 0x1 0xc 0xffdc 0xfff0 0x18
+ return
+
+
+Move_INFERNO_OVERDRIVE::
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_SMALL_EMBER @fire
+ launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x1F
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ fadetobg BG_INFERNO_OVERDRIVE
+ waitbgfadeout
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET InfernoOverdriveOnPlayer
+InfernoOverdriveOnOpponent:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfb00 0x0 0x0 0xFFFF
+ goto FinishInfernoOverdrive
+InfernoOverdriveOnPlayer:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0500 0x0 0x0 0xFFFF
+FinishInfernoOverdrive:
+ waitbgfadein
+ monbg ANIM_ATTACKER
+ setblends 0x80c
+ loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER, 0x13, 0x8
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x4f 0x1
+ launchtemplate gInfernoOverdriveChargeSpriteTemplate 0x2 0x1 0x0
+ call InfernoOverdriveFireSpin
+ call InfernoOverdriveFireSpin
+ call InfernoOverdriveFireSpin
+ call InfernoOverdriveFireSpin
+ call InfernoOverdriveFireSpin
+ waitforvisualfinish
+ stopsound
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ unloadspritegfx ANIM_TAG_SMALL_EMBER @fire
+ loadspritegfx ANIM_TAG_EXPLOSION
+ loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion
+ loadspritegfx ANIM_TAG_METEOR @superpower
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red color
+ clearmonbg ANIM_ATTACKER
+ launchtemplate gInfernoOverdriveSuperpowerSpriteTemplate 0x83 0x1 0x0 @ super power shot
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
+ delay 0x10
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x8 0x0 0x10 0x1
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_TARGET 0x0 0x2 0x4f 0x1
+ call InfernoOverdriveExplosion
+ delay 0x6
+ call InfernoOverdriveExplosion
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x1, 0x0, 0x10, 0x001b @ red bg pal
+ delay 0x6
+ call InfernoOverdriveExplosion
+ waitforvisualfinish
+ call ResetFromRedScreen
+ blendoff
+ end
+InfernoOverdriveFireSpin:
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x2
+ return
+InfernoOverdriveExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gInfernoOverdriveExplosionSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ return
+
+
+Move_HYDRO_VORTEX::
+ loadspritegfx ANIM_TAG_SPLASH @dive
+ loadspritegfx ANIM_TAG_SWEAT_BEAD @dive
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @crabhammer bubbles
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_METEOR @superpower
+ loadspritegfx ANIM_TAG_WATER_ORB @whirlpool
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_CreateSurfWave 0x2 0x1 0x0
+ delay 0x18
+ panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_ROUND_SHADOW
+ playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
+ launchtemplate gDiveBallSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ waitforvisualfinish
+ playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER
+ launchtemplate gDiveWaterSplashSpriteTemplate 0x3 0x1 0x0
+ call DiveSetUpWaterDroplets
+ call DiveSetUpWaterDroplets
+ call DiveSetUpWaterDroplets
+ call DiveSetUpWaterDroplets
+ call DiveSetUpWaterDroplets
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0x15 0x0 0x1a
+ delay 0x1a
+ invisible ANIM_TARGET
+ waitforvisualfinish
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x7
+ delay 0x5
+ fadetobg BG_WATER_PULSE
+ waitbgfadeout
+ delay 0x5
+ visible ANIM_ATTACKER
+ visible ANIM_TARGET
+ loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x3
+ call HydroVortexBubbles
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY
+ playsewithpan SE_M_WATERFALL, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5da0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_SPLASH
+ unloadspritegfx ANIM_TAG_SWEAT_BEAD
+ loadspritegfx ANIM_TAG_IMPACT
+ launchtemplate gHydroVortexSuperpowerSpriteTemplate 0x83 0x1 0x0
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ invisible ANIM_ATTACKER
+ delay 0x10
+ launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0x10 0x5da0
+ loadspritegfx ANIM_TAG_GUST
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x8 0x3c
+ call HydroVortexWhirlpoolHurricane
+ call HydroVortexWhirlpoolHurricane
+ call HydroVortexWhirlpoolHurricane
+ call HydroVortexWhirlpoolHurricane
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x10 0x0 0x5da0
+ waitforvisualfinish
+ restorebg
+ waitbgfadeout
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+HydroVortexBubbles:
+ launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xa 0xa 0x14 ANIM_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x14, ANIM_TARGET
+ delay 0x4
+ launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x14 0xffec 0x14 ANIM_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x14, ANIM_TARGET
+ delay 0x4
+ launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff1 0xf 0x14 ANIM_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff1, 0xf, 0x14, ANIM_TARGET
+ delay 0x4
+ launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x0 0x0 0x14 ANIM_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x0, 0x0, 0x14, ANIM_TARGET
+ delay 0x4
+ launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff6 0xffec 0x14 ANIM_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff6, 0xffec, 0x14, ANIM_TARGET
+ delay 0x4
+ launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x10 0xfff8 0x14 ANIM_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x10, 0xfff8, 0x14, ANIM_TARGET
+ delay 0x4
+ launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0x5 0x8 0x14 ANIM_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x5, 0x8, 0x14, ANIM_TARGET
+ delay 0x4
+ launchtemplate gSmallBubblePairSpriteTemplate 0x2 0x4 0xfff0 0x0 0x14 ANIM_ATTACKER
+ createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff0, 0x0, 0x14, ANIM_TARGET
+ return
+HydroVortexWhirlpoolHurricane:
+ playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET
+ launchtemplate gHydroVortexHurricaneSpriteTemplate 0x82 0x2 0x0 0xfff0
+ launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xfff6 0xfff8 0x1 0x1
+ launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 0x1
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 0x1
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a 0x1
+ delay 0x2
+ launchtemplate gHydroVortexImpactSpriteTemplate 0x83 0x4 0xa 0xfff8 0x1 0x1
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 0x1
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e 0x1
+ launchtemplate gHydroVortexHurricaneSpriteTemplate 0x82 0x2 0x0 0xfff0
+ launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce 0x1
+ delay 0x2
+ return
+
+
+Move_BLOOM_DOOM::
+ loadspritegfx ANIM_TAG_FLOWER @petal
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_RAZOR_LEAF @green
+ loadspritegfx ANIM_TAG_GUST @hurricane
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @hex diamond
+ monbg ANIM_ATTACKER
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ setblends 0x80c
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0
+ loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x9, 0x3
+ launchtemplate gBloomDoomGreenChargeSpriteTemplate 0x2 0x1 0x0
+ delay 0x3C
+ blendoff
+ launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0
+ playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4
+ delay 0x2
+ launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8
+ playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc
+ delay 0x2
+ launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10
+ playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14
+ delay 0x2
+ launchtemplate gBloomDoomPetalSpinSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18
+ playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x4 0x0 0x0
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ call BloomDoomHurricane
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ call BloomDoomFlowerGeyser
+ call BloomDoomFlowerGeyser
+ call BloomDoomHurricane
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ call BloomDoomFlowerGeyser
+ call BloomDoomFlowerGeyser
+ call BloomDoomHurricane
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ call BloomDoomFlowerGeyser
+ call BloomDoomFlowerGeyser
+ call BloomDoomHurricane
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ call BloomDoomFlowerGeyser
+ call BloomDoomFlowerGeyser
+ call BloomDoomHurricane
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ call BloomDoomFlowerGeyser
+ call BloomDoomFlowerGeyser
+ call BloomDoomHurricane
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ call BloomDoomFlowerGeyser
+ call BloomDoomFlowerGeyser
+ fadetobg BG_BLOOM_DOOM
+ waitbgfadein
+ loadspritegfx ANIM_TAG_ORBS
+ delay 0x5
+ launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x18 0x10 0x0 0x2 0x2 0x0 0x0
+ launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x40 0x18 0x0 0x3 0x1 0x1 0x0
+ launchtemplate gAromatherapyBigFlowerSpriteTemplate 0x0 0x7 0x10 0x18 0x0 0x2 0x1 0x0 0x0
+ delay 0x5
+ launchsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x0 0x0 0x4 0x32 0x1 @ shake attacker
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x72 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0xb 0x33ed
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x30 0xc 0x0 0x4 0x3 0x1 0x0
+ launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x64 0x10 0x0 0x3 0x2 0x0 0x0
+ launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x4a 0x18 0xb4 0x3 0x2 0x0 0x0
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ call BloomDoomHyperBeam
+ launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x42 0x7 0x50 0x1e 0x0 0x4 0x1 0x1 0x0
+ launchtemplate gAromatherapySmallFlowerSpriteTemplate 0x0 0x7 0x80 0xc 0x0 0x3 0x3 0x0 0x0
+ launchtemplate gAromatherapyBigFlowerSpriteTemplate 0x0 0x7 0x5a 0x10 0x0 0x2 0x1 0x0 0x0
+ delay 0x5
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0xb 0x0 0x33ed
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion
+ call BloomDoomPetalBlast
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF, 0x1, 0x0, 0x10, 0x33ed
+ call BloomDoomPetalBlast
+ launchtask AnimTask_IsTargetPartner 0x5 0x0
+ jumpargeq 0x0 0x1 BloomDoomFadeScreenTargetPartner
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x1, 0x0, 0x10, 0x33ed @ green bg pal
+BloomDoomEnding:
+ call BloomDoomPetalBlast
+ waitforvisualfinish
+ clearmonbg ANIM_ATTACKER
+ call ResetFromGreenScreen
+ end
+BloomDoomFadeScreenTargetPartner:
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x1, 0x0, 0x10, 0x33ed @ green bg pal
+ goto BloomDoomEnding
+BloomDoomHurricane:
+ launchtemplate gBloomDoomHurricaneSpriteTemplate 0x2 0x2 0x0 0xfff0
+ launchtask AnimTask_AnimateGustTornadoPalette 0x5 0x2 0x1 0x46
+ return
+BloomDoomFlowerGeyser:
+ launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0xfffc 0x10 @ -4, -0x10
+ delay 0x0
+ launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x100D 0x10 @
+ delay 0x0
+ launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x4 0x10
+ delay 0x0
+ launchtemplate gBloomDoomFlowerGeyserSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0xfff0 0x10
+ delay 0x0
+ return
+BloomDoomHyperBeam:
+ launchtemplate gBloomDoomGreenBeamSpriteTemplate 0x82 0x0
+ launchtemplate gBloomDoomGreenBeamSpriteTemplate 0x82 0x0
+ delay 0x1
+ return
+BloomDoomPetalBlast:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0xffe0 0x10
+ delay 0x2
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x16 0xffea 0x10
+ delay 0x2
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x1e 0x0 0x10
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x14 0x14 0x10
+ delay 0x2
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0x1c 0x10
+ delay 0x2
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffed 0x13 0x10
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBloomDoomExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffe5 0x0 0x10
+ delay 0x2
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0xffee 0xffee 0x10
+ delay 0x2
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x0 0xffe7 0x10
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBloomDoomExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x11 0xffef 0x10
+ delay 0x2
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x17 0x0 0x10
+ delay 0x2
+ launchtemplate gBloomDoomPetalStarSpriteTemplate 0x82 0x5 0x1 0x0 0x10 0x10 0x10
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBloomDoomExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x2
+ return
+ResetFromGreenScreen:
+ launchtask AnimTask_AllBanksInvisible 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x0, 0x33ED @Everything from green
+ restorebg
+ waitbgfadeout
+ setarg 0x7 0xffff
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitbgfadein
+ waitforvisualfinish
+ delay 0x5
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG, 0x1, 0x0, 0x0, 0x33ED
+ waitforvisualfinish
+ return
+
+
+Move_GIGAVOLT_HAVOC::
+ loadspritegfx ANIM_TAG_HAVOC_SPEAR
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS
+ loadspritegfx ANIM_TAG_ELECTRICITY
+ loadspritegfx ANIM_TAG_SPARK_2
+ loadspritegfx ANIM_TAG_GRAY_SMOKE
+ loadspritegfx ANIM_TAG_THIN_RING
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x6 0x0 0x10 0x0000
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gGigavoltHavocChargingSpearSpriteTemplate 0x2 0x1 ANIM_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
+ delay 0xa
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0x0
+ delay 0x5
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ delay 0x5
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x20 0x14 0x0 0x0
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x60 0x14 0x1 0x0
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xa0 0x14 0x0 0x0
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xe0 0x14 0x2 0x0
+ delay 0x5
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
+ delay 0x0
+ launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ monbg ANIM_ATTACKER
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+@ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x0 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c 0x80 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x12 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x82 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ waitforvisualfinish
+ playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
+ launchtemplate gGigavoltHavocLaunchSpearSpriteTemplate 0x83 0x1 0x0
+ launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10
+ delay 0x2
+ launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0
+ delay 0xe
+ clearmonbg ANIM_ATTACKER
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x1c @shake target
+ unloadspritegfx ANIM_TAG_HAVOC_SPEAR
+ loadspritegfx ANIM_TAG_SHOCK_3 @thunderbolt
+ launchtemplate gThunderboltOrbSpriteTemplate 0x83 0x4 0x2c 0x0 0x0 0x3
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0x0 0xc 0x5bff
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x20 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x8003
+ playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET
+ delay 0x19
+ loadspritegfx ANIM_TAG_VERTICAL_HEX
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+@ call HavocSpearSparkTarget
+ call HavocSpearGeyser
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+@ call HavocSpearSparkTarget
+ call HavocSpearGeyser
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+@ call HavocSpearSparkTarget
+ call HavocSpearGeyser
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+@ call HavocSpearSparkTarget
+ call HavocSpearGeyser
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+@ call HavocSpearSparkTarget
+ call HavocSpearGeyser
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+@ call HavocSpearSparkTarget
+ call HavocSpearGeyser
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+@ call HavocSpearSparkTarget
+ call HavocSpearGeyser
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF, 0x2, 0xc, 0x0, 0x5bff
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG, 0x1, 0x10, 0x0, 0x0000
+ waitforvisualfinish
+ launchtask AnimTask_AllBanksVisible 0xa 0x0
+ waitforvisualfinish
+ end
+HavocSpearGeyser:
+ createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 @ -4, -0x10
+ delay 1
+ createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 @
+ delay 1
+ createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10
+ delay 1
+ createsprite gGigavoltHavocGeyserSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10
+ delay 1
+ return
+HavocSpearSparkTarget:
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x0 0x14 0x0 0x8000
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x0 0x14 0x0 0x8000
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x40 0x14 0x1 0x8000
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x40 0x14 0x1 0x8000
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x80 0x14 0x0 0x8000
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x80 0x14 0x0 0x8000
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x8000
+ return
+
+
+Move_SHATTERED_PSYCHE::
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL @reflect
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink
+ loadspritegfx ANIM_TAG_TORN_METAL @brick break shatter
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPalExclude 0x5 0x5 0x0 0x0 0x0 0x10 0x0
+ waitforvisualfinish
+ launchtask AnimTask_SetAllNonAttackersInvisiblity 0x5 0x1 0x1
+ waitforvisualfinish
+ launchtemplate gShatteredPsychePinkChargeSpriteTemplate 0x2 0x1 0x0
+ launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER
+ delay 0xc
+ launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ delay 0xc
+ launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER
+ delay 0xc
+ launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ delay 0xc
+ launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER
+ delay 0xc
+ launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ delay 0xc
+ launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER
+ delay 0xc
+ launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ delay 0xc
+ launchtemplate gShatteredPsycheRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER
+ delay 0x4
+ fadetobg BG_SHATTERED_PSYCHE
+ delay 0x4
+ launchtask AnimTask_BlendBattleAnimPalExclude 0x5 0x5 0x0 0x0 0x10 0x0 0x0
+ delay 0x7
+ playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0xf 0x1
+ launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1
+ waitforvisualfinish
+ShatteredPsycheCheckBattler:
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET ShatteredPsycheOnPlayer
+ShatteredPsycheOnOpponent:
+ call ShatteredPsycheFlingOpponent
+ waitforvisualfinish
+ goto ShatteredPsycheFinish
+ShatteredPsycheOnPlayer:
+ call ShatteredPsycheFlingPlayer
+ waitforvisualfinish
+ call ShatteredPsycheFlingPlayer
+ waitforvisualfinish
+ShatteredPsycheFinish:
+ delay 0x8
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ restorebg
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0xf 0x1
+ launchtask AnimTask_ScaleMonAndRestore 0x5 0x5 0xfffc 0xfffc 0xf 0x1 0x1
+ createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x0 @ -8, -12
+ createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x0
+ createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0
+ createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x3, 0x0, 0x0
+ waitbgfadeout
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+ShatteredPsycheFlingOpponent:
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26, +16
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, -16
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0xfff0 0x1 0x4 @ -26,-16
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0x10 0x1 0x1 @ 26, 16
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x0 0x20 0x1 0x4 @ 0,32
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x0 0xffe0 0x1 0x1 @ 0, -32
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x0 0xffe0 0x1 0x4 @ 0,-32
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x0 0x20 0x1 0x1 @ 0, 32
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0x10 0x1 0x4 @ 26,16
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0xfff0 0x1 0x1 @ -26, -16
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0xffe0 0x1 0x4 @ 26,-16
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0x10 0x1 0x1 @ 0, 32
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x5
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26, +16
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, -16
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x1a 0xfff0 0x1 0x4 @ -26,-16
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe6 0x10 0x1 0x1 @ 26, 16
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ return
+ShatteredPsycheFlingPlayer:
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe6 0x10 0x1 0x4 @ -26,-16
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x1a 0xfff0 0x1 0x1 @ 26, 16
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x20 0x0 0x1 0x4 @ 32,0
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xffe0 0x0 0x1 0x1 @
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xffe0 0x0 0x1 0x4 @ -32,0
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0x20 0x0 0x1 0x1 @ 32, 0
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x4
+ waitforvisualfinish
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xa 0x20 0x1 0x4 @ 10, -32
+ waitforvisualfinish
+ launchtemplate gShatteredPsycheReflectHitSpriteTemplate 0x83 0x4 0xfff6 0x5 0x1 0x1 @ 10, -32
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET
+ delay 0x2
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x5
+ waitforvisualfinish
+ return
+
+
+Move_SUBZERO_SLAMMER::
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice
+ loadspritegfx ANIM_TAG_ICE_CUBE @glacier
+ loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion
+ launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x6A23
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ fadetobg BG_ICE
+ waitbgfadeout
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET SubzeroSlammerOnPlayer
+SubzeroSlammerOnOpponent:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfd00 0x0 0x0 0xFFFF
+ goto SubzeroSlammerFinish
+SubzeroSlammerOnPlayer:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0300 0x0 0x0 0xFFFF
+SubzeroSlammerFinish:
+ waitbgfadein
+ monbg ANIM_ATK_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x0 0xb 0x7e80
+ launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x0
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x4
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x8
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0xc
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x10
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x14
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ delay 0x2
+ launchtemplate gSubzeroSlammerIceSpinSpriteTemplate 0x83 0x4 0x0 0x0 0x38 0x18
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ delay 0x20
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0x7e80
+ delay 0x20
+ launchtask AnimTask_FrozenIceCubeAttacker 0x2 0x0
+ waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 0x11
+ waitforvisualfinish
+ call SubzeroSlammerIceSwirl
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 ANIM_PAL_ATK 0x2 0x2 0x0 0xb 0x7e80
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call SubzeroSlammerIceSwirl
+ call SubzeroSlammerIceSwirl
+ delay 0xa
+ clearmonbg ANIM_ATK_PARTNER
+ launchsoundtask SoundTask_LoopSEAdjustPanning 0x7 0xb0 0xffc0 SOUND_PAN_TARGET 0x4 0x4 0x0 0xa
+ launchtemplate gIceBeamOuterCrystalSpriteTemplate 0x2 0x5 0x14 0xc 0x0 0xc 0x14
+ launchtemplate gIceBeamOuterCrystalSpriteTemplate 0x2 0x5 0x14 0xfff4 0x0 0xfff4 0x14
+ delay 0x1
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x7 0x7e80
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x2 0x0 0x19 0x1
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceBeamCreateCrystals
+ call IceCrystalEffectShort
+ delay 0x5
+ monbg ANIM_DEF_PARTNER
+ launchtask AnimTask_FrozenIceCube 0x82 0x0
+ playsewithpan SE_M_HAIL, SOUND_PAN_TARGET
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_TORN_METAL
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ delay 0x3
+ createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x0 @ -8, -12
+ createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x0
+ createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0
+ createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x3, 0x0, 0x0
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x1c
+ call SubzeroSlammerExplosion
+ call SubzeroSlammerExplosion
+ clearmonbg ANIM_DEF_PARTNER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x5 0x7 0x0 0x7e80
+ waitforvisualfinish
+ restorebg
+ waitbgfadeout
+ setarg 0x7 0xffff
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitbgfadein
+ waitforvisualfinish
+ end
+SubzeroSlammerExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0
+ delay 0x3
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xa 0x14 0x0
+ delay 0x3
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfffb 0xa 0x0
+ delay 0x3
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0
+ delay 0x3
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0
+ delay 0x3
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0
+ delay 0x3
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0x14 0x2 0x0
+ delay 0x3
+ launchtemplate gIceCrystalHitLargeSpriteTemplate 0x82, 0x3, 0xfff6 0xfff6 0x0
+ delay 0x3
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gSubzeroSlammerExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0x11 0xfff4 0x0
+ delay 0x3
+ launchtemplate gIceCrystalHitSmallSpriteTemplate 0x82, 0x3, 0xfff1 0xf 0x0
+ delay 0x3
+ return
+SubzeroSlammerIceSwirl:
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER
+ launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gSubzeroSlammerIceSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER
+ delay 0x2
+ return
+
+
+Move_DEVASTATING_DRAKE::
+ loadspritegfx ANIM_TAG_PURPLE_DRAKE
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @ purple
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @ shock wave
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call DevastatingDrakeBuffEffect
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x40c0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call DevastatingDrakeBuffEffect
+ delay 0x8
+ call DevastatingDrakeBuffEffect
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeShockwaveSpriteTemplate 0x2 0x0
+ delay 0x2a
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ monbg ANIM_ATTACKER
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeDrakeUpSpriteTemplate 0x2 0x7 0x0 0x0 0x4e0 0x24 0x15 0x1 ANIM_ATTACKER
+ clearmonbg ANIM_ATTACKER
+ fadetobg BG_SKY
+ invisible ANIM_ATTACKER
+ invisible ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff
+ waitbgfadein
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET DevastatingDrakeOnPlayer
+DevastatingDrakeOnOpponent:
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 @left to right
+ waitforvisualfinish
+ delay 0xa
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 @right to left
+ waitforvisualfinish
+ delay 0xa
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0x0f 0x15 @left to right
+ goto DevastatingDrakeFinish
+DevastatingDrakeOnPlayer:
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 @right to left
+ waitforvisualfinish
+ delay 0xa
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 @left to right
+ waitforvisualfinish
+ delay 0xa
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeLeftSpriteTemplate 0x32 0x5 0x0120 0x78 0xfff0 0x58 0x15 @right to left
+DevastatingDrakeFinish:
+ call UnsetPsychicBg
+ waitforvisualfinish
+ visible ANIM_TARGET
+ delay 0xa
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeStrikeSpriteTemplate 0x82 0x1 0x14
+ delay 0x10
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ loadspritegfx ANIM_TAG_EXPLOSION
+ launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION, 0x0, 0xC, 0xC, 0x502B
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x5 0x35
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x10 0x40c0 @ fade to purple
+ call DevastatingDrakeExplosion
+ delay 0x6
+ launchtask AnimTask_IsTargetPartner 0x5 0x0
+ jumpargeq 0x0 0x1 DevastatingDrakeFadeTargetPartner
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x6, 0x0, 0x10, 0x40c0
+ call DevastatingDrakeExplosion
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back
+DevastatingDrakeUniversalEnding:
+ loadspritegfx ANIM_TAG_FIRE_PLUME
+ loadspritegfx ANIM_TAG_VERTICAL_HEX
+ loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion
+ unloadspritegfx ANIM_TAG_PURPLE_DRAKE
+ launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_FIRE_PLUME, 0x0, 0xC, 0xC, 0x502B
+ launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_VERTICAL_HEX, 0x0, 0xC, 0xC, 0x502B
+ launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x502B
+ launchtask AnimTask_HorizontalShake 0x5 0x3 0x1 0x5 0x20
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ call DevastatingDrakeGeyser
+ playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ call DevastatingDrakeGeyser
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ call DevastatingDrakeGeyser
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0
+ launchtemplate gDevastatingDrakePurpleBlastSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ call DevastatingDrakeGeyser
+ delay 0x4
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x10 0x0 0x40c0 @ fade from purple
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x0 @ reset all colours
+ waitforvisualfinish
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+DevastatingDrakeFadeTargetPartner:
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x6, 0x0, 0x10, 0x40c0
+ call DevastatingDrakeExplosion
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back
+ goto DevastatingDrakeUniversalEnding
+DevastatingDrakeBuffEffect:
+ launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gDevastatingDrakePurpleEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+DevastatingDrakeGeyser:
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0x0005 0x1 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xfff1 0x1 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xfffb 0x1 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0012 0x1 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0x0005 0x1 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xfff5 ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffe1 ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffeb ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0002 ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xfff5 ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xffe5 ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffd1 ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffdb ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfffc 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0xfff2 ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x100D 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xffe5 ANIM_TARGET 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0x4 0x10
+ delay 0x0
+ launchtemplate gDevastatingDrakeHexSpriteTemplate 0x82, 0x3, ANIM_TARGET 0xfff0 0x10
+ return
+DevastatingDrakeExplosion:
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gDevastatingDrakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ return
+
+
+Move_BLACK_HOLE_ECLIPSE::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave
+ loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_ICE_CHUNK @blue
+ loadspritegfx ANIM_TAG_BLACK_BALL_2 @black
+ invisible ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call EndureEffect
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x0000
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call EndureEffect
+ delay 0x8
+ call EndureEffect
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ launchtemplate gBlackHoleEclipseShockwaveSpriteTemplate 0x2 0x0
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @black
+ playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER
+ launchtemplate gBlackHoleEclipseHoleUserSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_ATTACKER 0x0
+ launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ delay 0x8
+ waitforvisualfinish
+ stopsound
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x07 0x0000
+ loadspritegfx ANIM_TAG_WISP_ORB @will o wisp
+ invisible ANIM_ATTACKER
+ loopsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x10, 0x5
+ launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x2 0x3 0x0 0x10 0x0
+ delay 0x3
+ launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x3 0x3 0x0 0x10 0x1
+ delay 0x3
+ launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x2
+ delay 0x3
+ launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x3
+ waitforvisualfinish
+ fadetobg BG_BLACKHOLE_ECLIPSE
+ playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0
+ delay 0x4
+ launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0
+ delay 0x4
+ launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0
+ waitbgfadeout
+ unloadspritegfx ANIM_TAG_WISP_ORB
+ launchtemplate gBlackHoleEclipseHoleSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 @ eclipse at target origin
+ delay 0x10
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 @ target down and left (instantaneously (last arg))
+ delay 0x2
+ visible ANIM_TARGET
+ loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x5
+ launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin target around (0x50 (time), -0x400 (rot speed))
+ launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly)
+ launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x15
+ invisible ANIM_TARGET
+ delay 0x8
+ launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gBlackHoleEclipseHoleShrinkSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_SPARKLE_4 @detect
+ launchtemplate gTargetTwinkleSpriteTemplate 0xd 0x3 0x0 0x0 ANIM_TARGET @detect star
+ delay 0x2
+ unloadspritegfx ANIM_TAG_SHADOW_BALL
+ unloadspritegfx ANIM_TAG_THIN_RING
+ unloadspritegfx ANIM_TAG_ICE_CHUNK
+ unloadspritegfx ANIM_TAG_BLACK_BALL_2
+ loadspritegfx ANIM_TAG_EXPLOSION_2
+ call BlackHoleEclipseExplosion
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x1, 0x0, 0x10, 0x7fff @ bg to white pal
+ call BlackHoleEclipseExplosion
+ waitforvisualfinish
+ delay 0x18
+ invisible ANIM_TARGET
+ launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix rotation
+ invisible ANIM_TARGET
+ delay 0x1
+ waitforvisualfinish
+ call ResetFromWhiteScreen
+ end
+BlackHoleEclipseExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ return
+ResetFromWhiteScreen:
+ launchtask AnimTask_AllBanksInvisible 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x7FFF @everything from white
+ restorebg
+ waitbgfadeout
+ setarg 0x7 0xffff
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitbgfadein
+ waitforvisualfinish
+ delay 0x5
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x7fff
+ waitforvisualfinish
+ return
+
+
+Move_TWINKLE_TACKLE::
+ loadspritegfx ANIM_TAG_SPARKLE_2 @star
+ loadspritegfx ANIM_TAG_PINK_PETAL @pink
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ call TwinkleTacklePinkStars
+ delay 0x8
+ fadetobg BG_TWINKLE_TACKLE
+ launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ waitbgfadeout
+ invisible ANIM_TARGET
+ delay 0x1
+ loadspritegfx ANIM_TAG_YELLOW_STAR
+ launchtemplate gTwinkleTackleStarGrowSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ waitforvisualfinish
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET TwinkleTackleOnPlayer
+TwinkleTackleOnOpponent:
+ call PlayerTwinkling
+ goto TwinkleTackleFinish
+TwinkleTackleOnPlayer:
+ call OpponentTwinkling
+TwinkleTackleFinish:
+ waitforvisualfinish
+ delay 0x5
+ visible ANIM_ATTACKER
+ visible ANIM_TARGET
+ launchtask AnimTask_SwayMon 0x5 0x5, 0x0 0x8 2048 1 ANIM_ATTACKER
+ call TwinkleTackleStars
+ waitforvisualfinish
+ launchtask AnimTask_SwayMon 0x5 0x5, 0x0 0x8 2048 1 ANIM_ATTACKER
+ call TwinkleTackleStars
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_SPARKLE_4 @detect
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_PAIN_SPLIT @pain-split
+ delay 0x1
+ launchtemplate gTwinkleTackleYellowImpactSpriteTemplate 0x2 0x4 0x0 0x0 0x1 0x0
+ call TwinkleTackleStarsTarget
+ playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET
+ delay 0x5
+ launchtask AnimTask_TwinkleTackleLaunch 0x2 0x1 89
+ delay 89
+ playsewithpan SE_M_DETECT, SOUND_PAN_TARGET
+ launchtemplate gTwinkleTackleTwinkleSpriteTemplate 0x8d, 0x3, 0x0 0x0 ANIM_TARGET @detect star
+ waitforvisualfinish
+ delay 0x10
+ restorebg
+ delay 0x18
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+TwinkleTacklePinkStars:
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c
+ launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ delay 0x8
+ launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c
+ delay 0x8
+ launchtemplate gTwinkleTacklePinkRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ return
+PlayerTwinkling:
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles
+ launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x12 0x0 0x0 0x0 0x20 0x1c
+ delay 0x3
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x1f 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x16
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x20 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x10 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x0 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xfff0 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffe0 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffd0 0xffc0 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xffc0 0xffc0 0x0 0x0 0x20 0x1c
+ return
+OpponentTwinkling:
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER
+ setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles
+ launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0 @ user fly on screen on enemy side
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x10 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x20 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xa0 0xfffb 0x0 0x0 0x20 0x1c
+ delay 0x5
+ playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0xa0 0x2c 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x90 0x2c 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x80 0x2c 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x70 0x2c 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x60 0x2c 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x50 0x2c 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x40 0x2c 0x0 0x0 0x20 0x1c
+ delay 0x1
+ launchtemplate gTwinkleTacklePinkStarSpriteTemplate 0x2 0x6 0x30 0x2c 0x0 0x0 0x20 0x1c
+ return
+TwinkleTackleStars:
+ playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER
+ launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12
+ launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12
+ launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12
+ launchtemplate gTwinkleTackleDigStarSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12
+ return
+TwinkleTackleStarsTarget:
+ launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0
+ launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8
+ launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0
+ launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda
+ launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea
+ launchtemplate gTwinkleTackleImpactStarsSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1
+ return
+
+@ signature z moves
+Move_CATASTROPIKA::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ invisible ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call EndureEffect
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call EndureEffect
+ delay 0x8
+ call EndureEffect
+ delay 0x8
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW
+ launchtask AnimTask_GetTimeOfDay 0x2 0x0
+ jumpargeq 0x0 0x0 CatastropikaDaytime
+ jumpargeq 0x0 0x2 CatastropikaAfternoon
+CatastropikaNight:
+ fadetobg BG_BLUE_SKY_NIGHT
+ goto CatastropikaFinish
+CatastropikaDaytime:
+ fadetobg BG_BLUE_SKY_DAY
+ goto CatastropikaFinish
+CatastropikaAfternoon:
+ fadetobg BG_BLUE_SKY_AFTERNOON
+CatastropikaFinish:
+ waitbgfadeout
+ visible ANIM_ATTACKER
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_SPARK_2 @spark
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3
+@ delay 0x14
+@ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x0 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x40 0x28 0x1 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c 0x80 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x12 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+@ delay 0x14
+@ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER @ charge
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0x20 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0x60 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0xa0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x16 0x2c 0xe0 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1a 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1e 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ restorebg
+ waitbgfadeout
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_METEOR
+ invisible ANIM_ATTACKER
+ visible ANIM_TARGET
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+ launchtemplate gCatastrokpikaSuperpowerSpriteTemplate 0x83 0x1 0x0
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x20 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x60 0x8 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xa0 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xe0 0x8 0x2 0x3
+ delay 0x1
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x20 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x60 0x8 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xa0 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xe0 0x8 0x2 0x3
+ delay 0x1
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x20 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x60 0x8 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xa0 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xe0 0x8 0x2 0x3
+ delay 0xd
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4
+ loadspritegfx ANIM_TAG_MUD_SAND
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0xc 0xffe8 0xfff0 0x18 @ 12, -48, -16, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x0 0x10 0xffda 0xfff6 0x18 @ 16, -16, -10, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xe 0xffec 0xffee 0x18 @ 14, -52, -18, 24
+ launchtemplate gDirtPlumeSpriteTemplate 0x82 0x6 ANIM_TARGET 0x1 0xc 0xffdc 0xfff0 0x18 @ 12, -32, -16, 24
+ loadspritegfx ANIM_TAG_LIGHTNING @thunder
+ call CatastropikaThundering
+ invisible ANIM_TARGET
+ unloadspritegfx ANIM_TAG_MUD_SAND
+ call CatastropikaThundering
+ call CatastropikaThundering
+ call CatastropikaThundering
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x7fff @ bg to white
+ call CatastropikaThundering
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x10, 0x0, 0x7fff @ bg to white
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10 @fix tgt position
+ waitforvisualfinish
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+CatastropikaThundering:
+ playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0
+ delay 2
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10
+ delay 2
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0
+ delay 2
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10
+ delay 2
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0xfff0
+ delay 2
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x0 0x10
+ delay 2
+ return
+
+
+Move_10000000_VOLT_THUNDERBOLT::
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ loadspritegfx ANIM_TAG_SPARK_2 @sparks
+ loadspritegfx ANIM_TAG_LIGHTNING @lightning
+ invisible ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call EndureEffect
+ waitforvisualfinish
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate g10MillionVoltBoltYellowFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x20 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x60 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xa0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xe0 0x28 0x2 0x3
+ delay 0x2
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x20 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x60 0x28 0x1 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xa0 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xe0 0x28 0x2 0x3
+ delay 0x2
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x20 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x60 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xa0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xe0 0x28 0x2 0x3
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY
+ fadetobg BG_THUNDER
+ waitbgfadeout
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xff00 0x0 0x1 0xffff
+ waitbgfadein
+ visible ANIM_ATTACKER
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @charge particles to user
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x20 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0x60 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xa0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x10 0x2c 0xe0 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x14 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x10
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+ launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash
+ launchtemplate gGrowingChargeOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER @ charge
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xffdc
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xffec
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0x40 0xc
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x0 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x40 0x28 0x1 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c 0x80 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x18 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+ launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xffdc
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xffec
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffc0 0xc
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x1c 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x14
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+ launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xffdc
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xffec
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0xff90 0xc
+ delay 0x14
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x0 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x40 0x28 0x1 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x80 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x10
+ playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET
+ launchtask AnimTask_InvertScreenColor 0x2 0x3 0x101 0x101 0x101 @thunder flash
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xffdc
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xffec
+ delay 0x1
+ launchtemplate gLightningSpriteTemplate 0x82 0x2 0xffd0 0xc
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x0 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x40 0x28 0x1 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c 0x80 0x28 0x0 0x3
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x2a 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ waitforvisualfinish
+ call UnsetPsychicBg
+ visible ANIM_TARGET
+ loadspritegfx ANIM_TAG_ORBS @hyper beam
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ loadspritegfx ANIM_TAG_WATER_ORB @blue
+ loadspritegfx ANIM_TAG_BERRY_EATEN @pink
+ loadspritegfx ANIM_TAG_LEAF @green
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @purple
+ loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER, 0x5, 0xA
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_ATTACKER 0x0 0x4 0x32 0x1
+@ launchtask AnimTask_FlashAnimTagWithColor, 0x2, 0x7, ANIM_TAG_ORBS, 0x1, 0xc, 0x1f, 0x10, 0x0, 0x0
+ call TenMillionVoltThunderboltBeamRed
+ call TenMillionVoltThunderboltBeamBlue
+ launchtask AnimTask_ShakeMon2 0x2 0x5 ANIM_TARGET 0x4 0x0 0x32 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x9 0x07FE
+ call TenMillionVoltThunderboltBeamPink
+ call TenMillionVoltThunderboltBeamYellow
+ call TenMillionVoltThunderboltBeamGreen
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x32 0x1
+ call TenMillionVoltThunderboltBeamPurple
+ call TenMillionVoltThunderboltBeamRed
+ call TenMillionVoltThunderboltBeamBlue
+ call TenMillionVoltThunderboltBeamPink
+ call TenMillionVoltThunderboltBeamYellow
+ call TenMillionVoltThunderboltBeamGreen
+ call TenMillionVoltThunderboltBeamPurple
+ call TenMillionVoltThunderboltBeamRed
+ call TenMillionVoltThunderboltBeamBlue
+ call TenMillionVoltThunderboltBeamPink
+ call TenMillionVoltThunderboltBeamYellow
+ call TenMillionVoltThunderboltBeamGreen
+@ call TenMillionVoltThunderboltBeamPurple
+@ call TenMillionVoltThunderboltBeamRed
+@ call TenMillionVoltThunderboltBeamBlue
+@ call TenMillionVoltThunderboltBeamPink
+@ call TenMillionVoltThunderboltBeamYellow
+@ call TenMillionVoltThunderboltBeamGreen
+@ call TenMillionVoltThunderboltBeamPurple
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x25 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
+@ delay 0x6
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x35 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
+@ delay 0x6
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x40 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ launchtemplate g10MillionVoltBoltShockwaveSpriteTemplate 0x82 0x0 @ charge out and in
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_ORBS @hyper beam
+ unloadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ unloadspritegfx ANIM_TAG_WATER_ORB @blue
+ unloadspritegfx ANIM_TAG_BERRY_EATEN @pink
+ unloadspritegfx ANIM_TAG_LEAF @green
+ unloadspritegfx ANIM_TAG_POISON_BUBBLE @purple
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x2c
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x30 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
+ call TenMillionVoltThunderboltSparkGeyser
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x37 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x8003
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x7fff
+ call TenMillionVoltThunderboltSparkGeyser
+ waitforvisualfinish
+ delay 0x10
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x3, 0x10, 0x0, 0x7fff
+ waitforvisualfinish
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+TenMillionVoltThunderboltBeamRed:
+ launchtemplate g10MillionVoltBoltRedBeamSpriteTemplate 0x82 0x0
+ launchtemplate g10MillionVoltBoltRedBeamSpriteTemplate 0x82 0x0
+ delay 4
+ return
+TenMillionVoltThunderboltBeamBlue:
+ launchtemplate g10MillionVoltBoltBlueBeamSpriteTemplate 0x82 0x0
+ launchtemplate g10MillionVoltBoltBlueBeamSpriteTemplate 0x82 0x0
+ delay 4
+ return
+TenMillionVoltThunderboltBeamPink:
+ launchtemplate g10MillionVoltBoltPinkBeamSpriteTemplate 0x82 0x0
+ launchtemplate g10MillionVoltBoltPinkBeamSpriteTemplate 0x82 0x0
+ delay 4
+ return
+TenMillionVoltThunderboltBeamYellow:
+ launchtemplate g10MillionVoltBoltYellowBeamSpriteTemplate 0x82 0x0
+ launchtemplate g10MillionVoltBoltYellowBeamSpriteTemplate 0x82 0x0
+ delay 4
+ return
+TenMillionVoltThunderboltBeamGreen:
+ launchtemplate g10MillionVoltBoltGreenBeamSpriteTemplate 0x82 0x0
+ launchtemplate g10MillionVoltBoltGreenBeamSpriteTemplate 0x82 0x0
+ delay 4
+ return
+TenMillionVoltThunderboltBeamPurple:
+ launchtemplate g10MillionVoltBoltPurpleBeamSpriteTemplate 0x82 0x0
+ launchtemplate g10MillionVoltBoltPurpleBeamSpriteTemplate 0x82 0x0
+ delay 4
+ return
+TenMillionVoltThunderboltSparkGeyser:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x8003
+ delay 0x4
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x80 0x28 0x0 0x8003
+ delay 0x4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x80 0x28 0x0 0x8003
+ delay 0x4
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x80 0x28 0x0 0x8003
+ delay 0x4
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x8
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x8
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ return
+
+
+Move_STOKED_SPARKSURFER::
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ loadspritegfx ANIM_TAG_SPARK_2 @spark
+ invisible ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gStokedSparksurferFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x20 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0x60 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xa0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0x0 0x20 0x2c 0xe0 0x28 0x2 0x3
+ delay 0x2
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x20 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0x60 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xa0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffe0 0x20 0x2c 0xe0 0x28 0x2 0x3
+ delay 0x2
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x20 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0x60 0x28 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xa0 0x28 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0x0 0xffd0 0x20 0x2c 0xe0 0x28 0x2 0x3
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW
+ launchtask AnimTask_GetTimeOfDay 0x2 0x0
+ jumpargeq 0x0 0x0 StokedSparksurferDay
+ jumpargeq 0x0 0x2 StokedSparksurferAfternoon
+StokedSparksurferNight:
+ fadetobg BG_BLUE_SKY_NIGHT
+ goto StokedSparksurferFinish
+StokedSparksurferAfternoon:
+ fadetobg BG_BLUE_SKY_AFTERNOON
+StokedSparksurferDay:
+ fadetobg BG_BLUE_SKY_DAY
+StokedSparksurferFinish:
+ waitbgfadeout
+ visible ANIM_ATTACKER
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x1c 0x2 0xc
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x3c 0x1
+ call EndureEffect
+ delay 0x8
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x5 0x0 0x10 0x5bff
+ call EndureEffect
+ delay 0x8
+ call EndureEffect
+ delay 0x2
+ loadspritegfx ANIM_TAG_SPARK
+ loadspritegfx ANIM_TAG_ELECTRICITY
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0x10 0x0 0x5bff
+ launchtemplate gVoltTackleOrbSlideSpriteTemplate 0x1 0x0
+ playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x0
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x1
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET
+ waitforvisualfinish
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x2
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x3
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET
+ delay 0x1
+ fadetobg BG_ZMOVE_ACTIVATE
+ waitbgfadeout
+ visible ANIM_TARGET
+ launchtask AnimTask_VoltTackleBolt 0x5 0x1 0x4
+ playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_SPARK
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY
+ unloadspritegfx ANIM_TAG_ELECTRIC_ORBS
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x5 0x1c
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x30 0x2c 0xc0 0x28 0x2 0x8003
+ call StokedSparksurferSparkGeyser
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF | ANIM_PAL_ATK, 0x2, 0x0, 0x10, 0x5bff
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x0 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x40 0x28 0x1 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x37 0x2c 0x80 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x00 0x37 0x2c 0xc0 0x28 0x2 0x8003
+ call StokedSparksurferSparkGeyser
+ launchtask AnimTask_VoltTackleAttackerReappear 0x5 0x0 @ attacker flicker back
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0x10 0x10
+ delay 0x2
+ launchtemplate gElectricPuffSpriteTemplate 0x2 0x3 0x0 0xfff0 0xfff0
+ delay 0x4
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_DEF | ANIM_PAL_ATK, 0x2, 0x10, 0x0, 0x5bff
+ restorebg
+ delay 0x18
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+
+StokedSparksurferSparkGeyser:
+ playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x40 0x28 0x1 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x5 0x2c 0x80 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x8003
+ delay 0x4
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x0 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffea 0x5 0x2c 0x80 0x28 0x0 0x8003
+ delay 0x4
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x0 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x5 0x2c 0x80 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x40 0x28 0x1 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffd4 0x15 0x2c 0x80 0x28 0x0 0x8003
+ delay 0x4
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x0 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x40 0x28 0x1 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x5 0x2c 0x80 0x28 0x0 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x0 0x28 0x0 0x8003
+@ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x40 0x28 0x1 0x8003
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x84 0x8 0x0 0xffbe 0x15 0x2c 0x80 0x28 0x0 0x8003
+ delay 0x1a
+ return
+
+
+Move_EXTREME_EVOBOOST::
+ loadspritegfx ANIM_TAG_LEER @leer
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK | ANIM_PAL_ATK_PARTNER | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 0x3, 0x0, 0x10, 0x0000
+ waitforvisualfinish
+ launchtask AnimTask_AllBanksInvisible 0xA 0x0
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ATK | ANIM_PAL_ATK_PARTNER | ANIM_PAL_OPPONENT1 | ANIM_PAL_OPPONENT2, 3, 0, 0, 0 @;Remove fading on everyone
+ waitforvisualfinish
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0x18 0xfff4
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffe8 0xfff4
+ delay 0xa
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0x28 0xfff0
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0xfff8 0xfff0
+ delay 0xa
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0x8 0xfffe
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffd8 0xfffe
+ delay 0xa
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0x10 0x5
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffe0 0x5
+ delay 0xa
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0x20 0xfff0
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0xfff0 0xfff0
+ delay 0xa
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0x5 0x0
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffd5 0x0
+ delay 0xa
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0x1c 0x5
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffec 0x5
+ delay 0xa
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0xf 0xfff4
+ launchtemplate gLeerSpriteTemplate 0x2 0x2 0xffdf 0xfff4
+ waitforvisualfinish
+ fadetobg BG_ZMOVE_ACTIVATE
+ waitbgfadeout
+ unloadspritegfx ANIM_TAG_LEER
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ loadspritegfx ANIM_TAG_BERRY_EATEN @pink
+ loadspritegfx ANIM_TAG_ICE_CHUNK @ice
+ loadspritegfx ANIM_TAG_WISP_ORB @will o wisp
+ loadspritegfx ANIM_TAG_WATER_ORB @blue
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @purple
+ loadspritegfx ANIM_TAG_LEAF @green
+ launchtask AnimTask_BlendParticle, 0x5, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0x10, 0x10, 0x5bff
+ waitforvisualfinish
+ playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER
+ launchtemplate gExtremeEvoboostRedChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gExtremeEvoboostPinkChargeUpSpriteTemplate 0x82 0x7 0x0 0x20 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gExtremeEvoboostIceChargeUpSpriteTemplate 0x82 0x7 0x0 0x21 0x540 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gExtremeEvoboostBlackChargeUpSpriteTemplate 0x82 0x7 0x0 0x1f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gExtremeEvoboostBlueChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x500 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gExtremeEvoboostPurpleChargeUpSpriteTemplate 0x82 0x7 0x0 0x21 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gExtremeEvoboostYellowChargeUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gExtremeEvoboostGreenChargeUpSpriteTemplate 0x82 0x7 0x0 0x20 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ waitforvisualfinish
+ visible ANIM_ATTACKER
+ loopsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x15, 0xd
+ call ExtremeEvoboostColorCircle
+ launchtask AnimTask_StockpileDeformMon 0x5 0x0 @stockpile movement
+ call ExtremeEvoboostColorCharge
+ call ExtremeEvoboostColorCharge
+ call ExtremeEvoboostColorCharge
+ waitforvisualfinish
+ playsewithpan SE_SHINY, SOUND_PAN_ATTACKER
+ delay 0x5
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ATK | ANIM_PAL_BG, 0x0, 0x0, 0x10, 0x7fff
+ delay 0x18
+ call ResetFromWhiteScreen
+ end
+ExtremeEvoboostColorCircle:
+ launchtemplate gExtremeEvoboostRedChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostIceChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ return
+ExtremeEvoboostColorCharge:
+ launchtemplate gExtremeEvoboostRedChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostRedStockpileSpriteTemplate 0x2 0x3 0x37 0x37 0xd
+ delay 0x2
+ launchtemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostPinkStockpileSpriteTemplate 0x2 0x3 0xffc9 0xffc9 0xd
+ delay 0x2
+ launchtemplate gExtremeEvoboostIceChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostIceStockpileSpriteTemplate 0x2 0x3 0x0 0x37 0xd
+ delay 0x2
+ launchtemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostBlackStockpileSpriteTemplate 0x2 0x3 0x0 0xffc9 0xd
+ delay 0x2
+ launchtemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostBlueStockpileSpriteTemplate 0x2 0x3 0x37 0xffde 0xd
+ delay 0x2
+ launchtemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostPurpleStockpileSpriteTemplate 0x2 0x3 0x37 0x22 0xd
+ delay 0x2
+ launchtemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostYellowStockpileSpriteTemplate 0x2 0x3 0xffc9 0xffde 0xd
+ delay 0x2
+ launchtemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate 0x2 0x2 0x0 0xfff0
+ delay 0x2
+ launchtemplate gExtremeEvoboostGreenStockpileSpriteTemplate 0x2 0x3 0xffc9 0x22 0xd
+ delay 0x2
+ return
+
+
+Move_PULVERIZING_PANCAKE::
+ loadspritegfx ANIM_TAG_SPARKLE_4 @detect
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ loadspritegfx ANIM_TAG_MUD_SAND @dig
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @black colour
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET PulverizingPancakeOnPlayer
+PulverizingPancakeOnOpponent:
+ launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0x14 0xffec
+ goto PulverizingPancakeFinish
+PulverizingPancakeOnPlayer:
+ launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0xa 0xfff2
+ launchtemplate gPulverizingPancakeRedDetectSpriteTemplate 0xd 0x2 0xfff6 0xfff2
+PulverizingPancakeFinish:
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ fadetobg BG_SOLAR_BEAM_OPPONENT
+ waitbgfadeout
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x32 0x1
+ call PulverizingPancakeDiggingRun
+ call PulverizingPancakeDiggingRun
+ call PulverizingPancakeDiggingRun
+ call PulverizingPancakeDiggingRun
+ call PulverizingPancakeDiggingRun
+ call PulverizingPancakeDiggingRun
+ call PulverizingPancakeDiggingRun
+ call PulverizingPancakeDiggingRun
+ call PulverizingPancakeDiggingRun
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ launchtemplate gFlyBallUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ delay 0x2
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x22
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x22
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x22
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x22
+ unloadspritegfx ANIM_TAG_SPARKLE_4
+ unloadspritegfx ANIM_TAG_VERTICAL_HEX
+ fadetobg BG_IN_AIR
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x1000 0x0 0xffff
+ waitbgfadein
+ loadspritegfx ANIM_TAG_WHITE_SHADOW
+ launchtask AnimTask_PulverizingPancakeWhiteShadow 0x5 0x2 0x33 0x33 @first arg is duration, last arg is move speed
+ delay 0x10
+ call PulverizingPancakeSlowBackground
+ call PulverizingPancakeSlowBackground
+ call PulverizingPancakeSlowBackground
+ call PulverizingPancakeSlowBackground
+ call PulverizingPancakeSlowBackground
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 0x4 0x2 0x0 0xb 0x0000 @ target darkens
+ call PulverizingPancakeSlowBackground @0
+ call PulverizingPancakeSlowBackground
+ call PulverizingPancakeSlowBackground
+ call PulverizingPancakeSlowBackground
+ call PulverizingPancakeSlowBackground
+ call PulverizingPancakeSlowBackground
+ call PulverizingPancakeSlowBackground @-0x1000
+ delay 0x1
+ waitbgfadein
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ unloadspritegfx ANIM_TAG_MUD_SAND @dig
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS @yellow
+ launchtemplate gBounceBallLandSpriteTemplate 0x83 0x0
+ delay 0x7
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gBasicHitSplatSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0 @big hit marker
+ delay 0x0
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x4 0x2c
+ launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0
+ delay 0x5
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion
+ call PulverizingPancakeExplosion
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x7fff @ everything goes white
+ call PulverizingPancakeExplosion
+ waitforvisualfinish
+ call ResetFromWhiteScreen
+ end
+PulverizingPancakeDiggingRun:
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ delay 0x5
+ return
+PulverizingPancakeSlowBackground:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xfd56 0x0 0xffff @-0x2aa
+ delay 0x1
+ return
+PulverizingPancakeExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0
+ launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gPulverizingPancakeYellowRingSpriteTemplate 0x83 0x4 0x0 0x0 0x100 0x0
+ launchtemplate gPulverizingPancakeExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ return
+
+
+Move_GENESIS_SUPERNOVA::
+ loadspritegfx ANIM_TAG_BLUE_ORB @reversal
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble
+ loadspritegfx ANIM_TAG_POISON_JAB @purple
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ call SetPsychicBackground
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET GenesisSupernovaOnPlayer
+GenesisSupernovaOnOpponent:
+ call GenesisSupernovaBuffEffectPlayer_1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0xd87c
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x70 0x1
+ call GenesisSupernovaBuffEffectPlayer_2
+ call GenesisSupernovaBuffEffectPlayer_1
+ goto GenesisSupernovaFinish
+GenesisSupernovaOnPlayer:
+ call GenesisSupernovaBuffOpponent_1
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0x0 0xb 0xd87c
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x70 0x1
+ call GenesisSupernovaBuffOpponent_2
+ call GenesisSupernovaBuffOpponent_1
+GenesisSupernovaFinish:
+ loopsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER, 0x18, 0x6
+ call GenesisSupernovaReversalWave
+ call GenesisSupernovaReversalWave
+ call GenesisSupernovaReversalWave
+ delay 0x15
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ monbg ANIM_ATTACKER
+ setblends 0x80c
+ launchtemplate gGenesisSupernovaChargeSpriteTemplate 0x2 0x1 0x0 @charge
+ call GenesisSupernovaFlare @delay 12 per
+ call GenesisSupernovaFlare
+ call GenesisSupernovaFlare
+ call GenesisSupernovaFlare
+ call GenesisSupernovaFlare
+ delay 0x4
+ unloadspritegfx ANIM_TAG_BLUE_ORB @reversal
+ loadspritegfx ANIM_TAG_WISP_ORB @will-o-wisp
+ loadspritegfx ANIM_TAG_METEOR @superpower
+ loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles
+ launchtemplate gGenesisSupernovaSuperpowerSpriteTemplate 0x83 0x1 0x0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x0 0xb 0x0 0xd87c
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_SPARKLE_2, 0x0, 0x0, 0xc, 0x7fff
+ delay 0x8
+ invisible ANIM_TARGET
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion
+ unloadspritegfx ANIM_TAG_METEOR @superpower
+ call GenesisSupernovaBubbleExplosion
+ call GenesisSupernovaBubbleExplosion
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x3, 0x0, 0x10, 0x7fff
+ call GenesisSupernovaBubbleExplosion
+ waitforvisualfinish
+ delay 0x10
+ launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_SPARKLE_2, 0x0, 0xc, 0x0, 0x7fff
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ delay 0x0
+ call ResetFromWhiteScreen
+ waitforvisualfinish
+ end
+GenesisSupernovaBubbleExplosion:
+ launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 ANIM_TARGET 0x0 0x20 0x3c
+ launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xa 0xa 0x0
+ launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ delay 0x6
+ launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x14 0xffec 0x0
+ launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ delay 0x6
+ launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb ANIM_TARGET 0x0 0x20 0x3c
+ launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xffec 0xf 0x0
+ launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ delay 0x6
+ launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x0 0x0 0x0
+ launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ delay 0x6
+ launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0xffec 0xffec 0x0
+ launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ delay 0x6
+ launchtemplate gGenesisSupernovaBubbleSpriteTemplate 0x82, 0x3, 0x10 0xfff8 0x0
+ launchtemplate gGenesisSupernovaExplosionSpriteTemplate 0x3 0x4 0xffe0 0xffe8 ANIM_TARGET 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ return
+GenesisSupernovaBuffEffectPlayer_1:
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x24 0x80 0x24 0x30 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x10 0x80 0x10 0x35 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x45 0x80 0x45 0x3a 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x30 0x80 0x30 0x3c 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x55 0x80 0x55 0x33 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+GenesisSupernovaBuffEffectPlayer_2:
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x29 0x80 0x29 0x31 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x73 0x80 0x73 0x32 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x4a 0x80 0x4a 0x3c 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x64 0x80 0x64 0x33 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x2c 0x80 0x2c 0x3d 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaOrbRiseSpriteTemplate 0x32 0x5 0x6c 0x80 0x6c 0x30 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+GenesisSupernovaReversalWave:
+ launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x0
+ launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x2a
+ launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x54
+ launchtemplate gGenesisSupernovaReversalSpriteTemplate 0x2 0x2 0x1a 0x7e
+ return
+GenesisSupernovaFlare:
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER
+ delay 0x2
+ return
+GenesisSupernovaBuffOpponent_1:
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x94 0x40 0x94 0x0 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x80 0x40 0x80 0x0 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xb5 0x40 0xb5 0x0 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xa0 0x40 0xa0 0x0 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xc5 0x40 0xc5 0x0 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+GenesisSupernovaBuffOpponent_2:
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x99 0x40 0x99 0x0 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xe3 0x40 0xe3 0x0 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xba 0x40 0xba 0x0 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xd4 0x40 0xd4 0x0 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0x9c 0x40 0x9c 0x0 0x30
+ delay 0x2
+ launchtemplate gGenesisSupernovaSpinUpSpriteTemplate 0x32 0x5 0xdc 0x40 0xdc 0x0 0x30
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+
+
+Move_SINISTER_ARROW_RAID::
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ loadspritegfx ANIM_TAG_SPIRIT_ARROW @arrow
+ loadspritegfx ANIM_TAG_LEAF @green
+ invisible ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidFlyUpSpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x10 0x388C @ bg to purple
+ waitforvisualfinish
+ visible ANIM_ATTACKER
+ playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET
+ launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gArrowRaidArrowUpSpriteTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x2
+ waitforvisualfinish
+ invisible ANIM_ATTACKER
+ loadspritegfx ANIM_TAG_BIRD @sky attack
+ loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @purple
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET SinisterArrowRaidOnPlayer
+SinisterArrowRaidOnOpponent:
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15 @left to right
+ delay 0x5
+ launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x8a 0x100 0x3a 0x15 @left to right
+ delay 0x1
+ launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x8c 0x100 0x3c 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x86 0x100 0x36 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x84 0x100 0x34 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightUpSpriteTemplate 0x32 0x5 0xfff0 0x88 0x100 0x38 0x15
+ waitforvisualfinish
+ delay 0xa
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER @[x0] [y0] [xf] [yf]
+ launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15 @right to left
+ delay 0x5
+ launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x36 0xfff0 0x36 0x15
+ delay 0x1
+ launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x3a 0xfff0 0x3a 0x15
+ delay 0x1
+ launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x37 0xfff0 0x37 0x15
+ delay 0x1
+ launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x3c 0xfff0 0x3c 0x15
+ delay 0x1
+ launchtemplate gArrowRaidLeftUpSpriteTemplate 0x32 0x5 0x0120 0x38 0xfff0 0x38 0x15
+ waitforvisualfinish
+ delay 0xa
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0x0f 0x15 @left to right
+ delay 0x5
+ launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x0a 0x100 0x11 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x0c 0x100 0x13 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x06 0x100 0xd 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x04 0x100 0xb 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightDownSpriteTemplate 0x32 0x5 0xfff0 0x08 0x100 0xf 0x15
+ waitforvisualfinish
+ call SinisterArrowRaidFlyStrike
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x4b
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x10 0x40c0 @ defender to purple
+ call SinisterArrowRaidStrikeOpponent
+ call SinisterArrowRaidOpponentExplosion
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ call SinisterArrowRaidFinalExplosion
+ goto SinisterArrowRaidFinish
+@on player
+SinisterArrowRaidOnPlayer:
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0x0f 0x15 @right to left
+ delay 0x5
+ launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x0a 0xfff0 0x11 0x15
+ delay 0x1
+ launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x0c 0xfff0 0x13 0x15
+ delay 0x1
+ launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x06 0xfff0 0xd 0x15
+ delay 0x1
+ launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x04 0xfff0 0xb 0x15
+ delay 0x1
+ launchtemplate gArrowRaidFaceUpLeftSpriteTemplate 0x32 0x5 0x0120 0x08 0xfff0 0xf 0x15
+ waitforvisualfinish
+ delay 0xa
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidFlyRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15 @left to right
+ delay 0x5
+ launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x36 0x100 0x36 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x3a 0x100 0x3a 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x37 0x100 0x37 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x3c 0x100 0x3c 0x15
+ delay 0x1
+ launchtemplate gArrowRaidRightSpriteTemplate 0x32 0x5 0xfff0 0x38 0x100 0x38 0x15
+ waitforvisualfinish
+ delay 0xa
+ playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidFlyLeftSpriteTemplate 0x32 0x5 0x0120 0x78 0xfff0 0x58 0x15 @right to left
+ delay 0x5
+ launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x8a 0xfff0 0x3a 0x15
+ delay 0x1
+ launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x8c 0xfff0 0x3c 0x15
+ delay 0x1
+ launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x86 0xfff0 0x36 0x15
+ delay 0x1
+ launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x84 0xfff0 0x34 0x15
+ delay 0x1
+ launchtemplate gArrowRaidLeftDownSpriteTemplate 0x32 0x5 0x100 0x88 0xfff0 0x38 0x15
+ waitforvisualfinish
+ call SinisterArrowRaidFlyStrike
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x4b
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x0 0x10 0x40c0 @ defender to purple
+ call SinisterArrowRaidArrowsStrikePlayer
+ call SinisterArrowRaidPlayerExplosion
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ call SinisterArrowRaidFinalExplosion
+@ finish
+SinisterArrowRaidFinish:
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x4 0x10 0x0 0x40c0 @ return tgt to normal
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x10 0x00 0x388C @ bg to nrml
+ delay 0x5
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+SinisterArrowRaidFlyStrike:
+ visible ANIM_TARGET
+ delay 0xa
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidFlyStrikeSpriteTemplate 0x82 0x1 0x14
+ waitforvisualfinish
+ delay 0x5
+ return
+SinisterArrowRaidStrikeOpponent:
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x95 0xfff0 0xb5 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x75 0xfff0 0x95 0x40 0x4
+ delay 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa5 0xfff0 0xc5 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x6f 0xfff0 0x8f 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x7b 0xfff0 0x9b 0x40 0x4
+ delay 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa2 0xfff0 0xc2 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x82 0xfff0 0xa2 0x40 0x4
+ delay 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x87 0xfff0 0xa7 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x72 0xfff0 0x92 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4
+ delay 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x8b 0xfff0 0xab 0x40 0x4
+ delay 0x1
+ return
+SinisterArrowRaidOpponentExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x95 0xfff0 0xb5 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x75 0xfff0 0x95 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa5 0xfff0 0xc5 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x6f 0xfff0 0x8f 0x40 0x4
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x7b 0xfff0 0x9b 0x40 0x4
+ delay 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xa2 0xfff0 0xc2 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x82 0xfff0 0xa2 0x40 0x4
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x87 0xfff0 0xa7 0x40 0x4
+ delay 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x72 0xfff0 0x92 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x85 0xfff0 0xa5 0x40 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x8b 0xfff0 0xab 0x40 0x4
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x1
+ return
+SinisterArrowRaidArrowsStrikePlayer:
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x5 0xfff0 0x55 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe5 0xfff0 0x35 0x90 0x4
+ delay 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x15 0xfff0 0x65 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffdf 0xfff0 0x2f 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffeb 0xfff0 0x3b 0x90 0x4
+ delay 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x12 0xfff0 0x62 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff2 0xfff0 0x42 0x90 0x4
+ delay 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff7 0xfff0 0x47 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe2 0xfff0 0x32 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4
+ delay 0x1
+ playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfffb 0xfff0 0x4b 0x90 0x4
+ delay 0x1
+ return
+SinisterArrowRaidPlayerExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x5 0xfff0 0x55 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe5 0xfff0 0x35 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x15 0xfff0 0x65 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffdf 0xfff0 0x2f 0x90 0x4
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffeb 0xfff0 0x3b 0x90 0x4
+ delay 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0x12 0xfff0 0x62 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff2 0xfff0 0x42 0x90 0x4
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff7 0xfff0 0x47 0x90 0x4
+ delay 0x1
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xffe2 0xfff0 0x32 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfff5 0xfff0 0x45 0x90 0x4
+ delay 0x1
+ launchtemplate gArrowRaidArrowOnslaughtSpriteTemplate 0x82 0x5 0xfffb 0xfff0 0x4b 0x90 0x4
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x1
+ return
+SinisterArrowRaidFinalExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gArrowRaidExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ return
+
+
+Move_MALICIOUS_MOONSAULT::
+ loadspritegfx ANIM_TAG_FIRE_PLUME @dragon rage
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ loadspritegfx ANIM_TAG_SMALL_EMBER @fire
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion
+ fadetobg BG_MALICIOUS_MOONSAULT
+ waitbgfadeout
+ setblends 0x80c
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
+ launchtemplate gVerticalDipSpriteTemplate 0x2 0x3 0x6 0x1 0x0
+ delay 0x1
+ launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0
+ launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gFirePlumeSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0
+ launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0
+ launchtemplate gFirePlumeSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0
+ waitforvisualfinish
+ delay 0x0
+ monbg ANIM_ATTACKER
+ playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
+ call MaliciousMoonsaultFireSpin
+ call MaliciousMoonsaultFireSpin
+ clearmonbg ANIM_ATTACKER
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gMaliciousMoonsaultRedFlySpriteTemplate 0x82, 0x4, 0x0 0x0 0xd 0x150
+ call MaliciousMoonsaultFireSpin
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x5 0x0 0xa 0x0000 @ target darkens
+ delay 0x1a
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
+ launchtemplate gMaliciousMoonsaultRedBounceSpriteTemplate 0x83 0x0
+ delay 0x7
+ launchtemplate gMaliciousMoonsaultRedImpactSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x0
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xff00 0x15 0x0 0x4
+ call MaliciousMoonsaultExplosion
+ delay 0x6
+ call MaliciousMoonsaultExplosion
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x1, 0x0, 0x10, 0x001b @ fade all to red
+ delay 0x6
+ call MaliciousMoonsaultExplosion
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10
+ waitforvisualfinish
+ call ResetFromRedScreen
+ blendoff
+ end
+MaliciousMoonsaultFireSpin:
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x1
+ return
+MaliciousMoonsaultExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMaliciousMoonsaultExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gMaliciousMoonsaultFireblastSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ return
+
+
+Move_OCEANIC_OPERETTA::
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_SPOTLIGHT
+ launchtask AnimTask_CreateSpotlight 0x2 0x0
+ launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0x0 0xa 0x0
+ waitforvisualfinish
+ launchtemplate gOceanOperaSpotlightSpriteTemplate 0x82, 0x3, 0x0 0xfff8 0x50 @spotlight
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_WATER_ORB @blue
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call OceanicOperettaBuffEffect
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x7fff
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call OceanicOperettaBuffEffect
+ delay 0x8
+ call OceanicOperettaBuffEffect
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY
+ unloadspritegfx ANIM_TAG_SPOTLIGHT
+ launchtask AnimTask_HardwarePaletteFade 0x2 0x5 0xf8 0x3 0xa 0x0 0x1
+ waitforvisualfinish
+ launchtask AnimTask_RemoveSpotlight 0x2 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x6 0x5da0
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
+ loadspritegfx ANIM_TAG_THIN_RING
+ invisible ANIM_ATTACKER
+ launchtemplate gOceanOperaBlueChargeSpriteTemplate 0x2 0x1 0x0 @charge
+ delay 0x2
+ launchtask AnimTask_ShakeMon 0x5 0x5 ANIM_ATTACKER 0x0 0x2 0x50 0x1
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ playsewithpan SE_M_GRASSWHISTLE, SOUND_PAN_ATTACKER
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gOceanOperaBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 0x0 0x0
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gWhirlpoolSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER
+ delay 0x1a
+ visible ANIM_TARGET
+ loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x5
+ launchtemplate gOceanOperaMovingOrbsSpriteTemplate 0x32 0x6 0x0 0x0 0x0 0x0 0x60 0x0 @mist ball
+ delay 0x5c
+ visible ANIM_ATTACKER
+ delay 0x0
+ loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x1
+ launchtemplate gOceanOperaBlueOrbsSpriteTemplate 0x32 0x6 0x0 ANIM_TARGET 0x0 0x0 0x0 0x35
+ delay 0x5
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0
+ delay 0x4
+ launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0
+ delay 0x4
+ launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0
+ delay 0x4
+ launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0
+ delay 0x4
+ launchtemplate gOceanOperaExpandingRingSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0
+ delay 0x10
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion
+ loadspritegfx ANIM_TAG_SPARKLE_2 @sparkle
+ loadspritegfx ANIM_TAG_RAIN_DROPS @rain
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x40
+ call OceanicOperettaExplosion
+ launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x2 0x0 0xb 0x5da0
+ launchtask AnimTask_CreateRaindrops 0x2 0x3 0x0 0x3 0x78
+ call OceanicOperettaExplosion
+ call OceanicOperettaExplosion
+ playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_CreateRaindrops 0x2 0x3 0x0 0x3 0x78
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x2 0xb 0x0 0x5da0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x6 0x0 0x5da0
+ waitforvisualfinish
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+OceanicOperettaBuffEffect:
+ launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gOceanOperaBlueFlareSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+OceanicOperettaExplosion:
+ launchtemplate gOceanOperaSparkleSpriteTemplate 0x33 0x6 0xfff1 0x0 ANIM_TARGET 0x0 0x20 0x3c
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ launchtemplate gOceanOperaSparkleSpriteTemplate 0x33 0x6 0xc 0xfffb ANIM_TARGET 0x0 0x20 0x3c
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gOceanOperaExplosionSpriteTemplate 0x33 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ return
+
+
+Move_SPLINTERED_STORMSHARDS::
+ loadspritegfx ANIM_TAG_ROCKS @rock
+ loadspritegfx ANIM_TAG_ICICLE_SPEAR @spear
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_GetLycanrocForm 0x2 0x0
+ jumpargeq 0x0 0x1 SplinteredStormshardsNightForme
+SplinteredStormshardsDayForme:
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x5bff
+ goto SplinteredStormshardsFinishFade
+SplinteredStormshardsNightForme:
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0xc 0x0000
+SplinteredStormshardsFinishFade:
+ waitforvisualfinish
+ setblends 0x80c
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET SplinteredStormshardsByOpponent
+SplinteredStormshardsByPlayer:
+ loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc
+ call SplinteredStormshardsPlayer_Rising1
+ delay 0x2
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ invisible ANIM_TARGET
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ call SplinteredStormshardsPlayer_Rising1
+ call SplinteredStormshardsPlayer_Rising2
+ visible ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ delay 0x2
+ call SplinteredStormshardsPlayer_Rising2
+ call SplinteredStormshardsPlayer_Rising1
+ delay 16
+ waitforvisualfinish
+ visible ANIM_TARGET
+ call SplinteredStormshardsFixBackgroundFade
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_METEOR @superpower
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward
+ delay 0x2
+ invisible ANIM_ATTACKER
+ launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x60 0x1 @shake target up and down
+ launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x2 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x2 0x8 0xffd0 0x1 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x4
+ call SplinteredStormshardsExplosionOpponent
+ call SplinteredStormshardsExplosionOpponent
+SplinteredStormshardsEnd:
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x0, 0x10, 0x7fff
+ call SplinteredStormshardsBrownExplode
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x10, 0x0, 0x7fff
+ waitforvisualfinish
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ waitforvisualfinish
+ end
+SplinteredStormshardsExplosionOpponent:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0x0 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0xfff8 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate 0x82 0x8 0xffd0 0x0 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ return
+SplinteredStormshardsByOpponent:
+ loopsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET 0x10 0xc
+ call SplinteredStormshardsOpponent_Rising1
+ delay 0x2
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ invisible ANIM_TARGET
+ launchtemplate gSplinteredShardsFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ call SplinteredStormshardsOpponent_Rising1
+ call SplinteredStormshardsOpponent_Rising2
+ visible ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ delay 0x2
+ call SplinteredStormshardsOpponent_Rising2
+ call SplinteredStormshardsOpponent_Rising1
+ delay 16
+ waitforvisualfinish
+ visible ANIM_TARGET
+ call SplinteredStormshardsFixBackgroundFade
+ waitforvisualfinish
+ visible ANIM_TARGET
+ loadspritegfx ANIM_TAG_METEOR @superpower
+ loadspritegfx ANIM_TAG_EXPLOSION @explosion
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward
+ delay 0x2
+ invisible ANIM_ATTACKER
+ launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x60 0x1 @shake target up and down
+ launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x18 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x30 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ delay 0x4
+ call SplinteredStormshardsExplosionOnPlayer
+ call SplinteredStormshardsExplosionOnPlayer
+ goto SplinteredStormshardsEnd
+SplinteredStormshardsExplosionOnPlayer:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x20 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x35 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x1c 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate 0x82 0x8 0xffd0 0x16 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ launchtemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate 0x82 0x8 0xffd0 0x2d 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
+ delay 0x2
+ return
+SplinteredStormshardsBrownExplode:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSplinteredShardsExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ return
+SplinteredStormshardsPlayer_Rising1:
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x24 0x80 0x24 0x30 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x10 0x80 0x10 0x35 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x45 0x80 0x45 0x3a 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x60 0x80 0x60 0x30 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x30 0x80 0x30 0x3c 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x55 0x80 0x55 0x33 0x30
+ delay 0x2
+ return
+SplinteredStormshardsPlayer_Rising2:
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x29 0x80 0x29 0x31 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x73 0x80 0x73 0x32 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x4a 0x80 0x4a 0x3c 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x64 0x80 0x64 0x33 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x2c 0x80 0x2c 0x3d 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x6c 0x80 0x6c 0x30 0x30
+ delay 0x2
+ return
+SplinteredStormshardsOpponent_Rising1:
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x94 0x40 0x94 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x80 0x40 0x80 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xb5 0x40 0xb5 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd0 0x40 0xd0 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xa0 0x40 0xa0 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xc5 0x40 0xc5 0x0 0x30
+ delay 0x2
+ return
+SplinteredStormshardsOpponent_Rising2:
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x99 0x40 0x99 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xe3 0x40 0xe3 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xba 0x40 0xba 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xd4 0x40 0xd4 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0x9c 0x40 0x9c 0x0 0x30
+ delay 0x2
+ launchtemplate gSplinteredShardsRisingSpearSpriteTemplate 0x32 0x5 0xdc 0x40 0xdc 0x0 0x30
+ delay 0x2
+ return
+SplinteredStormshardsFixBackgroundFade:
+ launchtask AnimTask_GetLycanrocForm 0x2 0x0
+ jumpargeq 0x0 0x1 SplinteredStormshardsNightFormeReturn
+SplinteredStormshardsDayFormeReturn:
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x5bff
+ goto SplinteredStormshardsFinishFadeReturn
+SplinteredStormshardsNightFormeReturn:
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0xc 0x0 0x0000
+SplinteredStormshardsFinishFadeReturn:
+ return
+
+
+Move_LETS_SNUGGLE_FOREVER::
+ loadspritegfx ANIM_TAG_MAGENTA_HEART @sharm
+ loadspritegfx ANIM_TAG_MUSIC_NOTES @music note
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES @fake tears
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0
+ launchtemplate gSnuggleForeverHeartSpriteTemplate 0x3 0x2 0x0 0x14
+ playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0
+ delay 0x7
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80
+ delay 0x8
+ playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80
+ delay 0x7
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0
+ delay 0x8
+ playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER
+ delay 0x7
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0
+ delay 0x7
+ fadetobg BG_SNUGGLE_FOREVER
+ waitbgfadeout
+ invisible ANIM_ATTACKER
+ delay 0x1
+ setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles
+ launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0
+ delay 0x10
+ playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles
+ launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0
+ delay 0x10
+ playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles
+ launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0
+ delay 0x10
+ playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x2 0x32 0x1
+ call LetsSnuggleForeverTears
+ delay 0x8
+ call LetsSnuggleForeverTears
+ delay 0x8
+ call LetsSnuggleForeverTears
+ delay 0x8
+ call LetsSnuggleForeverTears
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x0, 0x10, 0x0000
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_SPARKLE_4 @detect
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gSnuggleForeverEyesSpriteTemplate 0xd 0x2 0xa 0xfff2
+ launchtemplate gSnuggleForeverEyesSpriteTemplate 0xd 0x2 0xfff6 0xfff2
+ delay 0x20
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x1 0x0 0x10 0x579D
+ launchtask AnimTask_GrowTarget 0x5 0x0
+ delay 0x5
+ loadspritegfx ANIM_TAG_IMPACT @hit
+ loadspritegfx ANIM_TAG_PAIN_SPLIT @painsplit
+ loadspritegfx ANIM_TAG_DUCK @duck
+ loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 10
+ launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0xa 0xa 0x4
+ launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0xa 0xa 0x4
+ call LetsSnuggleForeverStars_1
+ call LetsSnuggleForeverImpacts
+ call LetsSnuggleForeverStars_2
+ call LetsSnuggleForeverImpacts
+ call LetsSnuggleForeverStars_1
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
+ call LetsSnuggleForeverStars_2
+ call LetsSnuggleForeverImpacts
+ launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x0 0xffee 0x6 0x6 0x4
+ launchtask AnimTask_TranslateMonElliptical 0x2 0x5 0x1 0x12 0x6 0x6 0x4
+ call LetsSnuggleForeverStars_1
+ delay 0x0
+ call LetsSnuggleForeverImpacts
+ call LetsSnuggleForeverStars_2
+ delay 0x0
+ call LetsSnuggleForeverImpacts
+ call LetsSnuggleForeverStars_1
+ delay 0x0
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL-ANIM_PAL_DEF 0x2 0x0 0x10 0x7fff
+ playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET
+ call LetsSnuggleForeverStars_2
+ delay 0x0
+ call LetsSnuggleForeverImpacts
+ invisible ANIM_TARGET
+ stopsound
+ waitforvisualfinish
+ call ResetFromWhiteScreen
+ end
+LetsSnuggleForeverTears:
+ playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET
+ launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x0
+ launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x1
+ delay 0x8
+ launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x2
+ launchtemplate gTearDropSpriteTemplate 0x82 0x2 ANIM_TARGET 0x3
+ return
+LetsSnuggleForeverImpacts:
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0x0 0xfff4 0x1 0x0
+ delay 0x8
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xfff4 0x8 0x1 0x0
+ delay 0x8
+ launchtemplate gBasicHitSplatSpriteTemplate 0x83 0x4 0xc 0x0 0x1 0x0
+ delay 0x8
+ return
+LetsSnuggleForeverStars_1:
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xa0 0xffe0
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff00 0xffd8
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x80 0xfff0
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0x1a0 0xffda
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xff80 0xffea
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0xfff0 0xfff8 0xfe80 0xffe1
+ return
+LetsSnuggleForeverStars_2:
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xa0 0xffe0
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xff00 0xffd8
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0x80 0xfff0
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0x1a0 0xffda
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xff80 0xffea
+ launchtemplate gSnuggleForeverStarSpriteTemplate 0x83 0x4 0x10 0x8 0xfe80 0xffe1
+ return
+
+
+Move_CLANGOROUS_SOULBLAZE::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_WATER_ORB @blue
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @purple
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey
+ loadspritegfx ANIM_TAG_SPARKLE_2 @stars
+ fadetobg BG_CLANGOROUS_SOULBLAZE
+ waitbgfadein
+ launchtask AnimTask_RockMonBackAndForth 0x5 0x3 0x0 0x2 0x0
+ call ClangorousSoulblazeBuffEffect
+ call ClangorousSoulblazeBuffEffect
+ call ClangorousSoulblazeBuffEffect
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @fist
+ launchtemplate gClangorousSoulRedFistTemplate 0x2 0x8 0xfff0 0x0 0x0 0x0 0xa ANIM_ATTACKER ANIM_RIGHT_FIST 0x1
+ launchtemplate gClangorousSoulRedFistTemplate 0x2 0x8 0x10 0x0 0x0 0x0 0xa ANIM_ATTACKER ANIM_LEFT_FIST 0x1
+ playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ playsewithpan SE_SHINY, SOUND_PAN_ATTACKER
+ launchtemplate gClangorousSoulRedRingTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST
+ unloadspritegfx ANIM_TAG_SPARKLE_2 @stars
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gClangoorousSoulblazeWhiteFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ delay 0x2
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0xFFE0 0x1 0xffff
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0xfd00 0xa 0x0 0x2a
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_DEF_PARTNER 0xfd00 0xa 0x0 0x2a
+ delay 0x20
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x0 0x20 0x1 0xffff
+ delay 0xC
+ setblends 0x80c
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x4 0x0
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ visible ANIM_ATTACKER
+ monbg ANIM_ATTACKER
+ loopsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0xe, 0xa
+ launchtemplate gClangoorousSoulblazePurpleChargeSpriteTemplate 0x2 0x1 0x0 @charge
+ call ClangorousSoulblazeEnergySwirl
+ call ClangorousSoulblazeEnergySwirl
+ call ClangorousSoulblazeEnergySwirl
+ call ClangorousSoulblazeEnergySwirl
+ call ClangorousSoulblazeEnergySwirl
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_WATER_ORB @whirlpool
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_MUSIC_NOTES @music note
+ clearmonbg ANIM_ATTACKER
+ invisible ANIM_ATTACKER
+ invisible ANIM_ATK_PARTNER
+ delay 0x0
+ monbg ANIM_TARGET
+ playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_ATTACKER
+ launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x0 0x0 0x0 @music note
+ delay 0x5
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x2 0x3c
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_DEF_PARTNER 0x2 0x3c
+ call ClangorousSoulblazePulse_1
+ delay 0x5
+ call ClangorousSoulblazePulse_2
+ delay 0x5
+ call ClangorousSoulblazePulse_3
+ delay 0x5
+ call ClangorousSoulblazePulse_4
+ loadspritegfx ANIM_TAG_EXPLOSION
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET ClangorousSoulblazeOnOpponent
+ClangorousSoulblazeOnPlayer:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0xfff0 ANIM_ATTACKER 0x1
+ delay 0x5
+ call ClangorousSoulblazePulse_5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_ATTACKER 0x1
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x20 0xffe0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_1
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x20 0x0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_2
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x30 0xffe0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_3
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x30 0xfff0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_4
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x35 0x0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_5
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x40 0x10 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_1
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x40 0x0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_2
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x45 0xfff0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_3
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x50 0x10 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_4
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x50 0xffe0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_5
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x60 0xfff0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_1
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x60 0xffe0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_2
+ delay 0x5
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x4, 0x0, 0x10, 0x7fff
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x65 0xfff0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_3
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x65 0xffe0 ANIM_ATTACKER 0x1
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1
+ call ClangorousSoulblazePulse_4
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ call ClangorousSoulblazePulse_5
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ call ClangorousSoulblazePulse_1
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ call ClangorousSoulblazePulse_2
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
+ goto FINISH_SOULBLAZE
+ClangorousSoulblazeOnOpponent:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x15 ANIM_ATTACKER 0x1
+ delay 0x5
+ call ClangorousSoulblazePulse_5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x0 ANIM_ATTACKER 0x1
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x20 0x25 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_1
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x20 0x5 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_2
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x30 0x25 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_3
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x30 0x15 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_4
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x35 0x0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_5
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x40 0xa ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_1
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x40 0x0 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_2
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x45 0x10 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_3
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x50 0x30 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_4
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x50 0x25 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_5
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x60 0x40 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_1
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x60 0x45 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_2
+ delay 0x5
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x7fff
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x65 0x35 ANIM_ATTACKER 0x1
+ call ClangorousSoulblazePulse_3
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x65 0x40 ANIM_ATTACKER 0x1
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ call ClangorousSoulblazePulse_4
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ call ClangorousSoulblazePulse_5
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ call ClangorousSoulblazePulse_1
+ delay 0x5
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ call ClangorousSoulblazePulse_2
+ delay 0x5
+ launchtemplate gExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+FINISH_SOULBLAZE:
+ waitforvisualfinish
+ clearmonbg ANIM_TARGET
+ delay 0x5
+ call ResetFromWhiteScreen
+ blendoff
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x10
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_DEF_PARTNER 0x0 0x10
+ waitforvisualfinish
+ end
+ClangorousSoulblazeEnergySwirl:
+ launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x180 0x32 0x8 0x32 ANIM_ATTACKER
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x2
+ launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x20 0xf0 0x28 0xb 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1a0 0x28 0x4 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1f 0x120 0x2d 0x6 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x1c 0x1c0 0x2d 0xb 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate 0x82 0x7 0x0 0x21 0x1d0 0x32 0xa 0xffce ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ return
+ClangorousSoulblazeBuffEffect:
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtemplate gClangorousSoulBlueBuffTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gClangorousSoulPurpleBuffTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c
+ delay 0x4
+ launchtemplate gClangorousSoulWhiteBuffTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c
+ return
+ClangorousSoulblazePulse_1:
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x1 0x1 0x0
+ return
+ClangorousSoulblazePulse_2:
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x3 0x3 0x80
+ return
+ClangorousSoulblazePulse_3:
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x2 0x0 0x80
+ return
+ClangorousSoulblazePulse_4:
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x0 0x1 0x1 0x0
+ return
+ClangorousSoulblazePulse_5:
+ playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER
+ launchtemplate gClangoorousSoulblazePulseSpriteTemplate 0x2 0x6 0x10 0x0 0x0 0x0 0x1d 0x0
+ launchtemplate gSlowFlyingMusicNotesSpriteTemplate 0x2 0x4 0x1 0x0 0x3 0x0
+ return
+
+
+Move_GUARDIAN_OF_ALOLA::
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_MUD_SAND @dig
+ loadspritegfx ANIM_TAG_SPEED_DUST @extremespeed
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtemplate gThinRingExpandingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
+ playsewithpan SE_SHINY, SOUND_PAN_ATTACKER
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_THIN_RING
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0xff00 0xf 0x0 0x4
+ call GuardianOfAlolaRocksPlayer
+ delay 0xa
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x10
+ call GuardianOfAlolaRocksPlayer
+ waitforvisualfinish
+ delay 0xa
+ playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_ATTACKER 0xff00 0xf 0x0 0x4
+ call GuardianOfAlolaRocksPlayer
+ delay 0xa
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_ATTACKER 0x0 0x10
+ call GuardianOfAlolaRocksPlayer
+ waitforvisualfinish
+ delay 0xa
+ delay 0x10
+ call GuardianOfAlolaRocksPlayer
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ATK 0x2 0xC 0xC 0x277f @;Yellow
+ launchtask AnimTask_NightShadeClone 0x5 0x1 0x75
+ delay 0x10
+ call GuardianOfAlolaRocksPlayer
+ delay 0x10
+ call GuardianOfAlolaRocksPlayer
+ delay 0x10
+ loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST
+ call GuardianOfAlolaRocksPlayer
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x3 0x0 0xb 0x0000
+ delay 0x1
+ launchtask AnimTask_BlendParticle, 0x2, 0x5, ANIM_TAG_HORSESHOE_SIDE_FIST, 0x0, 0xC, 0xc, 0x277f
+ fadetobg BG_FISSURE
+ waitbgfadeout
+ call GuardianOfAlolaRocksPlayer
+ launchtask AnimTask_PositionFissureBgOnBattler 0x5 0x3 0x1 0x5 0xffff
+ waitbgfadein
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET
+ launchtemplate gGuardianOfAlolaFistSpriteTemplate 0x83 0x3 0x0 0xffd0 0x1f
+ delay 0x24
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0xb 0x0 0x0000
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET
+ launchtask AnimTask_HorizontalShake 0x3 0x3 ANIM_TARGET 0xa 0x25
+ loopsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET 0x10 0x9
+ call GuardianOfAlolaRocksTarget
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRocksTarget
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRocksTarget
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRocksTarget
+ launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x3 0x0 0x10 0x7fff
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRockGeyser
+ call GuardianOfAlolaRocksTarget
+ waitforvisualfinish
+ call ResetFromWhiteScreen
+ end
+GuardianOfAlolaRocksPlayer:
+ playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0xc 0x4 0xfff0 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x0 0x10 0x4 0xfff6 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xe 0x4 0xffee 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 0x0 0x1 0xc 0x4 0xfff0 0x12
+ return
+GuardianOfAlolaRocksTarget:
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0xc 0x4 0xfff0 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x0 0x10 0x4 0xfff6 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xe 0x4 0xffee 0x12
+ launchtemplate gDirtPlumeSpriteTemplate 0x2 0x6 ANIM_TARGET 0x1 0xc 0x4 0xfff0 0x12
+ return
+GuardianOfAlolaRockGeyser:
+ launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0xfffc 0x10 @ -4, -0x10
+ delay 0x0
+ launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0x100D 0x10 @
+ delay 0x0
+ launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0x4 0x10
+ delay 0x0
+ launchtemplate gGuardianOfAlolaDirtGeyserSpriteTemplate 0x82, 0x3, 0 0xfff0 0x10
+ delay 0x0
+ return
+
+
+Move_SEARING_SUNRAZE_SMASH::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles
+ invisible ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xe 0x001b
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call SearingSunrazeSmashFlare
+ delay 0x8
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x7fff
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call SearingSunrazeSmashFlare
+ delay 0x8
+ call SearingSunrazeSmashFlare
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ unloadspritegfx ANIM_TAG_SPARKLE_2 @sparkles
+ loadspritegfx ANIM_TAG_WATER_ORB @blue
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey
+ playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER
+ launchtemplate gSearingSunrazeSmashGrowWormholeSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x10
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2
+ delay 0x2
+ loadspritegfx ANIM_TAG_METEOR @superpower
+ visible ANIM_TARGET
+ launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin up target
+ call SearingSunrazeSmashRingsInward
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly)
+ call SearingSunrazeSmashRingsInward
+ delay 0xD
+ invisible ANIM_TARGET
+ launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x6
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ delay 0x2
+ invisible ANIM_ATTACKER
+ launchtemplate gGrowingSuperpowerTemplate 0x83 0x1 0x0 @superpower
+ launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER
+ fadetobg BG_COSMIC
+ waitbgfadeout
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xf700 0x0 0x1 0xffff
+ launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix tgt rotation
+ invisible ANIM_TARGET
+ waitbgfadein
+ visible ANIM_ATTACKER
+ visible ANIM_TARGET
+ loadspritegfx ANIM_TAG_VERTICAL_HEX @red
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
+ loadspritegfx ANIM_TAG_SMALL_EMBER @fire
+ launchtemplate gSearingSunrazeSmashInfernoOrbSpriteTemplate 0x2 0x1 ANIM_ATTACKER
+ loopsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER, 0x13, 0x8
+ call SearingSunrazeSmashCharge
+ call SearingSunrazeSmashCharge
+ call SearingSunrazeSmashCharge
+ call SearingSunrazeSmashCharge
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_WATER_ORB @blue
+ unloadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET
+ launchtemplate gSearingSunrazeSmashRedFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG+ANIM_PAL_ATK 0x3 0x0 0xF 0x0
+ waitforvisualfinish
+ playsewithpan SE_ORB, SOUND_PAN_ATTACKER
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly
+ unloadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball
+ loadspritegfx ANIM_TAG_GOLD_RING @beam
+ loadspritegfx ANIM_TAG_SMALL_RED_EYE @beam colour
+ invisible ANIM_ATTACKER
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ call SunsteelStrikeBeam
+ stopsound
+ playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
+ loadspritegfx ANIM_TAG_CUT @cut
+ launchtemplate gSunsteelStrikeSuperpowerTemplate 0x82 0x1 0x14
+SearingSunrazeSmashImpact:
+ delay 0x8
+ delay 0x1
+ unloadspritegfx ANIM_TAG_GOLD_RING @beam
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x4 0x3c
+ playsewithpan SE_M_CUT, SOUND_PAN_TARGET
+ launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x20 0xffe0 0x0
+ delay 0x2
+ playsewithpan SE_M_CUT, SOUND_PAN_TARGET
+ launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x20 0xffe0 0x1
+ delay 0x2
+ playsewithpan SE_M_CUT, SOUND_PAN_TARGET
+ launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x1c 0xffe0 0x0
+ delay 0x2
+ playsewithpan SE_M_CUT, SOUND_PAN_TARGET
+ launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x1c 0xffe0 0x1
+ delay 0x2
+ playsewithpan SE_M_CUT, SOUND_PAN_TARGET
+ launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x2c 0xffe0 0x0
+ delay 0x2
+ playsewithpan SE_M_CUT, SOUND_PAN_TARGET
+ launchtemplate gSearingSunrazeSmashWhiteCutSpriteTemplate 0x82, 0x3, 0x2c 0xffe0 0x1
+ delay 0x2
+ loadspritegfx ANIM_TAG_CROSS_IMPACT @x
+ delay 0x0
+ unloadspritegfx ANIM_TAG_METEOR @superpower
+ unloadspritegfx ANIM_TAG_DRAGON_ASCENT @dragon ascent 1
+ unloadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @dragon ascent 2
+ launchtemplate gSearingSunrazeSmashCrossImpactSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x24
+ playsewithpan SE_M_LEER, SOUND_PAN_TARGET
+ visible ANIM_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ATK, 0x3, 0xF, 0x0, 0x0
+ visible ANIM_ATTACKER
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x10 0x0000
+ launchtemplate gSearingSunrazeSmashShockwaveSpriteTemplate 0x82 0x0 @ charge out and in
+ delay 0x1c
+ invisible ANIM_TARGET
+ unloadspritegfx ANIM_TAG_CUT @cut
+ unloadspritegfx ANIM_TAG_CROSS_IMPACT @x
+ call SearingSunrazeSmashInferno
+ call SearingSunrazeSmashInferno
+ call SearingSunrazeSmashInferno
+ call SearingSunrazeSmashInferno
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x4, 0x0, 0x10, 0x001b @full red
+ call SearingSunrazeSmashInferno
+ call SearingSunrazeSmashInferno
+ call SearingSunrazeSmashInferno
+ waitforvisualfinish
+ delay 0x10
+ call ResetFromRedScreen
+ end
+SearingSunrazeSmashFlare:
+ launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gGrantingStarsSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gEndureEnergySpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+
+SearingSunrazeSmashRingsInward:
+ launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ return
+SearingSunrazeSmashInferno:
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x3
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x3
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xa 0x0 0xfffe
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0xfffe 0x0
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xd 0x2 0x0
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0xfffe 0x2
+ launchtemplate gFireBlastCrossSpriteTemplate 0x82 0x5 0x0 0x0 0xf 0x2 0x2
+ delay 0x3
+ return
+SearingSunrazeSmashCharge:
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2f 0x490 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x510 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x2c 0x500 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x30 0x4e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x4d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x1
+ launchtemplate gFireSpinSpriteTemplate 0x82 0x7 0x0 0x31 0x540 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x1
+ return
+ResetFromRedScreen:
+ launchtask AnimTask_AllBanksInvisible 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x1B @Everything from red
+ restorebg
+ waitbgfadeout
+ setarg 0x7 0xffff
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitbgfadein
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x33ED
+ waitforvisualfinish
+ return
+
+
+Move_MENACING_MOONRAZE_MAELSTROM::
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles
+ loadspritegfx ANIM_TAG_WATER_ORB @blue
+ loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @black
+ invisible ANIM_TARGET
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0xe 0x40c0
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call MenacingMoonrazeMaelstromFlare
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xc 0x0000
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call MenacingMoonrazeMaelstromFlare
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ delay 0x8
+ call MenacingMoonrazeMaelstromFlare
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_SPARKLE_2 @sparkles
+ loadspritegfx ANIM_TAG_THIN_RING @ring
+ loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey
+ playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER
+ launchtemplate gMoonrazeMaelstromWormholeSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x10
+ launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 @ target down and left (instantaneously (last arg))
+ delay 0x2
+ loadspritegfx ANIM_TAG_METEOR @superpower
+ visible ANIM_TARGET
+ launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin up target
+ call MenacingMoonrazeMaelstromRingsInward
+ launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly)
+ call MenacingMoonrazeMaelstromRingsInward
+ delay 0xD
+ invisible ANIM_TARGET
+ launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gMoonrazeMaelstromWhiteRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x6
+ launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4 @lunge forward
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ delay 0x2
+ invisible ANIM_ATTACKER
+ launchtemplate gMoonrazeMaelstromSuperpowerSpriteTemplate 0x83 0x1 0x0 @superpower
+ launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER
+ fadetobg BG_COSMIC
+ waitbgfadeout
+ launchtask AnimTask_IsTargetPlayerSide 0x2 0x0
+ jumpargeq 0x7 ANIM_TARGET MenacingMoonrazeMaelstromOnPlayer
+MenacingMoonrazeMaelstromOnOpponent:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0xfd00 0x200 0x1 0xffff
+ goto MenacingMoonrazeMaelstromFinish
+MenacingMoonrazeMaelstromOnPlayer:
+ launchtask AnimTask_StartSlidingBg 0x5 0x4 0x200 0xfd00 0x1 0xffff
+MenacingMoonrazeMaelstromFinish:
+ launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix tgt rotation
+ invisible ANIM_TARGET
+ waitbgfadein
+ visible ANIM_ATTACKER
+ delay 0x2
+ visible ANIM_TARGET
+ waitforvisualfinish
+ loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble
+ loadspritegfx ANIM_TAG_ORBS @hyper beam
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave
+ unloadspritegfx ANIM_TAG_THIN_RING @ring
+ unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey
+ unloadspritegfx ANIM_TAG_METEOR @superpower
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ call MenacingMoonrazeMaelstromChargeUp
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xc 0x0000
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call MenacingMoonrazeMaelstromChargeUp
+ call MenacingMoonrazeMaelstromChargeUp
+ launchsoundtask SoundTask_LoopSEAdjustPanning 0x7 0xf0 0xffc0 SOUND_PAN_TARGET 0x1 0xf 0x0 0x5
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x3c 0x1
+ launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_DEF 0x4 0x0 0xc 0x0000
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ call MenacingMoonrazeMaelstromBeam
+ playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
+ launchtemplate gMoonrazeMaelstromShockwaveSpriteTemplate 0x82 0x0
+ call MenacingMoonrazeMaelstromBeam
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave
+ unloadspritegfx ANIM_TAG_ORBS @hyper beam
+ unloadspritegfx ANIM_TAG_HANDS_AND_FEET @black
+ loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x1 0x4 0x0 0x4c 0x1
+ call MenacingMoonrazeMaelstromExplosion
+ call MenacingMoonrazeMaelstromExplosion
+ launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x2 0x0 0x10 0x7fff
+ call MenacingMoonrazeMaelstromExplosion
+ waitforvisualfinish
+ call ResetFromWhiteScreen
+ end
+MenacingMoonrazeMaelstromExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gMoonrazeMaelstromExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ return
+MenacingMoonrazeMaelstromFlare:
+ launchtemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate 0x2 0x6 0xfff1 0x0 0x0 0x0 0x20 0x3c
+ launchtemplate gMoonrazeMaelstromBlueBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gMoonrazeMaelstromBlueBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate 0x2 0x6 0xc 0xfffb 0x0 0x0 0x20 0x3c
+ launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gMoonrazeMaelstromBlackBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+MenacingMoonrazeMaelstromRingsInward:
+ launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gMoonrazeMaelstromWhiteRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ launchtemplate gMoonrazeMaelstromBlueRingSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
+ delay 0x8
+ return
+MenacingMoonrazeMaelstromChargeUp:
+ launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1c 0x210 0x1e 0xd 0x32 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x20 0x1e0 0x14 0x10 0xffd2 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1c 0x200 0x19 0x10 0x2e ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x1d0 0x1e 0xf 0xffce ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x21 0x240 0x14 0x8 0x2a ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate 0x2 0x7 0x0 0x1f 0x190 0x19 0xb 0xffd6 ANIM_ATTACKER
+ delay 0x2
+ launchtemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+MenacingMoonrazeMaelstromBeam:
+ launchtemplate gMoonrazeMaelstromBeamSpriteTemplate 0x82 0x0
+ launchtemplate gMoonrazeMaelstromBeamSpriteTemplate 0x82 0x0
+ delay 0x1
+ return
+
+
+Move_LIGHT_THAT_BURNS_THE_SKY::
+ loadspritegfx ANIM_TAG_SPARK_2 @spark
+ loadspritegfx ANIM_TAG_LEAF @green
+ loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge particles
+ loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @psycho boost
+ fadetobg BG_ZMOVE_MOUNTAIN
+ waitbgfadeout
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call EndureEffect
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x5bff
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call EndureEffect
+ delay 0x8
+ call EndureEffect
+ delay 0x8
+ unloadspritegfx ANIM_TAG_FOCUS_ENERGY
+ monbg ANIM_ATTACKER
+ setblends 0x80c
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL-ANIM_PAL_ATK 0x2 0x0 0xF 0x0000
+ waitforvisualfinish
+ launchtask AnimTask_ElectricChargingParticles 0x2 0x4 0x0 0x3c 0x2 0xc @ charge particles to attacker
+ delay 0x1e
+ loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0xe, 0xa
+ launchtemplate gSuperpowerOrbSpriteTemplate, 0x83, 0x1, 0x0
+ call LightThatBurnsTheSkyGreenSparks
+ call LightThatBurnsTheSkyGreenSparks
+ call LightThatBurnsTheSkyGreenSparks
+ call LightThatBurnsTheSkyGreenSparks
+ call LightThatBurnsTheSkyGreenSparks
+ call LightThatBurnsTheSkyGreenSparks
+ call LightThatBurnsTheSkyGreenSparks
+ call LightThatBurnsTheSkyGreenSparks
+ call LightThatBurnsTheSkyGreenSparks
+ delay 0xe
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x2 0x0 0x4 0x0000
+ clearmonbg ANIM_ATTACKER
+ blendoff
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x20 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0x60 0x8 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xa0 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffe0 0xfff0 0x25 0x2c 0xe0 0x8 0x2 0x3
+ delay 0x1
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x20 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0x60 0x8 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xa0 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffd0 0xffe4 0x25 0x2c 0xe0 0x8 0x2 0x3
+ delay 0x1
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x20 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0x60 0x8 0x1 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xa0 0x8 0x0 0x3
+ launchtemplate gSparkElectricityFlashingSpriteTemplate 0x2 0x8 0xffc0 0xffd8 0x25 0x2c 0xe0 0x8 0x2 0x3
+ delay 0x6
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x3 0x3c
+ unloadspritegfx ANIM_TAG_LEAF @green
+ unloadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge
+ loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn
+ loadspritegfx ANIM_TAG_EXPLOSION_2 @explode
+ loadspritegfx ANIM_TAG_STRAIGHT_BEAM
+ panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
+ monbg ANIM_TARGET
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x6 0x0 0x10 0x43FF @;Light yellow
+ call PhotonGeyserBeam
+ call LightThatBurnsTheSkyGeyser
+ call LightThatBurnsTheSkyBlast_1
+ call LightThatBurnsTheSkyGeyser
+ call LightThatBurnsTheSkyBlast_2
+ call LightThatBurnsTheSkyGeyser
+ launchtask AnimTask_BlendBattleAnimPal, 0x2, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x4, 0x0, 0x10, 0x43FF
+ call LightThatBurnsTheSkyBlast_3
+ clearmonbg ANIM_TARGET
+ waitforvisualfinish
+ delay 0x10
+ launchtask AnimTask_BlendBattleAnimPal 0x2 0x5 ANIM_PAL_ALL 0x0 0x10 0x0 0x43FF
+ restorebg
+ waitbgfadeout
+ end
+LightThatBurnsTheSkyBlast_1:
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0
+ return
+LightThatBurnsTheSkyBlast_2:
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffc0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x6 0x6 0xffd8 0xffec 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffe0 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x28 0xffec 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x40 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x28 0x14 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x20 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffd8 0x14 0x18 0x0 0x0 0x0
+ return
+LightThatBurnsTheSkyBlast_3:
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffa0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x6 0x6 0xffc4 0xffe2 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x0 0xffd0 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x46 0x6 0x3c 0xffe2 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x60 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x42 0x6 0x3c 0x1e 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0x0 0x30 0x18 0x0 0x0 0x0
+ launchtemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate 0x2 0x6 0xffc4 0x1e 0x18 0x0 0x0 0x0
+ return
+LightThatBurnsTheSkyGeyser:
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0x0005 0x1 0x0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xfff1 0x1 0x0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xfffb 0x1 0x0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0012 0x1 0x0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0x0005 0x1 0x0
+ playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xfff5 ANIM_TARGET 0x0
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffe1 ANIM_TARGET 0x0
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffeb ANIM_TARGET 0x0
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0x0002 ANIM_TARGET 0x0
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xfff5 ANIM_TARGET 0x0
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0003 0xffe5 ANIM_TARGET 0x0
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfff5 0xffd1 ANIM_TARGET 0x0
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0008 0xffdb ANIM_TARGET 0x0
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0xfffa 0xfff2 ANIM_TARGET 0x0
+ delay 0x0
+ launchtemplate gLightThatBurnsTheSkyExplosionSpriteTemplate 0x84, 0x4, 0x0000 0xffe5 ANIM_TARGET 0x0
+ delay 0x0
+ return
+LightThatBurnsTheSkyGreenSparks:
+ launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x30 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x0 0x28 0x0 0x3
+ launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x40 0x28 0x1 0x3
+ launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c 0x80 0x28 0x0 0x3
+ launchtemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate 0x83 0x8 0x0 0x0 0x15 0x2c SOUND_PAN_ATTACKER 0x28 0x2 0x3
+ delay 0x10
+ return
+
+
+Move_SOUL_STEALING_7_STAR_STRIKE::
+ loadspritegfx ANIM_TAG_ROUND_SHADOW @bounce
+ loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice blue
+ loadspritegfx ANIM_TAG_WISP_FIRE @will o wisp
+ loadspritegfx ANIM_TAG_FIRE_PLUME @blast burn
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET @fist
+ launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
+ waitforvisualfinish
+ setblends 0x80c
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
+ launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0xffe0 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0xffec 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x0 0xfff0 0x18 0x0 0x0 0x0
+ launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x14 0xfff6 0x18 0x0 0x0 0x0
+ launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x20 0x0 0x18 0x0 0x0 0x0
+ launchtemplate gSoulStealBlastburnSpriteTemplate 0x42 0x6 0x14 0xa 0x18 0x0 0x0 0x0
+ launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0x0 0x10 0x18 0x0 0x0 0x0
+ launchtemplate gSoulStealBlastburnSpriteTemplate 0x2 0x6 0xffec 0xa 0x18 0x0 0x0 0x0
+ delay 0x5
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gSoulStealBlackFlySpriteTemplate 0x2 0x4 0x0 0x0 0xd 0x150
+ waitforvisualfinish
+ invisible ANIM_TARGET
+ fadetobg BG_SOULSTEALING_7STAR_STRIKE
+ waitbgfadeout
+ visible ANIM_ATTACKER
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ call SoulStealingSevenStarStrikeBuffEffect
+ delay 0x8
+ launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x0
+ launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
+ call SoulStealingSevenStarStrikeBuffEffect
+ delay 0x8
+ call SoulStealingSevenStarStrikeBuffEffect
+ delay 0x4
+ visible ANIM_TARGET
+ waitforvisualfinish
+ unloadspritegfx ANIM_TAG_FIRE_PLUME
+ loadspritegfx ANIM_TAG_PAIN_SPLIT @pain split
+ launchtask AnimTask_ShakeMon 0x5 0x5 0x1 0x0 0x4 0x25 0x1
+ launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x14 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 ANIM_TARGET 0x2 0x0 0x0 0x30
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x10 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 ANIM_TARGET 0x12 0x0 0x0 0x2c
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ delay 0x4
+ launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x08 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xffeb 0xfff8 0x2 0x0 0x0 0x28
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x12 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfffb 0xfff4 0x2 0x0 0x0 0x24
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x15 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x5 0xfff8 0x2 0x0 0x0 0x20
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x0c 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfff0 0x1 0x2 0x0 0x0 0x1c
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x13 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 0x1 0x2 0x0 0x0 0x18
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET
+ launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x0e 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0xfff0 0x10 0x2 0x0 0x0 0x14
+ launchtemplate gSoulStealBlueFistSpriteTemplate 0x82 0x8 0xffc0 0x12 0x0 0x0 0xa 0x1 0x0 0x1
+ delay 0x4
+ launchtemplate gSoulStealBlueStarSpriteTemplate 0x84 0x6 0x0 0x10 0x2 0x0 0x0 0x10
+ delay 0x4
+ playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
+ launchtemplate gSoulStealBlackFlySpriteTemplate 0x82, 0x4, 0x0 0x0 0xd 0x150
+ delay 0x20
+ unloadspritegfx ANIM_TAG_PAIN_SPLIT
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW
+ unloadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_SPARK_2 @paralyze
+ loadspritegfx ANIM_TAG_SNORE_Z @z
+ playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
+ setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles
+ launchtask AnimTask_SnatchOpposingMonMove 0x2 0x0
+ delay 0x1c
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_DEF 0x0 0x0 0x10 0x0000
+ delay 0x1
+ launchtemplate gSoulStealZStarSpriteTemplate 0x82, 0x4, 0x0 0x0 0x1 0x24
+ launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
+ launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x0
+ launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x2a
+ launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x54
+ launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0x7e
+ launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0xa8
+ launchtemplate gWillOWispFireSpriteTemplate 0x82 0x1 0xd2
+ playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
+ call SoulStealingSevenStarStrikeBlueParalysis
+ call SoulStealingSevenStarStrikeBlueParalysis
+ waitforvisualfinish
+ visible ANIM_ATTACKER
+ unloadspritegfx ANIM_TAG_ROUND_SHADOW
+ loadspritegfx ANIM_TAG_SPARKLE_4 @ detect
+ loadspritegfx ANIM_TAG_EXPLOSION @ explosion
+ playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER
+ launchtemplate gTargetTwinkleSpriteTemplate 0x8d 0x3 0x0 0x0 ANIM_TARGET @detect star
+ delay 0xa
+ launchtask AnimTask_HorizontalShake 0x5 0x3 ANIM_TARGET 0x8 0x20
+ call SoulStealingSevenStarStrikeExplosion
+ call SoulStealingSevenStarStrikeExplosion
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL - ANIM_PAL_DEF, 0x2, 0x0, 0x10, 0x0 @everything to black
+ call SoulStealingSevenStarStrikeExplosion
+ waitforvisualfinish
+ blendoff
+ restorebg
+ launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_BG | ANIM_PAL_ALL_BATTLERS, 0x2, 0x10, 0x0, 0x0 @everything from black
+ waitforvisualfinish
+ launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x0
+ waitforvisualfinish
+ launchtask AnimTask_AllBanksVisible 0xA 0x0
+ waitforvisualfinish
+ end
+SoulStealingSevenStarStrikeBuffEffect:
+ launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
+ delay 0x4
+ launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xe 0x1c 0x1
+ delay 0x4
+ launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xfffb 0xa 0x2
+ delay 0x4
+ launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0x1c 0x1a 0x3
+ delay 0x4
+ launchtemplate gSoulStealIceBuffSpriteTemplate 0x2 0x4 0x0 0xfff4 0x0 0x1
+ return
+SoulStealingSevenStarStrikeBlueParalysis:
+ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET
+ launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x5 0x0 0x5 0x0
+ delay 0x2
+ launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfffb 0xa 0x5 0x1
+ delay 0x2
+ launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xf 0x14 0x5 0x2
+ delay 0x2
+ launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfff1 0xfff6 0x5 0x0
+ delay 0x2
+ launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x19 0x0 0x5 0x1
+ delay 0x2
+ launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xfff8 0x8 0x5 0x2
+ delay 0x2
+ launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0x2 0xfff8 0x5 0x0
+ delay 0x2
+ launchtemplate gSoulStealBlueParalyzeSpriteTemplate 0x82, 0x4, 0xffec 0xf 0x5 0x1
+ return
+SoulStealingSevenStarStrikeExplosion:
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x0 0x0 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x18 0xffe8 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0xfff0 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
+ delay 0x6
+ playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
+ launchtemplate gSoulStealExplosionSpriteTemplate 0x83 0x4 0x10 0x10 ANIM_TARGET 0x1
+ delay 0x6
+ return
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index e3408a3a78..5e6ab33921 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -1,242 +1,2939 @@
#include "constants/global.h"
#include "constants/battle.h"
#include "constants/pokemon.h"
+#include "constants/battle_arena.h"
#include "constants/battle_script_commands.h"
#include "constants/battle_anim.h"
#include "constants/battle_string_ids.h"
#include "constants/abilities.h"
+#include "constants/hold_effects.h"
#include "constants/moves.h"
#include "constants/songs.h"
#include "constants/game_stat.h"
#include "constants/trainers.h"
+#include "constants/battle_config.h"
+#include "constants/species.h"
.include "asm/macros.inc"
.include "asm/macros/battle_script.inc"
.include "constants/constants.inc"
.section script_data, "aw", %progbits
-
+
.align 2
gBattleScriptsForMoveEffects::
- .4byte BattleScript_EffectHit @ EFFECT_HIT
- .4byte BattleScript_EffectSleep @ EFFECT_SLEEP
- .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_HIT
- .4byte BattleScript_EffectAbsorb @ EFFECT_ABSORB
- .4byte BattleScript_EffectBurnHit @ EFFECT_BURN_HIT
- .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_HIT
- .4byte BattleScript_EffectParalyzeHit @ EFFECT_PARALYZE_HIT
- .4byte BattleScript_EffectExplosion @ EFFECT_EXPLOSION
- .4byte BattleScript_EffectDreamEater @ EFFECT_DREAM_EATER
- .4byte BattleScript_EffectMirrorMove @ EFFECT_MIRROR_MOVE
- .4byte BattleScript_EffectAttackUp @ EFFECT_ATTACK_UP
- .4byte BattleScript_EffectDefenseUp @ EFFECT_DEFENSE_UP
- .4byte BattleScript_EffectHit @ EFFECT_SPEED_UP
- .4byte BattleScript_EffectSpecialAttackUp @ EFFECT_SPECIAL_ATTACK_UP
- .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_DEFENSE_UP
- .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_UP
- .4byte BattleScript_EffectEvasionUp @ EFFECT_EVASION_UP
- .4byte BattleScript_EffectHit @ EFFECT_ALWAYS_HIT
- .4byte BattleScript_EffectAttackDown @ EFFECT_ATTACK_DOWN
- .4byte BattleScript_EffectDefenseDown @ EFFECT_DEFENSE_DOWN
- .4byte BattleScript_EffectSpeedDown @ EFFECT_SPEED_DOWN
- .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_ATTACK_DOWN
- .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_DEFENSE_DOWN
- .4byte BattleScript_EffectAccuracyDown @ EFFECT_ACCURACY_DOWN
- .4byte BattleScript_EffectEvasionDown @ EFFECT_EVASION_DOWN
- .4byte BattleScript_EffectHaze @ EFFECT_HAZE
- .4byte BattleScript_EffectBide @ EFFECT_BIDE
- .4byte BattleScript_EffectRampage @ EFFECT_RAMPAGE
- .4byte BattleScript_EffectRoar @ EFFECT_ROAR
- .4byte BattleScript_EffectMultiHit @ EFFECT_MULTI_HIT
- .4byte BattleScript_EffectConversion @ EFFECT_CONVERSION
- .4byte BattleScript_EffectFlinchHit @ EFFECT_FLINCH_HIT
- .4byte BattleScript_EffectRestoreHp @ EFFECT_RESTORE_HP
- .4byte BattleScript_EffectToxic @ EFFECT_TOXIC
- .4byte BattleScript_EffectPayDay @ EFFECT_PAY_DAY
- .4byte BattleScript_EffectLightScreen @ EFFECT_LIGHT_SCREEN
- .4byte BattleScript_EffectTriAttack @ EFFECT_TRI_ATTACK
- .4byte BattleScript_EffectRest @ EFFECT_REST
- .4byte BattleScript_EffectOHKO @ EFFECT_OHKO
- .4byte BattleScript_EffectRazorWind @ EFFECT_RAZOR_WIND
- .4byte BattleScript_EffectSuperFang @ EFFECT_SUPER_FANG
- .4byte BattleScript_EffectDragonRage @ EFFECT_DRAGON_RAGE
- .4byte BattleScript_EffectTrap @ EFFECT_TRAP
- .4byte BattleScript_EffectHit @ EFFECT_HIGH_CRITICAL
- .4byte BattleScript_EffectDoubleHit @ EFFECT_DOUBLE_HIT
- .4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS
- .4byte BattleScript_EffectMist @ EFFECT_MIST
- .4byte BattleScript_EffectFocusEnergy @ EFFECT_FOCUS_ENERGY
- .4byte BattleScript_EffectRecoil @ EFFECT_RECOIL
- .4byte BattleScript_EffectConfuse @ EFFECT_CONFUSE
- .4byte BattleScript_EffectAttackUp2 @ EFFECT_ATTACK_UP_2
- .4byte BattleScript_EffectDefenseUp2 @ EFFECT_DEFENSE_UP_2
- .4byte BattleScript_EffectSpeedUp2 @ EFFECT_SPEED_UP_2
- .4byte BattleScript_EffectSpecialAttackUp2 @ EFFECT_SPECIAL_ATTACK_UP_2
- .4byte BattleScript_EffectSpecialDefenseUp2 @ EFFECT_SPECIAL_DEFENSE_UP_2
- .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_UP_2
- .4byte BattleScript_EffectHit @ EFFECT_EVASION_UP_2
- .4byte BattleScript_EffectTransform @ EFFECT_TRANSFORM
- .4byte BattleScript_EffectAttackDown2 @ EFFECT_ATTACK_DOWN_2
- .4byte BattleScript_EffectDefenseDown2 @ EFFECT_DEFENSE_DOWN_2
- .4byte BattleScript_EffectSpeedDown2 @ EFFECT_SPEED_DOWN_2
- .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_ATTACK_DOWN_2
- .4byte BattleScript_EffectSpecialDefenseDown2 @ EFFECT_SPECIAL_DEFENSE_DOWN_2
- .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_DOWN_2
- .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_2
- .4byte BattleScript_EffectReflect @ EFFECT_REFLECT
- .4byte BattleScript_EffectPoison @ EFFECT_POISON
- .4byte BattleScript_EffectParalyze @ EFFECT_PARALYZE
- .4byte BattleScript_EffectAttackDownHit @ EFFECT_ATTACK_DOWN_HIT
- .4byte BattleScript_EffectDefenseDownHit @ EFFECT_DEFENSE_DOWN_HIT
- .4byte BattleScript_EffectSpeedDownHit @ EFFECT_SPEED_DOWN_HIT
- .4byte BattleScript_EffectSpecialAttackDownHit @ EFFECT_SPECIAL_ATTACK_DOWN_HIT
- .4byte BattleScript_EffectSpecialDefenseDownHit @ EFFECT_SPECIAL_DEFENSE_DOWN_HIT
- .4byte BattleScript_EffectAccuracyDownHit @ EFFECT_ACCURACY_DOWN_HIT
- .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_HIT
- .4byte BattleScript_EffectSkyAttack @ EFFECT_SKY_ATTACK
- .4byte BattleScript_EffectConfuseHit @ EFFECT_CONFUSE_HIT
- .4byte BattleScript_EffectTwineedle @ EFFECT_TWINEEDLE
- .4byte BattleScript_EffectHit @ EFFECT_VITAL_THROW
- .4byte BattleScript_EffectSubstitute @ EFFECT_SUBSTITUTE
- .4byte BattleScript_EffectRecharge @ EFFECT_RECHARGE
- .4byte BattleScript_EffectRage @ EFFECT_RAGE
- .4byte BattleScript_EffectMimic @ EFFECT_MIMIC
- .4byte BattleScript_EffectMetronome @ EFFECT_METRONOME
- .4byte BattleScript_EffectLeechSeed @ EFFECT_LEECH_SEED
- .4byte BattleScript_EffectSplash @ EFFECT_SPLASH
- .4byte BattleScript_EffectDisable @ EFFECT_DISABLE
- .4byte BattleScript_EffectLevelDamage @ EFFECT_LEVEL_DAMAGE
- .4byte BattleScript_EffectPsywave @ EFFECT_PSYWAVE
- .4byte BattleScript_EffectCounter @ EFFECT_COUNTER
- .4byte BattleScript_EffectEncore @ EFFECT_ENCORE
- .4byte BattleScript_EffectPainSplit @ EFFECT_PAIN_SPLIT
- .4byte BattleScript_EffectSnore @ EFFECT_SNORE
- .4byte BattleScript_EffectConversion2 @ EFFECT_CONVERSION_2
- .4byte BattleScript_EffectLockOn @ EFFECT_LOCK_ON
- .4byte BattleScript_EffectSketch @ EFFECT_SKETCH
- .4byte BattleScript_EffectHit @ EFFECT_UNUSED_60
- .4byte BattleScript_EffectSleepTalk @ EFFECT_SLEEP_TALK
- .4byte BattleScript_EffectDestinyBond @ EFFECT_DESTINY_BOND
- .4byte BattleScript_EffectFlail @ EFFECT_FLAIL
- .4byte BattleScript_EffectSpite @ EFFECT_SPITE
- .4byte BattleScript_EffectHit @ EFFECT_FALSE_SWIPE
- .4byte BattleScript_EffectHealBell @ EFFECT_HEAL_BELL
- .4byte BattleScript_EffectHit @ EFFECT_QUICK_ATTACK
- .4byte BattleScript_EffectTripleKick @ EFFECT_TRIPLE_KICK
- .4byte BattleScript_EffectThief @ EFFECT_THIEF
- .4byte BattleScript_EffectMeanLook @ EFFECT_MEAN_LOOK
- .4byte BattleScript_EffectNightmare @ EFFECT_NIGHTMARE
- .4byte BattleScript_EffectMinimize @ EFFECT_MINIMIZE
- .4byte BattleScript_EffectCurse @ EFFECT_CURSE
- .4byte BattleScript_EffectHit @ EFFECT_UNUSED_6E
- .4byte BattleScript_EffectProtect @ EFFECT_PROTECT
- .4byte BattleScript_EffectSpikes @ EFFECT_SPIKES
- .4byte BattleScript_EffectForesight @ EFFECT_FORESIGHT
- .4byte BattleScript_EffectPerishSong @ EFFECT_PERISH_SONG
- .4byte BattleScript_EffectSandstorm @ EFFECT_SANDSTORM
- .4byte BattleScript_EffectEndure @ EFFECT_ENDURE
- .4byte BattleScript_EffectRollout @ EFFECT_ROLLOUT
- .4byte BattleScript_EffectSwagger @ EFFECT_SWAGGER
- .4byte BattleScript_EffectFuryCutter @ EFFECT_FURY_CUTTER
- .4byte BattleScript_EffectAttract @ EFFECT_ATTRACT
- .4byte BattleScript_EffectReturn @ EFFECT_RETURN
- .4byte BattleScript_EffectPresent @ EFFECT_PRESENT
- .4byte BattleScript_EffectFrustration @ EFFECT_FRUSTRATION
- .4byte BattleScript_EffectSafeguard @ EFFECT_SAFEGUARD
- .4byte BattleScript_EffectThawHit @ EFFECT_THAW_HIT
- .4byte BattleScript_EffectMagnitude @ EFFECT_MAGNITUDE
- .4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS
- .4byte BattleScript_EffectHit @ EFFECT_PURSUIT
- .4byte BattleScript_EffectRapidSpin @ EFFECT_RAPID_SPIN
- .4byte BattleScript_EffectSonicboom @ EFFECT_SONICBOOM
- .4byte BattleScript_EffectHit @ EFFECT_UNUSED_83
- .4byte BattleScript_EffectMorningSun @ EFFECT_MORNING_SUN
- .4byte BattleScript_EffectSynthesis @ EFFECT_SYNTHESIS
- .4byte BattleScript_EffectMoonlight @ EFFECT_MOONLIGHT
- .4byte BattleScript_EffectHiddenPower @ EFFECT_HIDDEN_POWER
- .4byte BattleScript_EffectRainDance @ EFFECT_RAIN_DANCE
- .4byte BattleScript_EffectSunnyDay @ EFFECT_SUNNY_DAY
- .4byte BattleScript_EffectDefenseUpHit @ EFFECT_DEFENSE_UP_HIT
- .4byte BattleScript_EffectAttackUpHit @ EFFECT_ATTACK_UP_HIT
- .4byte BattleScript_EffectAllStatsUpHit @ EFFECT_ALL_STATS_UP_HIT
- .4byte BattleScript_EffectHit @ EFFECT_UNUSED_8D
- .4byte BattleScript_EffectBellyDrum @ EFFECT_BELLY_DRUM
- .4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP
- .4byte BattleScript_EffectMirrorCoat @ EFFECT_MIRROR_COAT
- .4byte BattleScript_EffectSkullBash @ EFFECT_SKULL_BASH
- .4byte BattleScript_EffectTwister @ EFFECT_TWISTER
- .4byte BattleScript_EffectEarthquake @ EFFECT_EARTHQUAKE
- .4byte BattleScript_EffectFutureSight @ EFFECT_FUTURE_SIGHT
- .4byte BattleScript_EffectGust @ EFFECT_GUST
- .4byte BattleScript_EffectStomp @ EFFECT_FLINCH_MINIMIZE_HIT
- .4byte BattleScript_EffectSolarBeam @ EFFECT_SOLAR_BEAM
- .4byte BattleScript_EffectThunder @ EFFECT_THUNDER
- .4byte BattleScript_EffectTeleport @ EFFECT_TELEPORT
- .4byte BattleScript_EffectBeatUp @ EFFECT_BEAT_UP
- .4byte BattleScript_EffectSemiInvulnerable @ EFFECT_SEMI_INVULNERABLE
- .4byte BattleScript_EffectDefenseCurl @ EFFECT_DEFENSE_CURL
- .4byte BattleScript_EffectSoftboiled @ EFFECT_SOFTBOILED
- .4byte BattleScript_EffectFakeOut @ EFFECT_FAKE_OUT
- .4byte BattleScript_EffectUproar @ EFFECT_UPROAR
- .4byte BattleScript_EffectStockpile @ EFFECT_STOCKPILE
- .4byte BattleScript_EffectSpitUp @ EFFECT_SPIT_UP
- .4byte BattleScript_EffectSwallow @ EFFECT_SWALLOW
- .4byte BattleScript_EffectHit @ EFFECT_UNUSED_A3
- .4byte BattleScript_EffectHail @ EFFECT_HAIL
- .4byte BattleScript_EffectTorment @ EFFECT_TORMENT
- .4byte BattleScript_EffectFlatter @ EFFECT_FLATTER
- .4byte BattleScript_EffectWillOWisp @ EFFECT_WILL_O_WISP
- .4byte BattleScript_EffectMemento @ EFFECT_MEMENTO
- .4byte BattleScript_EffectFacade @ EFFECT_FACADE
- .4byte BattleScript_EffectFocusPunch @ EFFECT_FOCUS_PUNCH
- .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLINGSALT
- .4byte BattleScript_EffectFollowMe @ EFFECT_FOLLOW_ME
- .4byte BattleScript_EffectNaturePower @ EFFECT_NATURE_POWER
- .4byte BattleScript_EffectCharge @ EFFECT_CHARGE
- .4byte BattleScript_EffectTaunt @ EFFECT_TAUNT
- .4byte BattleScript_EffectHelpingHand @ EFFECT_HELPING_HAND
- .4byte BattleScript_EffectTrick @ EFFECT_TRICK
- .4byte BattleScript_EffectRolePlay @ EFFECT_ROLE_PLAY
- .4byte BattleScript_EffectWish @ EFFECT_WISH
- .4byte BattleScript_EffectAssist @ EFFECT_ASSIST
- .4byte BattleScript_EffectIngrain @ EFFECT_INGRAIN
- .4byte BattleScript_EffectSuperpower @ EFFECT_SUPERPOWER
- .4byte BattleScript_EffectMagicCoat @ EFFECT_MAGIC_COAT
- .4byte BattleScript_EffectRecycle @ EFFECT_RECYCLE
- .4byte BattleScript_EffectRevenge @ EFFECT_REVENGE
- .4byte BattleScript_EffectBrickBreak @ EFFECT_BRICK_BREAK
- .4byte BattleScript_EffectYawn @ EFFECT_YAWN
- .4byte BattleScript_EffectKnockOff @ EFFECT_KNOCK_OFF
- .4byte BattleScript_EffectEndeavor @ EFFECT_ENDEAVOR
- .4byte BattleScript_EffectEruption @ EFFECT_ERUPTION
- .4byte BattleScript_EffectSkillSwap @ EFFECT_SKILL_SWAP
- .4byte BattleScript_EffectImprison @ EFFECT_IMPRISON
- .4byte BattleScript_EffectRefresh @ EFFECT_REFRESH
- .4byte BattleScript_EffectGrudge @ EFFECT_GRUDGE
- .4byte BattleScript_EffectSnatch @ EFFECT_SNATCH
- .4byte BattleScript_EffectLowKick @ EFFECT_LOW_KICK
- .4byte BattleScript_EffectSecretPower @ EFFECT_SECRET_POWER
- .4byte BattleScript_EffectDoubleEdge @ EFFECT_DOUBLE_EDGE
- .4byte BattleScript_EffectTeeterDance @ EFFECT_TEETER_DANCE
- .4byte BattleScript_EffectBurnHit @ EFFECT_BLAZE_KICK
- .4byte BattleScript_EffectMudSport @ EFFECT_MUD_SPORT
- .4byte BattleScript_EffectPoisonFang @ EFFECT_POISON_FANG
- .4byte BattleScript_EffectWeatherBall @ EFFECT_WEATHER_BALL
- .4byte BattleScript_EffectOverheat @ EFFECT_OVERHEAT
- .4byte BattleScript_EffectTickle @ EFFECT_TICKLE
- .4byte BattleScript_EffectCosmicPower @ EFFECT_COSMIC_POWER
- .4byte BattleScript_EffectSkyUppercut @ EFFECT_SKY_UPPERCUT
- .4byte BattleScript_EffectBulkUp @ EFFECT_BULK_UP
- .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_TAIL
- .4byte BattleScript_EffectWaterSport @ EFFECT_WATER_SPORT
- .4byte BattleScript_EffectCalmMind @ EFFECT_CALM_MIND
- .4byte BattleScript_EffectDragonDance @ EFFECT_DRAGON_DANCE
- .4byte BattleScript_EffectCamouflage @ EFFECT_CAMOUFLAGE
+ .4byte BattleScript_EffectHit @ EFFECT_HIT
+ .4byte BattleScript_EffectSleep @ EFFECT_SLEEP
+ .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_HIT
+ .4byte BattleScript_EffectAbsorb @ EFFECT_ABSORB
+ .4byte BattleScript_EffectBurnHit @ EFFECT_BURN_HIT
+ .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_HIT
+ .4byte BattleScript_EffectParalyzeHit @ EFFECT_PARALYZE_HIT
+ .4byte BattleScript_EffectExplosion @ EFFECT_EXPLOSION
+ .4byte BattleScript_EffectDreamEater @ EFFECT_DREAM_EATER
+ .4byte BattleScript_EffectMirrorMove @ EFFECT_MIRROR_MOVE
+ .4byte BattleScript_EffectAttackUp @ EFFECT_ATTACK_UP
+ .4byte BattleScript_EffectDefenseUp @ EFFECT_DEFENSE_UP
+ .4byte BattleScript_EffectSpeedUp @ EFFECT_SPEED_UP
+ .4byte BattleScript_EffectSpecialAttackUp @ EFFECT_SPECIAL_ATTACK_UP
+ .4byte BattleScript_EffectSpecialDefenseUp @ EFFECT_SPECIAL_DEFENSE_UP
+ .4byte BattleScript_EffectAccuracyUp @ EFFECT_ACCURACY_UP
+ .4byte BattleScript_EffectEvasionUp @ EFFECT_EVASION_UP
+ .4byte BattleScript_EffectSpecialAttackUp3 @ EFFECT_SPECIAL_ATTACK_UP_3
+ .4byte BattleScript_EffectAttackDown @ EFFECT_ATTACK_DOWN
+ .4byte BattleScript_EffectDefenseDown @ EFFECT_DEFENSE_DOWN
+ .4byte BattleScript_EffectSpeedDown @ EFFECT_SPEED_DOWN
+ .4byte BattleScript_EffectSpecialAttackDown @ EFFECT_SPECIAL_ATTACK_DOWN
+ .4byte BattleScript_EffectSpecialDefenseDown @ EFFECT_SPECIAL_DEFENSE_DOWN
+ .4byte BattleScript_EffectAccuracyDown @ EFFECT_ACCURACY_DOWN
+ .4byte BattleScript_EffectEvasionDown @ EFFECT_EVASION_DOWN
+ .4byte BattleScript_EffectHaze @ EFFECT_HAZE
+ .4byte BattleScript_EffectBide @ EFFECT_BIDE
+ .4byte BattleScript_EffectRampage @ EFFECT_RAMPAGE
+ .4byte BattleScript_EffectRoar @ EFFECT_ROAR
+ .4byte BattleScript_EffectMultiHit @ EFFECT_MULTI_HIT
+ .4byte BattleScript_EffectConversion @ EFFECT_CONVERSION
+ .4byte BattleScript_EffectFlinchHit @ EFFECT_FLINCH_HIT
+ .4byte BattleScript_EffectRestoreHp @ EFFECT_RESTORE_HP
+ .4byte BattleScript_EffectToxic @ EFFECT_TOXIC
+ .4byte BattleScript_EffectPayDay @ EFFECT_PAY_DAY
+ .4byte BattleScript_EffectLightScreen @ EFFECT_LIGHT_SCREEN
+ .4byte BattleScript_EffectTriAttack @ EFFECT_TRI_ATTACK
+ .4byte BattleScript_EffectRest @ EFFECT_REST
+ .4byte BattleScript_EffectOHKO @ EFFECT_OHKO
+ .4byte BattleScript_EffectHit @ EFFECT_FUSION_COMBO
+ .4byte BattleScript_EffectSuperFang @ EFFECT_SUPER_FANG
+ .4byte BattleScript_EffectDragonRage @ EFFECT_DRAGON_RAGE
+ .4byte BattleScript_EffectTrap @ EFFECT_TRAP
+ .4byte BattleScript_EffectHealBlock @ EFFECT_HEAL_BLOCK
+ .4byte BattleScript_EffectDoubleHit @ EFFECT_DOUBLE_HIT
+ .4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS
+ .4byte BattleScript_EffectMist @ EFFECT_MIST
+ .4byte BattleScript_EffectFocusEnergy @ EFFECT_FOCUS_ENERGY
+ .4byte BattleScript_EffectRecoil25 @ EFFECT_RECOIL_25
+ .4byte BattleScript_EffectConfuse @ EFFECT_CONFUSE
+ .4byte BattleScript_EffectAttackUp2 @ EFFECT_ATTACK_UP_2
+ .4byte BattleScript_EffectDefenseUp2 @ EFFECT_DEFENSE_UP_2
+ .4byte BattleScript_EffectSpeedUp2 @ EFFECT_SPEED_UP_2
+ .4byte BattleScript_EffectSpecialAttackUp2 @ EFFECT_SPECIAL_ATTACK_UP_2
+ .4byte BattleScript_EffectSpecialDefenseUp2 @ EFFECT_SPECIAL_DEFENSE_UP_2
+ .4byte BattleScript_EffectAccuracyUp2 @ EFFECT_ACCURACY_UP_2
+ .4byte BattleScript_EffectEvasionUp2 @ EFFECT_EVASION_UP_2
+ .4byte BattleScript_EffectTransform @ EFFECT_TRANSFORM
+ .4byte BattleScript_EffectAttackDown2 @ EFFECT_ATTACK_DOWN_2
+ .4byte BattleScript_EffectDefenseDown2 @ EFFECT_DEFENSE_DOWN_2
+ .4byte BattleScript_EffectSpeedDown2 @ EFFECT_SPEED_DOWN_2
+ .4byte BattleScript_EffectSpecialAttackDown2 @ EFFECT_SPECIAL_ATTACK_DOWN_2
+ .4byte BattleScript_EffectSpecialDefenseDown2 @ EFFECT_SPECIAL_DEFENSE_DOWN_2
+ .4byte BattleScript_EffectAccuracyDown2 @ EFFECT_ACCURACY_DOWN_2
+ .4byte BattleScript_EffectEvasionDown2 @ EFFECT_EVASION_DOWN_2
+ .4byte BattleScript_EffectReflect @ EFFECT_REFLECT
+ .4byte BattleScript_EffectPoison @ EFFECT_POISON
+ .4byte BattleScript_EffectParalyze @ EFFECT_PARALYZE
+ .4byte BattleScript_EffectAttackDownHit @ EFFECT_ATTACK_DOWN_HIT
+ .4byte BattleScript_EffectDefenseDownHit @ EFFECT_DEFENSE_DOWN_HIT
+ .4byte BattleScript_EffectSpeedDownHit @ EFFECT_SPEED_DOWN_HIT
+ .4byte BattleScript_EffectSpecialAttackDownHit @ EFFECT_SPECIAL_ATTACK_DOWN_HIT
+ .4byte BattleScript_EffectSpecialDefenseDownHit @ EFFECT_SPECIAL_DEFENSE_DOWN_HIT
+ .4byte BattleScript_EffectAccuracyDownHit @ EFFECT_ACCURACY_DOWN_HIT
+ .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_HIT
+ .4byte BattleScript_EffectTwoTurnsAttack @ EFFECT_TWO_TURNS_ATTACK
+ .4byte BattleScript_EffectConfuseHit @ EFFECT_CONFUSE_HIT
+ .4byte BattleScript_EffectTwineedle @ EFFECT_TWINEEDLE
+ .4byte BattleScript_EffectHit @ EFFECT_VITAL_THROW
+ .4byte BattleScript_EffectSubstitute @ EFFECT_SUBSTITUTE
+ .4byte BattleScript_EffectRecharge @ EFFECT_RECHARGE
+ .4byte BattleScript_EffectRage @ EFFECT_RAGE
+ .4byte BattleScript_EffectMimic @ EFFECT_MIMIC
+ .4byte BattleScript_EffectMetronome @ EFFECT_METRONOME
+ .4byte BattleScript_EffectLeechSeed @ EFFECT_LEECH_SEED
+ .4byte BattleScript_EffectDoNothing @ EFFECT_DO_NOTHING
+ .4byte BattleScript_EffectDisable @ EFFECT_DISABLE
+ .4byte BattleScript_EffectLevelDamage @ EFFECT_LEVEL_DAMAGE
+ .4byte BattleScript_EffectPsywave @ EFFECT_PSYWAVE
+ .4byte BattleScript_EffectCounter @ EFFECT_COUNTER
+ .4byte BattleScript_EffectEncore @ EFFECT_ENCORE
+ .4byte BattleScript_EffectPainSplit @ EFFECT_PAIN_SPLIT
+ .4byte BattleScript_EffectSnore @ EFFECT_SNORE
+ .4byte BattleScript_EffectConversion2 @ EFFECT_CONVERSION_2
+ .4byte BattleScript_EffectLockOn @ EFFECT_LOCK_ON
+ .4byte BattleScript_EffectSketch @ EFFECT_SKETCH
+ .4byte BattleScript_EffectHammerArm @ EFFECT_HAMMER_ARM
+ .4byte BattleScript_EffectSleepTalk @ EFFECT_SLEEP_TALK
+ .4byte BattleScript_EffectDestinyBond @ EFFECT_DESTINY_BOND
+ .4byte BattleScript_EffectHit @ EFFECT_FLAIL
+ .4byte BattleScript_EffectSpite @ EFFECT_SPITE
+ .4byte BattleScript_EffectHit @ EFFECT_FALSE_SWIPE
+ .4byte BattleScript_EffectHealBell @ EFFECT_HEAL_BELL
+ .4byte BattleScript_EffectHit @ EFFECT_ALWAYS_CRIT
+ .4byte BattleScript_EffectTripleKick @ EFFECT_TRIPLE_KICK
+ .4byte BattleScript_EffectThief @ EFFECT_THIEF
+ .4byte BattleScript_EffectMeanLook @ EFFECT_MEAN_LOOK
+ .4byte BattleScript_EffectNightmare @ EFFECT_NIGHTMARE
+ .4byte BattleScript_EffectMinimize @ EFFECT_MINIMIZE
+ .4byte BattleScript_EffectCurse @ EFFECT_CURSE
+ .4byte BattleScript_EffectHealingWish @ EFFECT_HEALING_WISH
+ .4byte BattleScript_EffectProtect @ EFFECT_PROTECT
+ .4byte BattleScript_EffectSpikes @ EFFECT_SPIKES
+ .4byte BattleScript_EffectForesight @ EFFECT_FORESIGHT
+ .4byte BattleScript_EffectPerishSong @ EFFECT_PERISH_SONG
+ .4byte BattleScript_EffectSandstorm @ EFFECT_SANDSTORM
+ .4byte BattleScript_EffectEndure @ EFFECT_ENDURE
+ .4byte BattleScript_EffectRollout @ EFFECT_ROLLOUT
+ .4byte BattleScript_EffectSwagger @ EFFECT_SWAGGER
+ .4byte BattleScript_EffectFuryCutter @ EFFECT_FURY_CUTTER
+ .4byte BattleScript_EffectAttract @ EFFECT_ATTRACT
+ .4byte BattleScript_EffectHit @ EFFECT_RETURN
+ .4byte BattleScript_EffectPresent @ EFFECT_PRESENT
+ .4byte BattleScript_EffectHit @ EFFECT_FRUSTRATION
+ .4byte BattleScript_EffectSafeguard @ EFFECT_SAFEGUARD
+ .4byte BattleScript_EffectHit @ EFFECT_UNUSED_125
+ .4byte BattleScript_EffectMagnitude @ EFFECT_MAGNITUDE
+ .4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS
+ .4byte BattleScript_EffectHit @ EFFECT_PURSUIT
+ .4byte BattleScript_EffectRapidSpin @ EFFECT_RAPID_SPIN
+ .4byte BattleScript_EffectSonicboom @ EFFECT_SONICBOOM
+ .4byte BattleScript_EffectCaptivate @ EFFECT_CAPTIVATE
+ .4byte BattleScript_EffectMorningSun @ EFFECT_MORNING_SUN
+ .4byte BattleScript_EffectSynthesis @ EFFECT_SYNTHESIS
+ .4byte BattleScript_EffectMoonlight @ EFFECT_MOONLIGHT
+ .4byte BattleScript_EffectHit @ EFFECT_HIDDEN_POWER
+ .4byte BattleScript_EffectRainDance @ EFFECT_RAIN_DANCE
+ .4byte BattleScript_EffectSunnyDay @ EFFECT_SUNNY_DAY
+ .4byte BattleScript_EffectDefenseUpHit @ EFFECT_DEFENSE_UP_HIT
+ .4byte BattleScript_EffectAttackUpHit @ EFFECT_ATTACK_UP_HIT
+ .4byte BattleScript_EffectAllStatsUpHit @ EFFECT_ALL_STATS_UP_HIT
+ .4byte BattleScript_EffectHit @ EFFECT_FELL_STINGER
+ .4byte BattleScript_EffectBellyDrum @ EFFECT_BELLY_DRUM
+ .4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP
+ .4byte BattleScript_EffectMirrorCoat @ EFFECT_MIRROR_COAT
+ .4byte BattleScript_EffectSkullBash @ EFFECT_SKULL_BASH
+ .4byte BattleScript_EffectTwister @ EFFECT_TWISTER
+ .4byte BattleScript_EffectEarthquake @ EFFECT_EARTHQUAKE
+ .4byte BattleScript_EffectFutureSight @ EFFECT_FUTURE_SIGHT
+ .4byte BattleScript_EffectGust @ EFFECT_GUST
+ .4byte BattleScript_EffectStomp @ EFFECT_FLINCH_MINIMIZE_HIT
+ .4byte BattleScript_EffectSolarBeam @ EFFECT_SOLAR_BEAM
+ .4byte BattleScript_EffectThunder @ EFFECT_THUNDER
+ .4byte BattleScript_EffectTeleport @ EFFECT_TELEPORT
+ .4byte BattleScript_EffectBeatUp @ EFFECT_BEAT_UP
+ .4byte BattleScript_EffectSemiInvulnerable @ EFFECT_SEMI_INVULNERABLE
+ .4byte BattleScript_EffectDefenseCurl @ EFFECT_DEFENSE_CURL
+ .4byte BattleScript_EffectSoftboiled @ EFFECT_SOFTBOILED
+ .4byte BattleScript_EffectFakeOut @ EFFECT_FAKE_OUT
+ .4byte BattleScript_EffectUproar @ EFFECT_UPROAR
+ .4byte BattleScript_EffectStockpile @ EFFECT_STOCKPILE
+ .4byte BattleScript_EffectSpitUp @ EFFECT_SPIT_UP
+ .4byte BattleScript_EffectSwallow @ EFFECT_SWALLOW
+ .4byte BattleScript_EffectWorrySeed @ EFFECT_WORRY_SEED
+ .4byte BattleScript_EffectHail @ EFFECT_HAIL
+ .4byte BattleScript_EffectTorment @ EFFECT_TORMENT
+ .4byte BattleScript_EffectFlatter @ EFFECT_FLATTER
+ .4byte BattleScript_EffectWillOWisp @ EFFECT_WILL_O_WISP
+ .4byte BattleScript_EffectMemento @ EFFECT_MEMENTO
+ .4byte BattleScript_EffectHit @ EFFECT_FACADE
+ .4byte BattleScript_EffectFocusPunch @ EFFECT_FOCUS_PUNCH
+ .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLINGSALT
+ .4byte BattleScript_EffectFollowMe @ EFFECT_FOLLOW_ME
+ .4byte BattleScript_EffectNaturePower @ EFFECT_NATURE_POWER
+ .4byte BattleScript_EffectCharge @ EFFECT_CHARGE
+ .4byte BattleScript_EffectTaunt @ EFFECT_TAUNT
+ .4byte BattleScript_EffectHelpingHand @ EFFECT_HELPING_HAND
+ .4byte BattleScript_EffectTrick @ EFFECT_TRICK
+ .4byte BattleScript_EffectRolePlay @ EFFECT_ROLE_PLAY
+ .4byte BattleScript_EffectWish @ EFFECT_WISH
+ .4byte BattleScript_EffectAssist @ EFFECT_ASSIST
+ .4byte BattleScript_EffectIngrain @ EFFECT_INGRAIN
+ .4byte BattleScript_EffectSuperpower @ EFFECT_SUPERPOWER
+ .4byte BattleScript_EffectMagicCoat @ EFFECT_MAGIC_COAT
+ .4byte BattleScript_EffectRecycle @ EFFECT_RECYCLE
+ .4byte BattleScript_EffectHit @ EFFECT_REVENGE
+ .4byte BattleScript_EffectBrickBreak @ EFFECT_BRICK_BREAK
+ .4byte BattleScript_EffectYawn @ EFFECT_YAWN
+ .4byte BattleScript_EffectKnockOff @ EFFECT_KNOCK_OFF
+ .4byte BattleScript_EffectEndeavor @ EFFECT_ENDEAVOR
+ .4byte BattleScript_EffectHit @ EFFECT_ERUPTION
+ .4byte BattleScript_EffectSkillSwap @ EFFECT_SKILL_SWAP
+ .4byte BattleScript_EffectImprison @ EFFECT_IMPRISON
+ .4byte BattleScript_EffectRefresh @ EFFECT_REFRESH
+ .4byte BattleScript_EffectGrudge @ EFFECT_GRUDGE
+ .4byte BattleScript_EffectSnatch @ EFFECT_SNATCH
+ .4byte BattleScript_EffectHit @ EFFECT_LOW_KICK
+ .4byte BattleScript_EffectSecretPower @ EFFECT_SECRET_POWER
+ .4byte BattleScript_EffectRecoil33 @ EFFECT_RECOIL_33
+ .4byte BattleScript_EffectTeeterDance @ EFFECT_TEETER_DANCE
+ .4byte BattleScript_EffectHitEscape @ EFFECT_HIT_ESCAPE
+ .4byte BattleScript_EffectMudSport @ EFFECT_MUD_SPORT
+ .4byte BattleScript_EffectPoisonFang @ EFFECT_POISON_FANG
+ .4byte BattleScript_EffectHit @ EFFECT_WEATHER_BALL
+ .4byte BattleScript_EffectOverheat @ EFFECT_OVERHEAT
+ .4byte BattleScript_EffectTickle @ EFFECT_TICKLE
+ .4byte BattleScript_EffectCosmicPower @ EFFECT_COSMIC_POWER
+ .4byte BattleScript_EffectSkyUppercut @ EFFECT_SKY_UPPERCUT
+ .4byte BattleScript_EffectBulkUp @ EFFECT_BULK_UP
+ .4byte BattleScript_EffectPlaceholder @ EFFECT_PLACEHOLDER
+ .4byte BattleScript_EffectWaterSport @ EFFECT_WATER_SPORT
+ .4byte BattleScript_EffectCalmMind @ EFFECT_CALM_MIND
+ .4byte BattleScript_EffectDragonDance @ EFFECT_DRAGON_DANCE
+ .4byte BattleScript_EffectCamouflage @ EFFECT_CAMOUFLAGE
+ .4byte BattleScript_EffectHit @ EFFECT_PLEDGE
+ .4byte BattleScript_EffectFling @ EFFECT_FLING
+ .4byte BattleScript_EffectNaturalGift @ EFFECT_NATURAL_GIFT
+ .4byte BattleScript_EffectWakeUpSlap @ EFFECT_WAKE_UP_SLAP
+ .4byte BattleScript_EffectHit @ EFFECT_WRING_OUT
+ .4byte BattleScript_EffectHit @ EFFECT_HEX
+ .4byte BattleScript_EffectHit @ EFFECT_ASSURANCE
+ .4byte BattleScript_EffectHit @ EFFECT_TRUMP_CARD
+ .4byte BattleScript_EffectHit @ EFFECT_ACROBATICS
+ .4byte BattleScript_EffectHit @ EFFECT_HEAT_CRASH
+ .4byte BattleScript_EffectHit @ EFFECT_PUNISHMENT
+ .4byte BattleScript_EffectHit @ EFFECT_STORED_POWER
+ .4byte BattleScript_EffectHit @ EFFECT_ELECTRO_BALL
+ .4byte BattleScript_EffectHit @ EFFECT_GYRO_BALL
+ .4byte BattleScript_EffectHit @ EFFECT_ECHOED_VOICE
+ .4byte BattleScript_EffectHit @ EFFECT_PAYBACK
+ .4byte BattleScript_EffectHit @ EFFECT_ROUND
+ .4byte BattleScript_EffectHit @ EFFECT_BRINE
+ .4byte BattleScript_EffectHit @ EFFECT_VENOSHOCK
+ .4byte BattleScript_EffectHit @ EFFECT_RETALIATE
+ .4byte BattleScript_EffectBulldoze @ EFFECT_BULLDOZE
+ .4byte BattleScript_EffectHit @ EFFECT_FOUL_PLAY
+ .4byte BattleScript_EffectHit @ EFFECT_PSYSHOCK
+ .4byte BattleScript_EffectRoost @ EFFECT_ROOST
+ .4byte BattleScript_EffectGravity @ EFFECT_GRAVITY
+ .4byte BattleScript_EffectMircleEye @ EFFECT_MIRACLE_EYE
+ .4byte BattleScript_EffectTailwind @ EFFECT_TAILWIND
+ .4byte BattleScript_EffectEmbargo @ EFFECT_EMBARGO
+ .4byte BattleScript_EffectAquaRing @ EFFECT_AQUA_RING
+ .4byte BattleScript_EffectTrickRoom @ EFFECT_TRICK_ROOM
+ .4byte BattleScript_EffectWonderRoom @ EFFECT_WONDER_ROOM
+ .4byte BattleScript_EffectMagicRoom @ EFFECT_MAGIC_ROOM
+ .4byte BattleScript_EffectMagnetRise @ EFFECT_MAGNET_RISE
+ .4byte BattleScript_EffectToxicSpikes @ EFFECT_TOXIC_SPIKES
+ .4byte BattleScript_EffectGastroAcid @ EFFECT_GASTRO_ACID
+ .4byte BattleScript_EffectStealthRock @ EFFECT_STEALTH_ROCK
+ .4byte BattleScript_EffectTelekinesis @ EFFECT_TELEKINESIS
+ .4byte BattleScript_EffectPowerSwap @ EFFECT_POWER_SWAP
+ .4byte BattleScript_EffectGuardSwap @ EFFECT_GUARD_SWAP
+ .4byte BattleScript_EffectHeartSwap @ EFFECT_HEART_SWAP
+ .4byte BattleScript_EffectPowerSplit @ EFFECT_POWER_SPLIT
+ .4byte BattleScript_EffectGuardSplit @ EFFECT_GUARD_SPLIT
+ .4byte BattleScript_EffectStickyWeb @ EFFECT_STICKY_WEB
+ .4byte BattleScript_EffectMetalBurst @ EFFECT_METAL_BURST
+ .4byte BattleScript_EffectLuckyChant @ EFFECT_LUCKY_CHANT
+ .4byte BattleScript_EffectSuckerPunch @ EFFECT_SUCKER_PUNCH
+ .4byte BattleScript_EffectSpecialDefenseDownHit2 @ EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2
+ .4byte BattleScript_EffectSimpleBeam @ EFFECT_SIMPLE_BEAM
+ .4byte BattleScript_EffectEntrainment @ EFFECT_ENTRAINMENT
+ .4byte BattleScript_EffectHealPulse @ EFFECT_HEAL_PULSE
+ .4byte BattleScript_EffectQuash @ EFFECT_QUASH
+ .4byte BattleScript_EffectIonDeluge @ EFFECT_ION_DELUGE
+ .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_DRY
+ .4byte BattleScript_EffectTopsyTurvy @ EFFECT_TOPSY_TURVY
+ .4byte BattleScript_EffectMistyTerrain @ EFFECT_MISTY_TERRAIN
+ .4byte BattleScript_EffectGrassyTerrain @ EFFECT_GRASSY_TERRAIN
+ .4byte BattleScript_EffectElectricTerrain @ EFFECT_ELECTRIC_TERRAIN
+ .4byte BattleScript_EffectPsychicTerrain @ EFFECT_PSYCHIC_TERRAIN
+ .4byte BattleScript_EffectAttackAccUp @ EFFECT_ATTACK_ACCURACY_UP
+ .4byte BattleScript_EffectAttackSpAttackUp @ EFFECT_ATTACK_SPATK_UP
+ .4byte BattleScript_EffectHurricane @ EFFECT_HURRICANE
+ .4byte BattleScript_EffectHit @ EFFECT_TWO_TYPED_MOVE
+ .4byte BattleScript_EffectMeFirst @ EFFECT_ME_FIRST
+ .4byte BattleScript_EffectSpeedUpHit @ EFFECT_SPEED_UP_HIT
+ .4byte BattleScript_EffectQuiverDance @ EFFECT_QUIVER_DANCE
+ .4byte BattleScript_EffectCoil @ EFFECT_COIL
+ .4byte BattleScript_EffectElectrify @ EFFECT_ELECTRIFY
+ .4byte BattleScript_EffectBurnHit @ EFFECT_SCALD
+ .4byte BattleScript_EffectReflectType @ EFFECT_REFLECT_TYPE
+ .4byte BattleScript_EffectSoak @ EFFECT_SOAK
+ .4byte BattleScript_EffectGrowth @ EFFECT_GROWTH
+ .4byte BattleScript_EffectCloseCombat @ EFFECT_CLOSE_COMBAT
+ .4byte BattleScript_EffectLastResort @ EFFECT_LAST_RESORT
+ .4byte BattleScript_EffectRecoil33Status @ EFFECT_RECOIL_33_STATUS
+ .4byte BattleScript_EffectFlinchStatus @ EFFECT_FLINCH_STATUS
+ .4byte BattleScript_EffectRecoil50 @ EFFECT_RECOIL_50
+ .4byte BattleScript_EffectShellSmash @ EFFECT_SHELL_SMASH
+ .4byte BattleScript_EffectShiftGear @ EFFECT_SHIFT_GEAR
+ .4byte BattleScript_EffectDefenseUp3 @ EFFECT_DEFENSE_UP_3
+ .4byte BattleScript_EffectNobleRoar @ EFFECT_NOBLE_ROAR
+ .4byte BattleScript_EffectVenomDrench @ EFFECT_VENOM_DRENCH
+ .4byte BattleScript_EffectToxicThread @ EFFECT_TOXIC_THREAD
+ .4byte BattleScript_EffectClearSmog @ EFFECT_CLEAR_SMOG
+ .4byte BattleScript_EffectHitSwitchTarget @ EFFECT_HIT_SWITCH_TARGET
+ .4byte BattleScript_EffectFinalGambit @ EFFECT_FINAL_GAMBIT
+ .4byte BattleScript_EffectHit @ EFFECT_CHANGE_TYPE_ON_ITEM
+ .4byte BattleScript_EffectAutotomize @ EFFECT_AUTOTOMIZE
+ .4byte BattleScript_EffectCopycat @ EFFECT_COPYCAT
+ .4byte BattleScript_EffectDefog @ EFFECT_DEFOG
+ .4byte BattleScript_EffectHitEnemyHealAlly @ EFFECT_HIT_ENEMY_HEAL_ALLY
+ .4byte BattleScript_EffectSmackDown @ EFFECT_SMACK_DOWN
+ .4byte BattleScript_EffectSynchronoise @ EFFECT_SYNCHRONOISE
+ .4byte BattleScript_EffectPsychoShift @ EFFECT_PSYCHO_SHIFT
+ .4byte BattleScript_EffectPowerTrick @ EFFECT_POWER_TRICK
+ .4byte BattleScript_EffectFlameBurst @ EFFECT_FLAME_BURST
+ .4byte BattleScript_EffectAfterYou @ EFFECT_AFTER_YOU
+ .4byte BattleScript_EffectBestow @ EFFECT_BESTOW
+ .4byte BattleScript_EffectRototiller @ EFFECT_ROTOTILLER
+ .4byte BattleScript_EffectFlowerShield @ EFFECT_FLOWER_SHIELD
+ .4byte BattleScript_EffectHitPreventEscape @ EFFECT_HIT_PREVENT_ESCAPE
+ .4byte BattleScript_EffectSpeedSwap @ EFFECT_SPEED_SWAP
+ .4byte BattleScript_EffectDefenseUp2Hit @ EFFECT_DEFENSE_UP2_HIT
+ .4byte BattleScript_EffectHit @ EFFECT_REVELATION_DANCE
+ .4byte BattleScript_EffectAuroraVeil @ EFFECT_AURORA_VEIL
+ .4byte BattleScript_EffectThirdType @ EFFECT_THIRD_TYPE
+ .4byte BattleScript_EffectFeint @ EFFECT_FEINT
+ .4byte BattleScript_EffectSparklingAria @ EFFECT_SPARKLING_ARIA
+ .4byte BattleScript_EffectAcupressure @ EFFECT_ACUPRESSURE
+ .4byte BattleScript_EffectAromaticMist @ EFFECT_AROMATIC_MIST
+ .4byte BattleScript_EffectPowder @ EFFECT_POWDER
+ .4byte BattleScript_EffectSpAtkUpHit @ EFFECT_SP_ATTACK_UP_HIT
+ .4byte BattleScript_EffectHit @ EFFECT_BELCH
+ .4byte BattleScript_EffectPartingShot @ EFFECT_PARTING_SHOT
+ .4byte BattleScript_EffectSpectralThief @ EFFECT_SPECTRAL_THIEF
+ .4byte BattleScript_EffectVCreate @ EFFECT_V_CREATE
+ .4byte BattleScript_EffectMatBlock @ EFFECT_MAT_BLOCK
+ .4byte BattleScript_EffectHit @ EFFECT_STOMPING_TANTRUM
+ .4byte BattleScript_EffectCoreEnforcer @ EFFECT_CORE_ENFORCER
+ .4byte BattleScript_EffectInstruct @ EFFECT_INSTRUCT
+ .4byte BattleScript_EffectThroatChop @ EFFECT_THROAT_CHOP
+ .4byte BattleScript_EffectLaserFocus @ EFFECT_LASER_FOCUS
+ .4byte BattleScript_EffectMagneticFlux @ EFFECT_MAGNETIC_FLUX
+ .4byte BattleScript_EffectGearUp @ EFFECT_GEAR_UP
+ .4byte BattleScript_EffectIncinerate @ EFFECT_INCINERATE
+ .4byte BattleScript_EffectBugBite @ EFFECT_BUG_BITE
+ .4byte BattleScript_EffectStrengthSap @ EFFECT_STRENGTH_SAP
+ .4byte BattleScript_EffectMindBlown @ EFFECT_MIND_BLOWN
+ .4byte BattleScript_EffectPurify @ EFFECT_PURIFY
+ .4byte BattleScript_EffectBurnUp @ EFFECT_BURN_UP
+ .4byte BattleScript_EffectShoreUp @ EFFECT_SHORE_UP
+ .4byte BattleScript_EffectGeomancy @ EFFECT_GEOMANCY
+ .4byte BattleScript_EffectFairyLock @ EFFECT_FAIRY_LOCK
+ .4byte BattleScript_EffectAllySwitch @ EFFECT_ALLY_SWITCH
+ .4byte BattleScript_EffectRelicSong @ EFFECT_RELIC_SONG
+ .4byte BattleScript_EffectAttackerDefenseDownHit @ EFFECT_ATTACKER_DEFENSE_DOWN_HIT
+ .4byte BattleScript_EffectHit @ EFFECT_BODY_PRESS
+ .4byte BattleScript_EffectEerieSpell @ EFFECT_EERIE_SPELL
+ .4byte BattleScript_EffectJungleHealing @ EFFECT_JUNGLE_HEALING
+ .4byte BattleScript_EffectCoaching @ EFFECT_COACHING
+ .4byte BattleScript_EffectHit @ EFFECT_LASH_OUT
+ .4byte BattleScript_EffectHit @ EFFECT_GRASSY_GLIDE
+ .4byte BattleScript_EffectRemoveTerrain @ EFFECT_REMOVE_TERRAIN
+ .4byte BattleScript_EffectHit @ EFFECT_DYNAMAX_DOUBLE_DMG
+ .4byte BattleScript_EffectDecorate @ EFFECT_DECORATE
+ .4byte BattleScript_EffectHit @ EFFECT_SNIPE_SHOT
+ .4byte BattleScript_EffectTripleHit @ EFFECT_TRIPLE_HIT
+ .4byte BattleScript_EffectRecoilHP25 @ EFFECT_RECOIL_HP_25
+ .4byte BattleScript_EffectStuffCheeks @ EFFECT_STUFF_CHEEKS
+ .4byte BattleScript_EffectDefenseDownHit @ EFFECT_GRAV_APPLE
+ .4byte BattleScript_EffectEvasionUpHit @ EFFECT_EVASION_UP_HIT
+ .4byte BattleScript_EffectDoubleIronBash @ EFFECT_DOUBLE_IRON_BASH
+ .4byte BattleScript_EffectGlitzyGlow @ EFFECT_GLITZY_GLOW
+ .4byte BattleScript_EffectBaddyBad @ EFFECT_BADDY_BAD
+ .4byte BattleScript_EffectSappySeed @ EFFECT_SAPPY_SEED
+ .4byte BattleScript_EffectFreezyFrost @ EFFECT_FREEZY_FROST
+ .4byte BattleScript_EffectSparklySwirl @ EFFECT_SPARKLY_SWIRL
+ .4byte BattleScript_EffectPlasmaFists @ EFFECT_PLASMA_FISTS
+ .4byte BattleScript_EffectHyperspaceFury @ EFFECT_HYPERSPACE_FURY
+ .4byte BattleScript_EffectAuraWheel @ EFFECT_AURA_WHEEL
+ .4byte BattleScript_EffectPhotonGeyser @ EFFECT_PHOTON_GEYSER
+ .4byte BattleScript_EffectShellSideArm @ EFFECT_SHELL_SIDE_ARM
+ .4byte BattleScript_EffectHit @ EFFECT_TERRAIN_PULSE
+ .4byte BattleScript_EffectJawLock @ EFFECT_JAW_LOCK
+ .4byte BattleScript_EffectNoRetreat @ EFFECT_NO_RETREAT
+ .4byte BattleScript_EffectTarShot @ EFFECT_TAR_SHOT
+ .4byte BattleScript_EffectPoltergeist @ EFFECT_POLTERGEIST
+ .4byte BattleScript_EffectOctolock @ EFFECT_OCTOLOCK
+ .4byte BattleScript_EffectClangorousSoul @ EFFECT_CLANGOROUS_SOUL
+ .4byte BattleScript_EffectHit @ EFFECT_BOLT_BEAK
+ .4byte BattleScript_EffectSkyDrop @ EFFECT_SKY_DROP
+ .4byte BattleScript_EffectHit @ EFFECT_EXPANDING_FORCE
+ .4byte BattleScript_EffectScaleShot @ EFFECT_SCALE_SHOT
+ .4byte BattleScript_EffectMeteorBeam @ EFFECT_METEOR_BEAM
+ .4byte BattleScript_EffectHit @ EFFECT_RISING_VOLTAGE
+ .4byte BattleScript_EffectHit @ EFFECT_BEAK_BLAST
+ .4byte BattleScript_EffectCourtChange @ EFFECT_COURT_CHANGE
+ .4byte BattleScript_EffectSteelBeam @ EFFECT_STEEL_BEAM
+ .4byte BattleScript_EffectExtremeEvoboost @ EFFECT_EXTREME_EVOBOOST
+ .4byte BattleScript_EffectTerrainHit @ EFFECT_DAMAGE_SET_TERRAIN
+
+BattleScript_EffectSteelBeam::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_SteelBeamMiss, ACC_CURR_MOVE
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ seteffectwithchance
+ jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_SteelBeamAfterSelfDamage
+ call BattleScript_SteelBeamSelfDamage
+BattleScript_SteelBeamAfterSelfDamage::
+ waitstate
+ tryfaintmon BS_ATTACKER
+ tryfaintmon BS_TARGET
+ goto BattleScript_MoveEnd
+BattleScript_SteelBeamMiss::
+ pause B_WAIT_TIME_SHORT
+ effectivenesssound
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_MoveEnd
+ bichalfword gMoveResultFlags, MOVE_RESULT_MISSED
+ call BattleScript_SteelBeamSelfDamage
+ orhalfword gMoveResultFlags, MOVE_RESULT_MISSED
+ goto BattleScript_SteelBeamAfterSelfDamage
+
+BattleScript_SteelBeamSelfDamage::
+ dmg_1_2_attackerhp
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ return
+
+BattleScript_EffectCourtChange::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ swapsidestatuses
+ attackanimation
+ waitanimation
+ printstring STRINGID_COURTCHANGE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_BeakBlastSetUp::
+ setbeakblast BS_ATTACKER
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ playanimation BS_ATTACKER, B_ANIM_BEAK_BLAST_SETUP, NULL
+ printstring STRINGID_HEATUPBEAK
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_BeakBlastBurn::
+ setbyte cMULTISTRING_CHOOSER, 0
+ copybyte gEffectBattler, gBattlerAttacker
+ call BattleScript_MoveEffectBurn
+ return
+
+BattleScript_EffectMeteorBeam::
+ @ DecideTurn
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
+ setbyte sTWOTURN_STRINGID, B_MSG_TURN1_METEOR_BEAM
+ call BattleScript_FirstChargingTurnMeteorBeam
+ jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd
+ call BattleScript_PowerHerbActivation
+ goto BattleScript_TwoTurnMovesSecondTurn
+
+BattleScript_FirstChargingTurnMeteorBeam::
+ attackcanceler
+ printstring STRINGID_EMPTYSTRING3
+ ppreduce
+ attackanimation
+ waitanimation
+ orword gHitMarker, HITMARKER_CHARGING
+ setmoveeffect MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER
+ seteffectprimary
+ copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID
+ printfromtable gFirstTurnOfTwoStringIds
+ waitmessage B_WAIT_TIME_LONG
+ setmoveeffect MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
+ seteffectsecondary
+ return
+
+BattleScript_EffectScaleShot::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setmultihitcounter 0x0
+ initmultihitstring
+ sethword sMULTIHIT_EFFECT, 0x0
+BattleScript_ScaleShotLoop::
+ jumpifhasnohp BS_ATTACKER, BattleScript_ScaleShotEnd
+ jumpifhasnohp BS_TARGET, BattleScript_ScaleShotPrintStrings
+ jumpifhalfword CMP_EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_ScaleShotDoMultiHit
+ jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_ScaleShotPrintStrings
+BattleScript_ScaleShotDoMultiHit::
+ movevaluescleanup
+ copyhword sMOVE_EFFECT, sMULTIHIT_EFFECT
+ critcalc
+ damagecalc
+ jumpifmovehadnoeffect BattleScript_ScaleShotMultiHitNoMoreHits
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ multihitresultmessage
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ addbyte sMULTIHIT_STRING + 4, 0x1
+ moveendto MOVEEND_NEXT_TARGET
+ jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_FOE_ENDURED, BattleScript_ScaleShotPrintStrings
+ decrementmultihit BattleScript_ScaleShotLoop
+ goto BattleScript_ScaleShotPrintStrings
+BattleScript_ScaleShotMultiHitNoMoreHits::
+ pause B_WAIT_TIME_SHORT
+BattleScript_ScaleShotPrintStrings::
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ jumpifmovehadnoeffect BattleScript_ScaleShotEnd
+ copyarray gBattleTextBuff1, sMULTIHIT_STRING, 0x6
+ printstring STRINGID_HITXTIMES
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ScaleShotEnd::
+ setmoveeffect MOVE_EFFECT_SCALE_SHOT | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ seteffectwithchance
+ tryfaintmon BS_TARGET
+ moveendcase MOVEEND_SYNCHRONIZE_TARGET
+ moveendfrom MOVEEND_STATUS_IMMUNITY_ABILITIES
+ end
+
+BattleScript_EffectSkyDrop:
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2
+ attackcanceler
+ ppreduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ jumpifsubstituteblocks BattleScript_ButItFailed
+ jumpiftargetally BattleScript_ButItFailed
+ jumpifunder200 BS_TARGET, BattleScript_SkyDropWork
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_TARGETTOOHEAVY
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_SkyDropWork:
+ setskydrop
+ setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SKY_DROP
+ setsemiinvulnerablebit
+ call BattleScriptFirstChargingTurnAfterAttackString
+ goto BattleScript_MoveEnd
+BattleScript_SkyDropTurn2:
+ attackcanceler
+ setmoveeffect MOVE_EFFECT_CHARGING
+ setbyte sB_ANIM_TURN, 0x1
+ clearstatusfromeffect BS_ATTACKER
+ orword gHitMarker, HITMARKER_NO_PPDEDUCT
+ argumenttomoveeffect
+ clearsemiinvulnerablebit
+ attackstring
+ clearskydrop BattleScript_SkyDropChangedTarget
+ jumpiftype BS_TARGET, TYPE_FLYING, BattleScript_SkyDropFlyingType
+ goto BattleScript_HitFromCritCalc
+BattleScript_SkyDropFlyingType:
+ makevisible BS_TARGET
+ printstring STRINGID_ITDOESNTAFFECT
+ waitmessage B_WAIT_TIME_LONG
+ makevisible BS_ATTACKER
+ jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_SkyDropFlyingAlreadyConfused
+ jumpifstatus2 BS_TARGET, STATUS2_LOCK_CONFUSE, BattleScript_SkyDropFlyingConfuseLock
+ goto BattleScript_MoveEnd
+BattleScript_SkyDropChangedTarget:
+ pause B_WAIT_TIME_SHORT
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ makevisible BS_ATTACKER
+ goto BattleScript_MoveEnd
+
+BattleScript_SkyDropFlyingConfuseLock:
+ setmoveeffect MOVE_EFFECT_CONFUSION
+ seteffectprimary
+BattleScript_SkyDropFlyingAlreadyConfused:
+ setmoveeffect MOVE_EFFECT_THRASH
+ clearstatusfromeffect BS_TARGET
+ jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_MoveEnd
+ setbyte BS_ATTACKER, BS_TARGET
+ goto BattleScript_ThrashConfuses
+
+BattleScript_EffectFling:
+ jumpifcantfling BS_ATTACKER, BattleScript_ButItFailedAtkStringPpReduce
+ jumpifstatus3 BS_ATTACKER, STATUS3_EMBARGO, BattleScript_ButItFailedAtkStringPpReduce
+ jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_MAGIC_ROOM, BattleScript_ButItFailedAtkStringPpReduce
+ setlastuseditem BS_ATTACKER
+ removeitem BS_ATTACKER
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_PKMNFLUNG
+ waitmessage B_WAIT_TIME_SHORT
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_MED
+ resultmessage
+ waitmessage B_WAIT_TIME_MED
+ jumpiflastuseditemberry BattleScript_EffectFlingConsumeBerry
+ jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_FLAME_ORB, BattleScript_FlingFlameOrb
+ jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_FLINCH, BattleScript_FlingFlinch
+ jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_LIGHT_BALL, BattleScript_FlingLightBall
+ jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_MENTAL_HERB, BattleScript_FlingMentalHerb
+ jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_POISON_POWER, BattleScript_FlingPoisonBarb
+ jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_TOXIC_ORB, BattleScript_FlingToxicOrb
+ jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_RESTORE_STATS, BattleScript_FlingWhiteHerb
+BattleScript_EffectFlingConsumeBerry:
+ savebattleritem BS_TARGET
+ battleritemtolastuseditem BS_TARGET
+ setbyte sBERRY_OVERRIDE, TRUE @ override the requirements for eating berries
+ orword gHitMarker, HITMARKER_NO_ANIMATIONS
+ consumeberry BS_TARGET
+ bicword gHitMarker, HITMARKER_NO_ANIMATIONS
+ setbyte sBERRY_OVERRIDE, FALSE
+ restorebattleritem BS_TARGET
+BattleScript_FlingEnd:
+ tryfaintmon BS_TARGET
+ goto BattleScript_MoveEnd
+
+BattleScript_FlingFlameOrb:
+ setmoveeffect MOVE_EFFECT_BURN
+ seteffectprimary
+ goto BattleScript_FlingEnd
+BattleScript_FlingFlinch:
+ setmoveeffect MOVE_EFFECT_FLINCH
+ seteffectprimary
+ goto BattleScript_FlingEnd
+BattleScript_FlingLightBall:
+ setmoveeffect MOVE_EFFECT_PARALYSIS
+ seteffectprimary
+ goto BattleScript_FlingEnd
+BattleScript_FlingMentalHerb:
+ curecertainstatuses BS_TARGET
+ savetarget
+ copybyte gBattlerAttacker, gBattlerTarget
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL
+ printfromtable gMentalHerbCureStringIds
+ waitmessage B_WAIT_TIME_LONG
+ updatestatusicon BS_ATTACKER
+ restoretarget
+ goto BattleScript_FlingEnd
+BattleScript_FlingPoisonBarb:
+ setmoveeffect MOVE_EFFECT_POISON
+ seteffectprimary
+ goto BattleScript_FlingEnd
+BattleScript_FlingToxicOrb:
+ setmoveeffect MOVE_EFFECT_TOXIC
+ seteffectprimary
+ goto BattleScript_FlingEnd
+BattleScript_FlingWhiteHerb:
+ tryresetnegativestatstages BS_TARGET
+ swapattackerwithtarget
+ printstring STRINGID_PKMNSTATUSNORMAL
+ waitmessage B_WAIT_TIME_MED
+ swapattackerwithtarget
+ goto BattleScript_FlingEnd
+
+BattleScript_EffectShellSideArm:
+ shellsidearmcheck
+ setmoveeffect MOVE_EFFECT_POISON
+ goto BattleScript_EffectHit
+
+BattleScript_EffectPhotonGeyser:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ photongeysercheck BS_ATTACKER
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ seteffectwithchance
+ tryfaintmon BS_TARGET
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAuraWheel: @ Aura Wheel can only be used by Morpeko
+ jumpifspecies BS_ATTACKER, SPECIES_MORPEKO, BattleScript_EffectSpeedUpHit
+ jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectSpeedUpHit
+ printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectClangorousSoul:
+ attackcanceler
+ attackstring
+ ppreduce
+ cutonethirdhpraisestats BattleScript_ButItFailed
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_SKIP_DMG_TRACK | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE
+ attackanimation
+ waitanimation
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ call BattleScript_AllStatsUp
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectOctolock:
+ attackcanceler
+ jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setoctolock BS_TARGET, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_OctolockEndTurn::
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_OctolockLowerDef
+ jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_OctolockTryLowerSpDef
+ goto BattleScript_OctolockEnd2
+BattleScript_OctolockLowerDef:
+ jumpifability BS_TARGET, ABILITY_BIG_PECKS, BattleScript_OctolockTryLowerSpDef
+ playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE
+ setbyte sSTAT_ANIM_PLAYED, TRUE
+ setstatchanger STAT_DEF, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_OctolockTryLowerSpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_OctolockTryLowerSpDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_OctolockTryLowerSpDef:
+ jumpifbyte CMP_EQUAL, sSTAT_ANIM_PLAYED, TRUE, BattleScript_OctolockSkipSpDefAnim
+ playstatchangeanimation BS_ATTACKER, BIT_SPDEF, STAT_CHANGE_NEGATIVE
+BattleScript_OctolockSkipSpDefAnim:
+ setstatchanger STAT_SPDEF, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_OctolockEnd2
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_OctolockEnd2
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_OctolockEnd2::
+ end2
+
+BattleScript_EffectPoltergeist:
+ attackcanceler
+ attackstring
+ ppreduce
+ checkpoltergeist BS_TARGET, BattleScript_ButItFailed
+ printstring STRINGID_ABOUTTOUSEPOLTERGEIST
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_HitFromCritCalc
+
+BattleScript_EffectTarShot:
+ attackcanceler
+ jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ cantarshotwork BS_TARGET, BattleScript_ButItFailedAtkStringPpReduce
+ attackstring
+ ppreduce
+ setstatchanger STAT_SPEED, 1, TRUE
+ attackanimation
+ waitanimation
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TryTarShot
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_TryTarShot:
+ trytarshot BS_TARGET, BattleScript_MoveEnd
+ printstring STRINGID_PKMNBECAMEWEAKERTOFIRE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectNoRetreat:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ trynoretreat BS_TARGET, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ call BattleScript_AllStatsUp
+ jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_MoveEnd
+ setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE
+ seteffectprimary
+ printstring STRINGID_CANTESCAPEDUETOUSEDMOVE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectJawLock:
+ setmoveeffect MOVE_EFFECT_TRAP_BOTH | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_BothCanNoLongerEscape::
+ printstring STRINGID_BOTHCANNOLONGERESCAPE
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_EffectHyperspaceFury:
+ jumpifspecies BS_ATTACKER, SPECIES_HOOPA_UNBOUND, BattleScript_EffectHyperspaceFuryUnbound
+ jumpifspecies BS_ATTACKER, SPECIES_HOOPA, BattleScript_ButHoopaCantUseIt
+ printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectHyperspaceFuryUnbound::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ pause B_WAIT_TIME_LONG
+ ppreduce
+ setmoveeffect MOVE_EFFECT_FEINT
+ seteffectwithchance
+ setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ goto BattleScript_HitFromCritCalc
+
+BattleScript_ButHoopaCantUseIt:
+ printstring STRINGID_BUTHOOPACANTUSEIT
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_HyperspaceFuryRemoveProtect::
+ printstring STRINGID_BROKETHROUGHPROTECTION
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_EffectPlasmaFists:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ seteffectwithchance
+ tryfaintmon BS_TARGET
+ applyplasmafists
+ printstring STRINGID_IONDELUGEON
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSparklySwirl:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_TARGET
+ healpartystatus
+ waitstate
+ updatestatusicon BS_ATTACKER_WITH_PARTNER
+ waitstate
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFreezyFrost:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_TARGET
+ normalisebuffs
+ printstring STRINGID_STATCHANGESGONE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSappySeed:
+ jumpifstatus3 BS_TARGET, STATUS3_LEECHSEED, BattleScript_EffectHit
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_TARGET
+ jumpifhasnohp BS_TARGET, BattleScript_MoveEnd
+ setseeded
+ printfromtable gLeechSeedStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectBaddyBad:
+ jumpifsideaffecting BS_ATTACKER, SIDE_STATUS_REFLECT, BattleScript_EffectHit
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_TARGET
+ setreflect
+ printfromtable gReflectLightScreenSafeguardStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectGlitzyGlow:
+ jumpifsideaffecting BS_ATTACKER, SIDE_STATUS_LIGHTSCREEN, BattleScript_EffectHit
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_TARGET
+ setlightscreen
+ printfromtable gReflectLightScreenSafeguardStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectDoubleIronBash:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setmultihitcounter 2
+ initmultihitstring
+ sethword sMULTIHIT_EFFECT, MOVE_EFFECT_FLINCH
+ goto BattleScript_MultiHitLoop
+
+BattleScript_EffectEvasionUpHit:
+ setmoveeffect MOVE_EFFECT_EVS_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
+ goto BattleScript_EffectHit
+
+BattleScript_EffectStuffCheeks::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+BattleScript_StuffCheeksEatBerry:
+ setbyte sBERRY_OVERRIDE, TRUE
+ orword gHitMarker, HITMARKER_NO_ANIMATIONS
+ consumeberry BS_ATTACKER
+ bicword gHitMarker, HITMARKER_NO_ANIMATIONS
+ setbyte sBERRY_OVERRIDE, FALSE
+ setstatchanger STAT_DEF, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StuffCheeksEnd
+ setgraphicalstatchangevalues
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StuffCheeksEnd @ cant raise def
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_StuffCheeksEnd:
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectDecorate:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 12, BattleScript_DecorateBoost
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPATK, 12, BattleScript_DecorateBoost
+ goto BattleScript_ButItFailed
+BattleScript_DecorateBoost:
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0x0
+ setstatchanger STAT_ATK, 2, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_DecorateBoostSpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DecorateBoostSpAtk
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_DecorateBoostSpAtk:
+ setstatchanger STAT_SPATK, 2, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectRemoveTerrain:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifword CMP_NO_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_ANY, BattleScript_ButItFailed
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ removeterrain
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 4, BattleScript_MoveEnd
+ printfromtable gTerrainEndingStringIds
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
+ tryfaintmon BS_TARGET
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectCoaching:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifnoally BS_ATTACKER, BattleScript_ButItFailed
+ copybyte gBattlerTarget, gBattlerAttacker
+ setallytonexttarget EffectCoaching_CheckAllyStats
+ goto BattleScript_ButItFailed
+EffectCoaching_CheckAllyStats:
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoachingWorks
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoachingWorks
+ goto BattleScript_ButItFailed @ ally at max atk, def
+BattleScript_CoachingWorks:
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, 0x0
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CoachingBoostDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CoachingBoostDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_CoachingBoostDef:
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectJungleHealing:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifteamhealthy BS_ATTACKER, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ copybyte gBattlerTarget, gBattlerAttacker
+ setbyte gBattleCommunication, 0
+JungleHealing_RestoreTargetHealth:
+ copybyte gBattlerAttacker, gBattlerTarget
+ tryhealquarterhealth BS_TARGET, BattleScript_JungleHealing_TryCureStatus
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ printstring STRINGID_PKMNREGAINEDHEALTH
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_JungleHealing_TryCureStatus:
+ jumpifmove MOVE_LIFE_DEW, BattleScript_JungleHealingTryRestoreAlly @ life dew only heals
+ jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_JungleHealingCureStatus
+ goto BattleScript_JungleHealingTryRestoreAlly
+BattleScript_JungleHealingCureStatus:
+ curestatus BS_TARGET
+ updatestatusicon BS_TARGET
+ printstring STRINGID_PKMNSTATUSNORMAL
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_JungleHealingTryRestoreAlly:
+ jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_MoveEnd
+ addbyte gBattleCommunication, 1
+ jumpifnoally BS_TARGET, BattleScript_MoveEnd
+ setallytonexttarget JungleHealing_RestoreTargetHealth
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAttackerDefenseDownHit:
+ setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectRelicSong:
+ setmoveeffect MOVE_EFFECT_RELIC_SONG | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ seteffectwithchance
+ argumentstatuseffect
+ tryfaintmon BS_TARGET
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAllySwitch:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ jumpifnoally BS_ATTACKER, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_ALLYSWITCHPOSITION
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFairyLock:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ trysetfairylock BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_NOONEWILLBEABLETORUNAWAY
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectBurnUp:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpiftype BS_ATTACKER, TYPE_FIRE, BattleScript_BurnUpWorks
+ goto BattleScript_ButItFailed
+BattleScript_BurnUpWorks:
+ accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ losetype BS_ATTACKER, TYPE_FIRE
+ printstring STRINGID_ATTACKERLOSTFIRETYPE
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_TARGET
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPurify:
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_PurifyWorks
+ goto BattleScript_ButItFailed
+BattleScript_PurifyWorks:
+ attackanimation
+ waitanimation
+ curestatus BS_TARGET
+ updatestatusicon BS_TARGET
+ printstring STRINGID_ATTACKERCUREDTARGETSTATUS
+ waitmessage B_WAIT_TIME_LONG
+ tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_ATTACKER
+ goto BattleScript_RestoreHp
+
+BattleScript_EffectStrengthSap:
+ setstatchanger STAT_ATK, 1, TRUE
+ attackcanceler
+ jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MIN_STAT_STAGE, BattleScript_StrengthSapTryLower
+ pause B_WAIT_TIME_SHORT
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+BattleScript_StrengthSapTryLower:
+ getstatvalue BS_TARGET, STAT_ATK
+ jumpiffullhp BS_ATTACKER, BattleScript_StrengthSapMustLower
+ attackanimation
+ waitanimation
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StrengthSapHp
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StrengthSapHp
+BattleScript_StrengthSapLower:
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_StrengthSapHp
+@ Drain HP without lowering a stat
+BattleScript_StrengthSapTryHp:
+ jumpiffullhp BS_ATTACKER, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+BattleScript_StrengthSapHp:
+ jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd
+ jumpiffullhp BS_ATTACKER, BattleScript_MoveEnd
+ manipulatedamage DMG_BIG_ROOT
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ printstring STRINGID_PKMNENERGYDRAINED
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+BattleScript_StrengthSapMustLower:
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_MoveEnd
+ attackanimation
+ waitanimation
+ goto BattleScript_StrengthSapLower
+
+BattleScript_EffectBugBite:
+ setmoveeffect MOVE_EFFECT_BUG_BITE | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectIncinerate:
+ setmoveeffect MOVE_EFFECT_INCINERATE | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_MoveEffectIncinerate::
+ printstring STRINGID_INCINERATEBURN
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_MoveEffectBugBite::
+ printstring STRINGID_BUGBITE
+ waitmessage B_WAIT_TIME_LONG
+ orword gHitMarker, HITMARKER_NO_ANIMATIONS
+ setbyte sBERRY_OVERRIDE, TRUE @ override the requirements for eating berries
+ consumeberry BS_ATTACKER, TRUE @ consume the berry, then restore the item from changedItems
+ bicword gHitMarker, HITMARKER_NO_ANIMATIONS
+ setbyte sBERRY_OVERRIDE, FALSE
+ return
+
+BattleScript_EffectCoreEnforcer:
+ setmoveeffect MOVE_EFFECT_CORE_ENFORCER | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_MoveEffectCoreEnforcer::
+ setgastroacid BattleScript_CoreEnforcerRet
+ printstring STRINGID_PKMNSABILITYSUPPRESSED
+ waitmessage B_WAIT_TIME_LONG
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+BattleScript_CoreEnforcerRet:
+ return
+
+BattleScript_EffectLaserFocus:
+ attackcanceler
+ attackstring
+ ppreduce
+ setuserstatus3 STATUS3_LASER_FOCUS, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_LASERFOCUS
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectVCreate:
+ setmoveeffect MOVE_EFFECT_V_CREATE | MOVE_EFFECT_AFFECTS_USER
+ goto BattleScript_EffectHit
+
+BattleScript_VCreateStatLoss::
+ jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim
+ jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_VCreateStatLossRet
+BattleScript_VCreateStatAnim:
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF | BIT_SPEED, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT
+ setstatchanger STAT_DEF, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpDef
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_VCreateTrySpDef:
+ setstatchanger STAT_SPDEF, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpeed
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpeed
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_VCreateTrySpeed:
+ setstatchanger STAT_SPEED, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateStatLossRet
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateStatLossRet
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_VCreateStatLossRet:
+ return
+
+BattleScript_SpectralThiefSteal::
+ printstring STRINGID_SPECTRALTHIEFSTEAL
+ waitmessage B_WAIT_TIME_LONG
+ setbyte sB_ANIM_ARG2, 0
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ spectralthiefprintstats
+ return
+
+BattleScript_EffectSpectralThief:
+ setmoveeffect MOVE_EFFECT_SPECTRAL_THIEF
+ goto BattleScript_EffectHit
+
+BattleScript_EffectPartingShot::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_EffectPartingShotTryAtk
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats
+BattleScript_EffectPartingShotTryAtk:
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS
+ playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_ATK, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotTrySpAtk
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectPartingShotTrySpAtk:
+ playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_SPATK, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotSwitch
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectPartingShotSwitch:
+ moveendall
+ jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_PartingShotEnd
+ jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_PartingShotEnd
+ openpartyscreen BS_ATTACKER, BattleScript_PartingShotEnd
+ switchoutabilities BS_ATTACKER
+ waitstate
+ switchhandleorder BS_ATTACKER, 2
+ returntoball BS_ATTACKER
+ getswitchedmondata BS_ATTACKER
+ switchindataupdate BS_ATTACKER
+ hpthresholds BS_ATTACKER
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ printstring STRINGID_SWITCHINMON
+ switchinanim BS_ATTACKER, TRUE
+ waitstate
+ switchineffects BS_ATTACKER
+BattleScript_PartingShotEnd:
+ end
+
+BattleScript_EffectSpAtkUpHit:
+ setmoveeffect MOVE_EFFECT_SP_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
+ goto BattleScript_EffectHit
+
+BattleScript_EffectPowder:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON
+ attackstring
+ ppreduce
+ jumpifstatus2 BS_TARGET, STATUS2_POWDER, BattleScript_ButItFailed
+ setpowder BS_TARGET
+ attackanimation
+ waitanimation
+ printstring STRINGID_COVEREDINPOWDER
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAromaticMist:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_ButItFailed
+ jumpiftargetally BattleScript_EffectAromaticMistWorks
+ goto BattleScript_ButItFailed
+BattleScript_EffectAromaticMistWorks:
+ setstatchanger STAT_SPDEF, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAromaticMistEnd
+ jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AromaticMistAnim
+ pause B_WAIT_TIME_SHORTEST
+ printstring STRINGID_TARGETSTATWONTGOHIGHER
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_EffectAromaticMistEnd
+BattleScript_AromaticMistAnim:
+ attackanimation
+ waitanimation
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectAromaticMistEnd:
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMagneticFlux::
+ attackcanceler
+ attackstring
+ ppreduce
+ setbyte gBattleCommunication, 0
+BattleScript_EffectMagneticFluxStart:
+ jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectMagneticFluxCheckStats
+ jumpifability BS_TARGET, ABILITY_PLUS, BattleScript_EffectMagneticFluxCheckStats
+ goto BattleScript_EffectMagneticFluxLoop
+BattleScript_EffectMagneticFluxCheckStats:
+ jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_EffectMagneticFluxTryDef
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_EffectMagneticFluxLoop
+BattleScript_EffectMagneticFluxTryDef:
+ jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_EffectMagneticFluxSkipAnim
+ attackanimation
+ waitanimation
+BattleScript_EffectMagneticFluxSkipAnim:
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_DEF | BIT_SPDEF, 0
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxTrySpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectMagneticFluxTrySpDef
+ addbyte gBattleCommunication, 1
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectMagneticFluxTrySpDef:
+ setstatchanger STAT_SPDEF, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxLoop
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectMagneticFluxLoop
+ addbyte gBattleCommunication, 1
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectMagneticFluxLoop:
+ jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectMagneticFluxEnd
+ setallytonexttarget BattleScript_EffectMagneticFluxStart
+BattleScript_EffectMagneticFluxEnd:
+ jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_MoveEnd
+ goto BattleScript_ButItFailed
+
+BattleScript_EffectGearUp::
+ attackcanceler
+ attackstring
+ ppreduce
+ setbyte gBattleCommunication, 0
+BattleScript_EffectGearUpStart:
+ jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectGearUpCheckStats
+ jumpifability BS_TARGET, ABILITY_PLUS, BattleScript_EffectGearUpCheckStats
+ goto BattleScript_EffectGearUpLoop
+BattleScript_EffectGearUpCheckStats:
+ jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_EffectGearUpTryAtk
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_EffectGearUpLoop
+BattleScript_EffectGearUpTryAtk:
+ jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_EffectGearUpSkipAnim
+ attackanimation
+ waitanimation
+BattleScript_EffectGearUpSkipAnim:
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpTrySpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectGearUpTrySpAtk
+ addbyte gBattleCommunication, 1
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectGearUpTrySpAtk:
+ setstatchanger STAT_SPATK, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpLoop
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectGearUpLoop
+ addbyte gBattleCommunication, 1
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectGearUpLoop:
+ jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectGearUpEnd
+ setallytonexttarget BattleScript_EffectGearUpStart
+BattleScript_EffectGearUpEnd:
+ jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_MoveEnd
+ goto BattleScript_ButItFailed
+
+BattleScript_EffectAcupressure:
+ attackcanceler
+ jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectAcupressureTry
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_PrintMoveMissed
+BattleScript_EffectAcupressureTry:
+ attackstring
+ ppreduce
+ tryaccupressure BS_TARGET, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ statbuffchange MOVE_EFFECT_CERTAIN, BattleScript_MoveEnd
+ printstring STRINGID_DEFENDERSSTATROSE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_MoveEffectFeint::
+ printstring STRINGID_FELLFORFEINT
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_EffectFeint:
+ setmoveeffect MOVE_EFFECT_FEINT
+ goto BattleScript_EffectHit
+
+BattleScript_EffectThirdType:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ trysetthirdtype BS_TARGET, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_THIRDTYPEADDED
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectDefenseUp2Hit:
+ setmoveeffect MOVE_EFFECT_DEF_PLUS_2 | MOVE_EFFECT_AFFECTS_USER
+ goto BattleScript_EffectHit
+
+BattleScript_EffectFlowerShield:
+ attackcanceler
+ attackstring
+ ppreduce
+ selectfirstvalidtarget
+BattleScript_FlowerShieldIsAnyGrass:
+ jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoopStart
+ jumpifnexttargetvalid BattleScript_FlowerShieldIsAnyGrass
+ goto BattleScript_ButItFailed
+BattleScript_FlowerShieldLoopStart:
+ selectfirstvalidtarget
+BattleScript_FlowerShieldLoop:
+ movevaluescleanup
+ jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoop2
+ goto BattleScript_FlowerShieldMoveTargetEnd
+BattleScript_FlowerShieldLoop2:
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_FlowerShieldMoveTargetEnd
+ jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_FlowerShieldDoAnim
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_FlowerShieldMoveTargetEnd
+ pause 21
+ goto BattleScript_FlowerShieldString
+BattleScript_FlowerShieldDoAnim:
+ attackanimation
+ waitanimation
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_FlowerShieldString:
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_FlowerShieldMoveTargetEnd:
+ moveendto MOVEEND_NEXT_TARGET
+ jumpifnexttargetvalid BattleScript_FlowerShieldLoop
+ end
+
+BattleScript_EffectRototiller:
+ attackcanceler
+ attackstring
+ ppreduce
+ getrototillertargets BattleScript_ButItFailed
+ @ at least one battler is affected
+ attackanimation
+ waitanimation
+ savetarget
+ setbyte gBattlerTarget, 0
+BattleScript_RototillerLoop:
+ movevaluescleanup
+ jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_RototillerCheckAffected
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_RototillerCantRaiseMultipleStats
+BattleScript_RototillerCheckAffected:
+ jumpifnotrototilleraffected BS_TARGET, BattleScript_RototillerNoEffect
+BattleScript_RototillerAffected:
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerTrySpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RototillerTrySpAtk
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_RototillerTrySpAtk::
+ setstatchanger STAT_SPATK, 1, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerMoveTargetEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RototillerMoveTargetEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_RototillerMoveTargetEnd:
+ moveendto MOVEEND_NEXT_TARGET
+ addbyte gBattlerTarget, 1
+ jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_RototillerLoop
+ end
+
+BattleScript_RototillerCantRaiseMultipleStats:
+ copybyte gBattlerAttacker, gBattlerTarget
+ printstring STRINGID_STATSWONTINCREASE2
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_RototillerMoveTargetEnd
+
+BattleScript_RototillerNoEffect:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_NOEFFECTONTARGET
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_RototillerMoveTargetEnd
+
+BattleScript_EffectBestow:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON
+ attackstring
+ ppreduce
+ jumpifsubstituteblocks BattleScript_ButItFailed
+ trybestow BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_BESTOWITEMGIVING
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAfterYou:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ tryafteryou BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_KINDOFFER
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFlameBurst:
+ setmoveeffect MOVE_EFFECT_FLAME_BURST | MOVE_EFFECT_AFFECTS_USER
+ goto BattleScript_EffectHit
+
+BattleScript_MoveEffectFlameBurst::
+ tryfaintmon BS_TARGET
+ copybyte sBATTLER, sSAVED_BATTLER
+ printstring STRINGID_BURSTINGFLAMESHIT
+ waitmessage B_WAIT_TIME_LONG
+ savetarget
+ copybyte gBattlerTarget, sSAVED_BATTLER
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ tryfaintmon BS_TARGET
+ restoretarget
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPowerTrick:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ powertrick BS_ATTACKER
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSWITCHEDATKANDDEF
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPsychoShift:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ jumpifstatus BS_ATTACKER, STATUS1_ANY, BattleScript_EffectPsychoShiftCanWork
+ goto BattleScript_ButItFailed
+BattleScript_EffectPsychoShiftCanWork:
+ jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpifsafeguard BattleScript_SafeguardProtected
+ trypsychoshift BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ copybyte gEffectBattler, gBattlerTarget
+ printfromtable gStatusConditionsStringIds
+ waitmessage B_WAIT_TIME_LONG
+ statusanimation BS_TARGET
+ updatestatusicon BS_TARGET
+ curestatus BS_ATTACKER
+ printstring STRINGID_PKMNSTATUSNORMAL
+ waitmessage B_WAIT_TIME_LONG
+ updatestatusicon BS_ATTACKER
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSynchronoise:
+ attackcanceler
+ attackstring
+ ppreduce
+ selectfirstvalidtarget
+BattleScript_SynchronoiseLoop:
+ movevaluescleanup
+ jumpifcantusesynchronoise BattleScript_SynchronoiseNoEffect
+ accuracycheck BattleScript_SynchronoiseMissed, ACC_CURR_MOVE
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ tryfaintmon BS_TARGET
+BattleScript_SynchronoiseMoveTargetEnd:
+ moveendto MOVEEND_NEXT_TARGET
+ jumpifnexttargetvalid BattleScript_SynchronoiseLoop
+ end
+BattleScript_SynchronoiseMissed:
+ pause B_WAIT_TIME_SHORT
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_SynchronoiseMoveTargetEnd
+BattleScript_SynchronoiseNoEffect:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_NOEFFECTONTARGET
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_SynchronoiseMoveTargetEnd
+
+BattleScript_EffectSmackDown:
+ setmoveeffect MOVE_EFFECT_SMACK_DOWN
+ goto BattleScript_EffectHit
+
+BattleScript_MoveEffectSmackDown::
+ printstring STRINGID_FELLSTRAIGHTDOWN
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_EffectHitEnemyHealAlly:
+ jumpiftargetally BattleScript_EffectHealPulse
+ goto BattleScript_EffectHit
+
+BattleScript_EffectDefog:
+ setstatchanger STAT_EVASION, 1, TRUE
+ attackcanceler
+ jumpifsubstituteblocks BattleScript_DefogIfCanClearHazards
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_EVASION, MIN_STAT_STAGE, BattleScript_DefogWorks
+BattleScript_DefogIfCanClearHazards:
+ defogclear BS_ATTACKER, FALSE, BattleScript_ButItFailedAtkStringPpReduce
+BattleScript_DefogWorks:
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_DefogTryHazardsWithAnim
+ jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefogDoAnim
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_DefogTryHazardsWithAnim
+ pause B_WAIT_TIME_SHORT
+ goto BattleScript_DefogPrintString
+BattleScript_DefogDoAnim::
+ attackanimation
+ waitanimation
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_DefogPrintString::
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_DefogTryHazards::
+ copybyte gEffectBattler, gBattlerAttacker
+ defogclear BS_ATTACKER, TRUE, NULL
+ copybyte gBattlerAttacker, gEffectBattler
+ goto BattleScript_MoveEnd
+BattleScript_DefogTryHazardsWithAnim:
+ attackanimation
+ waitanimation
+ goto BattleScript_DefogTryHazards
+
+BattleScript_EffectCopycat:
+ attackcanceler
+ attackstring
+ pause 5
+ trycopycat BattleScript_CopycatFail
+ attackanimation
+ waitanimation
+ jumptocalledmove TRUE
+BattleScript_CopycatFail:
+ ppreduce
+ goto BattleScript_ButItFailed
+
+BattleScript_EffectInstruct:
+ attackcanceler
+ attackstring
+ ppreduce
+ pause 5
+ tryinstruct BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_USEDINSTRUCTEDMOVE
+ waitmessage B_WAIT_TIME_LONG
+ setbyte sB_ANIM_TURN, 0
+ setbyte sB_ANIM_TARGETS_HIT, 0
+ jumptocalledmove TRUE
+
+BattleScript_EffectAutotomize:
+ setstatchanger STAT_SPEED, 2, FALSE
+ attackcanceler
+ attackstring
+ ppreduce
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AutotomizeWeightLoss
+ jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AutotomizeAttackAnim
+ pause B_WAIT_TIME_SHORT
+ goto BattleScript_AutotomizePrintString
+BattleScript_AutotomizeAttackAnim::
+ attackanimation
+ waitanimation
+BattleScript_AutotomizeDoAnim::
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_AutotomizePrintString::
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_AutotomizeWeightLoss::
+ jumpifmovehadnoeffect BattleScript_MoveEnd
+ tryautotomize BS_ATTACKER, BattleScript_MoveEnd
+ printstring STRINGID_BECAMENIMBLE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectFinalGambit:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ typecalc
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
+ dmgtocurrattackerhp
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ dmgtocurrattackerhp
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ seteffectwithchance
+ tryfaintmon BS_ATTACKER
+ tryfaintmon BS_TARGET
+ jumpifmovehadnoeffect BattleScript_MoveEnd
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectHitSwitchTarget:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_TARGET
+ moveendcase MOVEEND_MAGICIAN @ possibly others?
+ jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut
+ jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted
+ tryhitswitchtarget BattleScript_EffectHitSwitchTargetMoveEnd
+BattleScript_EffectHitSwitchTargetMoveEnd:
+ moveendall
+ end
+
+BattleScript_EffectClearSmog:
+ setmoveeffect MOVE_EFFECT_CLEAR_SMOG
+ goto BattleScript_EffectHit
+
+BattleScript_EffectToxicThread:
+ setstatchanger STAT_SPEED, 2, TRUE
+ attackcanceler
+ jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_ToxicThreadWorks
+ jumpifstatus BS_TARGET, STATUS1_PSN_ANY, BattleScript_ButItFailedAtkStringPpReduce
+BattleScript_ToxicThreadWorks:
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_ToxicThreadTryPsn
+ jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_ToxicThreadDoAnim
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_ToxicThreadTryPsn
+ pause B_WAIT_TIME_SHORT
+ goto BattleScript_ToxicThreadPrintString
+BattleScript_ToxicThreadDoAnim::
+ attackanimation
+ waitanimation
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_ToxicThreadPrintString::
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ToxicThreadTryPsn::
+ setmoveeffect MOVE_EFFECT_POISON
+ seteffectprimary
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectVenomDrench:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus BS_TARGET, STATUS1_PSN_ANY, BattleScript_EffectVenomDrenchCanBeUsed
+ goto BattleScript_ButItFailed
+BattleScript_EffectVenomDrenchCanBeUsed:
+ jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_VenomDrenchDoMoveAnim
+ jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_SPATK, MIN_STAT_STAGE, BattleScript_VenomDrenchDoMoveAnim
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats
+BattleScript_VenomDrenchDoMoveAnim::
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK | BIT_SPEED, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS
+ playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_ATK, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchTryLowerSpAtk
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_VenomDrenchTryLowerSpAtk::
+ playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_SPATK, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpeed
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchTryLowerSpeed
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_VenomDrenchTryLowerSpeed::
+ playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_SPEED, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchEnd
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_VenomDrenchEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectNobleRoar:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_NobleRoarDoMoveAnim
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats
+BattleScript_NobleRoarDoMoveAnim::
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS
+ playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_ATK, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarTryLowerSpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_NobleRoarTryLowerSpAtk
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_NobleRoarTryLowerSpAtk::
+ playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_SPATK, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_NobleRoarEnd
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_NobleRoarEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectShellSmash:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef
+ jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_ShellSmashTryDef
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_ButItFailed
+BattleScript_ShellSmashTryDef::
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT
+ setstatchanger STAT_DEF, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_ShellSmashTrySpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ShellSmashTrySpDef:
+ setstatchanger STAT_SPDEF, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_ShellSmashTryAttack
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTryAttack
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ShellSmashTryAttack:
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_ATK | BIT_SPEED, STAT_CHANGE_BY_TWO
+ setstatchanger STAT_ATK, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpAtk
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ShellSmashTrySpAtk:
+ setstatchanger STAT_SPATK, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpeed
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpeed
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ShellSmashTrySpeed:
+ setstatchanger STAT_SPEED, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ShellSmashEnd:
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectLastResort:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifcantuselastresort BS_ATTACKER, BattleScript_ButItFailed
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ goto BattleScript_HitFromCritCalc
+
+BattleScript_EffectGrowth:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_GrowthDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats
+BattleScript_GrowthDoMoveAnim::
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK, 0
+ jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_GrowthAtk2
+ setstatchanger STAT_ATK, 1, FALSE
+ goto BattleScript_GrowthAtk
+BattleScript_GrowthAtk2:
+ setstatchanger STAT_ATK, 2, FALSE
+BattleScript_GrowthAtk:
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthTrySpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GrowthTrySpAtk
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_GrowthTrySpAtk::
+ jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_GrowthSpAtk2
+ setstatchanger STAT_SPATK, 1, FALSE
+ goto BattleScript_GrowthSpAtk
+BattleScript_GrowthSpAtk2:
+ setstatchanger STAT_SPATK, 2, FALSE
+BattleScript_GrowthSpAtk:
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GrowthEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_GrowthEnd:
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSoak:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ jumpifability BS_TARGET, ABILITY_MULTITYPE, BattleScript_ButItFailed
+ jumpifability BS_TARGET, ABILITY_RKS_SYSTEM, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ trysoak BattleScript_ButItFailed
+ printstring STRINGID_TARGETCHANGEDTYPE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectReflectType:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ tryreflecttype BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_REFLECTTARGETSTYPE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectElectrify:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ tryelectrify BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_TARGETELECTRIFIED
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectShiftGear:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ShiftGearDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats
+BattleScript_ShiftGearDoMoveAnim:
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPEED, 10, BattleScript_ShiftGearSpeedBy1
+ playstatchangeanimation BS_ATTACKER, BIT_SPEED | BIT_ATK, STAT_CHANGE_BY_TWO
+ setstatchanger STAT_SPEED, 2, FALSE
+ goto BattleScript_ShiftGearDoSpeed
+BattleScript_ShiftGearSpeedBy1:
+ playstatchangeanimation BS_ATTACKER, BIT_SPEED | BIT_ATK, 0
+ setstatchanger STAT_SPEED, 1, FALSE
+BattleScript_ShiftGearDoSpeed:
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearTryAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShiftGearTryAtk
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ShiftGearTryAtk:
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShiftGearEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ShiftGearEnd:
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectCoil:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoilDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoilDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ACC, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats
+BattleScript_CoilDoMoveAnim:
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_ACC, 0
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilTryDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_CoilTryDef:
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryAcc
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilTryAcc
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_CoilTryAcc:
+ setstatchanger STAT_ACC, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_CoilEnd:
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectQuiverDance:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_QuiverDanceDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_QuiverDanceDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats
+BattleScript_QuiverDanceDoMoveAnim::
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF | BIT_SPEED, 0
+ setstatchanger STAT_SPATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceTrySpDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_QuiverDanceTrySpDef::
+ setstatchanger STAT_SPDEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpeed
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceTrySpeed
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_QuiverDanceTrySpeed::
+ setstatchanger STAT_SPEED, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_QuiverDanceEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSpeedUpHit:
+ setmoveeffect MOVE_EFFECT_SPD_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
+ goto BattleScript_EffectHit
+
+BattleScript_EffectMeFirst:
+ attackcanceler
+ attackstring
+ trymefirst BattleScript_ButItFailedPpReduce
+ attackanimation
+ waitanimation
+ setbyte sB_ANIM_TURN, 0
+ setbyte sB_ANIM_TARGETS_HIT, 0
+ jumptocalledmove TRUE
+
+BattleScript_EffectAttackSpAttackUp:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AttackSpAttackUpDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats
+BattleScript_AttackSpAttackUpDoMoveAnim::
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK, 0
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpTrySpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackSpAttackUpTrySpAtk
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_AttackSpAttackUpTrySpAtk::
+ setstatchanger STAT_SPATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackSpAttackUpEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_AttackSpAttackUpEnd:
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAttackAccUp:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AttackAccUpDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ACC, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats
+BattleScript_AttackAccUpDoMoveAnim::
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0
+ setstatchanger STAT_ATK, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpTrySpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackAccUpTrySpDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_AttackAccUpTrySpDef::
+ setstatchanger STAT_ACC, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackAccUpEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_AttackAccUpEnd:
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMistyTerrain:
+BattleScript_EffectGrassyTerrain:
+BattleScript_EffectElectricTerrain:
+BattleScript_EffectPsychicTerrain:
+ attackcanceler
+ attackstring
+ ppreduce
+ setterrain BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printfromtable gTerrainStringIds
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
+ call BattleScript_TerrainSeedLoop
+ jumpifabilitypresent ABILITY_MIMICRY, BattleScript_ApplyMimicry
+ goto BattleScript_MoveEnd
+
+BattleScript_ApplyMimicry::
+ savetarget
+ setbyte gBattlerTarget, 0
+BattleScript_MimicryLoopIter:
+ copybyte sBATTLER, gBattlerTarget
+ trytoapplymimicry BS_TARGET, BattleScript_MimicryLoop_NextBattler
+ copybyte gBattlerAbility, sBATTLER
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_BATTLERTYPECHANGEDTO
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_MimicryLoop_NextBattler:
+ addbyte gBattlerTarget, 0x1
+ jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_MimicryLoopIter
+ restoretarget
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectTopsyTurvy:
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 6, BattleScript_EffectTopsyTurvyWorks
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, 6, BattleScript_EffectTopsyTurvyWorks
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPATK, 6, BattleScript_EffectTopsyTurvyWorks
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPDEF, 6, BattleScript_EffectTopsyTurvyWorks
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPEED, 6, BattleScript_EffectTopsyTurvyWorks
+ jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ACC, 6, BattleScript_EffectTopsyTurvyWorks
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_EVASION, 6, BattleScript_ButItFailed
+BattleScript_EffectTopsyTurvyWorks:
+ attackanimation
+ waitanimation
+ invertstatstages BS_TARGET
+ printstring STRINGID_TOPSYTURVYSWITCHEDSTATS
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectIonDeluge:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ orword gFieldStatuses, STATUS_FIELD_ION_DELUGE
+ attackanimation
+ waitanimation
+ printstring STRINGID_IONDELUGEON
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectQuash:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ tryquash BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_QUASHSUCCESS
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectHealPulse:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents @ stops pollen puff
+ jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ jumpifsubstituteblocks BattleScript_ButItFailed
+ tryhealpulse BS_TARGET, BattleScript_AlreadyAtFullHp
+ attackanimation
+ waitanimation
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ printstring STRINGID_PKMNREGAINEDHEALTH
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectEntrainment:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ tryentrainment BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ setlastusedability BS_TARGET
+ printstring STRINGID_PKMNACQUIREDABILITY
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSimpleBeam:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setabilitysimple BS_TARGET, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNACQUIREDSIMPLE
+ waitmessage B_WAIT_TIME_LONG
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ tryendneutralizinggas BS_TARGET
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSuckerPunch:
+ attackcanceler
+ suckerpunchcheck BattleScript_ButItFailedAtkStringPpReduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ goto BattleScript_HitFromAtkString
+
+BattleScript_EffectLuckyChant:
+ attackcanceler
+ attackstring
+ ppreduce
+ setluckychant BS_ATTACKER, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_SHIELDEDFROMCRITICALHITS
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMetalBurst:
+ attackcanceler
+ metalburstdamagecalculator BattleScript_ButItFailedAtkStringPpReduce
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc
+ bichalfword gMoveResultFlags, MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE
+ adjustdamage
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_EffectHealingWish:
+ attackcanceler
+ jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_ButItFailedAtkStringPpReduce
+ attackstring
+ ppreduce
+ attackanimation
+ waitanimation
+ instanthpdrop BS_ATTACKER
+ setatkhptozero
+ tryfaintmon BS_ATTACKER
+ openpartyscreen BS_ATTACKER, BattleScript_EffectHealingWishEnd
+ switchoutabilities BS_ATTACKER
+ waitstate
+ switchhandleorder BS_ATTACKER, 2
+ returnatktoball
+ getswitchedmondata BS_ATTACKER
+ switchindataupdate BS_ATTACKER
+ hpthresholds BS_ATTACKER
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ printstring STRINGID_SWITCHINMON
+ switchinanim BS_ATTACKER, TRUE
+ waitstate
+ setbyte cMULTISTRING_CHOOSER, 0
+ jumpifnotchosenmove MOVE_LUNAR_DANCE, BattleScript_EffectHealingWishNewMon
+ setbyte cMULTISTRING_CHOOSER, 1
+ restorepp BS_ATTACKER
+BattleScript_EffectHealingWishNewMon:
+ printfromtable gHealingWishStringIds
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_ATTACKER, B_ANIM_WISH_HEAL
+ waitanimation
+ dmgtomaxattackerhp
+ manipulatedamage DMG_CHANGE_SIGN
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ clearstatus BS_ATTACKER
+ waitstate
+ updatestatusicon BS_ATTACKER
+ waitstate
+ printstring STRINGID_HEALINGWISHHEALED
+ waitmessage B_WAIT_TIME_LONG
+ switchineffects BS_ATTACKER
+BattleScript_EffectHealingWishEnd:
+ moveendall
+ end
+
+BattleScript_EffectWorrySeed:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ tryworryseed BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNACQUIREDABILITY
+ waitmessage B_WAIT_TIME_LONG
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPowerSplit:
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ averagestats STAT_ATK
+ averagestats STAT_SPATK
+ attackanimation
+ waitanimation
+ printstring STRINGID_SHAREDITSPOWER
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectGuardSplit:
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ averagestats STAT_DEF
+ averagestats STAT_SPDEF
+ attackanimation
+ waitanimation
+ printstring STRINGID_SHAREDITSGUARD
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectHeartSwap:
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ swapstatstages STAT_ATK
+ swapstatstages STAT_DEF
+ swapstatstages STAT_SPEED
+ swapstatstages STAT_SPATK
+ swapstatstages STAT_SPDEF
+ swapstatstages STAT_EVASION
+ swapstatstages STAT_ACC
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSWITCHEDSTATCHANGES
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectPowerSwap:
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ swapstatstages STAT_ATK
+ swapstatstages STAT_SPATK
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSWITCHEDSTATCHANGES
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectGuardSwap:
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ swapstatstages STAT_DEF
+ swapstatstages STAT_SPDEF
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSWITCHEDSTATCHANGES
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectSpeedSwap:
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ swapstatstages STAT_SPEED
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSWITCHEDSTATCHANGES
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectTelekinesis:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON
+ attackstring
+ ppreduce
+ settelekinesis BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNIDENTIFIED
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectStealthRock:
+ attackcanceler
+ attackstring
+ ppreduce
+ setstealthrock BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_POINTEDSTONESFLOAT
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectStickyWeb:
+ attackcanceler
+ attackstring
+ ppreduce
+ setstickyweb BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_STICKYWEBUSED
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectGastroAcid:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setgastroacid BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSABILITYSUPPRESSED
+ waitmessage B_WAIT_TIME_LONG
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ tryendneutralizinggas BS_TARGET
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectToxicSpikes:
+ attackcanceler
+ attackstring
+ ppreduce
+ settoxicspikes BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_POISONSPIKESSCATTERED
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMagnetRise:
+ attackcanceler
+ attackstring
+ ppreduce
+ setuserstatus3 STATUS3_MAGNET_RISE, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNLEVITATEDONELECTROMAGNETISM
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectTrickRoom:
+ attackcanceler
+ attackstring
+ ppreduce
+ setroom
+ attackanimation
+ waitanimation
+ printfromtable gRoomsStringIds
+ waitmessage B_WAIT_TIME_LONG
+ savetarget
+ setbyte gBattlerTarget, 0
+BattleScript_RoomServiceLoop:
+ copybyte sBATTLER, gBattlerTarget
+ tryroomservice BS_TARGET, BattleScript_RoomServiceLoop_NextBattler
+ removeitem BS_TARGET
+BattleScript_RoomServiceLoop_NextBattler:
+ addbyte gBattlerTarget, 0x1
+ jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_RoomServiceLoop
+ restoretarget
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectWonderRoom:
+BattleScript_EffectMagicRoom:
+ attackcanceler
+ attackstring
+ ppreduce
+ setroom
+ attackanimation
+ waitanimation
+ printfromtable gRoomsStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectAquaRing:
+ attackcanceler
+ attackstring
+ ppreduce
+ setuserstatus3 STATUS3_AQUA_RING, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNSURROUNDEDWITHVEILOFWATER
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectEmbargo:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setembargo BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNCANTUSEITEMSANYMORE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectTailwind:
+ attackcanceler
+ attackstring
+ ppreduce
+ settailwind BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_TAILWINDBLEW
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectMircleEye:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setmiracleeye BattleScript_ButItFailed
+ goto BattleScript_IdentifiedFoe
+
+BattleScript_EffectGravity:
+ attackcanceler
+ attackstring
+ ppreduce
+ setgravity BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_GRAVITYINTENSIFIED
+ waitmessage B_WAIT_TIME_LONG
+ selectfirstvalidtarget
+BattleScript_GravityLoop:
+ movevaluescleanup
+ jumpifstatus3 BS_TARGET, STATUS3_ON_AIR | STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS, BattleScript_GravityLoopDrop
+ goto BattleScript_GravityLoopEnd
+BattleScript_GravityLoopDrop:
+ bringdownairbornebattler BS_TARGET
+ printstring STRINGID_GRAVITYGROUNDING
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_GravityLoopEnd:
+ moveendto MOVEEND_NEXT_TARGET
+ jumpifnexttargetvalid BattleScript_GravityLoop
+ end
+
+BattleScript_EffectRoost:
+ attackcanceler
+ attackstring
+ ppreduce
+ tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_TARGET
+ setroost
+ goto BattleScript_PresentHealTarget
+
+BattleScript_EffectCaptivate:
+ setstatchanger STAT_SPATK, 2, TRUE
+ attackcanceler
+ jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce
+ jumpifoppositegenders BattleScript_CaptivateCheckAcc
+ goto BattleScript_ButItFailedAtkStringPpReduce
+BattleScript_CaptivateCheckAcc:
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ goto BattleScript_StatDownFromAttackString
+
+BattleScript_EffectHealBlock:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects
+ sethealblock BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ printstring STRINGID_PKMNPREVENTEDFROMHEALING
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectThroatChop:
+ jumpifsubstituteblocks BattleScript_EffectHit
+ setmoveeffect MOVE_EFFECT_THROAT_CHOP | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectHitEscape:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ jumpifmovehadnoeffect BattleScript_MoveEnd
+ seteffectwithchance
+ tryfaintmon BS_TARGET
+ moveendto MOVEEND_ATTACKER_VISIBLE
+ moveendfrom MOVEEND_TARGET_VISIBLE
+ jumpifbattleend BattleScript_HitEscapeEnd
+ jumpifbyte CMP_NOT_EQUAL gBattleOutcome 0, BattleScript_HitEscapeEnd
+ jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_HitEscapeEnd
+ jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_HitEscapeEnd
+ openpartyscreen BS_ATTACKER, BattleScript_HitEscapeEnd
+ switchoutabilities BS_ATTACKER
+ waitstate
+ switchhandleorder BS_ATTACKER, 2
+ returntoball BS_ATTACKER
+ getswitchedmondata BS_ATTACKER
+ switchindataupdate BS_ATTACKER
+ hpthresholds BS_ATTACKER
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ printstring STRINGID_SWITCHINMON
+ switchinanim BS_ATTACKER, TRUE
+ waitstate
+ switchineffects BS_ATTACKER
+BattleScript_HitEscapeEnd:
+ end
+
+BattleScript_EffectPlaceholder:
+ attackcanceler
+ attackstring
+ ppreduce
+ pause 5
+ printstring STRINGID_NOTDONEYET
+ goto BattleScript_MoveEnd
BattleScript_EffectHit::
- jumpifnotmove MOVE_SURF, BattleScript_HitFromAtkCanceler
- jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_HitFromAtkCanceler
- orword gHitMarker, HITMARKER_IGNORE_UNDERWATER
- setbyte sDMG_MULTIPLIER, 2
BattleScript_HitFromAtkCanceler::
attackcanceler
BattleScript_HitFromAccCheck::
@@ -247,8 +2944,7 @@ BattleScript_HitFromAtkString::
BattleScript_HitFromCritCalc::
critcalc
damagecalc
- typecalc
- adjustnormaldamage
+ adjustdamage
BattleScript_HitFromAtkAnimation::
attackanimation
waitanimation
@@ -267,8 +2963,38 @@ BattleScript_MoveEnd::
moveendall
end
+BattleScript_EffectNaturalGift:
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed
+ jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_MAGIC_ROOM, BattleScript_ButItFailed
+ jumpifability BS_ATTACKER, ABILITY_KLUTZ, BattleScript_ButItFailed
+ jumpifstatus3 BS_ATTACKER, STATUS3_EMBARGO, BattleScript_ButItFailed
+ accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ seteffectwithchance
+ jumpifmovehadnoeffect BattleScript_EffectNaturalGiftEnd
+ removeitem BS_ATTACKER
+BattleScript_EffectNaturalGiftEnd:
+ tryfaintmon BS_TARGET
+ goto BattleScript_MoveEnd
+
BattleScript_MakeMoveMissed::
- orbyte gMoveResultFlags, MOVE_RESULT_MISSED
+ orhalfword gMoveResultFlags, MOVE_RESULT_MISSED
BattleScript_PrintMoveMissed::
attackstring
ppreduce
@@ -284,38 +3010,128 @@ BattleScript_EffectSleep::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_AlreadyAsleep
jumpifcantmakeasleep BattleScript_CantMakeAsleep
+ jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects
+ jumpifflowerveil BattleScript_FlowerVeilProtects
+ jumpifability BS_TARGET_SIDE, ABILITY_SWEET_VEIL, BattleScript_SweetVeilProtects
+ jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpifterrainaffected BS_TARGET, STATUS_FIELD_ELECTRIC_TERRAIN, BattleScript_ElectricTerrainPrevents
+ jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsafeguard BattleScript_SafeguardProtected
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_SLEEP
seteffectprimary
goto BattleScript_MoveEnd
+BattleScript_TerrainPreventsEnd2::
+ pause B_WAIT_TIME_SHORT
+ printfromtable gTerrainPreventsStringIds
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_ElectricTerrainPrevents::
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_ELECTRICTERRAINPREVENTS
+ waitmessage B_WAIT_TIME_LONG
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
+ goto BattleScript_MoveEnd
+
+BattleScript_MistyTerrainPrevents::
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_MISTYTERRAINPREVENTS
+ waitmessage B_WAIT_TIME_LONG
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
+ goto BattleScript_MoveEnd
+
+BattleScript_FlowerVeilProtectsRet::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_FLOWERVEILPROTECTED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_FlowerVeilProtects:
+ call BattleScript_FlowerVeilProtectsRet
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
+ goto BattleScript_MoveEnd
+
+BattleScript_SweetVeilProtectsRet::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_FLOWERVEILPROTECTED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_SweetVeilProtects:
+ call BattleScript_SweetVeilProtectsRet
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
+ goto BattleScript_MoveEnd
+
+BattleScript_AromaVeilProtectsRet::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_AROMAVEILPROTECTED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_AromaVeilProtects:
+ call BattleScript_AromaVeilProtectsRet
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
+ goto BattleScript_MoveEnd
+
+BattleScript_PastelVeilProtectsRet::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_PASTELVEILPROTECTED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_PastelVeilProtects:
+ call BattleScript_PastelVeilProtectsRet
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
+ goto BattleScript_MoveEnd
+
+BattleScript_LeafGuardProtectsRet::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_ITDOESNTAFFECT
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_LeafGuardProtects:
+ call BattleScript_LeafGuardProtectsRet
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
+ goto BattleScript_MoveEnd
+
BattleScript_AlreadyAsleep::
setalreadystatusedmoveattempt BS_ATTACKER
pause B_WAIT_TIME_SHORT
printstring STRINGID_PKMNALREADYASLEEP
waitmessage B_WAIT_TIME_LONG
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
goto BattleScript_MoveEnd
BattleScript_WasntAffected::
pause B_WAIT_TIME_SHORT
printstring STRINGID_PKMNWASNTAFFECTED
waitmessage B_WAIT_TIME_LONG
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
goto BattleScript_MoveEnd
BattleScript_CantMakeAsleep::
pause B_WAIT_TIME_SHORT
printfromtable gUproarAwakeStringIds
waitmessage B_WAIT_TIME_LONG
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
goto BattleScript_MoveEnd
-BattleScript_EffectPoisonHit::
+BattleScript_EffectPoisonHit:
setmoveeffect MOVE_EFFECT_POISON
goto BattleScript_EffectHit
@@ -326,8 +3142,7 @@ BattleScript_EffectAbsorb::
ppreduce
critcalc
damagecalc
- typecalc
- adjustnormaldamage
+ adjustdamage
attackanimation
waitanimation
effectivenesssound
@@ -339,12 +3154,16 @@ BattleScript_EffectAbsorb::
waitmessage B_WAIT_TIME_LONG
resultmessage
waitmessage B_WAIT_TIME_LONG
- negativedamage
- orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_AbsorbHealBlock
+ setdrainedhp
+ manipulatedamage DMG_BIG_ROOT
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE
jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_AbsorbLiquidOoze
setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB
goto BattleScript_AbsorbUpdateHp
BattleScript_AbsorbLiquidOoze::
+ copybyte gBattlerAbility, gBattlerTarget
+ call BattleScript_AbilityPopUp
manipulatedamage DMG_CHANGE_SIGN
setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB_OOZE
BattleScript_AbsorbUpdateHp::
@@ -355,6 +3174,7 @@ BattleScript_AbsorbUpdateHp::
waitmessage B_WAIT_TIME_LONG
BattleScript_AbsorbTryFainting::
tryfaintmon BS_ATTACKER
+BattleScript_AbsorbHealBlock::
tryfaintmon BS_TARGET
goto BattleScript_MoveEnd
@@ -374,7 +3194,8 @@ BattleScript_EffectExplosion::
attackcanceler
attackstring
ppreduce
- faintifabilitynotdamp
+@ Below jumps to BattleScript_DampStopsExplosion if it fails (only way it can)
+ tryexplosion
setatkhptozero
waitstate
jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop
@@ -387,8 +3208,7 @@ BattleScript_ExplosionLoop:
movevaluescleanup
critcalc
damagecalc
- typecalc
- adjustnormaldamage
+ adjustdamage
accuracycheck BattleScript_ExplosionMissed, ACC_CURR_MOVE
effectivenesssound
hitanimation BS_TARGET
@@ -403,6 +3223,7 @@ BattleScript_ExplosionLoop:
moveendto MOVEEND_NEXT_TARGET
jumpifnexttargetvalid BattleScript_ExplosionLoop
tryfaintmon BS_ATTACKER
+ moveendcase MOVEEND_CLEAR_BITS
end
BattleScript_ExplosionMissed:
effectivenesssound
@@ -413,17 +3234,31 @@ BattleScript_ExplosionMissed:
tryfaintmon BS_ATTACKER
end
+BattleScript_EffectMindBlown::
+ attackcanceler
+ attackstring
+ ppreduce
+ tryexplosion
+ dmg_1_2_attackerhp
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ waitstate
+ jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop
+ call BattleScript_PreserveMissedBitDoMoveAnim
+ goto BattleScript_ExplosionLoop
+
BattleScript_PreserveMissedBitDoMoveAnim:
- bicbyte gMoveResultFlags, MOVE_RESULT_MISSED
+ bichalfword gMoveResultFlags, MOVE_RESULT_MISSED
attackanimation
waitanimation
- orbyte gMoveResultFlags, MOVE_RESULT_MISSED
+ orhalfword gMoveResultFlags, MOVE_RESULT_MISSED
return
BattleScript_EffectDreamEater::
attackcanceler
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_DreamEaterNoEffect
+ jumpifsubstituteblocks BattleScript_DreamEaterNoEffect
jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_DreamEaterWorked
+ jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_DreamEaterWorked
BattleScript_DreamEaterNoEffect:
attackstring
ppreduce
@@ -435,8 +3270,7 @@ BattleScript_DreamEaterWorked:
ppreduce
critcalc
damagecalc
- typecalc
- adjustnormaldamage
+ adjustdamage
attackanimation
waitanimation
effectivenesssound
@@ -448,7 +3282,9 @@ BattleScript_DreamEaterWorked:
waitmessage B_WAIT_TIME_LONG
resultmessage
waitmessage B_WAIT_TIME_LONG
- negativedamage
+ jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_DreamEaterTryFaintEnd
+ setdrainedhp
+ manipulatedamage DMG_BIG_ROOT
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
@@ -465,7 +3301,7 @@ BattleScript_EffectMirrorMove::
pause B_WAIT_TIME_LONG
trymirrormove
ppreduce
- orbyte gMoveResultFlags, MOVE_RESULT_FAILED
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
printstring STRINGID_MIRRORMOVEFAILED
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
@@ -482,6 +3318,18 @@ BattleScript_EffectSpecialAttackUp::
setstatchanger STAT_SPATK, 1, FALSE
goto BattleScript_EffectStatUp
+BattleScript_EffectSpeedUp:
+ setstatchanger STAT_SPEED, 1, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectSpecialDefenseUp:
+ setstatchanger STAT_SPDEF, 1, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectAccuracyUp:
+ setstatchanger STAT_ACC, 1, FALSE
+ goto BattleScript_EffectStatUp
+
BattleScript_EffectEvasionUp::
setstatchanger STAT_EVASION, 1, FALSE
BattleScript_EffectStatUp::
@@ -489,7 +3337,7 @@ BattleScript_EffectStatUp::
BattleScript_EffectStatUpAfterAtkCanceler::
attackstring
ppreduce
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_StatUpEnd
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StatUpEnd
jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpAttackAnim
pause B_WAIT_TIME_SHORT
goto BattleScript_StatUpPrintString
@@ -507,35 +3355,45 @@ BattleScript_StatUpEnd::
BattleScript_StatUp::
playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_StatUpMsg::
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
return
-BattleScript_EffectAttackDown::
+BattleScript_EffectAttackDown:
setstatchanger STAT_ATK, 1, TRUE
goto BattleScript_EffectStatDown
-BattleScript_EffectDefenseDown::
+BattleScript_EffectDefenseDown:
setstatchanger STAT_DEF, 1, TRUE
goto BattleScript_EffectStatDown
-BattleScript_EffectSpeedDown::
+BattleScript_EffectSpeedDown:
setstatchanger STAT_SPEED, 1, TRUE
goto BattleScript_EffectStatDown
-BattleScript_EffectAccuracyDown::
+BattleScript_EffectAccuracyDown:
setstatchanger STAT_ACC, 1, TRUE
goto BattleScript_EffectStatDown
-BattleScript_EffectEvasionDown::
+BattleScript_EffectSpecialAttackDown:
+ setstatchanger STAT_SPATK, 1, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectSpecialDefenseDown:
+ setstatchanger STAT_SPDEF, 1, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectEvasionDown:
setstatchanger STAT_EVASION, 1, TRUE
-BattleScript_EffectStatDown::
+BattleScript_EffectStatDown:
attackcanceler
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailedAtkStringPpReduce
+ jumpifsubstituteblocks BattleScript_ButItFailedAtkStringPpReduce
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+BattleScript_StatDownFromAttackString:
attackstring
ppreduce
- statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_StatDownEnd
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StatDownEnd
jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_StatDownDoAnim
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StatDownEnd
pause B_WAIT_TIME_SHORT
@@ -551,6 +3409,34 @@ BattleScript_StatDownPrintString::
BattleScript_StatDownEnd::
goto BattleScript_MoveEnd
+BattleScript_MirrorArmorReflect::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ jumpifsubstituteblocks BattleScript_AbilityNoSpecificStatLoss
+BattleScript_MirrorArmorReflectStatLoss:
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorArmorReflectEnd
+ jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_MirrorArmorReflectAnim
+ goto BattleScript_MirrorArmorReflectWontFall
+BattleScript_MirrorArmorReflectAnim:
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_MirrorArmorReflectPrintString:
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_MirrorArmorReflectEnd:
+ return
+
+BattleScript_MirrorArmorReflectWontFall:
+ copybyte gBattlerTarget, gBattlerAttacker @ STRINGID_STATSWONTDECREASE uses target
+ goto BattleScript_MirrorArmorReflectPrintString
+
+@ gBattlerTarget is battler with Mirror Armor
+BattleScript_MirrorArmorReflectStickyWeb:
+ call BattleScript_AbilityPopUp
+ setattackertostickywebuser
+ jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_StickyWebOnSwitchInEnd @ Sticky web user not on field -> no stat loss
+ goto BattleScript_MirrorArmorReflectStatLoss
+
BattleScript_StatDown::
playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatDownStringIds
@@ -592,11 +3478,13 @@ BattleScript_EffectRoar::
attackcanceler
attackstring
ppreduce
+ jumpifroarfails BattleScript_ButItFailed
jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut
jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed
+BattleScript_ForceRandomSwitch::
forcerandomswitch BattleScript_ButItFailed
BattleScript_EffectMultiHit::
@@ -606,7 +3494,7 @@ BattleScript_EffectMultiHit::
ppreduce
setmultihitcounter 0
initmultihitstring
- setbyte sMULTIHIT_EFFECT, 0
+ sethword sMULTIHIT_EFFECT, 0
BattleScript_MultiHitLoop::
jumpifhasnohp BS_ATTACKER, BattleScript_MultiHitEnd
jumpifhasnohp BS_TARGET, BattleScript_MultiHitPrintStrings
@@ -614,12 +3502,11 @@ BattleScript_MultiHitLoop::
jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_MultiHitPrintStrings
BattleScript_DoMultiHit::
movevaluescleanup
- copybyte cEFFECT_CHOOSER, sMULTIHIT_EFFECT
+ copyhword sMOVE_EFFECT, sMULTIHIT_EFFECT
critcalc
damagecalc
- typecalc
jumpifmovehadnoeffect BattleScript_MultiHitNoMoreHits
- adjustnormaldamage
+ adjustdamage
attackanimation
waitanimation
effectivenesssound
@@ -629,6 +3516,7 @@ BattleScript_DoMultiHit::
datahpupdate BS_TARGET
critmessage
waitmessage B_WAIT_TIME_LONG
+ multihitresultmessage
printstring STRINGID_EMPTYSTRING3
waitmessage 1
addbyte sMULTIHIT_STRING + 4, 1
@@ -649,7 +3537,7 @@ BattleScript_MultiHitEnd::
seteffectwithchance
tryfaintmon BS_TARGET
moveendcase MOVEEND_SYNCHRONIZE_TARGET
- moveendfrom MOVEEND_IMMUNITY_ABILITIES
+ moveendfrom MOVEEND_STATUS_IMMUNITY_ABILITIES
end
BattleScript_EffectConversion::
@@ -667,6 +3555,31 @@ BattleScript_EffectFlinchHit::
setmoveeffect MOVE_EFFECT_FLINCH
goto BattleScript_EffectHit
+BattleScript_EffectFlinchStatus:
+ setmoveeffect MOVE_EFFECT_FLINCH
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ seteffectwithchance
+ argumentstatuseffect
+ tryfaintmon BS_TARGET
+ goto BattleScript_MoveEnd
+
BattleScript_EffectRestoreHp::
attackcanceler
attackstring
@@ -674,6 +3587,7 @@ BattleScript_EffectRestoreHp::
tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_ATTACKER
attackanimation
waitanimation
+BattleScript_RestoreHp:
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
@@ -686,14 +3600,18 @@ BattleScript_EffectToxic::
attackstring
ppreduce
jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
- jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned
- jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned
+ jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects
+ jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects
+ jumpifflowerveil BattleScript_FlowerVeilProtects
+ jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifsubstituteblocks BattleScript_ButItFailed
+ jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
- jumpiftype BS_TARGET, TYPE_POISON, BattleScript_NotAffected
- jumpiftype BS_TARGET, TYPE_STEEL, BattleScript_NotAffected
+ jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents
+ trypoisontype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsafeguard BattleScript_SafeguardProtected
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_TOXIC
@@ -711,6 +3629,7 @@ BattleScript_AlreadyPoisoned::
BattleScript_ImmunityProtected::
copybyte gEffectBattler, gBattlerTarget
+ call BattleScript_AbilityPopUp
setbyte cMULTISTRING_CHOOSER, B_MSG_ABILITY_PREVENTS_MOVE_STATUS
call BattleScript_PSNPrevention
goto BattleScript_MoveEnd
@@ -719,6 +3638,13 @@ BattleScript_EffectPayDay::
setmoveeffect MOVE_EFFECT_PAYDAY
goto BattleScript_EffectHit
+BattleScript_EffectAuroraVeil:
+ attackcanceler
+ attackstring
+ ppreduce
+ setauroraveil BS_ATTACKER
+ goto BattleScript_PrintReflectLightScreenSafeguardString
+
BattleScript_EffectLightScreen::
attackcanceler
attackstring
@@ -735,6 +3661,7 @@ BattleScript_EffectRest::
attackstring
ppreduce
jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_RestIsAlreadyAsleep
+ jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_RestIsAlreadyAsleep
jumpifcantmakeasleep BattleScript_RestCantSleep
trysetrest BattleScript_AlreadyAtFullHp
pause B_WAIT_TIME_SHORT
@@ -773,35 +3700,30 @@ BattleScript_KOFail::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectRazorWind::
- jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
- jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
- setbyte sTWOTURN_STRINGID, B_MSG_TURN1_RAZOR_WIND
- call BattleScriptFirstChargingTurn
- goto BattleScript_MoveEnd
-
BattleScript_TwoTurnMovesSecondTurn::
attackcanceler
setmoveeffect MOVE_EFFECT_CHARGING
setbyte sB_ANIM_TURN, 1
clearstatusfromeffect BS_ATTACKER
orword gHitMarker, HITMARKER_NO_PPDEDUCT
- jumpifnotmove MOVE_SKY_ATTACK, BattleScript_HitFromAccCheck
- setmoveeffect MOVE_EFFECT_FLINCH
+ argumenttomoveeffect
goto BattleScript_HitFromAccCheck
BattleScriptFirstChargingTurn::
attackcanceler
printstring STRINGID_EMPTYSTRING3
ppreduce
+ attackstring
+BattleScriptFirstChargingTurnAfterAttackString:
+ pause B_WAIT_TIME_LONG
+ copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID
+ printfromtable gFirstTurnOfTwoStringIds
+ waitmessage B_WAIT_TIME_LONG
attackanimation
waitanimation
orword gHitMarker, HITMARKER_CHARGING
setmoveeffect MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER
seteffectprimary
- copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID
- printfromtable gFirstTurnOfTwoStringIds
- waitmessage B_WAIT_TIME_LONG
return
BattleScript_EffectSuperFang::
@@ -810,7 +3732,7 @@ BattleScript_EffectSuperFang::
attackstring
ppreduce
typecalc
- bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
damagetohalftargethp
goto BattleScript_HitFromAtkAnimation
@@ -820,20 +3742,25 @@ BattleScript_EffectDragonRage::
attackstring
ppreduce
typecalc
- bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
setword gBattleMoveDamage, 40
- adjustsetdamage
+ adjustdamage
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectTrap::
- jumpifnotmove MOVE_WHIRLPOOL, BattleScript_DoWrapEffect
- jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_DoWrapEffect
- orword gHitMarker, HITMARKER_IGNORE_UNDERWATER
- setbyte sDMG_MULTIPLIER, 2
-BattleScript_DoWrapEffect::
setmoveeffect MOVE_EFFECT_WRAP
goto BattleScript_EffectHit
+BattleScript_EffectTripleHit::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ setmultihitcounter 3
+ initmultihitstring
+ sethword sMULTIHIT_EFFECT, 0
+ goto BattleScript_MultiHitLoop
+
BattleScript_EffectDoubleHit::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
@@ -841,32 +3768,51 @@ BattleScript_EffectDoubleHit::
ppreduce
setmultihitcounter 2
initmultihitstring
- setbyte sMULTIHIT_EFFECT, 0
+ sethword sMULTIHIT_EFFECT, 0
goto BattleScript_MultiHitLoop
BattleScript_EffectRecoilIfMiss::
attackcanceler
accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE
+.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4
+ typecalc
+ jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveMissedDoDamage
+.endif
goto BattleScript_HitFromAtkString
BattleScript_MoveMissedDoDamage::
+ jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_PrintMoveMissed
attackstring
ppreduce
pause B_WAIT_TIME_LONG
resultmessage
waitmessage B_WAIT_TIME_LONG
- jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd
+.if B_CRASH_IF_TARGET_IMMUNE < GEN_4
+ jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd
+.endif
printstring STRINGID_PKMNCRASHED
waitmessage B_WAIT_TIME_LONG
damagecalc
typecalc
- adjustnormaldamage
+ adjustdamage
+.if B_CRASH_IF_TARGET_IMMUNE == GEN_4
+ manipulatedamage DMG_RECOIL_FROM_IMMUNE
+.else
manipulatedamage DMG_RECOIL_FROM_MISS
- bicbyte gMoveResultFlags, MOVE_RESULT_MISSED
- orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+.endif
+.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4
+ bichalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE
+.else
+ bichalfword gMoveResultFlags, MOVE_RESULT_MISSED
+.endif
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
tryfaintmon BS_ATTACKER
- orbyte gMoveResultFlags, MOVE_RESULT_MISSED
+.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4
+ orhalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE
+.else
+ orhalfword gMoveResultFlags, MOVE_RESULT_MISSED
+.endif
goto BattleScript_MoveEnd
BattleScript_EffectMist::
@@ -880,7 +3826,7 @@ BattleScript_EffectMist::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectFocusEnergy::
+BattleScript_EffectFocusEnergy:
attackcanceler
attackstring
ppreduce
@@ -892,21 +3838,16 @@ BattleScript_EffectFocusEnergy::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectRecoil::
- setmoveeffect MOVE_EFFECT_RECOIL_25 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
- jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit
- incrementgamestat GAME_STAT_USED_STRUGGLE
- goto BattleScript_EffectHit
-
-BattleScript_EffectConfuse::
+BattleScript_EffectConfuse:
attackcanceler
attackstring
ppreduce
jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_AlreadyConfused
+ jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsafeguard BattleScript_SafeguardProtected
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_CONFUSION
@@ -930,6 +3871,10 @@ BattleScript_EffectDefenseUp2::
setstatchanger STAT_DEF, 2, FALSE
goto BattleScript_EffectStatUp
+BattleScript_EffectDefenseUp3:
+ setstatchanger STAT_DEF, 3, FALSE
+ goto BattleScript_EffectStatUp
+
BattleScript_EffectSpeedUp2::
setstatchanger STAT_SPEED, 2, FALSE
goto BattleScript_EffectStatUp
@@ -938,14 +3883,29 @@ BattleScript_EffectSpecialAttackUp2::
setstatchanger STAT_SPATK, 2, FALSE
goto BattleScript_EffectStatUp
+BattleScript_EffectSpecialAttackUp3::
+ setstatchanger STAT_SPATK, 3, FALSE
+ goto BattleScript_EffectStatUp
+
BattleScript_EffectSpecialDefenseUp2::
setstatchanger STAT_SPDEF, 2, FALSE
goto BattleScript_EffectStatUp
+BattleScript_EffectAccuracyUp2:
+ setstatchanger STAT_ACC, 2, FALSE
+ goto BattleScript_EffectStatUp
+
+BattleScript_EffectEvasionUp2:
+ setstatchanger STAT_EVASION, 2, FALSE
+ goto BattleScript_EffectStatUp
+
BattleScript_EffectTransform::
attackcanceler
attackstring
ppreduce
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
transformdataexecution
attackanimation
waitanimation
@@ -953,22 +3913,34 @@ BattleScript_EffectTransform::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectAttackDown2::
+BattleScript_EffectAttackDown2:
setstatchanger STAT_ATK, 2, TRUE
goto BattleScript_EffectStatDown
-BattleScript_EffectDefenseDown2::
+BattleScript_EffectDefenseDown2:
setstatchanger STAT_DEF, 2, TRUE
goto BattleScript_EffectStatDown
-BattleScript_EffectSpeedDown2::
+BattleScript_EffectSpeedDown2:
setstatchanger STAT_SPEED, 2, TRUE
goto BattleScript_EffectStatDown
-BattleScript_EffectSpecialDefenseDown2::
+BattleScript_EffectSpecialDefenseDown2:
setstatchanger STAT_SPDEF, 2, TRUE
goto BattleScript_EffectStatDown
+BattleScript_EffectSpecialAttackDown2:
+ setstatchanger STAT_SPATK, 2, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectAccuracyDown2:
+ setstatchanger STAT_ACC, 2, TRUE
+ goto BattleScript_EffectStatDown
+
+BattleScript_EffectEvasionDown2:
+ setstatchanger STAT_EVASION, 2, TRUE
+ goto BattleScript_EffectStatDown
+
BattleScript_EffectReflect::
attackcanceler
attackstring
@@ -986,14 +3958,19 @@ BattleScript_EffectPoison::
attackstring
ppreduce
jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects
+ jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects
+ jumpifflowerveil BattleScript_FlowerVeilProtects
+ jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifsubstituteblocks BattleScript_ButItFailed
jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned
jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned
- jumpiftype BS_TARGET, TYPE_POISON, BattleScript_NotAffected
- jumpiftype BS_TARGET, TYPE_STEEL, BattleScript_NotAffected
+ trypoisontype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsafeguard BattleScript_SafeguardProtected
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_POISON
@@ -1002,18 +3979,26 @@ BattleScript_EffectPoison::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectParalyze::
+BattleScript_EffectParalyze:
attackcanceler
attackstring
ppreduce
jumpifability BS_TARGET, ABILITY_LIMBER, BattleScript_LimberProtected
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects
+ jumpifflowerveil BattleScript_FlowerVeilProtects
+ jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifsubstituteblocks BattleScript_ButItFailed
typecalc
+BattleScript_BattleScript_EffectParalyzeNoTypeCalc:
jumpifmovehadnoeffect BattleScript_ButItFailed
jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed
+ tryparalyzetype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsafeguard BattleScript_SafeguardProtected
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_PARALYSIS
@@ -1022,7 +4007,7 @@ BattleScript_EffectParalyze::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_AlreadyParalyzed::
+BattleScript_AlreadyParalyzed:
setalreadystatusedmoveattempt BS_ATTACKER
pause B_WAIT_TIME_SHORT
printstring STRINGID_PKMNISALREADYPARALYZED
@@ -1055,15 +4040,87 @@ BattleScript_EffectSpecialDefenseDownHit::
setmoveeffect MOVE_EFFECT_SP_DEF_MINUS_1
goto BattleScript_EffectHit
+BattleScript_EffectSpecialDefenseDownHit2::
+ setmoveeffect MOVE_EFFECT_SP_DEF_MINUS_2
+ goto BattleScript_EffectHit
+
BattleScript_EffectAccuracyDownHit::
setmoveeffect MOVE_EFFECT_ACC_MINUS_1
goto BattleScript_EffectHit
-BattleScript_EffectSkyAttack::
+BattleScript_PowerHerbActivation:
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
+ printstring STRINGID_POWERHERB
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_ATTACKER
+ return
+
+BattleScript_EffectTwoTurnsAttack::
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
- setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SKY_ATTACK
+ jumpifmove MOVE_SKY_ATTACK, BattleScript_EffectTwoTurnsAttackSkyAttack
+ jumpifmove MOVE_RAZOR_WIND, BattleScript_EffectTwoTurnsAttackRazorWind
+ jumpifmove MOVE_ICE_BURN, BattleScript_EffectTwoTurnsAttackIceBurn
+ jumpifmove MOVE_FREEZE_SHOCK, BattleScript_EffectTwoTurnsAttackFreezeShock
+ setbyte sTWOTURN_STRINGID, B_MSG_TURN1_RAZOR_WIND
+BattleScript_EffectTwoTurnsAttackContinue:
call BattleScriptFirstChargingTurn
+ jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd
+ call BattleScript_PowerHerbActivation
+ goto BattleScript_TwoTurnMovesSecondTurn
+BattleScript_EffectTwoTurnsAttackSkyAttack:
+ setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SKY_ATTACK
+ goto BattleScript_EffectTwoTurnsAttackContinue
+BattleScript_EffectTwoTurnsAttackRazorWind:
+ setbyte sTWOTURN_STRINGID, B_MSG_TURN1_RAZOR_WIND
+ goto BattleScript_EffectTwoTurnsAttackContinue
+BattleScript_EffectTwoTurnsAttackIceBurn:
+ setbyte sTWOTURN_STRINGID, B_MSG_TURN1_RAZOR_WIND
+ goto BattleScript_EffectTwoTurnsAttackContinue
+BattleScript_EffectTwoTurnsAttackFreezeShock:
+ setbyte sTWOTURN_STRINGID, B_MSG_TURN1_FREEZE_SHOCK
+ goto BattleScript_EffectTwoTurnsAttackContinue
+
+BattleScript_EffectGeomancy:
+ jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_GeomancySecondTurn
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_GeomancySecondTurn
+ setbyte sTWOTURN_STRINGID, B_MSG_TURN1_GEOMANCY
+ call BattleScriptFirstChargingTurn
+ jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd
+ call BattleScript_PowerHerbActivation
+BattleScript_GeomancySecondTurn:
+ attackcanceler
+ setmoveeffect MOVE_EFFECT_CHARGING
+ setbyte sB_ANIM_TURN, 1
+ clearstatusfromeffect BS_ATTACKER
+ orword gHitMarker, HITMARKER_NO_PPDEDUCT
+ attackstring
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_GeomancyDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_GeomancyDoMoveAnim
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats
+BattleScript_GeomancyDoMoveAnim::
+ attackanimation
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF | BIT_SPEED, 0
+ setstatchanger STAT_SPATK, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyTrySpDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_GeomancyTrySpDef::
+ setstatchanger STAT_SPDEF, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpeed
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyTrySpeed
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_GeomancyTrySpeed::
+ setstatchanger STAT_SPEED, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_GeomancyEnd::
goto BattleScript_MoveEnd
BattleScript_EffectConfuseHit::
@@ -1073,7 +4130,7 @@ BattleScript_EffectConfuseHit::
BattleScript_EffectTwineedle::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
- setbyte sMULTIHIT_EFFECT, MOVE_EFFECT_POISON
+ sethword sMULTIHIT_EFFECT, MOVE_EFFECT_POISON
attackstring
ppreduce
setmultihitcounter 2
@@ -1133,7 +4190,7 @@ BattleScript_EffectMimic::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
mimicattackcopy BattleScript_ButItFailed
attackanimation
@@ -1157,7 +4214,7 @@ BattleScript_EffectLeechSeed::
attackstring
pause B_WAIT_TIME_SHORT
ppreduce
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
accuracycheck BattleScript_DoLeechSeed, ACC_CURR_MOVE
BattleScript_DoLeechSeed::
setseeded
@@ -1167,21 +4224,39 @@ BattleScript_DoLeechSeed::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectSplash::
+BattleScript_EffectDoNothing::
attackcanceler
attackstring
ppreduce
+ jumpifmove MOVE_HOLD_HANDS, BattleScript_EffectHoldHands
attackanimation
waitanimation
+ jumpifmove MOVE_CELEBRATE, BattleScript_EffectCelebrate
+ jumpifmove MOVE_HAPPY_HOUR, BattleScript_EffectHappyHour
incrementgamestat GAME_STAT_USED_SPLASH
printstring STRINGID_BUTNOTHINGHAPPENED
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
+BattleScript_EffectHoldHands:
+ jumpifsideaffecting BS_TARGET, SIDE_STATUS_CRAFTY_SHIELD, BattleScript_ButItFailed
+ jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_ButItFailed
+ attackanimation
+ waitanimation
+ goto BattleScript_MoveEnd
+BattleScript_EffectCelebrate:
+ printstring STRINGID_CELEBRATEMESSAGE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+BattleScript_EffectHappyHour:
+ setmoveeffect MOVE_EFFECT_HAPPY_HOUR
+ seteffectprimary
+ goto BattleScript_MoveEnd
BattleScript_EffectDisable::
attackcanceler
attackstring
ppreduce
+ jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
disablelastusedattack BattleScript_ButItFailed
attackanimation
@@ -1196,9 +4271,9 @@ BattleScript_EffectLevelDamage::
attackstring
ppreduce
typecalc
- bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
dmgtolevel
- adjustsetdamage
+ adjustdamage
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectPsywave::
@@ -1207,9 +4282,9 @@ BattleScript_EffectPsywave::
attackstring
ppreduce
typecalc
- bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
psywavedamageeffect
- adjustsetdamage
+ adjustdamage
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectCounter::
@@ -1218,8 +4293,9 @@ BattleScript_EffectCounter::
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
- typecalc2
- adjustsetdamage
+ typecalc
+ bichalfword gMoveResultFlags, MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE
+ adjustdamage
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectEncore::
@@ -1227,6 +4303,7 @@ BattleScript_EffectEncore::
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
+ jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects
trysetencore BattleScript_ButItFailed
attackanimation
waitanimation
@@ -1254,6 +4331,7 @@ BattleScript_EffectPainSplit::
BattleScript_EffectSnore::
attackcanceler
+ jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_SnoreIsAsleep
jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SnoreIsAsleep
attackstring
ppreduce
@@ -1285,7 +4363,7 @@ BattleScript_EffectLockOn::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
setalwayshitflag
attackanimation
@@ -1298,7 +4376,6 @@ BattleScript_EffectSketch::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
copymovepermanently BattleScript_ButItFailed
attackanimation
waitanimation
@@ -1308,6 +4385,7 @@ BattleScript_EffectSketch::
BattleScript_EffectSleepTalk::
attackcanceler
+ jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_SleepTalkIsAsleep
jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SleepTalkIsAsleep
attackstring
ppreduce
@@ -1340,9 +4418,32 @@ BattleScript_EffectDestinyBond::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectFlail::
- remaininghptopower
- goto BattleScript_EffectHit
+BattleScript_EffectEerieSpell::
+ attackcanceler
+ attackstring
+ ppreduce
+ accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_TARGET
+ eeriespellppreduce BattleScript_MoveEnd
+ printstring STRINGID_PKMNREDUCEDPP
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
BattleScript_EffectSpite::
attackcanceler
@@ -1394,13 +4495,18 @@ BattleScript_TripleKickLoop::
BattleScript_DoTripleKickAttack::
accuracycheck BattleScript_TripleKickNoMoreHits, ACC_CURR_MOVE
movevaluescleanup
+ jumpifmove MOVE_SURGING_STRIKES, EffectTripleKick_DoDmgCalcs @ no power boost each hit
+ jumpifmove MOVE_TRIPLE_AXEL, EffectTripleKick_TripleAxelBoost @ triple axel gets +20 power
+ addbyte sTRIPLE_KICK_POWER, 10 @ triple kick gets +10 power
+ goto EffectTripleKick_DoDmgCalcs
+EffectTripleKick_TripleAxelBoost:
+ addbyte sTRIPLE_KICK_POWER, 20
+EffectTripleKick_DoDmgCalcs:
addbyte sTRIPLE_KICK_POWER, 10
addbyte sMULTIHIT_STRING + 4, 1
- copyhword gDynamicBasePower, sTRIPLE_KICK_POWER
critcalc
damagecalc
- typecalc
- adjustnormaldamage
+ adjustdamage
jumpifmovehadnoeffect BattleScript_TripleKickNoMoreHits
attackanimation
waitanimation
@@ -1420,12 +4526,12 @@ BattleScript_DoTripleKickAttack::
BattleScript_TripleKickNoMoreHits::
pause B_WAIT_TIME_SHORT
jumpifbyte CMP_EQUAL, sMULTIHIT_STRING + 4, 0, BattleScript_TripleKickPrintStrings
- bicbyte gMoveResultFlags, MOVE_RESULT_MISSED
+ bichalfword gMoveResultFlags, MOVE_RESULT_MISSED
BattleScript_TripleKickPrintStrings::
resultmessage
waitmessage B_WAIT_TIME_LONG
jumpifbyte CMP_EQUAL, sMULTIHIT_STRING + 4, 0, BattleScript_TripleKickEnd
- jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_TripleKickEnd
+ jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_TripleKickEnd
copyarray gBattleTextBuff1, sMULTIHIT_STRING, 6
printstring STRINGID_HITXTIMES
waitmessage B_WAIT_TIME_LONG
@@ -1439,13 +4545,20 @@ BattleScript_EffectThief::
setmoveeffect MOVE_EFFECT_STEAL_ITEM
goto BattleScript_EffectHit
+BattleScript_EffectHitPreventEscape:
+ setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE
+ goto BattleScript_EffectHit
+
BattleScript_EffectMeanLook::
attackcanceler
attackstring
ppreduce
- accuracycheck BattleScript_ButItFailed, NO_ACC_CALC
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_ButItFailed
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
+.if B_GHOSTS_ESCAPE >= GEN_6
+ jumpiftype BS_TARGET, TYPE_GHOST, BattleScript_ButItFailed
+.endif
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE
@@ -1458,9 +4571,10 @@ BattleScript_EffectNightmare::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
jumpifstatus2 BS_TARGET, STATUS2_NIGHTMARE, BattleScript_ButItFailed
jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_NightmareWorked
+ jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_NightmareWorked
goto BattleScript_ButItFailed
BattleScript_NightmareWorked::
attackanimation
@@ -1474,11 +4588,15 @@ BattleScript_NightmareWorked::
BattleScript_EffectMinimize::
attackcanceler
setminimize
+.if B_MINIMIZE_EVASION >= GEN_5
+ setstatchanger STAT_EVASION, 2, FALSE
+.else
setstatchanger STAT_EVASION, 1, FALSE
+.endif
goto BattleScript_EffectStatUpAfterAtkCanceler
BattleScript_EffectCurse::
- jumpiftype2 BS_ATTACKER, TYPE_GHOST, BattleScript_GhostCurse
+ jumpiftype BS_ATTACKER, TYPE_GHOST, BattleScript_GhostCurse
attackcanceler
attackstring
ppreduce
@@ -1491,17 +4609,17 @@ BattleScript_CurseTrySpeed::
attackanimation
waitanimation
setstatchanger STAT_SPEED, 1, TRUE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CurseTryAttack
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryAttack
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_CurseTryAttack::
setstatchanger STAT_ATK, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CurseTryDefense
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryDefense
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_CurseTryDefense::
setstatchanger STAT_DEF, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CurseEnd
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseEnd
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_CurseEnd::
@@ -1513,7 +4631,6 @@ BattleScript_DoGhostCurse::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
cursetarget BattleScript_ButItFailed
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
@@ -1527,9 +4644,15 @@ BattleScript_DoGhostCurse::
tryfaintmon BS_ATTACKER
goto BattleScript_MoveEnd
+BattleScript_EffectMatBlock::
+ attackcanceler
+ jumpifnotfirstturn BattleScript_ButItFailedAtkStringPpReduce
+ goto BattleScript_ProtectLikeAtkString
+
BattleScript_EffectProtect::
BattleScript_EffectEndure::
attackcanceler
+BattleScript_ProtectLikeAtkString:
attackstring
ppreduce
setprotectlike
@@ -1550,12 +4673,14 @@ BattleScript_EffectSpikes::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectForesight::
+BattleScript_EffectForesight:
attackcanceler
- accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
+ accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
+ jumpifstatus2 BS_TARGET, STATUS2_FORESIGHT, BattleScript_ButItFailed
setforesight
+BattleScript_IdentifiedFoe:
attackanimation
waitanimation
printstring STRINGID_PKMNIDENTIFIED
@@ -1571,23 +4696,33 @@ BattleScript_EffectPerishSong::
waitanimation
printstring STRINGID_FAINTINTHREE
waitmessage B_WAIT_TIME_LONG
- setbyte sBATTLER, 0
+ setbyte gBattlerTarget, 0
BattleScript_PerishSongLoop::
- jumpifability BS_SCRIPTING, ABILITY_SOUNDPROOF, BattleScript_PerishSongNotAffected
+ jumpifability BS_TARGET, ABILITY_SOUNDPROOF, BattleScript_PerishSongBlocked
+ jumpifpranksterblocked BS_TARGET, BattleScript_PerishSongNotAffected
BattleScript_PerishSongLoopIncrement::
- addbyte sBATTLER, 1
- jumpifbytenotequal sBATTLER, gBattlersCount, BattleScript_PerishSongLoop
+ addbyte gBattlerTarget, 1
+ jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_PerishSongLoop
goto BattleScript_MoveEnd
-BattleScript_PerishSongNotAffected::
+BattleScript_PerishSongBlocked::
+ copybyte sBATTLER, gBattlerTarget
printstring STRINGID_PKMNSXBLOCKSY2
waitmessage B_WAIT_TIME_LONG
goto BattleScript_PerishSongLoopIncrement
+BattleScript_PerishSongNotAffected:
+ printstring STRINGID_ITDOESNTAFFECT
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_PerishSongLoopIncrement
+
BattleScript_EffectSandstorm::
attackcanceler
attackstring
ppreduce
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn
setsandstorm
goto BattleScript_MoveWeatherChange
@@ -1599,13 +4734,13 @@ BattleScript_EffectRollout::
BattleScript_RolloutCheckAccuracy::
accuracycheck BattleScript_RolloutHit, ACC_CURR_MOVE
BattleScript_RolloutHit::
- typecalc2
- rolloutdamagecalculation
+ typecalc
+ handlerollout
goto BattleScript_HitFromCritCalc
BattleScript_EffectSwagger::
attackcanceler
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed
+ jumpifsubstituteblocks BattleScript_MakeMoveMissed
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
@@ -1613,52 +4748,70 @@ BattleScript_EffectSwagger::
attackanimation
waitanimation
setstatchanger STAT_ATK, 2, FALSE
- statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_SwaggerTryConfuse
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_SwaggerTryConfuse
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_SwaggerTryConfuse
setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
-BattleScript_SwaggerTryConfuse::
+BattleScript_SwaggerTryConfuse:
jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsafeguard BattleScript_SafeguardProtected
setmoveeffect MOVE_EFFECT_CONFUSION
seteffectprimary
goto BattleScript_MoveEnd
-BattleScript_EffectFuryCutter::
+BattleScript_EffectFuryCutter:
attackcanceler
attackstring
ppreduce
accuracycheck BattleScript_FuryCutterHit, ACC_CURR_MOVE
-BattleScript_FuryCutterHit::
- furycuttercalc
+BattleScript_FuryCutterHit:
+ handlefurycutter
critcalc
damagecalc
- typecalc
jumpifmovehadnoeffect BattleScript_FuryCutterHit
- adjustnormaldamage
+ adjustdamage
goto BattleScript_HitFromAtkAnimation
+BattleScript_TryDestinyKnotTarget:
+ jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet
+ infatuatewithbattler BS_TARGET, BS_ATTACKER
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+ status2animation BS_TARGET, STATUS2_INFATUATION
+ waitanimation
+ printstring STRINGID_DESTINYKNOTACTIVATES
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_TryDestinyKnotTargetRet:
+ return
+
+BattleScript_TryDestinyKnotAttacker:
+ jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotAttackerRet
+ infatuatewithbattler BS_ATTACKER, BS_TARGET
+ playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+ status2animation BS_ATTACKER, STATUS2_INFATUATION
+ waitanimation
+ printstring STRINGID_DESTINYKNOTACTIVATES
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_TryDestinyKnotAttackerRet:
+ return
+
BattleScript_EffectAttract::
attackcanceler
attackstring
ppreduce
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects
tryinfatuating BattleScript_ButItFailed
attackanimation
waitanimation
printstring STRINGID_PKMNFELLINLOVE
waitmessage B_WAIT_TIME_LONG
+ call BattleScript_TryDestinyKnotAttacker
goto BattleScript_MoveEnd
-BattleScript_EffectReturn::
-BattleScript_EffectFrustration::
- attackcanceler
- accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
- friendshiptodamagecalculation
- goto BattleScript_HitFromAtkString
-
BattleScript_EffectPresent::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
@@ -1674,20 +4827,18 @@ BattleScript_EffectSafeguard::
setsafeguard
goto BattleScript_PrintReflectLightScreenSafeguardString
-BattleScript_EffectThawHit::
- setmoveeffect MOVE_EFFECT_BURN
- goto BattleScript_EffectHit
-
BattleScript_EffectMagnitude::
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_EffectMagnitudeTarget
attackcanceler
attackstring
ppreduce
- selectfirstvalidtarget
magnitudedamagecalculation
pause B_WAIT_TIME_SHORT
printstring STRINGID_MAGNITUDESTRENGTH
waitmessage B_WAIT_TIME_LONG
- goto BattleScript_HitsAllWithUndergroundBonusLoop
+BattleScript_EffectMagnitudeTarget:
+ accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
+ goto BattleScript_HitFromCritCalc
BattleScript_EffectBatonPass::
attackcanceler
@@ -1705,6 +4856,9 @@ BattleScript_EffectBatonPass::
getswitchedmondata BS_ATTACKER
switchindataupdate BS_ATTACKER
hpthresholds BS_ATTACKER
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
printstring STRINGID_SWITCHINMON
switchinanim BS_ATTACKER, TRUE
waitstate
@@ -1712,8 +4866,43 @@ BattleScript_EffectBatonPass::
goto BattleScript_MoveEnd
BattleScript_EffectRapidSpin::
+.if B_SPEED_BUFFING_RAPID_SPIN == GEN_8
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd
+ setmoveeffect MOVE_EFFECT_RAPIDSPIN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ seteffectwithchance
+ setstatchanger STAT_SPEED, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectRapidSpinEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectRapidSpinEnd
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectRapidSpinEnd::
+ tryfaintmon BS_TARGET
+ moveendall
+ end
+.else
setmoveeffect MOVE_EFFECT_RAPIDSPIN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
+.endif
BattleScript_EffectSonicboom::
attackcanceler
@@ -1721,28 +4910,28 @@ BattleScript_EffectSonicboom::
attackstring
ppreduce
typecalc
- bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
setword gBattleMoveDamage, 20
- adjustsetdamage
+ adjustdamage
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectMorningSun::
BattleScript_EffectSynthesis::
BattleScript_EffectMoonlight::
+BattleScript_EffectShoreUp::
attackcanceler
attackstring
ppreduce
recoverbasedonsunlight BattleScript_AlreadyAtFullHp
goto BattleScript_PresentHealTarget
-BattleScript_EffectHiddenPower::
- hiddenpowercalc
- goto BattleScript_EffectHit
-
BattleScript_EffectRainDance::
attackcanceler
attackstring
ppreduce
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn
setrain
BattleScript_MoveWeatherChange::
attackanimation
@@ -1756,9 +4945,80 @@ BattleScript_EffectSunnyDay::
attackcanceler
attackstring
ppreduce
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn
setsunny
goto BattleScript_MoveWeatherChange
+BattleScript_ExtremelyHarshSunlightWasNotLessened:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_ExtremelyHarshSunlightWasNotLessenedRet:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_NoReliefFromHeavyRain:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_NORELIEFROMHEAVYRAIN
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_NoReliefFromHeavyRainEnd3:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_NORELIEFROMHEAVYRAIN
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_NoReliefFromHeavyRainRet:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_NORELIEFROMHEAVYRAIN
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_MysteriousAirCurrentBlowsOn:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_MysteriousAirCurrentBlowsOnEnd3:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_MysteriousAirCurrentBlowsOnRet:
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_BlockedByPrimalWeatherEnd3::
+ call BattleScript_AbilityPopUp
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainEnd3
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnEnd3
+ end3
+
+BattleScript_BlockedByPrimalWeatherRet::
+ call BattleScript_AbilityPopUp
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedRet
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainRet
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnRet
+ return
+
BattleScript_EffectDefenseUpHit::
setmoveeffect MOVE_EFFECT_DEF_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
goto BattleScript_EffectHit
@@ -1802,8 +5062,9 @@ BattleScript_EffectMirrorCoat::
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
- typecalc2
- adjustsetdamage
+ typecalc
+ bichalfword gMoveResultFlags, MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE
+ adjustdamage
goto BattleScript_HitFromAtkAnimation
BattleScript_EffectSkullBash::
@@ -1812,69 +5073,27 @@ BattleScript_EffectSkullBash::
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SKULL_BASH
call BattleScriptFirstChargingTurn
setstatchanger STAT_DEF, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_SkullBashEnd
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_SkullBashEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_SkullBashEnd
setgraphicalstatchangevalues
playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_SkullBashEnd::
- goto BattleScript_MoveEnd
+ jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd
+ call BattleScript_PowerHerbActivation
+ goto BattleScript_TwoTurnMovesSecondTurn
-BattleScript_EffectTwister::
- jumpifnostatus3 BS_TARGET, STATUS3_ON_AIR, BattleScript_FlinchEffect
- orword gHitMarker, HITMARKER_IGNORE_ON_AIR
- setbyte sDMG_MULTIPLIER, 2
-BattleScript_FlinchEffect::
+BattleScript_EffectTwister:
+BattleScript_FlinchEffect:
+BattleScript_EffectStomp:
setmoveeffect MOVE_EFFECT_FLINCH
goto BattleScript_EffectHit
-BattleScript_EffectEarthquake::
- attackcanceler
- attackstring
- ppreduce
- selectfirstvalidtarget
-BattleScript_HitsAllWithUndergroundBonusLoop::
- movevaluescleanup
- jumpifnostatus3 BS_TARGET, STATUS3_UNDERGROUND, BattleScript_HitsAllNoUndergroundBonus
- orword gHitMarker, HITMARKER_IGNORE_UNDERGROUND
- setbyte sDMG_MULTIPLIER, 2
- goto BattleScript_DoHitAllWithUndergroundBonus
-BattleScript_HitsAllNoUndergroundBonus::
- bicword gHitMarker, HITMARKER_IGNORE_UNDERGROUND
- setbyte sDMG_MULTIPLIER, 1
-BattleScript_DoHitAllWithUndergroundBonus::
- accuracycheck BattleScript_HitAllWithUndergroundBonusMissed, ACC_CURR_MOVE
- critcalc
- damagecalc
- typecalc
- adjustnormaldamage
- attackanimation
- waitanimation
- effectivenesssound
- hitanimation BS_TARGET
- waitstate
- healthbarupdate BS_TARGET
- datahpupdate BS_TARGET
- critmessage
- waitmessage B_WAIT_TIME_LONG
- resultmessage
- waitmessage B_WAIT_TIME_LONG
- printstring STRINGID_EMPTYSTRING3
- waitmessage 1
- tryfaintmon BS_TARGET
- moveendto MOVEEND_NEXT_TARGET
- jumpifnexttargetvalid BattleScript_HitsAllWithUndergroundBonusLoop
- end
-BattleScript_HitAllWithUndergroundBonusMissed::
- pause B_WAIT_TIME_SHORT
- typecalc
- effectivenesssound
- resultmessage
- waitmessage B_WAIT_TIME_LONG
- moveendto MOVEEND_NEXT_TARGET
- jumpifnexttargetvalid BattleScript_HitsAllWithUndergroundBonusLoop
- end
+BattleScript_EffectBulldoze:
+ setmoveeffect MOVE_EFFECT_SPD_MINUS_1
+BattleScript_EffectEarthquake:
+ goto BattleScript_EffectHit
BattleScript_EffectFutureSight::
attackcanceler
@@ -1888,26 +5107,18 @@ BattleScript_EffectFutureSight::
goto BattleScript_MoveEnd
BattleScript_EffectGust::
- jumpifnostatus3 BS_TARGET, STATUS3_ON_AIR, BattleScript_EffectHit
- orword gHitMarker, HITMARKER_IGNORE_ON_AIR
- setbyte sDMG_MULTIPLIER, 2
goto BattleScript_EffectHit
-BattleScript_EffectStomp::
- jumpifnostatus3 BS_TARGET, STATUS3_MINIMIZED, BattleScript_FlinchEffect
- setbyte sDMG_MULTIPLIER, 2
- goto BattleScript_FlinchEffect
-
BattleScript_EffectSolarBeam::
- jumpifabilitypresent ABILITY_CLOUD_NINE, BattleScript_SolarBeamDecideTurn
- jumpifabilitypresent ABILITY_AIR_LOCK, BattleScript_SolarBeamDecideTurn
- jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN, BattleScript_SolarBeamOnFirstTurn
+ jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_SolarBeamOnFirstTurn
BattleScript_SolarBeamDecideTurn::
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn
jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_SOLAR_BEAM
call BattleScriptFirstChargingTurn
- goto BattleScript_MoveEnd
+ jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd
+ call BattleScript_PowerHerbActivation
+ goto BattleScript_TwoTurnMovesSecondTurn
BattleScript_SolarBeamOnFirstTurn::
orword gHitMarker, HITMARKER_CHARGING
setmoveeffect MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER
@@ -1915,19 +5126,22 @@ BattleScript_SolarBeamOnFirstTurn::
ppreduce
goto BattleScript_TwoTurnMovesSecondTurn
-BattleScript_EffectThunder::
+BattleScript_EffectThunder:
setmoveeffect MOVE_EFFECT_PARALYSIS
- orword gHitMarker, HITMARKER_IGNORE_ON_AIR
goto BattleScript_EffectHit
-BattleScript_EffectTeleport::
+BattleScript_EffectHurricane:
+ setmoveeffect MOVE_EFFECT_CONFUSION
+ goto BattleScript_EffectHit
+
+BattleScript_EffectTeleport:
attackcanceler
attackstring
ppreduce
jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_ButItFailed
getifcantrunfrombattle BS_ATTACKER
- jumpifbyte CMP_EQUAL, gBattleCommunication, 1, BattleScript_ButItFailed
- jumpifbyte CMP_EQUAL, gBattleCommunication, 2, BattleScript_PrintAbilityMadeIneffective
+ jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FORBIDDEN, BattleScript_ButItFailed
+ jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FAILURE, BattleScript_PrintAbilityMadeIneffective
attackanimation
waitanimation
printstring STRINGID_PKMNFLEDFROMBATTLE
@@ -1947,10 +5161,10 @@ BattleScript_BeatUpLoop::
trydobeatup BattleScript_BeatUpEnd, BattleScript_ButItFailed
printstring STRINGID_PKMNATTACK
critcalc
- jumpifbyte CMP_NOT_EQUAL, gCritMultiplier, 2, BattleScript_BeatUpAttack
+ jumpifbyte CMP_NOT_EQUAL, gIsCriticalHit, TRUE, BattleScript_BeatUpAttack
manipulatedamage DMG_DOUBLED
BattleScript_BeatUpAttack::
- adjustnormaldamage
+ adjustdamage
attackanimation
waitanimation
effectivenesssound
@@ -1974,32 +5188,33 @@ BattleScript_EffectSemiInvulnerable::
jumpifmove MOVE_FLY, BattleScript_FirstTurnFly
jumpifmove MOVE_DIVE, BattleScript_FirstTurnDive
jumpifmove MOVE_BOUNCE, BattleScript_FirstTurnBounce
+ jumpifmove MOVE_PHANTOM_FORCE, BattleScript_FirstTurnPhantomForce
+ jumpifmove MOVE_SHADOW_FORCE, BattleScript_FirstTurnPhantomForce
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_DIG
goto BattleScript_FirstTurnSemiInvulnerable
-
BattleScript_FirstTurnBounce::
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_BOUNCE
goto BattleScript_FirstTurnSemiInvulnerable
-
BattleScript_FirstTurnDive::
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_DIVE
goto BattleScript_FirstTurnSemiInvulnerable
-
+BattleScript_FirstTurnPhantomForce:
+ setbyte sTWOTURN_STRINGID, B_MSG_TURN1_PHANTOM_FORCE
+ goto BattleScript_FirstTurnSemiInvulnerable
BattleScript_FirstTurnFly::
setbyte sTWOTURN_STRINGID, B_MSG_TURN1_FLY
BattleScript_FirstTurnSemiInvulnerable::
call BattleScriptFirstChargingTurn
setsemiinvulnerablebit
- goto BattleScript_MoveEnd
-
+ jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd
+ call BattleScript_PowerHerbActivation
BattleScript_SecondTurnSemiInvulnerable::
attackcanceler
setmoveeffect MOVE_EFFECT_CHARGING
setbyte sB_ANIM_TURN, 1
clearstatusfromeffect BS_ATTACKER
orword gHitMarker, HITMARKER_NO_PPDEDUCT
- jumpifnotmove MOVE_BOUNCE, BattleScript_SemiInvulnerableTryHit
- setmoveeffect MOVE_EFFECT_PARALYSIS
+ argumenttomoveeffect
BattleScript_SemiInvulnerableTryHit::
accuracycheck BattleScript_SemiInvulnerableMiss, ACC_CURR_MOVE
clearsemiinvulnerablebit
@@ -2015,7 +5230,7 @@ BattleScript_EffectDefenseCurl::
ppreduce
setdefensecurlbit
setstatchanger STAT_DEF, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_DefenseCurlDoStatUpAnim
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_DefenseCurlDoStatUpAnim
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpPrintString
attackanimation
waitanimation
@@ -2046,7 +5261,7 @@ BattleScript_AlreadyAtFullHp::
BattleScript_EffectFakeOut::
attackcanceler
jumpifnotfirstturn BattleScript_ButItFailedAtkStringPpReduce
- setmoveeffect MOVE_EFFECT_FLINCH | MOVE_EFFECT_CERTAIN
+ setmoveeffect MOVE_EFFECT_FLINCH
goto BattleScript_EffectHit
BattleScript_ButItFailedAtkStringPpReduce::
@@ -2055,14 +5270,23 @@ BattleScript_ButItFailedPpReduce::
ppreduce
BattleScript_ButItFailed::
pause B_WAIT_TIME_SHORT
- orbyte gMoveResultFlags, MOVE_RESULT_FAILED
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
resultmessage
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_NotAffected::
pause B_WAIT_TIME_SHORT
- orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
+ orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_NotAffectedAbilityPopUp::
+ copybyte gBattlerAbility, gBattlerTarget
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
resultmessage
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
@@ -2075,18 +5299,36 @@ BattleScript_EffectUproar::
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_UproarHit
ppreduce
BattleScript_UproarHit::
- nop
goto BattleScript_HitFromCritCalc
BattleScript_EffectStockpile::
attackcanceler
attackstring
ppreduce
- stockpile
+ stockpile 0
attackanimation
waitanimation
printfromtable gStockpileUsedStringIds
waitmessage B_WAIT_TIME_LONG
+ jumpifmovehadnoeffect BattleScript_EffectStockpileEnd
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_EffectStockpileDef
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_EffectStockpileEnd
+BattleScript_EffectStockpileDef:
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, 0
+ setstatchanger STAT_DEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectStockpileSpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectStockpileSpDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectStockpileSpDef::
+ setstatchanger STAT_SPDEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectStockpileEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectStockpileEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectStockpileEnd:
+ stockpile 1
goto BattleScript_MoveEnd
BattleScript_EffectSpitUp::
@@ -2095,9 +5337,10 @@ BattleScript_EffectSpitUp::
attackstring
ppreduce
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ setbyte gIsCriticalHit, FALSE
+ damagecalc
+ adjustdamage
stockpiletobasedamage BattleScript_SpitUpFail
- typecalc
- adjustsetdamage
goto BattleScript_HitFromAtkAnimation
BattleScript_SpitUpFail::
pause B_WAIT_TIME_SHORT
@@ -2131,6 +5374,9 @@ BattleScript_EffectHail::
attackcanceler
attackstring
ppreduce
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn
sethail
goto BattleScript_MoveWeatherChange
@@ -2139,6 +5385,7 @@ BattleScript_EffectTorment::
attackstring
ppreduce
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
+ jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects
settorment BattleScript_ButItFailed
attackanimation
waitanimation
@@ -2148,7 +5395,7 @@ BattleScript_EffectTorment::
BattleScript_EffectFlatter::
attackcanceler
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed
+ jumpifsubstituteblocks BattleScript_MakeMoveMissed
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
@@ -2156,7 +5403,7 @@ BattleScript_EffectFlatter::
attackanimation
waitanimation
setstatchanger STAT_SPATK, 1, FALSE
- statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_FlatterTryConfuse
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_FlatterTryConfuse
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_FlatterTryConfuse
setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
@@ -2164,7 +5411,7 @@ BattleScript_EffectFlatter::
waitmessage B_WAIT_TIME_LONG
BattleScript_FlatterTryConfuse::
jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsafeguard BattleScript_SafeguardProtected
setmoveeffect MOVE_EFFECT_CONFUSION
seteffectprimary
goto BattleScript_MoveEnd
@@ -2173,13 +5420,19 @@ BattleScript_EffectWillOWisp::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
jumpifstatus BS_TARGET, STATUS1_BURN, BattleScript_AlreadyBurned
jumpiftype BS_TARGET, TYPE_FIRE, BattleScript_NotAffected
jumpifability BS_TARGET, ABILITY_WATER_VEIL, BattleScript_WaterVeilPrevents
+ jumpifability BS_TARGET, ABILITY_WATER_BUBBLE, BattleScript_WaterVeilPrevents
+ jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects
+ jumpifflowerveil BattleScript_FlowerVeilProtects
+ jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
+ jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifsafeguard BattleScript_SafeguardProtected
attackanimation
waitanimation
setmoveeffect MOVE_EFFECT_BURN
@@ -2187,6 +5440,7 @@ BattleScript_EffectWillOWisp::
goto BattleScript_MoveEnd
BattleScript_WaterVeilPrevents::
+ call BattleScript_AbilityPopUp
copybyte gEffectBattler, gBattlerTarget
setbyte cMULTISTRING_CHOOSER, B_MSG_ABILITY_PREVENTS_MOVE_STATUS
call BattleScript_BRNPrevention
@@ -2201,28 +5455,28 @@ BattleScript_AlreadyBurned::
BattleScript_EffectMemento::
attackcanceler
- jumpifbyte CMP_EQUAL, cMISS_TYPE, B_MSG_PROTECTED, BattleScript_MementoFailProtect
+ jumpifbyte CMP_EQUAL, cMISS_TYPE, B_MSG_PROTECTED, BattleScript_MementoTargetProtect
attackstring
ppreduce
- jumpifattackandspecialattackcannotfall BattleScript_ButItFailed
+ trymemento BattleScript_ButItFailed
setatkhptozero
attackanimation
waitanimation
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectMementoPrintNoEffect
+ jumpifsubstituteblocks BattleScript_EffectMementoPrintNoEffect
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO | STAT_CHANGE_MULTIPLE_STATS
playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO
setstatchanger STAT_ATK, 2, TRUE
- statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_EffectMementoTrySpAtk
- @ Greater than STAT_FELL is checking if the stat cannot decrease
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMementoTrySpAtk
+@ Greater than B_MSG_DEFENDER_STAT_FELL is checking if the stat cannot decrease
jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_EffectMementoTrySpAtk
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_EffectMementoTrySpAtk:
playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO
setstatchanger STAT_SPATK, 2, TRUE
- statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_EffectMementoTryFaint
- @ Greater than STAT_FELL is checking if the stat cannot decrease
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMementoTryFaint
+@ Greater than B_MSG_DEFENDER_STAT_FELL is checking if the stat cannot decrease
jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_EffectMementoTryFaint
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
@@ -2233,11 +5487,12 @@ BattleScript_EffectMementoPrintNoEffect:
printstring STRINGID_BUTNOEFFECT
waitmessage B_WAIT_TIME_LONG
goto BattleScript_EffectMementoTryFaint
-BattleScript_MementoFailProtect:
+@ If the target is protected there's no need to check the target's stats or animate, the user will just faint
+BattleScript_MementoTargetProtect:
attackstring
ppreduce
- jumpifattackandspecialattackcannotfall BattleScript_MementoFailEnd
-BattleScript_MementoFailEnd:
+ trymemento BattleScript_MementoTargetProtectEnd
+BattleScript_MementoTargetProtectEnd:
setatkhptozero
pause B_WAIT_TIME_LONG
effectivenesssound
@@ -2246,14 +5501,6 @@ BattleScript_MementoFailEnd:
tryfaintmon BS_ATTACKER
goto BattleScript_MoveEnd
-BattleScript_EffectFacade::
- jumpifstatus BS_ATTACKER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, BattleScript_FacadeDoubleDmg
- goto BattleScript_EffectHit
-
-BattleScript_FacadeDoubleDmg::
- setbyte sDMG_MULTIPLIER, 2
- goto BattleScript_EffectHit
-
BattleScript_EffectFocusPunch::
attackcanceler
jumpifnodamage BattleScript_HitFromAccCheck
@@ -2262,13 +5509,11 @@ BattleScript_EffectFocusPunch::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectSmellingsalt::
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectHit
- setmoveeffect MOVE_EFFECT_REMOVE_PARALYSIS | MOVE_EFFECT_CERTAIN
- jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_SmellingsaltDoubleDmg
- goto BattleScript_EffectHit
-BattleScript_SmellingsaltDoubleDmg:
- setbyte sDMG_MULTIPLIER, 2
+BattleScript_EffectSmellingsalt:
+BattleScript_EffectWakeUpSlap:
+BattleScript_EffectSparklingAria:
+ jumpifsubstituteblocks BattleScript_EffectHit
+ setmoveeffect MOVE_EFFECT_REMOVE_STATUS | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_EffectFollowMe::
@@ -2298,6 +5543,16 @@ BattleScript_EffectCharge::
setcharge
attackanimation
waitanimation
+.if B_CHARGE_SPDEF_RAISE >= GEN_5
+ setstatchanger STAT_SPDEF, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectChargeString
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectChargeString
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectChargeString:
+.endif
printstring STRINGID_PKMNCHARGINGPOWER
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
@@ -2306,6 +5561,7 @@ BattleScript_EffectTaunt::
attackcanceler
attackstring
ppreduce
+ jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
settaunt BattleScript_ButItFailed
attackanimation
@@ -2329,7 +5585,7 @@ BattleScript_EffectTrick::
attackcanceler
attackstring
ppreduce
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
+ jumpifsubstituteblocks BattleScript_ButItFailed
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
tryswapitems BattleScript_ButItFailed
attackanimation
@@ -2348,8 +5604,19 @@ BattleScript_EffectRolePlay::
trycopyability BattleScript_ButItFailed
attackanimation
waitanimation
+.if B_ABILITY_POP_UP == TRUE
+ setbyte sFIXED_ABILITY_POPUP, TRUE
+ showabilitypopup BS_ATTACKER
+ pause 60
+ sethword sABILITY_OVERWRITE, 0
+ updateabilitypopup BS_ATTACKER
+ pause 20
+ destroyabilitypopup
+ pause 40
+.endif
printstring STRINGID_PKMNCOPIEDFOE
waitmessage B_WAIT_TIME_LONG
+ switchinabilities BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_EffectWish::
@@ -2361,7 +5628,7 @@ BattleScript_EffectWish::
waitanimation
goto BattleScript_MoveEnd
-BattleScript_EffectAssist::
+BattleScript_EffectAssist:
attackcanceler
attackstring
assistattackselect BattleScript_ButItFailedPpReduce
@@ -2371,22 +5638,26 @@ BattleScript_EffectAssist::
setbyte sB_ANIM_TARGETS_HIT, 0
jumptocalledmove TRUE
-BattleScript_EffectIngrain::
+BattleScript_EffectIngrain:
attackcanceler
attackstring
ppreduce
- trysetroots BattleScript_ButItFailed
+ setuserstatus3 STATUS3_ROOTED, BattleScript_ButItFailed
attackanimation
waitanimation
printstring STRINGID_PKMNPLANTEDROOTS
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectSuperpower::
+BattleScript_EffectSuperpower:
setmoveeffect MOVE_EFFECT_ATK_DEF_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
-BattleScript_EffectMagicCoat::
+BattleScript_EffectCloseCombat:
+ setmoveeffect MOVE_EFFECT_DEF_SPDEF_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectMagicCoat:
attackcanceler
trysetmagiccoat BattleScript_ButItFailedAtkStringPpReduce
attackstring
@@ -2408,10 +5679,6 @@ BattleScript_EffectRecycle::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectRevenge::
- doubledamagedealtifdamaged
- goto BattleScript_EffectHit
-
BattleScript_EffectBrickBreak::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
@@ -2420,10 +5687,9 @@ BattleScript_EffectBrickBreak::
removelightscreenreflect
critcalc
damagecalc
- typecalc
- adjustnormaldamage
+ adjustdamage
jumpifbyte CMP_EQUAL, sB_ANIM_TURN, 0, BattleScript_BrickBreakAnim
- bicbyte gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE
+ bichalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE
BattleScript_BrickBreakAnim::
attackanimation
waitanimation
@@ -2431,7 +5697,7 @@ BattleScript_BrickBreakAnim::
printstring STRINGID_THEWALLSHATTERED
waitmessage B_WAIT_TIME_LONG
BattleScript_BrickBreakDoHit::
- typecalc2
+ typecalc
effectivenesssound
hitanimation BS_TARGET
waitstate
@@ -2451,8 +5717,12 @@ BattleScript_EffectYawn::
ppreduce
jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_PrintBankAbilityMadeIneffective
jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_PrintBankAbilityMadeIneffective
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected
+ jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_PrintBankAbilityMadeIneffective
+ jumpifflowerveil BattleScript_FlowerVeilProtects
+ jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects
+ jumpifsubstituteblocks BattleScript_ButItFailed
+ jumpifsafeguard BattleScript_SafeguardProtected
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
jumpifcantmakeasleep BattleScript_ButItFailed
setyawn BattleScript_ButItFailed
@@ -2462,7 +5732,7 @@ BattleScript_EffectYawn::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_PrintBankAbilityMadeIneffective::
- copybyte sBATTLER, sBATTLER_WITH_ABILITY
+ copybyte sBATTLER, gBattlerAbility
BattleScript_PrintAbilityMadeIneffective::
pause B_WAIT_TIME_SHORT
printstring STRINGID_PKMNSXMADEITINEFFECTIVE
@@ -2482,16 +5752,12 @@ BattleScript_EffectEndeavor::
accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
typecalc
jumpifmovehadnoeffect BattleScript_HitFromAtkAnimation
- bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
copyword gBattleMoveDamage, gHpDealt
- adjustsetdamage
+ adjustdamage
goto BattleScript_HitFromAtkAnimation
-BattleScript_EffectEruption::
- scaledamagebyhealthratio
- goto BattleScript_EffectHit
-
-BattleScript_EffectSkillSwap::
+BattleScript_EffectSkillSwap:
attackcanceler
attackstring
ppreduce
@@ -2499,8 +5765,19 @@ BattleScript_EffectSkillSwap::
tryswapabilities BattleScript_ButItFailed
attackanimation
waitanimation
+.if B_ABILITY_POP_UP == TRUE
+ copybyte gBattlerAbility, gBattlerTarget
+ call BattleScript_AbilityPopUp
+ pause 20
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+.endif
printstring STRINGID_PKMNSWAPPEDABILITIES
waitmessage B_WAIT_TIME_LONG
+.if B_SKILL_SWAP >= GEN_4
+ switchinabilities BS_ATTACKER
+ switchinabilities BS_TARGET
+.endif
goto BattleScript_MoveEnd
BattleScript_EffectImprison::
@@ -2514,7 +5791,7 @@ BattleScript_EffectImprison::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectRefresh::
+BattleScript_EffectRefresh:
attackcanceler
attackstring
ppreduce
@@ -2526,18 +5803,18 @@ BattleScript_EffectRefresh::
updatestatusicon BS_ATTACKER
goto BattleScript_MoveEnd
-BattleScript_EffectGrudge::
+BattleScript_EffectGrudge:
attackcanceler
attackstring
ppreduce
- trysetgrudge BattleScript_ButItFailed
+ setuserstatus3 STATUS3_GRUDGE, BattleScript_ButItFailed
attackanimation
waitanimation
printstring STRINGID_PKMNWANTSGRUDGE
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectSnatch::
+BattleScript_EffectSnatch:
attackcanceler
trysetsnatch BattleScript_ButItFailedAtkStringPpReduce
attackstring
@@ -2549,22 +5826,34 @@ BattleScript_EffectSnatch::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectLowKick::
- attackcanceler
- attackstring
- ppreduce
- weightdamagecalculation
- accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE
- goto BattleScript_HitFromCritCalc
-
BattleScript_EffectSecretPower::
getsecretpowereffect
goto BattleScript_EffectHit
-BattleScript_EffectDoubleEdge::
+BattleScript_EffectRecoil25:
+ setmoveeffect MOVE_EFFECT_RECOIL_25 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit
+ incrementgamestat GAME_STAT_USED_STRUGGLE
+ goto BattleScript_EffectHit
+
+BattleScript_EffectRecoil33::
setmoveeffect MOVE_EFFECT_RECOIL_33 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
+BattleScript_EffectRecoil33Status:
+ setmoveeffect MOVE_EFFECT_RECOIL_33_STATUS | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectRecoil50:
+ setmoveeffect MOVE_EFFECT_RECOIL_50 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
+BattleScript_EffectRecoilHP25:
+ setmoveeffect MOVE_EFFECT_RECOIL_HP_25 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit
+ incrementgamestat GAME_STAT_USED_STRUGGLE
+ goto BattleScript_EffectHit
+
BattleScript_EffectTeeterDance::
attackcanceler
attackstring
@@ -2575,11 +5864,11 @@ BattleScript_TeeterDanceLoop::
setmoveeffect MOVE_EFFECT_CONFUSION
jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_TeeterDanceLoopIncrement
jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_TeeterDanceOwnTempoPrevents
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_TeeterDanceSubstitutePrevents
+ jumpifsubstituteblocks BattleScript_TeeterDanceSubstitutePrevents
jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_TeeterDanceAlreadyConfused
jumpifhasnohp BS_TARGET, BattleScript_TeeterDanceLoopIncrement
accuracycheck BattleScript_TeeterDanceMissed, ACC_CURR_MOVE
- jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_TeeterDanceSafeguardProtected
+ jumpifsafeguard BattleScript_TeeterDanceSafeguardProtected
attackanimation
waitanimation
seteffectprimary
@@ -2638,14 +5927,14 @@ BattleScript_EffectPoisonFang::
setmoveeffect MOVE_EFFECT_TOXIC
goto BattleScript_EffectHit
-BattleScript_EffectWeatherBall::
- setweatherballtype
- goto BattleScript_EffectHit
-
BattleScript_EffectOverheat::
setmoveeffect MOVE_EFFECT_SP_ATK_TWO_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
+BattleScript_EffectHammerArm::
+ setmoveeffect MOVE_EFFECT_SPD_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
+ goto BattleScript_EffectHit
+
BattleScript_EffectTickle::
attackcanceler
attackstring
@@ -2660,14 +5949,14 @@ BattleScript_TickleDoMoveAnim::
playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS
playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE
setstatchanger STAT_ATK, 1, TRUE
- statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_TickleTryLowerDef
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TickleTryLowerDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_TickleTryLowerDef
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_TickleTryLowerDef::
playstatchangeanimation BS_TARGET, BIT_DEF, STAT_CHANGE_NEGATIVE
setstatchanger STAT_DEF, 1, TRUE
- statbuffchange STAT_BUFF_ALLOW_PTR, BattleScript_TickleEnd
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TickleEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_TickleEnd
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
@@ -2676,7 +5965,7 @@ BattleScript_TickleEnd::
BattleScript_CantLowerMultipleStats::
pause B_WAIT_TIME_SHORT
- orbyte gMoveResultFlags, MOVE_RESULT_FAILED
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
printstring STRINGID_STATSWONTDECREASE2
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
@@ -2693,13 +5982,13 @@ BattleScript_CosmicPowerDoMoveAnim::
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, 0
setstatchanger STAT_DEF, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CosmicPowerTrySpDef
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CosmicPowerTrySpDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CosmicPowerTrySpDef
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_CosmicPowerTrySpDef::
setstatchanger STAT_SPDEF, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CosmicPowerEnd
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CosmicPowerEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CosmicPowerEnd
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
@@ -2707,7 +5996,6 @@ BattleScript_CosmicPowerEnd::
goto BattleScript_MoveEnd
BattleScript_EffectSkyUppercut::
- orword gHitMarker, HITMARKER_IGNORE_ON_AIR
goto BattleScript_EffectHit
BattleScript_EffectBulkUp::
@@ -2722,13 +6010,13 @@ BattleScript_BulkUpDoMoveAnim::
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF, 0
setstatchanger STAT_ATK, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_BulkUpTryDef
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_BulkUpTryDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_BulkUpTryDef
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_BulkUpTryDef::
setstatchanger STAT_DEF, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_BulkUpEnd
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_BulkUpEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_BulkUpEnd
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
@@ -2747,13 +6035,13 @@ BattleScript_CalmMindDoMoveAnim::
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0
setstatchanger STAT_SPATK, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CalmMindTrySpDef
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CalmMindTrySpDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CalmMindTrySpDef
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_CalmMindTrySpDef::
setstatchanger STAT_SPDEF, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_CalmMindEnd
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CalmMindEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CalmMindEnd
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
@@ -2762,7 +6050,7 @@ BattleScript_CalmMindEnd::
BattleScript_CantRaiseMultipleStats::
pause B_WAIT_TIME_SHORT
- orbyte gMoveResultFlags, MOVE_RESULT_FAILED
+ orhalfword gMoveResultFlags, MOVE_RESULT_FAILED
printstring STRINGID_STATSWONTINCREASE2
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
@@ -2779,13 +6067,13 @@ BattleScript_DragonDanceDoMoveAnim::
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPEED, 0
setstatchanger STAT_ATK, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_DragonDanceTrySpeed
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_DragonDanceTrySpeed
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DragonDanceTrySpeed
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_DragonDanceTrySpeed::
setstatchanger STAT_SPEED, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_DragonDanceEnd
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_DragonDanceEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DragonDanceEnd
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
@@ -2804,30 +6092,44 @@ BattleScript_EffectCamouflage::
goto BattleScript_MoveEnd
BattleScript_FaintAttacker::
+ tryillusionoff BS_ATTACKER
playfaintcry BS_ATTACKER
pause B_WAIT_TIME_LONG
dofaintanimation BS_ATTACKER
- cleareffectsonfaint BS_ATTACKER
printstring STRINGID_ATTACKERFAINTED
+ cleareffectsonfaint BS_ATTACKER
+ tryactivatesoulheart
+ tryactivatereceiver BS_ATTACKER
+ trytrainerslidefirstdownmsg BS_ATTACKER
return
BattleScript_FaintTarget::
+ tryillusionoff BS_TARGET
playfaintcry BS_TARGET
pause B_WAIT_TIME_LONG
dofaintanimation BS_TARGET
- cleareffectsonfaint BS_TARGET
printstring STRINGID_TARGETFAINTED
+ cleareffectsonfaint BS_TARGET
+ tryactivatefellstinger BS_ATTACKER
+ tryactivatesoulheart
+ tryactivatereceiver BS_TARGET
+ tryactivatemoxie BS_ATTACKER @ and chilling neigh, as one ice rider
+ tryactivatebeastboost BS_ATTACKER
+ tryactivategrimneigh BS_ATTACKER @ and as one shadow rider
+ tryactivatebattlebond BS_ATTACKER
+ trytrainerslidefirstdownmsg BS_TARGET
return
BattleScript_GiveExp::
setbyte sGIVEEXP_STATE, 0
getexp BS_TARGET
end2
-
+
BattleScript_HandleFaintedMon::
+ setbyte sSHIFT_SWITCHED, 0
checkteamslost BattleScript_LinkHandleFaintedMonMultiple
jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_FaintedMonEnd
- jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonTryChoose
+ jumpifbattletype BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonTryChoose
jumpifword CMP_NO_COMMON_BITS, gHitMarker, HITMARKER_PLAYER_FAINTED, BattleScript_FaintedMonTryChoose
@ Yes/No for sending out a new Pokémon if one is defeated in a wild battle
printstring STRINGID_USENEXTPKMN
@@ -2837,7 +6139,7 @@ BattleScript_HandleFaintedMon::
@ Player said no, try to run
jumpifplayerran BattleScript_FaintedMonEnd
printstring STRINGID_CANTESCAPE2
-BattleScript_FaintedMonTryChoose::
+BattleScript_FaintedMonTryChoose:
openpartyscreen BS_FAINTED, BattleScript_FaintedMonEnd
switchhandleorder BS_FAINTED, 2
jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_FaintedMonSendOutNew
@@ -2848,6 +6150,7 @@ BattleScript_FaintedMonTryChoose::
jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_PLAYER_FAINTED, BattleScript_FaintedMonSendOutNew
jumpifbyte CMP_EQUAL, sBATTLE_STYLE, OPTIONS_BATTLE_STYLE_SET, BattleScript_FaintedMonSendOutNew
jumpifcantswitch BS_PLAYER1, BattleScript_FaintedMonSendOutNew
+ setbyte sILLUSION_NICK_HACK, 1
@ Yes/No for sending out a new Pokémon when the opponent is switching
printstring STRINGID_ENEMYABOUTTOSWITCHPKMN
setbyte gBattleCommunication, 0
@@ -2871,27 +6174,41 @@ BattleScript_FaintedMonTryChoose::
getswitchedmondata BS_ATTACKER
switchindataupdate BS_ATTACKER
hpthresholds BS_ATTACKER
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
printstring STRINGID_SWITCHINMON
hidepartystatussummary BS_ATTACKER
switchinanim BS_ATTACKER, 0
waitstate
- switchineffects BS_ATTACKER
- resetsentmonsvalue
-BattleScript_FaintedMonSendOutNew::
+ setbyte sSHIFT_SWITCHED, 1
+BattleScript_FaintedMonSendOutNew:
drawpartystatussummary BS_FAINTED
getswitchedmondata BS_FAINTED
switchindataupdate BS_FAINTED
hpthresholds BS_FAINTED
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
printstring STRINGID_SWITCHINMON
hidepartystatussummary BS_FAINTED
switchinanim BS_FAINTED, FALSE
waitstate
resetplayerfainted
+ trytrainerslidelastonmsg BS_FAINTED
+ jumpifbytenotequal sSHIFT_SWITCHED, sZero, BattleScript_FaintedMonShiftSwitched
+BattleScript_FaintedMonSendOutNewEnd:
switchineffects BS_FAINTED
jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_FaintedMonEnd
cancelallactions
BattleScript_FaintedMonEnd::
end2
+BattleScript_FaintedMonShiftSwitched:
+ copybyte sSAVED_BATTLER, gBattlerTarget
+ switchineffects BS_ATTACKER
+ resetsentmonsvalue
+ copybyte gBattlerTarget, sSAVED_BATTLER
+ goto BattleScript_FaintedMonSendOutNewEnd
BattleScript_LinkHandleFaintedMonMultiple::
openpartyscreen BS_FAINTED_LINK_MULTIPLE_1, BattleScript_LinkHandleFaintedMonMultipleStart
@@ -2905,6 +6222,9 @@ BattleScript_LinkHandleFaintedMonLoop::
getswitchedmondata BS_FAINTED
switchindataupdate BS_FAINTED
hpthresholds BS_FAINTED
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
printstring STRINGID_SWITCHINMON
hidepartystatussummary BS_FAINTED
switchinanim BS_FAINTED, FALSE
@@ -2940,18 +6260,37 @@ BattleScript_PayDayMoneyAndPickUpItems::
end2
BattleScript_LocalBattleLost::
+ jumpifbattletype BATTLE_TYPE_INGAME_PARTNER, BattleScript_LocalBattleLostPrintWhiteOut
jumpifbattletype BATTLE_TYPE_DOME, BattleScript_CheckDomeDrew
jumpifbattletype BATTLE_TYPE_FRONTIER, BattleScript_LocalBattleLostPrintTrainersWinText
jumpifbattletype BATTLE_TYPE_TRAINER_HILL, BattleScript_LocalBattleLostPrintTrainersWinText
jumpifbattletype BATTLE_TYPE_EREADER_TRAINER, BattleScript_LocalBattleLostEnd
jumpifhalfword CMP_EQUAL, gTrainerBattleOpponent_A, TRAINER_SECRET_BASE, BattleScript_LocalBattleLostEnd
BattleScript_LocalBattleLostPrintWhiteOut::
+.if B_WHITEOUT_MONEY >= GEN_4
+ jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_LocalBattleLostEnd
+ printstring STRINGID_PLAYERWHITEOUT
+ waitmessage B_WAIT_TIME_LONG
+ getmoneyreward
+ printstring STRINGID_PLAYERWHITEOUT2
+ waitmessage B_WAIT_TIME_LONG
+ end2
+BattleScript_LocalBattleLostEnd::
+ printstring STRINGID_PLAYERLOSTTOENEMYTRAINER
+ waitmessage B_WAIT_TIME_LONG
+ getmoneyreward
+ printstring STRINGID_PLAYERPAIDPRIZEMONEY
+ waitmessage B_WAIT_TIME_LONG
+ end2
+.else
printstring STRINGID_PLAYERWHITEOUT
waitmessage B_WAIT_TIME_LONG
printstring STRINGID_PLAYERWHITEOUT2
waitmessage B_WAIT_TIME_LONG
BattleScript_LocalBattleLostEnd::
end2
+.endif
+
BattleScript_CheckDomeDrew::
jumpifbyte CMP_EQUAL, gBattleOutcome, B_OUTCOME_DREW, BattleScript_LocalBattleLostEnd_
BattleScript_LocalBattleLostPrintTrainersWinText::
@@ -3085,7 +6424,6 @@ BattleScript_PrintFullBox::
BattleScript_ActionSwitch::
hpthresholds2 BS_ATTACKER
printstring STRINGID_RETURNMON
- setbyte sDMG_MULTIPLIER, 2
jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_PursuitSwitchDmgSetMultihit
setmultihit 1
goto BattleScript_PursuitSwitchDmgLoop
@@ -3108,12 +6446,18 @@ BattleScript_DoSwitchOut::
getswitchedmondata BS_ATTACKER
switchindataupdate BS_ATTACKER
hpthresholds BS_ATTACKER
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
printstring STRINGID_SWITCHINMON
hidepartystatussummary BS_ATTACKER
switchinanim BS_ATTACKER, FALSE
waitstate
+ jumpifcantreverttoprimal BattleScript_DoSwitchOut2
+ call BattleScript_PrimalReversionRet
+BattleScript_DoSwitchOut2:
switchineffects BS_ATTACKER
- moveendcase MOVEEND_IMMUNITY_ABILITIES
+ moveendcase MOVEEND_STATUS_IMMUNITY_ABILITIES
moveendcase MOVEEND_MIRROR_MOVE
end2
@@ -3123,8 +6467,7 @@ BattleScript_PursuitDmgOnSwitchOut::
ppreduce
critcalc
damagecalc
- typecalc
- adjustnormaldamage
+ adjustdamage
attackanimation
waitanimation
effectivenesssound
@@ -3137,7 +6480,7 @@ BattleScript_PursuitDmgOnSwitchOut::
resultmessage
waitmessage B_WAIT_TIME_LONG
tryfaintmon BS_TARGET
- moveendfromto MOVEEND_ON_DAMAGE_ABILITIES, MOVEEND_CHOICE_MOVE
+ moveendfromto MOVEEND_ABILITIES, MOVEEND_CHOICE_MOVE
getbattlerfainted BS_TARGET
jumpifbyte CMP_EQUAL, gBattleCommunication, FALSE, BattleScript_PursuitDmgOnSwitchOutRet
setbyte sGIVEEXP_STATE, 0
@@ -3189,9 +6532,11 @@ BattleScript_LearnMoveReturn::
BattleScript_RainContinuesOrEnds::
printfromtable gRainContinuesStringIds
waitmessage B_WAIT_TIME_LONG
- jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_RAIN_STOPPED, BattleScript_RainContinuesOrEndsEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_RAIN_STOPPED, BattleScript_RainEnds
playanimation BS_ATTACKER, B_ANIM_RAIN_CONTINUES
-BattleScript_RainContinuesOrEndsEnd::
+ end2
+BattleScript_RainEnds::
+ call BattleScript_WeatherFormChanges
end2
BattleScript_DamagingWeatherContinues::
@@ -3203,11 +6548,18 @@ BattleScript_DamagingWeatherLoop::
copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1
weatherdamage
jumpifword CMP_EQUAL, gBattleMoveDamage, 0, BattleScript_DamagingWeatherLoopIncrement
+ jumpifword CMP_COMMON_BITS gBattleMoveDamage, 1 << 31, BattleScript_DamagingWeatherHeal
printfromtable gSandStormHailDmgStringIds
waitmessage B_WAIT_TIME_LONG
- orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
effectivenesssound
hitanimation BS_ATTACKER
+ goto BattleScript_DamagingWeatherHpChange
+BattleScript_DamagingWeatherHeal:
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_ICEBODYHPGAIN
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_DamagingWeatherHpChange:
+ orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
tryfaintmon BS_ATTACKER
@@ -3223,6 +6575,7 @@ BattleScript_DamagingWeatherContinuesEnd::
BattleScript_SandStormHailEnds::
printfromtable gSandStormHailEndStringIds
waitmessage B_WAIT_TIME_LONG
+ call BattleScript_WeatherFormChanges
end2
BattleScript_SunlightContinues::
@@ -3234,6 +6587,7 @@ BattleScript_SunlightContinues::
BattleScript_SunlightFaded::
printstring STRINGID_SUNLIGHTFADED
waitmessage B_WAIT_TIME_LONG
+ call BattleScript_WeatherFormChanges
end2
BattleScript_OverworldWeatherStarts::
@@ -3242,11 +6596,86 @@ BattleScript_OverworldWeatherStarts::
playanimation_var BS_ATTACKER, sB_ANIM_ARG1
end3
+BattleScript_OverworldTerrain::
+ printfromtable gTerrainStringIds
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG
+ end3
+
BattleScript_SideStatusWoreOff::
printstring STRINGID_PKMNSXWOREOFF
waitmessage B_WAIT_TIME_LONG
end2
+BattleScript_SideStatusWoreOffReturn::
+ printstring STRINGID_PKMNSXWOREOFF
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_LuckyChantEnds::
+ printstring STRINGID_LUCKYCHANTENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_TailwindEnds::
+ printstring STRINGID_TAILWINDENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_TrickRoomEnds::
+ printstring STRINGID_TRICKROOMENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_WonderRoomEnds::
+ printstring STRINGID_WONDERROOMENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_MagicRoomEnds::
+ printstring STRINGID_MAGICROOMENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_ElectricTerrainEnds::
+ printstring STRINGID_ELECTRICTERRAINENDS
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
+ end2
+
+BattleScript_MistyTerrainEnds::
+ printstring STRINGID_MISTYTERRAINENDS
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
+ end2
+
+BattleScript_GrassyTerrainEnds::
+ printstring STRINGID_GRASSYTERRAINENDS
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
+ end2
+
+BattleScript_PsychicTerrainEnds::
+ printstring STRINGID_PSYCHICTERRAINENDS
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
+ end2
+
+BattleScript_MudSportEnds::
+ printstring STRINGID_MUDSPORTENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_WaterSportEnds::
+ printstring STRINGID_WATERSPORTENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_GravityEnds::
+ printstring STRINGID_GRAVITYENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
BattleScript_SafeguardProtected::
pause B_WAIT_TIME_SHORT
printstring STRINGID_PKMNUSEDSAFEGUARD
@@ -3266,10 +6695,13 @@ BattleScript_LeechSeedTurnDrain::
datahpupdate BS_ATTACKER
copyword gBattleMoveDamage, gHpDealt
jumpifability BS_ATTACKER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedTurnPrintLiquidOoze
- manipulatedamage DMG_CHANGE_SIGN
setbyte cMULTISTRING_CHOOSER, B_MSG_LEECH_SEED_DRAIN
+ jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_LeechSeedHealBlock
+ manipulatedamage DMG_BIG_ROOT
goto BattleScript_LeechSeedTurnPrintAndUpdateHp
BattleScript_LeechSeedTurnPrintLiquidOoze::
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
setbyte cMULTISTRING_CHOOSER, B_MSG_LEECH_SEED_OOZE
BattleScript_LeechSeedTurnPrintAndUpdateHp::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
@@ -3280,6 +6712,9 @@ BattleScript_LeechSeedTurnPrintAndUpdateHp::
tryfaintmon BS_ATTACKER
tryfaintmon BS_TARGET
end2
+BattleScript_LeechSeedHealBlock:
+ setword gBattleMoveDamage, 0
+ goto BattleScript_LeechSeedTurnPrintAndUpdateHp
BattleScript_BideStoringEnergy::
printstring STRINGID_PKMNSTORINGENERGY
@@ -3294,9 +6729,9 @@ BattleScript_BideAttack::
waitmessage B_WAIT_TIME_LONG
accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE
typecalc
- bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
copyword gBattleMoveDamage, sBIDE_DMG
- adjustsetdamage
+ adjustdamage
setbyte sB_ANIM_TURN, 1
attackanimation
waitanimation
@@ -3318,24 +6753,98 @@ BattleScript_BideNoEnergyToAttack::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_ButItFailed
-BattleScript_SuccessForceOut::
- attackanimation
- waitanimation
- switchoutabilities BS_TARGET
- returntoball BS_TARGET
- waitstate
- jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_TrainerBattleForceOut
- setoutcomeonteleport BS_ATTACKER
- finishaction
-
-BattleScript_TrainerBattleForceOut::
+BattleScript_RoarSuccessSwitch::
+ call BattleScript_RoarSuccessRet
getswitchedmondata BS_TARGET
switchindataupdate BS_TARGET
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
switchinanim BS_TARGET, FALSE
waitstate
printstring STRINGID_PKMNWASDRAGGEDOUT
switchineffects BS_TARGET
+ jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_RED_CARD, BattleScript_RoarSuccessSwitch_Ret
+ setbyte sSWITCH_CASE, B_SWITCH_NORMAL
goto BattleScript_MoveEnd
+BattleScript_RoarSuccessSwitch_Ret:
+ swapattackerwithtarget @ continuation of RedCardActivates
+ restoretarget
+ removeitem BS_TARGET
+ setbyte sSWITCH_CASE, B_SWITCH_NORMAL
+ return
+
+BattleScript_RoarSuccessEndBattle::
+ call BattleScript_RoarSuccessRet
+ setbyte sSWITCH_CASE, B_SWITCH_NORMAL
+ setoutcomeonteleport BS_ATTACKER
+ finishaction
+
+BattleScript_RoarSuccessRet:
+ jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_HIT, BattleScript_RoarSuccessRet_Ret
+ jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_RED_CARD, BattleScript_RoarSuccessRet_Ret
+ attackanimation
+ waitanimation
+BattleScript_RoarSuccessRet_Ret:
+ switchoutabilities BS_TARGET
+ returntoball BS_TARGET
+ waitstate
+ return
+
+BattleScript_WeaknessPolicy::
+ copybyte sBATTLER, gBattlerTarget
+ jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_WeaknessPolicyAtk
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_WeaknessPolicyEnd
+BattleScript_WeaknessPolicyAtk:
+ playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_BY_TWO
+ setstatchanger STAT_ATK, 2, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicySpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicySpAtk
+ printstring STRINGID_USINGITEMSTATOFPKMNROSE
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_WeaknessPolicySpAtk:
+ setstatchanger STAT_SPATK, 2, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicyRemoveItem
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicyRemoveItem
+ printstring STRINGID_USINGITEMSTATOFPKMNROSE
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_WeaknessPolicyRemoveItem:
+ removeitem BS_TARGET
+BattleScript_WeaknessPolicyEnd:
+ return
+
+BattleScript_TargetItemStatRaise::
+ copybyte sBATTLER, gBattlerTarget
+ statbuffchange 0, BattleScript_TargetItemStatRaiseRemoveItemRet
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_TargetItemStatRaiseRemoveItemRet
+ playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ waitanimation
+ printstring STRINGID_USINGITEMSTATOFPKMNROSE
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_TARGET
+BattleScript_TargetItemStatRaiseRemoveItemRet:
+ return
+
+BattleScript_AttackerItemStatRaise::
+ copybyte sBATTLER, gBattlerAttacker
+ statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_AttackerItemStatRaiseRet
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AttackerItemStatRaiseRet
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ waitanimation
+ printstring STRINGID_USINGITEMSTATOFPKMNROSE
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_ATTACKER
+BattleScript_AttackerItemStatRaiseRet:
+ return
BattleScript_MistProtected::
pause B_WAIT_TIME_SHORT
@@ -3382,56 +6891,91 @@ BattleScript_DestinyBondTakesLife::
tryfaintmon BS_ATTACKER
return
-BattleScript_SpikesOnAttacker::
+BattleScript_DmgHazardsOnAttacker::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
- call BattleScript_PrintHurtBySpikes
+ call BattleScript_PrintHurtByDmgHazards
tryfaintmon BS_ATTACKER
- tryfaintmon_spikes BS_ATTACKER, BattleScript_SpikesOnAttackerFainted
+ tryfaintmon_spikes BS_ATTACKER, BattleScript_DmgHazardsOnAttackerFainted
return
-BattleScript_SpikesOnAttackerFainted::
+BattleScript_DmgHazardsOnAttackerFainted::
setbyte sGIVEEXP_STATE, 0
getexp BS_ATTACKER
moveendall
goto BattleScript_HandleFaintedMon
-BattleScript_SpikesOnTarget::
+BattleScript_DmgHazardsOnTarget::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
- call BattleScript_PrintHurtBySpikes
+ call BattleScript_PrintHurtByDmgHazards
tryfaintmon BS_TARGET
- tryfaintmon_spikes BS_TARGET, BattleScript_SpikesOnTargetFainted
+ tryfaintmon_spikes BS_TARGET, BattleScript_DmgHazardsOnTargetFainted
return
-BattleScript_SpikesOnTargetFainted::
+BattleScript_DmgHazardsOnTargetFainted::
setbyte sGIVEEXP_STATE, 0
getexp BS_TARGET
moveendall
goto BattleScript_HandleFaintedMon
-BattleScript_SpikesOnFaintedBattler::
+BattleScript_DmgHazardsOnFaintedBattler::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_FAINTED
datahpupdate BS_FAINTED
- call BattleScript_PrintHurtBySpikes
+ call BattleScript_PrintHurtByDmgHazards
tryfaintmon BS_FAINTED
- tryfaintmon_spikes BS_FAINTED, BattleScript_SpikesOnFaintedBattlerFainted
+ tryfaintmon_spikes BS_FAINTED, BattleScript_DmgHazardsOnFaintedBattlerFainted
return
-BattleScript_SpikesOnFaintedBattlerFainted::
+BattleScript_DmgHazardsOnFaintedBattlerFainted::
setbyte sGIVEEXP_STATE, 0
getexp BS_FAINTED
moveendall
goto BattleScript_HandleFaintedMon
-BattleScript_PrintHurtBySpikes::
- printstring STRINGID_PKMNHURTBYSPIKES
+BattleScript_PrintHurtByDmgHazards::
+ printfromtable gDmgHazardsStringIds
waitmessage B_WAIT_TIME_LONG
return
+BattleScript_ToxicSpikesAbsorbed::
+ printstring STRINGID_TOXICSPIKESABSORBED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_ToxicSpikesPoisoned::
+ printstring STRINGID_TOXICSPIKESPOISONED
+ waitmessage B_WAIT_TIME_LONG
+ statusanimation BS_SCRIPTING
+ updatestatusicon BS_SCRIPTING
+ waitstate
+ return
+
+BattleScript_StickyWebOnSwitchIn::
+ savetarget
+ copybyte gBattlerTarget, sBATTLER
+ setbyte sSTICKY_WEB_STAT_DROP, 1
+ printstring STRINGID_STICKYWEBSWITCHIN
+ waitmessage B_WAIT_TIME_LONG
+ jumpifability BS_TARGET, ABILITY_MIRROR_ARMOR, BattleScript_MirrorArmorReflectStickyWeb
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StickyWebOnSwitchInEnd
+ jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_StickyWebOnSwitchInStatAnim
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StickyWebOnSwitchInEnd
+ pause B_WAIT_TIME_SHORT
+ goto BattleScript_StickyWebOnSwitchInPrintStatMsg
+BattleScript_StickyWebOnSwitchInStatAnim:
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_StickyWebOnSwitchInPrintStatMsg:
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_StickyWebOnSwitchInEnd:
+ restoretarget
+ return
+
BattleScript_PerishSongTakesLife::
printstring STRINGID_PKMNPERISHCOUNTFELL
waitmessage B_WAIT_TIME_LONG
@@ -3441,6 +6985,83 @@ BattleScript_PerishSongTakesLife::
tryfaintmon BS_ATTACKER
end2
+BattleScript_PerishBodyActivates::
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_PKMNSWILLPERISHIN3TURNS
+ waitmessage B_WAIT_TIME_LONG
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ return
+
+BattleScript_GulpMissileGorging::
+ call BattleScript_AbilityPopUp
+ playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE
+ waitanimation
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ effectivenesssound
+ hitanimation BS_ATTACKER
+ waitstate
+ jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGorging
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ tryfaintmon BS_ATTACKER
+ getbattlerfainted BS_ATTACKER
+ jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_GulpMissileNoSecondEffectGorging
+BattleScript_GulpMissileNoDmgGorging:
+ handleformchange BS_TARGET, 0
+ playanimation BS_TARGET, B_ANIM_FORM_CHANGE
+ waitanimation
+ swapattackerwithtarget
+ setmoveeffect MOVE_EFFECT_PARALYSIS
+ seteffectprimary
+ swapattackerwithtarget
+ return
+BattleScript_GulpMissileNoSecondEffectGorging:
+ handleformchange BS_TARGET, 0
+ playanimation BS_TARGET, B_ANIM_FORM_CHANGE
+ waitanimation
+ return
+
+BattleScript_GulpMissileGulping::
+ call BattleScript_AbilityPopUp
+ playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE
+ waitanimation
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ effectivenesssound
+ hitanimation BS_ATTACKER
+ waitstate
+ jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGulping
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ tryfaintmon BS_ATTACKER
+ getbattlerfainted BS_ATTACKER
+ jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_GulpMissileNoSecondEffectGulping
+ jumpifability BS_ATTACKER, ABILITY_CLEAR_BODY, BattleScript_GulpMissileNoSecondEffectGulping
+ jumpifability BS_ATTACKER, ABILITY_FULL_METAL_BODY, BattleScript_GulpMissileNoSecondEffectGulping
+ jumpifability BS_ATTACKER, ABILITY_WHITE_SMOKE, BattleScript_GulpMissileNoSecondEffectGulping
+ jumpifflowerveilattacker BattleScript_GulpMissileNoSecondEffectGulping
+BattleScript_GulpMissileNoDmgGulping:
+ handleformchange BS_TARGET, 0
+ playanimation BS_TARGET, B_ANIM_FORM_CHANGE
+ waitanimation
+ swapattackerwithtarget @ to make gStatDownStringIds down below print the right battler
+ setstatchanger STAT_DEF, 1, TRUE
+ statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_GulpMissileGorgingTargetDefenseCantGoLower
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+ swapattackerwithtarget @ restore the battlers, just in case
+ return
+BattleScript_GulpMissileNoSecondEffectGulping:
+ handleformchange BS_TARGET, 0
+ playanimation BS_TARGET, B_ANIM_FORM_CHANGE
+ waitanimation
+ return
+BattleScript_GulpMissileGorgingTargetDefenseCantGoLower:
+ printstring STRINGID_STATSWONTDECREASE
+ waitmessage B_WAIT_TIME_LONG
+ return
+
BattleScript_PerishSongCountGoesDown::
printstring STRINGID_PKMNPERISHCOUNTFELL
waitmessage B_WAIT_TIME_LONG
@@ -3456,27 +7077,27 @@ BattleScript_AllStatsUpAtk::
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0
setstatchanger STAT_ATK, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpDef
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpDef
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_AllStatsUpDef::
setstatchanger STAT_DEF, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpSpeed
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpeed
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_AllStatsUpSpeed::
setstatchanger STAT_SPEED, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpSpAtk
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpAtk
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_AllStatsUpSpAtk::
setstatchanger STAT_SPATK, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpSpDef
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpDef
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_AllStatsUpSpDef::
setstatchanger STAT_SPDEF, 1, FALSE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_AllStatsUpRet
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpRet
printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_AllStatsUpRet::
@@ -3502,6 +7123,21 @@ BattleScript_SpikesFree::
waitmessage B_WAIT_TIME_LONG
return
+BattleScript_ToxicSpikesFree::
+ printstring STRINGID_PKMNBLEWAWAYTOXICSPIKES
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_StickyWebFree::
+ printstring STRINGID_PKMNBLEWAWAYSTICKYWEB
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_StealthRockFree::
+ printstring STRINGID_PKMNBLEWAWAYSTEALTHROCK
+ waitmessage B_WAIT_TIME_LONG
+ return
+
BattleScript_MonTookFutureAttack::
printstring STRINGID_PKMNTOOKATTACK
waitmessage B_WAIT_TIME_LONG
@@ -3511,7 +7147,10 @@ BattleScript_MonTookFutureAttack::
BattleScript_CheckDoomDesireMiss::
accuracycheck BattleScript_FutureAttackMiss, MOVE_DOOM_DESIRE
BattleScript_FutureAttackAnimate::
- adjustnormaldamage2
+ critcalc
+ damagecalc
+ adjustdamage
+ jumpifmovehadnoeffect BattleScript_DoFutureAttackResult
jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_FUTURE_SIGHT, BattleScript_FutureHitAnimDoomDesire
playanimation BS_ATTACKER, B_ANIM_FUTURE_SIGHT_HIT
goto BattleScript_DoFutureAttackHit
@@ -3523,6 +7162,9 @@ BattleScript_DoFutureAttackHit::
waitstate
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_DoFutureAttackResult:
resultmessage
waitmessage B_WAIT_TIME_LONG
tryfaintmon BS_TARGET
@@ -3532,14 +7174,12 @@ BattleScript_FutureAttackEnd::
moveendfromto MOVEEND_ITEM_EFFECTS_ALL, MOVEEND_UPDATE_LAST_MOVES
setbyte gMoveResultFlags, 0
end2
-
BattleScript_FutureAttackMiss::
pause B_WAIT_TIME_SHORT
- setbyte gMoveResultFlags, 0
- orbyte gMoveResultFlags, MOVE_RESULT_FAILED
+ sethword gMoveResultFlags, MOVE_RESULT_FAILED
resultmessage
waitmessage B_WAIT_TIME_LONG
- setbyte gMoveResultFlags, 0
+ sethword gMoveResultFlags, 0
end2
BattleScript_NoMovesLeft::
@@ -3583,6 +7223,70 @@ BattleScript_SelectingNotAllowedMoveTauntInPalace::
printstring STRINGID_PKMNCANTUSEMOVETAUNT
goto BattleScript_SelectingUnusableMoveInPalace
+BattleScript_SelectingNotAllowedMoveThroatChop::
+ printselectionstring STRINGID_PKMNCANTUSEMOVETHROATCHOP
+ endselectionscript
+
+BattleScript_MoveUsedIsThroatChopPrevented::
+ printstring STRINGID_PKMNCANTUSEMOVETHROATCHOP
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_SelectingNotAllowedMoveThroatChopInPalace::
+ printstring STRINGID_PKMNCANTUSEMOVETHROATCHOP
+ goto BattleScript_SelectingUnusableMoveInPalace
+
+BattleScript_ThroatChopEndTurn::
+ printstring STRINGID_THROATCHOPENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_SlowStartEnds::
+ pause 5
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_SLOWSTARTEND
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_SelectingNotAllowedMoveGravity::
+ printselectionstring STRINGID_GRAVITYPREVENTSUSAGE
+ endselectionscript
+
+BattleScript_SelectingNotAllowedStuffCheeks::
+ printselectionstring STRINGID_STUFFCHEEKSCANTSELECT
+ endselectionscript
+
+BattleScript_SelectingNotAllowedBelch::
+ printselectionstring STRINGID_BELCHCANTSELECT
+ endselectionscript
+
+BattleScript_SelectingNotAllowedBelchInPalace::
+ printstring STRINGID_BELCHCANTSELECT
+ goto BattleScript_SelectingUnusableMoveInPalace
+
+BattleScript_MoveUsedGravityPrevents::
+ printstring STRINGID_GRAVITYPREVENTSUSAGE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_SelectingNotAllowedMoveGravityInPalace::
+ printstring STRINGID_GRAVITYPREVENTSUSAGE
+ goto BattleScript_SelectingUnusableMoveInPalace
+
+BattleScript_SelectingNotAllowedMoveHealBlock::
+ printselectionstring STRINGID_HEALBLOCKPREVENTSUSAGE
+ endselectionscript
+
+BattleScript_MoveUsedHealBlockPrevents::
+ printstring STRINGID_HEALBLOCKPREVENTSUSAGE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_SelectingNotAllowedMoveHealBlockInPalace::
+ printstring STRINGID_HEALBLOCKPREVENTSUSAGE
+ goto BattleScript_SelectingUnusableMoveInPalace
+
BattleScript_WishComesTrue::
trywish 1, BattleScript_WishButFullHp
playanimation BS_TARGET, B_ANIM_WISH_HEAL
@@ -3606,12 +7310,18 @@ BattleScript_WishButFullHp::
BattleScript_IngrainTurnHeal::
playanimation BS_ATTACKER, B_ANIM_INGRAIN_HEAL
printstring STRINGID_PKMNABSORBEDNUTRIENTS
+BattleScript_TurnHeal:
waitmessage B_WAIT_TIME_LONG
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
end2
+BattleScript_AquaRingHeal::
+ playanimation BS_ATTACKER, B_ANIM_AQUA_RING_HEAL
+ printstring STRINGID_AQUARINGHEAL
+ goto BattleScript_TurnHeal
+
BattleScript_PrintMonIsRooted::
pause B_WAIT_TIME_SHORT
printstring STRINGID_PKMNANCHOREDITSELF
@@ -3623,18 +7333,57 @@ BattleScript_AtkDefDown::
playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS
playstatchangeanimation BS_ATTACKER, BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE
setstatchanger STAT_ATK, 1, TRUE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_BUFF_ALLOW_PTR, BattleScript_AtkDefDown_TryDef
- jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDown_TryDef
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownTryDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDownTryDef
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
-BattleScript_AtkDefDown_TryDef::
+BattleScript_AtkDefDownTryDef:
playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE
setstatchanger STAT_DEF, 1, TRUE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_BUFF_ALLOW_PTR, BattleScript_AtkDefDown_End
- jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDown_End
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownRet
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDownRet
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
-BattleScript_AtkDefDown_End::
+BattleScript_AtkDefDownRet:
+ return
+
+BattleScript_DefSpDefDown::
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS
+ playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_DEF, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_DefSpDefDownTrySpDef
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefSpDefDownTrySpDef
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_DefSpDefDownTrySpDef::
+ playstatchangeanimation BS_ATTACKER, BIT_SPDEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_SPDEF, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_DefSpDefDownRet
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefSpDefDownRet
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_DefSpDefDownRet::
+ return
+
+BattleScript_DefDownSpeedUp::
+ jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_DefDownSpeedUpTryDef
+ jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_DefDownSpeedUpRet
+BattleScript_DefDownSpeedUpTryDef::
+ playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT
+ setstatchanger STAT_DEF, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpTrySpeed
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpTrySpeed
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_DefDownSpeedUpTrySpeed:
+ playstatchangeanimation BS_ATTACKER, BIT_SPEED, 0
+ setstatchanger STAT_SPEED, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpRet
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpRet
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_DefDownSpeedUpRet::
return
BattleScript_KnockedOff::
@@ -3665,12 +7414,23 @@ BattleScript_MagicCoatBounce::
attackstring
ppreduce
pause B_WAIT_TIME_SHORT
- printstring STRINGID_PKMNMOVEBOUNCED
+ printfromtable gMagicCoatBounceStringIds
waitmessage B_WAIT_TIME_LONG
orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_ALLOW_NO_PP
setmagiccoattarget BS_ATTACKER
return
+BattleScript_MagicCoatBouncePrankster::
+ attackstring
+ ppreduce
+ pause B_WAIT_TIME_SHORT
+ printfromtable gMagicCoatBounceStringIds
+ waitmessage B_WAIT_TIME_LONG
+ printstring STRINGID_ITDOESNTAFFECT
+ waitmessage B_WAIT_TIME_LONG
+ orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
+ goto BattleScript_MoveEnd
+
BattleScript_SnatchedMove::
attackstring
ppreduce
@@ -3687,6 +7447,14 @@ BattleScript_EnduredMsg::
waitmessage B_WAIT_TIME_LONG
return
+BattleScript_SturdiedMsg::
+ copybyte gBattlerAbility, gBattlerTarget
+ pause B_WAIT_TIME_SHORTEST
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_ENDUREDSTURDY
+ waitmessage B_WAIT_TIME_LONG
+ return
+
BattleScript_OneHitKOMsg::
printstring STRINGID_ONEHITKO
waitmessage B_WAIT_TIME_LONG
@@ -3696,13 +7464,18 @@ BattleScript_SAtkDown2::
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_ATTACKER, BIT_SPATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO
setstatchanger STAT_SPATK, 2, TRUE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_BUFF_ALLOW_PTR, BattleScript_SAtkDown2End
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_SAtkDown2End
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_SAtkDown2End
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_SAtkDown2End::
return
+BattleScript_MoveEffectClearSmog::
+ printstring STRINGID_RESETSTARGETSSTATLEVELS
+ waitmessage B_WAIT_TIME_LONG
+ return
+
BattleScript_FocusPunchSetUp::
printstring STRINGID_EMPTYSTRING3
waitmessage 1
@@ -3711,6 +7484,170 @@ BattleScript_FocusPunchSetUp::
waitmessage B_WAIT_TIME_LONG
end2
+BattleScript_MegaEvolution::
+ printstring STRINGID_MEGAEVOREACTING
+ waitmessage B_WAIT_TIME_LONG
+ setbyte gIsCriticalHit, 0
+ handlemegaevo BS_ATTACKER, 0
+ handlemegaevo BS_ATTACKER, 1
+ playanimation BS_ATTACKER, B_ANIM_MEGA_EVOLUTION
+ waitanimation
+ handlemegaevo BS_ATTACKER, 2
+ printstring STRINGID_MEGAEVOEVOLVED
+ waitmessage B_WAIT_TIME_LONG
+ switchinabilities BS_ATTACKER
+ end2
+
+BattleScript_WishMegaEvolution::
+ printstring STRINGID_FERVENTWISHREACHED
+ waitmessage B_WAIT_TIME_LONG
+ setbyte gIsCriticalHit, 0
+ handlemegaevo BS_ATTACKER, 0
+ handlemegaevo BS_ATTACKER, 1
+ playanimation BS_ATTACKER, B_ANIM_MEGA_EVOLUTION
+ waitanimation
+ handlemegaevo BS_ATTACKER, 2
+ printstring STRINGID_MEGAEVOEVOLVED
+ waitmessage B_WAIT_TIME_LONG
+ switchinabilities BS_ATTACKER
+ end2
+
+BattleScript_PrimalReversion::
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ setbyte gIsCriticalHit, 0
+ handleprimalreversion BS_ATTACKER, 0
+ handleprimalreversion BS_ATTACKER, 1
+ playanimation BS_ATTACKER, B_ANIM_PRIMAL_REVERSION
+ waitanimation
+ handleprimalreversion BS_ATTACKER, 2
+ printstring STRINGID_PKMNREVERTEDTOPRIMAL
+ waitmessage B_WAIT_TIME_LONG
+ switchinabilities BS_ATTACKER
+ end2
+
+BattleScript_PrimalReversionRet::
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ setbyte gIsCriticalHit, 0
+ handleprimalreversion BS_ATTACKER, 0
+ handleprimalreversion BS_ATTACKER, 1
+ playanimation BS_ATTACKER, B_ANIM_PRIMAL_REVERSION
+ waitanimation
+ handleprimalreversion BS_ATTACKER, 2
+ printstring STRINGID_PKMNREVERTEDTOPRIMAL
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_AttackerFormChange::
+ pause 5
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+BattleScript_AttackerFormChangeNoPopup::
+ handleformchange BS_ATTACKER, 0
+ handleformchange BS_ATTACKER, 1
+ playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE
+ waitanimation
+ handleformchange BS_ATTACKER, 2
+ return
+
+BattleScript_AttackerFormChangeEnd3::
+ call BattleScript_AttackerFormChange
+ end3
+
+BattleScript_AttackerFormChangeEnd3NoPopup::
+ call BattleScript_AttackerFormChangeNoPopup
+
+BattleScript_AttackerFormChangeMoveEffect::
+ waitmessage 1
+ handleformchange BS_ATTACKER, 0
+ handleformchange BS_ATTACKER, 1
+ playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE
+ waitanimation
+ copybyte sBATTLER, gBattlerAttacker
+ printstring STRINGID_PKMNTRANSFORMED
+ waitmessage B_WAIT_TIME_LONG
+ handleformchange BS_ATTACKER, 2
+ end3
+
+BattleScript_BallFetch::
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_FETCHEDPOKEBALL
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_TargetFormChange::
+ pause 5
+ copybyte gBattlerAbility, gBattlerTarget
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ handleformchange BS_TARGET, 0
+ handleformchange BS_TARGET, 1
+ playanimation BS_TARGET, B_ANIM_FORM_CHANGE
+ waitanimation
+ handleformchange BS_TARGET, 2
+ return
+
+BattleScript_IllusionOff::
+ spriteignore0hp TRUE
+ playanimation BS_TARGET, B_ANIM_ILLUSION_OFF
+ waitanimation
+ updatenick BS_TARGET
+ waitstate
+ spriteignore0hp FALSE
+ printstring STRINGID_ILLUSIONWOREOFF
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_CottonDownActivates::
+ setbyte sFIXED_ABILITY_POPUP, TRUE
+ call BattleScript_AbilityPopUp
+ copybyte gEffectBattler, gBattlerTarget
+ savetarget
+ setbyte gBattlerTarget, 0
+BattleScript_CottonDownLoop:
+ getbattlerfainted BS_TARGET
+ jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_CottonDownLoopIncrement
+ setstatchanger STAT_SPEED, 1, TRUE
+ jumpifbyteequal gBattlerTarget, gEffectBattler, BattleScript_CottonDownLoopIncrement
+ statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CottonDownTargetSpeedCantGoLower
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_CottonDownLoopIncrement
+BattleScript_CottonDownTargetSpeedCantGoLower:
+ printstring STRINGID_STATSWONTDECREASE
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_CottonDownLoopIncrement:
+ addbyte gBattlerTarget, 1
+ jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop
+BattleScript_CottonDownReturn:
+ restoretarget
+ destroyabilitypopup
+ return
+
+BattleScript_AnticipationActivates::
+ pause 5
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_ANTICIPATIONACTIVATES
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_AftermathDmg::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ printstring STRINGID_AFTERMATHDMG
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_ATTACKER
+ return
+
BattleScript_MoveUsedIsAsleep::
printstring STRINGID_PKMNFASTASLEEP
waitmessage B_WAIT_TIME_LONG
@@ -3735,13 +7672,23 @@ BattleScript_PoisonTurnDmg::
waitmessage B_WAIT_TIME_LONG
BattleScript_DoStatusTurnDmg::
statusanimation BS_ATTACKER
-BattleScript_DoTurnDmg::
+BattleScript_DoTurnDmg:
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
tryfaintmon BS_ATTACKER
checkteamslost BattleScript_DoTurnDmgEnd
-BattleScript_DoTurnDmgEnd::
+BattleScript_DoTurnDmgEnd:
+ end2
+
+BattleScript_PoisonHealActivates::
+ printstring STRINGID_POISONHEALHPUP
+ waitmessage B_WAIT_TIME_LONG
+ recordability BS_ATTACKER
+ statusanimation BS_ATTACKER
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
end2
BattleScript_BurnTurnDmg::
@@ -3774,10 +7721,43 @@ BattleScript_MoveUsedIsParalyzed::
cancelmultiturnmoves BS_ATTACKER
goto BattleScript_MoveEnd
+BattleScript_PowderMoveNoEffect::
+ attackstring
+ ppreduce
+ pause B_WAIT_TIME_SHORT
+ jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_PowderMoveNoEffectPrint
+ jumpifability BS_TARGET, ABILITY_OVERCOAT, BattleScript_PowderMoveNoEffectOvercoat
+ printstring STRINGID_SAFETYGOGGLESPROTECTED
+ goto BattleScript_PowderMoveNoEffectWaitMsg
+BattleScript_PowderMoveNoEffectOvercoat:
+ call BattleScript_AbilityPopUp
+BattleScript_PowderMoveNoEffectPrint:
+ printstring STRINGID_ITDOESNTAFFECT
+BattleScript_PowderMoveNoEffectWaitMsg:
+ waitmessage B_WAIT_TIME_LONG
+ cancelmultiturnmoves BS_ATTACKER
+ sethword gMoveResultFlags, MOVE_RESULT_FAILED
+ goto BattleScript_MoveEnd
+
BattleScript_MoveUsedFlinched::
printstring STRINGID_PKMNFLINCHED
waitmessage B_WAIT_TIME_LONG
+ jumpifability BS_ATTACKER ABILITY_STEADFAST BattleScript_TryActivateSteadFast
+BattleScript_MoveUsedFlinchedEnd:
goto BattleScript_MoveEnd
+BattleScript_TryActivateSteadFast:
+ setstatchanger STAT_SPEED, 1, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_MoveUsedFlinchedEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_MoveUsedFlinchedEnd
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ setbyte gBattleCommunication STAT_SPEED
+ stattextbuffer BS_ATTACKER
+ printstring STRINGID_ATTACKERABILITYSTATRAISE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveUsedFlinchedEnd
BattleScript_PrintUproarOverTurns::
printfromtable gUproarOverTurnStringIds
@@ -3797,7 +7777,7 @@ BattleScript_MoveUsedIsConfused::
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, FALSE, BattleScript_MoveUsedIsConfusedRet
BattleScript_DoSelfConfusionDmg::
cancelmultiturnmoves BS_ATTACKER
- adjustnormaldamage2
+ adjustdamage
printstring STRINGID_ITHURTCONFUSION
waitmessage B_WAIT_TIME_LONG
effectivenesssound
@@ -3813,6 +7793,25 @@ BattleScript_DoSelfConfusionDmg::
BattleScript_MoveUsedIsConfusedRet::
return
+BattleScript_MoveUsedPowder::
+ bicword gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED
+ attackstring
+ ppreduce
+ pause B_WAIT_TIME_SHORT
+ cancelmultiturnmoves BS_ATTACKER
+ status2animation BS_ATTACKER, STATUS2_POWDER
+ waitanimation
+ effectivenesssound
+ hitanimation BS_ATTACKER
+ waitstate
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ printstring STRINGID_POWDEREXPLODES
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_ATTACKER
+ goto BattleScript_MoveEnd
+
BattleScript_MoveUsedIsConfusedNoMore::
printstring STRINGID_PKMNHEALEDCONFUSION
waitmessage B_WAIT_TIME_LONG
@@ -3824,6 +7823,7 @@ BattleScript_PrintPayDayMoneyString::
return
BattleScript_WrapTurnDmg::
+ jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_DoTurnDmgEnd
playanimation BS_ATTACKER, B_ANIM_TURN_TRAP, sB_ANIM_ARG1
printstring STRINGID_PKMNHURTBY
waitmessage B_WAIT_TIME_LONG
@@ -3863,6 +7863,18 @@ BattleScript_TargetPRLZHeal::
updatestatusicon BS_TARGET
return
+BattleScript_TargetWokeUp::
+ printstring STRINGID_TARGETWOKEUP
+ waitmessage B_WAIT_TIME_LONG
+ updatestatusicon BS_TARGET
+ return
+
+BattleScript_TargetBurnHeal::
+ printstring STRINGID_PKMNBURNHEALED
+ waitmessage B_WAIT_TIME_LONG
+ updatestatusicon BS_TARGET
+ return
+
BattleScript_MoveEffectSleep::
statusanimation BS_EFFECT_BATTLER
printfromtable gFellAsleepStringIds
@@ -3878,7 +7890,37 @@ BattleScript_YawnMakesAsleep::
waitmessage B_WAIT_TIME_LONG
updatestatusicon BS_EFFECT_BATTLER
waitstate
+ jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_SKY_DROPPED, BattleScript_YawnEnd
makevisible BS_EFFECT_BATTLER
+ skydropyawn
+BattleScript_YawnEnd:
+ end2
+
+BattleScript_EmbargoEndTurn::
+ printstring STRINGID_EMBARGOENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_TelekinesisEndTurn::
+ printstring STRINGID_TELEKINESISENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_BufferEndTurn::
+ printstring STRINGID_BUFFERENDS
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_ToxicOrb::
+ setbyte cMULTISTRING_CHOOSER, 0
+ copybyte gEffectBattler, gBattlerAttacker
+ call BattleScript_MoveEffectToxic
+ end2
+
+BattleScript_FlameOrb::
+ setbyte cMULTISTRING_CHOOSER, 0
+ copybyte gEffectBattler, gBattlerAttacker
+ call BattleScript_MoveEffectBurn
end2
BattleScript_MoveEffectPoison::
@@ -3932,11 +7974,14 @@ BattleScript_MoveEffectConfusion::
waitmessage B_WAIT_TIME_LONG
return
+BattleScript_MoveEffectRecoilWithStatus::
+ argumentstatuseffect
+ copyword gBattleMoveDamage, sSAVED_DMG
BattleScript_MoveEffectRecoil::
jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil
jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_RecoilEnd
BattleScript_DoRecoil::
- orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
printstring STRINGID_PKMNHITWITHRECOIL
@@ -3945,6 +7990,10 @@ BattleScript_DoRecoil::
BattleScript_RecoilEnd::
return
+BattleScript_EffectWithChance::
+ seteffectwithchance
+ return
+
BattleScript_ItemSteal::
playanimation BS_TARGET, B_ANIM_ITEM_STEAL
printstring STRINGID_PKMNSTOLEITEM
@@ -3953,41 +8002,184 @@ BattleScript_ItemSteal::
BattleScript_DrizzleActivates::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNMADEITRAIN
waitstate
playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES
call BattleScript_WeatherFormChanges
end3
+BattleScript_AbilityRaisesDefenderStat::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ statbuffchange 0, NULL
+ setgraphicalstatchangevalues
+ playanimation BS_ABILITY_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printstring STRINGID_DEFENDERSSTATROSE
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_AbilityPopUp:
+ .if B_ABILITY_POP_UP == TRUE
+ showabilitypopup BS_ABILITY_BATTLER
+ recordability BS_ABILITY_BATTLER
+ pause 40
+ .endif
+ sethword sABILITY_OVERWRITE, 0
+ return
+
BattleScript_SpeedBoostActivates::
+ call BattleScript_AbilityPopUp
playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printstring STRINGID_PKMNRAISEDSPEED
waitmessage B_WAIT_TIME_LONG
end3
-BattleScript_TraceActivates::
- pause B_WAIT_TIME_SHORT
- printstring STRINGID_PKMNTRACED
+@ Can't compare directly to a value, have to compare to value at pointer
+sZero:
+.byte 0
+
+BattleScript_MoodyActivates::
+ call BattleScript_AbilityPopUp
+ jumpifbyteequal sSTATCHANGER, sZero, BattleScript_MoodyLower
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyLower
+ jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_MoodyLower
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
+BattleScript_MoodyLower:
+ jumpifbyteequal sSAVED_STAT_CHANGER, sZero, BattleScript_MoodyEnd
+ copybyte sSTATCHANGER, sSAVED_STAT_CHANGER
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyEnd
+ jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_MoodyEnd
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_MoodyEnd:
end3
-BattleScript_RainDishActivates::
+BattleScript_EmergencyExit::
+ pause 5
+ call BattleScript_AbilityPopUp
+ pause B_WAIT_TIME_LONG
+BattleScript_EmergencyExitNoPopUp::
+ playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN
+ waitanimation
+ openpartyscreen BS_TARGET, BattleScript_EmergencyExitRet
+ switchoutabilities BS_TARGET
+ waitstate
+ switchhandleorder BS_TARGET, 2
+ returntoball BS_TARGET
+ getswitchedmondata BS_TARGET
+ switchindataupdate BS_TARGET
+ hpthresholds BS_TARGET
+ printstring STRINGID_SWITCHINMON
+ switchinanim BS_TARGET, TRUE
+ waitstate
+ switchineffects BS_TARGET
+BattleScript_EmergencyExitRet:
+ return
+
+BattleScript_EmergencyExitWild::
+ pause 5
+ call BattleScript_AbilityPopUp
+ pause B_WAIT_TIME_LONG
+BattleScript_EmergencyExitWildNoPopUp::
+ playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN
+ waitanimation
+ setoutcomeonteleport BS_TARGET
+ finishaction
+ return
+
+BattleScript_TraceActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_PKMNTRACED
+ waitmessage B_WAIT_TIME_LONG
+ settracedability BS_SCRIPTING
+ switchinabilities BS_SCRIPTING
+ return
+
+BattleScript_TraceActivatesEnd3::
+ call BattleScript_TraceActivates
+ end3
+
+BattleScript_ReceiverActivates::
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_RECEIVERABILITYTAKEOVER
+ waitmessage B_WAIT_TIME_LONG
+ settracedability BS_ABILITY_BATTLER
+ return
+
+BattleScript_AbilityHpHeal:
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNSXRESTOREDHPALITTLE2
waitmessage B_WAIT_TIME_LONG
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
+ return
+
+BattleScript_RainDishActivates::
+ call BattleScript_AbilityHpHeal
+ end3
+
+BattleScript_CheekPouchActivates::
+ copybyte sSAVED_BATTLER, gBattlerAttacker
+ copybyte gBattlerAttacker, gBattlerAbility
+ call BattleScript_AbilityHpHeal
+ copybyte gBattlerAttacker, sSAVED_BATTLER
+ return
+
+BattleScript_HarvestActivates::
+ pause 5
+ tryrecycleitem BattleScript_HarvestActivatesEnd
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_HARVESTBERRY
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_HarvestActivatesEnd:
+ end3
+
+BattleScript_SolarPowerActivates::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ call BattleScript_AbilityPopUp
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ printstring STRINGID_SOLARPOWERHPDROP
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_ATTACKER
+ end3
+
+BattleScript_HealerActivates::
+ call BattleScript_AbilityPopUp
+ curestatus BS_SCRIPTING
+ updatestatusicon BS_SCRIPTING
+ printstring STRINGID_HEALERCURE
+ waitmessage B_WAIT_TIME_LONG
end3
BattleScript_SandstreamActivates::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNSXWHIPPEDUPSANDSTORM
waitstate
playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES
call BattleScript_WeatherFormChanges
end3
+BattleScript_SandSpitActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_ASANDSTORMKICKEDUP
+ waitstate
+ playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES
+ call BattleScript_WeatherFormChanges
+ return
+
BattleScript_ShedSkinActivates::
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNSXCUREDYPROBLEM
waitmessage B_WAIT_TIME_LONG
updatestatusicon BS_ATTACKER
@@ -4006,12 +8198,30 @@ BattleScript_CastformChange::
end3
BattleScript_DoCastformChange::
+ copybyte gBattlerAbility, sBATTLER
+ call BattleScript_AbilityPopUp
docastformchangeanimation
waitstate
printstring STRINGID_PKMNTRANSFORMED
waitmessage B_WAIT_TIME_LONG
return
+BattleScript_TryAdrenalineOrb:
+ jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_ADRENALINE_ORB, BattleScript_TryAdrenalineOrbRet
+ jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, 12, BattleScript_TryAdrenalineOrbRet
+ setstatchanger STAT_SPEED, 1, FALSE
+ statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_TryAdrenalineOrbRet
+ playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ copybyte sBATTLER, gBattlerTarget
+ setlastuseditem BS_TARGET
+ printstring STRINGID_USINGITEMSTATOFPKMNROSE
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_TARGET
+BattleScript_TryAdrenalineOrbRet:
+ return
+
BattleScript_IntimidateActivatesEnd3::
call BattleScript_PauseIntimidateActivates
end3
@@ -4020,19 +8230,27 @@ BattleScript_PauseIntimidateActivates:
pause B_WAIT_TIME_SHORT
BattleScript_IntimidateActivates::
setbyte gBattlerTarget, 0
- setstatchanger STAT_ATK, 1, TRUE
+ call BattleScript_AbilityPopUp
BattleScript_IntimidateActivatesLoop:
+ setstatchanger STAT_ATK, 1, TRUE
trygetintimidatetarget BattleScript_IntimidateActivatesReturn
jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateActivatesLoopIncrement
jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_IntimidatePrevented
jumpifability BS_TARGET, ABILITY_HYPER_CUTTER, BattleScript_IntimidatePrevented
jumpifability BS_TARGET, ABILITY_WHITE_SMOKE, BattleScript_IntimidatePrevented
- statbuffchange STAT_BUFF_NOT_PROTECT_AFFECTED | STAT_BUFF_ALLOW_PTR, BattleScript_IntimidateActivatesLoopIncrement
+.if B_UPDATED_INTIMIDATE >= GEN_8
+ jumpifability BS_TARGET, ABILITY_INNER_FOCUS, BattleScript_IntimidatePrevented
+ jumpifability BS_TARGET, ABILITY_SCRAPPY, BattleScript_IntimidatePrevented
+ jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_IntimidatePrevented
+ jumpifability BS_TARGET, ABILITY_OBLIVIOUS, BattleScript_IntimidatePrevented
+.endif
+ statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_IntimidateActivatesLoopIncrement
jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 1, BattleScript_IntimidateActivatesLoopIncrement
setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printstring STRINGID_PKMNCUTSATTACKWITH
waitmessage B_WAIT_TIME_LONG
+ call BattleScript_TryAdrenalineOrb
BattleScript_IntimidateActivatesLoopIncrement:
addbyte gBattlerTarget, 1
goto BattleScript_IntimidateActivatesLoop
@@ -4040,18 +8258,155 @@ BattleScript_IntimidateActivatesReturn:
return
BattleScript_IntimidatePrevented:
pause B_WAIT_TIME_SHORT
- printstring STRINGID_PREVENTEDFROMWORKING
+ call BattleScript_AbilityPopUp
+ setbyte gBattleCommunication STAT_ATK
+ stattextbuffer BS_ATTACKER
+ printstring STRINGID_STATWASNOTLOWERED
waitmessage B_WAIT_TIME_LONG
+ call BattleScript_TryAdrenalineOrb
goto BattleScript_IntimidateActivatesLoopIncrement
-
+
BattleScript_DroughtActivates::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNSXINTENSIFIEDSUN
waitstate
playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES
call BattleScript_WeatherFormChanges
end3
+BattleScript_DesolateLandActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_EXTREMELYHARSHSUNLIGHT
+ waitstate
+ playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES
+ call BattleScript_WeatherFormChanges
+ end3
+
+BattleScript_DesolateLandEvaporatesWaterTypeMoves::
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ pause B_WAIT_TIME_SHORT
+ ppreduce
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_STRING_PRINTED, BattleScript_MoveEnd
+ printstring STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT
+ waitmessage B_WAIT_TIME_LONG
+ orword gHitMarker, HITMARKER_STRING_PRINTED
+ goto BattleScript_MoveEnd
+
+BattleScript_PrimordialSeaActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_HEAVYRAIN
+ waitstate
+ playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES
+ call BattleScript_WeatherFormChanges
+ end3
+
+BattleScript_PrimordialSeaFizzlesOutFireTypeMoves::
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ pause B_WAIT_TIME_SHORT
+ ppreduce
+ jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_STRING_PRINTED, BattleScript_MoveEnd
+ printstring STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN
+ waitmessage B_WAIT_TIME_LONG
+ orword gHitMarker, HITMARKER_STRING_PRINTED
+ goto BattleScript_MoveEnd
+
+BattleScript_DeltaStreamActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_MYSTERIOUSAIRCURRENT
+ waitstate
+ playanimation BS_ATTACKER, B_ANIM_STRONG_WINDS
+ end3
+
+BattleScript_AttackWeakenedByStrongWinds::
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_ATTACKWEAKENEDBSTRONGWINDS
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_SnowWarningActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_SNOWWARNINGHAIL
+ waitstate
+ playanimation BS_BATTLER_0, B_ANIM_HAIL_CONTINUES
+ call BattleScript_WeatherFormChanges
+ end3
+
+BattleScript_TerrainSeedLoop:
+ savetarget
+ setbyte gBattlerTarget, 0
+BattleScript_TerrainSeedLoopIter:
+ copybyte sBATTLER, gBattlerTarget
+ doterrainseed BS_TARGET, BattleScript_TerrainSeedLoop_NextBattler
+ removeitem BS_TARGET
+BattleScript_TerrainSeedLoop_NextBattler:
+ addbyte gBattlerTarget, 0x1
+ jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TerrainSeedLoopIter
+ restoretarget
+ return
+
+BattleScript_ElectricSurgeActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_TERRAINBECOMESELECTRIC
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG
+ call BattleScript_TerrainSeedLoop
+ end3
+
+BattleScript_MistySurgeActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_TERRAINBECOMESMISTY
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG
+ call BattleScript_TerrainSeedLoop
+ end3
+
+BattleScript_GrassySurgeActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_TERRAINBECOMESGRASSY
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG
+ call BattleScript_TerrainSeedLoop
+ end3
+
+BattleScript_PsychicSurgeActivates::
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_TERRAINBECOMESPSYCHIC
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG
+ call BattleScript_TerrainSeedLoop
+ end3
+
+BattleScript_BadDreamsActivates::
+ setbyte gBattlerTarget, 0
+ call BattleScript_AbilityPopUp
+BattleScript_BadDreamsLoop:
+ trygetbaddreamstarget BattleScript_BadDreamsEnd
+ dmg_1_8_targethp
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ printstring STRINGID_BADDREAMSDMG
+ waitmessage B_WAIT_TIME_LONG
+ jumpifability BS_TARGET, ABILITY_MAGIC_GUARD, BattleScript_BadDreamsIncrement
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ tryfaintmon BS_TARGET
+ checkteamslost BattleScript_BadDreamsIncrement
+BattleScript_BadDreamsIncrement:
+ addbyte gBattlerTarget, 1
+ goto BattleScript_BadDreamsLoop
+BattleScript_BadDreamsEnd:
+ end3
+
BattleScript_TookAttack::
attackstring
pause B_WAIT_TIME_SHORT
@@ -4062,27 +8417,48 @@ BattleScript_TookAttack::
BattleScript_SturdyPreventsOHKO::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNPROTECTEDBY
pause B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_DampStopsExplosion::
pause B_WAIT_TIME_SHORT
+ copybyte gBattlerAbility, gBattlerTarget
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNPREVENTSUSAGE
pause B_WAIT_TIME_LONG
- goto BattleScript_MoveEnd
+ moveendto MOVEEND_NEXT_TARGET
+ moveendcase MOVEEND_CLEAR_BITS
+ end
BattleScript_MoveHPDrain_PPLoss::
ppreduce
BattleScript_MoveHPDrain::
attackstring
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
printstring STRINGID_PKMNRESTOREDHPUSING
waitmessage B_WAIT_TIME_LONG
- orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
+ orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
+ goto BattleScript_MoveEnd
+
+BattleScript_MoveStatDrain_PPLoss::
+ ppreduce
+BattleScript_MoveStatDrain::
+ attackstring
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ waitanimation
+ printstring STRINGID_TARGETABILITYSTATRAISE
+ waitmessage B_WAIT_TIME_LONG
+ clearsemiinvulnerablebit
+ tryfaintmon BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_MonMadeMoveUseless_PPLoss::
@@ -4090,9 +8466,11 @@ BattleScript_MonMadeMoveUseless_PPLoss::
BattleScript_MonMadeMoveUseless::
attackstring
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNSXMADEYUSELESS
waitmessage B_WAIT_TIME_LONG
- orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
+ tryfaintmon BS_ATTACKER
+ orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
goto BattleScript_MoveEnd
BattleScript_FlashFireBoost_PPLoss::
@@ -4100,18 +8478,22 @@ BattleScript_FlashFireBoost_PPLoss::
BattleScript_FlashFireBoost::
attackstring
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printfromtable gFlashFireStringIds
waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_AbilityPreventsPhasingOut::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNANCHORSITSELFWITH
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_AbilityNoStatLoss::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNPREVENTSSTATLOSSWITH
waitmessage B_WAIT_TIME_LONG
return
@@ -4136,18 +8518,21 @@ BattleScript_PSNPrevention::
BattleScript_ObliviousPreventsAttraction::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNPREVENTSROMANCEWITH
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_FlinchPrevention::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNSXPREVENTSFLINCHING
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_OwnTempoPrevents::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNPREVENTSCONFUSIONWITH
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
@@ -4156,29 +8541,279 @@ BattleScript_SoundproofProtected::
attackstring
ppreduce
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNSXBLOCKSY
waitmessage B_WAIT_TIME_LONG
+ orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
+ goto BattleScript_MoveEnd
+
+BattleScript_DazzlingProtected::
+ attackstring
+ ppreduce
+ pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_POKEMONCANNOTUSEMOVE
+ waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
+BattleScript_MoveUsedPsychicTerrainPrevents::
+ printstring STRINGID_POKEMONCANNOTUSEMOVE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_MoveEnd
+
+BattleScript_GrassyTerrainHeals::
+ setbyte gBattleCommunication, 0
+BattleScript_GrassyTerrainLoop:
+ copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1
+ checkgrassyterrainheal BS_ATTACKER, BattleScript_GrassyTerrainLoopIncrement
+ printstring STRINGID_GRASSYTERRAINHEALS
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_GrassyTerrainHpChange:
+ orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+BattleScript_GrassyTerrainLoopIncrement::
+ addbyte gBattleCommunication, 1
+ jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_GrassyTerrainLoop
+BattleScript_GrassyTerrainLoopEnd::
+ bicword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_PERMANENT, BattleScript_GrassyTerrainHealEnd
+ jumpifbyte CMP_EQUAL, gFieldTimers + 5, 0, BattleScript_GrassyTerrainEnds
+BattleScript_GrassyTerrainHealEnd:
+ end2
+
BattleScript_AbilityNoSpecificStatLoss::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
+BattleScript_AbilityNoSpecificStatLossPrint:
printstring STRINGID_PKMNSXPREVENTSYLOSS
waitmessage B_WAIT_TIME_LONG
setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY
+ orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
return
BattleScript_StickyHoldActivates::
pause B_WAIT_TIME_SHORT
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNSXMADEYINEFFECTIVE
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_ColorChangeActivates::
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNCHANGEDTYPEWITH
waitmessage B_WAIT_TIME_LONG
return
-BattleScript_RoughSkinActivates::
+BattleScript_MimicryActivatesEnd3::
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_BATTLERTYPECHANGEDTO
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_ProteanActivates::
+ pause B_WAIT_TIME_SHORTEST
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_PKMNCHANGEDTYPE
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_CursedBodyActivates::
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_CUSEDBODYDISABLED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_MummyActivates::
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_ATTACKERACQUIREDABILITY
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_WanderingSpiritActivates::
+.if B_ABILITY_POP_UP == TRUE
+ setbyte sFIXED_ABILITY_POPUP, TRUE
+ sethword sABILITY_OVERWRITE, ABILITY_WANDERING_SPIRIT
+ showabilitypopup BS_TARGET
+ pause 60
+ sethword sABILITY_OVERWRITE, 0
+ updateabilitypopup BS_TARGET
+ pause 20
+ destroyabilitypopup
+ pause 40
+
+ setbyte sFIXED_ABILITY_POPUP, TRUE
+ copyhword sABILITY_OVERWRITE, gLastUsedAbility
+ showabilitypopup BS_ATTACKER
+ pause 60
+ sethword sABILITY_OVERWRITE, 0
+ updateabilitypopup BS_ATTACKER
+ pause 20
+ destroyabilitypopup
+ pause 40
+.endif
+ printstring STRINGID_SWAPPEDABILITIES
+ waitmessage B_WAIT_TIME_LONG
+ switchinabilities BS_ATTACKER
+ switchinabilities BS_TARGET
+ return
+
+BattleScript_TargetsStatWasMaxedOut::
+ call BattleScript_AbilityPopUp
+ statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printstring STRINGID_TARGETSSTATWASMAXEDOUT
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_BattlerAbilityStatRaiseOnSwitchIn::
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ waitanimation
+ printstring STRINGID_BATTLERABILITYRAISEDSTAT
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_TargetAbilityStatRaiseOnMoveEnd::
+ call BattleScript_AbilityPopUp
+ statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ waitanimation
+ printstring STRINGID_ABILITYRAISEDSTATDRASTICALLY
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_ScriptingAbilityStatRaise::
+ copybyte gBattlerAbility, sBATTLER
+ call BattleScript_AbilityPopUp
+ copybyte sSAVED_DMG, gBattlerAttacker
+ copybyte gBattlerAttacker, sBATTLER
+ statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL
+ setgraphicalstatchangevalues
+ playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ waitanimation
+ printstring STRINGID_ATTACKERABILITYSTATRAISE
+ waitmessage B_WAIT_TIME_LONG
+ copybyte gBattlerAttacker, sSAVED_DMG
+ return
+
+BattleScript_WeakArmorActivates::
+ call BattleScript_AbilityPopUp
+ setstatchanger STAT_DEF, 1, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesSpeed
+ jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_WeakArmorDefAnim
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_WeakArmorActivatesSpeed
+ pause B_WAIT_TIME_SHORTEST
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_WeakArmorActivatesSpeed
+BattleScript_WeakArmorDefAnim:
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printstring STRINGID_TARGETABILITYSTATLOWER
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_WeakArmorActivatesSpeed:
+ setstatchanger STAT_SPEED, 2, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd
+ jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeakArmorSpeedAnim
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd
+ pause B_WAIT_TIME_SHORTEST
+ printstring STRINGID_TARGETSTATWONTGOHIGHER
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_WeakArmorActivatesEnd
+BattleScript_WeakArmorSpeedAnim:
+ setgraphicalstatchangevalues
+ playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printstring STRINGID_TARGETABILITYSTATRAISE
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_WeakArmorActivatesEnd:
+ return
+
+BattleScript_RaiseStatOnFaintingTarget::
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ waitanimation
+ printstring STRINGID_LASTABILITYRAISEDSTAT
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_AttackerAbilityStatRaise::
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ waitanimation
+ printstring STRINGID_ATTACKERABILITYSTATRAISE
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_FellStingerRaisesStat::
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FellStingerRaisesAtkEnd
+ jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_FellStingerRaisesAtkEnd
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_FellStingerRaisesAtkEnd:
+ return
+
+BattleScript_AttackerAbilityStatRaiseEnd3::
+ call BattleScript_AttackerAbilityStatRaise
+ end3
+
+BattleScript_SwitchInAbilityMsg::
+ call BattleScript_AbilityPopUp
+ printfromtable gSwitchInAbilityStringIds
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_SwitchInAbilityMsgRet::
+ call BattleScript_AbilityPopUp
+ printfromtable gSwitchInAbilityStringIds
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_ActivateAsOne::
+ call BattleScript_AbilityPopUp
+ printfromtable gSwitchInAbilityStringIds
+ waitmessage B_WAIT_TIME_LONG
+ @ show unnerve
+ sethword sABILITY_OVERWRITE, ABILITY_UNNERVE
+ setbyte cMULTISTRING_CHOOSER, B_MSG_SWITCHIN_UNNERVE
+ call BattleScript_AbilityPopUp
+ printfromtable gSwitchInAbilityStringIds
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_FriskMsgWithPopup::
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+BattleScript_FriskMsg::
+ printstring STRINGID_FRISKACTIVATES
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_FriskActivates::
+ tryfriskmsg BS_ATTACKER
+ end3
+
+BattleScript_ImposterActivates::
+ transformdataexecution
+ call BattleScript_AbilityPopUp
+ playmoveanimation BS_ATTACKER, MOVE_TRANSFORM
+ waitanimation
+ printstring STRINGID_IMPOSTERTRANSFORM
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_HurtAttacker:
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
@@ -4187,19 +8822,94 @@ BattleScript_RoughSkinActivates::
tryfaintmon BS_ATTACKER
return
+BattleScript_RoughSkinActivates::
+ call BattleScript_AbilityPopUp
+ call BattleScript_HurtAttacker
+ return
+
+BattleScript_RockyHelmetActivates::
+ @ don't play the animation for a fainted mon
+ jumpifabsent BS_TARGET, BattleScript_RockyHelmetActivatesDmg
+ playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+BattleScript_RockyHelmetActivatesDmg:
+ call BattleScript_HurtAttacker
+ return
+
+BattleScript_SpikyShieldEffect::
+ jumpifabsent BS_ATTACKER, BattleScript_SpikyShieldRet
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ printstring STRINGID_PKMNHURTSWITH
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_ATTACKER
+BattleScript_SpikyShieldRet::
+ return
+
+BattleScript_KingsShieldEffect::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
+ seteffectsecondary
+ setmoveeffect 0
+ copybyte sBATTLER, gBattlerTarget
+ copybyte gBattlerTarget, gBattlerAttacker
+ copybyte gBattlerAttacker, sBATTLER
+ return
+
+BattleScript_BanefulBunkerEffect::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_PASSIVE_DAMAGE
+ bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
+ seteffectsecondary
+ setmoveeffect 0
+ return
+
BattleScript_CuteCharmActivates::
+ call BattleScript_AbilityPopUp
status2animation BS_ATTACKER, STATUS2_INFATUATION
printstring STRINGID_PKMNSXINFATUATEDY
waitmessage B_WAIT_TIME_LONG
+ call BattleScript_TryDestinyKnotTarget
return
-BattleScript_ApplySecondaryEffect::
+BattleScript_GooeyActivates::
waitstate
+ call BattleScript_AbilityPopUp
+ swapattackerwithtarget @ for defiant, mirror armor
seteffectsecondary
return
+BattleScript_AbilityStatusEffect::
+ waitstate
+ call BattleScript_AbilityPopUp
+ seteffectsecondary
+ return
+
+BattleScript_BattleBondActivatesOnMoveEndAttacker::
+ pause 5
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_ATTACKERBECAMEFULLYCHARGED
+ handleformchange BS_ATTACKER, 0
+ handleformchange BS_ATTACKER, 1
+ playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE
+ waitanimation
+ handleformchange BS_ATTACKER, 2
+ printstring STRINGID_ATTACKERBECAMEASHSPECIES
+ return
+
+BattleScript_DancerActivates::
+ call BattleScript_AbilityPopUp
+ waitmessage B_WAIT_TIME_SHORT
+ setbyte sB_ANIM_TURN, 0
+ setbyte sB_ANIM_TARGETS_HIT, 0
+ orword gHitMarker, HITMARKER_ALLOW_NO_PP
+ jumptocalledmove TRUE
+
BattleScript_SynchronizeActivates::
waitstate
+ call BattleScript_AbilityPopUp
seteffectprimary
return
@@ -4210,11 +8920,24 @@ BattleScript_NoItemSteal::
return
BattleScript_AbilityCuredStatus::
+ call BattleScript_AbilityPopUp
printstring STRINGID_PKMNSXCUREDITSYPROBLEM
waitmessage B_WAIT_TIME_LONG
updatestatusicon BS_SCRIPTING
return
+BattleScript_BattlerShookOffTaunt::
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_PKMNSHOOKOFFTHETAUNT
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_BattlerGotOverItsInfatuation::
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_PKMNGOTOVERITSINFATUATION
+ waitmessage B_WAIT_TIME_LONG
+ return
+
BattleScript_IgnoresWhileAsleep::
printstring STRINGID_PKMNIGNORESASLEEP
waitmessage B_WAIT_TIME_LONG
@@ -4227,6 +8950,7 @@ BattleScript_IgnoresAndUsesRandomMove::
jumptocalledmove FALSE
BattleScript_MoveUsedLoafingAround::
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_LOAFING, BattleScript_MoveUsedLoafingAroundMsg
@ Skip ahead if not the Battle Palace message
jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_INCAPABLE_OF_POWER, BattleScript_MoveUsedLoafingAroundMsg
setbyte gBattleCommunication, 0
@@ -4237,6 +8961,9 @@ BattleScript_MoveUsedLoafingAroundMsg::
waitmessage B_WAIT_TIME_LONG
moveendto MOVEEND_NEXT_TARGET
end
+BattleScript_TruantLoafingAround::
+ call BattleScript_AbilityPopUp
+ goto BattleScript_MoveUsedLoafingAroundMsg
BattleScript_IgnoresAndFallsAsleep::
printstring STRINGID_PKMNBEGANTONAP
@@ -4316,6 +9043,28 @@ BattleScript_BerryCureSlpRet::
removeitem BS_SCRIPTING
return
+BattleScript_GemActivates::
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+ printstring STRINGID_GEMACTIVATES
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_ATTACKER
+ return
+
+BattleScript_BerryReduceDmg::
+ playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+ printstring STRINGID_TARGETATEITEM
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_TARGET
+ return
+
+BattleScript_PrintBerryReduceString::
+ waitmessage B_WAIT_TIME_LONG
+ printstring STRINGID_BERRYDMGREDUCES
+ waitmessage B_WAIT_TIME_LONG
+ return
+
BattleScript_BerryCureConfusionEnd2::
call BattleScript_BerryCureConfusionRet
end2
@@ -4339,6 +9088,19 @@ BattleScript_BerryCureChosenStatusRet::
removeitem BS_SCRIPTING
return
+BattleScript_MentalHerbCureRet::
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
+ printfromtable gMentalHerbCureStringIds
+ waitmessage B_WAIT_TIME_LONG
+ updatestatusicon BS_SCRIPTING
+ removeitem BS_SCRIPTING
+ copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe
+ return
+
+BattleScript_MentalHerbCureEnd2::
+ call BattleScript_MentalHerbCureRet
+ end2
+
BattleScript_WhiteHerbEnd2::
call BattleScript_WhiteHerbRet
end2
@@ -4350,17 +9112,42 @@ BattleScript_WhiteHerbRet::
removeitem BS_SCRIPTING
return
-BattleScript_ItemHealHP_RemoveItem::
+BattleScript_ItemHealHP_RemoveItemRet::
+ jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp
+ goto BattleScript_ItemHealHP_RemoveItemRet_Anim
+BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp:
+ call BattleScript_AbilityPopUp
+BattleScript_ItemHealHP_RemoveItemRet_Anim:
+ playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT
+ printstring STRINGID_PKMNSITEMRESTOREDHEALTH
+ waitmessage B_WAIT_TIME_LONG
+ orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ healthbarupdate BS_SCRIPTING
+ datahpupdate BS_SCRIPTING
+ removeitem BS_SCRIPTING
+ return
+
+BattleScript_ItemHealHP_RemoveItemEnd2::
+ jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_ItemHealHP_RemoveItemEnd2_AbilityPopUp
+ goto BattleScript_ItemHealHP_RemoveItemEnd2_Anim
+BattleScript_ItemHealHP_RemoveItemEnd2_AbilityPopUp:
+ call BattleScript_AbilityPopUp
+BattleScript_ItemHealHP_RemoveItemEnd2_Anim:
playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
printstring STRINGID_PKMNSITEMRESTOREDHEALTH
waitmessage B_WAIT_TIME_LONG
- orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
removeitem BS_ATTACKER
end2
BattleScript_BerryPPHealEnd2::
+ jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryPPHealEnd2_AbilityPopup
+ goto BattleScript_BerryPPHealEnd2_Anim
+BattleScript_BerryPPHealEnd2_AbilityPopup:
+ call BattleScript_AbilityPopUp
+BattleScript_BerryPPHealEnd2_Anim:
playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
printstring STRINGID_PKMNSITEMRESTOREDPP
waitmessage B_WAIT_TIME_LONG
@@ -4371,11 +9158,37 @@ BattleScript_ItemHealHP_End2::
call BattleScript_ItemHealHP_Ret
end2
+BattleScript_AirBaloonMsgIn::
+ printstring STRINGID_AIRBALLOONFLOAT
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_AirBaloonMsgPop::
+ printstring STRINGID_AIRBALLOONPOP
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_TARGET
+ return
+
+BattleScript_ItemHurtRet::
+ orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE
+ healthbarupdate BS_ATTACKER
+ datahpupdate BS_ATTACKER
+ printstring STRINGID_HURTBYITEM
+ waitmessage B_WAIT_TIME_LONG
+ tryfaintmon BS_ATTACKER
+ return
+
+BattleScript_ItemHurtEnd2::
+ playanimation BS_ATTACKER, B_ANIM_MON_HIT
+ waitanimation
+ call BattleScript_ItemHurtRet
+ end2
+
BattleScript_ItemHealHP_Ret::
playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
printstring STRINGID_PKMNSITEMRESTOREDHPALITTLE
waitmessage B_WAIT_TIME_LONG
- orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
+ orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
return
@@ -4384,35 +9197,91 @@ BattleScript_SelectingNotAllowedMoveChoiceItem::
printselectionstring STRINGID_ITEMALLOWSONLYYMOVE
endselectionscript
-BattleScript_FocusBandActivates::
- playanimation BS_TARGET, B_ANIM_FOCUS_BAND
+BattleScript_SelectingNotAllowedMoveGorillaTactics::
+ printselectionstring STRINGID_ABILITYALLOWSONLYMOVE
+ endselectionscript
+
+BattleScript_SelectingNotAllowedMoveAssaultVest::
+ printselectionstring STRINGID_ASSAULTVESTDOESNTALLOW
+ endselectionscript
+
+BattleScript_HangedOnMsg::
+ playanimation BS_TARGET, B_ANIM_HANGED_ON
printstring STRINGID_PKMNHUNGONWITHX
waitmessage B_WAIT_TIME_LONG
+ jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_FOCUS_SASH, BattleScript_HangedOnMsgRet
+ removeitem BS_TARGET
+BattleScript_HangedOnMsgRet:
return
BattleScript_BerryConfuseHealEnd2::
- playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
+ jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryConfuseHealEnd2_AbilityPopup
+ goto BattleScript_BerryConfuseHealEnd2_Anim
+BattleScript_BerryConfuseHealEnd2_AbilityPopup:
+ call BattleScript_AbilityPopUp
+BattleScript_BerryConfuseHealEnd2_Anim:
+ playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT
printstring STRINGID_PKMNSITEMRESTOREDHEALTH
waitmessage B_WAIT_TIME_LONG
- orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
- healthbarupdate BS_ATTACKER
- datahpupdate BS_ATTACKER
+ orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ healthbarupdate BS_SCRIPTING
+ datahpupdate BS_SCRIPTING
printstring STRINGID_FORXCOMMAYZ
waitmessage B_WAIT_TIME_LONG
setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER
seteffectprimary
- removeitem BS_ATTACKER
+ removeitem BS_SCRIPTING
end2
+BattleScript_BerryConfuseHealRet::
+ jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryConfuseHealRet_AbilityPopup
+ goto BattleScript_BerryConfuseHealRet_Anim
+BattleScript_BerryConfuseHealRet_AbilityPopup:
+ call BattleScript_AbilityPopUp
+BattleScript_BerryConfuseHealRet_Anim:
+ playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT
+ printstring STRINGID_PKMNSITEMRESTOREDHEALTH
+ waitmessage B_WAIT_TIME_LONG
+ orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
+ healthbarupdate BS_SCRIPTING
+ datahpupdate BS_SCRIPTING
+ printstring STRINGID_FORXCOMMAYZ
+ waitmessage B_WAIT_TIME_LONG
+ setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN
+ seteffectprimary
+ removeitem BS_TARGET
+ return
+
BattleScript_BerryStatRaiseEnd2::
- playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
- statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_BUFF_ALLOW_PTR, BattleScript_BerryStatRaiseDoStatUp
-BattleScript_BerryStatRaiseDoStatUp::
+ jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryStatRaiseEnd2_AbilityPopup
+ goto BattleScript_BerryStatRaiseEnd2_Anim
+BattleScript_BerryStatRaiseEnd2_AbilityPopup:
+ call BattleScript_AbilityPopUp
+BattleScript_BerryStatRaiseEnd2_Anim:
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseEnd2_End
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1
setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM
call BattleScript_StatUp
removeitem BS_ATTACKER
+BattleScript_BerryStatRaiseEnd2_End::
end2
+BattleScript_BerryStatRaiseRet::
+ jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryStatRaiseRet_AbilityPopup
+ goto BattleScript_BerryStatRaiseRet_Anim
+BattleScript_BerryStatRaiseRet_AbilityPopup:
+ call BattleScript_AbilityPopUp
+BattleScript_BerryStatRaiseRet_Anim:
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseRet_End
+ setgraphicalstatchangevalues
+ playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1
+ setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM
+ call BattleScript_StatUp
+ removeitem BS_SCRIPTING
+BattleScript_BerryStatRaiseRet_End:
+ return
+
BattleScript_BerryFocusEnergyEnd2::
playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
printstring STRINGID_PKMNUSEDXTOGETPUMPED
@@ -4480,7 +9349,7 @@ BattleScript_ArenaDoJudgment::
arenajudgmentstring B_MSG_REF_THATS_IT
arenawaitmessage B_MSG_REF_THATS_IT
pause B_WAIT_TIME_LONG
- setbyte gBattleCommunication, 0
+ setbyte gBattleCommunication, 0 @ Reset state for arenajudgmentwindow
arenajudgmentwindow
pause B_WAIT_TIME_LONG
arenajudgmentwindow
@@ -4493,8 +9362,9 @@ BattleScript_ArenaDoJudgment::
arenajudgmentstring B_MSG_REF_JUDGE_BODY
arenawaitmessage B_MSG_REF_JUDGE_BODY
arenajudgmentwindow
- jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 3, BattleScript_ArenaJudgmentPlayerLoses
- jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 4, BattleScript_ArenaJudgmentDraw
+ jumpifbyte CMP_EQUAL, gBattleCommunication + 1, ARENA_RESULT_PLAYER_LOST, BattleScript_ArenaJudgmentPlayerLoses
+ jumpifbyte CMP_EQUAL, gBattleCommunication + 1, ARENA_RESULT_TIE, BattleScript_ArenaJudgmentDraw
+@ ARENA_RESULT_PLAYER_WON
arenajudgmentstring B_MSG_REF_PLAYER_WON
arenawaitmessage B_MSG_REF_PLAYER_WON
arenajudgmentwindow
@@ -4556,3 +9426,351 @@ BattleScript_PrintPlayerForfeitedLinkBattle::
endlinkbattle
waitmessage B_WAIT_TIME_LONG
end2
+
+BattleScript_TotemFlaredToLife::
+ playanimation BS_ATTACKER, B_ANIM_TOTEM_FLARE
+ printstring STRINGID_AURAFLAREDTOLIFE
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_ApplyTotemVarBoost
+
+BattleScript_TotemVar::
+ gettotemboost BattleScript_ApplyTotemVarBoost
+BattleScript_TotemVarEnd:
+ end2
+BattleScript_ApplyTotemVarBoost:
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TotemVarEnd
+ setgraphicalstatchangevalues
+ playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_TotemVarPrintStatMsg:
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+ goto BattleScript_TotemVar @loop until stats bitfield is empty
+
+BattleScript_AnnounceAirLockCloudNine::
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_AIRLOCKACTIVATES
+ waitmessage B_WAIT_TIME_LONG
+ call BattleScript_WeatherFormChanges
+ end3
+
+BattleScript_QuickClawActivation::
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+ printstring STRINGID_CANACTFASTERTHANKSTO
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_QuickDrawActivation::
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_CANACTFASTERTHANKSTO
+ waitmessage B_WAIT_TIME_LONG
+ end2
+
+BattleScript_CustapBerryActivation::
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+ printstring STRINGID_CANACTFASTERTHANKSTO
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_ATTACKER
+ end2
+
+BattleScript_MicleBerryActivateEnd2::
+ jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_MicleBerryActivateEnd2_Ripen
+ goto BattleScript_MicleBerryActivateEnd2_Anim
+BattleScript_MicleBerryActivateEnd2_Ripen:
+ call BattleScript_AbilityPopUp
+BattleScript_MicleBerryActivateEnd2_Anim:
+ playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
+ printstring STRINGID_MICLEBERRYACTIVATES
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_ATTACKER
+ end2
+
+BattleScript_MicleBerryActivateRet::
+ jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_MicleBerryActivateRet_Ripen
+ goto BattleScript_MicleBerryActivateRet_Anim
+BattleScript_MicleBerryActivateRet_Ripen:
+ call BattleScript_AbilityPopUp
+BattleScript_MicleBerryActivateRet_Anim:
+ playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT
+ printstring STRINGID_MICLEBERRYACTIVATES
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_SCRIPTING
+ return
+
+BattleScript_JabocaRowapBerryActivates::
+ jumpifability BS_TARGET, ABILITY_RIPEN, BattleScript_JabocaRowapBerryActivate_Ripen
+ goto BattleScript_JabocaRowapBerryActivate_Anim
+BattleScript_JabocaRowapBerryActivate_Ripen:
+ call BattleScript_AbilityPopUp
+BattleScript_JabocaRowapBerryActivate_Anim:
+ jumpifabsent BS_TARGET, BattleScript_JabocaRowapBerryActivate_Dmg @ dont play the animation for a fainted target
+ playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT
+ waitanimation
+BattleScript_JabocaRowapBerryActivate_Dmg:
+ call BattleScript_HurtAttacker
+ removeitem BS_TARGET
+ return
+
+@ z moves / effects
+BattleScript_ZMoveActivateDamaging::
+ printstring STRINGID_ZPOWERSURROUNDS
+ playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL
+ printstring STRINGID_ZMOVEUNLEASHED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_ZMoveActivateStatus::
+ savetarget
+ printstring STRINGID_ZPOWERSURROUNDS
+ playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL
+ setzeffect
+ restoretarget
+ copybyte sSTATCHANGER, sSAVED_STAT_CHANGER
+ return
+
+BattleScript_ZEffectPrintString::
+ printfromtable gZEffectStringIds
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_RecoverHPZMove::
+ healthbarupdate BS_SCRIPTING
+ datahpupdate BS_SCRIPTING
+ printfromtable gZEffectStringIds
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_StatUpZMove::
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StatUpZMoveEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpZMoveEnd
+ setgraphicalstatchangevalues
+ playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ printstring STRINGID_ZMOVESTATUP
+ waitmessage B_WAIT_TIME_LONG
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_StatUpZMoveEnd:
+ return
+
+BattleScript_HealReplacementZMove::
+ playanimation BS_SCRIPTING B_ANIM_WISH_HEAL 0x0
+ printfromtable gZEffectStringIds
+ waitmessage B_WAIT_TIME_LONG
+ healthbarupdate BS_SCRIPTING
+ datahpupdate BS_SCRIPTING
+ return
+
+BattleScript_EffectExtremeEvoboost::
+ attackcanceler
+ attackstring
+ ppreduce
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim
+ jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim
+ goto BattleScript_ButItFailed
+BattleScript_ExtremeEvoboostAnim:
+ attackanimation
+ waitanimation
+BattleScript_ExtremeEvoboostAtk::
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0x0
+ setstatchanger STAT_ATK, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ExtremeEvoboostDef::
+ setstatchanger STAT_DEF, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpeed
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ExtremeEvoboostSpeed::
+ setstatchanger STAT_SPEED, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpAtk
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ExtremeEvoboostSpAtk::
+ setstatchanger STAT_SPATK, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpDef
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ExtremeEvoboostSpDef::
+ setstatchanger STAT_SPDEF, 2, FALSE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostEnd
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ExtremeEvoboostEnd::
+ goto BattleScript_MoveEnd
+
+BattleScript_EffectTerrainHit:
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ critcalc
+ damagecalc
+ adjustdamage
+ attackanimation
+ waitanimation
+ effectivenesssound
+ hitanimation BS_TARGET
+ waitstate
+ healthbarupdate BS_TARGET
+ datahpupdate BS_TARGET
+ critmessage
+ waitmessage B_WAIT_TIME_LONG
+ resultmessage
+ waitmessage B_WAIT_TIME_LONG
+ setterrain BattleScript_TryFaint
+ playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
+ printfromtable gTerrainStringIds
+BattleScript_TryFaint:
+ tryfaintmon BS_TARGET
+ goto BattleScript_MoveEnd
+
+BattleScript_Pickpocket::
+ call BattleScript_AbilityPopUp
+ jumpifability BS_ATTACKER, ABILITY_STICKY_HOLD, BattleScript_PickpocketPrevented
+ swapattackerwithtarget
+ call BattleScript_ItemSteal
+ swapattackerwithtarget
+ activateitemeffects BS_TARGET
+ return
+
+BattleScript_PickpocketPrevented:
+ pause B_WAIT_TIME_SHORT
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_ITEMCANNOTBEREMOVED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_StickyBarbTransfer::
+ playanimation BS_TARGET, B_ANIM_ITEM_STEAL
+ printstring STRINGID_STICKYBARBTRANSFER
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_TARGET
+ return
+
+BattleScript_RedCardActivates::
+ playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT
+ printstring STRINGID_REDCARDACTIVATE
+ waitmessage B_WAIT_TIME_LONG
+ swapattackerwithtarget
+ jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_ROOTED, BattleScript_RedCardIngrain
+ jumpifability BS_EFFECT_BATTLER, ABILITY_SUCTION_CUPS, BattleScript_RedCardSuctionCups
+ setbyte sSWITCH_CASE, B_SWITCH_RED_CARD
+ forcerandomswitch BattleScript_RedCardEnd
+ @ changes the current battle script. the rest happens in BattleScript_RoarSuccessSwitch_Ret, if switch is successful
+BattleScript_RedCardEnd:
+ return
+BattleScript_RedCardIngrain:
+ printstring STRINGID_PKMNANCHOREDITSELF
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_SCRIPTING
+ swapattackerwithtarget
+ return
+BattleScript_RedCardSuctionCups:
+ printstring STRINGID_PKMNANCHORSITSELFWITH
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_SCRIPTING
+ swapattackerwithtarget
+ return
+
+BattleScript_EjectButtonActivates::
+ makevisible BS_ATTACKER
+ playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT
+ printstring STRINGID_EJECTBUTTONACTIVATE
+ waitmessage B_WAIT_TIME_LONG
+ removeitem BS_SCRIPTING
+ makeinvisible BS_SCRIPTING
+ openpartyscreen BS_SCRIPTING, BattleScript_EjectButtonEnd
+ switchoutabilities BS_SCRIPTING
+ waitstate
+ switchhandleorder BS_SCRIPTING 0x2
+ returntoball BS_SCRIPTING
+ getswitchedmondata BS_SCRIPTING
+ switchindataupdate BS_SCRIPTING
+ hpthresholds BS_SCRIPTING
+ trytoclearprimalweather
+ printstring STRINGID_EMPTYSTRING3
+ waitmessage 1
+ printstring 0x3
+ switchinanim BS_SCRIPTING 0x1
+ waitstate
+ switchineffects BS_SCRIPTING
+BattleScript_EjectButtonEnd:
+ return
+
+BattleScript_EjectPackActivate_Ret::
+ goto BattleScript_EjectButtonActivates
+
+BattleScript_EjectPackActivate_End2::
+ call BattleScript_EjectPackActivate_Ret
+ end2
+
+BattleScript_EjectPackActivates::
+ jumpifcantswitch BS_SCRIPTING, BattleScript_EjectButtonEnd
+ goto BattleScript_EjectPackActivate_Ret
+
+BattleScript_DarkTypePreventsPrankster::
+ attackstring
+ ppreduce
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_ITDOESNTAFFECT
+ waitmessage B_WAIT_TIME_LONG
+ orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
+ goto BattleScript_MoveEnd
+
+BattleScript_PastelVeilActivates::
+ setbyte gBattleCommunication, 0
+ setbyte gBattleCommunication + 1, 0
+BattleScript_PastelVeil_TryCurePoison:
+ jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_PastelVeilCurePoison
+ goto BattleScript_PastelVeilLoopIncrement
+BattleScript_PastelVeilCurePoison:
+ jumpifbyte CMP_NOT_EQUAL, gBattleCommunication + 1, 0x0, BattleScript_PastelVeilCurePoisonNoPopUp
+ call BattleScript_AbilityPopUp
+ setbyte gBattleCommunication + 1, 1
+BattleScript_PastelVeilCurePoisonNoPopUp: @ Only show Pastel Veil pop up once if it cures two mons
+ printfromtable gSwitchInAbilityStringIds
+ waitmessage B_WAIT_TIME_LONG
+ curestatus BS_TARGET
+ updatestatusicon BS_TARGET
+BattleScript_PastelVeilLoopIncrement:
+ jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_PastelVeilEnd
+ addbyte gBattleCommunication, 1
+ jumpifnoally BS_TARGET, BattleScript_PastelVeilEnd
+ setallytonexttarget BattleScript_PastelVeil_TryCurePoison
+ goto BattleScript_PastelVeilEnd
+BattleScript_PastelVeilEnd:
+ end3
+
+sByteFour:
+.byte MAX_BATTLERS_COUNT
+
+BattleScript_NeutralizingGasExits::
+ savetarget
+ pause B_WAIT_TIME_SHORT
+ printstring STRINGID_NEUTRALIZINGGASOVER
+ waitmessage B_WAIT_TIME_LONG
+ setbyte gBattlerTarget, 0
+BattleScript_NeutralizingGasExitsLoop:
+ switchinabilities BS_TARGET
+ addbyte gBattlerTarget, 1
+ jumpifbytenotequal gBattlerTarget, sByteFour, BattleScript_NeutralizingGasExitsLoop @ SOMEHOW, comparing to gBattlersCount is problematic.
+ restoretarget
+ return
+
+BattleScript_MagicianActivates::
+ call BattleScript_AbilityPopUp
+ call BattleScript_ItemSteal
+ return
diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s
index b7f0f693fb..c1dfde61d8 100644
--- a/data/battle_scripts_2.s
+++ b/data/battle_scripts_2.s
@@ -2,6 +2,7 @@
#include "constants/battle_script_commands.h"
#include "constants/battle_anim.h"
#include "constants/battle_string_ids.h"
+#include "constants/battle_config.h"
#include "constants/items.h"
#include "constants/songs.h"
#include "constants/game_stat.h"
@@ -11,22 +12,6 @@
.section script_data, "aw", %progbits
- .align 2
-gBattlescriptsForBallThrow::
- .4byte BattleScript_BallThrow @ ITEM_NONE
- .4byte BattleScript_BallThrow @ ITEM_MASTER_BALL
- .4byte BattleScript_BallThrow @ ITEM_ULTRA_BALL
- .4byte BattleScript_BallThrow @ ITEM_GREAT_BALL
- .4byte BattleScript_BallThrow @ ITEM_POKE_BALL
- .4byte BattleScript_SafariBallThrow @ ITEM_SAFARI_BALL
- .4byte BattleScript_BallThrow @ ITEM_NET_BALL
- .4byte BattleScript_BallThrow @ ITEM_DIVE_BALL
- .4byte BattleScript_BallThrow @ ITEM_NEST_BALL
- .4byte BattleScript_BallThrow @ ITEM_REPEAT_BALL
- .4byte BattleScript_BallThrow @ ITEM_TIMER_BALL
- .4byte BattleScript_BallThrow @ ITEM_LUXURY_BALL
- .4byte BattleScript_BallThrow @ ITEM_PREMIER_BALL
-
.align 2
gBattlescriptsForUsingItem::
.4byte BattleScript_PlayerUsesItem
@@ -62,10 +47,15 @@ BattleScript_SafariBallThrow::
handleballthrow
BattleScript_SuccessBallThrow::
- jumpifhalfword CMP_EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo
+ setbyte sMON_CAUGHT, TRUE
incrementgamestat GAME_STAT_POKEMON_CAPTURES
BattleScript_PrintCaughtMonInfo::
printstring STRINGID_GOTCHAPKMNCAUGHT
+ jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo
+ setbyte sGIVEEXP_STATE, 0
+ getexp BS_TARGET
+ sethword gBattle_BG2_X, 0
+BattleScript_TryPrintCaughtMonInfo:
trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon
printstring STRINGID_PKMNDATAADDEDTODEX
waitstate
@@ -120,6 +110,7 @@ BattleScript_OpponentUsesHealItem::
playse SE_USE_ITEM
printstring STRINGID_TRAINER1USEDITEM
waitmessage B_WAIT_TIME_LONG
+ bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT
useitemonopponent
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_ATTACKER
@@ -200,3 +191,17 @@ BattleScript_ActionWallyThrow:
printstring STRINGID_YOUTHROWABALLNOWRIGHT
waitmessage B_WAIT_TIME_LONG
end2
+
+BattleScript_TrainerSlideMsgRet::
+ handletrainerslidemsg BS_SCRIPTING, 0
+ trainerslidein 1
+ handletrainerslidemsg BS_SCRIPTING, 1
+ waitstate
+ trainerslideout 1
+ handletrainerslidemsg BS_SCRIPTING, 2
+ waitstate
+ return
+
+BattleScript_TrainerSlideMsgEnd2::
+ call BattleScript_TrainerSlideMsgRet
+ end2
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 1f3db6aa2b..7c3a2b23f9 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -2,6 +2,7 @@
#include "constants/apprentice.h"
#include "constants/battle.h"
#include "constants/battle_arena.h"
+#include "constants/battle_config.h"
#include "constants/battle_dome.h"
#include "constants/battle_factory.h"
#include "constants/battle_frontier.h"
diff --git a/data/maps/AbandonedShip_HiddenFloorCorridors/scripts.inc b/data/maps/AbandonedShip_HiddenFloorCorridors/scripts.inc
index dade6a516e..23f4573b9b 100644
--- a/data/maps/AbandonedShip_HiddenFloorCorridors/scripts.inc
+++ b/data/maps/AbandonedShip_HiddenFloorCorridors/scripts.inc
@@ -53,11 +53,11 @@ AbandonedShip_HiddenFloorCorridors_EventScript_LockRoom6::
AbandonedShip_HiddenFloorCorridors_EventScript_Room1Door::
lockall
goto_if_set FLAG_USED_ROOM_1_KEY, AbandonedShip_HiddenFloorCorridors_EventScript_TheDoorIsOpen
- checkitem ITEM_ROOM_1_KEY
+ checkitem ITEM_KEY_TO_ROOM_1
goto_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorCorridors_EventScript_Rm1IsLocked
msgbox AbandonedShip_HiddenFloorCorridors_Text_InsertedKey, MSGBOX_DEFAULT
playse SE_PIN
- removeitem ITEM_ROOM_1_KEY
+ removeitem ITEM_KEY_TO_ROOM_1
setflag FLAG_USED_ROOM_1_KEY
call AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom1
special DrawWholeMapView
@@ -67,11 +67,11 @@ AbandonedShip_HiddenFloorCorridors_EventScript_Room1Door::
AbandonedShip_HiddenFloorCorridors_EventScript_Room2Door::
lockall
goto_if_set FLAG_USED_ROOM_2_KEY, AbandonedShip_HiddenFloorCorridors_EventScript_TheDoorIsOpen
- checkitem ITEM_ROOM_2_KEY
+ checkitem ITEM_KEY_TO_ROOM_2
goto_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorCorridors_EventScript_Rm2IsLocked
msgbox AbandonedShip_HiddenFloorCorridors_Text_InsertedKey, MSGBOX_DEFAULT
playse SE_PIN
- removeitem ITEM_ROOM_2_KEY
+ removeitem ITEM_KEY_TO_ROOM_2
setflag FLAG_USED_ROOM_2_KEY
call AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom2
special DrawWholeMapView
@@ -81,11 +81,11 @@ AbandonedShip_HiddenFloorCorridors_EventScript_Room2Door::
AbandonedShip_HiddenFloorCorridors_EventScript_Room4Door::
lockall
goto_if_set FLAG_USED_ROOM_4_KEY, AbandonedShip_HiddenFloorCorridors_EventScript_TheDoorIsOpen
- checkitem ITEM_ROOM_4_KEY
+ checkitem ITEM_KEY_TO_ROOM_4
goto_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorCorridors_EventScript_Rm4IsLocked
msgbox AbandonedShip_HiddenFloorCorridors_Text_InsertedKey, MSGBOX_DEFAULT
playse SE_PIN
- removeitem ITEM_ROOM_4_KEY
+ removeitem ITEM_KEY_TO_ROOM_4
setflag FLAG_USED_ROOM_4_KEY
call AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom4
special DrawWholeMapView
@@ -95,11 +95,11 @@ AbandonedShip_HiddenFloorCorridors_EventScript_Room4Door::
AbandonedShip_HiddenFloorCorridors_EventScript_Room6Door::
lockall
goto_if_set FLAG_USED_ROOM_6_KEY, AbandonedShip_HiddenFloorCorridors_EventScript_TheDoorIsOpen
- checkitem ITEM_ROOM_6_KEY
+ checkitem ITEM_KEY_TO_ROOM_6
goto_if_eq VAR_RESULT, FALSE, AbandonedShip_HiddenFloorCorridors_EventScript_Rm6IsLocked
msgbox AbandonedShip_HiddenFloorCorridors_Text_InsertedKey, MSGBOX_DEFAULT
playse SE_PIN
- removeitem ITEM_ROOM_6_KEY
+ removeitem ITEM_KEY_TO_ROOM_6
setflag FLAG_USED_ROOM_6_KEY
call AbandonedShip_HiddenFloorCorridors_EventScript_UnlockRoom6
special DrawWholeMapView
diff --git a/data/maps/AbandonedShip_HiddenFloorRooms/map.json b/data/maps/AbandonedShip_HiddenFloorRooms/map.json
index b81c33c843..8b6e05f12f 100644
--- a/data/maps/AbandonedShip_HiddenFloorRooms/map.json
+++ b/data/maps/AbandonedShip_HiddenFloorRooms/map.json
@@ -139,7 +139,7 @@
"x": 42,
"y": 10,
"elevation": 3,
- "item": "ITEM_ROOM_1_KEY",
+ "item": "ITEM_KEY_TO_ROOM_1",
"flag": "FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY"
},
{
@@ -147,7 +147,7 @@
"x": 20,
"y": 5,
"elevation": 3,
- "item": "ITEM_ROOM_2_KEY",
+ "item": "ITEM_KEY_TO_ROOM_2",
"flag": "FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY"
},
{
@@ -155,7 +155,7 @@
"x": 1,
"y": 12,
"elevation": 3,
- "item": "ITEM_ROOM_4_KEY",
+ "item": "ITEM_KEY_TO_ROOM_4",
"flag": "FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY"
},
{
@@ -163,7 +163,7 @@
"x": 1,
"y": 2,
"elevation": 0,
- "item": "ITEM_ROOM_6_KEY",
+ "item": "ITEM_KEY_TO_ROOM_6",
"flag": "FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY"
},
{
diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc
index 481f7000db..2a8903fe6f 100644
--- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc
@@ -472,8 +472,8 @@ BattleFrontier_BattlePalaceLobby_Text_FeatWillBeRecorded:
@ Unused
BattleFrontier_BattlePalaceLobby_Text_BattlePointsFor7WinStreak:
- .string "For the feat of your 7-win streak,\n"
- .string "we present you with Battle Point(s).$"
+ .string "For the feat of your 7-win streak,\n"
+ .string "we present you with Battle Point(s).$"
BattleFrontier_BattlePalaceLobby_Text_NoSpaceForPrize:
.string "You seem to have no space for\n"
diff --git a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc
index 1039422808..f9723ffa0f 100644
--- a/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc
+++ b/data/maps/EverGrandeCity_ChampionsRoom/scripts.inc
@@ -33,8 +33,8 @@ EverGrandeCity_ChampionsRoom_EventScript_EnterRoom::
waitmovement 0
setvar VAR_TEMP_1, 1
goto EverGrandeCity_ChampionsRoom_EventScript_Wallace
- releaseall
- end
+ releaseall
+ end
EverGrandeCity_ChampionsRoom_Movement_PlayerApproachWallace:
walk_up
diff --git a/data/maps/FallarborTown_Mart/scripts.inc b/data/maps/FallarborTown_Mart/scripts.inc
index cb92f28f52..27c8cc1e70 100644
--- a/data/maps/FallarborTown_Mart/scripts.inc
+++ b/data/maps/FallarborTown_Mart/scripts.inc
@@ -19,10 +19,10 @@ FallarborTown_Mart_Pokemart:
.2byte ITEM_PARALYZE_HEAL
.2byte ITEM_ESCAPE_ROPE
.2byte ITEM_SUPER_REPEL
- .2byte ITEM_X_SPECIAL
+ .2byte ITEM_X_SP_ATK
.2byte ITEM_X_SPEED
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_DIRE_HIT
.2byte ITEM_GUARD_SPEC
.2byte ITEM_NONE
diff --git a/data/maps/FortreeCity_DecorationShop/scripts.inc b/data/maps/FortreeCity_DecorationShop/scripts.inc
index a42f47af73..4394312876 100644
--- a/data/maps/FortreeCity_DecorationShop/scripts.inc
+++ b/data/maps/FortreeCity_DecorationShop/scripts.inc
@@ -19,7 +19,7 @@ FortreeCity_DecorationShop_EventScript_ClerkDesks::
release
end
- .align 2
+ .align 2
FortreeCity_DecorationShop_PokemartDecor_Desks:
.2byte DECOR_SMALL_DESK
.2byte DECOR_POKEMON_DESK
diff --git a/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc
index 20480068b8..9189df1f50 100644
--- a/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc
+++ b/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc
@@ -36,9 +36,9 @@ LilycoveCity_DepartmentStore_3F_EventScript_ClerkRight::
.align 2
LilycoveCity_DepartmentStore_3F_Pokemart_StatBoosters:
.2byte ITEM_X_SPEED
- .2byte ITEM_X_SPECIAL
+ .2byte ITEM_X_SP_ATK
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_DIRE_HIT
.2byte ITEM_GUARD_SPEC
.2byte ITEM_X_ACCURACY
diff --git a/data/maps/MauvilleCity_Mart/scripts.inc b/data/maps/MauvilleCity_Mart/scripts.inc
index 4cf5bc20bb..751835caab 100644
--- a/data/maps/MauvilleCity_Mart/scripts.inc
+++ b/data/maps/MauvilleCity_Mart/scripts.inc
@@ -21,7 +21,7 @@ MauvilleCity_Mart_Pokemart:
.2byte ITEM_AWAKENING
.2byte ITEM_X_SPEED
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_GUARD_SPEC
.2byte ITEM_DIRE_HIT
.2byte ITEM_X_ACCURACY
diff --git a/data/maps/MossdeepCity_Mart/scripts.inc b/data/maps/MossdeepCity_Mart/scripts.inc
index 50edddd09a..6618b6a6a3 100644
--- a/data/maps/MossdeepCity_Mart/scripts.inc
+++ b/data/maps/MossdeepCity_Mart/scripts.inc
@@ -21,7 +21,7 @@ MossdeepCity_Mart_Pokemart:
.2byte ITEM_REVIVE
.2byte ITEM_MAX_REPEL
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_NONE
release
end
diff --git a/data/maps/PetalburgCity_Gym/scripts.inc b/data/maps/PetalburgCity_Gym/scripts.inc
index 836da26bfb..f2489b7dbb 100644
--- a/data/maps/PetalburgCity_Gym/scripts.inc
+++ b/data/maps/PetalburgCity_Gym/scripts.inc
@@ -351,9 +351,9 @@ PetalburgCity_Gym_EventScript_NormanRematch::
PetalburgCity_Gym_EventScript_ShouldGiveEnigmaBerry::
specialvar VAR_RESULT, IsEnigmaBerryValid
goto_if_eq VAR_RESULT, FALSE, PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry
- checkitem ITEM_ENIGMA_BERRY
+ checkitem ITEM_ENIGMA_BERRY_E_READER
goto_if_eq VAR_RESULT, TRUE, PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry
- checkpcitem ITEM_ENIGMA_BERRY
+ checkpcitem ITEM_ENIGMA_BERRY_E_READER
goto_if_eq VAR_RESULT, TRUE, PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry
goto_if_eq VAR_ENIGMA_BERRY_AVAILABLE, 0, PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry
msgbox PetalburgCity_Gym_Text_GiveEnigmaBerry, MSGBOX_DEFAULT
@@ -365,7 +365,7 @@ PetalburgCity_Gym_EventScript_DontGiveEnigmaBerry::
return
PetalburgCity_Gym_EventScript_GiveEnigmaBerry::
- giveitem ITEM_ENIGMA_BERRY
+ giveitem ITEM_ENIGMA_BERRY_E_READER
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
setvar VAR_ENIGMA_BERRY_AVAILABLE, 0
release
diff --git a/data/maps/PetalburgCity_Mart/scripts.inc b/data/maps/PetalburgCity_Mart/scripts.inc
index abaa7b5b0e..acae50929d 100644
--- a/data/maps/PetalburgCity_Mart/scripts.inc
+++ b/data/maps/PetalburgCity_Mart/scripts.inc
@@ -23,7 +23,7 @@ PetalburgCity_Mart_Pokemart_Basic:
.2byte ITEM_REPEL
.2byte ITEM_X_SPEED
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_ORANGE_MAIL
.2byte ITEM_NONE
release
@@ -48,7 +48,7 @@ PetalburgCity_Mart_Pokemart_Expanded:
.2byte ITEM_REPEL
.2byte ITEM_X_SPEED
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_ORANGE_MAIL
.2byte ITEM_NONE
release
diff --git a/data/maps/Route110/scripts.inc b/data/maps/Route110/scripts.inc
index 7d16c8b10c..8447604aca 100644
--- a/data/maps/Route110/scripts.inc
+++ b/data/maps/Route110/scripts.inc
@@ -463,7 +463,7 @@ Route110_EventScript_BrendanDefeated::
end
Route110_EventScript_GiveItemfinder::
- giveitem ITEM_ITEMFINDER
+ giveitem ITEM_DOWSING_MACHINE
return
Route110_EventScript_RivalExit::
diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc
index 6cb83b4528..f97326c543 100644
--- a/data/maps/Route111/scripts.inc
+++ b/data/maps/Route111/scripts.inc
@@ -144,7 +144,7 @@ Route111_EventScript_RootFossilDisappeared::
@ Unused
Route111_Movement_PlayerFall::
- store_lock_anim
+ lock_anim
walk_fast_down
walk_fast_down
walk_fast_down
diff --git a/data/maps/RustboroCity_Mart/scripts.inc b/data/maps/RustboroCity_Mart/scripts.inc
index 18120cb4de..65cc71baba 100644
--- a/data/maps/RustboroCity_Mart/scripts.inc
+++ b/data/maps/RustboroCity_Mart/scripts.inc
@@ -27,7 +27,7 @@ RustboroCity_Mart_Pokemart_Basic:
.2byte ITEM_REPEL
.2byte ITEM_X_SPEED
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_NONE
release
end
@@ -51,7 +51,7 @@ RustboroCity_Mart_Pokemart_Expanded:
.2byte ITEM_REPEL
.2byte ITEM_X_SPEED
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_NONE
release
end
diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc
index e7eee5817a..54e9574bd5 100644
--- a/data/maps/RusturfTunnel/scripts.inc
+++ b/data/maps/RusturfTunnel/scripts.inc
@@ -308,7 +308,7 @@ RusturfTunnel_EventScript_Grunt::
msgbox RusturfTunnel_Text_GruntIntro, MSGBOX_DEFAULT
trainerbattle_no_intro TRAINER_GRUNT_RUSTURF_TUNNEL, RusturfTunnel_Text_GruntDefeat
msgbox RusturfTunnel_Text_GruntTakePackage, MSGBOX_DEFAULT
- giveitem ITEM_DEVON_GOODS
+ giveitem ITEM_DEVON_PARTS
closemessage
applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PushPlayerAsideForGrunt
applymovement LOCALID_GRUNT, RusturfTunnel_Movement_GruntEscape
diff --git a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc
index 59131fd7ee..ae7141f39e 100644
--- a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc
+++ b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc
@@ -71,7 +71,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_CaptStern::
applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight
waitmovement 0
msgbox SlateportCity_OceanicMuseum_2F_Text_SternThankYouForSavingUs, MSGBOX_DEFAULT
- setvar VAR_0x8004, ITEM_DEVON_GOODS
+ setvar VAR_0x8004, ITEM_DEVON_PARTS
call Common_EventScript_PlayerHandedOverTheItem
msgbox SlateportCity_OceanicMuseum_2F_Text_SternIveGotToGo, MSGBOX_DEFAULT
closemessage
diff --git a/data/maps/SootopolisCity_Mart/scripts.inc b/data/maps/SootopolisCity_Mart/scripts.inc
index 3cade5fbc4..618f78c524 100644
--- a/data/maps/SootopolisCity_Mart/scripts.inc
+++ b/data/maps/SootopolisCity_Mart/scripts.inc
@@ -20,7 +20,7 @@ SootopolisCity_Mart_Pokemart:
.2byte ITEM_REVIVE
.2byte ITEM_MAX_REPEL
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_SHADOW_MAIL
.2byte ITEM_NONE
release
diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc
index 2dd001a3ba..f407ac839b 100644
--- a/data/maps/TrainerHill_Entrance/scripts.inc
+++ b/data/maps/TrainerHill_Entrance/scripts.inc
@@ -259,9 +259,9 @@ TrainerHill_Entrance_Pokemart_Basic:
.2byte ITEM_PARALYZE_HEAL
.2byte ITEM_AWAKENING
.2byte ITEM_X_SPEED
- .2byte ITEM_X_SPECIAL
+ .2byte ITEM_X_SP_ATK
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_DIRE_HIT
.2byte ITEM_GUARD_SPEC
.2byte ITEM_X_ACCURACY
@@ -283,9 +283,9 @@ TrainerHill_Entrance_Pokemart_Expanded:
.2byte ITEM_FULL_HEAL
.2byte ITEM_REVIVE
.2byte ITEM_X_SPEED
- .2byte ITEM_X_SPECIAL
+ .2byte ITEM_X_SP_ATK
.2byte ITEM_X_ATTACK
- .2byte ITEM_X_DEFEND
+ .2byte ITEM_X_DEFENSE
.2byte ITEM_DIRE_HIT
.2byte ITEM_GUARD_SPEC
.2byte ITEM_X_ACCURACY
diff --git a/data/maps/VerdanturfTown_Mart/scripts.inc b/data/maps/VerdanturfTown_Mart/scripts.inc
index 7eb340df2a..c809d6703a 100644
--- a/data/maps/VerdanturfTown_Mart/scripts.inc
+++ b/data/maps/VerdanturfTown_Mart/scripts.inc
@@ -22,7 +22,7 @@ VerdanturfTown_Mart_Pokemart:
.2byte ITEM_BURN_HEAL
.2byte ITEM_ICE_HEAL
.2byte ITEM_REPEL
- .2byte ITEM_X_SPECIAL
+ .2byte ITEM_X_SP_ATK
.2byte ITEM_FLUFFY_TAIL
.2byte ITEM_NONE
release
diff --git a/data/scripts/item_ball_scripts.inc b/data/scripts/item_ball_scripts.inc
index 683c383df5..5ad4037cbe 100644
--- a/data/scripts/item_ball_scripts.inc
+++ b/data/scripts/item_ball_scripts.inc
@@ -127,7 +127,7 @@ Route115_EventScript_ItemPPUp::
end
Route116_EventScript_ItemXSpecial::
- finditem ITEM_X_SPECIAL
+ finditem ITEM_X_SP_ATK
end
Route116_EventScript_ItemEther::
@@ -315,7 +315,7 @@ MauvilleCity_EventScript_ItemXSpeed::
end
RustboroCity_EventScript_ItemXDefend::
- finditem ITEM_X_DEFEND
+ finditem ITEM_X_DEFENSE
end
LilycoveCity_EventScript_ItemMaxRepel::
diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc
index e1fa3d1799..eda3505bf4 100644
--- a/data/scripts/mauville_man.inc
+++ b/data/scripts/mauville_man.inc
@@ -315,7 +315,7 @@ MauvilleCity_PokemonCenter_1F_Text_TrendsStartedStory::
.string "the HOENN region!$"
MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedTitle::
- .string "The BERRY-Planting TRAINER$"
+ .string "The BERRY-Planting TRAINER$"
MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedAction::
.string "Planted BERRIES$"
diff --git a/data/sound_data.s b/data/sound_data.s
index cd33950e17..1bc2995808 100644
--- a/data/sound_data.s
+++ b/data/sound_data.s
@@ -2,7 +2,7 @@
.include "asm/macros/m4a.inc"
.include "asm/macros/music_voice.inc"
-
+ .include "include/constants/pokemon_config.h"
.include "sound/voice_groups.inc"
.include "sound/keysplit_tables.inc"
.include "sound/programmable_wave_data.inc"
diff --git a/data/specials.inc b/data/specials.inc
index 30ad25cb4d..b4d0ecf905 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -535,4 +535,5 @@ gSpecials::
def_special RemoveRecordsWindow
def_special CloseDeptStoreElevatorWindow
def_special TrySetBattleTowerLinkType
+ def_special SetTotemBoost
def_special TrySpecialOverworldEvo
diff --git a/data/text/event_ticket_2.inc b/data/text/event_ticket_2.inc
index 0165b5fde9..e5536eebf8 100644
--- a/data/text/event_ticket_2.inc
+++ b/data/text/event_ticket_2.inc
@@ -1,71 +1,71 @@
EventTicket_Text_OldSeaMapTooFar:
- .string "What's up, youngster?\p"
- .string "What, it's you who's supposed to have\n"
- .string "a tattered old map?\p"
- .string "Let's have a look.\n"
- .string "… … … … … …\p"
- .string "Boy, this is quite a ways away.\n"
- .string "I'm afraid I can't help you…$"
+ .string "What's up, youngster?\p"
+ .string "What, it's you who's supposed to have\n"
+ .string "a tattered old map?\p"
+ .string "Let's have a look.\n"
+ .string "… … … … … …\p"
+ .string "Boy, this is quite a ways away.\n"
+ .string "I'm afraid I can't help you…$"
EventTicket_Text_BrineyHoldOnASecond:
- .string "BRINEY: Hold on a second!\p"
- .string "What's the idea of turning down\n"
- .string "someone that I owe so much to?$"
+ .string "BRINEY: Hold on a second!\p"
+ .string "What's the idea of turning down\n"
+ .string "someone that I owe so much to?$"
EventTicket_Text_BrineyLetsSail:
- .string "{PLAYER}{KUN}, I'm terribly sorry.\p"
- .string "You came to me seeking my help,\n"
- .string "and we almost turned you away.\p"
- .string "Well, let me make things right.\p"
- .string "We'll sail right away, of course!\p"
- .string "Let's find this island on\n"
- .string "this OLD SEA MAP!$"
+ .string "{PLAYER}{KUN}, I'm terribly sorry.\p"
+ .string "You came to me seeking my help,\n"
+ .string "and we almost turned you away.\p"
+ .string "Well, let me make things right.\p"
+ .string "We'll sail right away, of course!\p"
+ .string "Let's find this island on\n"
+ .string "this OLD SEA MAP!$"
EventTicket_Text_OddTicketGetOnBoard:
- .string "Is it you who brought that odd\n"
- .string "ticket?\p"
- .string "Where you're trying to go is an island\n"
- .string "that's far, far away.\p"
- .string "No one knows what awaits there…\p"
- .string "The very thought excites my blood\n"
- .string "as a sailing man!\p"
- .string "Get on board, youngster!$"
+ .string "Is it you who brought that odd\n"
+ .string "ticket?\p"
+ .string "Where you're trying to go is an island\n"
+ .string "that's far, far away.\p"
+ .string "No one knows what awaits there…\p"
+ .string "The very thought excites my blood\n"
+ .string "as a sailing man!\p"
+ .string "Get on board, youngster!$"
FarawayIsland_Entrance_Text_SailorReturn:
- .string "CAPT. BRINEY can be so maddeningly\n"
- .string "fickle…\p"
- .string "Do you want to return to LILYCOVE?$"
+ .string "CAPT. BRINEY can be so maddeningly\n"
+ .string "fickle…\p"
+ .string "Do you want to return to LILYCOVE?$"
BirthIsland_Harbor_Text_SailorReturn:
- .string "What an oddly shaped island, eh?\n"
- .string "Do you want to return to LILYCOVE?$"
+ .string "What an oddly shaped island, eh?\n"
+ .string "Do you want to return to LILYCOVE?$"
EventTicket_Text_OddTicketsWhereTo:
- .string "Is it you who brought those\n"
- .string "odd tickets?\p"
- .string "… … …Hm.\p"
- .string "These tickets will get you to islands\n"
- .string "that are far, far away.\p"
- .string "No one knows what awaits there,\n"
- .string "or what may happen there.\p"
- .string "The very thought excites my blood\n"
- .string "as a sailing man!\p"
- .string "Get on board, youngster!\n"
- .string "Where shall we sail first?$"
+ .string "Is it you who brought those\n"
+ .string "odd tickets?\p"
+ .string "… … …Hm.\p"
+ .string "These tickets will get you to islands\n"
+ .string "that are far, far away.\p"
+ .string "No one knows what awaits there,\n"
+ .string "or what may happen there.\p"
+ .string "The very thought excites my blood\n"
+ .string "as a sailing man!\p"
+ .string "Get on board, youngster!\n"
+ .string "Where shall we sail first?$"
NavelRock_Harbor_Text_SailorReturn:
- .string "Did… Did you hear that?\n"
- .string "That low growling from deep in there.\p"
- .string "Are you sure it's safe?\n"
- .string "Do you think we should leave?$"
+ .string "Did… Did you hear that?\n"
+ .string "That low growling from deep in there.\p"
+ .string "Are you sure it's safe?\n"
+ .string "Do you think we should leave?$"
FarawayIsland_Entrance_Text_Sign:
- .string "The writing is fading as if it was\n"
- .string "written a long time ago…\p"
- .string "“…ber, 6th day\n"
- .string "If any human…sets foot here…\l"
- .string "again…et it be a kindhearted pers…\l"
- .string "…ith that hope, I depar…”$"
+ .string "The writing is fading as if it was\n"
+ .string "written a long time ago…\p"
+ .string "“…ber, 6th day\n"
+ .string "If any human…sets foot here…\l"
+ .string "again…et it be a kindhearted pers…\l"
+ .string "…ith that hope, I depar…”$"
FarawayIsland_Interior_Text_Mew:
- .string "Myuu…$"
+ .string "Myuu…$"
diff --git a/data/text/pkmn_center_nurse.inc b/data/text/pkmn_center_nurse.inc
index 05a186f2fa..eb0a0dc46d 100644
--- a/data/text/pkmn_center_nurse.inc
+++ b/data/text/pkmn_center_nurse.inc
@@ -1,51 +1,51 @@
gText_WouldYouLikeToRestYourPkmn::
- .string "Hello, and welcome to\n"
- .string "the POKéMON CENTER.\p"
- .string "We restore your tired POKéMON\n"
- .string "to full health.\p"
- .string "Would you like to rest your POKéMON?$"
+ .string "Hello, and welcome to\n"
+ .string "the POKéMON CENTER.\p"
+ .string "We restore your tired POKéMON\n"
+ .string "to full health.\p"
+ .string "Would you like to rest your POKéMON?$"
gText_IllTakeYourPkmn::
- .string "Okay, I'll take your POKéMON\n"
- .string "for a few seconds.$"
+ .string "Okay, I'll take your POKéMON\n"
+ .string "for a few seconds.$"
gText_RestoredPkmnToFullHealth::
- .string "Thank you for waiting.\p"
- .string "We've restored your POKéMON\n"
- .string "to full health.$"
+ .string "Thank you for waiting.\p"
+ .string "We've restored your POKéMON\n"
+ .string "to full health.$"
gText_WeHopeToSeeYouAgain::
- .string "We hope to see you again!$"
+ .string "We hope to see you again!$"
gText_WelcomeCutShort::
- .string "Hello, and welcome to\n"
- .string "the POKéMON CENTER.\p"
- .string "We restore your tired POKéMON\n"
- .string "to full health.\p"
- .string "Would you like to…$"
+ .string "Hello, and welcome to\n"
+ .string "the POKéMON CENTER.\p"
+ .string "We restore your tired POKéMON\n"
+ .string "to full health.\p"
+ .string "Would you like to…$"
gText_NoticesGoldCard::
- .string "Th-that card…\n"
- .string "Could it be… The GOLD CARD?!\p"
- .string "Oh, the gold color is brilliant!\n"
- .string "The four stars seem to sparkle!\p"
- .string "I've seen several TRAINERS with\n"
- .string "a SILVER CARD before, but, {PLAYER},\l"
- .string "you're the first TRAINER I've ever\l"
- .string "seen with a GOLD CARD!\p"
- .string "Okay, {PLAYER}, please allow me\n"
- .string "the honor of resting your POKéMON!$"
+ .string "Th-that card…\n"
+ .string "Could it be… The GOLD CARD?!\p"
+ .string "Oh, the gold color is brilliant!\n"
+ .string "The four stars seem to sparkle!\p"
+ .string "I've seen several TRAINERS with\n"
+ .string "a SILVER CARD before, but, {PLAYER},\l"
+ .string "you're the first TRAINER I've ever\l"
+ .string "seen with a GOLD CARD!\p"
+ .string "Okay, {PLAYER}, please allow me\n"
+ .string "the honor of resting your POKéMON!$"
gText_YouWantTheUsual::
- .string "I'm delighted to see you, {PLAYER}!\n"
- .string "You want the usual, am I right?$"
+ .string "I'm delighted to see you, {PLAYER}!\n"
+ .string "You want the usual, am I right?$"
gText_IllTakeYourPkmn2::
- .string "Okay, I'll take your POKéMON\n"
- .string "for a few seconds.$"
+ .string "Okay, I'll take your POKéMON\n"
+ .string "for a few seconds.$"
gText_ThankYouForWaiting::
- .string "Thank you for waiting.$"
+ .string "Thank you for waiting.$"
gText_WeHopeToSeeYouAgain2::
- .string "We hope to see you again!$"
+ .string "We hope to see you again!$"
diff --git a/data/text/secret_base_trainers.inc b/data/text/secret_base_trainers.inc
index f1881533ab..ef8ba4dca5 100644
--- a/data/text/secret_base_trainers.inc
+++ b/data/text/secret_base_trainers.inc
@@ -1,286 +1,286 @@
SecretBase_Text_Trainer0Intro:
- .string "Have you made a SECRET BASE already?\p"
- .string "I went here, there, everywhere before\n"
- .string "choosing this place.\p"
- .string "Since you're already here, how would\n"
- .string "you like to battle?$"
+ .string "Have you made a SECRET BASE already?\p"
+ .string "I went here, there, everywhere before\n"
+ .string "choosing this place.\p"
+ .string "Since you're already here, how would\n"
+ .string "you like to battle?$"
SecretBase_Text_Trainer0AcceptBattle:
- .string "Okay!\n"
- .string "Here we come!$"
+ .string "Okay!\n"
+ .string "Here we come!$"
SecretBase_Text_Trainer0DeclineBattle:
- .string "Hunh?\n"
- .string "Oh, you can't now…$"
+ .string "Hunh?\n"
+ .string "Oh, you can't now…$"
SecretBase_Text_Trainer0Defeated::
- .string "Waaargh! You're too strong!\n"
- .string "About me losing… Please keep it secret!$"
+ .string "Waaargh! You're too strong!\n"
+ .string "About me losing… Please keep it secret!$"
SecretBase_Text_Trainer0PostBattle:
- .string "What do you think of my SECRET BASE?\n"
- .string "Come visit me again tomorrow.$"
+ .string "What do you think of my SECRET BASE?\n"
+ .string "Come visit me again tomorrow.$"
SecretBase_Text_Trainer0PreChampion:
- .string "Have you made a SECRET BASE already?\p"
- .string "I went here, there, everywhere before\n"
- .string "choosing this place.\p"
- .string "Feel free to hang out!$"
+ .string "Have you made a SECRET BASE already?\p"
+ .string "I went here, there, everywhere before\n"
+ .string "choosing this place.\p"
+ .string "Feel free to hang out!$"
SecretBase_Text_Trainer5Intro:
- .string "There're a lot of places where\n"
- .string "you can make a SECRET BASE.\p"
- .string "But I like this spot best.\n"
- .string "Don't you think it's nice?\p"
- .string "Oh, would you like to have a battle?$"
+ .string "There're a lot of places where\n"
+ .string "you can make a SECRET BASE.\p"
+ .string "But I like this spot best.\n"
+ .string "Don't you think it's nice?\p"
+ .string "Oh, would you like to have a battle?$"
SecretBase_Text_Trainer5AcceptBattle:
- .string "Okay, here goes!$"
+ .string "Okay, here goes!$"
SecretBase_Text_Trainer5DeclineBattle:
- .string "Oh…\n"
- .string "You can't now, okay.$"
+ .string "Oh…\n"
+ .string "You can't now, okay.$"
SecretBase_Text_Trainer5Defeated::
- .string "Hmmm… It's our loss…\n"
- .string "But don't tell anyone!\l"
- .string "It's a confidential secret!$"
+ .string "Hmmm… It's our loss…\n"
+ .string "But don't tell anyone!\l"
+ .string "It's a confidential secret!$"
SecretBase_Text_Trainer5PostBattle:
- .string "If you're in this area again,\n"
- .string "I hope you'll visit me.$"
+ .string "If you're in this area again,\n"
+ .string "I hope you'll visit me.$"
SecretBase_Text_Trainer5PreChampion:
- .string "There're a lot of places where you can\n"
- .string "make a SECRET BASE.\p"
- .string "But I like this spot best.\n"
- .string "Don't you think it's nice?$"
+ .string "There're a lot of places where you can\n"
+ .string "make a SECRET BASE.\p"
+ .string "But I like this spot best.\n"
+ .string "Don't you think it's nice?$"
SecretBase_Text_Trainer1Intro:
- .string "This is a popular spot.\n"
- .string "It's always taken.\p"
- .string "Oh! Were you thinking about\n"
- .string "taking this spot, too?\p"
- .string "I'll tell you what, you can have this\n"
- .string "spot if you can beat me.$"
+ .string "This is a popular spot.\n"
+ .string "It's always taken.\p"
+ .string "Oh! Were you thinking about\n"
+ .string "taking this spot, too?\p"
+ .string "I'll tell you what, you can have this\n"
+ .string "spot if you can beat me.$"
SecretBase_Text_Trainer1AcceptBattle:
- .string "Okay!\n"
- .string "I'm going to defend my SECRET BASE!$"
+ .string "Okay!\n"
+ .string "I'm going to defend my SECRET BASE!$"
SecretBase_Text_Trainer1DeclineBattle:
- .string "Hunh? Is that right?\n"
- .string "You're not interested in this spot?$"
+ .string "Hunh? Is that right?\n"
+ .string "You're not interested in this spot?$"
SecretBase_Text_Trainer1Defeated::
- .string "I can't keep going!\n"
- .string "I surrender!$"
+ .string "I can't keep going!\n"
+ .string "I surrender!$"
SecretBase_Text_Trainer1PostBattle:
- .string "Okay, when I move one day,\n"
- .string "this place will be yours!$"
+ .string "Okay, when I move one day,\n"
+ .string "this place will be yours!$"
SecretBase_Text_Trainer1PreChampion:
- .string "This is a popular spot.\n"
- .string "It's always taken.\p"
- .string "I waited a long time for it to open.\n"
- .string "I finally got to use it!$"
+ .string "This is a popular spot.\n"
+ .string "It's always taken.\p"
+ .string "I waited a long time for it to open.\n"
+ .string "I finally got to use it!$"
SecretBase_Text_Trainer6Intro:
- .string "Welcome to my POKéMON LAB.\p"
- .string "I carry out research on battling in\n"
- .string "secrecy.\p"
- .string "Would you like to see how strong I am?$"
+ .string "Welcome to my POKéMON LAB.\p"
+ .string "I carry out research on battling in\n"
+ .string "secrecy.\p"
+ .string "Would you like to see how strong I am?$"
SecretBase_Text_Trainer6AcceptBattle:
- .string "I'm going to go all out!$"
+ .string "I'm going to go all out!$"
SecretBase_Text_Trainer6DeclineBattle:
- .string "Oh.\n"
- .string "Some other time, then!$"
+ .string "Oh.\n"
+ .string "Some other time, then!$"
SecretBase_Text_Trainer6Defeated::
- .string "Hmm… I've still got lots to learn.\n"
- .string "I have to study some more.$"
+ .string "Hmm… I've still got lots to learn.\n"
+ .string "I have to study some more.$"
SecretBase_Text_Trainer6PostBattle:
- .string "Thanks for battling with me.\n"
- .string "Please come back again tomorrow.$"
+ .string "Thanks for battling with me.\n"
+ .string "Please come back again tomorrow.$"
SecretBase_Text_Trainer6PreChampion:
- .string "Welcome to my POKéMON LAB.\p"
- .string "I carry out research on battling in\n"
- .string "secrecy.$"
+ .string "Welcome to my POKéMON LAB.\p"
+ .string "I carry out research on battling in\n"
+ .string "secrecy.$"
SecretBase_Text_Trainer2Intro:
- .string "A big mansion is nice, but I like this\n"
- .string "sort of place more.\p"
- .string "I like it because all kinds of people\n"
- .string "come visit me.\p"
- .string "So, how would you like a battle?$"
+ .string "A big mansion is nice, but I like this\n"
+ .string "sort of place more.\p"
+ .string "I like it because all kinds of people\n"
+ .string "come visit me.\p"
+ .string "So, how would you like a battle?$"
SecretBase_Text_Trainer2AcceptBattle:
- .string "That's the way!$"
+ .string "That's the way!$"
SecretBase_Text_Trainer2DeclineBattle:
- .string "When you're ready, give me a shout!$"
+ .string "When you're ready, give me a shout!$"
SecretBase_Text_Trainer2Defeated::
- .string "Aww! Done in!\n"
- .string "But it's still fun to battle!$"
+ .string "Aww! Done in!\n"
+ .string "But it's still fun to battle!$"
SecretBase_Text_Trainer2PostBattle:
- .string "Well, anyway, I should go buy some\n"
- .string "decorations and furniture.\p"
- .string "I want my SECRET BASE to be a place\n"
- .string "other people can enjoy.$"
+ .string "Well, anyway, I should go buy some\n"
+ .string "decorations and furniture.\p"
+ .string "I want my SECRET BASE to be a place\n"
+ .string "other people can enjoy.$"
SecretBase_Text_Trainer2PreChampion:
- .string "A big mansion is nice, but I like this\n"
- .string "sort of place more.\p"
- .string "I like it because all kinds of people\n"
- .string "come visit me.$"
+ .string "A big mansion is nice, but I like this\n"
+ .string "sort of place more.\p"
+ .string "I like it because all kinds of people\n"
+ .string "come visit me.$"
SecretBase_Text_Trainer7Intro:
- .string "I simply adore shopping for decorations\n"
- .string "and furniture.\p"
- .string "I also love raising POKéMON just\n"
- .string "as much.\p"
- .string "If you would be so kind, will you battle\n"
- .string "with my POKéMON?$"
+ .string "I simply adore shopping for decorations\n"
+ .string "and furniture.\p"
+ .string "I also love raising POKéMON just\n"
+ .string "as much.\p"
+ .string "If you would be so kind, will you battle\n"
+ .string "with my POKéMON?$"
SecretBase_Text_Trainer7AcceptBattle:
- .string "Thank you.\n"
- .string "Shall we begin?$"
+ .string "Thank you.\n"
+ .string "Shall we begin?$"
SecretBase_Text_Trainer7DeclineBattle:
- .string "Oh.\n"
- .string "How disappointing…$"
+ .string "Oh.\n"
+ .string "How disappointing…$"
SecretBase_Text_Trainer7Defeated::
- .string "I concede…$"
+ .string "I concede…$"
SecretBase_Text_Trainer7PostBattle:
- .string "That was all in good fun!\n"
- .string "I should go enjoy shopping now.$"
+ .string "That was all in good fun!\n"
+ .string "I should go enjoy shopping now.$"
SecretBase_Text_Trainer7PreChampion:
- .string "I simply adore shopping for decorations\n"
- .string "and furniture.\p"
- .string "I also love raising POKéMON just\n"
- .string "as much.$"
+ .string "I simply adore shopping for decorations\n"
+ .string "and furniture.\p"
+ .string "I also love raising POKéMON just\n"
+ .string "as much.$"
SecretBase_Text_Trainer3Intro:
- .string "Some people make their SECRET BASES in\n"
- .string "hard-to-find places.\l"
- .string "Do they want to just lie low?\p"
- .string "But since you found me, how about we\n"
- .string "have a battle?$"
+ .string "Some people make their SECRET BASES in\n"
+ .string "hard-to-find places.\l"
+ .string "Do they want to just lie low?\p"
+ .string "But since you found me, how about we\n"
+ .string "have a battle?$"
SecretBase_Text_Trainer3AcceptBattle:
- .string "I'm not going down easily!$"
+ .string "I'm not going down easily!$"
SecretBase_Text_Trainer3DeclineBattle:
- .string "Oh… Are you maybe tired from searching\n"
- .string "for this place?$"
+ .string "Oh… Are you maybe tired from searching\n"
+ .string "for this place?$"
SecretBase_Text_Trainer3Defeated::
- .string "I went down…$"
+ .string "I went down…$"
SecretBase_Text_Trainer3PostBattle:
- .string "Where's your SECRET BASE?\n"
- .string "I should go visit you there.$"
+ .string "Where's your SECRET BASE?\n"
+ .string "I should go visit you there.$"
SecretBase_Text_Trainer3PreChampion:
- .string "Some people make their SECRET BASES in\n"
- .string "hard-to-find places.\l"
- .string "Do they want to just lie low?$"
+ .string "Some people make their SECRET BASES in\n"
+ .string "hard-to-find places.\l"
+ .string "Do they want to just lie low?$"
SecretBase_Text_Trainer8Intro:
- .string "People have told me that you can get\n"
- .string "decorations in several ways.\p"
- .string "We should have a race to see who can\n"
- .string "get nicer decorations and furniture!\p"
- .string "In the meantime, want to battle?$"
+ .string "People have told me that you can get\n"
+ .string "decorations in several ways.\p"
+ .string "We should have a race to see who can\n"
+ .string "get nicer decorations and furniture!\p"
+ .string "In the meantime, want to battle?$"
SecretBase_Text_Trainer8AcceptBattle:
- .string "This is my SECRET BASE.\n"
- .string "I can't lose!$"
+ .string "This is my SECRET BASE.\n"
+ .string "I can't lose!$"
SecretBase_Text_Trainer8DeclineBattle:
- .string "I'll battle with you anytime.$"
+ .string "I'll battle with you anytime.$"
SecretBase_Text_Trainer8Defeated::
- .string "Huh?\n"
- .string "Did I just lose?$"
+ .string "Huh?\n"
+ .string "Did I just lose?$"
SecretBase_Text_Trainer8PostBattle:
- .string "I won't lose at collecting decorations.\n"
- .string "Come visit again!$"
+ .string "I won't lose at collecting decorations.\n"
+ .string "Come visit again!$"
SecretBase_Text_Trainer8PreChampion:
- .string "People have told me that you can get\n"
- .string "decorations in several ways.\p"
- .string "We should have a race to see who can\n"
- .string "get nicer decorations and furniture!$"
+ .string "People have told me that you can get\n"
+ .string "decorations in several ways.\p"
+ .string "We should have a race to see who can\n"
+ .string "get nicer decorations and furniture!$"
SecretBase_Text_Trainer4Intro:
- .string "I found a spot I liked, and I did it up\n"
- .string "with my favorite decorations.\p"
- .string "I raise my favorite POKéMON and grow\n"
- .string "stronger with it.\p"
- .string "That's what I do.\n"
- .string "Want to battle with me?$"
+ .string "I found a spot I liked, and I did it up\n"
+ .string "with my favorite decorations.\p"
+ .string "I raise my favorite POKéMON and grow\n"
+ .string "stronger with it.\p"
+ .string "That's what I do.\n"
+ .string "Want to battle with me?$"
SecretBase_Text_Trainer4AcceptBattle:
- .string "Show me what you're made of!$"
+ .string "Show me what you're made of!$"
SecretBase_Text_Trainer4DeclineBattle:
- .string "I guess there are times when you're not\n"
- .string "into it.$"
+ .string "I guess there are times when you're not\n"
+ .string "into it.$"
SecretBase_Text_Trainer4Defeated::
- .string "I know exactly what you're made of now.$"
+ .string "I know exactly what you're made of now.$"
SecretBase_Text_Trainer4PostBattle:
- .string "We can both become stronger.\n"
- .string "Let's keep at it!$"
+ .string "We can both become stronger.\n"
+ .string "Let's keep at it!$"
SecretBase_Text_Trainer4PreChampion:
- .string "I found a spot I liked, and I did it up\n"
- .string "with my favorite decorations.\p"
- .string "I raise my favorite POKéMON and grow\n"
- .string "stronger with it.\p"
- .string "Every day is a great day.$"
+ .string "I found a spot I liked, and I did it up\n"
+ .string "with my favorite decorations.\p"
+ .string "I raise my favorite POKéMON and grow\n"
+ .string "stronger with it.\p"
+ .string "Every day is a great day.$"
SecretBase_Text_Trainer9Intro:
- .string "You can learn a lot about the taste\n"
- .string "and sense of people by the kinds of\l"
- .string "decorations they have, and how they\l"
- .string "display them.\p"
- .string "What do you think of my taste?\n"
- .string "Are you speechless?\p"
- .string "Want to see my taste in battling?$"
+ .string "You can learn a lot about the taste\n"
+ .string "and sense of people by the kinds of\l"
+ .string "decorations they have, and how they\l"
+ .string "display them.\p"
+ .string "What do you think of my taste?\n"
+ .string "Are you speechless?\p"
+ .string "Want to see my taste in battling?$"
SecretBase_Text_Trainer9AcceptBattle:
- .string "There's no holding back!$"
+ .string "There's no holding back!$"
SecretBase_Text_Trainer9DeclineBattle:
- .string "I'll be happy to demonstrate my style\n"
- .string "anytime.$"
+ .string "I'll be happy to demonstrate my style\n"
+ .string "anytime.$"
SecretBase_Text_Trainer9Defeated::
- .string "You're supremely talented!\n"
- .string "Your power seems to be limitless…$"
+ .string "You're supremely talented!\n"
+ .string "Your power seems to be limitless…$"
SecretBase_Text_Trainer9PostBattle:
- .string "What did you think of my style?\n"
- .string "I'll keep on polishing it!$"
+ .string "What did you think of my style?\n"
+ .string "I'll keep on polishing it!$"
SecretBase_Text_Trainer9PreChampion:
- .string "You can learn a lot about the taste\n"
- .string "and sense of people by the kinds of\l"
- .string "decorations they have, and how they\l"
- .string "display them.\p"
- .string "What do you think of my taste?\n"
- .string "Are you speechless?$"
+ .string "You can learn a lot about the taste\n"
+ .string "and sense of people by the kinds of\l"
+ .string "decorations they have, and how they\l"
+ .string "display them.\p"
+ .string "What do you think of my taste?\n"
+ .string "Are you speechless?$"
diff --git a/gflib/bg.c b/gflib/bg.c
index 6e97be2073..f300e4609d 100644
--- a/gflib/bg.c
+++ b/gflib/bg.c
@@ -33,7 +33,7 @@ struct BgConfig2
u32 basePalette:4;
u32 unk_3:18;
- void* tilemap;
+ void *tilemap;
s32 bg_x;
s32 bg_y;
};
@@ -183,14 +183,14 @@ u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode)
case 0x1:
offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE;
offset = destOffset + offset;
- cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0);
+ cursor = RequestDma3Copy(src, (void *)(offset + BG_VRAM), size, 0);
if (cursor == -1)
return -1;
break;
case 0x2:
offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE;
offset = destOffset + offset;
- cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0);
+ cursor = RequestDma3Copy(src, (void *)(offset + BG_VRAM), size, 0);
if (cursor == -1)
return -1;
break;
@@ -372,7 +372,7 @@ void SetBgMode(u8 bgMode)
SetBgModeInternal(bgMode);
}
-u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset)
+u16 LoadBgTiles(u8 bg, const void *src, u16 size, u16 destOffset)
{
u16 tileOffset;
u8 cursor;
@@ -422,7 +422,7 @@ u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset)
if (!IsInvalidBg32(bg))
{
u16 paletteOffset = (sGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2);
- cursor = RequestDma3Copy(src, (void*)(paletteOffset + BG_PLTT), size, 0);
+ cursor = RequestDma3Copy(src, (void *)(paletteOffset + BG_PLTT), size, 0);
if (cursor == -1)
{
@@ -863,7 +863,7 @@ void UnsetBgTilemapBuffer(u8 bg)
}
}
-void* GetBgTilemapBuffer(u8 bg)
+void *GetBgTilemapBuffer(u8 bg)
{
if (IsInvalidBg32(bg))
return NULL;
@@ -906,7 +906,7 @@ void CopyBgTilemapBufferToVram(u8 bg)
}
}
-void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height)
+void CopyToBgTilemapBufferRect(u8 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height)
{
u16 destX16;
u16 destY16;
@@ -923,20 +923,20 @@ void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 wi
{
for (destX16 = destX; destX16 < (destX + width); destX16++)
{
- ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++;
+ ((u16 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++;
}
}
break;
}
case BG_TYPE_AFFINE:
{
- const u8 * srcCopy = src;
+ const u8 *srcCopy = src;
mode = GetBgMetricAffineMode(bg, 0x1);
for (destY16 = destY; destY16 < (destY + height); destY16++)
{
for (destX16 = destX; destX16 < (destX + width); destX16++)
{
- ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++;
+ ((u8 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++;
}
}
break;
@@ -984,7 +984,7 @@ void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8
{
for (j = destX; j < (destX + rectWidth); j++)
{
- *(u8*)(sGpuBgConfigs2[bg].tilemap + ((var * i) + j)) = *(u8*)(srcPtr) + tileOffset;
+ *(u8 *)(sGpuBgConfigs2[bg].tilemap + ((var * i) + j)) = *(u8 *)(srcPtr) + tileOffset;
srcPtr++;
}
srcPtr += (srcWidth - rectWidth);
@@ -1009,7 +1009,7 @@ void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width,
{
for (x16 = x; x16 < (x + width); x16++)
{
- ((u16*)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum;
+ ((u16 *)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum;
}
}
break;
@@ -1019,7 +1019,7 @@ void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width,
{
for (x16 = x; x16 < (x + width); x16++)
{
- ((u8*)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum;
+ ((u8 *)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum;
}
}
break;
@@ -1052,7 +1052,7 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt
{
for (x16 = x; x16 < (x + width); x16++)
{
- CopyTileMapEntry(&firstTileNum, &((u16*)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0);
+ CopyTileMapEntry(&firstTileNum, &((u16 *)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0);
firstTileNum = (firstTileNum & (MAPGRID_COLLISION_MASK | MAPGRID_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & MAPGRID_METATILE_ID_MASK);
}
}
@@ -1063,7 +1063,7 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt
{
for (x16 = x; x16 < (x + width); x16++)
{
- ((u8*)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum;
+ ((u8 *)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum;
firstTileNum = (firstTileNum & (MAPGRID_COLLISION_MASK | MAPGRID_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & MAPGRID_METATILE_ID_MASK);
}
}
@@ -1240,7 +1240,7 @@ bool32 IsInvalidBg32(u8 bg)
bool32 IsTileMapOutsideWram(u8 bg)
{
- if (sGpuBgConfigs2[bg].tilemap > (void*)IWRAM_END)
+ if (sGpuBgConfigs2[bg].tilemap > (void *)IWRAM_END)
return TRUE;
else if (sGpuBgConfigs2[bg].tilemap == NULL)
return TRUE;
diff --git a/gflib/bg.h b/gflib/bg.h
index 02ff073694..9818339910 100644
--- a/gflib/bg.h
+++ b/gflib/bg.h
@@ -3,29 +3,29 @@
enum
{
- BG_ATTR_CHARBASEINDEX = 1,
- BG_ATTR_MAPBASEINDEX,
- BG_ATTR_SCREENSIZE,
- BG_ATTR_PALETTEMODE,
- BG_ATTR_MOSAIC,
- BG_ATTR_WRAPAROUND,
- BG_ATTR_PRIORITY,
- BG_ATTR_METRIC,
- BG_ATTR_TYPE,
- BG_ATTR_BASETILE,
+ BG_ATTR_CHARBASEINDEX = 1,
+ BG_ATTR_MAPBASEINDEX,
+ BG_ATTR_SCREENSIZE,
+ BG_ATTR_PALETTEMODE,
+ BG_ATTR_MOSAIC,
+ BG_ATTR_WRAPAROUND,
+ BG_ATTR_PRIORITY,
+ BG_ATTR_METRIC,
+ BG_ATTR_TYPE,
+ BG_ATTR_BASETILE,
};
enum {
- BG_TYPE_NORMAL,
- BG_TYPE_AFFINE,
- BG_TYPE_NONE = 0xFFFF
+ BG_TYPE_NORMAL,
+ BG_TYPE_AFFINE,
+ BG_TYPE_NONE = 0xFFFF
};
// Modes for ChangeBgX / ChangeBgY
enum {
- BG_COORD_SET,
- BG_COORD_ADD,
- BG_COORD_SUB,
+ BG_COORD_SET,
+ BG_COORD_ADD,
+ BG_COORD_SUB,
};
// Modes for Unused_AdjustBgMosaic
@@ -62,7 +62,7 @@ void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable);
void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates);
void InitBgFromTemplate(const struct BgTemplate *template);
void SetBgMode(u8 bgMode);
-u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset);
+u16 LoadBgTiles(u8 bg, const void *src, u16 size, u16 destOffset);
u16 LoadBgTilemap(u8 bg, const void *src, u16 size, u16 destOffset);
u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset);
bool8 IsDma3ManagerBusyWithBgCopy(void);
@@ -79,10 +79,10 @@ void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dis
u8 Unused_AdjustBgMosaic(u8 val, u8 mode);
void SetBgTilemapBuffer(u8 bg, void *tilemap);
void UnsetBgTilemapBuffer(u8 bg);
-void* GetBgTilemapBuffer(u8 bg);
+void *GetBgTilemapBuffer(u8 bg);
void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset);
void CopyBgTilemapBufferToVram(u8 bg);
-void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height);
+void CopyToBgTilemapBufferRect(u8 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height);
void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette);
void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, s16 tileOffset, s16 palette2);
void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height);
diff --git a/gflib/sprite.c b/gflib/sprite.c
index e5bf890634..9fc597cc3b 100644
--- a/gflib/sprite.c
+++ b/gflib/sprite.c
@@ -94,7 +94,7 @@ static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameC
static u8 IndexOfSpriteTileTag(u16 tag);
static void AllocSpriteTileRange(u16 tag, u16 start, u16 count);
static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset);
-static void UpdateSpriteMatrixAnchorPos(struct Sprite*, s32, s32);
+static void UpdateSpriteMatrixAnchorPos(struct Sprite *, s32, s32);
typedef void (*AnimFunc)(struct Sprite *);
typedef void (*AnimCmdFunc)(struct Sprite *);
@@ -105,7 +105,7 @@ typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *);
.y = DISPLAY_HEIGHT, \
.affineMode = 0, \
.objMode = 0, \
- .mosaic = 0, \
+ .mosaic = FALSE, \
.bpp = 0, \
.shape = SPRITE_SHAPE(8x8), \
.x = DISPLAY_WIDTH + 64, \
@@ -1201,7 +1201,7 @@ u8 GetSpriteMatrixNum(struct Sprite *sprite)
// Used to shift a sprite's position as it scales.
// Only used by the minigame countdown, so that for instance the numbers don't slide up as they squish down before jumping.
-void SetSpriteMatrixAnchor(struct Sprite* sprite, s16 x, s16 y)
+void SetSpriteMatrixAnchor(struct Sprite *sprite, s16 x, s16 y)
{
sprite->sAnchorX = x;
sprite->sAnchorY = y;
diff --git a/gflib/sprite.h b/gflib/sprite.h
index f7ef165328..86527bc4c0 100644
--- a/gflib/sprite.h
+++ b/gflib/sprite.h
@@ -282,7 +282,7 @@ void FreeSpritePalette(struct Sprite *sprite);
void FreeSpriteOamMatrix(struct Sprite *sprite);
void DestroySpriteAndFreeResources(struct Sprite *sprite);
void AnimateSprite(struct Sprite *sprite);
-void SetSpriteMatrixAnchor(struct Sprite* sprite, s16 x, s16 y);
+void SetSpriteMatrixAnchor(struct Sprite *sprite, s16 x, s16 y);
void StartSpriteAnim(struct Sprite *sprite, u8 animNum);
void StartSpriteAnimIfDifferent(struct Sprite *sprite, u8 animNum);
void SeekSpriteAnim(struct Sprite *sprite, u8 animCmdIndex);
diff --git a/gflib/string_util.c b/gflib/string_util.c
index bc6f976c71..4bf8d946db 100644
--- a/gflib/string_util.c
+++ b/gflib/string_util.c
@@ -387,7 +387,7 @@ u8 *StringBraille(u8 *dest, const u8 *src)
const u8 setBrailleFont[] = {
EXT_CTRL_CODE_BEGIN,
EXT_CTRL_CODE_FONT,
- 6,
+ FONT_BRAILLE,
EOS
};
const u8 gotoLine2[] = {
diff --git a/gflib/text.c b/gflib/text.c
index c400c05823..c7efdccce3 100644
--- a/gflib/text.c
+++ b/gflib/text.c
@@ -652,7 +652,7 @@ void ClearTextSpan(struct TextPrinter *textPrinter, u32 width)
struct Window *window;
struct Bitmap pixels_data;
struct TextGlyph *glyph;
- u8* glyphHeight;
+ u8 *glyphHeight;
if (sLastTextBgColor != TEXT_COLOR_TRANSPARENT)
{
@@ -1684,7 +1684,7 @@ u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension)
static void DecompressGlyph_Small(u16 glyphId, bool32 isJapanese)
{
- const u16* glyphs;
+ const u16 *glyphs;
if (isJapanese == 1)
{
@@ -1726,7 +1726,7 @@ static u32 GetGlyphWidth_Small(u16 glyphId, bool32 isJapanese)
static void DecompressGlyph_Narrow(u16 glyphId, bool32 isJapanese)
{
- const u16* glyphs;
+ const u16 *glyphs;
if (isJapanese == TRUE)
{
@@ -1768,7 +1768,7 @@ static u32 GetGlyphWidth_Narrow(u16 glyphId, bool32 isJapanese)
static void DecompressGlyph_SmallNarrow(u16 glyphId, bool32 isJapanese)
{
- const u16* glyphs;
+ const u16 *glyphs;
if (isJapanese == TRUE)
{
@@ -1810,7 +1810,7 @@ static u32 GetGlyphWidth_SmallNarrow(u16 glyphId, bool32 isJapanese)
static void DecompressGlyph_Short(u16 glyphId, bool32 isJapanese)
{
- const u16* glyphs;
+ const u16 *glyphs;
if (isJapanese == TRUE)
{
@@ -1854,7 +1854,7 @@ static u32 GetGlyphWidth_Short(u16 glyphId, bool32 isJapanese)
static void DecompressGlyph_Normal(u16 glyphId, bool32 isJapanese)
{
- const u16* glyphs;
+ const u16 *glyphs;
if (isJapanese == TRUE)
{
@@ -1896,7 +1896,7 @@ static u32 GetGlyphWidth_Normal(u16 glyphId, bool32 isJapanese)
static void DecompressGlyph_Bold(u16 glyphId)
{
- const u16* glyphs;
+ const u16 *glyphs;
glyphs = sFontBoldJapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF));
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
diff --git a/gflib/text.h b/gflib/text.h
index 2f660354fc..c07817290d 100644
--- a/gflib/text.h
+++ b/gflib/text.h
@@ -65,7 +65,7 @@ struct TextPrinterSubStruct
struct TextPrinterTemplate
{
- const u8* currentChar;
+ const u8 *currentChar;
u8 windowId;
u8 fontId;
u8 x;
diff --git a/gflib/window.c b/gflib/window.c
index 8ca1a4b628..ff9e8a6e01 100644
--- a/gflib/window.c
+++ b/gflib/window.c
@@ -35,7 +35,7 @@ bool16 InitWindows(const struct WindowTemplate *templates)
int j;
u8 bgLayer;
u16 attrib;
- u8* allocatedTilemapBuffer;
+ u8 *allocatedTilemapBuffer;
int allocatedBaseBlock;
for (i = 0; i < NUM_BACKGROUNDS; ++i)
@@ -405,7 +405,7 @@ void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u
struct Bitmap sourceRect;
struct Bitmap destRect;
- sourceRect.pixels = (u8*)pixels;
+ sourceRect.pixels = (u8 *)pixels;
sourceRect.width = srcWidth;
sourceRect.height = srcHeight;
@@ -421,7 +421,7 @@ static void BlitBitmapRectToWindowWithColorKey(u8 windowId, const u8 *pixels, u1
struct Bitmap sourceRect;
struct Bitmap destRect;
- sourceRect.pixels = (u8*)pixels;
+ sourceRect.pixels = (u8 *)pixels;
sourceRect.width = srcWidth;
sourceRect.height = srcHeight;
@@ -463,9 +463,9 @@ void FillWindowPixelBuffer(u8 windowId, u8 fillValue)
destOffset = i + (a); \
srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \
if (srcOffset < size) \
- *(u32*)(tileData + destOffset) = *(u32*)(tileData + srcOffset); \
+ *(u32 *)(tileData + destOffset) = *(u32 *)(tileData + srcOffset); \
else \
- *(u32*)(tileData + destOffset) = fillValue32; \
+ *(u32 *)(tileData + destOffset) = fillValue32; \
distanceLoop++; \
}
@@ -474,9 +474,9 @@ void FillWindowPixelBuffer(u8 windowId, u8 fillValue)
destOffset = i + (a); \
srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \
if (srcOffset < size) \
- *(u32*)(tileData - destOffset) = *(u32*)(tileData - srcOffset); \
+ *(u32 *)(tileData - destOffset) = *(u32 *)(tileData - srcOffset); \
else \
- *(u32*)(tileData - destOffset) = fillValue32; \
+ *(u32 *)(tileData - destOffset) = fillValue32; \
distanceLoop++; \
}
@@ -550,7 +550,7 @@ bool8 SetWindowAttribute(u8 windowId, u8 attributeId, u32 value)
gWindows[windowId].window.baseBlock = value;
return FALSE;
case WINDOW_TILE_DATA:
- gWindows[windowId].tileData = (u8*)(value);
+ gWindows[windowId].tileData = (u8 *)(value);
return TRUE;
case WINDOW_BG:
case WINDOW_WIDTH:
@@ -605,7 +605,7 @@ static void DummyWindowBgTilemap8Bit(void)
u16 AddWindow8Bit(const struct WindowTemplate *template)
{
u16 windowId;
- u8* memAddress;
+ u8 *memAddress;
u8 bgLayer;
for (windowId = 0; windowId < WINDOWS_MAX; windowId++)
@@ -675,7 +675,7 @@ void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u
struct Bitmap sourceRect;
struct Bitmap destRect;
- sourceRect.pixels = (u8*) pixels;
+ sourceRect.pixels = (u8 *) pixels;
sourceRect.width = srcWidth;
sourceRect.height = srcHeight;
diff --git a/gflib/window.h b/gflib/window.h
index 6cb98c8456..583e7e1673 100644
--- a/gflib/window.h
+++ b/gflib/window.h
@@ -73,7 +73,7 @@ void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u
void CopyWindowToVram8Bit(u8 windowId, u8 mode);
extern struct Window gWindows[];
-extern void* gWindowBgTilemapBuffers[];
+extern void *gWindowBgTilemapBuffers[];
extern u32 gUnusedWindowVar1;
extern u32 gUnusedWindowVar2;
extern u32 gUnusedWindowVar3;
diff --git a/graphics/balls/beast.png b/graphics/balls/beast.png
new file mode 100644
index 0000000000..56a10224c6
Binary files /dev/null and b/graphics/balls/beast.png differ
diff --git a/graphics/balls/cherish.png b/graphics/balls/cherish.png
new file mode 100644
index 0000000000..3016b65609
Binary files /dev/null and b/graphics/balls/cherish.png differ
diff --git a/graphics/balls/dream.png b/graphics/balls/dream.png
new file mode 100644
index 0000000000..104ee282f5
Binary files /dev/null and b/graphics/balls/dream.png differ
diff --git a/graphics/balls/dusk.png b/graphics/balls/dusk.png
new file mode 100644
index 0000000000..2bb4d3d539
Binary files /dev/null and b/graphics/balls/dusk.png differ
diff --git a/graphics/balls/fast.png b/graphics/balls/fast.png
new file mode 100644
index 0000000000..d6b7e283da
Binary files /dev/null and b/graphics/balls/fast.png differ
diff --git a/graphics/balls/friend.png b/graphics/balls/friend.png
new file mode 100644
index 0000000000..b016c0c631
Binary files /dev/null and b/graphics/balls/friend.png differ
diff --git a/graphics/balls/heal.png b/graphics/balls/heal.png
new file mode 100644
index 0000000000..5f1604d785
Binary files /dev/null and b/graphics/balls/heal.png differ
diff --git a/graphics/balls/heavy.png b/graphics/balls/heavy.png
new file mode 100644
index 0000000000..d37db7238b
Binary files /dev/null and b/graphics/balls/heavy.png differ
diff --git a/graphics/balls/level.png b/graphics/balls/level.png
new file mode 100644
index 0000000000..588bad393f
Binary files /dev/null and b/graphics/balls/level.png differ
diff --git a/graphics/balls/love.png b/graphics/balls/love.png
new file mode 100644
index 0000000000..3bb20d2cc6
Binary files /dev/null and b/graphics/balls/love.png differ
diff --git a/graphics/balls/lure.png b/graphics/balls/lure.png
new file mode 100644
index 0000000000..9d10c25715
Binary files /dev/null and b/graphics/balls/lure.png differ
diff --git a/graphics/balls/moon.png b/graphics/balls/moon.png
new file mode 100644
index 0000000000..beb1016f4d
Binary files /dev/null and b/graphics/balls/moon.png differ
diff --git a/graphics/balls/park.png b/graphics/balls/park.png
new file mode 100644
index 0000000000..9b526f5245
Binary files /dev/null and b/graphics/balls/park.png differ
diff --git a/graphics/balls/quick.png b/graphics/balls/quick.png
new file mode 100644
index 0000000000..6c5dfccb9c
Binary files /dev/null and b/graphics/balls/quick.png differ
diff --git a/graphics/balls/sport.png b/graphics/balls/sport.png
new file mode 100644
index 0000000000..93228579b5
Binary files /dev/null and b/graphics/balls/sport.png differ
diff --git a/graphics/battle_anims/backgrounds/magma_storm.pal b/graphics/battle_anims/backgrounds/magma_storm.pal
new file mode 100644
index 0000000000..944174076e
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/magma_storm.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 214 0
+255 197 0
+255 173 0
+255 165 0
+148 90 222
+255 107 0
+255 132 0
+255 148 0
+255 156 41
+0 0 0
+0 90 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/aeroblast.pal b/graphics/battle_anims/backgrounds/new/aeroblast.pal
new file mode 100644
index 0000000000..e0b1af5bfb
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/aeroblast.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+172 222 230
+164 213 230
+148 205 222
+131 205 222
+123 197 213
+115 189 205
+98 180 197
+90 180 197
+82 172 189
+74 164 180
+65 156 180
+57 131 156
+49 115 131
+41 82 106
+24 74 82
diff --git a/graphics/battle_anims/backgrounds/new/aeroblast_map.bin b/graphics/battle_anims/backgrounds/new/aeroblast_map.bin
new file mode 100644
index 0000000000..369abe63ab
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/aeroblast_map.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/aeroblast_tiles.png b/graphics/battle_anims/backgrounds/new/aeroblast_tiles.png
new file mode 100644
index 0000000000..33af8f4826
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/aeroblast_tiles.png differ
diff --git a/graphics/battle_anims/backgrounds/new/aura_sphere.pal b/graphics/battle_anims/backgrounds/new/aura_sphere.pal
new file mode 100644
index 0000000000..238493462b
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/aura_sphere.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+246 205 82
+238 205 74
+238 205 57
+246 222 123
+238 205 57
+238 197 49
+230 189 24
+246 213 82
+255 222 131
+255 213 115
+255 213 106
+255 213 90
+246 213 82
+255 230 156
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/blackhole_eclipse.bin b/graphics/battle_anims/backgrounds/new/blackhole_eclipse.bin
new file mode 100644
index 0000000000..54c73addcf
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/blackhole_eclipse.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/blackhole_eclipse.png b/graphics/battle_anims/backgrounds/new/blackhole_eclipse.png
new file mode 100644
index 0000000000..3cfd58625e
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/blackhole_eclipse.png differ
diff --git a/graphics/battle_anims/backgrounds/new/bloom_doom.bin b/graphics/battle_anims/backgrounds/new/bloom_doom.bin
new file mode 100644
index 0000000000..9ea250a340
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/bloom_doom.bin
@@ -0,0 +1,2 @@
+ $
+
$ ! " "$ # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? = @ A B C D E F F G H C C C I J K L M N O P P P P Q R S T U V W X Y C Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q P P P r s t u v w x y z { | } ~ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/bloom_doom.pal b/graphics/battle_anims/backgrounds/new/bloom_doom.pal
new file mode 100644
index 0000000000..834088c8fa
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/bloom_doom.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 0
+131 230 255
+106 213 255
+98 205 255
+57 156 180
+8 115 123
+180 189 172
+156 180 164
+115 164 131
+74 131 106
+49 106 65
+0 106 74
+0 90 49
+0 82 24
+0 65 0
+0 32 0
diff --git a/graphics/battle_anims/backgrounds/new/bloom_doom.png b/graphics/battle_anims/backgrounds/new/bloom_doom.png
new file mode 100644
index 0000000000..de5553ec6e
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/bloom_doom.png differ
diff --git a/graphics/battle_anims/backgrounds/new/bolt_strike.bin b/graphics/battle_anims/backgrounds/new/bolt_strike.bin
new file mode 100644
index 0000000000..32f51b6fe0
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/bolt_strike.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/bolt_strike.pal b/graphics/battle_anims/backgrounds/new/bolt_strike.pal
new file mode 100644
index 0000000000..4c3d1dcf10
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/bolt_strike.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 8 8
+255 255 255
+222 246 246
+189 230 230
+156 213 213
+131 205 205
+115 189 189
+90 172 172
+65 156 156
+49 139 139
+32 123 123
+16 98 98
+0 74 74
+0 49 49
+0 32 32
+0 16 16
diff --git a/graphics/battle_anims/backgrounds/new/bolt_strike.png b/graphics/battle_anims/backgrounds/new/bolt_strike.png
new file mode 100644
index 0000000000..4d5f8c6d99
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/bolt_strike.png differ
diff --git a/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin
new file mode 100644
index 0000000000..989fa4cab1
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin
@@ -0,0 +1,2 @@
+
+
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < < < < = > ? @ A B C D E F G H I J K L L M N N O P Q @ R S T U V W X Y Z [ \ \$] ^ J J J J J J J J _ ` a b c d e f g h i j k l m m n n n o p q r s t u v w J J J J x y z { | } ~ m m m m m m m n J J J J @ ~ ~ m J J @ , @
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.pal b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.pal
new file mode 100644
index 0000000000..3470d8818f
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 255
+246 189 49
+246 172 41
+238 156 32
+222 131 24
+205 115 8
+197 65 0
+180 57 0
+172 90 65
+156 74 49
+148 65 24
+139 74 49
+123 65 32
+98 49 32
+82 32 16
+74 24 8
diff --git a/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.png b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.png
new file mode 100644
index 0000000000..abaf8576d8
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/clangorous_soulblaze.png differ
diff --git a/graphics/battle_anims/backgrounds/new/dark_void.bin b/graphics/battle_anims/backgrounds/new/dark_void.bin
new file mode 100644
index 0000000000..274b971db6
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/dark_void.bin
@@ -0,0 +1,17 @@
+?,>,=,<,;,:,9,8,7,6,5,4,3,2,2,1,?,>,=,<,;,:,9,8,7,6,5,4,3,2,2,1,/,.,-,,,+,*,),(,',&,%,$,#,",!,0,/,.,-,,,+,*,),(,',&,%,$,#,",!,0,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,, ,,,
,,,
+, ,,,,,,,,,,,,
,,,
+, ,,,,,,,,,,1(2(2(3(4(5(6(7(8(9(:(;(<(=(>(?(1(2(2(3(4(5(6(7(8(9(:(;(<(=(>(?(0(!("(#($(%(&('((()(*(+(,(-(.(/(0(!("(#($(%(&('((()(*(+(,(-(.(/( (((((((((((((((( ((((((((((((((((((((((((( (
+(((
(((((((((((( (
+(((
(((?,>,=,<,;,:,9,8,7,6,5,4,3,2,2,1,?,>,=,<,;,:,9,8,7,6,5,4,3,2,2,1,/,.,-,,,+,*,),(,',&,%,$,#,",!,0,/,.,-,,,+,*,),(,',&,%,$,#,",!,0,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,, ,,,
,,,
+, ,,,,,,,,,,,,
,,,
+, ,,,,,,,,,,1(2(2(3(4(5(6(7(8(9(:(;(<(=(>(?(1(2(2(3(4(5(6(7(8(9(:(;(<(=(>(?(0(!("(#($(%(&('((()(*(+(,(-(.(/(0(!("(#($(%(&('((()(*(+(,(-(.(/( (((((((((((((((( ((((((((((((((((((((((((( (
+(((
(((((((((((( (
+(((
(((?,>,=,<,;,:,9,8,7,6,5,4,3,2,2,1,?,>,=,<,;,:,9,8,7,6,5,4,3,2,2,1,/,.,-,,,+,*,),(,',&,%,$,#,",!,0,/,.,-,,,+,*,),(,',&,%,$,#,",!,0,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,, ,,,
,,,
+, ,,,,,,,,,,,,
,,,
+, ,,,,,,,,,,1(2(2(3(4(5(6(7(8(9(:(;(<(=(>(?(1(2(2(3(4(5(6(7(8(9(:(;(<(=(>(?(0(!("(#($(%(&('((()(*(+(,(-(.(/(0(!("(#($(%(&('((()(*(+(,(-(.(/( (((((((((((((((( ((((((((((((((((((((((((( (
+(((
(((((((((((( (
+(((
(((?,>,=,<,;,:,9,8,7,6,5,4,3,2,2,1,?,>,=,<,;,:,9,8,7,6,5,4,3,2,2,1,/,.,-,,,+,*,),(,',&,%,$,#,",!,0,/,.,-,,,+,*,),(,',&,%,$,#,",!,0,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,, ,,,
,,,
+, ,,,,,,,,,,,,
,,,
+, ,,,,,,,,,,1(2(2(3(4(5(6(7(8(9(:(;(<(=(>(?(1(2(2(3(4(5(6(7(8(9(:(;(<(=(>(?(0(!("(#($(%(&('((()(*(+(,(-(.(/(0(!("(#($(%(&('((()(*(+(,(-(.(/( (((((((((((((((( ((((((((((((((((((((((((( (
+(((
(((((((((((( (
+(((
(((
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/dark_void.pal b/graphics/battle_anims/backgrounds/new/dark_void.pal
new file mode 100644
index 0000000000..6aa0b26a6d
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/dark_void.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+48 48 48
+72 72 72
+88 88 88
+120 120 120
+0 0 0
+0 0 0
+0 0 0
+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_anims/backgrounds/new/dynamax_cannon.pal b/graphics/battle_anims/backgrounds/new/dynamax_cannon.pal
new file mode 100644
index 0000000000..64a2e4566b
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/dynamax_cannon.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 164 255
+255 106 139
+255 131 222
+255 139 230
+255 164 238
+255 189 255
+255 205 255
+246 230 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
diff --git a/graphics/battle_anims/backgrounds/new/electric_terrain.bin b/graphics/battle_anims/backgrounds/new/electric_terrain.bin
new file mode 100644
index 0000000000..4404121c7c
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/electric_terrain.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/electric_terrain.pal b/graphics/battle_anims/backgrounds/new/electric_terrain.pal
new file mode 100644
index 0000000000..5a56667e40
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/electric_terrain.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+238 24 32
+255 246 205
+246 246 222
+246 238 189
+238 238 213
+238 238 205
+238 230 197
+230 230 180
+230 222 164
+230 222 172
+222 213 139
+213 205 123
+213 205 115
+205 197 106
+197 189 106
+57 49 65
diff --git a/graphics/battle_anims/backgrounds/new/electric_terrain.png b/graphics/battle_anims/backgrounds/new/electric_terrain.png
new file mode 100644
index 0000000000..c84ecaccdf
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/electric_terrain.png differ
diff --git a/graphics/battle_anims/backgrounds/new/fire1.bin b/graphics/battle_anims/backgrounds/new/fire1.bin
new file mode 100644
index 0000000000..84e3c8feca
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/fire1.bin
@@ -0,0 +1,2 @@
+ $
+
$ ! " # $ % & $ ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z L$[ \ ] ^ _ ` a b c d e f g h i j k l m [$n o p q r s t u v w x y z { | b$} ~ n$ $ $ $ d$ ^ $ $ $
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/fire1.pal b/graphics/battle_anims/backgrounds/new/fire1.pal
new file mode 100644
index 0000000000..505606066c
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/fire1.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 255 0
+255 156 0
+255 98 0
+255 49 0
+246 57 16
+238 65 16
+180 65 24
+123 49 24
+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_anims/backgrounds/new/fire1.png b/graphics/battle_anims/backgrounds/new/fire1.png
new file mode 100644
index 0000000000..5f29e792fa
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/fire1.png differ
diff --git a/graphics/battle_anims/backgrounds/new/fire2.pal b/graphics/battle_anims/backgrounds/new/fire2.pal
new file mode 100644
index 0000000000..36b1870d1a
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/fire2.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+104 168 168
+88 144 160
+72 112 160
+64 64 120
+56 80 152
+64 80 144
+72 64 104
+72 56 96
+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_anims/backgrounds/new/focus_blast.bin b/graphics/battle_anims/backgrounds/new/focus_blast.bin
new file mode 100644
index 0000000000..25c569a146
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/focus_blast.bin
@@ -0,0 +1,5 @@
+
+
$$
$$$
+$ $$$$$$$$$ $$$$$$$$$$$$$$$$ ! " # $ % & ' ( ) * + , - . / /$.$-$,$+$*$)$($'$&$%$$$#$"$!$ $0 1 2 3 4 5 6 7 8 9 : ; < = > ? ?$>$=$<$;$:$9$8$7$6$5$4$3$2$1$0$@ A B C D E F G H I J K L M N O O$N$M$L$K$J$I$H$G$F$E$D$C$B$A$@$P Q R S T U V W X Y Z [ \ ] ^ _ _$^$]$\$[$Z$Y$X$W$V$U$T$S$R$Q$P$` a b c d e f g h i j k l m n o o$n$m$l$k$j$i$h$g$f$e$d$c$b$a$`$`(a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,`,P(Q(R(S(T(U(V(W(X(Y(Z([(\(](^(_(_,^,],\,[,Z,Y,X,W,V,U,T,S,R,Q,P,@(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(O,N,M,L,K,J,I,H,G,F,E,D,C,B,A,@,0(1(2(3(4(5(6(7(8(9(:(;(<(=(>(?(?,>,=,<,;,:,9,8,7,6,5,4,3,2,1,0, (!("(#($(%(&('((()(*(+(,(-(.(/(/,.,-,,,+,*,),(,',&,%,$,#,",!, ,((((((((((((((((,,,,,,,,,,,,,,,,((((((((( (
+(((
(((,,
,,,
+, ,,,,,,,,,(
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/focus_blast.pal b/graphics/battle_anims/backgrounds/new/focus_blast.pal
new file mode 100644
index 0000000000..308f63fa25
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/focus_blast.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 98 74
+255 90 65
+255 82 57
+255 139 123
+255 74 49
+255 65 41
+255 57 32
+255 106 90
+255 148 139
+255 131 123
+255 123 115
+255 115 106
+255 106 98
+255 164 164
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/focus_blast.png b/graphics/battle_anims/backgrounds/new/focus_blast.png
new file mode 100644
index 0000000000..7c8755f59a
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/focus_blast.png differ
diff --git a/graphics/battle_anims/backgrounds/new/garbage_falls.pal b/graphics/battle_anims/backgrounds/new/garbage_falls.pal
new file mode 100644
index 0000000000..16a76f920b
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/garbage_falls.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+180 172 148
+159 156 129
+137 140 110
+115 123 90
+0 0 0
+0 0 0
+0 0 0
+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_anims/backgrounds/new/giga_impact.pal b/graphics/battle_anims/backgrounds/new/giga_impact.pal
new file mode 100644
index 0000000000..06f02604a6
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/giga_impact.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+240 136 184
+232 104 168
+136 8 40
+248 24 104
+216 32 96
+224 72 136
+160 0 48
+216 0 64
+200 40 88
+192 0 56
+176 32 128
+176 24 72
+152 16 56
+200 48 80
+216 56 160
diff --git a/graphics/battle_anims/backgrounds/new/giga_impact.png b/graphics/battle_anims/backgrounds/new/giga_impact.png
new file mode 100644
index 0000000000..0d5d705fe3
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/giga_impact.png differ
diff --git a/graphics/battle_anims/backgrounds/new/giga_impact_contest.bin b/graphics/battle_anims/backgrounds/new/giga_impact_contest.bin
new file mode 100644
index 0000000000..03c709bb90
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/giga_impact_contest.bin
@@ -0,0 +1,3 @@
+$$$$$$$$$ D!E!F!G!H!I!@!$$$$$$$$$ $$$$$$$$$
+!!!
!!!!$$$$$$$$$ !!!!!!!$$$$$$$$$ *!+!,!-!.!/!"!$$$$$$$$$ :!;!!?!2!$$$$$$$$$ J!K!L!M!N!O!B!,,,,,,,,,((((((((((((((((J)K)L)M)N)O)B),,,,,,,,,((((((((((((((((:);)<)=)>)?)2),,,,,,,,,((((((((((((((((*)+),)-).)/)"),,,,,,,,,(((((((((((((((())))))),,,,,,,,,((((((((((((((((
+)))
)))),,,,,,,,,(((((((((((((((((((((((,,,,,,,,,((((((((((((((((D)E)F)G)H)I)@)
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/giga_impact_opponent.bin b/graphics/battle_anims/backgrounds/new/giga_impact_opponent.bin
new file mode 100644
index 0000000000..0cfa1f1ec6
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/giga_impact_opponent.bin
@@ -0,0 +1,3 @@
+@%I%H%G%F%E%D%$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$$$$$ %%%
%%%
+%$$$$$$$$$$$$$$$$ %%%%%%%$$$$$$$$$$$$$$$$ "%/%.%-%,%+%*%$$$$$$$$$$$$$$$$ 2%?%>%=%<%;%:%$$$$$$$$$$$$$$$$ B%O%N%M%L%K%J%$$$$$$$$$$$$$$$$ B-O-N-M-L-K-J-,,,,,,,,,,,,,,,,(((((((((2-?->-=-<-;-:-,,,,,,,,,,,,,,,,((((((((("-/-.---,-+-*-,,,,,,,,,,,,,,,,(((((((((-------,,,,,,,,,,,,,,,,(((((((((---
---
+-,,,,,,,,,,,,,,,,(((((((((,,,,,,,,,,,,,,,,,,,,,,,(((((((((@-I-H-G-F-E-D-,,,,,,,,,,,,,,,,(((((((((
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/giga_impact_player.bin b/graphics/battle_anims/backgrounds/new/giga_impact_player.bin
new file mode 100644
index 0000000000..3b89218e0e
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/giga_impact_player.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/grassy_terrain.bin b/graphics/battle_anims/backgrounds/new/grassy_terrain.bin
new file mode 100644
index 0000000000..e955c23199
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/grassy_terrain.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/grassy_terrain.pal b/graphics/battle_anims/backgrounds/new/grassy_terrain.pal
new file mode 100644
index 0000000000..4ad8369ab5
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/grassy_terrain.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+238 24 32
+230 255 238
+172 255 205
+222 255 230
+205 255 222
+180 255 205
+172 255 197
+213 255 230
+197 255 213
+164 255 197
+189 255 213
+213 255 222
+156 246 189
+148 246 180
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/grassy_terrain.png b/graphics/battle_anims/backgrounds/new/grassy_terrain.png
new file mode 100644
index 0000000000..7cdc534afc
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/grassy_terrain.png differ
diff --git a/graphics/battle_anims/backgrounds/new/gunk_shot.pal b/graphics/battle_anims/backgrounds/new/gunk_shot.pal
new file mode 100644
index 0000000000..256db53029
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/gunk_shot.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+205 98 255
+197 90 255
+197 82 255
+213 148 255
+197 72 255
+197 64 255
+189 56 255
+205 106 255
+222 156 255
+205 139 255
+205 131 255
+205 123 255
+205 115 255
+230 180 255
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/hurricane.bin b/graphics/battle_anims/backgrounds/new/hurricane.bin
new file mode 100644
index 0000000000..d5e97d7d0e
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hurricane.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/hurricane.pal b/graphics/battle_anims/backgrounds/new/hurricane.pal
new file mode 100644
index 0000000000..00659f350a
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/hurricane.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+197 255 255
+139 222 246
+115 213 255
+106 205 255
+98 197 255
+90 180 246
+74 164 238
+65 156 238
+49 148 230
+41 139 230
+41 115 213
+32 131 222
+32 98 205
+32 90 197
+41 74 180
diff --git a/graphics/battle_anims/backgrounds/new/hurricane.png b/graphics/battle_anims/backgrounds/new/hurricane.png
new file mode 100644
index 0000000000..4ada195710
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hurricane.png differ
diff --git a/graphics/battle_anims/backgrounds/new/hydro_cannon.bin b/graphics/battle_anims/backgrounds/new/hydro_cannon.bin
new file mode 100644
index 0000000000..dcfd454076
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hydro_cannon.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/hydro_cannon.pal b/graphics/battle_anims/backgrounds/new/hydro_cannon.pal
new file mode 100644
index 0000000000..a543926c3d
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/hydro_cannon.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 255 255
+197 230 255
+139 205 246
+82 172 238
+57 131 205
+32 82 164
+16 41 123
+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_anims/backgrounds/new/hydro_cannon.png b/graphics/battle_anims/backgrounds/new/hydro_cannon.png
new file mode 100644
index 0000000000..b2012c0a8a
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hydro_cannon.png differ
diff --git a/graphics/battle_anims/backgrounds/new/hydro_pump.bin b/graphics/battle_anims/backgrounds/new/hydro_pump.bin
new file mode 100644
index 0000000000..917b5c6c96
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/hydro_pump.bin
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,
+,
,,,
+,
,,,
+,
,,,
+,
,,,
+,
,,,
+,
,,,
+,
,,,
+, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/hydro_pump.pal b/graphics/battle_anims/backgrounds/new/hydro_pump.pal
new file mode 100644
index 0000000000..8f759c28c3
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/hydro_pump.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 255 255
+222 246 255
+189 230 255
+148 213 246
+123 205 255
+90 180 238
+65 164 230
+41 139 222
+24 123 213
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/hydro_pump.png b/graphics/battle_anims/backgrounds/new/hydro_pump.png
new file mode 100644
index 0000000000..89a0f99f6d
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/hydro_pump.png differ
diff --git a/graphics/battle_anims/backgrounds/new/hyper_beam.pal b/graphics/battle_anims/backgrounds/new/hyper_beam.pal
new file mode 100644
index 0000000000..e17c826a6c
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/hyper_beam.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 164 255
+255 255 255
+246 197 222
+230 148 180
+205 98 139
+156 82 106
+90 57 74
+41 32 41
+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_anims/backgrounds/new/hyperspace_fury.pal b/graphics/battle_anims/backgrounds/new/hyperspace_fury.pal
new file mode 100644
index 0000000000..4249177213
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/hyperspace_fury.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+197 0 65
+160 0 0
+80 0 0
+0 0 0
+189 139 0
+80 0 112
+120 0 168
+255 32 106
+0 164 90
+65 0 213
+49 0 123
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/inferno_overdrive.bin b/graphics/battle_anims/backgrounds/new/inferno_overdrive.bin
new file mode 100644
index 0000000000..01cb561035
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/inferno_overdrive.bin
@@ -0,0 +1,3 @@
+
+
+
! " # $ % & ' ( ) * + , - . / 0 ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ q r s t u v w x y z { | } ~
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/inferno_overdrive.pal b/graphics/battle_anims/backgrounds/new/inferno_overdrive.pal
new file mode 100644
index 0000000000..032fe053c0
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/inferno_overdrive.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 255
+255 255 230
+255 255 172
+255 255 139
+255 255 106
+255 238 82
+255 230 65
+255 197 32
+255 172 16
+255 148 8
+238 115 0
+222 82 0
+197 49 0
+156 24 0
+98 8 0
+57 0 0
diff --git a/graphics/battle_anims/backgrounds/new/inferno_overdrive.png b/graphics/battle_anims/backgrounds/new/inferno_overdrive.png
new file mode 100644
index 0000000000..9d4c57fcde
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/inferno_overdrive.png differ
diff --git a/graphics/battle_anims/backgrounds/new/leaf_storm.bin b/graphics/battle_anims/backgrounds/new/leaf_storm.bin
new file mode 100644
index 0000000000..81fa3d3beb
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/leaf_storm.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/leaf_storm.pal b/graphics/battle_anims/backgrounds/new/leaf_storm.pal
new file mode 100644
index 0000000000..06e048750c
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/leaf_storm.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 255 255
+238 246 230
+205 238 180
+213 238 189
+197 230 180
+197 230 172
+172 222 148
+189 222 164
+164 213 139
+156 205 131
+131 197 106
+139 197 115
+123 189 98
+98 180 65
+65 172 32
diff --git a/graphics/battle_anims/backgrounds/new/leaf_storm.png b/graphics/battle_anims/backgrounds/new/leaf_storm.png
new file mode 100644
index 0000000000..6438ea6dca
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/leaf_storm.png differ
diff --git a/graphics/battle_anims/backgrounds/new/magic_room.pal b/graphics/battle_anims/backgrounds/new/magic_room.pal
new file mode 100644
index 0000000000..ad110acec2
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/magic_room.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+248 248 144
+224 224 120
+200 200 96
+176 176 72
+152 152 48
+120 120 16
+0 0 0
+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_anims/backgrounds/new/malicious_moonsault.bin b/graphics/battle_anims/backgrounds/new/malicious_moonsault.bin
new file mode 100644
index 0000000000..03bdeabc7f
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/malicious_moonsault.bin
@@ -0,0 +1,2 @@
+
+
! " "$# $ % & ' ( ) * + , - . / 0 1 2 3 4 ! " 5 6 7 " " 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y 5 z { !$ | } ~ 5$ " \ "$" \ 5$ !
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/malicious_moonsault.pal b/graphics/battle_anims/backgrounds/new/malicious_moonsault.pal
new file mode 100644
index 0000000000..57fe14de30
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/malicious_moonsault.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 255 0
+255 74 74
+238 24 24
+222 65 65
+164 41 41
+164 16 16
+106 32 32
+106 8 8
+65 16 16
+32 24 222
+98 65 222
+24 16 131
+0 0 65
+32 8 8
+8 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/malicious_moonsault.png b/graphics/battle_anims/backgrounds/new/malicious_moonsault.png
new file mode 100644
index 0000000000..34bc5ecc82
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/malicious_moonsault.png differ
diff --git a/graphics/battle_anims/backgrounds/new/max_lightning.bin b/graphics/battle_anims/backgrounds/new/max_lightning.bin
new file mode 100644
index 0000000000..af4c39c1c0
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/max_lightning.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/max_lightning.pal b/graphics/battle_anims/backgrounds/new/max_lightning.pal
new file mode 100644
index 0000000000..679758e697
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/max_lightning.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+238 24 32
+115 115 139
+90 90 106
+74 74 98
+65 65 82
+57 57 74
+49 49 57
+41 41 49
+32 32 41
+24 24 32
+16 16 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/max_lightning.png b/graphics/battle_anims/backgrounds/new/max_lightning.png
new file mode 100644
index 0000000000..57919d5617
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/max_lightning.png differ
diff --git a/graphics/battle_anims/backgrounds/new/misty_terrain.bin b/graphics/battle_anims/backgrounds/new/misty_terrain.bin
new file mode 100644
index 0000000000..26e3cfae3d
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/misty_terrain.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/misty_terrain.pal b/graphics/battle_anims/backgrounds/new/misty_terrain.pal
new file mode 100644
index 0000000000..927973cbec
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/misty_terrain.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+238 24 32
+255 246 246
+255 238 238
+255 230 230
+255 222 230
+255 222 222
+255 213 222
+255 205 213
+255 205 205
+255 197 205
+255 197 197
+255 189 189
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/misty_terrain.png b/graphics/battle_anims/backgrounds/new/misty_terrain.png
new file mode 100644
index 0000000000..1427c5cf02
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/misty_terrain.png differ
diff --git a/graphics/battle_anims/backgrounds/new/neverending_nightmare.bin b/graphics/battle_anims/backgrounds/new/neverending_nightmare.bin
new file mode 100644
index 0000000000..647896804c
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/neverending_nightmare.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/neverending_nightmare.pal b/graphics/battle_anims/backgrounds/new/neverending_nightmare.pal
new file mode 100644
index 0000000000..0edeeac58a
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/neverending_nightmare.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 0
+0 41 98
+0 41 90
+0 32 82
+0 32 74
+0 24 74
+0 24 65
+0 24 57
+0 16 57
+0 16 49
+0 8 41
+0 8 32
+0 0 24
+0 0 16
+0 0 8
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/neverending_nightmare.png b/graphics/battle_anims/backgrounds/new/neverending_nightmare.png
new file mode 100644
index 0000000000..2b2ae414b6
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/neverending_nightmare.png differ
diff --git a/graphics/battle_anims/backgrounds/new/nightmare.bin b/graphics/battle_anims/backgrounds/new/nightmare.bin
new file mode 100644
index 0000000000..11e1bb939b
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/nightmare.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/nightmare.pal b/graphics/battle_anims/backgrounds/new/nightmare.pal
new file mode 100644
index 0000000000..71c950736a
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/nightmare.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+98 49 74
+90 32 65
+82 32 65
+82 32 57
+74 24 57
+0 0 0
+0 0 0
+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_anims/backgrounds/new/nightmare.png b/graphics/battle_anims/backgrounds/new/nightmare.png
new file mode 100644
index 0000000000..e3aaab9a15
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/nightmare.png differ
diff --git a/graphics/battle_anims/backgrounds/new/poison_falls.pal b/graphics/battle_anims/backgrounds/new/poison_falls.pal
new file mode 100644
index 0000000000..cc7799696c
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/poison_falls.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+180 106 255
+180 82 246
+148 65 205
+115 24 205
+0 0 0
+0 0 0
+0 0 0
+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_anims/backgrounds/new/psychic.pal b/graphics/battle_anims/backgrounds/new/psychic.pal
new file mode 100644
index 0000000000..1fef60a1a5
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/psychic.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+19 0 82
+38 0 98
+58 0 114
+78 0 131
+97 0 147
+117 0 164
+137 0 180
+156 0 196
+176 0 213
+196 0 229
+216 0 246
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/psychic_terrain.bin b/graphics/battle_anims/backgrounds/new/psychic_terrain.bin
new file mode 100644
index 0000000000..0ef28b6deb
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/psychic_terrain.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/psychic_terrain.pal b/graphics/battle_anims/backgrounds/new/psychic_terrain.pal
new file mode 100644
index 0000000000..09230dffe9
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/psychic_terrain.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+238 24 32
+246 222 255
+238 213 255
+238 205 246
+230 197 246
+230 180 246
+222 172 246
+222 164 246
+222 156 246
+213 148 246
+205 139 238
+197 115 238
+189 98 238
+189 90 230
+180 74 230
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/psychic_terrain.png b/graphics/battle_anims/backgrounds/new/psychic_terrain.png
new file mode 100644
index 0000000000..359870e4c9
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/psychic_terrain.png differ
diff --git a/graphics/battle_anims/backgrounds/new/rock_wrecker.pal b/graphics/battle_anims/backgrounds/new/rock_wrecker.pal
new file mode 100644
index 0000000000..198e7f034f
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/rock_wrecker.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+96 192 24
+248 248 216
+248 248 176
+248 240 144
+248 232 120
+248 232 112
+248 216 96
+240 200 88
+232 192 72
+232 184 64
+232 176 56
+224 160 32
+216 152 32
+208 136 40
+192 120 40
+176 88 40
diff --git a/graphics/battle_anims/backgrounds/new/shattered_psyche.bin b/graphics/battle_anims/backgrounds/new/shattered_psyche.bin
new file mode 100644
index 0000000000..233f54c104
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/shattered_psyche.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/shattered_psyche.pal b/graphics/battle_anims/backgrounds/new/shattered_psyche.pal
new file mode 100644
index 0000000000..f121cd887a
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/shattered_psyche.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+222 164 255
+238 139 255
+213 139 255
+189 139 255
+213 115 255
+197 90 255
+189 115 246
+172 148 238
+180 90 230
+172 90 213
+156 131 213
+148 82 205
+123 139 197
+131 90 180
+115 123 172
diff --git a/graphics/battle_anims/backgrounds/new/shattered_psyche.png b/graphics/battle_anims/backgrounds/new/shattered_psyche.png
new file mode 100644
index 0000000000..90b0cc4eef
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/shattered_psyche.png differ
diff --git a/graphics/battle_anims/backgrounds/new/sky_afternoon.pal b/graphics/battle_anims/backgrounds/new/sky_afternoon.pal
new file mode 100644
index 0000000000..c7c5805fa7
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/sky_afternoon.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+246 230 180
+255 222 139
+255 230 123
+255 222 106
+255 213 98
+255 197 57
+255 180 32
+255 172 8
+255 156 8
+230 131 8
+222 123 8
+205 106 8
+205 90 8
+197 74 8
+189 57 8
diff --git a/graphics/battle_anims/backgrounds/new/sky_day.bin b/graphics/battle_anims/backgrounds/new/sky_day.bin
new file mode 100644
index 0000000000..a09c865f08
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/sky_day.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/sky_day.pal b/graphics/battle_anims/backgrounds/new/sky_day.pal
new file mode 100644
index 0000000000..c0ea00a0ae
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/sky_day.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+211 216 222
+198 208 221
+184 199 218
+170 191 215
+156 181 212
+142 172 207
+128 162 203
+117 154 198
+104 147 199
+101 141 189
+89 137 194
+82 127 179
+77 128 190
+63 117 184
+52 106 169
diff --git a/graphics/battle_anims/backgrounds/new/sky_day.png b/graphics/battle_anims/backgrounds/new/sky_day.png
new file mode 100644
index 0000000000..c03ce283bb
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/sky_day.png differ
diff --git a/graphics/battle_anims/backgrounds/new/sky_night.pal b/graphics/battle_anims/backgrounds/new/sky_night.pal
new file mode 100644
index 0000000000..4c0622ac52
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/sky_night.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+139 90 222
+131 65 230
+106 41 230
+98 32 230
+98 16 255
+65 8 255
+49 8 205
+41 8 180
+24 0 172
+24 0 156
+32 0 148
+32 0 131
+32 0 115
+24 0 106
+24 0 98
diff --git a/graphics/battle_anims/backgrounds/new/sludge_wave.pal b/graphics/battle_anims/backgrounds/new/sludge_wave.pal
new file mode 100644
index 0000000000..5cf1a102f6
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/sludge_wave.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+175 128 139
+167 70 255
+184 86 255
+208 111 255
+233 136 255
+249 160 255
+255 185 255
+255 210 255
+255 235 255
+167 70 255
+184 86 255
+255 177 255
+255 218 255
+255 235 255
+69 0 0
+69 0 0
diff --git a/graphics/battle_anims/backgrounds/new/snuggle_forever.bin b/graphics/battle_anims/backgrounds/new/snuggle_forever.bin
new file mode 100644
index 0000000000..3abd443178
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/snuggle_forever.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/snuggle_forever.pal b/graphics/battle_anims/backgrounds/new/snuggle_forever.pal
new file mode 100644
index 0000000000..21a4f95fea
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/snuggle_forever.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 255 0
+41 57 16
+115 106 74
+41 74 24
+24 24 24
+32 49 16
+57 57 16
+156 156 123
+74 74 32
+57 98 32
+139 131 98
+123 123 82
+74 115 41
+90 90 49
+90 131 41
+24 32 8
diff --git a/graphics/battle_anims/backgrounds/new/snuggle_forever.png b/graphics/battle_anims/backgrounds/new/snuggle_forever.png
new file mode 100644
index 0000000000..364ee1e067
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/snuggle_forever.png differ
diff --git a/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.bin b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.bin
new file mode 100644
index 0000000000..9bbee7ab43
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.pal b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.pal
new file mode 100644
index 0000000000..8d44d7916b
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 0
+57 197 172
+49 180 164
+49 180 156
+41 180 148
+41 164 148
+41 164 139
+32 164 131
+41 156 139
+24 156 106
+32 148 131
+32 139 131
+24 131 98
+32 123 115
+24 115 98
+24 98 90
diff --git a/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.png b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.png
new file mode 100644
index 0000000000..709860ae00
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.png differ
diff --git a/graphics/battle_anims/backgrounds/new/spacial_rend.pal b/graphics/battle_anims/backgrounds/new/spacial_rend.pal
new file mode 100644
index 0000000000..afc2b31fce
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/spacial_rend.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+208 112 200
+216 184 249
+216 160 232
+211 107 195
+208 104 192
+217 129 209
+216 135 215
+209 120 208
+218 153 226
+216 168 232
+217 176 241
+220 188 252
+203 115 203
+223 182 246
+216 192 248
diff --git a/graphics/battle_anims/backgrounds/new/spacial_rend.png b/graphics/battle_anims/backgrounds/new/spacial_rend.png
new file mode 100644
index 0000000000..ea98198c4c
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/spacial_rend.png differ
diff --git a/graphics/battle_anims/backgrounds/new/steel_beam_bg.pal b/graphics/battle_anims/backgrounds/new/steel_beam_bg.pal
new file mode 100644
index 0000000000..428e564c22
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/steel_beam_bg.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+184 192 224
+168 176 208
+144 152 192
+112 120 168
+96 104 160
+88 96 144
+80 88 136
+72 80 120
+64 72 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/tectonic_rage.bin b/graphics/battle_anims/backgrounds/new/tectonic_rage.bin
new file mode 100644
index 0000000000..914a9deb9a
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/tectonic_rage.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/tectonic_rage.pal b/graphics/battle_anims/backgrounds/new/tectonic_rage.pal
new file mode 100644
index 0000000000..bc3621477e
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/tectonic_rage.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+88 0 0
+184 168 0
+192 144 0
+208 120 0
+224 96 0
+240 72 0
+248 232 0
+248 232 0
+248 184 0
+248 152 0
+248 152 0
+248 112 0
+248 72 0
+248 40 0
+88 0 0
+88 0 0
diff --git a/graphics/battle_anims/backgrounds/new/trick_room.bin b/graphics/battle_anims/backgrounds/new/trick_room.bin
new file mode 100644
index 0000000000..c58eed62a4
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/trick_room.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/trick_room.pal b/graphics/battle_anims/backgrounds/new/trick_room.pal
new file mode 100644
index 0000000000..1861ef92a5
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/trick_room.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+152 184 248
+128 160 240
+104 136 216
+80 112 192
+56 88 168
+24 56 136
+0 0 0
+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_anims/backgrounds/new/trick_room.png b/graphics/battle_anims/backgrounds/new/trick_room.png
new file mode 100644
index 0000000000..8605eb0637
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/trick_room.png differ
diff --git a/graphics/battle_anims/backgrounds/new/twinkle_tackle.bin b/graphics/battle_anims/backgrounds/new/twinkle_tackle.bin
new file mode 100644
index 0000000000..fc81c0ea9f
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/twinkle_tackle.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/twinkle_tackle.pal b/graphics/battle_anims/backgrounds/new/twinkle_tackle.pal
new file mode 100644
index 0000000000..9d86dfc8cc
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/twinkle_tackle.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+230 139 255
+197 106 255
+197 131 255
+164 98 255
+148 90 255
+172 123 255
+131 82 255
+123 90 255
+115 90 255
+106 82 255
+98 82 255
+90 82 255
+90 90 255
+82 115 255
+82 139 255
diff --git a/graphics/battle_anims/backgrounds/new/twinkle_tackle.png b/graphics/battle_anims/backgrounds/new/twinkle_tackle.png
new file mode 100644
index 0000000000..c689f90096
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/twinkle_tackle.png differ
diff --git a/graphics/battle_anims/backgrounds/new/water_pulse.bin b/graphics/battle_anims/backgrounds/new/water_pulse.bin
new file mode 100644
index 0000000000..f6cc14657f
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/water_pulse.bin
@@ -0,0 +1,2 @@
+
+
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/water_pulse.pal b/graphics/battle_anims/backgrounds/new/water_pulse.pal
new file mode 100644
index 0000000000..f27e22541f
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/water_pulse.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 0
+49 57 131
+41 49 115
+32 41 106
+24 32 90
+24 24 82
+32 32 74
+32 24 65
+49 49 74
+49 49 65
+41 41 57
+41 41 49
+41 41 41
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/water_pulse.png b/graphics/battle_anims/backgrounds/new/water_pulse.png
new file mode 100644
index 0000000000..0237efc286
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/water_pulse.png differ
diff --git a/graphics/battle_anims/backgrounds/new/waterfall.bin b/graphics/battle_anims/backgrounds/new/waterfall.bin
new file mode 100644
index 0000000000..eb2085cb29
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/waterfall.bin
@@ -0,0 +1,17 @@
+
+
+
0 ! " # $ % & ' ( ) * + , - . / 0 ! " # $ % & ' ( ) * + , - . / 1 2 2 3 4 5 6 7 8 9 : ; < = > ? 1 2 2 3 4 5 6 7 8 9 : ; < = > ? $$
$$$
+$ $$$$$$$$$$$$
$$$
+$ $$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $/$.$-$,$+$*$)$($'$&$%$$$#$"$!$0$/$.$-$,$+$*$)$($'$&$%$$$#$"$!$0$?$>$=$<$;$:$9$8$7$6$5$4$3$2$2$1$?$>$=$<$;$:$9$8$7$6$5$4$3$2$2$1$
+
+
0 ! " # $ % & ' ( ) * + , - . / 0 ! " # $ % & ' ( ) * + , - . / 1 2 2 3 4 5 6 7 8 9 : ; < = > ? 1 2 2 3 4 5 6 7 8 9 : ; < = > ? $$
$$$
+$ $$$$$$$$$$$$
$$$
+$ $$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $/$.$-$,$+$*$)$($'$&$%$$$#$"$!$0$/$.$-$,$+$*$)$($'$&$%$$$#$"$!$0$?$>$=$<$;$:$9$8$7$6$5$4$3$2$2$1$?$>$=$<$;$:$9$8$7$6$5$4$3$2$2$1$
+
+
0 ! " # $ % & ' ( ) * + , - . / 0 ! " # $ % & ' ( ) * + , - . / 1 2 2 3 4 5 6 7 8 9 : ; < = > ? 1 2 2 3 4 5 6 7 8 9 : ; < = > ? $$
$$$
+$ $$$$$$$$$$$$
$$$
+$ $$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $/$.$-$,$+$*$)$($'$&$%$$$#$"$!$0$/$.$-$,$+$*$)$($'$&$%$$$#$"$!$0$?$>$=$<$;$:$9$8$7$6$5$4$3$2$2$1$?$>$=$<$;$:$9$8$7$6$5$4$3$2$2$1$
+
+
0 ! " # $ % & ' ( ) * + , - . / 0 ! " # $ % & ' ( ) * + , - . / 1 2 2 3 4 5 6 7 8 9 : ; < = > ? 1 2 2 3 4 5 6 7 8 9 : ; < = > ? $$
$$$
+$ $$$$$$$$$$$$
$$$
+$ $$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $/$.$-$,$+$*$)$($'$&$%$$$#$"$!$0$/$.$-$,$+$*$)$($'$&$%$$$#$"$!$0$?$>$=$<$;$:$9$8$7$6$5$4$3$2$2$1$?$>$=$<$;$:$9$8$7$6$5$4$3$2$2$1$
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/waterfall.pal b/graphics/battle_anims/backgrounds/new/waterfall.pal
new file mode 100644
index 0000000000..69a25c589c
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/waterfall.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+128 200 232
+120 176 216
+112 152 200
+112 136 160
+0 0 0
+0 0 0
+0 0 0
+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_anims/backgrounds/new/waterfall.png b/graphics/battle_anims/backgrounds/new/waterfall.png
new file mode 100644
index 0000000000..3ddb1a0a26
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/waterfall.png differ
diff --git a/graphics/battle_anims/backgrounds/new/wonder_room.pal b/graphics/battle_anims/backgrounds/new/wonder_room.pal
new file mode 100644
index 0000000000..89addaae0a
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/wonder_room.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+248 144 248
+224 120 224
+200 96 200
+176 72 176
+152 48 152
+120 16 120
+0 0 0
+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_anims/backgrounds/new/zmove_activate.bin b/graphics/battle_anims/backgrounds/new/zmove_activate.bin
new file mode 100644
index 0000000000..45bca27ec4
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/zmove_activate.bin
@@ -0,0 +1,2 @@
+
+
! " # $ % % % % % & ' ' ' ( % ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > > > ? @ A B B B B B B C @ @ @ D D E F G H I J K L M N O O O O P P Q P P R S T S R$P U V W X Y Z [ \ ] ^ _ ` a b b b c d e f g h h h h h i j j j j j k l m n o p p p q r r$s t u v w w x y y y z { | } ~ ~ ~ ~ ~ ~ ~ $
\ No newline at end of file
diff --git a/graphics/battle_anims/backgrounds/new/zmove_activate.pal b/graphics/battle_anims/backgrounds/new/zmove_activate.pal
new file mode 100644
index 0000000000..58d03f19f0
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/zmove_activate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+213 197 255
+189 189 255
+164 189 255
+139 172 246
+115 156 238
+139 222 255
+115 230 255
+90 213 238
+98 180 246
+82 172 222
+90 148 222
+65 148 205
+65 123 189
+41 98 172
+32 82 148
diff --git a/graphics/battle_anims/backgrounds/new/zmove_activate.png b/graphics/battle_anims/backgrounds/new/zmove_activate.png
new file mode 100644
index 0000000000..6f5cb77e7a
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/zmove_activate.png differ
diff --git a/graphics/battle_anims/backgrounds/new/zmove_mountain.bin b/graphics/battle_anims/backgrounds/new/zmove_mountain.bin
new file mode 100644
index 0000000000..86ad39727b
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/zmove_mountain.bin differ
diff --git a/graphics/battle_anims/backgrounds/new/zmove_mountain.pal b/graphics/battle_anims/backgrounds/new/zmove_mountain.pal
new file mode 100644
index 0000000000..d351f72e76
--- /dev/null
+++ b/graphics/battle_anims/backgrounds/new/zmove_mountain.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 0
+74 24 0
+65 24 0
+65 32 8
+57 24 0
+57 24 8
+49 24 8
+49 24 0
+49 16 0
+41 16 0
+41 8 0
+32 8 0
+24 0 0
+16 0 0
+8 0 0
+0 0 0
diff --git a/graphics/battle_anims/backgrounds/new/zmove_mountain.png b/graphics/battle_anims/backgrounds/new/zmove_mountain.png
new file mode 100644
index 0000000000..83a9f22ff5
Binary files /dev/null and b/graphics/battle_anims/backgrounds/new/zmove_mountain.png differ
diff --git a/graphics/battle_anims/backgrounds/windstorm_brew.png b/graphics/battle_anims/backgrounds/windstorm_brew.png
new file mode 100644
index 0000000000..2a28952662
Binary files /dev/null and b/graphics/battle_anims/backgrounds/windstorm_brew.png differ
diff --git a/graphics/battle_anims/sprites/accupressure.png b/graphics/battle_anims/sprites/accupressure.png
new file mode 100644
index 0000000000..0da836ff3f
Binary files /dev/null and b/graphics/battle_anims/sprites/accupressure.png differ
diff --git a/graphics/battle_anims/sprites/alpha_symbol.png b/graphics/battle_anims/sprites/alpha_symbol.png
new file mode 100644
index 0000000000..34ff13de35
Binary files /dev/null and b/graphics/battle_anims/sprites/alpha_symbol.png differ
diff --git a/graphics/battle_anims/sprites/attack_order.png b/graphics/battle_anims/sprites/attack_order.png
new file mode 100644
index 0000000000..18531b8304
Binary files /dev/null and b/graphics/battle_anims/sprites/attack_order.png differ
diff --git a/graphics/battle_anims/sprites/colored_orbs.png b/graphics/battle_anims/sprites/colored_orbs.png
new file mode 100644
index 0000000000..3bd3a55dd3
Binary files /dev/null and b/graphics/battle_anims/sprites/colored_orbs.png differ
diff --git a/graphics/battle_anims/sprites/dragon_pulse.png b/graphics/battle_anims/sprites/dragon_pulse.png
new file mode 100644
index 0000000000..cc6e28bc32
Binary files /dev/null and b/graphics/battle_anims/sprites/dragon_pulse.png differ
diff --git a/graphics/battle_anims/sprites/energy_ball.png b/graphics/battle_anims/sprites/energy_ball.png
new file mode 100644
index 0000000000..b3b26d6068
Binary files /dev/null and b/graphics/battle_anims/sprites/energy_ball.png differ
diff --git a/graphics/battle_anims/sprites/feint_punch.png b/graphics/battle_anims/sprites/feint_punch.png
new file mode 100644
index 0000000000..5769415193
Binary files /dev/null and b/graphics/battle_anims/sprites/feint_punch.png differ
diff --git a/graphics/battle_anims/sprites/flash_cannon_ball.png b/graphics/battle_anims/sprites/flash_cannon_ball.png
new file mode 100644
index 0000000000..b08d1d39f4
Binary files /dev/null and b/graphics/battle_anims/sprites/flash_cannon_ball.png differ
diff --git a/graphics/battle_anims/sprites/mega_particles.png b/graphics/battle_anims/sprites/mega_particles.png
new file mode 100644
index 0000000000..6fdf09d96e
Binary files /dev/null and b/graphics/battle_anims/sprites/mega_particles.png differ
diff --git a/graphics/battle_anims/sprites/mega_stone.png b/graphics/battle_anims/sprites/mega_stone.png
new file mode 100644
index 0000000000..e3350bbb54
Binary files /dev/null and b/graphics/battle_anims/sprites/mega_stone.png differ
diff --git a/graphics/battle_anims/sprites/mega_symbol.png b/graphics/battle_anims/sprites/mega_symbol.png
new file mode 100644
index 0000000000..7ca305a137
Binary files /dev/null and b/graphics/battle_anims/sprites/mega_symbol.png differ
diff --git a/graphics/battle_anims/sprites/new/ability_pop_up.png b/graphics/battle_anims/sprites/new/ability_pop_up.png
new file mode 100644
index 0000000000..12b976a49e
Binary files /dev/null and b/graphics/battle_anims/sprites/new/ability_pop_up.png differ
diff --git a/graphics/battle_anims/sprites/new/acupressure_finger.png b/graphics/battle_anims/sprites/new/acupressure_finger.png
new file mode 100644
index 0000000000..50b1d92801
Binary files /dev/null and b/graphics/battle_anims/sprites/new/acupressure_finger.png differ
diff --git a/graphics/battle_anims/sprites/new/alpha_stone.png b/graphics/battle_anims/sprites/new/alpha_stone.png
new file mode 100644
index 0000000000..334aed6062
Binary files /dev/null and b/graphics/battle_anims/sprites/new/alpha_stone.png differ
diff --git a/graphics/battle_anims/sprites/new/anchor.png b/graphics/battle_anims/sprites/new/anchor.png
new file mode 100644
index 0000000000..71cc11b8b9
Binary files /dev/null and b/graphics/battle_anims/sprites/new/anchor.png differ
diff --git a/graphics/battle_anims/sprites/new/apple.png b/graphics/battle_anims/sprites/new/apple.png
new file mode 100644
index 0000000000..a9cd54d4d6
Binary files /dev/null and b/graphics/battle_anims/sprites/new/apple.png differ
diff --git a/graphics/battle_anims/sprites/new/arrows.png b/graphics/battle_anims/sprites/new/arrows.png
new file mode 100644
index 0000000000..a0f58a097e
Binary files /dev/null and b/graphics/battle_anims/sprites/new/arrows.png differ
diff --git a/graphics/battle_anims/sprites/new/assurance_hand.png b/graphics/battle_anims/sprites/new/assurance_hand.png
new file mode 100644
index 0000000000..45dc9a626c
Binary files /dev/null and b/graphics/battle_anims/sprites/new/assurance_hand.png differ
diff --git a/graphics/battle_anims/sprites/new/aura_sphere.png b/graphics/battle_anims/sprites/new/aura_sphere.png
new file mode 100644
index 0000000000..04c5030245
Binary files /dev/null and b/graphics/battle_anims/sprites/new/aura_sphere.png differ
diff --git a/graphics/battle_anims/sprites/new/avalanche_rocks.pal b/graphics/battle_anims/sprites/new/avalanche_rocks.pal
new file mode 100644
index 0000000000..246940cc27
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/avalanche_rocks.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+205 189 230
+106 180 180
+106 180 180
+115 213 213
+131 230 230
+131 230 230
+139 238 238
+148 246 246
+164 246 246
+189 255 255
+205 255 255
+222 255 255
+238 255 255
+238 255 255
+255 255 255
+255 255 255
diff --git a/graphics/battle_anims/sprites/new/baton_pass_ball.png b/graphics/battle_anims/sprites/new/baton_pass_ball.png
new file mode 100644
index 0000000000..e32e595296
Binary files /dev/null and b/graphics/battle_anims/sprites/new/baton_pass_ball.png differ
diff --git a/graphics/battle_anims/sprites/new/bee.png b/graphics/battle_anims/sprites/new/bee.png
new file mode 100644
index 0000000000..448935c10a
Binary files /dev/null and b/graphics/battle_anims/sprites/new/bee.png differ
diff --git a/graphics/battle_anims/sprites/new/berry_eaten.png b/graphics/battle_anims/sprites/new/berry_eaten.png
new file mode 100644
index 0000000000..2a49e6e0ec
Binary files /dev/null and b/graphics/battle_anims/sprites/new/berry_eaten.png differ
diff --git a/graphics/battle_anims/sprites/new/berry_normal.png b/graphics/battle_anims/sprites/new/berry_normal.png
new file mode 100644
index 0000000000..53ed3361dc
Binary files /dev/null and b/graphics/battle_anims/sprites/new/berry_normal.png differ
diff --git a/graphics/battle_anims/sprites/new/big_rock.png b/graphics/battle_anims/sprites/new/big_rock.png
new file mode 100644
index 0000000000..248fbc36e2
Binary files /dev/null and b/graphics/battle_anims/sprites/new/big_rock.png differ
diff --git a/graphics/battle_anims/sprites/new/blacephalon_head.png b/graphics/battle_anims/sprites/new/blacephalon_head.png
new file mode 100644
index 0000000000..4dae3ec968
Binary files /dev/null and b/graphics/battle_anims/sprites/new/blacephalon_head.png differ
diff --git a/graphics/battle_anims/sprites/new/blue_flare.pal b/graphics/battle_anims/sprites/new/blue_flare.pal
new file mode 100644
index 0000000000..3b224c3459
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/blue_flare.pal
@@ -0,0 +1,259 @@
+JASC-PAL
+0100
+256
+0 0 0
+248 248 248
+205 248 255
+139 180 255
+106 230 255
+57 238 255
+24 238 255
+24 172 255
+57 156 255
+16 96 255
+8 48 255
+0 0 255
+0 0 156
+238 238 238
+189 189 189
+156 164 164
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+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_anims/sprites/new/branch.png b/graphics/battle_anims/sprites/new/branch.png
new file mode 100644
index 0000000000..edd1a50e89
Binary files /dev/null and b/graphics/battle_anims/sprites/new/branch.png differ
diff --git a/graphics/battle_anims/sprites/new/brine.png b/graphics/battle_anims/sprites/new/brine.png
new file mode 100644
index 0000000000..b585513ca9
Binary files /dev/null and b/graphics/battle_anims/sprites/new/brine.png differ
diff --git a/graphics/battle_anims/sprites/new/cacoon.png b/graphics/battle_anims/sprites/new/cacoon.png
new file mode 100644
index 0000000000..55b17ce8ae
Binary files /dev/null and b/graphics/battle_anims/sprites/new/cacoon.png differ
diff --git a/graphics/battle_anims/sprites/new/chain_link.png b/graphics/battle_anims/sprites/new/chain_link.png
new file mode 100644
index 0000000000..bf54b11cf2
Binary files /dev/null and b/graphics/battle_anims/sprites/new/chain_link.png differ
diff --git a/graphics/battle_anims/sprites/new/chop.png b/graphics/battle_anims/sprites/new/chop.png
new file mode 100644
index 0000000000..2afff2b3f2
Binary files /dev/null and b/graphics/battle_anims/sprites/new/chop.png differ
diff --git a/graphics/battle_anims/sprites/new/confide.png b/graphics/battle_anims/sprites/new/confide.png
new file mode 100644
index 0000000000..adb65b8052
Binary files /dev/null and b/graphics/battle_anims/sprites/new/confide.png differ
diff --git a/graphics/battle_anims/sprites/new/crafty_shield.png b/graphics/battle_anims/sprites/new/crafty_shield.png
new file mode 100644
index 0000000000..091047fd10
Binary files /dev/null and b/graphics/battle_anims/sprites/new/crafty_shield.png differ
diff --git a/graphics/battle_anims/sprites/new/curse_nail.png b/graphics/battle_anims/sprites/new/curse_nail.png
new file mode 100644
index 0000000000..0e0e6654e2
Binary files /dev/null and b/graphics/battle_anims/sprites/new/curse_nail.png differ
diff --git a/graphics/battle_anims/sprites/new/draco_meteor.pal b/graphics/battle_anims/sprites/new/draco_meteor.pal
new file mode 100644
index 0000000000..b2689acd4b
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/draco_meteor.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+189 0 189
+0 0 0
+18 18 18
+27 27 27
+35 35 35
+48 48 48
+53 53 53
+65 65 65
+74 74 74
+89 89 89
+98 98 98
+108 108 108
+119 119 119
+121 121 121
+137 137 137
+151 151 151
diff --git a/graphics/battle_anims/sprites/new/dragon_pulse_ring.png b/graphics/battle_anims/sprites/new/dragon_pulse_ring.png
new file mode 100644
index 0000000000..44495f64b6
Binary files /dev/null and b/graphics/battle_anims/sprites/new/dragon_pulse_ring.png differ
diff --git a/graphics/battle_anims/sprites/new/dreepy_missile.png b/graphics/battle_anims/sprites/new/dreepy_missile.png
new file mode 100644
index 0000000000..73fe2d2f21
Binary files /dev/null and b/graphics/battle_anims/sprites/new/dreepy_missile.png differ
diff --git a/graphics/battle_anims/sprites/new/drill.png b/graphics/battle_anims/sprites/new/drill.png
new file mode 100644
index 0000000000..a97eeaaf50
Binary files /dev/null and b/graphics/battle_anims/sprites/new/drill.png differ
diff --git a/graphics/battle_anims/sprites/new/embers.png b/graphics/battle_anims/sprites/new/embers.png
new file mode 100644
index 0000000000..8bf2dd5aa6
Binary files /dev/null and b/graphics/battle_anims/sprites/new/embers.png differ
diff --git a/graphics/battle_anims/sprites/new/energy_ball.png b/graphics/battle_anims/sprites/new/energy_ball.png
new file mode 100644
index 0000000000..361d7ff71a
Binary files /dev/null and b/graphics/battle_anims/sprites/new/energy_ball.png differ
diff --git a/graphics/battle_anims/sprites/new/fairy_lock_chains.png b/graphics/battle_anims/sprites/new/fairy_lock_chains.png
new file mode 100644
index 0000000000..8db2c26694
Binary files /dev/null and b/graphics/battle_anims/sprites/new/fairy_lock_chains.png differ
diff --git a/graphics/battle_anims/sprites/new/fishies.png b/graphics/battle_anims/sprites/new/fishies.png
new file mode 100644
index 0000000000..4abdbb9007
Binary files /dev/null and b/graphics/battle_anims/sprites/new/fishies.png differ
diff --git a/graphics/battle_anims/sprites/new/flash_cannon_ball.png b/graphics/battle_anims/sprites/new/flash_cannon_ball.png
new file mode 100644
index 0000000000..b08d1d39f4
Binary files /dev/null and b/graphics/battle_anims/sprites/new/flash_cannon_ball.png differ
diff --git a/graphics/battle_anims/sprites/new/fly.png b/graphics/battle_anims/sprites/new/fly.png
new file mode 100644
index 0000000000..dd1149de99
Binary files /dev/null and b/graphics/battle_anims/sprites/new/fly.png differ
diff --git a/graphics/battle_anims/sprites/new/fusion_flare.pal b/graphics/battle_anims/sprites/new/fusion_flare.pal
new file mode 100644
index 0000000000..7143d0fb4a
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/fusion_flare.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+248 88 0
+248 0 16
+200 0 8
+144 0 0
+128 0 0
+112 0 0
+96 0 0
+80 0 0
+0 0 0
+0 0 0
+128 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/sprites/new/garbage_poison_column.pal b/graphics/battle_anims/sprites/new/garbage_poison_column.pal
new file mode 100644
index 0000000000..e9ce028df0
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/garbage_poison_column.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 0
+255 255 255
+236 239 234
+216 222 212
+197 206 191
+177 189 169
+157 173 147
+138 156 126
+118 140 104
+98 123 82
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/sprites/new/gear.png b/graphics/battle_anims/sprites/new/gear.png
new file mode 100644
index 0000000000..30f670c80c
Binary files /dev/null and b/graphics/battle_anims/sprites/new/gear.png differ
diff --git a/graphics/battle_anims/sprites/new/gigavolt_havoc_spear.png b/graphics/battle_anims/sprites/new/gigavolt_havoc_spear.png
new file mode 100644
index 0000000000..7abc0bab58
Binary files /dev/null and b/graphics/battle_anims/sprites/new/gigavolt_havoc_spear.png differ
diff --git a/graphics/battle_anims/sprites/new/golden_apple.png b/graphics/battle_anims/sprites/new/golden_apple.png
new file mode 100644
index 0000000000..0898d7c6a0
Binary files /dev/null and b/graphics/battle_anims/sprites/new/golden_apple.png differ
diff --git a/graphics/battle_anims/sprites/new/green_drake.pal b/graphics/battle_anims/sprites/new/green_drake.pal
new file mode 100644
index 0000000000..697da896bc
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/green_drake.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+164 148 139
+0 205 0
+0 180 0
+0 156 0
+0 123 16
+0 106 16
+0 82 0
+0 0 0
+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_anims/sprites/new/green_star.png b/graphics/battle_anims/sprites/new/green_star.png
new file mode 100644
index 0000000000..21218ceb6d
Binary files /dev/null and b/graphics/battle_anims/sprites/new/green_star.png differ
diff --git a/graphics/battle_anims/sprites/new/heart_stamp.png b/graphics/battle_anims/sprites/new/heart_stamp.png
new file mode 100644
index 0000000000..4938e7e9ee
Binary files /dev/null and b/graphics/battle_anims/sprites/new/heart_stamp.png differ
diff --git a/graphics/battle_anims/sprites/new/hexes.png b/graphics/battle_anims/sprites/new/hexes.png
new file mode 100644
index 0000000000..7f00eeaf1d
Binary files /dev/null and b/graphics/battle_anims/sprites/new/hexes.png differ
diff --git a/graphics/battle_anims/sprites/new/hoopa_hand.png b/graphics/battle_anims/sprites/new/hoopa_hand.png
new file mode 100644
index 0000000000..02aaccf13c
Binary files /dev/null and b/graphics/battle_anims/sprites/new/hoopa_hand.png differ
diff --git a/graphics/battle_anims/sprites/new/hoopa_ring.png b/graphics/battle_anims/sprites/new/hoopa_ring.png
new file mode 100644
index 0000000000..bc49e1ce31
Binary files /dev/null and b/graphics/battle_anims/sprites/new/hoopa_ring.png differ
diff --git a/graphics/battle_anims/sprites/new/horn.png b/graphics/battle_anims/sprites/new/horn.png
new file mode 100644
index 0000000000..9bdf61d7d9
Binary files /dev/null and b/graphics/battle_anims/sprites/new/horn.png differ
diff --git a/graphics/battle_anims/sprites/new/horn_leech.png b/graphics/battle_anims/sprites/new/horn_leech.png
new file mode 100644
index 0000000000..572079ee69
Binary files /dev/null and b/graphics/battle_anims/sprites/new/horn_leech.png differ
diff --git a/graphics/battle_anims/sprites/new/horseshoe_fist.png b/graphics/battle_anims/sprites/new/horseshoe_fist.png
new file mode 100644
index 0000000000..b8010530e2
Binary files /dev/null and b/graphics/battle_anims/sprites/new/horseshoe_fist.png differ
diff --git a/graphics/battle_anims/sprites/new/hydro_pump.png b/graphics/battle_anims/sprites/new/hydro_pump.png
new file mode 100644
index 0000000000..79e5b9d9cb
Binary files /dev/null and b/graphics/battle_anims/sprites/new/hydro_pump.png differ
diff --git a/graphics/battle_anims/sprites/new/ice_rock.png b/graphics/battle_anims/sprites/new/ice_rock.png
new file mode 100644
index 0000000000..d5ecc19d6d
Binary files /dev/null and b/graphics/battle_anims/sprites/new/ice_rock.png differ
diff --git a/graphics/battle_anims/sprites/new/impact.pal b/graphics/battle_anims/sprites/new/impact.pal
new file mode 100644
index 0000000000..644d27307c
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/impact.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 0 0
+255 99 0
+255 156 0
+255 197 0
+255 214 99
+255 239 197
+0 0 0
+214 214 214
+99 140 99
+197 197 197
+230 230 230
+132 132 132
+165 165 165
+206 206 206
+247 247 247
diff --git a/graphics/battle_anims/sprites/new/large_spike.png b/graphics/battle_anims/sprites/new/large_spike.png
new file mode 100644
index 0000000000..6af8634c57
Binary files /dev/null and b/graphics/battle_anims/sprites/new/large_spike.png differ
diff --git a/graphics/battle_anims/sprites/new/leaves.png b/graphics/battle_anims/sprites/new/leaves.png
new file mode 100644
index 0000000000..4ced398dae
Binary files /dev/null and b/graphics/battle_anims/sprites/new/leaves.png differ
diff --git a/graphics/battle_anims/sprites/new/leech_seed.png b/graphics/battle_anims/sprites/new/leech_seed.png
new file mode 100644
index 0000000000..a0246870f8
Binary files /dev/null and b/graphics/battle_anims/sprites/new/leech_seed.png differ
diff --git a/graphics/battle_anims/sprites/new/lightning_rain.png b/graphics/battle_anims/sprites/new/lightning_rain.png
new file mode 100644
index 0000000000..c2d81405d0
Binary files /dev/null and b/graphics/battle_anims/sprites/new/lightning_rain.png differ
diff --git a/graphics/battle_anims/sprites/new/mean_look.png b/graphics/battle_anims/sprites/new/mean_look.png
new file mode 100644
index 0000000000..30e6eb5eea
Binary files /dev/null and b/graphics/battle_anims/sprites/new/mean_look.png differ
diff --git a/graphics/battle_anims/sprites/new/metal_bits.png b/graphics/battle_anims/sprites/new/metal_bits.png
new file mode 100644
index 0000000000..637149e5d6
Binary files /dev/null and b/graphics/battle_anims/sprites/new/metal_bits.png differ
diff --git a/graphics/battle_anims/sprites/new/mud_bomb.png b/graphics/battle_anims/sprites/new/mud_bomb.png
new file mode 100644
index 0000000000..ebb03dfe49
Binary files /dev/null and b/graphics/battle_anims/sprites/new/mud_bomb.png differ
diff --git a/graphics/battle_anims/sprites/new/mushroom.png b/graphics/battle_anims/sprites/new/mushroom.png
new file mode 100644
index 0000000000..413503c26c
Binary files /dev/null and b/graphics/battle_anims/sprites/new/mushroom.png differ
diff --git a/graphics/battle_anims/sprites/new/natural_gift_ring.pal b/graphics/battle_anims/sprites/new/natural_gift_ring.pal
new file mode 100644
index 0000000000..10ac6cb7ec
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/natural_gift_ring.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 255 255
+214 255 181
+197 255 156
+189 255 132
+173 255 115
+173 255 107
+165 255 99
+156 255 82
+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_anims/sprites/new/necrozma_star.png b/graphics/battle_anims/sprites/new/necrozma_star.png
new file mode 100644
index 0000000000..ffd7246600
Binary files /dev/null and b/graphics/battle_anims/sprites/new/necrozma_star.png differ
diff --git a/graphics/battle_anims/sprites/new/obstruct.png b/graphics/battle_anims/sprites/new/obstruct.png
new file mode 100644
index 0000000000..79400e6e15
Binary files /dev/null and b/graphics/battle_anims/sprites/new/obstruct.png differ
diff --git a/graphics/battle_anims/sprites/new/omega_stone.png b/graphics/battle_anims/sprites/new/omega_stone.png
new file mode 100644
index 0000000000..d9aa568bee
Binary files /dev/null and b/graphics/battle_anims/sprites/new/omega_stone.png differ
diff --git a/graphics/battle_anims/sprites/new/pink_diamond.png b/graphics/battle_anims/sprites/new/pink_diamond.png
new file mode 100644
index 0000000000..120848fa16
Binary files /dev/null and b/graphics/battle_anims/sprites/new/pink_diamond.png differ
diff --git a/graphics/battle_anims/sprites/new/poison_column.png b/graphics/battle_anims/sprites/new/poison_column.png
new file mode 100644
index 0000000000..dfe0bb27ec
Binary files /dev/null and b/graphics/battle_anims/sprites/new/poison_column.png differ
diff --git a/graphics/battle_anims/sprites/new/poison_jab.png b/graphics/battle_anims/sprites/new/poison_jab.png
new file mode 100644
index 0000000000..02bbf1b857
Binary files /dev/null and b/graphics/battle_anims/sprites/new/poison_jab.png differ
diff --git a/graphics/battle_anims/sprites/new/poltergeist.pal b/graphics/battle_anims/sprites/new/poltergeist.pal
new file mode 100644
index 0000000000..699ab1ffa7
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/poltergeist.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+246 246 246
+246 246 246
+213 197 230
+213 197 230
+180 148 213
+180 148 213
+180 148 213
+148 98 197
+115 65 164
+82 32 131
+82 32 131
+82 32 131
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/sprites/new/power_gem.png b/graphics/battle_anims/sprites/new/power_gem.png
new file mode 100644
index 0000000000..5523bb8a75
Binary files /dev/null and b/graphics/battle_anims/sprites/new/power_gem.png differ
diff --git a/graphics/battle_anims/sprites/new/power_trick.png b/graphics/battle_anims/sprites/new/power_trick.png
new file mode 100644
index 0000000000..53f9927634
Binary files /dev/null and b/graphics/battle_anims/sprites/new/power_trick.png differ
diff --git a/graphics/battle_anims/sprites/new/punishment.png b/graphics/battle_anims/sprites/new/punishment.png
new file mode 100644
index 0000000000..9215b6ec07
Binary files /dev/null and b/graphics/battle_anims/sprites/new/punishment.png differ
diff --git a/graphics/battle_anims/sprites/new/purple_drake.png b/graphics/battle_anims/sprites/new/purple_drake.png
new file mode 100644
index 0000000000..372f9a3789
Binary files /dev/null and b/graphics/battle_anims/sprites/new/purple_drake.png differ
diff --git a/graphics/battle_anims/sprites/new/quick_guard.png b/graphics/battle_anims/sprites/new/quick_guard.png
new file mode 100644
index 0000000000..71d343eeb5
Binary files /dev/null and b/graphics/battle_anims/sprites/new/quick_guard.png differ
diff --git a/graphics/battle_anims/sprites/new/razor_shell.png b/graphics/battle_anims/sprites/new/razor_shell.png
new file mode 100644
index 0000000000..fa39b37fa6
Binary files /dev/null and b/graphics/battle_anims/sprites/new/razor_shell.png differ
diff --git a/graphics/battle_anims/sprites/new/rock_small.png b/graphics/battle_anims/sprites/new/rock_small.png
new file mode 100644
index 0000000000..1ec3be87a4
Binary files /dev/null and b/graphics/battle_anims/sprites/new/rock_small.png differ
diff --git a/graphics/battle_anims/sprites/new/rocks.png b/graphics/battle_anims/sprites/new/rocks.png
new file mode 100644
index 0000000000..4393817a77
Binary files /dev/null and b/graphics/battle_anims/sprites/new/rocks.png differ
diff --git a/graphics/battle_anims/sprites/new/shell_left.png b/graphics/battle_anims/sprites/new/shell_left.png
new file mode 100644
index 0000000000..fda9142ad0
Binary files /dev/null and b/graphics/battle_anims/sprites/new/shell_left.png differ
diff --git a/graphics/battle_anims/sprites/new/shell_right.png b/graphics/battle_anims/sprites/new/shell_right.png
new file mode 100644
index 0000000000..70f5235a77
Binary files /dev/null and b/graphics/battle_anims/sprites/new/shell_right.png differ
diff --git a/graphics/battle_anims/sprites/new/spacial_rend_slices.pal b/graphics/battle_anims/sprites/new/spacial_rend_slices.pal
new file mode 100644
index 0000000000..7a8b9dd554
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/spacial_rend_slices.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+99 41 255
+0 0 0
+206 115 206
+214 123 206
+222 181 247
+0 0 0
+0 0 0
+0 0 0
+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_anims/sprites/new/spikes.png b/graphics/battle_anims/sprites/new/spikes.png
new file mode 100644
index 0000000000..33080420ec
Binary files /dev/null and b/graphics/battle_anims/sprites/new/spikes.png differ
diff --git a/graphics/battle_anims/sprites/new/spirit_shackle_arrow.png b/graphics/battle_anims/sprites/new/spirit_shackle_arrow.png
new file mode 100644
index 0000000000..ff86f33d21
Binary files /dev/null and b/graphics/battle_anims/sprites/new/spirit_shackle_arrow.png differ
diff --git a/graphics/battle_anims/sprites/new/stealth_rock.png b/graphics/battle_anims/sprites/new/stealth_rock.png
new file mode 100644
index 0000000000..6ade3bb879
Binary files /dev/null and b/graphics/battle_anims/sprites/new/stealth_rock.png differ
diff --git a/graphics/battle_anims/sprites/new/steam_eruption.png b/graphics/battle_anims/sprites/new/steam_eruption.png
new file mode 100644
index 0000000000..2eb8535654
Binary files /dev/null and b/graphics/battle_anims/sprites/new/steam_eruption.png differ
diff --git a/graphics/battle_anims/sprites/new/steamroller.png b/graphics/battle_anims/sprites/new/steamroller.png
new file mode 100644
index 0000000000..8abdef6692
Binary files /dev/null and b/graphics/battle_anims/sprites/new/steamroller.png differ
diff --git a/graphics/battle_anims/sprites/new/steel_beam.pal b/graphics/battle_anims/sprites/new/steel_beam.pal
new file mode 100644
index 0000000000..f9448fcdd4
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/steel_beam.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+112 120 208
+128 136 216
+144 152 224
+160 168 232
+176 184 240
+192 200 248
+208 216 248
+248 248 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+248 192 216
+248 248 168
+0 0 0
diff --git a/graphics/battle_anims/sprites/new/stone_edge.png b/graphics/battle_anims/sprites/new/stone_edge.png
new file mode 100644
index 0000000000..8e27efb9a2
Binary files /dev/null and b/graphics/battle_anims/sprites/new/stone_edge.png differ
diff --git a/graphics/battle_anims/sprites/new/stone_pillar.png b/graphics/battle_anims/sprites/new/stone_pillar.png
new file mode 100644
index 0000000000..8ee5d4a2fa
Binary files /dev/null and b/graphics/battle_anims/sprites/new/stone_pillar.png differ
diff --git a/graphics/battle_anims/sprites/new/straight_beam.png b/graphics/battle_anims/sprites/new/straight_beam.png
new file mode 100644
index 0000000000..c13ae95d0b
Binary files /dev/null and b/graphics/battle_anims/sprites/new/straight_beam.png differ
diff --git a/graphics/battle_anims/sprites/new/substitute_back.png b/graphics/battle_anims/sprites/new/substitute_back.png
new file mode 100644
index 0000000000..fd31e1063c
Binary files /dev/null and b/graphics/battle_anims/sprites/new/substitute_back.png differ
diff --git a/graphics/battle_anims/sprites/new/substitute_front.png b/graphics/battle_anims/sprites/new/substitute_front.png
new file mode 100644
index 0000000000..5d563900c0
Binary files /dev/null and b/graphics/battle_anims/sprites/new/substitute_front.png differ
diff --git a/graphics/battle_anims/sprites/new/surf_new.pal b/graphics/battle_anims/sprites/new/surf_new.pal
new file mode 100644
index 0000000000..c81c2ec9e8
--- /dev/null
+++ b/graphics/battle_anims/sprites/new/surf_new.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+104 144 136
+65 164 213
+74 172 238
+82 180 255
+98 197 255
+123 189 230
+131 213 255
+156 230 255
+248 248 248
+65 164 213
+74 172 238
+131 205 246
+222 255 255
+248 248 248
+0 0 0
+0 0 0
diff --git a/graphics/battle_anims/sprites/new/sword.png b/graphics/battle_anims/sprites/new/sword.png
new file mode 100644
index 0000000000..9d037b9a94
Binary files /dev/null and b/graphics/battle_anims/sprites/new/sword.png differ
diff --git a/graphics/battle_anims/sprites/new/teeth.png b/graphics/battle_anims/sprites/new/teeth.png
new file mode 100644
index 0000000000..53b3bce279
Binary files /dev/null and b/graphics/battle_anims/sprites/new/teeth.png differ
diff --git a/graphics/battle_anims/sprites/new/thrash.png b/graphics/battle_anims/sprites/new/thrash.png
new file mode 100644
index 0000000000..c225cac60c
Binary files /dev/null and b/graphics/battle_anims/sprites/new/thrash.png differ
diff --git a/graphics/battle_anims/sprites/new/tornado.png b/graphics/battle_anims/sprites/new/tornado.png
new file mode 100644
index 0000000000..30372e33d0
Binary files /dev/null and b/graphics/battle_anims/sprites/new/tornado.png differ
diff --git a/graphics/battle_anims/sprites/new/water_gun.png b/graphics/battle_anims/sprites/new/water_gun.png
new file mode 100644
index 0000000000..4f30b2133d
Binary files /dev/null and b/graphics/battle_anims/sprites/new/water_gun.png differ
diff --git a/graphics/battle_anims/sprites/new/wood.png b/graphics/battle_anims/sprites/new/wood.png
new file mode 100644
index 0000000000..1b64a647f5
Binary files /dev/null and b/graphics/battle_anims/sprites/new/wood.png differ
diff --git a/graphics/battle_anims/sprites/new/z_move_symbol.png b/graphics/battle_anims/sprites/new/z_move_symbol.png
new file mode 100644
index 0000000000..bcb3098754
Binary files /dev/null and b/graphics/battle_anims/sprites/new/z_move_symbol.png differ
diff --git a/graphics/battle_anims/sprites/omega_symbol.png b/graphics/battle_anims/sprites/omega_symbol.png
new file mode 100644
index 0000000000..a821d5e40a
Binary files /dev/null and b/graphics/battle_anims/sprites/omega_symbol.png differ
diff --git a/graphics/battle_anims/sprites/particles2.png b/graphics/battle_anims/sprites/particles2.png
new file mode 100644
index 0000000000..9056c253cb
Binary files /dev/null and b/graphics/battle_anims/sprites/particles2.png differ
diff --git a/graphics/battle_anims/sprites/poison_jab.png b/graphics/battle_anims/sprites/poison_jab.png
new file mode 100644
index 0000000000..e7871a2c9d
Binary files /dev/null and b/graphics/battle_anims/sprites/poison_jab.png differ
diff --git a/graphics/battle_anims/sprites/power_gem.png b/graphics/battle_anims/sprites/power_gem.png
new file mode 100644
index 0000000000..8d9ad469e3
Binary files /dev/null and b/graphics/battle_anims/sprites/power_gem.png differ
diff --git a/graphics/battle_anims/sprites/primal_particles.png b/graphics/battle_anims/sprites/primal_particles.png
new file mode 100644
index 0000000000..6fdf09d96e
Binary files /dev/null and b/graphics/battle_anims/sprites/primal_particles.png differ
diff --git a/graphics/battle_anims/sprites/psycho_cut.png b/graphics/battle_anims/sprites/psycho_cut.png
new file mode 100644
index 0000000000..3eb1de7d2a
Binary files /dev/null and b/graphics/battle_anims/sprites/psycho_cut.png differ
diff --git a/graphics/battle_anims/sprites/punishment.png b/graphics/battle_anims/sprites/punishment.png
new file mode 100644
index 0000000000..9215b6ec07
Binary files /dev/null and b/graphics/battle_anims/sprites/punishment.png differ
diff --git a/graphics/battle_anims/sprites/purple_jab.png b/graphics/battle_anims/sprites/purple_jab.png
new file mode 100644
index 0000000000..2c15153b93
Binary files /dev/null and b/graphics/battle_anims/sprites/purple_jab.png differ
diff --git a/graphics/battle_anims/sprites/quick_guard.png b/graphics/battle_anims/sprites/quick_guard.png
new file mode 100644
index 0000000000..71d343eeb5
Binary files /dev/null and b/graphics/battle_anims/sprites/quick_guard.png differ
diff --git a/graphics/battle_anims/sprites/seed_new.png b/graphics/battle_anims/sprites/seed_new.png
new file mode 100644
index 0000000000..74f42d7aba
Binary files /dev/null and b/graphics/battle_anims/sprites/seed_new.png differ
diff --git a/graphics/battle_anims/sprites/small_cloud.png b/graphics/battle_anims/sprites/small_cloud.png
new file mode 100644
index 0000000000..2733a71dca
Binary files /dev/null and b/graphics/battle_anims/sprites/small_cloud.png differ
diff --git a/graphics/battle_anims/sprites/stealth_rock.png b/graphics/battle_anims/sprites/stealth_rock.png
new file mode 100644
index 0000000000..8b38ae1c17
Binary files /dev/null and b/graphics/battle_anims/sprites/stealth_rock.png differ
diff --git a/graphics/battle_anims/sprites/stone_edge.png b/graphics/battle_anims/sprites/stone_edge.png
new file mode 100644
index 0000000000..44f678d8db
Binary files /dev/null and b/graphics/battle_anims/sprites/stone_edge.png differ
diff --git a/graphics/battle_anims/sprites/toxic_spikes.png b/graphics/battle_anims/sprites/toxic_spikes.png
new file mode 100644
index 0000000000..3102949fd5
Binary files /dev/null and b/graphics/battle_anims/sprites/toxic_spikes.png differ
diff --git a/graphics/battle_anims/sprites/trump_card_particles.png b/graphics/battle_anims/sprites/trump_card_particles.png
new file mode 100644
index 0000000000..cec1a463cd
Binary files /dev/null and b/graphics/battle_anims/sprites/trump_card_particles.png differ
diff --git a/graphics/battle_anims/sprites/trump_cards.png b/graphics/battle_anims/sprites/trump_cards.png
new file mode 100644
index 0000000000..64c3b00167
Binary files /dev/null and b/graphics/battle_anims/sprites/trump_cards.png differ
diff --git a/graphics/battle_anims/sprites/water_gun.png b/graphics/battle_anims/sprites/water_gun.png
new file mode 100644
index 0000000000..4f30b2133d
Binary files /dev/null and b/graphics/battle_anims/sprites/water_gun.png differ
diff --git a/graphics/battle_anims/sprites/white_streak.png b/graphics/battle_anims/sprites/white_streak.png
new file mode 100644
index 0000000000..7328ff1512
Binary files /dev/null and b/graphics/battle_anims/sprites/white_streak.png differ
diff --git a/graphics/battle_anims/sprites/wood_hammer.png b/graphics/battle_anims/sprites/wood_hammer.png
new file mode 100644
index 0000000000..5768605f80
Binary files /dev/null and b/graphics/battle_anims/sprites/wood_hammer.png differ
diff --git a/graphics/battle_anims/sprites/worry_seed.png b/graphics/battle_anims/sprites/worry_seed.png
new file mode 100644
index 0000000000..2f6d68b294
Binary files /dev/null and b/graphics/battle_anims/sprites/worry_seed.png differ
diff --git a/graphics/battle_anims/sprites/wring_out.png b/graphics/battle_anims/sprites/wring_out.png
new file mode 100644
index 0000000000..b96ffdbd2e
Binary files /dev/null and b/graphics/battle_anims/sprites/wring_out.png differ
diff --git a/graphics/battle_interface/ability_pop_up.pal b/graphics/battle_interface/ability_pop_up.pal
new file mode 100644
index 0000000000..19895d0bcf
--- /dev/null
+++ b/graphics/battle_interface/ability_pop_up.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+1 177 91
+143 129 149
+103 91 111
+79 65 85
+59 31 81
+103 89 109
+231 239 245
+249 253 255
+0 0 0
+0 0 0
+107 115 115
+74 66 82
+0 0 0
+214 214 206
+132 140 140
+0 0 0
diff --git a/graphics/battle_interface/ability_pop_up.png b/graphics/battle_interface/ability_pop_up.png
new file mode 100644
index 0000000000..92971a7a51
Binary files /dev/null and b/graphics/battle_interface/ability_pop_up.png differ
diff --git a/graphics/battle_interface/alpha_indicator.png b/graphics/battle_interface/alpha_indicator.png
new file mode 100644
index 0000000000..0e302576b6
Binary files /dev/null and b/graphics/battle_interface/alpha_indicator.png differ
diff --git a/graphics/battle_interface/last_used_ball_l.png b/graphics/battle_interface/last_used_ball_l.png
new file mode 100644
index 0000000000..90fcef3739
Binary files /dev/null and b/graphics/battle_interface/last_used_ball_l.png differ
diff --git a/graphics/battle_interface/last_used_ball_r.png b/graphics/battle_interface/last_used_ball_r.png
new file mode 100644
index 0000000000..581569cf1b
Binary files /dev/null and b/graphics/battle_interface/last_used_ball_r.png differ
diff --git a/graphics/battle_interface/mega_indicator.png b/graphics/battle_interface/mega_indicator.png
new file mode 100644
index 0000000000..93e113ded4
Binary files /dev/null and b/graphics/battle_interface/mega_indicator.png differ
diff --git a/graphics/battle_interface/mega_trigger.pal b/graphics/battle_interface/mega_trigger.pal
new file mode 100644
index 0000000000..2672d1f10a
--- /dev/null
+++ b/graphics/battle_interface/mega_trigger.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+185 207 163
+77 105 97
+199 159 199
+221 177 207
+57 151 117
+139 221 253
+247 161 133
+255 255 255
+153 87 67
+233 233 125
+129 255 223
+149 147 247
+195 207 201
+123 151 135
+0 0 0
+0 0 0
diff --git a/graphics/battle_interface/mega_trigger.png b/graphics/battle_interface/mega_trigger.png
new file mode 100644
index 0000000000..a269ee738c
Binary files /dev/null and b/graphics/battle_interface/mega_trigger.png differ
diff --git a/graphics/battle_interface/omega_indicator.png b/graphics/battle_interface/omega_indicator.png
new file mode 100644
index 0000000000..c56d51c151
Binary files /dev/null and b/graphics/battle_interface/omega_indicator.png differ
diff --git a/graphics/battle_interface/z_move_trigger.png b/graphics/battle_interface/z_move_trigger.png
new file mode 100644
index 0000000000..5e27dbabbe
Binary files /dev/null and b/graphics/battle_interface/z_move_trigger.png differ
diff --git a/graphics/battle_transitions/rayquaza.png b/graphics/battle_transitions/rayquaza.png
index 5c3a914749..00df7d7415 100644
Binary files a/graphics/battle_transitions/rayquaza.png and b/graphics/battle_transitions/rayquaza.png differ
diff --git a/graphics/battle_transitions/regis.png b/graphics/battle_transitions/regis.png
index a083107374..4926b165b7 100644
Binary files a/graphics/battle_transitions/regis.png and b/graphics/battle_transitions/regis.png differ
diff --git a/graphics/berries/babiri.png b/graphics/berries/babiri.png
new file mode 100644
index 0000000000..056353bab9
Binary files /dev/null and b/graphics/berries/babiri.png differ
diff --git a/graphics/berries/charti.png b/graphics/berries/charti.png
new file mode 100644
index 0000000000..9f119ebac0
Binary files /dev/null and b/graphics/berries/charti.png differ
diff --git a/graphics/berries/chilan.png b/graphics/berries/chilan.png
new file mode 100644
index 0000000000..8f717bb82c
Binary files /dev/null and b/graphics/berries/chilan.png differ
diff --git a/graphics/berries/chople.png b/graphics/berries/chople.png
new file mode 100644
index 0000000000..0b4b28014f
Binary files /dev/null and b/graphics/berries/chople.png differ
diff --git a/graphics/berries/coba.png b/graphics/berries/coba.png
new file mode 100644
index 0000000000..18283bd79d
Binary files /dev/null and b/graphics/berries/coba.png differ
diff --git a/graphics/berries/colbur.png b/graphics/berries/colbur.png
new file mode 100644
index 0000000000..d422a826e5
Binary files /dev/null and b/graphics/berries/colbur.png differ
diff --git a/graphics/berries/custap.png b/graphics/berries/custap.png
new file mode 100644
index 0000000000..a5b89427c7
Binary files /dev/null and b/graphics/berries/custap.png differ
diff --git a/graphics/berries/haban.png b/graphics/berries/haban.png
new file mode 100644
index 0000000000..87b27fb263
Binary files /dev/null and b/graphics/berries/haban.png differ
diff --git a/graphics/berries/jaboca.png b/graphics/berries/jaboca.png
new file mode 100644
index 0000000000..42815ea4a9
Binary files /dev/null and b/graphics/berries/jaboca.png differ
diff --git a/graphics/berries/kasib.png b/graphics/berries/kasib.png
new file mode 100644
index 0000000000..f1b09244b0
Binary files /dev/null and b/graphics/berries/kasib.png differ
diff --git a/graphics/berries/kebia.png b/graphics/berries/kebia.png
new file mode 100644
index 0000000000..e0dfefd672
Binary files /dev/null and b/graphics/berries/kebia.png differ
diff --git a/graphics/berries/kee.png b/graphics/berries/kee.png
new file mode 100644
index 0000000000..1c83b65b19
Binary files /dev/null and b/graphics/berries/kee.png differ
diff --git a/graphics/berries/maranga.png b/graphics/berries/maranga.png
new file mode 100644
index 0000000000..b103f24108
Binary files /dev/null and b/graphics/berries/maranga.png differ
diff --git a/graphics/berries/micle.png b/graphics/berries/micle.png
new file mode 100644
index 0000000000..bbe6011b44
Binary files /dev/null and b/graphics/berries/micle.png differ
diff --git a/graphics/berries/occa.png b/graphics/berries/occa.png
new file mode 100644
index 0000000000..1ad829e5f1
Binary files /dev/null and b/graphics/berries/occa.png differ
diff --git a/graphics/berries/passho.png b/graphics/berries/passho.png
new file mode 100644
index 0000000000..c541475450
Binary files /dev/null and b/graphics/berries/passho.png differ
diff --git a/graphics/berries/payapa.png b/graphics/berries/payapa.png
new file mode 100644
index 0000000000..aff30a75cc
Binary files /dev/null and b/graphics/berries/payapa.png differ
diff --git a/graphics/berries/rindo.png b/graphics/berries/rindo.png
new file mode 100644
index 0000000000..91e895d043
Binary files /dev/null and b/graphics/berries/rindo.png differ
diff --git a/graphics/berries/roseli.png b/graphics/berries/roseli.png
new file mode 100644
index 0000000000..4eb675a447
Binary files /dev/null and b/graphics/berries/roseli.png differ
diff --git a/graphics/berries/rowap.png b/graphics/berries/rowap.png
new file mode 100644
index 0000000000..bbeee3f3b4
Binary files /dev/null and b/graphics/berries/rowap.png differ
diff --git a/graphics/berries/shuca.png b/graphics/berries/shuca.png
new file mode 100644
index 0000000000..618f3abace
Binary files /dev/null and b/graphics/berries/shuca.png differ
diff --git a/graphics/berries/tanga.png b/graphics/berries/tanga.png
new file mode 100644
index 0000000000..702da676f3
Binary files /dev/null and b/graphics/berries/tanga.png differ
diff --git a/graphics/berries/wacan.png b/graphics/berries/wacan.png
new file mode 100644
index 0000000000..5d88c95bd2
Binary files /dev/null and b/graphics/berries/wacan.png differ
diff --git a/graphics/berries/yache.png b/graphics/berries/yache.png
new file mode 100644
index 0000000000..3f39782770
Binary files /dev/null and b/graphics/berries/yache.png differ
diff --git a/graphics/interface/split_icons.png b/graphics/interface/split_icons.png
new file mode 100644
index 0000000000..1c7d63c9eb
Binary files /dev/null and b/graphics/interface/split_icons.png differ
diff --git a/graphics/items/icon_palettes/ability_capsule.pal b/graphics/items/icon_palettes/ability_capsule.pal
new file mode 100755
index 0000000000..08bc90959b
--- /dev/null
+++ b/graphics/items/icon_palettes/ability_capsule.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+107 165 230
+123 123 156
+156 156 189
+206 206 255
+189 255 255
+132 214 255
+189 189 239
+222 222 255
+90 90 90
+222 132 255
+206 173 247
+140 140 247
+173 107 255
+230 206 255
diff --git a/graphics/items/icon_palettes/ability_patch.pal b/graphics/items/icon_palettes/ability_patch.pal
new file mode 100644
index 0000000000..425bc27707
--- /dev/null
+++ b/graphics/items/icon_palettes/ability_patch.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 0 152
+49 49 49
+88 68 16
+100 112 104
+80 160 176
+131 183 183
+184 186 180
+192 192 120
+115 211 211
+139 226 255
+240 218 64
+222 224 217
+168 242 248
+246 242 246
+240 252 176
+255 255 255
diff --git a/graphics/items/icon_palettes/abomasite.pal b/graphics/items/icon_palettes/abomasite.pal
new file mode 100644
index 0000000000..173d17297b
--- /dev/null
+++ b/graphics/items/icon_palettes/abomasite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+136 160 232
+248 248 248
+48 136 120
+144 208 184
+200 216 208
+80 160 144
+144 208 176
+192 208 240
+104 168 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/absolite.pal b/graphics/items/icon_palettes/absolite.pal
new file mode 100644
index 0000000000..5deff2aca3
--- /dev/null
+++ b/graphics/items/icon_palettes/absolite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+88 104 160
+152 176 232
+248 248 248
+144 160 208
+200 216 240
+64 72 136
+128 144 192
+192 216 240
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/absorb_bulb.pal b/graphics/items/icon_palettes/absorb_bulb.pal
new file mode 100755
index 0000000000..8551b917b1
--- /dev/null
+++ b/graphics/items/icon_palettes/absorb_bulb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+222 222 115
+189 140 66
+156 99 41
+181 173 115
+132 74 33
+214 173 115
+90 66 41
+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/items/icon_palettes/acro_bike.pal b/graphics/items/icon_palettes/acro_bike.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/adamant_orb.pal b/graphics/items/icon_palettes/adamant_orb.pal
new file mode 100644
index 0000000000..d5cb6a7ceb
--- /dev/null
+++ b/graphics/items/icon_palettes/adamant_orb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+93 93 93
+39 39 39
+247 247 247
+177 203 247
+220 247 247
+194 229 247
+159 194 247
+151 177 220
+117 159 212
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/adrenaline_orb.pal b/graphics/items/icon_palettes/adrenaline_orb.pal
new file mode 100644
index 0000000000..f2b1e719e0
--- /dev/null
+++ b/graphics/items/icon_palettes/adrenaline_orb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+41 65 115
+90 172 222
+57 90 148
+106 197 238
+123 230 246
+82 148 189
+82 115 164
+57 106 172
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/aerodactylite.pal b/graphics/items/icon_palettes/aerodactylite.pal
new file mode 100644
index 0000000000..a0f921cfb3
--- /dev/null
+++ b/graphics/items/icon_palettes/aerodactylite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+176 160 208
+64 64 64
+144 64 216
+208 208 248
+88 64 128
+160 80 232
+208 184 232
+248 248 248
+120 112 136
+160 160 168
+168 128 240
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/aggronite.pal b/graphics/items/icon_palettes/aggronite.pal
new file mode 100644
index 0000000000..1bba14f16d
--- /dev/null
+++ b/graphics/items/icon_palettes/aggronite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+160 160 160
+120 120 120
+88 88 88
+208 208 248
+208 208 208
+200 200 200
+152 152 168
+248 248 248
+152 152 152
+192 192 192
+232 232 232
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/aguav_berry.pal b/graphics/items/icon_palettes/aguav_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/air_balloon.pal b/graphics/items/icon_palettes/air_balloon.pal
new file mode 100755
index 0000000000..3fb7948b9c
--- /dev/null
+++ b/graphics/items/icon_palettes/air_balloon.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+66 66 66
+247 123 123
+239 74 74
+247 173 173
+49 49 49
+165 49 49
+206 206 156
+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/items/icon_palettes/alakazite.pal b/graphics/items/icon_palettes/alakazite.pal
new file mode 100644
index 0000000000..0d215cb94e
--- /dev/null
+++ b/graphics/items/icon_palettes/alakazite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+240 184 88
+176 120 152
+144 88 168
+192 208 216
+216 208 200
+208 160 200
+168 152 192
+248 248 248
+232 176 40
+208 192 152
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/aloraichium_z.pal b/graphics/items/icon_palettes/aloraichium_z.pal
new file mode 100644
index 0000000000..293e0c0955
--- /dev/null
+++ b/graphics/items/icon_palettes/aloraichium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+255 189 65
+205 131 65
+255 255 222
+255 222 106
+255 255 197
+180 131 49
+139 90 49
+246 172 65
+180 156 74
+180 172 156
+164 90 65
+180 172 139
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/altarianite.pal b/graphics/items/icon_palettes/altarianite.pal
new file mode 100644
index 0000000000..ecb5f59359
--- /dev/null
+++ b/graphics/items/icon_palettes/altarianite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+232 168 216
+136 184 240
+104 208 248
+144 216 248
+184 224 240
+248 248 248
+224 224 224
+224 192 216
+224 184 216
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/amaze_mulch.pal b/graphics/items/icon_palettes/amaze_mulch.pal
new file mode 100644
index 0000000000..72ef8b7a9e
--- /dev/null
+++ b/graphics/items/icon_palettes/amaze_mulch.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 56 48
+248 144 104
+240 232 168
+240 240 240
+216 216 216
+184 184 184
+144 136 128
+48 48 48
+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/items/icon_palettes/ampharosite.pal b/graphics/items/icon_palettes/ampharosite.pal
new file mode 100644
index 0000000000..d99ebd6361
--- /dev/null
+++ b/graphics/items/icon_palettes/ampharosite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+232 200 56
+248 120 104
+232 64 80
+192 200 232
+248 224 152
+248 176 152
+216 136 160
+248 248 248
+240 200 0
+216 200 120
+216 216 216
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/amulet_coin.pal b/graphics/items/icon_palettes/amulet_coin.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/antidote.pal b/graphics/items/icon_palettes/antidote.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/apicot_berry.pal b/graphics/items/icon_palettes/apicot_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/armor_fossil.pal b/graphics/items/icon_palettes/armor_fossil.pal
new file mode 100755
index 0000000000..4c4b3a4b89
--- /dev/null
+++ b/graphics/items/icon_palettes/armor_fossil.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+248 192 160
+216 136 96
+192 112 80
+136 88 56
+208 136 104
+224 160 112
+80 56 40
+168 96 64
+112 80 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/armorite_ore.pal b/graphics/items/icon_palettes/armorite_ore.pal
new file mode 100644
index 0000000000..e2b7be97a9
--- /dev/null
+++ b/graphics/items/icon_palettes/armorite_ore.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 224 248
+248 184 248
+248 152 248
+224 120 248
+224 88 248
+176 88 200
+136 64 152
+48 48 48
+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/items/icon_palettes/aspear_berry.pal b/graphics/items/icon_palettes/aspear_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/assault_vest.pal b/graphics/items/icon_palettes/assault_vest.pal
new file mode 100644
index 0000000000..b68dfab9d6
--- /dev/null
+++ b/graphics/items/icon_palettes/assault_vest.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+200 80 80
+144 48 56
+64 64 64
+96 72 80
+176 56 64
+0 0 0
+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/items/icon_palettes/audinite.pal b/graphics/items/icon_palettes/audinite.pal
new file mode 100644
index 0000000000..502636ab7e
--- /dev/null
+++ b/graphics/items/icon_palettes/audinite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+248 240 208
+184 104 120
+232 104 136
+248 216 224
+240 176 192
+240 192 200
+240 224 208
+248 248 248
+240 200 184
+232 200 192
+224 184 184
+224 160 160
+240 232 208
+0 0 0
diff --git a/graphics/items/icon_palettes/aurora_ticket.pal b/graphics/items/icon_palettes/aurora_ticket.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/awakening.pal b/graphics/items/icon_palettes/awakening.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/babiri_berry.pal b/graphics/items/icon_palettes/babiri_berry.pal
new file mode 100755
index 0000000000..e867db13ab
--- /dev/null
+++ b/graphics/items/icon_palettes/babiri_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+104 168 48
+160 224 72
+200 240 152
+160 128 48
+232 208 120
+72 104 40
+88 120 56
+64 80 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/balm_mushroom.pal b/graphics/items/icon_palettes/balm_mushroom.pal
new file mode 100644
index 0000000000..7802b4b8d5
--- /dev/null
+++ b/graphics/items/icon_palettes/balm_mushroom.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 248 248
+208 232 208
+152 200 152
+248 248 80
+224 200 8
+248 200 96
+240 152 40
+48 48 48
+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/items/icon_palettes/banettite.pal b/graphics/items/icon_palettes/banettite.pal
new file mode 100644
index 0000000000..a95929c2c6
--- /dev/null
+++ b/graphics/items/icon_palettes/banettite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+80 80 80
+216 152 8
+248 200 24
+240 144 200
+255 255 255
+232 216 136
+248 176 112
+248 248 248
+64 64 64
+208 88 136
+184 184 208
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/bead_mail.pal b/graphics/items/icon_palettes/bead_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/beast_ball.pal b/graphics/items/icon_palettes/beast_ball.pal
new file mode 100644
index 0000000000..371cd6904b
--- /dev/null
+++ b/graphics/items/icon_palettes/beast_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+90 57 246
+57 57 180
+90 90 255
+164 164 197
+57 98 255
+65 106 213
+65 172 255
+139 205 255
+74 82 82
+238 213 57
+189 156 98
+156 106 65
+0 0 0
+49 49 49
diff --git a/graphics/items/icon_palettes/beedrillite.pal b/graphics/items/icon_palettes/beedrillite.pal
new file mode 100644
index 0000000000..2b25eaa3d5
--- /dev/null
+++ b/graphics/items/icon_palettes/beedrillite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+192 184 224
+240 192 24
+56 56 56
+232 224 240
+200 160 8
+184 184 184
+128 104 32
+248 248 248
+216 192 128
+248 224 136
+144 120 40
+88 88 96
+120 120 136
+0 0 0
diff --git a/graphics/items/icon_palettes/belue_berry.pal b/graphics/items/icon_palettes/belue_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/berry_juice.pal b/graphics/items/icon_palettes/berry_juice.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/berry_pouch.pal b/graphics/items/icon_palettes/berry_pouch.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/berry_sweet.pal b/graphics/items/icon_palettes/berry_sweet.pal
new file mode 100644
index 0000000000..3b2f149013
--- /dev/null
+++ b/graphics/items/icon_palettes/berry_sweet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+144 200 224
+40 152 232
+0 104 184
+8 88 144
+0 72 128
+48 48 48
+0 0 0
+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/items/icon_palettes/bicycle.pal b/graphics/items/icon_palettes/bicycle.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/big_malasada.pal b/graphics/items/icon_palettes/big_malasada.pal
new file mode 100755
index 0000000000..60fca4191b
--- /dev/null
+++ b/graphics/items/icon_palettes/big_malasada.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+180 106 49
+205 131 41
+156 90 49
+213 156 65
+213 148 90
+139 82 41
+246 197 98
+222 172 74
+246 197 106
+246 222 74
+180 82 74
+238 98 90
+255 172 197
+246 123 123
diff --git a/graphics/items/icon_palettes/big_nugget.pal b/graphics/items/icon_palettes/big_nugget.pal
new file mode 100644
index 0000000000..5349531891
--- /dev/null
+++ b/graphics/items/icon_palettes/big_nugget.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 232 96
+248 208 72
+208 172 72
+200 152 56
+152 112 16
+248 248 232
+48 48 48
+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/items/icon_palettes/big_root.pal b/graphics/items/icon_palettes/big_root.pal
new file mode 100644
index 0000000000..a93aa2ed77
--- /dev/null
+++ b/graphics/items/icon_palettes/big_root.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+126 77 11
+168 117 46
+220 194 117
+203 151 77
+247 220 151
+0 0 0
+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/items/icon_palettes/bike_voucher.pal b/graphics/items/icon_palettes/bike_voucher.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/binding_band.pal b/graphics/items/icon_palettes/binding_band.pal
new file mode 100644
index 0000000000..ed678f3ef9
--- /dev/null
+++ b/graphics/items/icon_palettes/binding_band.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+152 96 32
+184 128 40
+200 152 80
+0 0 0
+0 0 0
+0 0 0
+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/items/icon_palettes/black_apricorn.pal b/graphics/items/icon_palettes/black_apricorn.pal
new file mode 100755
index 0000000000..63d139493d
--- /dev/null
+++ b/graphics/items/icon_palettes/black_apricorn.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+247 189 123
+115 82 66
+173 107 49
+123 123 123
+74 74 74
+222 156 99
+189 189 189
+255 255 255
+99 99 99
+57 57 57
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/black_flute.pal b/graphics/items/icon_palettes/black_flute.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/black_sludge.pal b/graphics/items/icon_palettes/black_sludge.pal
new file mode 100644
index 0000000000..0e8504e0ce
--- /dev/null
+++ b/graphics/items/icon_palettes/black_sludge.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+101 101 126
+126 126 159
+142 151 168
+61 61 77
+0 0 0
+0 0 0
+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/items/icon_palettes/black_type_enhancing_item.pal b/graphics/items/icon_palettes/black_type_enhancing_item.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/blastoisinite.pal b/graphics/items/icon_palettes/blastoisinite.pal
new file mode 100644
index 0000000000..4d8882ef59
--- /dev/null
+++ b/graphics/items/icon_palettes/blastoisinite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+96 152 240
+88 112 128
+120 88 48
+184 184 184
+176 200 232
+152 136 112
+248 248 248
+64 128 240
+136 168 216
+208 208 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/blazikenite.pal b/graphics/items/icon_palettes/blazikenite.pal
new file mode 100644
index 0000000000..4530ddbfdf
--- /dev/null
+++ b/graphics/items/icon_palettes/blazikenite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+216 88 80
+128 56 56
+56 56 56
+216 200 184
+240 168 208
+192 168 168
+136 128 120
+248 248 248
+208 56 56
+208 168 136
+240 240 176
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/blue_apricorn.pal b/graphics/items/icon_palettes/blue_apricorn.pal
new file mode 100755
index 0000000000..411abd8aef
--- /dev/null
+++ b/graphics/items/icon_palettes/blue_apricorn.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+231 181 140
+115 82 66
+165 99 41
+49 123 239
+33 82 165
+206 148 99
+132 181 255
+255 255 255
+41 107 206
+41 66 107
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/blue_flute.pal b/graphics/items/icon_palettes/blue_flute.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/blue_mint.pal b/graphics/items/icon_palettes/blue_mint.pal
new file mode 100644
index 0000000000..6eb4f9b5b1
--- /dev/null
+++ b/graphics/items/icon_palettes/blue_mint.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+168 176 248
+128 144 248
+96 120 248
+64 88 240
+40 56 176
+16 40 200
+40 40 40
+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/items/icon_palettes/blue_orb.pal b/graphics/items/icon_palettes/blue_orb.pal
old mode 100644
new mode 100755
index 9f061a8000..1f07de0f26
--- a/graphics/items/icon_palettes/blue_orb.pal
+++ b/graphics/items/icon_palettes/blue_orb.pal
@@ -1,19 +1,19 @@
JASC-PAL
0100
16
-180 180 180
-49 49 49
-106 115 230
-156 156 222
-74 82 197
-57 65 148
-205 205 255
-255 255 255
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
+255 126 0
+48 48 48
+136 160 248
+104 128 248
+72 104 240
+240 240 248
+168 184 248
+128 208 248
+48 72 192
+248 248 248
+224 248 248
+232 248 248
+40 40 168
+184 248 248
+80 152 248
0 0 0
diff --git a/graphics/items/icon_palettes/blue_scarf.pal b/graphics/items/icon_palettes/blue_scarf.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/blue_shard.pal b/graphics/items/icon_palettes/blue_shard.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/bluk_berry.pal b/graphics/items/icon_palettes/bluk_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/blunder_policy.pal b/graphics/items/icon_palettes/blunder_policy.pal
new file mode 100644
index 0000000000..9e29d88f54
--- /dev/null
+++ b/graphics/items/icon_palettes/blunder_policy.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 248 216
+216 216 104
+192 184 0
+232 152 152
+48 48 48
+0 0 0
+0 0 0
+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/items/icon_palettes/boost_mulch.pal b/graphics/items/icon_palettes/boost_mulch.pal
new file mode 100644
index 0000000000..f116faf59d
--- /dev/null
+++ b/graphics/items/icon_palettes/boost_mulch.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+208 232 248
+160 160 248
+112 96 232
+232 200 152
+216 184 104
+180 136 72
+128 96 56
+48 48 48
+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/items/icon_palettes/bottle_cap.pal b/graphics/items/icon_palettes/bottle_cap.pal
new file mode 100644
index 0000000000..412b2967ba
--- /dev/null
+++ b/graphics/items/icon_palettes/bottle_cap.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+232 232 232
+216 216 224
+184 192 200
+144 152 176
+106 123 148
+88 96 120
+88 112 160
+72 88 120
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/bright_powder.pal b/graphics/items/icon_palettes/bright_powder.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/bug_gem.pal b/graphics/items/icon_palettes/bug_gem.pal
new file mode 100644
index 0000000000..4e8af47265
--- /dev/null
+++ b/graphics/items/icon_palettes/bug_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+184 216 104
+224 232 176
+152 184 32
+248 248 248
+136 160 16
+112 144 0
+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/items/icon_palettes/bug_memory.pal b/graphics/items/icon_palettes/bug_memory.pal
new file mode 100755
index 0000000000..c653b16984
--- /dev/null
+++ b/graphics/items/icon_palettes/bug_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 248
+48 48 48
+172 236 128
+232 244 240
+248 252 248
+224 244 208
+184 236 152
+216 244 192
+208 244 176
+144 228 104
+120 120 144
+96 96 120
+160 236 104
+136 164 168
+112 128 136
+160 188 192
diff --git a/graphics/items/icon_palettes/bug_tm_hm.pal b/graphics/items/icon_palettes/bug_tm_hm.pal
new file mode 100755
index 0000000000..927711cfa0
--- /dev/null
+++ b/graphics/items/icon_palettes/bug_tm_hm.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+181 181 181
+49 49 49
+74 74 99
+224 240 208
+216 240 192
+208 240 176
+184 232 152
+176 232 136
+168 232 120
+160 232 104
+123 123 148
+123 123 123
+99 99 123
+255 255 255
+232 240 240
+82 82 82
diff --git a/graphics/items/icon_palettes/buginium_z.pal b/graphics/items/icon_palettes/buginium_z.pal
new file mode 100644
index 0000000000..07fd9b4ec9
--- /dev/null
+++ b/graphics/items/icon_palettes/buginium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+57 157 49
+173 181 165
+99 197 57
+149 173 115
+49 123 33
+91 189 57
+213 247 165
+65 173 49
+247 255 239
+49 49 49
+149 223 83
+65 139 41
+99 157 57
+57 131 33
+0 0 0
diff --git a/graphics/items/icon_palettes/burn_drive.pal b/graphics/items/icon_palettes/burn_drive.pal
new file mode 100644
index 0000000000..316e9e718d
--- /dev/null
+++ b/graphics/items/icon_palettes/burn_drive.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+120 72 64
+248 152 136
+208 40 16
+216 88 64
+224 88 80
+0 0 0
+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/items/icon_palettes/burn_heal.pal b/graphics/items/icon_palettes/burn_heal.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/calcium.pal b/graphics/items/icon_palettes/calcium.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/cameruptite.pal b/graphics/items/icon_palettes/cameruptite.pal
new file mode 100644
index 0000000000..1cc3270ca3
--- /dev/null
+++ b/graphics/items/icon_palettes/cameruptite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+184 168 152
+120 96 88
+232 112 80
+200 200 200
+240 176 160
+208 136 120
+248 248 248
+72 72 64
+152 88 72
+152 144 136
+224 224 224
+128 120 112
+200 88 64
+136 80 64
diff --git a/graphics/items/icon_palettes/carbos.pal b/graphics/items/icon_palettes/carbos.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/card_key.pal b/graphics/items/icon_palettes/card_key.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/casteliacone.pal b/graphics/items/icon_palettes/casteliacone.pal
new file mode 100644
index 0000000000..438dff0441
--- /dev/null
+++ b/graphics/items/icon_palettes/casteliacone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 248 248
+180 224 240
+96 192 224
+16 152 200
+248 208 72
+208 176 72
+184 112 0
+48 48 48
+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/items/icon_palettes/catching_charm.pal b/graphics/items/icon_palettes/catching_charm.pal
new file mode 100644
index 0000000000..0f0db7606d
--- /dev/null
+++ b/graphics/items/icon_palettes/catching_charm.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 248 128
+48 48 48
+232 232 248
+184 184 184
+104 176 248
+80 232 200
+60 172 150
+32 144 152
+40 112 96
+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/items/icon_palettes/cell_battery.pal b/graphics/items/icon_palettes/cell_battery.pal
new file mode 100755
index 0000000000..1e28e6a352
--- /dev/null
+++ b/graphics/items/icon_palettes/cell_battery.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+140 140 148
+206 206 214
+255 255 255
+156 231 255
+41 198 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
diff --git a/graphics/items/icon_palettes/charcoal.pal b/graphics/items/icon_palettes/charcoal.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/charizardite_x.pal b/graphics/items/icon_palettes/charizardite_x.pal
new file mode 100644
index 0000000000..7073c040fc
--- /dev/null
+++ b/graphics/items/icon_palettes/charizardite_x.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+56 64 64
+72 96 168
+72 128 248
+72 184 248
+160 152 160
+176 200 248
+72 160 248
+248 248 248
+64 128 152
+136 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/charizardite_y.pal b/graphics/items/icon_palettes/charizardite_y.pal
new file mode 100644
index 0000000000..ddc55c87f1
--- /dev/null
+++ b/graphics/items/icon_palettes/charizardite_y.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+216 40 16
+248 176 0
+248 208 0
+216 152 112
+232 200 192
+232 184 56
+248 248 248
+200 24 0
+216 96 64
+216 192 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/charti_berry.pal b/graphics/items/icon_palettes/charti_berry.pal
new file mode 100755
index 0000000000..721b2bd154
--- /dev/null
+++ b/graphics/items/icon_palettes/charti_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+168 152 48
+200 168 32
+208 184 8
+248 232 40
+248 248 184
+0 0 0
+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/items/icon_palettes/cheri_berry.pal b/graphics/items/icon_palettes/cheri_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/cherish_ball.pal b/graphics/items/icon_palettes/cherish_ball.pal
new file mode 100644
index 0000000000..d0ef737479
--- /dev/null
+++ b/graphics/items/icon_palettes/cherish_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+74 82 82
+205 57 32
+164 57 41
+222 65 49
+255 65 49
+255 115 106
+255 156 156
+255 255 255
+0 0 0
+49 49 49
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/chesto_berry.pal b/graphics/items/icon_palettes/chesto_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/chilan_berry.pal b/graphics/items/icon_palettes/chilan_berry.pal
new file mode 100755
index 0000000000..72a54a9b9b
--- /dev/null
+++ b/graphics/items/icon_palettes/chilan_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+160 224 72
+168 136 64
+232 208 120
+208 168 64
+104 168 48
+88 120 56
+248 232 176
+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/items/icon_palettes/chill_drive.pal b/graphics/items/icon_palettes/chill_drive.pal
new file mode 100644
index 0000000000..d429ee0036
--- /dev/null
+++ b/graphics/items/icon_palettes/chill_drive.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+32 136 144
+208 248 248
+8 184 200
+88 200 224
+96 224 248
+0 0 0
+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/items/icon_palettes/choice_band.pal b/graphics/items/icon_palettes/choice_band.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/choice_scarf.pal b/graphics/items/icon_palettes/choice_scarf.pal
new file mode 100644
index 0000000000..19561700fb
--- /dev/null
+++ b/graphics/items/icon_palettes/choice_scarf.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+54 101 93
+61 69 77
+61 142 212
+69 159 238
+109 185 229
+39 101 142
+117 177 247
+85 168 212
+142 212 247
+39 39 39
+194 229 247
+46 126 177
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/choice_specs.pal b/graphics/items/icon_palettes/choice_specs.pal
new file mode 100644
index 0000000000..95c5ebab30
--- /dev/null
+++ b/graphics/items/icon_palettes/choice_specs.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+117 117 117
+39 39 39
+229 185 54
+212 117 18
+247 238 203
+159 93 11
+247 247 77
+247 126 54
+238 185 77
+238 18 18
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/chople_berry.pal b/graphics/items/icon_palettes/chople_berry.pal
new file mode 100755
index 0000000000..404a16ff0b
--- /dev/null
+++ b/graphics/items/icon_palettes/chople_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+168 48 48
+216 64 64
+248 80 80
+248 136 120
+248 184 160
+232 168 56
+184 120 32
+240 216 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/cleanse_tag.pal b/graphics/items/icon_palettes/cleanse_tag.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/clever_feather.pal b/graphics/items/icon_palettes/clever_feather.pal
new file mode 100644
index 0000000000..1ddaa990e7
--- /dev/null
+++ b/graphics/items/icon_palettes/clever_feather.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+90 90 90
+206 239 255
+239 255 255
+49 49 49
+156 214 231
+156 99 156
+231 148 239
+214 99 214
+140 165 173
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/clover_sweet.pal b/graphics/items/icon_palettes/clover_sweet.pal
new file mode 100644
index 0000000000..31392277f9
--- /dev/null
+++ b/graphics/items/icon_palettes/clover_sweet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 248 0
+152 200 96
+112 152 72
+88 136 56
+72 104 56
+8 104 64
+8 72 48
+56 72 32
+48 48 48
+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/items/icon_palettes/coba_berry.pal b/graphics/items/icon_palettes/coba_berry.pal
new file mode 100755
index 0000000000..497d19db54
--- /dev/null
+++ b/graphics/items/icon_palettes/coba_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+48 88 120
+48 112 168
+40 200 216
+128 240 248
+80 160 208
+112 184 232
+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/items/icon_palettes/coin_case.pal b/graphics/items/icon_palettes/coin_case.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/colbur_berry.pal b/graphics/items/icon_palettes/colbur_berry.pal
new file mode 100755
index 0000000000..b218b1b5f9
--- /dev/null
+++ b/graphics/items/icon_palettes/colbur_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+248 184 240
+240 104 224
+192 40 176
+248 144 232
+0 0 0
+0 0 0
+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/items/icon_palettes/comet_shard.pal b/graphics/items/icon_palettes/comet_shard.pal
new file mode 100644
index 0000000000..fcd9d28040
--- /dev/null
+++ b/graphics/items/icon_palettes/comet_shard.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 248 248
+200 224 232
+128 176 232
+96 144 224
+72 80 184
+64 56 120
+48 48 48
+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/items/icon_palettes/contest_pass.pal b/graphics/items/icon_palettes/contest_pass.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/cornn_berry.pal b/graphics/items/icon_palettes/cornn_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/cover_fossil.pal b/graphics/items/icon_palettes/cover_fossil.pal
new file mode 100755
index 0000000000..17aca6ea29
--- /dev/null
+++ b/graphics/items/icon_palettes/cover_fossil.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+123 123 165
+140 140 181
+115 115 165
+82 82 140
+99 99 156
+165 165 198
+66 66 115
+198 198 214
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/custap_berry.pal b/graphics/items/icon_palettes/custap_berry.pal
new file mode 100755
index 0000000000..b237f92fce
--- /dev/null
+++ b/graphics/items/icon_palettes/custap_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+240 208 104
+160 128 48
+240 168 112
+232 80 64
+192 64 64
+248 192 160
+248 120 112
+248 216 200
+208 120 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/damp_mulch.pal b/graphics/items/icon_palettes/damp_mulch.pal
new file mode 100644
index 0000000000..97d72c330e
--- /dev/null
+++ b/graphics/items/icon_palettes/damp_mulch.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+200 224 224
+144 184 192
+64 152 200
+232 200 152
+216 184 104
+180 136 72
+128 96 56
+48 48 48
+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/items/icon_palettes/damp_rock.pal b/graphics/items/icon_palettes/damp_rock.pal
new file mode 100644
index 0000000000..f50603adb5
--- /dev/null
+++ b/graphics/items/icon_palettes/damp_rock.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+220 238 229
+159 220 203
+77 177 185
+54 151 159
+69 93 93
+101 142 142
+46 126 134
+77 117 117
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/dark_gem.pal b/graphics/items/icon_palettes/dark_gem.pal
new file mode 100644
index 0000000000..1183d7db18
--- /dev/null
+++ b/graphics/items/icon_palettes/dark_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+72 72 72
+120 120 120
+56 56 56
+160 160 160
+40 40 40
+0 0 0
+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/items/icon_palettes/dark_memory.pal b/graphics/items/icon_palettes/dark_memory.pal
new file mode 100755
index 0000000000..7850c59fb5
--- /dev/null
+++ b/graphics/items/icon_palettes/dark_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 248
+48 48 48
+128 184 184
+184 212 208
+200 228 224
+232 244 240
+248 252 248
+160 204 200
+96 164 168
+116 116 144
+96 96 120
+80 156 160
+184 112 112
+136 88 88
+200 148 144
+88 88 112
diff --git a/graphics/items/icon_palettes/dark_tm_hm.pal b/graphics/items/icon_palettes/dark_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/darkinium_z.pal b/graphics/items/icon_palettes/darkinium_z.pal
new file mode 100644
index 0000000000..a193975f94
--- /dev/null
+++ b/graphics/items/icon_palettes/darkinium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+74 57 90
+98 74 98
+115 90 106
+213 197 189
+180 156 156
+65 49 65
+90 74 98
+82 65 74
+148 139 131
+65 49 82
+49 41 57
+90 65 90
+123 106 106
+0 0 0
diff --git a/graphics/items/icon_palettes/dawn_stone.pal b/graphics/items/icon_palettes/dawn_stone.pal
new file mode 100755
index 0000000000..a5af707a7d
--- /dev/null
+++ b/graphics/items/icon_palettes/dawn_stone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+144 248 232
+24 248 216
+16 200 192
+8 216 176
+248 248 248
+24 176 160
+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/items/icon_palettes/decidium_z.pal b/graphics/items/icon_palettes/decidium_z.pal
new file mode 100644
index 0000000000..3e9f620feb
--- /dev/null
+++ b/graphics/items/icon_palettes/decidium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+57 164 24
+49 131 49
+74 205 0
+238 255 213
+131 255 24
+41 115 16
+32 90 32
+49 148 0
+57 156 32
+164 180 148
+49 106 57
+90 180 16
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/deep_sea_scale.pal b/graphics/items/icon_palettes/deep_sea_scale.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/deep_sea_tooth.pal b/graphics/items/icon_palettes/deep_sea_tooth.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/destiny_knot.pal b/graphics/items/icon_palettes/destiny_knot.pal
new file mode 100644
index 0000000000..080e8a7f04
--- /dev/null
+++ b/graphics/items/icon_palettes/destiny_knot.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+194 69 69
+247 101 101
+247 85 85
+185 61 61
+134 54 54
+0 0 0
+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/items/icon_palettes/devon_goods.pal b/graphics/items/icon_palettes/devon_parts.pal
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icon_palettes/devon_goods.pal
rename to graphics/items/icon_palettes/devon_parts.pal
diff --git a/graphics/items/icon_palettes/devon_scope.pal b/graphics/items/icon_palettes/devon_scope.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/diancite.pal b/graphics/items/icon_palettes/diancite.pal
new file mode 100644
index 0000000000..45e04c8914
--- /dev/null
+++ b/graphics/items/icon_palettes/diancite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+240 224 224
+208 152 80
+248 232 160
+240 192 208
+240 192 128
+248 248 248
+224 136 168
+240 184 160
+232 176 192
+232 160 184
+224 176 104
+208 112 136
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/dire_hit.pal b/graphics/items/icon_palettes/dire_hit.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/dive_ball.pal b/graphics/items/icon_palettes/dive_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/dna_splicers.pal b/graphics/items/icon_palettes/dna_splicers.pal
new file mode 100644
index 0000000000..3a6253c2df
--- /dev/null
+++ b/graphics/items/icon_palettes/dna_splicers.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 224 128
+168 152 72
+120 112 80
+248 248 248
+200 208 224
+176 184 208
+120 128 152
+88 96 112
+80 80 88
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/douse_drive.pal b/graphics/items/icon_palettes/douse_drive.pal
new file mode 100644
index 0000000000..a3e4209f44
--- /dev/null
+++ b/graphics/items/icon_palettes/douse_drive.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+48 104 152
+120 208 248
+48 128 200
+56 168 240
+80 184 248
+0 0 0
+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/items/icon_palettes/itemfinder.pal b/graphics/items/icon_palettes/dowsing_machine.pal
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icon_palettes/itemfinder.pal
rename to graphics/items/icon_palettes/dowsing_machine.pal
diff --git a/graphics/items/icon_palettes/draco_plate.pal b/graphics/items/icon_palettes/draco_plate.pal
new file mode 100644
index 0000000000..27bfff4b28
--- /dev/null
+++ b/graphics/items/icon_palettes/draco_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+173 63 63
+237 112 122
+246 138 138
+201 88 88
+130 56 63
+130 56 40
+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/items/icon_palettes/dragon_fang.pal b/graphics/items/icon_palettes/dragon_fang.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/dragon_gem.pal b/graphics/items/icon_palettes/dragon_gem.pal
new file mode 100644
index 0000000000..10fed280fd
--- /dev/null
+++ b/graphics/items/icon_palettes/dragon_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+160 128 200
+168 184 232
+128 96 224
+216 248 216
+72 64 152
+96 56 112
+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/items/icon_palettes/dragon_memory.pal b/graphics/items/icon_palettes/dragon_memory.pal
new file mode 100755
index 0000000000..4b0a86416d
--- /dev/null
+++ b/graphics/items/icon_palettes/dragon_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+180 213 255
+230 246 255
+139 189 255
+156 197 255
+255 255 255
+172 180 213
+205 230 255
+213 180 172
+123 123 148
+98 98 123
+255 180 131
+172 139 123
+131 106 98
+197 164 156
diff --git a/graphics/items/icon_palettes/dragon_scale.pal b/graphics/items/icon_palettes/dragon_scale.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/dragon_tm_hm.pal b/graphics/items/icon_palettes/dragon_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/dragonium_z.pal b/graphics/items/icon_palettes/dragonium_z.pal
new file mode 100644
index 0000000000..af04489b71
--- /dev/null
+++ b/graphics/items/icon_palettes/dragonium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+0 148 172
+8 115 156
+246 246 246
+164 213 222
+32 164 180
+0 106 115
+24 115 131
+41 82 131
+0 139 164
+8 115 148
+172 172 172
+8 82 106
+115 148 148
+0 0 0
diff --git a/graphics/items/icon_palettes/dread_plate.pal b/graphics/items/icon_palettes/dread_plate.pal
new file mode 100644
index 0000000000..dddd5e13a9
--- /dev/null
+++ b/graphics/items/icon_palettes/dread_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+71 104 156
+130 165 201
+156 182 228
+104 138 173
+63 96 122
+56 71 88
+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/items/icon_palettes/dream_ball.pal b/graphics/items/icon_palettes/dream_ball.pal
new file mode 100644
index 0000000000..5782ed7e4a
--- /dev/null
+++ b/graphics/items/icon_palettes/dream_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+255 98 164
+197 123 156
+230 156 189
+255 131 189
+255 180 213
+255 213 238
+106 82 139
+131 98 197
+123 123 131
+74 82 82
+0 0 0
+49 49 49
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/dream_mail.pal b/graphics/items/icon_palettes/dream_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/dubious_disc.pal b/graphics/items/icon_palettes/dubious_disc.pal
new file mode 100755
index 0000000000..502d7af564
--- /dev/null
+++ b/graphics/items/icon_palettes/dubious_disc.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+120 88 104
+248 176 248
+216 176 200
+184 0 176
+248 32 232
+192 176 192
+176 104 152
+144 88 120
+160 112 176
+168 152 184
+168 144 128
+192 128 168
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/durin_berry.pal b/graphics/items/icon_palettes/durin_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/dusk_ball.pal b/graphics/items/icon_palettes/dusk_ball.pal
new file mode 100644
index 0000000000..7b6bf1de72
--- /dev/null
+++ b/graphics/items/icon_palettes/dusk_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+41 139 41
+65 172 65
+82 139 82
+98 213 57
+148 255 82
+123 115 41
+255 106 8
+156 57 0
+222 74 0
+189 32 0
+115 41 24
+0 0 0
+82 82 82
+49 49 49
diff --git a/graphics/items/icon_palettes/dusk_stone.pal b/graphics/items/icon_palettes/dusk_stone.pal
new file mode 100755
index 0000000000..a5be7f4804
--- /dev/null
+++ b/graphics/items/icon_palettes/dusk_stone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+184 144 184
+168 120 168
+232 168 224
+136 88 144
+144 104 160
+112 80 120
+96 72 96
+80 64 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/dynamax_band.pal b/graphics/items/icon_palettes/dynamax_band.pal
new file mode 100644
index 0000000000..ca35dc19e1
--- /dev/null
+++ b/graphics/items/icon_palettes/dynamax_band.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 248 0
+248 248 224
+224 224 200
+192 192 168
+160 160 128
+96 104 96
+80 80 80
+172 224 248
+120 168 240
+48 96 176
+32 64 120
+248 96 96
+192 40 40
+40 40 40
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/dynamax_candy.pal b/graphics/items/icon_palettes/dynamax_candy.pal
new file mode 100644
index 0000000000..743ea9e6d1
--- /dev/null
+++ b/graphics/items/icon_palettes/dynamax_candy.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 248 248
+248 216 224
+248 176 192
+240 88 128
+192 16 56
+128 16 40
+48 48 48
+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/items/icon_palettes/dynite_ore.pal b/graphics/items/icon_palettes/dynite_ore.pal
new file mode 100644
index 0000000000..6bf3b35bca
--- /dev/null
+++ b/graphics/items/icon_palettes/dynite_ore.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 224 224
+248 192 232
+248 160 152
+248 120 144
+248 80 96
+200 96 104
+160 64 72
+128 40 56
+48 24 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/earth_plate.pal b/graphics/items/icon_palettes/earth_plate.pal
new file mode 100644
index 0000000000..7b9e07525d
--- /dev/null
+++ b/graphics/items/icon_palettes/earth_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+156 104 71
+201 165 112
+209 182 138
+182 138 96
+138 96 63
+112 79 71
+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/items/icon_palettes/eevium_z.pal b/graphics/items/icon_palettes/eevium_z.pal
new file mode 100644
index 0000000000..8b7671224d
--- /dev/null
+++ b/graphics/items/icon_palettes/eevium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+148 90 49
+180 123 49
+222 156 74
+255 255 246
+131 82 32
+246 222 205
+106 65 32
+180 172 172
+139 74 57
+172 106 49
+156 106 49
+172 156 139
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/eject_button.pal b/graphics/items/icon_palettes/eject_button.pal
new file mode 100755
index 0000000000..363a27e605
--- /dev/null
+++ b/graphics/items/icon_palettes/eject_button.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+255 222 24
+198 214 222
+140 140 140
+214 181 24
+255 115 33
+255 66 24
+107 132 148
+181 41 33
+140 165 181
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/eject_pack.pal b/graphics/items/icon_palettes/eject_pack.pal
new file mode 100644
index 0000000000..36657d8642
--- /dev/null
+++ b/graphics/items/icon_palettes/eject_pack.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+232 232 248
+200 216 216
+184 192 192
+128 136 136
+104 112 112
+80 80 80
+48 48 48
+224 144 144
+224 80 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/electirizer.pal b/graphics/items/icon_palettes/electirizer.pal
new file mode 100755
index 0000000000..e750bb16ad
--- /dev/null
+++ b/graphics/items/icon_palettes/electirizer.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+248 248 16
+120 120 120
+88 88 16
+248 248 208
+80 80 80
+160 152 0
+168 168 168
+224 216 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/electric_gem.pal b/graphics/items/icon_palettes/electric_gem.pal
new file mode 100644
index 0000000000..88de6e42ae
--- /dev/null
+++ b/graphics/items/icon_palettes/electric_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+248 224 0
+248 248 160
+224 200 0
+248 248 248
+192 168 0
+184 160 0
+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/items/icon_palettes/electric_memory.pal b/graphics/items/icon_palettes/electric_memory.pal
new file mode 100755
index 0000000000..3567d9e8e6
--- /dev/null
+++ b/graphics/items/icon_palettes/electric_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+255 205 57
+255 230 123
+255 255 222
+255 238 156
+255 255 255
+255 255 189
+255 222 90
+255 197 24
+123 123 148
+98 98 123
+255 197 0
+180 164 131
+139 131 115
+197 189 164
diff --git a/graphics/items/icon_palettes/electric_seed.pal b/graphics/items/icon_palettes/electric_seed.pal
new file mode 100644
index 0000000000..5c264cdc94
--- /dev/null
+++ b/graphics/items/icon_palettes/electric_seed.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+213 148 65
+246 246 82
+246 222 74
+238 246 197
+156 106 16
+106 82 65
+205 139 24
+238 189 41
+106 90 74
+156 90 49
+246 222 123
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/electric_tm_hm.pal b/graphics/items/icon_palettes/electric_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/electrium_z.pal b/graphics/items/icon_palettes/electrium_z.pal
new file mode 100644
index 0000000000..e23c147f76
--- /dev/null
+++ b/graphics/items/icon_palettes/electrium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+246 172 0
+213 131 8
+255 213 8
+255 255 246
+255 246 139
+197 106 16
+238 164 0
+172 123 0
+180 180 172
+180 172 98
+180 148 8
+148 90 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/elixir.pal b/graphics/items/icon_palettes/elixir.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/energy_powder.pal b/graphics/items/icon_palettes/energy_powder.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/energy_root.pal b/graphics/items/icon_palettes/energy_root.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/enigma_berry.pal b/graphics/items/icon_palettes/enigma_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/eon_ticket.pal b/graphics/items/icon_palettes/eon_ticket.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/escape_rope.pal b/graphics/items/icon_palettes/escape_rope.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/ether.pal b/graphics/items/icon_palettes/ether.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/everstone.pal b/graphics/items/icon_palettes/everstone.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/eviolite.pal b/graphics/items/icon_palettes/eviolite.pal
new file mode 100644
index 0000000000..28ba1a4fc3
--- /dev/null
+++ b/graphics/items/icon_palettes/eviolite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+88 88 88
+248 200 240
+224 176 232
+48 48 48
+240 224 248
+200 144 224
+176 120 216
+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/items/icon_palettes/exp_candies.pal b/graphics/items/icon_palettes/exp_candies.pal
new file mode 100644
index 0000000000..7e669d6f43
--- /dev/null
+++ b/graphics/items/icon_palettes/exp_candies.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 128 248
+240 248 248
+192 240 248
+144 240 248
+96 192 208
+80 112 120
+8 144 156
+48 48 48
+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/items/icon_palettes/exp_charm.pal b/graphics/items/icon_palettes/exp_charm.pal
new file mode 100644
index 0000000000..f12330d366
--- /dev/null
+++ b/graphics/items/icon_palettes/exp_charm.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 248 192
+248 232 232
+248 160 160
+248 120 120
+136 216 248
+80 176 248
+104 136 160
+59 95 126
+48 48 48
+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/items/icon_palettes/exp_share.pal b/graphics/items/icon_palettes/exp_share.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/expert_belt.pal b/graphics/items/icon_palettes/expert_belt.pal
new file mode 100644
index 0000000000..cfb6c6a926
--- /dev/null
+++ b/graphics/items/icon_palettes/expert_belt.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+61 54 61
+117 109 117
+85 77 85
+0 0 0
+0 0 0
+0 0 0
+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/items/icon_palettes/fab_mail.pal b/graphics/items/icon_palettes/fab_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/fairium_z.pal b/graphics/items/icon_palettes/fairium_z.pal
new file mode 100644
index 0000000000..4b5cedf151
--- /dev/null
+++ b/graphics/items/icon_palettes/fairium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+180 74 98
+255 123 156
+255 246 255
+255 238 246
+255 156 189
+255 115 156
+180 106 131
+172 82 106
+123 57 65
+230 106 131
+123 49 65
+180 172 172
+180 164 172
+0 0 0
diff --git a/graphics/items/icon_palettes/fairy_gem.pal b/graphics/items/icon_palettes/fairy_gem.pal
new file mode 100644
index 0000000000..4bf316f572
--- /dev/null
+++ b/graphics/items/icon_palettes/fairy_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+215 149 192
+251 230 239
+210 120 173
+255 247 255
+193 77 151
+183 49 136
+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/items/icon_palettes/fairy_memory.pal b/graphics/items/icon_palettes/fairy_memory.pal
new file mode 100755
index 0000000000..229a7f8dce
--- /dev/null
+++ b/graphics/items/icon_palettes/fairy_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 128 64
+49 49 49
+205 148 255
+222 189 246
+255 255 255
+230 205 238
+213 172 246
+246 222 255
+189 131 255
+222 139 238
+123 123 148
+98 98 123
+246 148 213
+180 115 148
+139 98 123
+197 156 180
diff --git a/graphics/items/icon_palettes/fairy_tm_hm.pal b/graphics/items/icon_palettes/fairy_tm_hm.pal
new file mode 100755
index 0000000000..fe903900e0
--- /dev/null
+++ b/graphics/items/icon_palettes/fairy_tm_hm.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+181 181 181
+49 49 49
+74 74 99
+231 205 239
+222 189 247
+214 173 247
+206 148 254
+189 132 254
+222 141 239
+247 148 215
+123 123 148
+123 123 123
+99 99 123
+255 255 255
+246 221 255
+82 82 82
diff --git a/graphics/items/icon_palettes/fame_checker.pal b/graphics/items/icon_palettes/fame_checker.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/fast_ball.pal b/graphics/items/icon_palettes/fast_ball.pal
new file mode 100644
index 0000000000..22b9e6212d
--- /dev/null
+++ b/graphics/items/icon_palettes/fast_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+222 205 246
+164 164 197
+123 123 131
+74 82 82
+148 131 65
+246 205 57
+213 172 49
+238 139 65
+205 106 41
+255 180 131
+0 0 0
+49 49 49
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/fighting_gem.pal b/graphics/items/icon_palettes/fighting_gem.pal
new file mode 100644
index 0000000000..324a6870c6
--- /dev/null
+++ b/graphics/items/icon_palettes/fighting_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+184 112 120
+224 152 136
+144 72 120
+248 216 208
+120 56 88
+96 40 56
+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/items/icon_palettes/fighting_memory.pal b/graphics/items/icon_palettes/fighting_memory.pal
new file mode 100755
index 0000000000..873621d21f
--- /dev/null
+++ b/graphics/items/icon_palettes/fighting_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+238 164 90
+238 197 156
+255 238 230
+246 213 189
+238 180 123
+255 255 255
+230 148 57
+230 131 24
+230 115 0
+123 123 148
+98 98 123
+189 139 123
+148 115 106
+205 172 156
diff --git a/graphics/items/icon_palettes/fighting_tm_hm.pal b/graphics/items/icon_palettes/fighting_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/fightinium_z.pal b/graphics/items/icon_palettes/fightinium_z.pal
new file mode 100644
index 0000000000..ef0b707b16
--- /dev/null
+++ b/graphics/items/icon_palettes/fightinium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+255 139 49
+230 98 32
+255 246 213
+255 148 49
+255 205 131
+180 98 32
+180 106 32
+156 74 24
+255 131 41
+189 65 24
+180 172 148
+180 139 90
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/figy_berry.pal b/graphics/items/icon_palettes/figy_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/fire_gem.pal b/graphics/items/icon_palettes/fire_gem.pal
new file mode 100644
index 0000000000..f98f9e16ca
--- /dev/null
+++ b/graphics/items/icon_palettes/fire_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+248 144 72
+248 200 104
+240 64 48
+248 248 232
+224 72 32
+176 24 0
+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/items/icon_palettes/fire_memory.pal b/graphics/items/icon_palettes/fire_memory.pal
new file mode 100755
index 0000000000..a5a760f7c2
--- /dev/null
+++ b/graphics/items/icon_palettes/fire_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+255 189 65
+255 238 222
+255 255 255
+255 230 189
+255 197 98
+238 172 32
+255 222 156
+255 180 41
+255 205 131
+123 123 148
+98 98 123
+180 131 131
+139 106 115
+197 164 164
diff --git a/graphics/items/icon_palettes/fire_stone.pal b/graphics/items/icon_palettes/fire_stone.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/fire_tm_hm.pal b/graphics/items/icon_palettes/fire_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/firium_z.pal b/graphics/items/icon_palettes/firium_z.pal
new file mode 100644
index 0000000000..69b70151f0
--- /dev/null
+++ b/graphics/items/icon_palettes/firium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+255 65 65
+197 32 32
+255 246 213
+255 106 98
+255 189 172
+139 24 24
+172 49 41
+180 74 65
+238 57 57
+164 16 16
+172 41 41
+180 131 123
+180 172 148
+0 0 0
diff --git a/graphics/items/icon_palettes/fist_plate.pal b/graphics/items/icon_palettes/fist_plate.pal
new file mode 100644
index 0000000000..470a83c515
--- /dev/null
+++ b/graphics/items/icon_palettes/fist_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+201 104 96
+246 156 138
+255 173 165
+228 130 96
+173 63 63
+130 56 40
+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/items/icon_palettes/flame_orb.pal b/graphics/items/icon_palettes/flame_orb.pal
new file mode 100644
index 0000000000..f3ee47e397
--- /dev/null
+++ b/graphics/items/icon_palettes/flame_orb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+247 126 126
+247 46 46
+238 185 177
+247 247 247
+247 126 85
+247 194 93
+247 247 93
+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/items/icon_palettes/flame_plate.pal b/graphics/items/icon_palettes/flame_plate.pal
new file mode 100644
index 0000000000..8b68abf8f5
--- /dev/null
+++ b/graphics/items/icon_palettes/flame_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+212 69 54
+247 117 117
+247 142 142
+247 77 77
+168 18 18
+151 5 5
+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/items/icon_palettes/float_stone.pal b/graphics/items/icon_palettes/float_stone.pal
new file mode 100644
index 0000000000..420e4adc6f
--- /dev/null
+++ b/graphics/items/icon_palettes/float_stone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+64 64 64
+224 224 208
+200 200 184
+168 168 152
+152 144 136
+136 128 112
+48 48 48
+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/items/icon_palettes/flower_sweet.pal b/graphics/items/icon_palettes/flower_sweet.pal
new file mode 100644
index 0000000000..983cbf3f1b
--- /dev/null
+++ b/graphics/items/icon_palettes/flower_sweet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 174 201
+248 248 176
+248 232 88
+248 208 0
+240 120 40
+208 96 24
+192 80 8
+112 40 0
+48 48 48
+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/items/icon_palettes/fluffy_tail.pal b/graphics/items/icon_palettes/fluffy_tail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/flying_gem.pal b/graphics/items/icon_palettes/flying_gem.pal
new file mode 100644
index 0000000000..16d9334346
--- /dev/null
+++ b/graphics/items/icon_palettes/flying_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+184 200 248
+216 224 248
+152 168 240
+232 248 248
+104 128 192
+64 80 144
+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/items/icon_palettes/flying_memory.pal b/graphics/items/icon_palettes/flying_memory.pal
new file mode 100755
index 0000000000..1891eeeb83
--- /dev/null
+++ b/graphics/items/icon_palettes/flying_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+189 238 255
+213 246 255
+246 246 255
+180 205 222
+172 222 238
+172 238 255
+255 255 255
+156 238 255
+197 197 197
+123 123 148
+98 98 123
+123 189 189
+106 148 139
+156 205 205
diff --git a/graphics/items/icon_palettes/flying_tm_hm.pal b/graphics/items/icon_palettes/flying_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/flyinium_z.pal b/graphics/items/icon_palettes/flyinium_z.pal
new file mode 100644
index 0000000000..b2746e6643
--- /dev/null
+++ b/graphics/items/icon_palettes/flyinium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+0 131 222
+8 90 197
+16 172 238
+213 255 255
+115 222 255
+0 90 148
+0 123 213
+8 123 164
+24 74 180
+148 172 180
+8 65 131
+82 156 180
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/focus_band.pal b/graphics/items/icon_palettes/focus_band.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/focus_sash.pal b/graphics/items/icon_palettes/focus_sash.pal
new file mode 100644
index 0000000000..08b56485e0
--- /dev/null
+++ b/graphics/items/icon_palettes/focus_sash.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+77 77 77
+212 101 61
+247 117 117
+247 151 69
+177 39 39
+229 69 69
+247 220 69
+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/items/icon_palettes/fossilized_bird.pal b/graphics/items/icon_palettes/fossilized_bird.pal
new file mode 100644
index 0000000000..8472a03732
--- /dev/null
+++ b/graphics/items/icon_palettes/fossilized_bird.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 217 234
+248 224 184
+232 192 112
+200 144 36
+168 112 0
+152 96 24
+181 135 83
+128 80 64
+216 160 56
+96 48 32
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/fossilized_dino.pal b/graphics/items/icon_palettes/fossilized_dino.pal
new file mode 100644
index 0000000000..464586af96
--- /dev/null
+++ b/graphics/items/icon_palettes/fossilized_dino.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+34 177 76
+216 216 248
+184 184 232
+144 144 232
+120 120 184
+80 80 152
+48 48 96
+96 88 144
+48 48 48
+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/items/icon_palettes/fossilized_drake.pal b/graphics/items/icon_palettes/fossilized_drake.pal
new file mode 100644
index 0000000000..1c1eb5b536
--- /dev/null
+++ b/graphics/items/icon_palettes/fossilized_drake.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 128 192
+152 216 248
+96 184 224
+72 168 216
+48 144 200
+40 104 136
+16 72 96
+48 48 48
+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/items/icon_palettes/fossilized_fish.pal b/graphics/items/icon_palettes/fossilized_fish.pal
new file mode 100644
index 0000000000..d36dcaf061
--- /dev/null
+++ b/graphics/items/icon_palettes/fossilized_fish.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 192 248
+192 224 160
+144 184 120
+104 136 80
+80 112 64
+56 80 48
+48 48 48
+0 0 0
+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/items/icon_palettes/fresh_water.pal b/graphics/items/icon_palettes/fresh_water.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/friend_ball.pal b/graphics/items/icon_palettes/friend_ball.pal
new file mode 100644
index 0000000000..051f2e119e
--- /dev/null
+++ b/graphics/items/icon_palettes/friend_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+222 205 246
+164 164 197
+123 123 131
+90 106 123
+74 82 82
+139 197 57
+189 230 131
+123 164 57
+246 222 16
+172 148 65
+197 90 74
+230 139 131
+0 0 0
+49 49 49
diff --git a/graphics/items/icon_palettes/full_heal.pal b/graphics/items/icon_palettes/full_heal.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/full_incense.pal b/graphics/items/icon_palettes/full_incense.pal
new file mode 100755
index 0000000000..7b4948f23f
--- /dev/null
+++ b/graphics/items/icon_palettes/full_incense.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+120 96 40
+248 184 184
+216 72 72
+248 248 104
+240 232 32
+248 248 168
+112 96 48
+216 208 0
+152 136 0
+176 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/full_restore.pal b/graphics/items/icon_palettes/full_restore.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/galarica_item.pal b/graphics/items/icon_palettes/galarica_item.pal
new file mode 100644
index 0000000000..6f003b1f86
--- /dev/null
+++ b/graphics/items/icon_palettes/galarica_item.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+182 139 54
+160 115 65
+116 91 61
+86 68 43
+54 46 27
+205 184 24
+115 167 18
+39 128 20
+20 90 18
+255 153 104
+252 122 46
+221 83 27
+151 54 13
+48 48 48
+0 0 0
diff --git a/graphics/items/icon_palettes/galladite.pal b/graphics/items/icon_palettes/galladite.pal
new file mode 100644
index 0000000000..fdc71e0e27
--- /dev/null
+++ b/graphics/items/icon_palettes/galladite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+104 176 160
+144 120 128
+216 96 112
+232 232 216
+208 224 224
+232 168 184
+240 200 208
+248 248 248
+88 160 144
+176 208 208
+120 176 168
+216 152 160
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/ganlon_berry.pal b/graphics/items/icon_palettes/ganlon_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/garchompite.pal b/graphics/items/icon_palettes/garchompite.pal
new file mode 100644
index 0000000000..79e932ef5c
--- /dev/null
+++ b/graphics/items/icon_palettes/garchompite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+152 56 64
+240 160 48
+248 216 56
+72 80 136
+216 136 136
+160 152 96
+248 248 248
+248 216 152
+200 32 32
+104 80 136
+80 120 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/gardevoirite.pal b/graphics/items/icon_palettes/gardevoirite.pal
new file mode 100644
index 0000000000..c71a12daf7
--- /dev/null
+++ b/graphics/items/icon_palettes/gardevoirite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+88 192 120
+168 112 120
+192 48 104
+176 192 232
+160 224 192
+160 168 152
+184 120 168
+248 248 248
+80 184 112
+144 200 160
+208 208 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/gengarite.pal b/graphics/items/icon_palettes/gengarite.pal
new file mode 100644
index 0000000000..307b1a3b1e
--- /dev/null
+++ b/graphics/items/icon_palettes/gengarite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+96 56 200
+152 56 144
+208 56 80
+184 144 224
+192 184 248
+200 96 152
+248 248 248
+72 32 208
+144 96 208
+192 192 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/genius_feather.pal b/graphics/items/icon_palettes/genius_feather.pal
new file mode 100644
index 0000000000..dbfdb5e88f
--- /dev/null
+++ b/graphics/items/icon_palettes/genius_feather.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+90 90 90
+206 239 255
+239 255 255
+49 49 49
+156 214 231
+148 189 198
+140 247 255
+90 231 239
+140 165 173
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/ghost_gem.pal b/graphics/items/icon_palettes/ghost_gem.pal
new file mode 100644
index 0000000000..6068c4d2b0
--- /dev/null
+++ b/graphics/items/icon_palettes/ghost_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+104 80 184
+104 104 216
+80 64 152
+136 136 224
+56 48 112
+32 40 80
+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/items/icon_palettes/ghost_memory.pal b/graphics/items/icon_palettes/ghost_memory.pal
new file mode 100755
index 0000000000..aa10565da3
--- /dev/null
+++ b/graphics/items/icon_palettes/ghost_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 128 64
+49 49 49
+222 172 246
+230 205 246
+255 238 255
+213 148 246
+230 189 246
+255 255 255
+197 123 238
+238 222 246
+180 98 222
+123 123 148
+98 98 123
+131 131 189
+106 115 148
+156 156 205
diff --git a/graphics/items/icon_palettes/ghost_tm_hm.pal b/graphics/items/icon_palettes/ghost_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/ghostium_z.pal b/graphics/items/icon_palettes/ghostium_z.pal
new file mode 100644
index 0000000000..6eafff7118
--- /dev/null
+++ b/graphics/items/icon_palettes/ghostium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+139 90 148
+172 106 164
+197 139 180
+255 246 246
+230 197 213
+164 106 164
+115 74 115
+131 90 123
+172 172 172
+156 98 156
+123 74 131
+98 57 98
+156 131 148
+82 49 90
diff --git a/graphics/items/icon_palettes/glalitite.pal b/graphics/items/icon_palettes/glalitite.pal
new file mode 100644
index 0000000000..6cd95b0d82
--- /dev/null
+++ b/graphics/items/icon_palettes/glalitite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+208 216 232
+104 112 112
+56 56 56
+152 200 216
+152 152 152
+128 136 144
+248 248 248
+64 152 184
+56 104 120
+136 184 208
+96 168 192
+56 96 112
+64 128 152
+0 0 0
diff --git a/graphics/items/icon_palettes/glitter_mail.pal b/graphics/items/icon_palettes/glitter_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/go_goggles.pal b/graphics/items/icon_palettes/go_goggles.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/gold_bottle_cap.pal b/graphics/items/icon_palettes/gold_bottle_cap.pal
new file mode 100644
index 0000000000..2420b2d4c7
--- /dev/null
+++ b/graphics/items/icon_palettes/gold_bottle_cap.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 240 176
+248 232 72
+220 192 80
+200 168 80
+184 128 72
+160 104 64
+168 120 72
+152 104 64
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/gold_teeth.pal b/graphics/items/icon_palettes/gold_teeth.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/good_rod.pal b/graphics/items/icon_palettes/good_rod.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/gooey_mulch.pal b/graphics/items/icon_palettes/gooey_mulch.pal
new file mode 100644
index 0000000000..7750074477
--- /dev/null
+++ b/graphics/items/icon_palettes/gooey_mulch.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+176 80 184
+200 152 200
+240 216 216
+232 200 152
+216 184 104
+180 136 72
+128 96 56
+48 48 48
+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/items/icon_palettes/gracidea.pal b/graphics/items/icon_palettes/gracidea.pal
new file mode 100755
index 0000000000..a1d740e73f
--- /dev/null
+++ b/graphics/items/icon_palettes/gracidea.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+247 107 132
+255 140 165
+82 148 16
+99 206 8
+255 173 189
+173 49 74
+255 214 222
+198 123 74
+247 239 90
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/grass_gem.pal b/graphics/items/icon_palettes/grass_gem.pal
new file mode 100644
index 0000000000..02412f988e
--- /dev/null
+++ b/graphics/items/icon_palettes/grass_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+96 248 120
+184 248 176
+64 200 80
+232 248 224
+56 184 88
+0 144 48
+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/items/icon_palettes/grass_memory.pal b/graphics/items/icon_palettes/grass_memory.pal
new file mode 100755
index 0000000000..07a5778f91
--- /dev/null
+++ b/graphics/items/icon_palettes/grass_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+156 238 197
+197 246 213
+255 255 255
+139 238 180
+238 246 246
+213 246 230
+123 238 172
+180 246 205
+123 123 148
+98 98 123
+106 238 164
+131 180 180
+106 139 139
+164 197 197
diff --git a/graphics/items/icon_palettes/grass_tm_hm.pal b/graphics/items/icon_palettes/grass_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/grassium_z.pal b/graphics/items/icon_palettes/grassium_z.pal
new file mode 100644
index 0000000000..24569efaec
--- /dev/null
+++ b/graphics/items/icon_palettes/grassium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+57 164 24
+49 131 49
+74 205 0
+238 255 213
+131 255 24
+41 115 16
+49 148 0
+164 180 148
+49 106 57
+57 156 32
+32 90 32
+90 180 16
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/grassy_seed.pal b/graphics/items/icon_palettes/grassy_seed.pal
new file mode 100644
index 0000000000..2f1acee397
--- /dev/null
+++ b/graphics/items/icon_palettes/grassy_seed.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+139 172 82
+197 230 90
+172 197 90
+238 246 197
+156 106 16
+65 74 24
+205 139 24
+238 189 41
+106 90 74
+106 148 82
+246 222 123
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/great_ball.pal b/graphics/items/icon_palettes/great_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/green_apricorn.pal b/graphics/items/icon_palettes/green_apricorn.pal
new file mode 100755
index 0000000000..2d89478446
--- /dev/null
+++ b/graphics/items/icon_palettes/green_apricorn.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+231 181 140
+115 82 66
+165 99 41
+57 189 99
+24 132 57
+206 148 99
+132 239 165
+255 255 255
+41 156 74
+33 90 49
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/green_mint.pal b/graphics/items/icon_palettes/green_mint.pal
new file mode 100644
index 0000000000..fe469885c3
--- /dev/null
+++ b/graphics/items/icon_palettes/green_mint.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+180 240 144
+152 240 128
+104 200 96
+72 144 64
+56 112 56
+32 68 32
+40 40 40
+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/items/icon_palettes/green_scarf.pal b/graphics/items/icon_palettes/green_scarf.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/green_shard.pal b/graphics/items/icon_palettes/green_shard.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/grepa_berry.pal b/graphics/items/icon_palettes/grepa_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/grip_claw.pal b/graphics/items/icon_palettes/grip_claw.pal
new file mode 100644
index 0000000000..ee28f992aa
--- /dev/null
+++ b/graphics/items/icon_palettes/grip_claw.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+77 77 77
+247 247 247
+177 212 212
+117 142 142
+61 85 69
+69 101 85
+134 159 159
+101 134 109
+126 151 134
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/griseous_orb.pal b/graphics/items/icon_palettes/griseous_orb.pal
new file mode 100644
index 0000000000..29b8f77048
--- /dev/null
+++ b/graphics/items/icon_palettes/griseous_orb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+123 99 33
+255 255 255
+214 189 24
+255 247 206
+247 231 140
+222 198 57
+156 132 33
+206 181 41
+173 140 24
+189 156 41
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/ground_gem.pal b/graphics/items/icon_palettes/ground_gem.pal
new file mode 100644
index 0000000000..cbdd4efd6d
--- /dev/null
+++ b/graphics/items/icon_palettes/ground_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+184 128 56
+200 160 80
+160 104 32
+224 192 128
+112 64 16
+104 56 16
+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/items/icon_palettes/ground_memory.pal b/graphics/items/icon_palettes/ground_memory.pal
new file mode 100755
index 0000000000..b9272a0dc1
--- /dev/null
+++ b/graphics/items/icon_palettes/ground_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+246 238 90
+255 255 156
+255 255 255
+230 213 82
+255 255 123
+255 255 222
+255 255 90
+255 255 189
+222 197 65
+123 123 148
+98 98 123
+164 148 131
+131 115 106
+180 164 156
diff --git a/graphics/items/icon_palettes/ground_tm_hm.pal b/graphics/items/icon_palettes/ground_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/groundium_z.pal b/graphics/items/icon_palettes/groundium_z.pal
new file mode 100644
index 0000000000..2e8a65d0ee
--- /dev/null
+++ b/graphics/items/icon_palettes/groundium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+222 98 41
+180 74 49
+246 139 65
+255 222 180
+255 246 222
+156 57 57
+156 65 24
+213 90 41
+172 98 49
+180 172 156
+123 49 32
+180 156 123
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/growth_mulch.pal b/graphics/items/icon_palettes/growth_mulch.pal
new file mode 100644
index 0000000000..f00cd93068
--- /dev/null
+++ b/graphics/items/icon_palettes/growth_mulch.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 232 152
+168 216 120
+48 200 64
+232 200 152
+216 184 104
+180 136 72
+128 96 56
+48 48 48
+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/items/icon_palettes/guard_spec.pal b/graphics/items/icon_palettes/guard_spec.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/gyaradosite.pal b/graphics/items/icon_palettes/gyaradosite.pal
new file mode 100644
index 0000000000..f485d4ef3c
--- /dev/null
+++ b/graphics/items/icon_palettes/gyaradosite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+40 96 240
+152 56 112
+208 32 48
+192 144 0
+144 168 248
+248 168 168
+200 88 24
+248 248 248
+16 64 232
+120 120 120
+208 184 152
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/haban_berry.pal b/graphics/items/icon_palettes/haban_berry.pal
new file mode 100755
index 0000000000..857889ed08
--- /dev/null
+++ b/graphics/items/icon_palettes/haban_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+248 120 120
+248 152 152
+232 64 64
+208 32 32
+160 40 40
+96 48 48
+80 48 72
+104 56 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/harbor_mail.pal b/graphics/items/icon_palettes/harbor_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/hard_stone.pal b/graphics/items/icon_palettes/hard_stone.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/heal_ball.pal b/graphics/items/icon_palettes/heal_ball.pal
new file mode 100644
index 0000000000..86f7876651
--- /dev/null
+++ b/graphics/items/icon_palettes/heal_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+246 139 180
+255 180 230
+255 106 213
+238 82 197
+213 16 172
+106 98 197
+123 148 205
+139 172 222
+90 139 205
+255 246 213
+230 180 115
+255 205 172
+0 0 0
+49 49 49
diff --git a/graphics/items/icon_palettes/heal_powder.pal b/graphics/items/icon_palettes/heal_powder.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/health_feather.pal b/graphics/items/icon_palettes/health_feather.pal
new file mode 100644
index 0000000000..357d6950ba
--- /dev/null
+++ b/graphics/items/icon_palettes/health_feather.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+90 90 90
+206 239 255
+239 255 255
+49 49 49
+156 214 231
+181 165 132
+255 231 132
+255 206 24
+140 165 173
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/heart_scale.pal b/graphics/items/icon_palettes/heart_scale.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/heat_rock.pal b/graphics/items/icon_palettes/heat_rock.pal
new file mode 100644
index 0000000000..c5b91232df
--- /dev/null
+++ b/graphics/items/icon_palettes/heat_rock.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+247 203 212
+247 142 177
+212 85 117
+247 109 151
+142 109 93
+168 134 117
+220 194 185
+212 177 159
+185 61 85
+177 93 93
+101 77 69
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/heavy_ball.pal b/graphics/items/icon_palettes/heavy_ball.pal
new file mode 100644
index 0000000000..3a02d3d7d4
--- /dev/null
+++ b/graphics/items/icon_palettes/heavy_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+222 205 246
+164 164 197
+123 123 131
+82 123 222
+57 90 164
+131 172 238
+197 205 213
+90 106 123
+115 131 148
+148 164 180
+74 82 82
+0 0 0
+49 49 49
+0 0 0
diff --git a/graphics/items/icon_palettes/heavy_duty_boots.pal b/graphics/items/icon_palettes/heavy_duty_boots.pal
new file mode 100644
index 0000000000..8ec7b2d4a5
--- /dev/null
+++ b/graphics/items/icon_palettes/heavy_duty_boots.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 248 128
+216 216 216
+160 160 160
+128 128 128
+104 104 104
+96 96 96
+80 80 80
+64 64 64
+48 48 48
+232 176 176
+168 128 128
+136 96 96
+240 80 80
+176 80 80
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/heracronite.pal b/graphics/items/icon_palettes/heracronite.pal
new file mode 100644
index 0000000000..6877ae795d
--- /dev/null
+++ b/graphics/items/icon_palettes/heracronite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+80 80 112
+208 64 8
+248 80 32
+248 216 56
+168 184 184
+248 152 128
+248 152 40
+248 248 248
+32 56 96
+208 160 0
+232 248 184
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/hoenn_fossil.pal b/graphics/items/icon_palettes/hoenn_fossil.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/hondew_berry.pal b/graphics/items/icon_palettes/hondew_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/honey.pal b/graphics/items/icon_palettes/honey.pal
new file mode 100644
index 0000000000..062722fc51
--- /dev/null
+++ b/graphics/items/icon_palettes/honey.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+163 73 164
+248 240 184
+248 184 72
+232 144 0
+200 112 0
+120 80 32
+216 248 248
+96 184 192
+80 152 152
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/houndoominite.pal b/graphics/items/icon_palettes/houndoominite.pal
new file mode 100644
index 0000000000..25f151408a
--- /dev/null
+++ b/graphics/items/icon_palettes/houndoominite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+96 80 88
+184 40 48
+248 32 32
+136 104 112
+184 160 160
+248 144 144
+192 64 72
+248 248 248
+56 56 64
+120 88 96
+152 144 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/hp_up.pal b/graphics/items/icon_palettes/hp_up.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/hyper_potion.pal b/graphics/items/icon_palettes/hyper_potion.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/iapapa_berry.pal b/graphics/items/icon_palettes/iapapa_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/ice_gem.pal b/graphics/items/icon_palettes/ice_gem.pal
new file mode 100644
index 0000000000..dda74d5894
--- /dev/null
+++ b/graphics/items/icon_palettes/ice_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+104 232 232
+168 248 248
+48 208 248
+232 248 248
+24 176 248
+0 152 200
+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/items/icon_palettes/ice_heal.pal b/graphics/items/icon_palettes/ice_heal.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/ice_memory.pal b/graphics/items/icon_palettes/ice_memory.pal
new file mode 100755
index 0000000000..201520bd9e
--- /dev/null
+++ b/graphics/items/icon_palettes/ice_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+197 246 255
+255 255 255
+213 246 255
+172 238 255
+156 238 255
+230 246 255
+139 230 246
+131 213 238
+123 123 148
+98 98 123
+131 180 180
+106 139 139
+164 205 197
+0 0 0
diff --git a/graphics/items/icon_palettes/ice_stone.pal b/graphics/items/icon_palettes/ice_stone.pal
new file mode 100755
index 0000000000..b922cbbabd
--- /dev/null
+++ b/graphics/items/icon_palettes/ice_stone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+189 238 246
+148 213 222
+222 246 255
+238 255 255
+246 255 255
+98 189 205
+57 156 180
+213 238 246
+24 106 148
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/ice_tm_hm.pal b/graphics/items/icon_palettes/ice_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/icicle_plate.pal b/graphics/items/icon_palettes/icicle_plate.pal
new file mode 100644
index 0000000000..b1c45e523a
--- /dev/null
+++ b/graphics/items/icon_palettes/icicle_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+138 201 192
+209 246 255
+228 246 246
+173 237 237
+56 156 147
+63 122 104
+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/items/icon_palettes/icium_z.pal b/graphics/items/icon_palettes/icium_z.pal
new file mode 100644
index 0000000000..98eb3ceef8
--- /dev/null
+++ b/graphics/items/icon_palettes/icium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+98 172 246
+41 123 205
+139 213 255
+255 255 255
+172 246 238
+65 115 172
+32 82 148
+16 98 189
+82 148 230
+98 148 180
+180 180 180
+123 172 164
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/icy_rock.pal b/graphics/items/icon_palettes/icy_rock.pal
new file mode 100644
index 0000000000..27f6fbc234
--- /dev/null
+++ b/graphics/items/icon_palettes/icy_rock.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+185 247 247
+126 203 238
+229 247 247
+77 177 220
+54 142 185
+117 134 168
+185 126 93
+134 93 61
+151 101 69
+229 185 159
+142 159 194
+229 168 142
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/incinium_z.pal b/graphics/items/icon_palettes/incinium_z.pal
new file mode 100644
index 0000000000..001f80973f
--- /dev/null
+++ b/graphics/items/icon_palettes/incinium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+255 65 65
+197 32 32
+255 106 98
+255 246 213
+139 24 24
+172 49 41
+255 189 172
+180 74 65
+180 172 148
+164 16 16
+238 57 57
+172 41 41
+180 131 123
+0 0 0
diff --git a/graphics/items/icon_palettes/insect_plate.pal b/graphics/items/icon_palettes/insect_plate.pal
new file mode 100644
index 0000000000..65f65b4bfb
--- /dev/null
+++ b/graphics/items/icon_palettes/insect_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+173 218 104
+246 255 147
+246 246 173
+201 246 112
+130 173 26
+96 138 18
+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/items/icon_palettes/iron.pal b/graphics/items/icon_palettes/iron.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/iron_ball.pal b/graphics/items/icon_palettes/iron_ball.pal
new file mode 100644
index 0000000000..4e3ff78911
--- /dev/null
+++ b/graphics/items/icon_palettes/iron_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+46 77 69
+69 109 101
+54 93 85
+77 126 126
+77 177 151
+177 238 220
+247 247 247
+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/items/icon_palettes/iron_plate.pal b/graphics/items/icon_palettes/iron_plate.pal
new file mode 100644
index 0000000000..4885bc46cf
--- /dev/null
+++ b/graphics/items/icon_palettes/iron_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+136 136 136
+208 208 208
+232 232 232
+176 176 176
+120 120 120
+104 104 104
+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/items/icon_palettes/jaboca_berry.pal b/graphics/items/icon_palettes/jaboca_berry.pal
new file mode 100755
index 0000000000..7f937b28ee
--- /dev/null
+++ b/graphics/items/icon_palettes/jaboca_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+240 232 104
+160 128 48
+96 96 40
+120 120 48
+200 184 40
+248 248 208
+160 152 48
+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/items/icon_palettes/jade_orb.pal b/graphics/items/icon_palettes/jade_orb.pal
new file mode 100644
index 0000000000..6233744446
--- /dev/null
+++ b/graphics/items/icon_palettes/jade_orb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 192 248
+232 248 232
+156 224 172
+104 192 128
+56 160 88
+24 120 64
+0 80 48
+48 48 48
+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/items/icon_palettes/jaw_fossil.pal b/graphics/items/icon_palettes/jaw_fossil.pal
new file mode 100755
index 0000000000..d06360faf7
--- /dev/null
+++ b/graphics/items/icon_palettes/jaw_fossil.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+132 140 181
+173 173 173
+115 115 156
+66 66 99
+90 90 132
+132 132 173
+198 189 189
+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/items/icon_palettes/kangaskhanite.pal b/graphics/items/icon_palettes/kangaskhanite.pal
new file mode 100644
index 0000000000..dd50b3216f
--- /dev/null
+++ b/graphics/items/icon_palettes/kangaskhanite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+184 160 248
+160 128 168
+128 96 96
+248 216 120
+216 192 248
+200 168 192
+192 160 104
+248 248 248
+184 160 232
+216 192 184
+248 240 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/kanto_fossil.pal b/graphics/items/icon_palettes/kanto_fossil.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/kasib_berry.pal b/graphics/items/icon_palettes/kasib_berry.pal
new file mode 100755
index 0000000000..81a6165aa7
--- /dev/null
+++ b/graphics/items/icon_palettes/kasib_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+248 248 184
+168 120 48
+224 64 184
+248 104 200
+176 48 144
+248 160 224
+104 56 96
+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/items/icon_palettes/kebia_berry.pal b/graphics/items/icon_palettes/kebia_berry.pal
new file mode 100755
index 0000000000..b63d95d448
--- /dev/null
+++ b/graphics/items/icon_palettes/kebia_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+40 152 40
+48 192 56
+80 232 96
+40 104 40
+128 168 48
+144 192 56
+176 240 152
+128 112 96
+104 88 80
+208 248 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/kee_berry.pal b/graphics/items/icon_palettes/kee_berry.pal
new file mode 100755
index 0000000000..7d25b433ac
--- /dev/null
+++ b/graphics/items/icon_palettes/kee_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+156 222 115
+115 189 82
+82 156 49
+49 115 33
+230 140 90
+255 173 123
+189 132 107
+206 99 66
+148 123 99
+255 222 189
+230 189 165
+0 0 0
+189 156 132
+0 0 0
diff --git a/graphics/items/icon_palettes/kelpsy_berry.pal b/graphics/items/icon_palettes/kelpsy_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/key.pal b/graphics/items/icon_palettes/key.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/key_stone.pal b/graphics/items/icon_palettes/key_stone.pal
new file mode 100644
index 0000000000..3d1bbddb92
--- /dev/null
+++ b/graphics/items/icon_palettes/key_stone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 224 24
+80 208 16
+48 156 8
+16 104 0
+96 232 248
+56 184 216
+56 152 240
+16 128 172
+32 104 200
+8 56 152
+248 248 248
+248 216 248
+248 160 240
+80 64 152
+48 48 48
diff --git a/graphics/items/icon_palettes/kings_rock.pal b/graphics/items/icon_palettes/kings_rock.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/kommonium_z.pal b/graphics/items/icon_palettes/kommonium_z.pal
new file mode 100644
index 0000000000..6b8212474c
--- /dev/null
+++ b/graphics/items/icon_palettes/kommonium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+32 32 32
+246 238 222
+205 197 139
+180 164 82
+156 131 24
+230 222 180
+131 123 74
+172 172 156
+115 106 32
+156 148 106
+148 123 8
+189 172 106
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/lagging_tail.pal b/graphics/items/icon_palettes/lagging_tail.pal
new file mode 100644
index 0000000000..8e2a0b1d50
--- /dev/null
+++ b/graphics/items/icon_palettes/lagging_tail.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+229 229 229
+203 203 203
+142 142 142
+101 101 101
+61 61 61
+0 0 0
+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/items/icon_palettes/lansat_berry.pal b/graphics/items/icon_palettes/lansat_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/latiasite.pal b/graphics/items/icon_palettes/latiasite.pal
new file mode 100644
index 0000000000..f93e6a5053
--- /dev/null
+++ b/graphics/items/icon_palettes/latiasite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+144 128 216
+192 80 152
+248 48 56
+184 184 248
+216 120 152
+184 192 248
+248 248 248
+248 160 208
+136 96 208
+160 160 240
+240 232 240
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/latiosite.pal b/graphics/items/icon_palettes/latiosite.pal
new file mode 100644
index 0000000000..16c3521ad5
--- /dev/null
+++ b/graphics/items/icon_palettes/latiosite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+144 128 216
+88 112 224
+40 128 240
+184 184 248
+112 160 248
+184 192 248
+248 248 248
+128 184 232
+136 96 208
+160 160 240
+240 232 240
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/lava_cookie_and_letter.pal b/graphics/items/icon_palettes/lava_cookie_and_letter.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/lax_incense.pal b/graphics/items/icon_palettes/lax_incense.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/leaf_stone.pal b/graphics/items/icon_palettes/leaf_stone.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/stick.pal b/graphics/items/icon_palettes/leek.pal
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icon_palettes/stick.pal
rename to graphics/items/icon_palettes/leek.pal
diff --git a/graphics/items/icon_palettes/leftovers.pal b/graphics/items/icon_palettes/leftovers.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/lemonade.pal b/graphics/items/icon_palettes/lemonade.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/leppa_berry.pal b/graphics/items/icon_palettes/leppa_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/level_ball.pal b/graphics/items/icon_palettes/level_ball.pal
new file mode 100644
index 0000000000..0b8a160820
--- /dev/null
+++ b/graphics/items/icon_palettes/level_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+222 205 246
+164 164 197
+123 123 131
+74 82 82
+255 222 189
+238 189 148
+156 98 57
+222 148 90
+180 148 123
+123 106 98
+222 74 57
+255 139 131
+0 0 0
+49 49 49
diff --git a/graphics/items/icon_palettes/liechi_berry.pal b/graphics/items/icon_palettes/liechi_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/life_orb.pal b/graphics/items/icon_palettes/life_orb.pal
new file mode 100644
index 0000000000..e670c6c2d4
--- /dev/null
+++ b/graphics/items/icon_palettes/life_orb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+212 168 238
+220 54 220
+238 177 238
+247 247 247
+185 39 194
+247 101 101
+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/items/icon_palettes/light_ball.pal b/graphics/items/icon_palettes/light_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/light_blue_mint.pal b/graphics/items/icon_palettes/light_blue_mint.pal
new file mode 100644
index 0000000000..61fd696664
--- /dev/null
+++ b/graphics/items/icon_palettes/light_blue_mint.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+180 224 240
+136 208 232
+40 184 224
+0 168 224
+40 120 152
+0 64 104
+40 40 40
+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/items/icon_palettes/light_clay.pal b/graphics/items/icon_palettes/light_clay.pal
new file mode 100644
index 0000000000..02a4a90fbd
--- /dev/null
+++ b/graphics/items/icon_palettes/light_clay.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+126 177 69
+177 220 109
+93 117 54
+212 238 185
+247 247 247
+0 0 0
+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/items/icon_palettes/lopunnite.pal b/graphics/items/icon_palettes/lopunnite.pal
new file mode 100644
index 0000000000..1815667bb4
--- /dev/null
+++ b/graphics/items/icon_palettes/lopunnite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+248 240 184
+72 56 56
+160 96 80
+248 248 248
+104 64 56
+200 168 160
+160 152 120
+160 152 152
+128 72 56
+112 80 64
+176 128 104
+200 168 136
+128 104 88
+0 0 0
diff --git a/graphics/items/icon_palettes/love_ball.pal b/graphics/items/icon_palettes/love_ball.pal
new file mode 100644
index 0000000000..7c8a8f3c92
--- /dev/null
+++ b/graphics/items/icon_palettes/love_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+246 164 205
+222 131 180
+255 197 230
+189 90 156
+139 82 123
+222 205 246
+164 164 197
+123 123 131
+74 82 82
+0 0 0
+49 49 49
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/love_sweet.pal b/graphics/items/icon_palettes/love_sweet.pal
new file mode 100644
index 0000000000..a00aa2de97
--- /dev/null
+++ b/graphics/items/icon_palettes/love_sweet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 242 0
+248 216 224
+248 168 168
+248 136 136
+232 112 112
+216 88 88
+200 64 64
+48 48 48
+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/items/icon_palettes/lucarionite.pal b/graphics/items/icon_palettes/lucarionite.pal
new file mode 100644
index 0000000000..22e0961a7b
--- /dev/null
+++ b/graphics/items/icon_palettes/lucarionite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+112 152 208
+120 88 120
+136 32 32
+248 176 96
+160 192 200
+176 120 128
+192 120 64
+248 248 248
+72 136 176
+184 192 176
+208 208 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/luck_incense.pal b/graphics/items/icon_palettes/luck_incense.pal
new file mode 100755
index 0000000000..84abcd9497
--- /dev/null
+++ b/graphics/items/icon_palettes/luck_incense.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+112 80 40
+160 232 248
+88 176 224
+240 200 64
+216 224 120
+240 240 192
+56 136 184
+216 160 64
+152 112 64
+248 248 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/lucky_egg.pal b/graphics/items/icon_palettes/lucky_egg.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/lucky_punch.pal b/graphics/items/icon_palettes/lucky_punch.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/lum_berry.pal b/graphics/items/icon_palettes/lum_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/luminous_moss.pal b/graphics/items/icon_palettes/luminous_moss.pal
new file mode 100755
index 0000000000..51bad6ab71
--- /dev/null
+++ b/graphics/items/icon_palettes/luminous_moss.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 128 64
+60 120 56
+216 252 160
+32 164 8
+112 228 56
+152 244 100
+248 252 248
+72 72 88
+40 196 8
+72 228 16
+52 48 48
+200 228 168
+144 140 152
+200 196 208
+112 112 152
+0 0 0
diff --git a/graphics/items/icon_palettes/lumiose_galette.pal b/graphics/items/icon_palettes/lumiose_galette.pal
new file mode 100644
index 0000000000..512c889b0d
--- /dev/null
+++ b/graphics/items/icon_palettes/lumiose_galette.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+48 48 48
+208 144 64
+176 120 56
+128 96 40
+164 80 32
+144 64 24
+120 56 24
+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/items/icon_palettes/lunalium_z.pal b/graphics/items/icon_palettes/lunalium_z.pal
new file mode 100644
index 0000000000..4e27ed3f26
--- /dev/null
+++ b/graphics/items/icon_palettes/lunalium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+32 32 32
+222 213 213
+156 139 180
+98 65 139
+131 98 156
+189 172 197
+98 82 123
+156 156 156
+115 106 131
+82 57 106
+139 115 164
+82 49 123
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/lure.pal b/graphics/items/icon_palettes/lure.pal
new file mode 100644
index 0000000000..2ab68a6b0c
--- /dev/null
+++ b/graphics/items/icon_palettes/lure.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 128 128
+248 248 248
+240 240 248
+232 232 232
+192 200 216
+136 164 172
+88 120 136
+56 96 104
+216 248 200
+144 232 144
+88 216 88
+56 176 80
+48 128 64
+48 48 48
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/lure_ball.pal b/graphics/items/icon_palettes/lure_ball.pal
new file mode 100644
index 0000000000..f202c08888
--- /dev/null
+++ b/graphics/items/icon_palettes/lure_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+222 90 106
+255 164 180
+156 131 180
+222 205 246
+164 164 197
+123 123 131
+74 115 139
+41 148 205
+74 180 222
+74 82 82
+255 197 82
+238 139 90
+0 0 0
+49 49 49
diff --git a/graphics/items/icon_palettes/lustrous_orb.pal b/graphics/items/icon_palettes/lustrous_orb.pal
new file mode 100644
index 0000000000..28df1d804f
--- /dev/null
+++ b/graphics/items/icon_palettes/lustrous_orb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+69 69 69
+39 39 39
+117 212 220
+203 238 238
+247 247 247
+151 212 238
+168 203 229
+134 194 229
+168 194 229
+151 185 229
+220 185 238
+247 238 238
+247 212 229
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/luxury_ball.pal b/graphics/items/icon_palettes/luxury_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/lycanium_z.pal b/graphics/items/icon_palettes/lycanium_z.pal
new file mode 100644
index 0000000000..79d540eb80
--- /dev/null
+++ b/graphics/items/icon_palettes/lycanium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+32 32 32
+238 222 205
+189 156 139
+156 115 98
+131 82 65
+213 189 172
+172 156 156
+98 74 57
+115 90 82
+139 115 106
+115 65 49
+164 131 115
+123 98 90
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/mach_bike.pal b/graphics/items/icon_palettes/mach_bike.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/macho_brace.pal b/graphics/items/icon_palettes/macho_brace.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/magma_emblem.pal b/graphics/items/icon_palettes/magma_emblem.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/magmarizer.pal b/graphics/items/icon_palettes/magmarizer.pal
new file mode 100755
index 0000000000..4e0a0b196b
--- /dev/null
+++ b/graphics/items/icon_palettes/magmarizer.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+232 104 104
+136 136 136
+104 48 48
+240 160 160
+96 96 96
+176 48 48
+120 96 96
+240 152 48
+248 248 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/magnet.pal b/graphics/items/icon_palettes/magnet.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/mago_berry.pal b/graphics/items/icon_palettes/mago_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/magost_berry.pal b/graphics/items/icon_palettes/magost_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/manectite.pal b/graphics/items/icon_palettes/manectite.pal
new file mode 100644
index 0000000000..860c8d0a39
--- /dev/null
+++ b/graphics/items/icon_palettes/manectite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+96 168 208
+136 104 120
+224 56 56
+248 248 128
+176 200 224
+248 152 128
+224 152 72
+248 248 248
+72 152 192
+192 200 136
+240 240 240
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/maranga_berry.pal b/graphics/items/icon_palettes/maranga_berry.pal
new file mode 100755
index 0000000000..30c39e54ca
--- /dev/null
+++ b/graphics/items/icon_palettes/maranga_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+247 247 140
+148 140 49
+189 181 49
+189 181 123
+123 107 49
+99 82 41
+148 132 99
+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/items/icon_palettes/marshadium_z.pal b/graphics/items/icon_palettes/marshadium_z.pal
new file mode 100644
index 0000000000..3bcd7bcee1
--- /dev/null
+++ b/graphics/items/icon_palettes/marshadium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+57 172 139
+49 131 123
+82 230 180
+222 255 238
+255 255 255
+172 180 172
+57 156 123
+32 90 82
+41 123 98
+57 156 131
+41 98 115
+41 115 98
+156 180 164
+0 0 0
diff --git a/graphics/items/icon_palettes/master_ball.pal b/graphics/items/icon_palettes/master_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/mawilite.pal b/graphics/items/icon_palettes/mawilite.pal
new file mode 100644
index 0000000000..688d41649f
--- /dev/null
+++ b/graphics/items/icon_palettes/mawilite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+112 96 112
+200 184 112
+200 120 168
+192 192 192
+248 248 96
+224 184 136
+248 248 248
+224 216 120
+64 64 80
+152 104 136
+176 176 208
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/max_elixir.pal b/graphics/items/icon_palettes/max_elixir.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/max_ether.pal b/graphics/items/icon_palettes/max_ether.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/max_honey.pal b/graphics/items/icon_palettes/max_honey.pal
new file mode 100644
index 0000000000..e0847c632c
--- /dev/null
+++ b/graphics/items/icon_palettes/max_honey.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 200 216
+248 40 96
+184 56 80
+248 216 200
+248 96 96
+248 96 128
+180 48 80
+48 48 48
+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/items/icon_palettes/max_lure.pal b/graphics/items/icon_palettes/max_lure.pal
new file mode 100644
index 0000000000..fd954d5721
--- /dev/null
+++ b/graphics/items/icon_palettes/max_lure.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 128 128
+248 248 248
+255 255 189
+255 230 65
+230 189 49
+197 139 41
+164 90 32
+139 57 24
+255 205 222
+238 139 172
+222 82 123
+205 57 57
+139 41 49
+48 48 48
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/max_mushrooms.pal b/graphics/items/icon_palettes/max_mushrooms.pal
new file mode 100644
index 0000000000..143b1f12d2
--- /dev/null
+++ b/graphics/items/icon_palettes/max_mushrooms.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 192 208
+248 184 200
+248 160 176
+232 112 152
+192 64 128
+48 48 48
+248 80 104
+248 48 56
+176 48 64
+176 24 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/max_potion.pal b/graphics/items/icon_palettes/max_potion.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/max_repel.pal b/graphics/items/icon_palettes/max_repel.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/meadow_plate.pal b/graphics/items/icon_palettes/meadow_plate.pal
new file mode 100644
index 0000000000..2d97a86191
--- /dev/null
+++ b/graphics/items/icon_palettes/meadow_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+56 192 63
+138 237 130
+173 255 147
+104 228 88
+63 138 63
+63 112 56
+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/items/icon_palettes/mech_mail.pal b/graphics/items/icon_palettes/mech_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/medichamite.pal b/graphics/items/icon_palettes/medichamite.pal
new file mode 100644
index 0000000000..f8b973bc3e
--- /dev/null
+++ b/graphics/items/icon_palettes/medichamite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+192 88 136
+224 96 80
+248 136 56
+120 176 208
+248 168 168
+184 160 136
+248 248 248
+192 32 104
+160 136 176
+176 200 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/mega_bracelet.pal b/graphics/items/icon_palettes/mega_bracelet.pal
new file mode 100644
index 0000000000..8f34e18a12
--- /dev/null
+++ b/graphics/items/icon_palettes/mega_bracelet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+144 160 176
+88 112 128
+200 216 216
+64 80 96
+240 240 240
+176 72 152
+208 112 216
+32 112 24
+88 192 224
+96 200 80
+72 88 192
+184 200 80
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/mega_ring.pal b/graphics/items/icon_palettes/mega_ring.pal
new file mode 100644
index 0000000000..a45829d72d
--- /dev/null
+++ b/graphics/items/icon_palettes/mega_ring.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+157 187 97
+49 49 50
+131 137 137
+89 89 89
+65 65 66
+54 53 52
+113 113 121
+51 51 51
+89 89 105
+67 67 69
+57 55 53
+91 91 91
+67 67 67
+115 115 122
+91 91 107
+131 139 139
diff --git a/graphics/items/icon_palettes/mental_herb.pal b/graphics/items/icon_palettes/mental_herb.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/metagrossite.pal b/graphics/items/icon_palettes/metagrossite.pal
new file mode 100644
index 0000000000..d7115db596
--- /dev/null
+++ b/graphics/items/icon_palettes/metagrossite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+160 168 144
+152 192 216
+200 200 200
+232 200 168
+232 232 232
+160 192 208
+128 184 208
+248 248 248
+216 152 80
+216 184 136
+160 160 144
+208 216 232
+176 160 128
+176 176 184
diff --git a/graphics/items/icon_palettes/metal_coat.pal b/graphics/items/icon_palettes/metal_coat.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/metal_powder.pal b/graphics/items/icon_palettes/metal_powder.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/meteorite.pal b/graphics/items/icon_palettes/meteorite.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/metronome.pal b/graphics/items/icon_palettes/metronome.pal
new file mode 100644
index 0000000000..0294d8b6cb
--- /dev/null
+++ b/graphics/items/icon_palettes/metronome.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+39 69 85
+159 203 229
+109 177 220
+77 142 168
+54 93 61
+77 126 93
+177 229 229
+247 247 247
+126 185 220
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/mewnium_z.pal b/graphics/items/icon_palettes/mewnium_z.pal
new file mode 100644
index 0000000000..a8129114e2
--- /dev/null
+++ b/graphics/items/icon_palettes/mewnium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+255 180 197
+180 123 164
+255 205 213
+255 255 246
+255 230 230
+238 164 189
+131 82 139
+156 90 131
+213 139 148
+197 189 180
+205 156 164
+197 172 172
+213 131 148
+0 0 0
diff --git a/graphics/items/icon_palettes/mewtwonite_x.pal b/graphics/items/icon_palettes/mewtwonite_x.pal
new file mode 100644
index 0000000000..f1db0ba0c4
--- /dev/null
+++ b/graphics/items/icon_palettes/mewtwonite_x.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+152 80 128
+88 80 120
+48 112 136
+192 192 192
+216 176 216
+160 184 192
+120 152 168
+248 248 248
+128 56 104
+216 216 224
+192 160 184
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/mewtwonite_y.pal b/graphics/items/icon_palettes/mewtwonite_y.pal
new file mode 100644
index 0000000000..c693248837
--- /dev/null
+++ b/graphics/items/icon_palettes/mewtwonite_y.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+152 80 128
+160 80 136
+184 112 168
+192 192 192
+216 176 216
+192 152 184
+248 248 248
+128 56 104
+216 216 224
+192 160 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/micle_berry.pal b/graphics/items/icon_palettes/micle_berry.pal
new file mode 100755
index 0000000000..9bc9af2dae
--- /dev/null
+++ b/graphics/items/icon_palettes/micle_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+72 120 64
+56 168 56
+64 200 64
+136 232 136
+0 0 0
+0 0 0
+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/items/icon_palettes/mimikium_z.pal b/graphics/items/icon_palettes/mimikium_z.pal
new file mode 100644
index 0000000000..c608b57b8a
--- /dev/null
+++ b/graphics/items/icon_palettes/mimikium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+32 32 32
+255 255 238
+246 238 189
+205 189 123
+164 156 74
+255 255 222
+123 115 65
+180 180 172
+148 139 98
+172 172 139
+213 205 148
+156 139 57
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/mind_plate.pal b/graphics/items/icon_palettes/mind_plate.pal
new file mode 100644
index 0000000000..583a524b66
--- /dev/null
+++ b/graphics/items/icon_palettes/mind_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+209 122 138
+246 209 209
+246 237 228
+255 173 165
+201 104 96
+201 88 88
+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/items/icon_palettes/miracle_seed.pal b/graphics/items/icon_palettes/miracle_seed.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/misty_seed.pal b/graphics/items/icon_palettes/misty_seed.pal
new file mode 100644
index 0000000000..8957472cf4
--- /dev/null
+++ b/graphics/items/icon_palettes/misty_seed.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+98 123 189
+205 230 255
+139 189 255
+238 246 197
+156 106 16
+65 74 115
+205 139 24
+238 189 41
+106 90 74
+82 82 156
+246 222 123
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/moomoo_milk.pal b/graphics/items/icon_palettes/moomoo_milk.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/moon_ball.pal b/graphics/items/icon_palettes/moon_ball.pal
new file mode 100644
index 0000000000..0f1f671786
--- /dev/null
+++ b/graphics/items/icon_palettes/moon_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+222 205 246
+164 164 197
+123 123 131
+98 115 148
+123 139 156
+74 197 238
+65 148 172
+156 255 255
+74 82 82
+189 172 106
+246 205 65
+255 230 164
+0 0 0
+49 49 49
diff --git a/graphics/items/icon_palettes/moon_stone.pal b/graphics/items/icon_palettes/moon_stone.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/muscle_band.pal b/graphics/items/icon_palettes/muscle_band.pal
new file mode 100644
index 0000000000..e93f6f6ddf
--- /dev/null
+++ b/graphics/items/icon_palettes/muscle_band.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+168 142 32
+247 247 151
+229 203 39
+126 109 61
+56 56 56
+247 109 109
+203 177 18
+203 93 18
+203 25 25
+238 54 54
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/muscle_feather.pal b/graphics/items/icon_palettes/muscle_feather.pal
new file mode 100644
index 0000000000..e5fd0123c2
--- /dev/null
+++ b/graphics/items/icon_palettes/muscle_feather.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+90 90 90
+206 239 255
+239 255 255
+49 49 49
+156 214 231
+173 140 148
+255 123 132
+247 57 66
+140 165 173
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/mushroom.pal b/graphics/items/icon_palettes/mushroom.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/mystic_ticket.pal b/graphics/items/icon_palettes/mystic_ticket.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/mystic_water.pal b/graphics/items/icon_palettes/mystic_water.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/n_lunarizer.pal b/graphics/items/icon_palettes/n_lunarizer.pal
new file mode 100644
index 0000000000..a8c12d9751
--- /dev/null
+++ b/graphics/items/icon_palettes/n_lunarizer.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 232 232
+176 176 184
+128 128 128
+88 88 88
+48 48 48
+32 176 240
+16 120 200
+240 104 64
+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/items/icon_palettes/n_solarizer.pal b/graphics/items/icon_palettes/n_solarizer.pal
new file mode 100644
index 0000000000..b7e5ef7b48
--- /dev/null
+++ b/graphics/items/icon_palettes/n_solarizer.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 232 232
+176 176 184
+128 128 128
+88 88 88
+48 48 48
+240 152 64
+32 176 240
+184 96 40
+240 104 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/nanab_berry.pal b/graphics/items/icon_palettes/nanab_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/nest_ball.pal b/graphics/items/icon_palettes/nest_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/net_ball.pal b/graphics/items/icon_palettes/net_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/never_melt_ice.pal b/graphics/items/icon_palettes/never_melt_ice.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/nomel_berry.pal b/graphics/items/icon_palettes/nomel_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/normal_gem.pal b/graphics/items/icon_palettes/normal_gem.pal
new file mode 100644
index 0000000000..8cd17447e6
--- /dev/null
+++ b/graphics/items/icon_palettes/normal_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+224 184 184
+240 208 208
+192 176 176
+248 248 248
+168 160 160
+144 144 144
+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/items/icon_palettes/normal_tm_hm.pal b/graphics/items/icon_palettes/normal_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/normalium_z.pal b/graphics/items/icon_palettes/normalium_z.pal
new file mode 100644
index 0000000000..882991fe73
--- /dev/null
+++ b/graphics/items/icon_palettes/normalium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+131 157 157
+189 223 231
+157 197 197
+83 115 123
+161 179 181
+115 139 149
+157 165 165
+255 255 255
+75 99 107
+49 49 49
+223 231 239
+173 205 213
+123 165 173
+107 123 131
+107 149 149
diff --git a/graphics/items/icon_palettes/nugget.pal b/graphics/items/icon_palettes/nugget.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/oaks_parcel.pal b/graphics/items/icon_palettes/oaks_parcel.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/occa_berry.pal b/graphics/items/icon_palettes/occa_berry.pal
new file mode 100755
index 0000000000..c8f33e015a
--- /dev/null
+++ b/graphics/items/icon_palettes/occa_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+120 208 152
+48 104 72
+232 112 48
+248 144 96
+216 120 64
+184 96 32
+56 160 96
+248 184 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/odd_incense.pal b/graphics/items/icon_palettes/odd_incense.pal
new file mode 100755
index 0000000000..f51f61c909
--- /dev/null
+++ b/graphics/items/icon_palettes/odd_incense.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 128 64
+48 48 48
+136 48 152
+240 192 240
+248 128 248
+216 168 216
+112 96 48
+224 56 240
+160 96 200
+120 72 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/odd_keystone.pal b/graphics/items/icon_palettes/odd_keystone.pal
new file mode 100755
index 0000000000..89db79825e
--- /dev/null
+++ b/graphics/items/icon_palettes/odd_keystone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+216 160 112
+192 144 104
+248 192 152
+128 104 80
+160 128 96
+248 208 184
+104 80 64
+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/items/icon_palettes/old_amber.pal b/graphics/items/icon_palettes/old_amber.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/old_gateau.pal b/graphics/items/icon_palettes/old_gateau.pal
new file mode 100755
index 0000000000..6d819579bc
--- /dev/null
+++ b/graphics/items/icon_palettes/old_gateau.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+115 115 115
+173 107 156
+189 132 173
+165 82 140
+107 58 90
+132 66 115
+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/items/icon_palettes/old_key.pal b/graphics/items/icon_palettes/old_key.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/old_rod.pal b/graphics/items/icon_palettes/old_rod.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/old_sea_map.pal b/graphics/items/icon_palettes/old_sea_map.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/oran_berry.pal b/graphics/items/icon_palettes/oran_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/orange_mail.pal b/graphics/items/icon_palettes/orange_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/oval_charm.pal b/graphics/items/icon_palettes/oval_charm.pal
new file mode 100644
index 0000000000..5f5afd15c5
--- /dev/null
+++ b/graphics/items/icon_palettes/oval_charm.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+239 228 176
+48 48 48
+248 192 224
+128 80 216
+168 104 248
+128 208 192
+248 248 216
+216 136 160
+184 88 96
+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/items/icon_palettes/oval_stone.pal b/graphics/items/icon_palettes/oval_stone.pal
new file mode 100755
index 0000000000..f5681b9297
--- /dev/null
+++ b/graphics/items/icon_palettes/oval_stone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+96 96 96
+200 208 216
+216 232 240
+144 160 168
+200 216 232
+248 248 248
+160 168 176
+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/items/icon_palettes/pamtre_berry.pal b/graphics/items/icon_palettes/pamtre_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/paralyze_heal.pal b/graphics/items/icon_palettes/paralyze_heal.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/park_ball.pal b/graphics/items/icon_palettes/park_ball.pal
new file mode 100644
index 0000000000..5817b9997f
--- /dev/null
+++ b/graphics/items/icon_palettes/park_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+123 115 131
+164 164 197
+123 123 131
+32 123 222
+115 131 123
+213 213 205
+246 213 82
+255 230 139
+222 156 41
+255 139 49
+0 0 0
+49 49 49
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/passho_berry.pal b/graphics/items/icon_palettes/passho_berry.pal
new file mode 100755
index 0000000000..64ba104b53
--- /dev/null
+++ b/graphics/items/icon_palettes/passho_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+48 96 160
+200 160 56
+232 224 104
+40 104 208
+64 128 232
+120 168 248
+128 112 64
+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/items/icon_palettes/payapa_berry.pal b/graphics/items/icon_palettes/payapa_berry.pal
new file mode 100755
index 0000000000..190039e34a
--- /dev/null
+++ b/graphics/items/icon_palettes/payapa_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+176 232 104
+112 168 32
+72 96 40
+96 96 96
+120 56 104
+136 40 112
+192 40 152
+240 64 216
+248 128 224
+248 168 232
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/pearl.pal b/graphics/items/icon_palettes/pearl.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/pearl_string.pal b/graphics/items/icon_palettes/pearl_string.pal
new file mode 100644
index 0000000000..b754262ce7
--- /dev/null
+++ b/graphics/items/icon_palettes/pearl_string.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 248 0
+248 248 248
+232 232 232
+192 192 192
+168 168 168
+248 248 200
+176 232 224
+152 208 200
+120 144 144
+216 172 172
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/pecha_berry.pal b/graphics/items/icon_palettes/pecha_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/persim_berry.pal b/graphics/items/icon_palettes/persim_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/petaya_berry.pal b/graphics/items/icon_palettes/petaya_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/pewter_crunchies.pal b/graphics/items/icon_palettes/pewter_crunchies.pal
new file mode 100644
index 0000000000..282a5cff3f
--- /dev/null
+++ b/graphics/items/icon_palettes/pewter_crunchies.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+192 248 248
+248 248 232
+248 240 192
+248 216 96
+216 164 48
+200 232 112
+144 216 40
+80 160 64
+72 104 72
+224 200 176
+192 176 144
+120 120 120
+176 144 72
+144 104 24
+72 48 0
+48 48 48
diff --git a/graphics/items/icon_palettes/pidgeotite.pal b/graphics/items/icon_palettes/pidgeotite.pal
new file mode 100644
index 0000000000..5f81a5b2c4
--- /dev/null
+++ b/graphics/items/icon_palettes/pidgeotite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+240 144 72
+192 120 152
+216 64 112
+240 192 128
+232 152 144
+224 104 88
+248 248 248
+240 232 120
+232 152 112
+240 192 96
+248 216 192
+240 168 80
+168 128 152
+240 184 88
diff --git a/graphics/items/icon_palettes/pikanium_z.pal b/graphics/items/icon_palettes/pikanium_z.pal
new file mode 100644
index 0000000000..4c3c2a183d
--- /dev/null
+++ b/graphics/items/icon_palettes/pikanium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+213 131 8
+246 172 0
+255 255 246
+255 246 139
+255 213 8
+180 148 8
+172 123 0
+197 106 16
+238 164 0
+148 90 0
+180 180 172
+180 172 98
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/pikashunium_z.pal b/graphics/items/icon_palettes/pikashunium_z.pal
new file mode 100644
index 0000000000..ff7d7bea5c
--- /dev/null
+++ b/graphics/items/icon_palettes/pikashunium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+255 230 49
+148 106 0
+255 205 8
+189 148 24
+230 180 8
+255 246 139
+255 246 189
+180 148 0
+180 156 24
+213 172 24
+180 172 106
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/pinap_berry.pal b/graphics/items/icon_palettes/pinap_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/pink_apricorn.pal b/graphics/items/icon_palettes/pink_apricorn.pal
new file mode 100755
index 0000000000..485ed3f0b4
--- /dev/null
+++ b/graphics/items/icon_palettes/pink_apricorn.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+231 181 140
+115 82 66
+165 99 41
+255 148 181
+222 99 140
+206 148 99
+255 198 222
+255 255 255
+239 123 165
+148 74 99
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/pink_mint.pal b/graphics/items/icon_palettes/pink_mint.pal
new file mode 100644
index 0000000000..64cc312e07
--- /dev/null
+++ b/graphics/items/icon_palettes/pink_mint.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+232 200 224
+248 168 208
+248 128 192
+232 80 168
+144 56 96
+120 40 80
+40 40 40
+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/items/icon_palettes/pink_nectar.pal b/graphics/items/icon_palettes/pink_nectar.pal
new file mode 100755
index 0000000000..e6167ec00f
--- /dev/null
+++ b/graphics/items/icon_palettes/pink_nectar.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+255 139 139
+255 205 205
+255 90 90
+255 246 246
+90 65 65
+123 90 82
+148 98 82
+189 148 156
+115 74 65
+123 74 74
+255 197 189
+255 123 115
+189 90 90
+0 0 0
diff --git a/graphics/items/icon_palettes/pink_scarf.pal b/graphics/items/icon_palettes/pink_scarf.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/pinsirite.pal b/graphics/items/icon_palettes/pinsirite.pal
new file mode 100644
index 0000000000..0a0fb5fbef
--- /dev/null
+++ b/graphics/items/icon_palettes/pinsirite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+152 120 112
+192 104 56
+248 80 32
+248 208 56
+200 176 152
+248 144 40
+248 248 248
+248 192 152
+128 96 88
+200 168 80
+248 248 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/pixie_plate.pal b/graphics/items/icon_palettes/pixie_plate.pal
new file mode 100644
index 0000000000..b7559b5751
--- /dev/null
+++ b/graphics/items/icon_palettes/pixie_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+240 176 200
+248 208 248
+248 224 248
+248 192 224
+208 144 200
+192 112 160
+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/items/icon_palettes/plume_fossil.pal b/graphics/items/icon_palettes/plume_fossil.pal
new file mode 100755
index 0000000000..0d9f2b825a
--- /dev/null
+++ b/graphics/items/icon_palettes/plume_fossil.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+123 123 165
+99 99 156
+115 115 165
+66 66 115
+82 82 140
+165 165 198
+140 140 181
+198 198 214
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/poison_barb.pal b/graphics/items/icon_palettes/poison_barb.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/poison_gem.pal b/graphics/items/icon_palettes/poison_gem.pal
new file mode 100644
index 0000000000..da63d2f248
--- /dev/null
+++ b/graphics/items/icon_palettes/poison_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+152 104 168
+192 176 200
+104 96 136
+232 248 224
+56 104 104
+40 72 72
+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/items/icon_palettes/poison_memory.pal b/graphics/items/icon_palettes/poison_memory.pal
new file mode 100755
index 0000000000..3d3b9e43d8
--- /dev/null
+++ b/graphics/items/icon_palettes/poison_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 128 64
+49 49 49
+255 205 172
+255 238 230
+255 255 255
+255 222 197
+230 148 156
+255 189 148
+255 180 123
+205 123 189
+180 98 222
+123 123 148
+98 98 123
+172 123 189
+131 106 148
+189 156 205
diff --git a/graphics/items/icon_palettes/poison_tm_hm.pal b/graphics/items/icon_palettes/poison_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/poisonium_z.pal b/graphics/items/icon_palettes/poisonium_z.pal
new file mode 100644
index 0000000000..5e044122fe
--- /dev/null
+++ b/graphics/items/icon_palettes/poisonium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+164 98 213
+131 74 180
+205 131 246
+246 222 246
+255 255 238
+115 65 148
+106 57 164
+148 82 197
+90 49 123
+148 90 172
+180 172 164
+172 156 172
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/poke_ball.pal b/graphics/items/icon_palettes/poke_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/poke_doll.pal b/graphics/items/icon_palettes/poke_doll.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/poke_flute.pal b/graphics/items/icon_palettes/poke_flute.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/poke_radar.pal b/graphics/items/icon_palettes/poke_radar.pal
new file mode 100644
index 0000000000..0b64b89ffd
--- /dev/null
+++ b/graphics/items/icon_palettes/poke_radar.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 126 0
+48 48 48
+112 232 120
+136 136 136
+80 80 80
+248 248 248
+168 168 168
+224 224 224
+64 64 64
+240 96 96
+240 128 128
+144 64 64
+40 136 232
+88 168 240
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/poke_toy.pal b/graphics/items/icon_palettes/poke_toy.pal
new file mode 100644
index 0000000000..4ee38edd34
--- /dev/null
+++ b/graphics/items/icon_palettes/poke_toy.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 248 0
+248 248 248
+200 200 200
+168 168 168
+248 240 144
+248 208 104
+48 48 48
+0 0 0
+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/items/icon_palettes/pokeblock_case.pal b/graphics/items/icon_palettes/pokeblock_case.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/pokemon_box_link.pal b/graphics/items/icon_palettes/pokemon_box_link.pal
new file mode 100644
index 0000000000..39367b6da0
--- /dev/null
+++ b/graphics/items/icon_palettes/pokemon_box_link.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 248 248
+232 232 232
+216 216 216
+184 184 184
+160 160 160
+144 144 144
+96 232 248
+128 216 224
+88 184 224
+240 192 208
+240 96 104
+48 48 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/pomeg_berry.pal b/graphics/items/icon_palettes/pomeg_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/pot.pal b/graphics/items/icon_palettes/pot.pal
new file mode 100644
index 0000000000..1ea827fa3f
--- /dev/null
+++ b/graphics/items/icon_palettes/pot.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 0
+216 216 248
+176 184 184
+136 136 136
+80 80 80
+48 48 48
+80 208 200
+88 168 160
+248 216 120
+176 164 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/potion.pal b/graphics/items/icon_palettes/potion.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/powder_jar.pal b/graphics/items/icon_palettes/powder_jar.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/power_anklet.pal b/graphics/items/icon_palettes/power_anklet.pal
new file mode 100755
index 0000000000..6c7c5b6431
--- /dev/null
+++ b/graphics/items/icon_palettes/power_anklet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+96 96 96
+48 48 48
+32 168 216
+96 208 232
+136 232 240
+56 192 208
+48 120 168
+48 64 144
+32 144 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/power_band.pal b/graphics/items/icon_palettes/power_band.pal
new file mode 100755
index 0000000000..160108bc9f
--- /dev/null
+++ b/graphics/items/icon_palettes/power_band.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+96 96 96
+48 48 48
+208 184 32
+232 224 96
+240 240 176
+224 208 64
+152 144 40
+104 96 40
+192 160 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/power_belt.pal b/graphics/items/icon_palettes/power_belt.pal
new file mode 100755
index 0000000000..e4e8157965
--- /dev/null
+++ b/graphics/items/icon_palettes/power_belt.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+96 96 96
+48 48 48
+200 136 64
+232 176 96
+240 208 152
+232 160 104
+136 104 48
+112 64 24
+176 112 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/power_bracer.pal b/graphics/items/icon_palettes/power_bracer.pal
new file mode 100755
index 0000000000..c3cb52c47b
--- /dev/null
+++ b/graphics/items/icon_palettes/power_bracer.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+96 96 96
+48 48 48
+216 88 88
+240 112 112
+248 144 144
+168 72 72
+112 56 56
+184 80 80
+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/items/icon_palettes/power_herb.pal b/graphics/items/icon_palettes/power_herb.pal
new file mode 100644
index 0000000000..09501f4812
--- /dev/null
+++ b/graphics/items/icon_palettes/power_herb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+151 69 69
+39 39 39
+229 109 109
+229 46 46
+168 39 39
+212 61 61
+194 61 61
+177 77 77
+238 93 93
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/power_lens.pal b/graphics/items/icon_palettes/power_lens.pal
new file mode 100755
index 0000000000..fe384576d6
--- /dev/null
+++ b/graphics/items/icon_palettes/power_lens.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 128 64
+48 48 48
+240 80 240
+248 96 248
+240 176 248
+104 56 112
+144 64 152
+192 64 216
+160 64 184
+32 224 248
+56 144 248
+248 248 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/power_weight.pal b/graphics/items/icon_palettes/power_weight.pal
new file mode 100755
index 0000000000..8224c5b9aa
--- /dev/null
+++ b/graphics/items/icon_palettes/power_weight.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+96 96 96
+48 48 48
+64 200 80
+96 232 120
+152 240 168
+72 152 88
+72 184 88
+56 104 64
+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/items/icon_palettes/pp_max.pal b/graphics/items/icon_palettes/pp_max.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/pp_up.pal b/graphics/items/icon_palettes/pp_up.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/pretty_feather.pal b/graphics/items/icon_palettes/pretty_feather.pal
new file mode 100644
index 0000000000..e2e1b3ed78
--- /dev/null
+++ b/graphics/items/icon_palettes/pretty_feather.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+90 90 90
+206 239 255
+239 255 255
+49 49 49
+156 214 231
+140 165 173
+0 0 0
+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/items/icon_palettes/primarium_z.pal b/graphics/items/icon_palettes/primarium_z.pal
new file mode 100644
index 0000000000..59a62fea3b
--- /dev/null
+++ b/graphics/items/icon_palettes/primarium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+41 156 230
+8 115 213
+230 255 255
+156 255 246
+98 197 255
+0 82 148
+65 139 180
+164 180 180
+0 90 197
+24 139 222
+32 106 164
+106 180 172
+24 106 164
+0 0 0
diff --git a/graphics/items/icon_palettes/prism_scale.pal b/graphics/items/icon_palettes/prism_scale.pal
new file mode 100755
index 0000000000..15d3698bff
--- /dev/null
+++ b/graphics/items/icon_palettes/prism_scale.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+82 82 82
+189 239 255
+132 206 239
+173 173 222
+49 49 49
+206 140 206
+239 107 189
+255 156 214
+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/items/icon_palettes/prison_bottle.pal b/graphics/items/icon_palettes/prison_bottle.pal
new file mode 100644
index 0000000000..9845ade30e
--- /dev/null
+++ b/graphics/items/icon_palettes/prison_bottle.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+208 232 248
+144 168 176
+56 96 104
+248 200 64
+176 128 64
+248 176 200
+216 96 144
+192 48 96
+144 24 64
+88 120 248
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/protective_pads.pal b/graphics/items/icon_palettes/protective_pads.pal
new file mode 100644
index 0000000000..604b7b85a6
--- /dev/null
+++ b/graphics/items/icon_palettes/protective_pads.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+205 222 238
+172 189 213
+131 156 180
+98 106 164
+106 123 131
+148 156 164
+255 255 255
+213 213 205
+172 180 180
+74 82 90
+131 148 197
+74 90 148
+98 98 123
+156 172 205
diff --git a/graphics/items/icon_palettes/protector.pal b/graphics/items/icon_palettes/protector.pal
new file mode 100755
index 0000000000..224b5495b2
--- /dev/null
+++ b/graphics/items/icon_palettes/protector.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+224 112 56
+232 152 112
+216 88 32
+104 56 40
+168 96 56
+136 72 48
+80 48 40
+152 80 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/protein.pal b/graphics/items/icon_palettes/protein.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/psychic_gem.pal b/graphics/items/icon_palettes/psychic_gem.pal
new file mode 100644
index 0000000000..c9f2839e65
--- /dev/null
+++ b/graphics/items/icon_palettes/psychic_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+248 104 176
+248 160 192
+208 56 136
+248 216 208
+160 32 136
+112 0 104
+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/items/icon_palettes/psychic_memory.pal b/graphics/items/icon_palettes/psychic_memory.pal
new file mode 100755
index 0000000000..af0dadf34e
--- /dev/null
+++ b/graphics/items/icon_palettes/psychic_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+255 172 164
+255 222 213
+255 255 255
+255 197 197
+255 189 180
+255 246 246
+255 230 230
+255 213 205
+255 180 172
+123 123 148
+98 98 123
+180 139 131
+139 115 115
+197 172 164
diff --git a/graphics/items/icon_palettes/psychic_seed.pal b/graphics/items/icon_palettes/psychic_seed.pal
new file mode 100644
index 0000000000..0fd91e0da7
--- /dev/null
+++ b/graphics/items/icon_palettes/psychic_seed.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+172 98 189
+255 205 255
+197 139 197
+238 246 197
+156 106 16
+65 74 24
+205 139 24
+238 189 41
+106 90 74
+115 65 123
+246 222 123
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/psychic_tm_hm.pal b/graphics/items/icon_palettes/psychic_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/psychium_z.pal b/graphics/items/icon_palettes/psychium_z.pal
new file mode 100644
index 0000000000..9f72d8d98d
--- /dev/null
+++ b/graphics/items/icon_palettes/psychium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+255 98 164
+238 65 139
+255 148 189
+255 246 246
+255 197 255
+180 65 115
+164 41 98
+255 82 156
+180 41 131
+172 98 131
+180 172 172
+180 131 180
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/pure_incense.pal b/graphics/items/icon_palettes/pure_incense.pal
new file mode 100755
index 0000000000..83918a517f
--- /dev/null
+++ b/graphics/items/icon_palettes/pure_incense.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+104 104 104
+248 248 248
+208 112 112
+216 216 216
+232 232 232
+112 96 48
+200 200 200
+152 152 152
+248 240 80
+184 184 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/purple_nectar.pal b/graphics/items/icon_palettes/purple_nectar.pal
new file mode 100755
index 0000000000..7b6def78c8
--- /dev/null
+++ b/graphics/items/icon_palettes/purple_nectar.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+213 139 255
+238 205 255
+197 90 255
+255 246 255
+90 65 65
+123 90 82
+148 98 82
+189 148 156
+115 74 65
+123 74 74
+255 197 189
+255 123 115
+189 90 90
+0 0 0
diff --git a/graphics/items/icon_palettes/qualot_berry.pal b/graphics/items/icon_palettes/qualot_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/question_mark.pal b/graphics/items/icon_palettes/question_mark.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/quick_ball.pal b/graphics/items/icon_palettes/quick_ball.pal
new file mode 100644
index 0000000000..ca7754aa29
--- /dev/null
+++ b/graphics/items/icon_palettes/quick_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+106 106 115
+115 189 255
+41 139 213
+41 106 123
+189 255 255
+74 82 82
+189 222 180
+255 255 0
+255 255 213
+156 148 41
+205 189 41
+255 255 255
+0 0 0
+49 49 49
diff --git a/graphics/items/icon_palettes/quick_claw.pal b/graphics/items/icon_palettes/quick_claw.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/quick_powder.pal b/graphics/items/icon_palettes/quick_powder.pal
new file mode 100644
index 0000000000..39410ad529
--- /dev/null
+++ b/graphics/items/icon_palettes/quick_powder.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+156 156 156
+214 214 214
+255 255 255
+239 239 239
+90 90 90
+181 214 255
+123 189 239
+74 107 173
+115 156 206
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/rabuta_berry.pal b/graphics/items/icon_palettes/rabuta_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/rage_candy_bar.pal b/graphics/items/icon_palettes/rage_candy_bar.pal
new file mode 100644
index 0000000000..985c80da69
--- /dev/null
+++ b/graphics/items/icon_palettes/rage_candy_bar.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 248 248
+176 208 144
+144 196 88
+104 152 64
+64 104 48
+176 112 80
+152 56 48
+168 144 80
+152 128 64
+224 232 208
+136 136 136
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/rainbow_pass.pal b/graphics/items/icon_palettes/rainbow_pass.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/rare_bone.pal b/graphics/items/icon_palettes/rare_bone.pal
new file mode 100755
index 0000000000..2ba2fbbb18
--- /dev/null
+++ b/graphics/items/icon_palettes/rare_bone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+224 232 200
+184 192 160
+128 128 96
+208 208 168
+152 152 128
+0 0 0
+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/items/icon_palettes/rare_candy.pal b/graphics/items/icon_palettes/rare_candy.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/rawst_berry.pal b/graphics/items/icon_palettes/rawst_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/razor_claw.pal b/graphics/items/icon_palettes/razor_claw.pal
new file mode 100755
index 0000000000..b4f8187463
--- /dev/null
+++ b/graphics/items/icon_palettes/razor_claw.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+248 248 248
+128 136 144
+208 216 216
+152 160 168
+104 112 120
+176 192 200
+80 80 80
+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/items/icon_palettes/razor_fang.pal b/graphics/items/icon_palettes/razor_fang.pal
new file mode 100755
index 0000000000..ee390f2c6c
--- /dev/null
+++ b/graphics/items/icon_palettes/razor_fang.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+160 144 88
+208 192 128
+232 224 184
+104 112 120
+176 192 200
+152 160 168
+248 248 248
+128 136 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/razz_berry.pal b/graphics/items/icon_palettes/razz_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/reaper_cloth.pal b/graphics/items/icon_palettes/reaper_cloth.pal
new file mode 100755
index 0000000000..8ab71423fc
--- /dev/null
+++ b/graphics/items/icon_palettes/reaper_cloth.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+80 72 88
+48 48 48
+144 128 168
+128 104 136
+168 152 184
+104 88 120
+0 0 0
+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/items/icon_palettes/red_apricorn.pal b/graphics/items/icon_palettes/red_apricorn.pal
new file mode 100755
index 0000000000..8025f6c43e
--- /dev/null
+++ b/graphics/items/icon_palettes/red_apricorn.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+231 181 140
+115 82 66
+165 99 41
+255 66 49
+189 33 24
+206 148 99
+255 148 148
+255 255 255
+222 49 33
+115 41 33
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/red_card.pal b/graphics/items/icon_palettes/red_card.pal
new file mode 100755
index 0000000000..5309dc86c4
--- /dev/null
+++ b/graphics/items/icon_palettes/red_card.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+66 66 66
+255 82 66
+49 49 49
+239 24 0
+0 0 0
+0 0 0
+0 0 0
+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/items/icon_palettes/red_flute.pal b/graphics/items/icon_palettes/red_flute.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/red_mint.pal b/graphics/items/icon_palettes/red_mint.pal
new file mode 100644
index 0000000000..db15bad4f7
--- /dev/null
+++ b/graphics/items/icon_palettes/red_mint.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 160 152
+248 128 112
+248 72 64
+200 64 56
+144 56 56
+80 40 40
+40 40 40
+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/items/icon_palettes/red_nectar.pal b/graphics/items/icon_palettes/red_nectar.pal
new file mode 100755
index 0000000000..5f1a8336dd
--- /dev/null
+++ b/graphics/items/icon_palettes/red_nectar.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+255 90 90
+255 148 148
+255 49 49
+255 222 205
+90 65 65
+255 189 189
+123 90 82
+148 98 82
+189 148 156
+115 74 65
+123 74 74
+255 197 189
+255 123 115
+189 90 90
diff --git a/graphics/items/icon_palettes/red_orb.pal b/graphics/items/icon_palettes/red_orb.pal
old mode 100644
new mode 100755
index dfbaa5cf37..486e32e8cc
--- a/graphics/items/icon_palettes/red_orb.pal
+++ b/graphics/items/icon_palettes/red_orb.pal
@@ -1,19 +1,19 @@
JASC-PAL
0100
16
-180 180 180
-49 49 49
-230 115 106
-222 156 156
-197 82 74
-148 65 57
-255 205 205
-255 255 255
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
+255 126 0
+48 48 48
+248 248 248
+248 88 112
+248 128 128
+248 40 56
+248 216 216
+216 32 56
+176 32 56
+248 136 72
+248 224 96
+144 24 64
+248 200 96
0 0 0
0 0 0
0 0 0
diff --git a/graphics/items/icon_palettes/red_scarf.pal b/graphics/items/icon_palettes/red_scarf.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/red_shard.pal b/graphics/items/icon_palettes/red_shard.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/reins_of_unity.pal b/graphics/items/icon_palettes/reins_of_unity.pal
new file mode 100644
index 0000000000..423943facd
--- /dev/null
+++ b/graphics/items/icon_palettes/reins_of_unity.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+64 144 248
+56 112 248
+48 96 224
+48 72 224
+48 40 224
+48 48 48
+0 0 0
+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/items/icon_palettes/relic_copper.pal b/graphics/items/icon_palettes/relic_copper.pal
new file mode 100644
index 0000000000..8b7c45fd8e
--- /dev/null
+++ b/graphics/items/icon_palettes/relic_copper.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 200 128
+224 152 56
+208 144 48
+192 128 40
+160 120 40
+48 48 48
+0 0 0
+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/items/icon_palettes/relic_gold.pal b/graphics/items/icon_palettes/relic_gold.pal
new file mode 100644
index 0000000000..2666ec5b88
--- /dev/null
+++ b/graphics/items/icon_palettes/relic_gold.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 232 96
+248 208 72
+240 184 24
+216 152 24
+200 144 16
+48 48 48
+0 0 0
+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/items/icon_palettes/relic_silver.pal b/graphics/items/icon_palettes/relic_silver.pal
new file mode 100644
index 0000000000..80a16b120f
--- /dev/null
+++ b/graphics/items/icon_palettes/relic_silver.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 248 248
+232 240 248
+200 208 216
+168 176 176
+152 152 152
+48 48 48
+0 0 0
+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/items/icon_palettes/relics.pal b/graphics/items/icon_palettes/relics.pal
new file mode 100644
index 0000000000..b095aa950f
--- /dev/null
+++ b/graphics/items/icon_palettes/relics.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 248 0
+216 216 208
+200 200 192
+176 176 176
+144 152 152
+120 144 144
+88 120 120
+64 104 104
+56 96 96
+48 72 80
+72 72 72
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/repeat_ball.pal b/graphics/items/icon_palettes/repeat_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/repel.pal b/graphics/items/icon_palettes/repel.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/resist_feather.pal b/graphics/items/icon_palettes/resist_feather.pal
new file mode 100644
index 0000000000..c29df37936
--- /dev/null
+++ b/graphics/items/icon_palettes/resist_feather.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+90 90 90
+206 239 255
+239 255 255
+49 49 49
+156 214 231
+49 99 181
+123 165 247
+82 132 231
+140 165 173
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/retro_mail.pal b/graphics/items/icon_palettes/retro_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/return_to_field_arrow.pal b/graphics/items/icon_palettes/return_to_field_arrow.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/reveal_glass.pal b/graphics/items/icon_palettes/reveal_glass.pal
new file mode 100644
index 0000000000..b7cbcf3f40
--- /dev/null
+++ b/graphics/items/icon_palettes/reveal_glass.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 242 0
+208 216 224
+168 184 184
+224 224 216
+192 192 192
+160 160 160
+104 104 96
+88 144 96
+64 96 64
+184 128 112
+128 88 80
+96 144 176
+64 96 120
+72 72 72
+48 48 48
+0 0 0
diff --git a/graphics/items/icon_palettes/revival_herb.pal b/graphics/items/icon_palettes/revival_herb.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/revive.pal b/graphics/items/icon_palettes/revive.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/ribbon_sweet.pal b/graphics/items/icon_palettes/ribbon_sweet.pal
new file mode 100644
index 0000000000..faea05e403
--- /dev/null
+++ b/graphics/items/icon_palettes/ribbon_sweet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 208 248
+208 160 208
+176 136 176
+144 96 168
+112 72 136
+88 64 96
+48 48 48
+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/items/icon_palettes/rich_mulch.pal b/graphics/items/icon_palettes/rich_mulch.pal
new file mode 100644
index 0000000000..95616b559a
--- /dev/null
+++ b/graphics/items/icon_palettes/rich_mulch.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+24 192 40
+120 216 120
+224 232 208
+232 200 152
+216 184 104
+180 136 72
+128 96 56
+48 48 48
+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/items/icon_palettes/rindo_berry.pal b/graphics/items/icon_palettes/rindo_berry.pal
new file mode 100755
index 0000000000..bdf699dcc0
--- /dev/null
+++ b/graphics/items/icon_palettes/rindo_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+248 240 48
+80 216 96
+56 112 72
+208 200 16
+120 112 48
+32 168 48
+184 248 160
+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/items/icon_palettes/ring_target.pal b/graphics/items/icon_palettes/ring_target.pal
new file mode 100755
index 0000000000..4773d5912c
--- /dev/null
+++ b/graphics/items/icon_palettes/ring_target.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+66 66 66
+173 140 66
+148 115 49
+115 115 123
+206 206 214
+255 255 255
+123 99 49
+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/items/icon_palettes/rock_gem.pal b/graphics/items/icon_palettes/rock_gem.pal
new file mode 100644
index 0000000000..3821017666
--- /dev/null
+++ b/graphics/items/icon_palettes/rock_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+184 144 120
+216 200 176
+136 112 88
+232 224 200
+112 88 72
+80 64 48
+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/items/icon_palettes/rock_incense.pal b/graphics/items/icon_palettes/rock_incense.pal
new file mode 100755
index 0000000000..d3e3fe3239
--- /dev/null
+++ b/graphics/items/icon_palettes/rock_incense.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+96 72 32
+216 208 160
+192 160 104
+200 184 112
+112 96 48
+168 136 64
+136 104 48
+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/items/icon_palettes/rock_memory.pal b/graphics/items/icon_palettes/rock_memory.pal
new file mode 100755
index 0000000000..f11cde989b
--- /dev/null
+++ b/graphics/items/icon_palettes/rock_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+222 197 115
+246 238 222
+255 255 255
+222 189 90
+238 222 172
+238 230 197
+230 213 148
+213 180 65
+123 123 148
+98 98 123
+172 148 139
+139 115 115
+197 172 164
+0 0 0
diff --git a/graphics/items/icon_palettes/rock_tm_hm.pal b/graphics/items/icon_palettes/rock_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/rockium_z.pal b/graphics/items/icon_palettes/rockium_z.pal
new file mode 100644
index 0000000000..c41636f8b8
--- /dev/null
+++ b/graphics/items/icon_palettes/rockium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+156 123 98
+131 90 65
+255 246 222
+189 156 131
+238 222 197
+106 82 65
+90 57 49
+131 106 90
+148 106 90
+115 74 49
+164 156 131
+180 172 156
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/rocky_helmet.pal b/graphics/items/icon_palettes/rocky_helmet.pal
new file mode 100755
index 0000000000..92bc3c24c5
--- /dev/null
+++ b/graphics/items/icon_palettes/rocky_helmet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+198 198 198
+156 156 156
+82 82 82
+214 156 0
+255 198 0
+255 222 123
+57 156 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/items/icon_palettes/room_service.pal b/graphics/items/icon_palettes/room_service.pal
new file mode 100644
index 0000000000..53345c1a7d
--- /dev/null
+++ b/graphics/items/icon_palettes/room_service.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 248 248
+224 248 248
+208 216 216
+168 184 184
+144 152 152
+192 224 224
+168 192 192
+152 200 200
+96 96 96
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/rose_incense.pal b/graphics/items/icon_palettes/rose_incense.pal
new file mode 100755
index 0000000000..379551e9cd
--- /dev/null
+++ b/graphics/items/icon_palettes/rose_incense.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 128 64
+48 48 48
+120 120 48
+248 240 80
+240 248 152
+232 232 200
+248 248 248
+112 96 48
+208 200 112
+152 152 80
+232 120 232
+224 56 192
+176 48 160
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/roseli_berry.pal b/graphics/items/icon_palettes/roseli_berry.pal
new file mode 100755
index 0000000000..94bf9414f6
--- /dev/null
+++ b/graphics/items/icon_palettes/roseli_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+57 49 49
+49 49 49
+198 57 66
+140 41 66
+222 82 82
+239 156 132
+41 57 74
+99 123 181
+57 90 140
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/rotom_catalog.pal b/graphics/items/icon_palettes/rotom_catalog.pal
new file mode 100644
index 0000000000..02313fedc3
--- /dev/null
+++ b/graphics/items/icon_palettes/rotom_catalog.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 248 0
+232 248 248
+200 240 248
+160 216 240
+96 200 240
+48 152 208
+24 104 176
+224 176 144
+240 144 88
+232 120 72
+200 104 56
+184 184 184
+152 152 128
+48 48 48
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/rowap_berry.pal b/graphics/items/icon_palettes/rowap_berry.pal
new file mode 100755
index 0000000000..3050dc608a
--- /dev/null
+++ b/graphics/items/icon_palettes/rowap_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+216 208 128
+200 152 56
+176 152 64
+40 168 176
+56 216 224
+152 120 48
+16 144 152
+48 112 120
+40 88 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/ruby.pal b/graphics/items/icon_palettes/ruby.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/rusted_weapons.pal b/graphics/items/icon_palettes/rusted_weapons.pal
new file mode 100644
index 0000000000..7d8f33d7c9
--- /dev/null
+++ b/graphics/items/icon_palettes/rusted_weapons.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 248 128
+136 128 128
+112 112 112
+88 88 88
+64 64 64
+48 48 48
+200 96 96
+152 72 72
+120 56 56
+80 40 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/sablenite.pal b/graphics/items/icon_palettes/sablenite.pal
new file mode 100644
index 0000000000..e270a912a2
--- /dev/null
+++ b/graphics/items/icon_palettes/sablenite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+224 40 88
+168 64 120
+120 88 152
+248 216 120
+184 168 200
+168 136 144
+240 144 168
+248 248 248
+240 144 104
+240 232 240
+232 104 96
+232 104 136
+192 80 152
+0 0 0
diff --git a/graphics/items/icon_palettes/sachet.pal b/graphics/items/icon_palettes/sachet.pal
new file mode 100755
index 0000000000..7c59557a57
--- /dev/null
+++ b/graphics/items/icon_palettes/sachet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 128 64
+49 49 49
+74 74 74
+189 115 198
+173 99 181
+99 66 123
+148 90 165
+247 214 115
+214 173 57
+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/items/icon_palettes/sacred_ash.pal b/graphics/items/icon_palettes/sacred_ash.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/safari_ball.pal b/graphics/items/icon_palettes/safari_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/safety_goggles.pal b/graphics/items/icon_palettes/safety_goggles.pal
new file mode 100755
index 0000000000..a6fbaea026
--- /dev/null
+++ b/graphics/items/icon_palettes/safety_goggles.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+74 74 74
+82 132 82
+90 165 90
+115 189 90
+206 107 115
+181 57 66
+222 173 173
+66 99 66
+255 214 214
+156 222 132
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/sail_fossil.pal b/graphics/items/icon_palettes/sail_fossil.pal
new file mode 100755
index 0000000000..f845f7dd2c
--- /dev/null
+++ b/graphics/items/icon_palettes/sail_fossil.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+57 49 49
+49 49 49
+132 206 181
+90 156 132
+115 173 156
+57 90 74
+66 107 90
+90 140 123
+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/items/icon_palettes/salac_berry.pal b/graphics/items/icon_palettes/salac_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/salamencite.pal b/graphics/items/icon_palettes/salamencite.pal
new file mode 100644
index 0000000000..315807ba5d
--- /dev/null
+++ b/graphics/items/icon_palettes/salamencite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+192 192 192
+16 112 152
+8 144 184
+240 168 168
+128 192 216
+96 168 192
+248 248 248
+224 88 88
+120 112 136
+200 168 168
+232 232 232
+208 136 136
+24 112 136
+176 72 72
diff --git a/graphics/items/icon_palettes/sapphire.pal b/graphics/items/icon_palettes/sapphire.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/scanner.pal b/graphics/items/icon_palettes/scanner.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/sceptilite.pal b/graphics/items/icon_palettes/sceptilite.pal
new file mode 100644
index 0000000000..579e9c4198
--- /dev/null
+++ b/graphics/items/icon_palettes/sceptilite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+80 96 80
+184 40 48
+248 32 32
+128 160 104
+168 192 160
+248 160 152
+192 96 64
+248 248 248
+64 64 64
+96 120 88
+192 208 120
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/scizorite.pal b/graphics/items/icon_palettes/scizorite.pal
new file mode 100644
index 0000000000..abcba6719a
--- /dev/null
+++ b/graphics/items/icon_palettes/scizorite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+168 80 104
+104 32 24
+56 56 56
+168 216 224
+200 160 168
+144 144 144
+112 136 144
+248 248 248
+152 8 0
+168 144 168
+248 248 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/scope_lens.pal b/graphics/items/icon_palettes/scope_lens.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/sea_incense.pal b/graphics/items/icon_palettes/sea_incense.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/secret_key.pal b/graphics/items/icon_palettes/secret_key.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/shadow_mail.pal b/graphics/items/icon_palettes/shadow_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/shalour_sable.pal b/graphics/items/icon_palettes/shalour_sable.pal
new file mode 100644
index 0000000000..ae6f368a81
--- /dev/null
+++ b/graphics/items/icon_palettes/shalour_sable.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+232 208 152
+216 184 104
+200 160 80
+184 128 64
+168 112 48
+152 88 32
+48 48 48
+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/items/icon_palettes/sharp_beak.pal b/graphics/items/icon_palettes/sharp_beak.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/sharpedonite.pal b/graphics/items/icon_palettes/sharpedonite.pal
new file mode 100644
index 0000000000..ac7dd92e89
--- /dev/null
+++ b/graphics/items/icon_palettes/sharpedonite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+200 200 224
+208 168 72
+248 216 120
+160 192 216
+248 232 184
+224 208 176
+248 248 248
+32 112 168
+144 168 144
+144 168 208
+232 232 240
+112 160 200
+208 192 136
+136 168 200
diff --git a/graphics/items/icon_palettes/shed_shell.pal b/graphics/items/icon_palettes/shed_shell.pal
new file mode 100644
index 0000000000..6fb36dd9d5
--- /dev/null
+++ b/graphics/items/icon_palettes/shed_shell.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+229 238 101
+247 247 247
+220 194 109
+159 142 46
+185 168 69
+203 177 61
+117 117 85
+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/items/icon_palettes/shell.pal b/graphics/items/icon_palettes/shell.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/shiny_charm.pal b/graphics/items/icon_palettes/shiny_charm.pal
new file mode 100644
index 0000000000..ab6e64a6e8
--- /dev/null
+++ b/graphics/items/icon_palettes/shiny_charm.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+245 218 38
+82 123 230
+90 156 246
+156 255 106
+41 115 148
+156 246 246
+57 205 246
+132 214 255
+189 189 239
+222 222 255
+90 90 90
+32 32 32
+206 173 247
+140 140 247
+173 107 255
+230 206 255
diff --git a/graphics/items/icon_palettes/shiny_stone.pal b/graphics/items/icon_palettes/shiny_stone.pal
new file mode 100755
index 0000000000..f297481899
--- /dev/null
+++ b/graphics/items/icon_palettes/shiny_stone.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+192 224 160
+248 248 136
+224 240 208
+248 248 248
+168 192 152
+152 176 120
+248 224 112
+248 216 8
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/shoal_salt.pal b/graphics/items/icon_palettes/shoal_salt.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/shock_drive.pal b/graphics/items/icon_palettes/shock_drive.pal
new file mode 100644
index 0000000000..1d7d83eb55
--- /dev/null
+++ b/graphics/items/icon_palettes/shock_drive.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+144 104 32
+248 216 0
+216 128 16
+248 144 16
+248 168 0
+0 0 0
+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/items/icon_palettes/shuca_berry.pal b/graphics/items/icon_palettes/shuca_berry.pal
new file mode 100755
index 0000000000..61b071e34d
--- /dev/null
+++ b/graphics/items/icon_palettes/shuca_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+168 232 96
+216 240 176
+96 184 32
+40 96 40
+80 136 32
+216 192 24
+248 232 96
+160 136 32
+248 248 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/silk_scarf.pal b/graphics/items/icon_palettes/silk_scarf.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/silph_scope.pal b/graphics/items/icon_palettes/silph_scope.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/silver_powder.pal b/graphics/items/icon_palettes/silver_powder.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/sitrus_berry.pal b/graphics/items/icon_palettes/sitrus_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/skull_fossil.pal b/graphics/items/icon_palettes/skull_fossil.pal
new file mode 100755
index 0000000000..5a8f9d1706
--- /dev/null
+++ b/graphics/items/icon_palettes/skull_fossil.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+192 112 80
+224 160 112
+208 136 104
+248 192 160
+216 136 96
+136 88 56
+80 56 40
+168 96 64
+112 80 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/sky_plate.pal b/graphics/items/icon_palettes/sky_plate.pal
new file mode 100644
index 0000000000..3c7b1e3f0e
--- /dev/null
+++ b/graphics/items/icon_palettes/sky_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+26 165 218
+88 209 237
+112 246 255
+63 192 255
+26 130 173
+33 104 156
+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/items/icon_palettes/slowbronite.pal b/graphics/items/icon_palettes/slowbronite.pal
new file mode 100644
index 0000000000..41785ae70c
--- /dev/null
+++ b/graphics/items/icon_palettes/slowbronite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+184 200 184
+224 184 80
+240 232 128
+248 184 192
+240 240 184
+216 216 152
+248 248 248
+240 128 136
+240 176 128
+200 176 168
+224 232 232
+224 152 152
+216 192 128
+216 96 104
diff --git a/graphics/items/icon_palettes/smoke_ball.pal b/graphics/items/icon_palettes/smoke_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/smooth_rock.pal b/graphics/items/icon_palettes/smooth_rock.pal
new file mode 100644
index 0000000000..ccb7076fae
--- /dev/null
+++ b/graphics/items/icon_palettes/smooth_rock.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+247 229 134
+247 247 220
+238 212 85
+203 142 54
+212 168 11
+185 126 93
+229 168 142
+142 93 69
+117 77 54
+229 185 159
+168 134 25
+212 151 46
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/snorlium_z.pal b/graphics/items/icon_palettes/snorlium_z.pal
new file mode 100644
index 0000000000..e4ecfd6d67
--- /dev/null
+++ b/graphics/items/icon_palettes/snorlium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+82 139 172
+65 106 148
+98 164 205
+246 255 246
+57 98 123
+213 230 238
+41 74 106
+65 115 139
+172 172 172
+57 90 139
+74 131 164
+148 164 164
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/snowball.pal b/graphics/items/icon_palettes/snowball.pal
new file mode 100755
index 0000000000..900d872d7d
--- /dev/null
+++ b/graphics/items/icon_palettes/snowball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 123 165
+74 90 99
+247 255 255
+198 239 255
+132 173 206
+165 206 231
+8 0 0
+0 0 0
+8 8 0
+41 115 156
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/soda_pop.pal b/graphics/items/icon_palettes/soda_pop.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/soft_sand.pal b/graphics/items/icon_palettes/soft_sand.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/solganium_z.pal b/graphics/items/icon_palettes/solganium_z.pal
new file mode 100644
index 0000000000..2c1517f5a8
--- /dev/null
+++ b/graphics/items/icon_palettes/solganium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+32 32 32
+255 172 65
+255 246 205
+222 82 32
+255 131 16
+255 205 131
+180 172 148
+180 98 24
+255 148 16
+197 65 41
+156 65 32
+180 131 57
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/soot_sack.pal b/graphics/items/icon_palettes/soot_sack.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/soothe_bell.pal b/graphics/items/icon_palettes/soothe_bell.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/soul_dew.pal b/graphics/items/icon_palettes/soul_dew.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/spell_tag.pal b/graphics/items/icon_palettes/spell_tag.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/spelon_berry.pal b/graphics/items/icon_palettes/spelon_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/splash_plate.pal b/graphics/items/icon_palettes/splash_plate.pal
new file mode 100644
index 0000000000..cc529d3455
--- /dev/null
+++ b/graphics/items/icon_palettes/splash_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+56 96 201
+122 173 255
+147 192 255
+96 138 255
+33 63 138
+0 0 0
+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/items/icon_palettes/spooky_plate.pal b/graphics/items/icon_palettes/spooky_plate.pal
new file mode 100644
index 0000000000..fffede5bc1
--- /dev/null
+++ b/graphics/items/icon_palettes/spooky_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+112 122 138
+165 173 182
+192 192 209
+138 130 165
+104 104 104
+88 88 88
+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/items/icon_palettes/sport_ball.pal b/graphics/items/icon_palettes/sport_ball.pal
new file mode 100644
index 0000000000..38c8fd8c84
--- /dev/null
+++ b/graphics/items/icon_palettes/sport_ball.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 180 180
+255 255 255
+222 205 246
+164 164 197
+123 123 131
+74 82 82
+255 213 57
+255 148 57
+222 90 57
+156 74 57
+0 0 0
+49 49 49
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/ss_ticket.pal b/graphics/items/icon_palettes/ss_ticket.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/stable_mulch.pal b/graphics/items/icon_palettes/stable_mulch.pal
new file mode 100644
index 0000000000..a0a98aabcb
--- /dev/null
+++ b/graphics/items/icon_palettes/stable_mulch.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 248 208
+152 224 200
+48 184 192
+232 200 152
+216 184 104
+180 136 72
+128 96 56
+48 48 48
+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/items/icon_palettes/star.pal b/graphics/items/icon_palettes/star.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/star_sweet.pal b/graphics/items/icon_palettes/star_sweet.pal
new file mode 100644
index 0000000000..e94061aa97
--- /dev/null
+++ b/graphics/items/icon_palettes/star_sweet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 128 248
+248 248 176
+248 232 0
+216 184 8
+168 143 8
+48 48 48
+0 0 0
+0 0 0
+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/items/icon_palettes/starf_berry.pal b/graphics/items/icon_palettes/starf_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/steel_gem.pal b/graphics/items/icon_palettes/steel_gem.pal
new file mode 100644
index 0000000000..bd03865343
--- /dev/null
+++ b/graphics/items/icon_palettes/steel_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+136 136 152
+184 184 200
+96 96 96
+232 232 248
+88 88 88
+0 0 0
+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/items/icon_palettes/steel_memory.pal b/graphics/items/icon_palettes/steel_memory.pal
new file mode 100755
index 0000000000..6dc939e719
--- /dev/null
+++ b/graphics/items/icon_palettes/steel_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+148 172 180
+222 222 222
+238 246 246
+197 197 197
+213 213 213
+255 255 255
+115 164 172
+189 189 189
+82 156 164
+123 123 148
+98 98 123
+139 156 172
+115 131 131
+189 197 205
diff --git a/graphics/items/icon_palettes/steel_tm_hm.pal b/graphics/items/icon_palettes/steel_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/steelium_z.pal b/graphics/items/icon_palettes/steelium_z.pal
new file mode 100644
index 0000000000..814d20a5ba
--- /dev/null
+++ b/graphics/items/icon_palettes/steelium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+131 131 172
+106 106 156
+156 156 189
+255 255 238
+238 230 230
+74 74 106
+90 90 115
+98 98 148
+123 123 164
+180 180 164
+106 106 131
+164 164 156
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/steelixite.pal b/graphics/items/icon_palettes/steelixite.pal
new file mode 100644
index 0000000000..f0b9626fcd
--- /dev/null
+++ b/graphics/items/icon_palettes/steelixite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+144 152 176
+160 168 192
+200 232 240
+128 200 240
+176 192 208
+248 248 248
+8 152 224
+104 192 232
+112 152 192
+200 208 216
+72 152 200
+176 200 216
+152 192 216
+0 0 0
diff --git a/graphics/items/icon_palettes/sticky_barb.pal b/graphics/items/icon_palettes/sticky_barb.pal
new file mode 100644
index 0000000000..a179f618f6
--- /dev/null
+++ b/graphics/items/icon_palettes/sticky_barb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+185 229 229
+109 177 194
+77 126 142
+238 247 247
+0 0 0
+0 0 0
+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/items/icon_palettes/stone_plate.pal b/graphics/items/icon_palettes/stone_plate.pal
new file mode 100644
index 0000000000..c67cde98d2
--- /dev/null
+++ b/graphics/items/icon_palettes/stone_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+173 156 130
+228 218 173
+237 237 192
+209 182 138
+156 130 63
+138 96 63
+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/items/icon_palettes/strange_souvenir.pal b/graphics/items/icon_palettes/strange_souvenir.pal
new file mode 100644
index 0000000000..16a1ddadb6
--- /dev/null
+++ b/graphics/items/icon_palettes/strange_souvenir.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 232 176
+184 168 104
+152 128 64
+96 80 24
+72 56 48
+48 48 48
+0 0 0
+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/items/icon_palettes/strawberry_sweet.pal b/graphics/items/icon_palettes/strawberry_sweet.pal
new file mode 100644
index 0000000000..90dd56390c
--- /dev/null
+++ b/graphics/items/icon_palettes/strawberry_sweet.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 64 64
+48 48 48
+176 40 40
+248 160 160
+208 32 32
+240 104 104
+248 56 56
+248 192 200
+200 120 120
+248 96 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/sun_stone.pal b/graphics/items/icon_palettes/sun_stone.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/super_lure.pal b/graphics/items/icon_palettes/super_lure.pal
new file mode 100644
index 0000000000..8064ffc4e2
--- /dev/null
+++ b/graphics/items/icon_palettes/super_lure.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 128 128
+248 248 248
+230 246 255
+189 213 213
+148 189 205
+115 156 172
+98 115 139
+65 82 98
+205 238 255
+139 197 238
+82 164 222
+57 106 205
+41 74 139
+48 48 48
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/super_potion.pal b/graphics/items/icon_palettes/super_potion.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/super_repel.pal b/graphics/items/icon_palettes/super_repel.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/super_rod.pal b/graphics/items/icon_palettes/super_rod.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/surprise_mulch.pal b/graphics/items/icon_palettes/surprise_mulch.pal
new file mode 100644
index 0000000000..a4c6db4eb7
--- /dev/null
+++ b/graphics/items/icon_palettes/surprise_mulch.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 208 248
+248 160 216
+232 104 176
+232 200 152
+216 184 104
+180 136 72
+128 96 56
+48 48 48
+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/items/icon_palettes/swampertite.pal b/graphics/items/icon_palettes/swampertite.pal
new file mode 100644
index 0000000000..a35c06e7e0
--- /dev/null
+++ b/graphics/items/icon_palettes/swampertite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+232 104 88
+96 128 144
+72 80 88
+112 176 216
+232 168 160
+176 208 224
+104 144 168
+248 248 248
+168 104 104
+176 144 152
+136 160 192
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/sweet_apple.pal b/graphics/items/icon_palettes/sweet_apple.pal
new file mode 100644
index 0000000000..90465ef51d
--- /dev/null
+++ b/graphics/items/icon_palettes/sweet_apple.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 242 0
+246 120 121
+246 84 83
+239 43 41
+205 26 30
+155 25 26
+48 48 48
+0 0 0
+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/items/icon_palettes/sweet_heart.pal b/graphics/items/icon_palettes/sweet_heart.pal
new file mode 100755
index 0000000000..d572656987
--- /dev/null
+++ b/graphics/items/icon_palettes/sweet_heart.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+82 82 82
+49 49 49
+165 123 41
+181 140 58
+197 148 74
+132 99 33
+90 66 25
+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/items/icon_palettes/swift_feather.pal b/graphics/items/icon_palettes/swift_feather.pal
new file mode 100644
index 0000000000..359140d2cc
--- /dev/null
+++ b/graphics/items/icon_palettes/swift_feather.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+90 90 90
+206 239 255
+239 255 255
+49 49 49
+156 214 231
+82 156 66
+165 239 132
+82 198 66
+140 165 173
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/tamato_berry.pal b/graphics/items/icon_palettes/tamato_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/tanga_berry.pal b/graphics/items/icon_palettes/tanga_berry.pal
new file mode 100755
index 0000000000..8950724c22
--- /dev/null
+++ b/graphics/items/icon_palettes/tanga_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+240 232 56
+48 136 48
+56 168 56
+72 120 64
+192 176 40
+56 80 48
+64 200 64
+136 232 136
+168 160 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/tapunium_z.pal b/graphics/items/icon_palettes/tapunium_z.pal
new file mode 100644
index 0000000000..cef51dd605
--- /dev/null
+++ b/graphics/items/icon_palettes/tapunium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+222 205 57
+205 172 41
+255 255 156
+238 230 90
+255 255 230
+156 139 41
+164 156 65
+180 180 156
+139 123 24
+189 139 32
+222 197 49
+180 180 106
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/tart_apple.pal b/graphics/items/icon_palettes/tart_apple.pal
new file mode 100644
index 0000000000..92c8604edc
--- /dev/null
+++ b/graphics/items/icon_palettes/tart_apple.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+192 248 248
+229 156 67
+244 121 39
+180 191 123
+123 175 69
+105 137 24
+248 87 80
+246 39 40
+200 34 31
+153 27 28
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/tea.pal b/graphics/items/icon_palettes/tea.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/teachy_tv.pal b/graphics/items/icon_palettes/teachy_tv.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/terrain_extender.pal b/graphics/items/icon_palettes/terrain_extender.pal
new file mode 100644
index 0000000000..2ae8d133e8
--- /dev/null
+++ b/graphics/items/icon_palettes/terrain_extender.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+49 49 49
+180 197 197
+123 139 139
+74 82 82
+255 255 255
+213 230 230
+49 106 106
+74 148 164
+131 213 213
+222 123 106
+222 65 41
+172 57 49
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/thick_club.pal b/graphics/items/icon_palettes/thick_club.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/throat_spray.pal b/graphics/items/icon_palettes/throat_spray.pal
new file mode 100644
index 0000000000..2b78e54403
--- /dev/null
+++ b/graphics/items/icon_palettes/throat_spray.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 192 248
+248 248 248
+192 232 216
+160 200 184
+128 168 152
+80 120 104
+48 48 48
+128 168 200
+96 120 168
+56 64 128
+128 144 152
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/thunder_stone.pal b/graphics/items/icon_palettes/thunder_stone.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/tm_case.pal b/graphics/items/icon_palettes/tm_case.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/town_map.pal b/graphics/items/icon_palettes/town_map.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/toxic_orb.pal b/graphics/items/icon_palettes/toxic_orb.pal
new file mode 100644
index 0000000000..c4ddda687e
--- /dev/null
+++ b/graphics/items/icon_palettes/toxic_orb.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+168 142 247
+185 85 229
+212 101 238
+159 69 212
+142 61 212
+229 177 238
+247 247 247
+117 54 212
+101 32 212
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/toxic_plate.pal b/graphics/items/icon_palettes/toxic_plate.pal
new file mode 100644
index 0000000000..733aae9c7b
--- /dev/null
+++ b/graphics/items/icon_palettes/toxic_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+182 88 228
+209 156 237
+246 173 246
+192 122 255
+147 79 201
+112 56 192
+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/items/icon_palettes/tri_pass.pal b/graphics/items/icon_palettes/tri_pass.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/tropic_mail.pal b/graphics/items/icon_palettes/tropic_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/twisted_spoon.pal b/graphics/items/icon_palettes/twisted_spoon.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/tyranitarite.pal b/graphics/items/icon_palettes/tyranitarite.pal
new file mode 100644
index 0000000000..579e9c4198
--- /dev/null
+++ b/graphics/items/icon_palettes/tyranitarite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+80 96 80
+184 40 48
+248 32 32
+128 160 104
+168 192 160
+248 160 152
+192 96 64
+248 248 248
+64 64 64
+96 120 88
+192 208 120
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/ultra_ball.pal b/graphics/items/icon_palettes/ultra_ball.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/ultranecrozium_z.pal b/graphics/items/icon_palettes/ultranecrozium_z.pal
new file mode 100644
index 0000000000..366b1ba2d1
--- /dev/null
+++ b/graphics/items/icon_palettes/ultranecrozium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+32 32 32
+255 246 205
+255 255 238
+180 156 98
+222 205 156
+255 255 230
+180 180 172
+156 148 115
+131 115 82
+230 222 172
+164 131 65
+180 180 148
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/up_grade.pal b/graphics/items/icon_palettes/upgrade.pal
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icon_palettes/up_grade.pal
rename to graphics/items/icon_palettes/upgrade.pal
diff --git a/graphics/items/icon_palettes/utility_umbrella.pal b/graphics/items/icon_palettes/utility_umbrella.pal
new file mode 100644
index 0000000000..287da75374
--- /dev/null
+++ b/graphics/items/icon_palettes/utility_umbrella.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+128 120 120
+104 104 104
+80 80 80
+64 64 64
+48 48 48
+208 208 208
+0 0 0
+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/items/icon_palettes/venusaurite.pal b/graphics/items/icon_palettes/venusaurite.pal
new file mode 100644
index 0000000000..3aadc10929
--- /dev/null
+++ b/graphics/items/icon_palettes/venusaurite.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+48 48 48
+24 128 128
+184 72 136
+248 80 192
+96 168 200
+152 192 168
+176 152 184
+176 128 200
+248 248 248
+16 104 72
+40 144 184
+120 216 216
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/vs_seeker.pal b/graphics/items/icon_palettes/vs_seeker.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/wacan_berry.pal b/graphics/items/icon_palettes/wacan_berry.pal
new file mode 100755
index 0000000000..8569be7272
--- /dev/null
+++ b/graphics/items/icon_palettes/wacan_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+248 240 48
+208 200 16
+144 240 136
+56 112 72
+80 216 120
+64 168 96
+248 248 248
+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/items/icon_palettes/wailmer_pail.pal b/graphics/items/icon_palettes/wailmer_pail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/water_gem.pal b/graphics/items/icon_palettes/water_gem.pal
new file mode 100644
index 0000000000..586db9a6e4
--- /dev/null
+++ b/graphics/items/icon_palettes/water_gem.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+32 32 32
+64 160 248
+120 200 248
+48 144 248
+208 248 248
+0 120 208
+0 80 200
+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/items/icon_palettes/water_memory.pal b/graphics/items/icon_palettes/water_memory.pal
new file mode 100755
index 0000000000..17979fd4c2
--- /dev/null
+++ b/graphics/items/icon_palettes/water_memory.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+115 180 238
+180 213 246
+238 246 246
+205 230 246
+139 197 238
+164 205 246
+255 255 255
+90 172 238
+74 164 238
+123 123 148
+98 98 123
+131 172 180
+106 139 139
+164 189 197
diff --git a/graphics/items/icon_palettes/water_stone.pal b/graphics/items/icon_palettes/water_stone.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/water_tm_hm.pal b/graphics/items/icon_palettes/water_tm_hm.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/waterium_z.pal b/graphics/items/icon_palettes/waterium_z.pal
new file mode 100644
index 0000000000..748d08b5be
--- /dev/null
+++ b/graphics/items/icon_palettes/waterium_z.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+49 49 49
+41 156 230
+8 115 213
+98 197 255
+230 255 255
+156 255 246
+24 139 222
+0 90 197
+0 82 148
+32 106 164
+65 139 180
+164 180 180
+24 106 164
+106 180 172
+0 0 0
diff --git a/graphics/items/icon_palettes/watmel_berry.pal b/graphics/items/icon_palettes/watmel_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/wave_incense.pal b/graphics/items/icon_palettes/wave_incense.pal
new file mode 100755
index 0000000000..86abf60769
--- /dev/null
+++ b/graphics/items/icon_palettes/wave_incense.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+48 88 152
+40 200 240
+64 144 192
+72 240 248
+128 224 240
+176 240 248
+112 96 48
+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/items/icon_palettes/wave_mail.pal b/graphics/items/icon_palettes/wave_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/weakness_policy.pal b/graphics/items/icon_palettes/weakness_policy.pal
new file mode 100755
index 0000000000..46a59e35f9
--- /dev/null
+++ b/graphics/items/icon_palettes/weakness_policy.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+214 247 198
+132 140 247
+165 198 214
+189 214 206
+231 148 148
+0 0 0
+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/items/icon_palettes/wepear_berry.pal b/graphics/items/icon_palettes/wepear_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/whipped_dream.pal b/graphics/items/icon_palettes/whipped_dream.pal
new file mode 100755
index 0000000000..3b6440bbbd
--- /dev/null
+++ b/graphics/items/icon_palettes/whipped_dream.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+214 90 132
+198 49 90
+140 41 74
+255 148 189
+239 206 198
+255 255 255
+189 132 132
+222 181 181
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/white_apricorn.pal b/graphics/items/icon_palettes/white_apricorn.pal
new file mode 100755
index 0000000000..53472131bb
--- /dev/null
+++ b/graphics/items/icon_palettes/white_apricorn.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+231 181 140
+115 82 66
+165 99 41
+255 255 255
+181 198 214
+206 148 99
+214 222 231
+115 123 132
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/white_flute.pal b/graphics/items/icon_palettes/white_flute.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/white_herb.pal b/graphics/items/icon_palettes/white_herb.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/wide_lens.pal b/graphics/items/icon_palettes/wide_lens.pal
new file mode 100644
index 0000000000..cedef34fa0
--- /dev/null
+++ b/graphics/items/icon_palettes/wide_lens.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+220 151 101
+212 101 39
+117 39 18
+247 247 247
+85 85 85
+11 126 151
+18 194 247
+151 151 151
+168 54 25
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/wiki_berry.pal b/graphics/items/icon_palettes/wiki_berry.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/wise_glasses.pal b/graphics/items/icon_palettes/wise_glasses.pal
new file mode 100644
index 0000000000..1d03864d74
--- /dev/null
+++ b/graphics/items/icon_palettes/wise_glasses.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+61 54 61
+39 39 39
+85 77 85
+247 247 247
+85 134 134
+159 247 247
+126 194 194
+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/items/icon_palettes/wishing_piece.pal b/graphics/items/icon_palettes/wishing_piece.pal
new file mode 100644
index 0000000000..898b8b36a0
--- /dev/null
+++ b/graphics/items/icon_palettes/wishing_piece.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+104 104 176
+76 88 160
+56 64 136
+40 48 120
+40 48 96
+48 48 72
+32 32 32
+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/items/icon_palettes/wood_mail.pal b/graphics/items/icon_palettes/wood_mail.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/x_accuracy.pal b/graphics/items/icon_palettes/x_accuracy.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/x_attack.pal b/graphics/items/icon_palettes/x_attack.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/x_defend.pal b/graphics/items/icon_palettes/x_defend.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/x_special.pal b/graphics/items/icon_palettes/x_special.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/x_special_defense.pal b/graphics/items/icon_palettes/x_special_defense.pal
new file mode 100755
index 0000000000..548816d06b
--- /dev/null
+++ b/graphics/items/icon_palettes/x_special_defense.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+64 134 134
+42 42 42
+127 134 134
+184 198 198
+219 219 219
+191 219 219
+92 176 176
+78 141 141
+28 92 92
+148 198 198
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/x_speed.pal b/graphics/items/icon_palettes/x_speed.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/yache_berry.pal b/graphics/items/icon_palettes/yache_berry.pal
new file mode 100755
index 0000000000..2b15404f47
--- /dev/null
+++ b/graphics/items/icon_palettes/yache_berry.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+48 48 48
+32 216 80
+56 168 88
+40 88 48
+24 128 168
+32 160 192
+120 216 224
+64 192 216
+192 240 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/yellow_apricorn.pal b/graphics/items/icon_palettes/yellow_apricorn.pal
new file mode 100755
index 0000000000..b6004717b8
--- /dev/null
+++ b/graphics/items/icon_palettes/yellow_apricorn.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+231 181 140
+115 82 66
+165 99 41
+239 206 49
+198 132 8
+206 148 99
+255 231 132
+255 255 255
+222 173 24
+123 90 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/yellow_flute.pal b/graphics/items/icon_palettes/yellow_flute.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/yellow_mint.pal b/graphics/items/icon_palettes/yellow_mint.pal
new file mode 100644
index 0000000000..c4692d9a3f
--- /dev/null
+++ b/graphics/items/icon_palettes/yellow_mint.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+248 248 232
+248 232 168
+224 208 136
+200 200 168
+136 120 80
+88 80 48
+40 40 40
+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/items/icon_palettes/yellow_nectar.pal b/graphics/items/icon_palettes/yellow_nectar.pal
new file mode 100755
index 0000000000..bebf85a5ff
--- /dev/null
+++ b/graphics/items/icon_palettes/yellow_nectar.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 0 255
+49 49 49
+230 172 0
+255 222 82
+197 139 0
+255 246 213
+90 65 65
+123 90 82
+148 98 82
+189 148 156
+115 74 65
+123 74 74
+255 197 189
+255 123 115
+189 90 90
+0 0 0
diff --git a/graphics/items/icon_palettes/yellow_scarf.pal b/graphics/items/icon_palettes/yellow_scarf.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/yellow_shard.pal b/graphics/items/icon_palettes/yellow_shard.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/z_power_ring.pal b/graphics/items/icon_palettes/z_power_ring.pal
new file mode 100644
index 0000000000..2c3b5951af
--- /dev/null
+++ b/graphics/items/icon_palettes/z_power_ring.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+240 248 248
+176 176 176
+136 136 136
+128 128 128
+104 104 104
+96 96 96
+80 80 80
+64 64 64
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/z_ring.pal b/graphics/items/icon_palettes/z_ring.pal
new file mode 100644
index 0000000000..8bb11edd5a
--- /dev/null
+++ b/graphics/items/icon_palettes/z_ring.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 191 231
+90 74 90
+131 131 139
+139 172 189
+49 49 49
+222 255 255
+197 222 213
+139 156 180
+255 255 255
+238 246 246
+106 98 106
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/zap_plate.pal b/graphics/items/icon_palettes/zap_plate.pal
new file mode 100644
index 0000000000..074a89879d
--- /dev/null
+++ b/graphics/items/icon_palettes/zap_plate.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+40 40 40
+237 156 63
+246 218 112
+246 228 130
+255 192 88
+173 112 40
+130 96 33
+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/items/icon_palettes/zinc.pal b/graphics/items/icon_palettes/zinc.pal
old mode 100644
new mode 100755
diff --git a/graphics/items/icon_palettes/zoom_lens.pal b/graphics/items/icon_palettes/zoom_lens.pal
new file mode 100644
index 0000000000..ff950851c0
--- /dev/null
+++ b/graphics/items/icon_palettes/zoom_lens.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 128
+39 39 39
+238 220 126
+185 177 46
+85 85 46
+203 61 61
+134 32 32
+142 134 77
+101 185 247
+247 247 247
+229 126 126
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icon_palettes/zygarde_cube.pal b/graphics/items/icon_palettes/zygarde_cube.pal
new file mode 100644
index 0000000000..3358a67c8c
--- /dev/null
+++ b/graphics/items/icon_palettes/zygarde_cube.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+232 248 232
+152 216 48
+128 152 32
+104 120 48
+152 144 144
+120 104 104
+88 80 80
+64 56 56
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/items/icons/ability_capsule.png b/graphics/items/icons/ability_capsule.png
new file mode 100755
index 0000000000..4cb366137f
Binary files /dev/null and b/graphics/items/icons/ability_capsule.png differ
diff --git a/graphics/items/icons/ability_patch.png b/graphics/items/icons/ability_patch.png
new file mode 100644
index 0000000000..acbef74623
Binary files /dev/null and b/graphics/items/icons/ability_patch.png differ
diff --git a/graphics/items/icons/abomasite.png b/graphics/items/icons/abomasite.png
new file mode 100644
index 0000000000..4442f21029
Binary files /dev/null and b/graphics/items/icons/abomasite.png differ
diff --git a/graphics/items/icons/absolite.png b/graphics/items/icons/absolite.png
new file mode 100644
index 0000000000..786aab0732
Binary files /dev/null and b/graphics/items/icons/absolite.png differ
diff --git a/graphics/items/icons/absorb_bulb.png b/graphics/items/icons/absorb_bulb.png
new file mode 100755
index 0000000000..d958ab3684
Binary files /dev/null and b/graphics/items/icons/absorb_bulb.png differ
diff --git a/graphics/items/icons/acro_bike.png b/graphics/items/icons/acro_bike.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/adamant_orb.png b/graphics/items/icons/adamant_orb.png
new file mode 100644
index 0000000000..5e4f6b2995
Binary files /dev/null and b/graphics/items/icons/adamant_orb.png differ
diff --git a/graphics/items/icons/adrenaline_orb.png b/graphics/items/icons/adrenaline_orb.png
new file mode 100644
index 0000000000..913366e118
Binary files /dev/null and b/graphics/items/icons/adrenaline_orb.png differ
diff --git a/graphics/items/icons/aerodactylite.png b/graphics/items/icons/aerodactylite.png
new file mode 100644
index 0000000000..e94dee6706
Binary files /dev/null and b/graphics/items/icons/aerodactylite.png differ
diff --git a/graphics/items/icons/aggronite.png b/graphics/items/icons/aggronite.png
new file mode 100644
index 0000000000..db5dab16fb
Binary files /dev/null and b/graphics/items/icons/aggronite.png differ
diff --git a/graphics/items/icons/aguav_berry.png b/graphics/items/icons/aguav_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/air_balloon.png b/graphics/items/icons/air_balloon.png
new file mode 100755
index 0000000000..6ed3a9ad21
Binary files /dev/null and b/graphics/items/icons/air_balloon.png differ
diff --git a/graphics/items/icons/alakazite.png b/graphics/items/icons/alakazite.png
new file mode 100644
index 0000000000..dfed4caf3a
Binary files /dev/null and b/graphics/items/icons/alakazite.png differ
diff --git a/graphics/items/icons/aloraichium_z.png b/graphics/items/icons/aloraichium_z.png
new file mode 100644
index 0000000000..50b6a8dfa1
Binary files /dev/null and b/graphics/items/icons/aloraichium_z.png differ
diff --git a/graphics/items/icons/altarianite.png b/graphics/items/icons/altarianite.png
new file mode 100644
index 0000000000..ca88b00029
Binary files /dev/null and b/graphics/items/icons/altarianite.png differ
diff --git a/graphics/items/icons/ampharosite.png b/graphics/items/icons/ampharosite.png
new file mode 100644
index 0000000000..717f4169b5
Binary files /dev/null and b/graphics/items/icons/ampharosite.png differ
diff --git a/graphics/items/icons/amulet_coin.png b/graphics/items/icons/amulet_coin.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/antidote.png b/graphics/items/icons/antidote.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/apicot_berry.png b/graphics/items/icons/apicot_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/armor_fossil.png b/graphics/items/icons/armor_fossil.png
new file mode 100755
index 0000000000..a24d2ec4da
Binary files /dev/null and b/graphics/items/icons/armor_fossil.png differ
diff --git a/graphics/items/icons/armorite_ore.png b/graphics/items/icons/armorite_ore.png
new file mode 100644
index 0000000000..c08372afc0
Binary files /dev/null and b/graphics/items/icons/armorite_ore.png differ
diff --git a/graphics/items/icons/aspear_berry.png b/graphics/items/icons/aspear_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/assault_vest.png b/graphics/items/icons/assault_vest.png
new file mode 100644
index 0000000000..c42928b8bf
Binary files /dev/null and b/graphics/items/icons/assault_vest.png differ
diff --git a/graphics/items/icons/audinite.png b/graphics/items/icons/audinite.png
new file mode 100644
index 0000000000..71aaf06af6
Binary files /dev/null and b/graphics/items/icons/audinite.png differ
diff --git a/graphics/items/icons/aurora_ticket.png b/graphics/items/icons/aurora_ticket.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/babiri_berry.png b/graphics/items/icons/babiri_berry.png
new file mode 100755
index 0000000000..aeca14e70a
Binary files /dev/null and b/graphics/items/icons/babiri_berry.png differ
diff --git a/graphics/items/icons/balm_mushroom.png b/graphics/items/icons/balm_mushroom.png
new file mode 100644
index 0000000000..ba4373faad
Binary files /dev/null and b/graphics/items/icons/balm_mushroom.png differ
diff --git a/graphics/items/icons/banettite.png b/graphics/items/icons/banettite.png
new file mode 100644
index 0000000000..7b3565ba6b
Binary files /dev/null and b/graphics/items/icons/banettite.png differ
diff --git a/graphics/items/icons/basement_key.png b/graphics/items/icons/basement_key.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/battle_stat_item.png b/graphics/items/icons/battle_stat_item.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/bead_mail.png b/graphics/items/icons/bead_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/beast_ball.png b/graphics/items/icons/beast_ball.png
new file mode 100644
index 0000000000..3d25009fc3
Binary files /dev/null and b/graphics/items/icons/beast_ball.png differ
diff --git a/graphics/items/icons/beedrillite.png b/graphics/items/icons/beedrillite.png
new file mode 100644
index 0000000000..260c5834cf
Binary files /dev/null and b/graphics/items/icons/beedrillite.png differ
diff --git a/graphics/items/icons/belue_berry.png b/graphics/items/icons/belue_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/berry_juice.png b/graphics/items/icons/berry_juice.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/berry_pouch.png b/graphics/items/icons/berry_pouch.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/berry_sweet.png b/graphics/items/icons/berry_sweet.png
new file mode 100644
index 0000000000..0c0f11dabd
Binary files /dev/null and b/graphics/items/icons/berry_sweet.png differ
diff --git a/graphics/items/icons/bicycle.png b/graphics/items/icons/bicycle.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/big_malasada.png b/graphics/items/icons/big_malasada.png
new file mode 100755
index 0000000000..d24cd9e00d
Binary files /dev/null and b/graphics/items/icons/big_malasada.png differ
diff --git a/graphics/items/icons/big_mushroom.png b/graphics/items/icons/big_mushroom.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/big_nugget.png b/graphics/items/icons/big_nugget.png
new file mode 100644
index 0000000000..3b30d2a7de
Binary files /dev/null and b/graphics/items/icons/big_nugget.png differ
diff --git a/graphics/items/icons/big_pearl.png b/graphics/items/icons/big_pearl.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/big_root.png b/graphics/items/icons/big_root.png
new file mode 100644
index 0000000000..e857cc5f30
Binary files /dev/null and b/graphics/items/icons/big_root.png differ
diff --git a/graphics/items/icons/bike_voucher.png b/graphics/items/icons/bike_voucher.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/binding_band.png b/graphics/items/icons/binding_band.png
new file mode 100644
index 0000000000..9930640ef1
Binary files /dev/null and b/graphics/items/icons/binding_band.png differ
diff --git a/graphics/items/icons/black_apricorn.png b/graphics/items/icons/black_apricorn.png
new file mode 100755
index 0000000000..c80707e067
Binary files /dev/null and b/graphics/items/icons/black_apricorn.png differ
diff --git a/graphics/items/icons/black_belt.png b/graphics/items/icons/black_belt.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/black_glasses.png b/graphics/items/icons/black_glasses.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/black_sludge.png b/graphics/items/icons/black_sludge.png
new file mode 100644
index 0000000000..2e1fac755f
Binary files /dev/null and b/graphics/items/icons/black_sludge.png differ
diff --git a/graphics/items/icons/blastoisinite.png b/graphics/items/icons/blastoisinite.png
new file mode 100644
index 0000000000..34b8233d9d
Binary files /dev/null and b/graphics/items/icons/blastoisinite.png differ
diff --git a/graphics/items/icons/blazikenite.png b/graphics/items/icons/blazikenite.png
new file mode 100644
index 0000000000..f387154de3
Binary files /dev/null and b/graphics/items/icons/blazikenite.png differ
diff --git a/graphics/items/icons/blue_apricorn.png b/graphics/items/icons/blue_apricorn.png
new file mode 100755
index 0000000000..35d0ed23b2
Binary files /dev/null and b/graphics/items/icons/blue_apricorn.png differ
diff --git a/graphics/items/icons/blue_orb.png b/graphics/items/icons/blue_orb.png
new file mode 100644
index 0000000000..14374bf1d6
Binary files /dev/null and b/graphics/items/icons/blue_orb.png differ
diff --git a/graphics/items/icons/bluk_berry.png b/graphics/items/icons/bluk_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/blunder_policy.png b/graphics/items/icons/blunder_policy.png
new file mode 100644
index 0000000000..5004ecbcf9
Binary files /dev/null and b/graphics/items/icons/blunder_policy.png differ
diff --git a/graphics/items/icons/bottle_cap.png b/graphics/items/icons/bottle_cap.png
new file mode 100644
index 0000000000..b3f52c4221
Binary files /dev/null and b/graphics/items/icons/bottle_cap.png differ
diff --git a/graphics/items/icons/bright_powder.png b/graphics/items/icons/bright_powder.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/bug_gem.png b/graphics/items/icons/bug_gem.png
new file mode 100644
index 0000000000..0561d24d06
Binary files /dev/null and b/graphics/items/icons/bug_gem.png differ
diff --git a/graphics/items/icons/bug_memory.png b/graphics/items/icons/bug_memory.png
new file mode 100755
index 0000000000..5c4c090988
Binary files /dev/null and b/graphics/items/icons/bug_memory.png differ
diff --git a/graphics/items/icons/buginium_z.png b/graphics/items/icons/buginium_z.png
new file mode 100644
index 0000000000..99df0ef3ff
Binary files /dev/null and b/graphics/items/icons/buginium_z.png differ
diff --git a/graphics/items/icons/burn_drive.png b/graphics/items/icons/burn_drive.png
new file mode 100644
index 0000000000..c83fbd3358
Binary files /dev/null and b/graphics/items/icons/burn_drive.png differ
diff --git a/graphics/items/icons/cameruptite.png b/graphics/items/icons/cameruptite.png
new file mode 100644
index 0000000000..f064b6da2e
Binary files /dev/null and b/graphics/items/icons/cameruptite.png differ
diff --git a/graphics/items/icons/card_key.png b/graphics/items/icons/card_key.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/casteliacone.png b/graphics/items/icons/casteliacone.png
new file mode 100644
index 0000000000..47691d6238
Binary files /dev/null and b/graphics/items/icons/casteliacone.png differ
diff --git a/graphics/items/icons/catching_charm.png b/graphics/items/icons/catching_charm.png
new file mode 100644
index 0000000000..fbdf64be35
Binary files /dev/null and b/graphics/items/icons/catching_charm.png differ
diff --git a/graphics/items/icons/cell_battery.png b/graphics/items/icons/cell_battery.png
new file mode 100755
index 0000000000..6183bdb085
Binary files /dev/null and b/graphics/items/icons/cell_battery.png differ
diff --git a/graphics/items/icons/charcoal.png b/graphics/items/icons/charcoal.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/charizardite_x.png b/graphics/items/icons/charizardite_x.png
new file mode 100644
index 0000000000..a2986c638f
Binary files /dev/null and b/graphics/items/icons/charizardite_x.png differ
diff --git a/graphics/items/icons/charizardite_y.png b/graphics/items/icons/charizardite_y.png
new file mode 100644
index 0000000000..f193100ed6
Binary files /dev/null and b/graphics/items/icons/charizardite_y.png differ
diff --git a/graphics/items/icons/charti_berry.png b/graphics/items/icons/charti_berry.png
new file mode 100755
index 0000000000..8848e18d4f
Binary files /dev/null and b/graphics/items/icons/charti_berry.png differ
diff --git a/graphics/items/icons/cheri_berry.png b/graphics/items/icons/cheri_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/cherish_ball.png b/graphics/items/icons/cherish_ball.png
new file mode 100644
index 0000000000..7efdf22dc5
Binary files /dev/null and b/graphics/items/icons/cherish_ball.png differ
diff --git a/graphics/items/icons/chesto_berry.png b/graphics/items/icons/chesto_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/chilan_berry.png b/graphics/items/icons/chilan_berry.png
new file mode 100755
index 0000000000..d1516f7323
Binary files /dev/null and b/graphics/items/icons/chilan_berry.png differ
diff --git a/graphics/items/icons/chill_drive.png b/graphics/items/icons/chill_drive.png
new file mode 100644
index 0000000000..a2c7e98a68
Binary files /dev/null and b/graphics/items/icons/chill_drive.png differ
diff --git a/graphics/items/icons/chipped_pot.png b/graphics/items/icons/chipped_pot.png
new file mode 100644
index 0000000000..c77c8b90b4
Binary files /dev/null and b/graphics/items/icons/chipped_pot.png differ
diff --git a/graphics/items/icons/choice_band.png b/graphics/items/icons/choice_band.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/choice_scarf.png b/graphics/items/icons/choice_scarf.png
new file mode 100644
index 0000000000..51157fcc22
Binary files /dev/null and b/graphics/items/icons/choice_scarf.png differ
diff --git a/graphics/items/icons/choice_specs.png b/graphics/items/icons/choice_specs.png
new file mode 100644
index 0000000000..6c64cb26e4
Binary files /dev/null and b/graphics/items/icons/choice_specs.png differ
diff --git a/graphics/items/icons/chople_berry.png b/graphics/items/icons/chople_berry.png
new file mode 100755
index 0000000000..3fa84f379a
Binary files /dev/null and b/graphics/items/icons/chople_berry.png differ
diff --git a/graphics/items/icons/claw_fossil.png b/graphics/items/icons/claw_fossil.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/cleanse_tag.png b/graphics/items/icons/cleanse_tag.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/clever_feather.png b/graphics/items/icons/clever_feather.png
new file mode 100644
index 0000000000..3cc0a3d5f4
Binary files /dev/null and b/graphics/items/icons/clever_feather.png differ
diff --git a/graphics/items/icons/clover_sweet.png b/graphics/items/icons/clover_sweet.png
new file mode 100644
index 0000000000..7b9e7f463f
Binary files /dev/null and b/graphics/items/icons/clover_sweet.png differ
diff --git a/graphics/items/icons/coba_berry.png b/graphics/items/icons/coba_berry.png
new file mode 100755
index 0000000000..5ac21683e0
Binary files /dev/null and b/graphics/items/icons/coba_berry.png differ
diff --git a/graphics/items/icons/coin_case.png b/graphics/items/icons/coin_case.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/colbur_berry.png b/graphics/items/icons/colbur_berry.png
new file mode 100755
index 0000000000..56d46a52a2
Binary files /dev/null and b/graphics/items/icons/colbur_berry.png differ
diff --git a/graphics/items/icons/comet_shard.png b/graphics/items/icons/comet_shard.png
new file mode 100644
index 0000000000..7d6788b614
Binary files /dev/null and b/graphics/items/icons/comet_shard.png differ
diff --git a/graphics/items/icons/contest_pass.png b/graphics/items/icons/contest_pass.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/cornn_berry.png b/graphics/items/icons/cornn_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/cover_fossil.png b/graphics/items/icons/cover_fossil.png
new file mode 100755
index 0000000000..bc8bbe69b5
Binary files /dev/null and b/graphics/items/icons/cover_fossil.png differ
diff --git a/graphics/items/icons/cracked_pot.png b/graphics/items/icons/cracked_pot.png
new file mode 100644
index 0000000000..ffe570ad5c
Binary files /dev/null and b/graphics/items/icons/cracked_pot.png differ
diff --git a/graphics/items/icons/custap_berry.png b/graphics/items/icons/custap_berry.png
new file mode 100755
index 0000000000..3fa594667d
Binary files /dev/null and b/graphics/items/icons/custap_berry.png differ
diff --git a/graphics/items/icons/damp_rock.png b/graphics/items/icons/damp_rock.png
new file mode 100644
index 0000000000..fe908739e5
Binary files /dev/null and b/graphics/items/icons/damp_rock.png differ
diff --git a/graphics/items/icons/dark_gem.png b/graphics/items/icons/dark_gem.png
new file mode 100644
index 0000000000..947f041674
Binary files /dev/null and b/graphics/items/icons/dark_gem.png differ
diff --git a/graphics/items/icons/dark_memory.png b/graphics/items/icons/dark_memory.png
new file mode 100755
index 0000000000..258bd309bf
Binary files /dev/null and b/graphics/items/icons/dark_memory.png differ
diff --git a/graphics/items/icons/darkinium_z.png b/graphics/items/icons/darkinium_z.png
new file mode 100644
index 0000000000..b1a89e2092
Binary files /dev/null and b/graphics/items/icons/darkinium_z.png differ
diff --git a/graphics/items/icons/dawn_stone.png b/graphics/items/icons/dawn_stone.png
new file mode 100755
index 0000000000..0465d18bad
Binary files /dev/null and b/graphics/items/icons/dawn_stone.png differ
diff --git a/graphics/items/icons/decidium_z.png b/graphics/items/icons/decidium_z.png
new file mode 100644
index 0000000000..8f5596df35
Binary files /dev/null and b/graphics/items/icons/decidium_z.png differ
diff --git a/graphics/items/icons/deep_sea_scale.png b/graphics/items/icons/deep_sea_scale.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/deep_sea_tooth.png b/graphics/items/icons/deep_sea_tooth.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/destiny_knot.png b/graphics/items/icons/destiny_knot.png
new file mode 100644
index 0000000000..ceeb38d5c7
Binary files /dev/null and b/graphics/items/icons/destiny_knot.png differ
diff --git a/graphics/items/icons/devon_goods.png b/graphics/items/icons/devon_parts.png
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icons/devon_goods.png
rename to graphics/items/icons/devon_parts.png
diff --git a/graphics/items/icons/devon_scope.png b/graphics/items/icons/devon_scope.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/diancite.png b/graphics/items/icons/diancite.png
new file mode 100644
index 0000000000..5bb89f3edd
Binary files /dev/null and b/graphics/items/icons/diancite.png differ
diff --git a/graphics/items/icons/dive_ball.png b/graphics/items/icons/dive_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/dna_splicers.png b/graphics/items/icons/dna_splicers.png
new file mode 100644
index 0000000000..9fc055de33
Binary files /dev/null and b/graphics/items/icons/dna_splicers.png differ
diff --git a/graphics/items/icons/dome_fossil.png b/graphics/items/icons/dome_fossil.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/douse_drive.png b/graphics/items/icons/douse_drive.png
new file mode 100644
index 0000000000..eee5ae35f1
Binary files /dev/null and b/graphics/items/icons/douse_drive.png differ
diff --git a/graphics/items/icons/itemfinder.png b/graphics/items/icons/dowsing_machine.png
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icons/itemfinder.png
rename to graphics/items/icons/dowsing_machine.png
diff --git a/graphics/items/icons/draco_plate.png b/graphics/items/icons/draco_plate.png
new file mode 100644
index 0000000000..9b08c31c8d
Binary files /dev/null and b/graphics/items/icons/draco_plate.png differ
diff --git a/graphics/items/icons/dragon_fang.png b/graphics/items/icons/dragon_fang.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/dragon_gem.png b/graphics/items/icons/dragon_gem.png
new file mode 100644
index 0000000000..2d41c858c1
Binary files /dev/null and b/graphics/items/icons/dragon_gem.png differ
diff --git a/graphics/items/icons/dragon_memory.png b/graphics/items/icons/dragon_memory.png
new file mode 100755
index 0000000000..d073dace31
Binary files /dev/null and b/graphics/items/icons/dragon_memory.png differ
diff --git a/graphics/items/icons/dragon_scale.png b/graphics/items/icons/dragon_scale.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/dragonium_z.png b/graphics/items/icons/dragonium_z.png
new file mode 100644
index 0000000000..2659b507cd
Binary files /dev/null and b/graphics/items/icons/dragonium_z.png differ
diff --git a/graphics/items/icons/dread_plate.png b/graphics/items/icons/dread_plate.png
new file mode 100644
index 0000000000..f93493f97b
Binary files /dev/null and b/graphics/items/icons/dread_plate.png differ
diff --git a/graphics/items/icons/dream_ball.png b/graphics/items/icons/dream_ball.png
new file mode 100644
index 0000000000..e429add9e0
Binary files /dev/null and b/graphics/items/icons/dream_ball.png differ
diff --git a/graphics/items/icons/dream_mail.png b/graphics/items/icons/dream_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/dubious_disc.png b/graphics/items/icons/dubious_disc.png
new file mode 100755
index 0000000000..bf2ab2fc0f
Binary files /dev/null and b/graphics/items/icons/dubious_disc.png differ
diff --git a/graphics/items/icons/durin_berry.png b/graphics/items/icons/durin_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/dusk_ball.png b/graphics/items/icons/dusk_ball.png
new file mode 100644
index 0000000000..a723c095ba
Binary files /dev/null and b/graphics/items/icons/dusk_ball.png differ
diff --git a/graphics/items/icons/dusk_stone.png b/graphics/items/icons/dusk_stone.png
new file mode 100755
index 0000000000..e928b25167
Binary files /dev/null and b/graphics/items/icons/dusk_stone.png differ
diff --git a/graphics/items/icons/dynamax_band.png b/graphics/items/icons/dynamax_band.png
new file mode 100644
index 0000000000..726fd069b1
Binary files /dev/null and b/graphics/items/icons/dynamax_band.png differ
diff --git a/graphics/items/icons/dynamax_candy.png b/graphics/items/icons/dynamax_candy.png
new file mode 100644
index 0000000000..8c3c3edf11
Binary files /dev/null and b/graphics/items/icons/dynamax_candy.png differ
diff --git a/graphics/items/icons/dynite_ore.png b/graphics/items/icons/dynite_ore.png
new file mode 100644
index 0000000000..3599f6a476
Binary files /dev/null and b/graphics/items/icons/dynite_ore.png differ
diff --git a/graphics/items/icons/earth_plate.png b/graphics/items/icons/earth_plate.png
new file mode 100644
index 0000000000..688b24be35
Binary files /dev/null and b/graphics/items/icons/earth_plate.png differ
diff --git a/graphics/items/icons/eevium_z.png b/graphics/items/icons/eevium_z.png
new file mode 100644
index 0000000000..1ea894c5fb
Binary files /dev/null and b/graphics/items/icons/eevium_z.png differ
diff --git a/graphics/items/icons/eject_button.png b/graphics/items/icons/eject_button.png
new file mode 100755
index 0000000000..a0492ed6e0
Binary files /dev/null and b/graphics/items/icons/eject_button.png differ
diff --git a/graphics/items/icons/eject_pack.png b/graphics/items/icons/eject_pack.png
new file mode 100644
index 0000000000..54a590ed9c
Binary files /dev/null and b/graphics/items/icons/eject_pack.png differ
diff --git a/graphics/items/icons/electirizer.png b/graphics/items/icons/electirizer.png
new file mode 100755
index 0000000000..73f6f8f26e
Binary files /dev/null and b/graphics/items/icons/electirizer.png differ
diff --git a/graphics/items/icons/electric_gem.png b/graphics/items/icons/electric_gem.png
new file mode 100644
index 0000000000..88e604f182
Binary files /dev/null and b/graphics/items/icons/electric_gem.png differ
diff --git a/graphics/items/icons/electric_memory.png b/graphics/items/icons/electric_memory.png
new file mode 100755
index 0000000000..ce9a8f3624
Binary files /dev/null and b/graphics/items/icons/electric_memory.png differ
diff --git a/graphics/items/icons/electric_seed.png b/graphics/items/icons/electric_seed.png
new file mode 100644
index 0000000000..cdcac30ae3
Binary files /dev/null and b/graphics/items/icons/electric_seed.png differ
diff --git a/graphics/items/icons/electrium_z.png b/graphics/items/icons/electrium_z.png
new file mode 100644
index 0000000000..8ca1d826e4
Binary files /dev/null and b/graphics/items/icons/electrium_z.png differ
diff --git a/graphics/items/icons/energy_root.png b/graphics/items/icons/energy_root.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/enigma_berry.png b/graphics/items/icons/enigma_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/eon_ticket.png b/graphics/items/icons/eon_ticket.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/escape_rope.png b/graphics/items/icons/escape_rope.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/ether.png b/graphics/items/icons/ether.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/everstone.png b/graphics/items/icons/everstone.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/eviolite.png b/graphics/items/icons/eviolite.png
new file mode 100644
index 0000000000..c08cc59506
Binary files /dev/null and b/graphics/items/icons/eviolite.png differ
diff --git a/graphics/items/icons/exp_candy_l.png b/graphics/items/icons/exp_candy_l.png
new file mode 100644
index 0000000000..e63abfeaf3
Binary files /dev/null and b/graphics/items/icons/exp_candy_l.png differ
diff --git a/graphics/items/icons/exp_candy_m.png b/graphics/items/icons/exp_candy_m.png
new file mode 100644
index 0000000000..74cd8a0841
Binary files /dev/null and b/graphics/items/icons/exp_candy_m.png differ
diff --git a/graphics/items/icons/exp_candy_s.png b/graphics/items/icons/exp_candy_s.png
new file mode 100644
index 0000000000..ae37524f8e
Binary files /dev/null and b/graphics/items/icons/exp_candy_s.png differ
diff --git a/graphics/items/icons/exp_candy_xl.png b/graphics/items/icons/exp_candy_xl.png
new file mode 100644
index 0000000000..abc1541ed3
Binary files /dev/null and b/graphics/items/icons/exp_candy_xl.png differ
diff --git a/graphics/items/icons/exp_candy_xs.png b/graphics/items/icons/exp_candy_xs.png
new file mode 100644
index 0000000000..6faac9fc00
Binary files /dev/null and b/graphics/items/icons/exp_candy_xs.png differ
diff --git a/graphics/items/icons/exp_charm.png b/graphics/items/icons/exp_charm.png
new file mode 100644
index 0000000000..2b014c25e2
Binary files /dev/null and b/graphics/items/icons/exp_charm.png differ
diff --git a/graphics/items/icons/exp_share.png b/graphics/items/icons/exp_share.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/expert_belt.png b/graphics/items/icons/expert_belt.png
new file mode 100644
index 0000000000..bc00454907
Binary files /dev/null and b/graphics/items/icons/expert_belt.png differ
diff --git a/graphics/items/icons/fab_mail.png b/graphics/items/icons/fab_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/fairium_z.png b/graphics/items/icons/fairium_z.png
new file mode 100644
index 0000000000..fab5197aa1
Binary files /dev/null and b/graphics/items/icons/fairium_z.png differ
diff --git a/graphics/items/icons/fairy_gem.png b/graphics/items/icons/fairy_gem.png
new file mode 100644
index 0000000000..871f74426d
Binary files /dev/null and b/graphics/items/icons/fairy_gem.png differ
diff --git a/graphics/items/icons/fairy_memory.png b/graphics/items/icons/fairy_memory.png
new file mode 100755
index 0000000000..fba8691280
Binary files /dev/null and b/graphics/items/icons/fairy_memory.png differ
diff --git a/graphics/items/icons/fame_checker.png b/graphics/items/icons/fame_checker.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/fast_ball.png b/graphics/items/icons/fast_ball.png
new file mode 100644
index 0000000000..2eb8ddd02a
Binary files /dev/null and b/graphics/items/icons/fast_ball.png differ
diff --git a/graphics/items/icons/fighting_gem.png b/graphics/items/icons/fighting_gem.png
new file mode 100644
index 0000000000..7f4fc8b97d
Binary files /dev/null and b/graphics/items/icons/fighting_gem.png differ
diff --git a/graphics/items/icons/fighting_memory.png b/graphics/items/icons/fighting_memory.png
new file mode 100755
index 0000000000..ad21a2d078
Binary files /dev/null and b/graphics/items/icons/fighting_memory.png differ
diff --git a/graphics/items/icons/fightinium_z.png b/graphics/items/icons/fightinium_z.png
new file mode 100644
index 0000000000..588c493f82
Binary files /dev/null and b/graphics/items/icons/fightinium_z.png differ
diff --git a/graphics/items/icons/figy_berry.png b/graphics/items/icons/figy_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/fire_gem.png b/graphics/items/icons/fire_gem.png
new file mode 100644
index 0000000000..deb8979bd8
Binary files /dev/null and b/graphics/items/icons/fire_gem.png differ
diff --git a/graphics/items/icons/fire_memory.png b/graphics/items/icons/fire_memory.png
new file mode 100755
index 0000000000..33116aed12
Binary files /dev/null and b/graphics/items/icons/fire_memory.png differ
diff --git a/graphics/items/icons/fire_stone.png b/graphics/items/icons/fire_stone.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/firium_z.png b/graphics/items/icons/firium_z.png
new file mode 100644
index 0000000000..84fb8eefef
Binary files /dev/null and b/graphics/items/icons/firium_z.png differ
diff --git a/graphics/items/icons/fist_plate.png b/graphics/items/icons/fist_plate.png
new file mode 100644
index 0000000000..0142938d51
Binary files /dev/null and b/graphics/items/icons/fist_plate.png differ
diff --git a/graphics/items/icons/flame_orb.png b/graphics/items/icons/flame_orb.png
new file mode 100644
index 0000000000..e5e576f8af
Binary files /dev/null and b/graphics/items/icons/flame_orb.png differ
diff --git a/graphics/items/icons/flame_plate.png b/graphics/items/icons/flame_plate.png
new file mode 100644
index 0000000000..6f78e5d020
Binary files /dev/null and b/graphics/items/icons/flame_plate.png differ
diff --git a/graphics/items/icons/float_stone.png b/graphics/items/icons/float_stone.png
new file mode 100644
index 0000000000..61f096fc36
Binary files /dev/null and b/graphics/items/icons/float_stone.png differ
diff --git a/graphics/items/icons/flower_sweet.png b/graphics/items/icons/flower_sweet.png
new file mode 100644
index 0000000000..97f6c4e443
Binary files /dev/null and b/graphics/items/icons/flower_sweet.png differ
diff --git a/graphics/items/icons/fluffy_tail.png b/graphics/items/icons/fluffy_tail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/flute.png b/graphics/items/icons/flute.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/flying_gem.png b/graphics/items/icons/flying_gem.png
new file mode 100644
index 0000000000..563e80f3bf
Binary files /dev/null and b/graphics/items/icons/flying_gem.png differ
diff --git a/graphics/items/icons/flying_memory.png b/graphics/items/icons/flying_memory.png
new file mode 100755
index 0000000000..da413ba1ff
Binary files /dev/null and b/graphics/items/icons/flying_memory.png differ
diff --git a/graphics/items/icons/flyinium_z.png b/graphics/items/icons/flyinium_z.png
new file mode 100644
index 0000000000..aadaf07061
Binary files /dev/null and b/graphics/items/icons/flyinium_z.png differ
diff --git a/graphics/items/icons/focus_band.png b/graphics/items/icons/focus_band.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/focus_sash.png b/graphics/items/icons/focus_sash.png
new file mode 100644
index 0000000000..e0df9798ef
Binary files /dev/null and b/graphics/items/icons/focus_sash.png differ
diff --git a/graphics/items/icons/fossilized_bird.png b/graphics/items/icons/fossilized_bird.png
new file mode 100644
index 0000000000..725b5f891f
Binary files /dev/null and b/graphics/items/icons/fossilized_bird.png differ
diff --git a/graphics/items/icons/fossilized_dino.png b/graphics/items/icons/fossilized_dino.png
new file mode 100644
index 0000000000..61b1907fdc
Binary files /dev/null and b/graphics/items/icons/fossilized_dino.png differ
diff --git a/graphics/items/icons/fossilized_drake.png b/graphics/items/icons/fossilized_drake.png
new file mode 100644
index 0000000000..63adc30d88
Binary files /dev/null and b/graphics/items/icons/fossilized_drake.png differ
diff --git a/graphics/items/icons/fossilized_fish.png b/graphics/items/icons/fossilized_fish.png
new file mode 100644
index 0000000000..c2de7c009a
Binary files /dev/null and b/graphics/items/icons/fossilized_fish.png differ
diff --git a/graphics/items/icons/fresh_water.png b/graphics/items/icons/fresh_water.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/friend_ball.png b/graphics/items/icons/friend_ball.png
new file mode 100644
index 0000000000..7c2c8ce147
Binary files /dev/null and b/graphics/items/icons/friend_ball.png differ
diff --git a/graphics/items/icons/full_heal.png b/graphics/items/icons/full_heal.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/full_incense.png b/graphics/items/icons/full_incense.png
new file mode 100755
index 0000000000..230927e085
Binary files /dev/null and b/graphics/items/icons/full_incense.png differ
diff --git a/graphics/items/icons/galarica_cuff.png b/graphics/items/icons/galarica_cuff.png
new file mode 100644
index 0000000000..a99bedc6e2
Binary files /dev/null and b/graphics/items/icons/galarica_cuff.png differ
diff --git a/graphics/items/icons/galarica_twig.png b/graphics/items/icons/galarica_twig.png
new file mode 100644
index 0000000000..28fabf7be5
Binary files /dev/null and b/graphics/items/icons/galarica_twig.png differ
diff --git a/graphics/items/icons/galarica_wreath.png b/graphics/items/icons/galarica_wreath.png
new file mode 100644
index 0000000000..21c094d65b
Binary files /dev/null and b/graphics/items/icons/galarica_wreath.png differ
diff --git a/graphics/items/icons/galladite.png b/graphics/items/icons/galladite.png
new file mode 100644
index 0000000000..827b616cc3
Binary files /dev/null and b/graphics/items/icons/galladite.png differ
diff --git a/graphics/items/icons/ganlon_berry.png b/graphics/items/icons/ganlon_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/garchompite.png b/graphics/items/icons/garchompite.png
new file mode 100644
index 0000000000..0be15d5add
Binary files /dev/null and b/graphics/items/icons/garchompite.png differ
diff --git a/graphics/items/icons/gardevoirite.png b/graphics/items/icons/gardevoirite.png
new file mode 100644
index 0000000000..4bb3a9a502
Binary files /dev/null and b/graphics/items/icons/gardevoirite.png differ
diff --git a/graphics/items/icons/gem.png b/graphics/items/icons/gem.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/gengarite.png b/graphics/items/icons/gengarite.png
new file mode 100644
index 0000000000..22ac015b9a
Binary files /dev/null and b/graphics/items/icons/gengarite.png differ
diff --git a/graphics/items/icons/genius_feather.png b/graphics/items/icons/genius_feather.png
new file mode 100644
index 0000000000..5b27a029e0
Binary files /dev/null and b/graphics/items/icons/genius_feather.png differ
diff --git a/graphics/items/icons/ghost_gem.png b/graphics/items/icons/ghost_gem.png
new file mode 100644
index 0000000000..96e320e219
Binary files /dev/null and b/graphics/items/icons/ghost_gem.png differ
diff --git a/graphics/items/icons/ghost_memory.png b/graphics/items/icons/ghost_memory.png
new file mode 100755
index 0000000000..3041643aaa
Binary files /dev/null and b/graphics/items/icons/ghost_memory.png differ
diff --git a/graphics/items/icons/ghostium_z.png b/graphics/items/icons/ghostium_z.png
new file mode 100644
index 0000000000..b3b9a90898
Binary files /dev/null and b/graphics/items/icons/ghostium_z.png differ
diff --git a/graphics/items/icons/glalitite.png b/graphics/items/icons/glalitite.png
new file mode 100644
index 0000000000..cea93a2cb3
Binary files /dev/null and b/graphics/items/icons/glalitite.png differ
diff --git a/graphics/items/icons/glitter_mail.png b/graphics/items/icons/glitter_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/go_goggles.png b/graphics/items/icons/go_goggles.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/gold_teeth.png b/graphics/items/icons/gold_teeth.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/good_rod.png b/graphics/items/icons/good_rod.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/gracidea.png b/graphics/items/icons/gracidea.png
new file mode 100755
index 0000000000..31bac3846c
Binary files /dev/null and b/graphics/items/icons/gracidea.png differ
diff --git a/graphics/items/icons/grass_gem.png b/graphics/items/icons/grass_gem.png
new file mode 100644
index 0000000000..df57119b27
Binary files /dev/null and b/graphics/items/icons/grass_gem.png differ
diff --git a/graphics/items/icons/grass_memory.png b/graphics/items/icons/grass_memory.png
new file mode 100755
index 0000000000..646568c412
Binary files /dev/null and b/graphics/items/icons/grass_memory.png differ
diff --git a/graphics/items/icons/grassium_z.png b/graphics/items/icons/grassium_z.png
new file mode 100644
index 0000000000..6c62989301
Binary files /dev/null and b/graphics/items/icons/grassium_z.png differ
diff --git a/graphics/items/icons/grassy_seed.png b/graphics/items/icons/grassy_seed.png
new file mode 100644
index 0000000000..31f30aeb59
Binary files /dev/null and b/graphics/items/icons/grassy_seed.png differ
diff --git a/graphics/items/icons/great_ball.png b/graphics/items/icons/great_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/green_apricorn.png b/graphics/items/icons/green_apricorn.png
new file mode 100755
index 0000000000..dc821541bc
Binary files /dev/null and b/graphics/items/icons/green_apricorn.png differ
diff --git a/graphics/items/icons/grepa_berry.png b/graphics/items/icons/grepa_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/grip_claw.png b/graphics/items/icons/grip_claw.png
new file mode 100644
index 0000000000..d76c6b75c2
Binary files /dev/null and b/graphics/items/icons/grip_claw.png differ
diff --git a/graphics/items/icons/griseous_orb.png b/graphics/items/icons/griseous_orb.png
new file mode 100644
index 0000000000..5140ea3acd
Binary files /dev/null and b/graphics/items/icons/griseous_orb.png differ
diff --git a/graphics/items/icons/ground_gem.png b/graphics/items/icons/ground_gem.png
new file mode 100644
index 0000000000..27a8bf69d5
Binary files /dev/null and b/graphics/items/icons/ground_gem.png differ
diff --git a/graphics/items/icons/ground_memory.png b/graphics/items/icons/ground_memory.png
new file mode 100755
index 0000000000..0f9f31734d
Binary files /dev/null and b/graphics/items/icons/ground_memory.png differ
diff --git a/graphics/items/icons/groundium_z.png b/graphics/items/icons/groundium_z.png
new file mode 100644
index 0000000000..1d76c0fd0e
Binary files /dev/null and b/graphics/items/icons/groundium_z.png differ
diff --git a/graphics/items/icons/gyaradosite.png b/graphics/items/icons/gyaradosite.png
new file mode 100644
index 0000000000..5a6278df27
Binary files /dev/null and b/graphics/items/icons/gyaradosite.png differ
diff --git a/graphics/items/icons/haban_berry.png b/graphics/items/icons/haban_berry.png
new file mode 100755
index 0000000000..f413ea9e14
Binary files /dev/null and b/graphics/items/icons/haban_berry.png differ
diff --git a/graphics/items/icons/harbor_mail.png b/graphics/items/icons/harbor_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/hard_stone.png b/graphics/items/icons/hard_stone.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/heal_ball.png b/graphics/items/icons/heal_ball.png
new file mode 100644
index 0000000000..765c7326c0
Binary files /dev/null and b/graphics/items/icons/heal_ball.png differ
diff --git a/graphics/items/icons/health_feather.png b/graphics/items/icons/health_feather.png
new file mode 100644
index 0000000000..584cc4f134
Binary files /dev/null and b/graphics/items/icons/health_feather.png differ
diff --git a/graphics/items/icons/heart_scale.png b/graphics/items/icons/heart_scale.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/heat_rock.png b/graphics/items/icons/heat_rock.png
new file mode 100644
index 0000000000..60eae81696
Binary files /dev/null and b/graphics/items/icons/heat_rock.png differ
diff --git a/graphics/items/icons/heavy_ball.png b/graphics/items/icons/heavy_ball.png
new file mode 100644
index 0000000000..c66678ebb8
Binary files /dev/null and b/graphics/items/icons/heavy_ball.png differ
diff --git a/graphics/items/icons/heavy_duty_boots.png b/graphics/items/icons/heavy_duty_boots.png
new file mode 100644
index 0000000000..a42596c458
Binary files /dev/null and b/graphics/items/icons/heavy_duty_boots.png differ
diff --git a/graphics/items/icons/helix_fossil.png b/graphics/items/icons/helix_fossil.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/heracronite.png b/graphics/items/icons/heracronite.png
new file mode 100644
index 0000000000..400a876847
Binary files /dev/null and b/graphics/items/icons/heracronite.png differ
diff --git a/graphics/items/icons/hm.png b/graphics/items/icons/hm.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/hondew_berry.png b/graphics/items/icons/hondew_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/honey.png b/graphics/items/icons/honey.png
new file mode 100644
index 0000000000..386b520950
Binary files /dev/null and b/graphics/items/icons/honey.png differ
diff --git a/graphics/items/icons/houndoominite.png b/graphics/items/icons/houndoominite.png
new file mode 100644
index 0000000000..bca28d336c
Binary files /dev/null and b/graphics/items/icons/houndoominite.png differ
diff --git a/graphics/items/icons/hp_up.png b/graphics/items/icons/hp_up.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/iapapa_berry.png b/graphics/items/icons/iapapa_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/ice_gem.png b/graphics/items/icons/ice_gem.png
new file mode 100644
index 0000000000..db87018fea
Binary files /dev/null and b/graphics/items/icons/ice_gem.png differ
diff --git a/graphics/items/icons/ice_memory.png b/graphics/items/icons/ice_memory.png
new file mode 100755
index 0000000000..c0f7cd76e8
Binary files /dev/null and b/graphics/items/icons/ice_memory.png differ
diff --git a/graphics/items/icons/ice_stone.png b/graphics/items/icons/ice_stone.png
new file mode 100755
index 0000000000..ee5309544e
Binary files /dev/null and b/graphics/items/icons/ice_stone.png differ
diff --git a/graphics/items/icons/icicle_plate.png b/graphics/items/icons/icicle_plate.png
new file mode 100644
index 0000000000..2d3e27bbba
Binary files /dev/null and b/graphics/items/icons/icicle_plate.png differ
diff --git a/graphics/items/icons/icium_z.png b/graphics/items/icons/icium_z.png
new file mode 100644
index 0000000000..7cffbf32c8
Binary files /dev/null and b/graphics/items/icons/icium_z.png differ
diff --git a/graphics/items/icons/icy_rock.png b/graphics/items/icons/icy_rock.png
new file mode 100644
index 0000000000..800b12ec87
Binary files /dev/null and b/graphics/items/icons/icy_rock.png differ
diff --git a/graphics/items/icons/in_battle_herb.png b/graphics/items/icons/in_battle_herb.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/incinium_z.png b/graphics/items/icons/incinium_z.png
new file mode 100644
index 0000000000..62dd7c6922
Binary files /dev/null and b/graphics/items/icons/incinium_z.png differ
diff --git a/graphics/items/icons/insect_plate.png b/graphics/items/icons/insect_plate.png
new file mode 100644
index 0000000000..993e420da1
Binary files /dev/null and b/graphics/items/icons/insect_plate.png differ
diff --git a/graphics/items/icons/iron_ball.png b/graphics/items/icons/iron_ball.png
new file mode 100644
index 0000000000..e1f82bde1d
Binary files /dev/null and b/graphics/items/icons/iron_ball.png differ
diff --git a/graphics/items/icons/iron_plate.png b/graphics/items/icons/iron_plate.png
new file mode 100644
index 0000000000..08a3cb8b99
Binary files /dev/null and b/graphics/items/icons/iron_plate.png differ
diff --git a/graphics/items/icons/jaboca_berry.png b/graphics/items/icons/jaboca_berry.png
new file mode 100755
index 0000000000..da6d029b08
Binary files /dev/null and b/graphics/items/icons/jaboca_berry.png differ
diff --git a/graphics/items/icons/jade_orb.png b/graphics/items/icons/jade_orb.png
new file mode 100644
index 0000000000..cc8468834d
Binary files /dev/null and b/graphics/items/icons/jade_orb.png differ
diff --git a/graphics/items/icons/jaw_fossil.png b/graphics/items/icons/jaw_fossil.png
new file mode 100755
index 0000000000..a52a7579fd
Binary files /dev/null and b/graphics/items/icons/jaw_fossil.png differ
diff --git a/graphics/items/icons/kangaskhanite.png b/graphics/items/icons/kangaskhanite.png
new file mode 100644
index 0000000000..2b614703e3
Binary files /dev/null and b/graphics/items/icons/kangaskhanite.png differ
diff --git a/graphics/items/icons/kasib_berry.png b/graphics/items/icons/kasib_berry.png
new file mode 100755
index 0000000000..c09fa20dec
Binary files /dev/null and b/graphics/items/icons/kasib_berry.png differ
diff --git a/graphics/items/icons/kebia_berry.png b/graphics/items/icons/kebia_berry.png
new file mode 100755
index 0000000000..a4b5a43939
Binary files /dev/null and b/graphics/items/icons/kebia_berry.png differ
diff --git a/graphics/items/icons/kee_berry.png b/graphics/items/icons/kee_berry.png
new file mode 100755
index 0000000000..83749d1b83
Binary files /dev/null and b/graphics/items/icons/kee_berry.png differ
diff --git a/graphics/items/icons/kelpsy_berry.png b/graphics/items/icons/kelpsy_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/key_stone.png b/graphics/items/icons/key_stone.png
new file mode 100644
index 0000000000..efb07d80ee
Binary files /dev/null and b/graphics/items/icons/key_stone.png differ
diff --git a/graphics/items/icons/room1_key.png b/graphics/items/icons/key_to_room_1.png
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icons/room1_key.png
rename to graphics/items/icons/key_to_room_1.png
diff --git a/graphics/items/icons/room2_key.png b/graphics/items/icons/key_to_room_2.png
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icons/room2_key.png
rename to graphics/items/icons/key_to_room_2.png
diff --git a/graphics/items/icons/room4_key.png b/graphics/items/icons/key_to_room_4.png
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icons/room4_key.png
rename to graphics/items/icons/key_to_room_4.png
diff --git a/graphics/items/icons/room6_key.png b/graphics/items/icons/key_to_room_6.png
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icons/room6_key.png
rename to graphics/items/icons/key_to_room_6.png
diff --git a/graphics/items/icons/kings_rock.png b/graphics/items/icons/kings_rock.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/kommonium_z.png b/graphics/items/icons/kommonium_z.png
new file mode 100644
index 0000000000..3883dfd5fe
Binary files /dev/null and b/graphics/items/icons/kommonium_z.png differ
diff --git a/graphics/items/icons/lagging_tail.png b/graphics/items/icons/lagging_tail.png
new file mode 100644
index 0000000000..3299515b6c
Binary files /dev/null and b/graphics/items/icons/lagging_tail.png differ
diff --git a/graphics/items/icons/lansat_berry.png b/graphics/items/icons/lansat_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/large_potion.png b/graphics/items/icons/large_potion.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/latiasite.png b/graphics/items/icons/latiasite.png
new file mode 100644
index 0000000000..af1d357ee5
Binary files /dev/null and b/graphics/items/icons/latiasite.png differ
diff --git a/graphics/items/icons/latiosite.png b/graphics/items/icons/latiosite.png
new file mode 100644
index 0000000000..f6d4e7d237
Binary files /dev/null and b/graphics/items/icons/latiosite.png differ
diff --git a/graphics/items/icons/lava_cookie.png b/graphics/items/icons/lava_cookie.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/lax_incense.png b/graphics/items/icons/lax_incense.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/leaf_stone.png b/graphics/items/icons/leaf_stone.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/stick.png b/graphics/items/icons/leek.png
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icons/stick.png
rename to graphics/items/icons/leek.png
diff --git a/graphics/items/icons/leftovers.png b/graphics/items/icons/leftovers.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/lemonade.png b/graphics/items/icons/lemonade.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/leppa_berry.png b/graphics/items/icons/leppa_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/letter.png b/graphics/items/icons/letter.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/level_ball.png b/graphics/items/icons/level_ball.png
new file mode 100644
index 0000000000..7943f8e858
Binary files /dev/null and b/graphics/items/icons/level_ball.png differ
diff --git a/graphics/items/icons/liechi_berry.png b/graphics/items/icons/liechi_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/life_orb.png b/graphics/items/icons/life_orb.png
new file mode 100644
index 0000000000..9a9ed7c682
Binary files /dev/null and b/graphics/items/icons/life_orb.png differ
diff --git a/graphics/items/icons/lift_key.png b/graphics/items/icons/lift_key.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/light_ball.png b/graphics/items/icons/light_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/light_clay.png b/graphics/items/icons/light_clay.png
new file mode 100644
index 0000000000..7cc3e63801
Binary files /dev/null and b/graphics/items/icons/light_clay.png differ
diff --git a/graphics/items/icons/lopunnite.png b/graphics/items/icons/lopunnite.png
new file mode 100644
index 0000000000..dcd8d95746
Binary files /dev/null and b/graphics/items/icons/lopunnite.png differ
diff --git a/graphics/items/icons/love_ball.png b/graphics/items/icons/love_ball.png
new file mode 100644
index 0000000000..0040eb0de4
Binary files /dev/null and b/graphics/items/icons/love_ball.png differ
diff --git a/graphics/items/icons/love_sweet.png b/graphics/items/icons/love_sweet.png
new file mode 100644
index 0000000000..d2dba09da6
Binary files /dev/null and b/graphics/items/icons/love_sweet.png differ
diff --git a/graphics/items/icons/lucarionite.png b/graphics/items/icons/lucarionite.png
new file mode 100644
index 0000000000..ea4955c8a0
Binary files /dev/null and b/graphics/items/icons/lucarionite.png differ
diff --git a/graphics/items/icons/luck_incense.png b/graphics/items/icons/luck_incense.png
new file mode 100755
index 0000000000..396ab2f613
Binary files /dev/null and b/graphics/items/icons/luck_incense.png differ
diff --git a/graphics/items/icons/lucky_egg.png b/graphics/items/icons/lucky_egg.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/lucky_punch.png b/graphics/items/icons/lucky_punch.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/lum_berry.png b/graphics/items/icons/lum_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/luminous_moss.png b/graphics/items/icons/luminous_moss.png
new file mode 100755
index 0000000000..6ee31c5e1b
Binary files /dev/null and b/graphics/items/icons/luminous_moss.png differ
diff --git a/graphics/items/icons/lumiose_galette.png b/graphics/items/icons/lumiose_galette.png
new file mode 100644
index 0000000000..fd3868ad5b
Binary files /dev/null and b/graphics/items/icons/lumiose_galette.png differ
diff --git a/graphics/items/icons/lunalium_z.png b/graphics/items/icons/lunalium_z.png
new file mode 100644
index 0000000000..d65973d388
Binary files /dev/null and b/graphics/items/icons/lunalium_z.png differ
diff --git a/graphics/items/icons/lure.png b/graphics/items/icons/lure.png
new file mode 100644
index 0000000000..8cc742d63a
Binary files /dev/null and b/graphics/items/icons/lure.png differ
diff --git a/graphics/items/icons/lure_ball.png b/graphics/items/icons/lure_ball.png
new file mode 100644
index 0000000000..765049c75d
Binary files /dev/null and b/graphics/items/icons/lure_ball.png differ
diff --git a/graphics/items/icons/lustrous_orb.png b/graphics/items/icons/lustrous_orb.png
new file mode 100644
index 0000000000..08b452aba9
Binary files /dev/null and b/graphics/items/icons/lustrous_orb.png differ
diff --git a/graphics/items/icons/luxury_ball.png b/graphics/items/icons/luxury_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/lycanium_z.png b/graphics/items/icons/lycanium_z.png
new file mode 100644
index 0000000000..f9e894a389
Binary files /dev/null and b/graphics/items/icons/lycanium_z.png differ
diff --git a/graphics/items/icons/mach_bike.png b/graphics/items/icons/mach_bike.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/macho_brace.png b/graphics/items/icons/macho_brace.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/magma_emblem.png b/graphics/items/icons/magma_emblem.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/magmarizer.png b/graphics/items/icons/magmarizer.png
new file mode 100755
index 0000000000..fcaf04b446
Binary files /dev/null and b/graphics/items/icons/magmarizer.png differ
diff --git a/graphics/items/icons/magnet.png b/graphics/items/icons/magnet.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/mago_berry.png b/graphics/items/icons/mago_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/magost_berry.png b/graphics/items/icons/magost_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/manectite.png b/graphics/items/icons/manectite.png
new file mode 100644
index 0000000000..af70ce0ae1
Binary files /dev/null and b/graphics/items/icons/manectite.png differ
diff --git a/graphics/items/icons/maranga_berry.png b/graphics/items/icons/maranga_berry.png
new file mode 100755
index 0000000000..2551c0167b
Binary files /dev/null and b/graphics/items/icons/maranga_berry.png differ
diff --git a/graphics/items/icons/marshadium_z.png b/graphics/items/icons/marshadium_z.png
new file mode 100644
index 0000000000..fd34d2aa3c
Binary files /dev/null and b/graphics/items/icons/marshadium_z.png differ
diff --git a/graphics/items/icons/master_ball.png b/graphics/items/icons/master_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/mawilite.png b/graphics/items/icons/mawilite.png
new file mode 100644
index 0000000000..8505274fdf
Binary files /dev/null and b/graphics/items/icons/mawilite.png differ
diff --git a/graphics/items/icons/max_honey.png b/graphics/items/icons/max_honey.png
new file mode 100644
index 0000000000..aed9cc0d88
Binary files /dev/null and b/graphics/items/icons/max_honey.png differ
diff --git a/graphics/items/icons/max_mushrooms.png b/graphics/items/icons/max_mushrooms.png
new file mode 100644
index 0000000000..a5ebac8358
Binary files /dev/null and b/graphics/items/icons/max_mushrooms.png differ
diff --git a/graphics/items/icons/max_revive.png b/graphics/items/icons/max_revive.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/meadow_plate.png b/graphics/items/icons/meadow_plate.png
new file mode 100644
index 0000000000..5cec7fc167
Binary files /dev/null and b/graphics/items/icons/meadow_plate.png differ
diff --git a/graphics/items/icons/mech_mail.png b/graphics/items/icons/mech_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/medichamite.png b/graphics/items/icons/medichamite.png
new file mode 100644
index 0000000000..e494b4c03d
Binary files /dev/null and b/graphics/items/icons/medichamite.png differ
diff --git a/graphics/items/icons/mega_bracelet.png b/graphics/items/icons/mega_bracelet.png
new file mode 100644
index 0000000000..5a09894748
Binary files /dev/null and b/graphics/items/icons/mega_bracelet.png differ
diff --git a/graphics/items/icons/mega_ring.png b/graphics/items/icons/mega_ring.png
new file mode 100644
index 0000000000..ea253ccac9
Binary files /dev/null and b/graphics/items/icons/mega_ring.png differ
diff --git a/graphics/items/icons/metagrossite.png b/graphics/items/icons/metagrossite.png
new file mode 100644
index 0000000000..9a936f4cf0
Binary files /dev/null and b/graphics/items/icons/metagrossite.png differ
diff --git a/graphics/items/icons/metal_coat.png b/graphics/items/icons/metal_coat.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/metal_powder.png b/graphics/items/icons/metal_powder.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/meteorite.png b/graphics/items/icons/meteorite.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/metronome.png b/graphics/items/icons/metronome.png
new file mode 100644
index 0000000000..4aa57f95e0
Binary files /dev/null and b/graphics/items/icons/metronome.png differ
diff --git a/graphics/items/icons/mewnium_z.png b/graphics/items/icons/mewnium_z.png
new file mode 100644
index 0000000000..34b332b397
Binary files /dev/null and b/graphics/items/icons/mewnium_z.png differ
diff --git a/graphics/items/icons/mewtwonite_x.png b/graphics/items/icons/mewtwonite_x.png
new file mode 100644
index 0000000000..5085bf2213
Binary files /dev/null and b/graphics/items/icons/mewtwonite_x.png differ
diff --git a/graphics/items/icons/mewtwonite_y.png b/graphics/items/icons/mewtwonite_y.png
new file mode 100644
index 0000000000..25209bb393
Binary files /dev/null and b/graphics/items/icons/mewtwonite_y.png differ
diff --git a/graphics/items/icons/micle_berry.png b/graphics/items/icons/micle_berry.png
new file mode 100755
index 0000000000..74e011d0e8
Binary files /dev/null and b/graphics/items/icons/micle_berry.png differ
diff --git a/graphics/items/icons/mimikium_z.png b/graphics/items/icons/mimikium_z.png
new file mode 100644
index 0000000000..f2c78d7e3b
Binary files /dev/null and b/graphics/items/icons/mimikium_z.png differ
diff --git a/graphics/items/icons/mind_plate.png b/graphics/items/icons/mind_plate.png
new file mode 100644
index 0000000000..dfe89ddbb5
Binary files /dev/null and b/graphics/items/icons/mind_plate.png differ
diff --git a/graphics/items/icons/mint.png b/graphics/items/icons/mint.png
new file mode 100644
index 0000000000..d879eab8b5
Binary files /dev/null and b/graphics/items/icons/mint.png differ
diff --git a/graphics/items/icons/miracle_seed.png b/graphics/items/icons/miracle_seed.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/misty_seed.png b/graphics/items/icons/misty_seed.png
new file mode 100644
index 0000000000..58764aca50
Binary files /dev/null and b/graphics/items/icons/misty_seed.png differ
diff --git a/graphics/items/icons/moomoo_milk.png b/graphics/items/icons/moomoo_milk.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/moon_ball.png b/graphics/items/icons/moon_ball.png
new file mode 100644
index 0000000000..cc67522d46
Binary files /dev/null and b/graphics/items/icons/moon_ball.png differ
diff --git a/graphics/items/icons/moon_stone.png b/graphics/items/icons/moon_stone.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/mulch.png b/graphics/items/icons/mulch.png
new file mode 100644
index 0000000000..6e470a1086
Binary files /dev/null and b/graphics/items/icons/mulch.png differ
diff --git a/graphics/items/icons/muscle_band.png b/graphics/items/icons/muscle_band.png
new file mode 100644
index 0000000000..b374760a71
Binary files /dev/null and b/graphics/items/icons/muscle_band.png differ
diff --git a/graphics/items/icons/muscle_feather.png b/graphics/items/icons/muscle_feather.png
new file mode 100644
index 0000000000..5ebf263b25
Binary files /dev/null and b/graphics/items/icons/muscle_feather.png differ
diff --git a/graphics/items/icons/mystic_ticket.png b/graphics/items/icons/mystic_ticket.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/mystic_water.png b/graphics/items/icons/mystic_water.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/nanab_berry.png b/graphics/items/icons/nanab_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/necrozma_fuser.png b/graphics/items/icons/necrozma_fuser.png
new file mode 100644
index 0000000000..3218fd20e3
Binary files /dev/null and b/graphics/items/icons/necrozma_fuser.png differ
diff --git a/graphics/items/icons/nest_ball.png b/graphics/items/icons/nest_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/net_ball.png b/graphics/items/icons/net_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/never_melt_ice.png b/graphics/items/icons/never_melt_ice.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/nomel_berry.png b/graphics/items/icons/nomel_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/normal_gem.png b/graphics/items/icons/normal_gem.png
new file mode 100644
index 0000000000..c57142c324
Binary files /dev/null and b/graphics/items/icons/normal_gem.png differ
diff --git a/graphics/items/icons/normalium_z.png b/graphics/items/icons/normalium_z.png
new file mode 100644
index 0000000000..8cee1de05b
Binary files /dev/null and b/graphics/items/icons/normalium_z.png differ
diff --git a/graphics/items/icons/nugget.png b/graphics/items/icons/nugget.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/oaks_parcel.png b/graphics/items/icons/oaks_parcel.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/occa_berry.png b/graphics/items/icons/occa_berry.png
new file mode 100755
index 0000000000..05d9860fb5
Binary files /dev/null and b/graphics/items/icons/occa_berry.png differ
diff --git a/graphics/items/icons/odd_incense.png b/graphics/items/icons/odd_incense.png
new file mode 100755
index 0000000000..11c7d24f7d
Binary files /dev/null and b/graphics/items/icons/odd_incense.png differ
diff --git a/graphics/items/icons/odd_keystone.png b/graphics/items/icons/odd_keystone.png
new file mode 100755
index 0000000000..8ef2d3cdb5
Binary files /dev/null and b/graphics/items/icons/odd_keystone.png differ
diff --git a/graphics/items/icons/old_amber.png b/graphics/items/icons/old_amber.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/old_gateau.png b/graphics/items/icons/old_gateau.png
new file mode 100755
index 0000000000..064c997a53
Binary files /dev/null and b/graphics/items/icons/old_gateau.png differ
diff --git a/graphics/items/icons/old_rod.png b/graphics/items/icons/old_rod.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/old_sea_map.png b/graphics/items/icons/old_sea_map.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/oran_berry.png b/graphics/items/icons/oran_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/orange_mail.png b/graphics/items/icons/orange_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/orb.png b/graphics/items/icons/orb.png
deleted file mode 100644
index 0a3e182923..0000000000
Binary files a/graphics/items/icons/orb.png and /dev/null differ
diff --git a/graphics/items/icons/oval_charm.png b/graphics/items/icons/oval_charm.png
new file mode 100644
index 0000000000..25809907a5
Binary files /dev/null and b/graphics/items/icons/oval_charm.png differ
diff --git a/graphics/items/icons/oval_stone.png b/graphics/items/icons/oval_stone.png
new file mode 100755
index 0000000000..27e0a7ccf2
Binary files /dev/null and b/graphics/items/icons/oval_stone.png differ
diff --git a/graphics/items/icons/pamtre_berry.png b/graphics/items/icons/pamtre_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/park_ball.png b/graphics/items/icons/park_ball.png
new file mode 100644
index 0000000000..c527ac1cc8
Binary files /dev/null and b/graphics/items/icons/park_ball.png differ
diff --git a/graphics/items/icons/passho_berry.png b/graphics/items/icons/passho_berry.png
new file mode 100755
index 0000000000..cdf3756078
Binary files /dev/null and b/graphics/items/icons/passho_berry.png differ
diff --git a/graphics/items/icons/payapa_berry.png b/graphics/items/icons/payapa_berry.png
new file mode 100755
index 0000000000..fe021c473e
Binary files /dev/null and b/graphics/items/icons/payapa_berry.png differ
diff --git a/graphics/items/icons/pearl.png b/graphics/items/icons/pearl.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/pearl_string.png b/graphics/items/icons/pearl_string.png
new file mode 100644
index 0000000000..a61a9aa66b
Binary files /dev/null and b/graphics/items/icons/pearl_string.png differ
diff --git a/graphics/items/icons/pecha_berry.png b/graphics/items/icons/pecha_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/persim_berry.png b/graphics/items/icons/persim_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/petaya_berry.png b/graphics/items/icons/petaya_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/pewter_crunchies.png b/graphics/items/icons/pewter_crunchies.png
new file mode 100644
index 0000000000..d88acd95ec
Binary files /dev/null and b/graphics/items/icons/pewter_crunchies.png differ
diff --git a/graphics/items/icons/pidgeotite.png b/graphics/items/icons/pidgeotite.png
new file mode 100644
index 0000000000..8cc9ab6b17
Binary files /dev/null and b/graphics/items/icons/pidgeotite.png differ
diff --git a/graphics/items/icons/pikanium_z.png b/graphics/items/icons/pikanium_z.png
new file mode 100644
index 0000000000..c2d8fe1c59
Binary files /dev/null and b/graphics/items/icons/pikanium_z.png differ
diff --git a/graphics/items/icons/pikashunium_z.png b/graphics/items/icons/pikashunium_z.png
new file mode 100644
index 0000000000..89d94e3fa0
Binary files /dev/null and b/graphics/items/icons/pikashunium_z.png differ
diff --git a/graphics/items/icons/pinap_berry.png b/graphics/items/icons/pinap_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/pink_apricorn.png b/graphics/items/icons/pink_apricorn.png
new file mode 100755
index 0000000000..abcedcba49
Binary files /dev/null and b/graphics/items/icons/pink_apricorn.png differ
diff --git a/graphics/items/icons/pink_nectar.png b/graphics/items/icons/pink_nectar.png
new file mode 100755
index 0000000000..21e88d3023
Binary files /dev/null and b/graphics/items/icons/pink_nectar.png differ
diff --git a/graphics/items/icons/pinsirite.png b/graphics/items/icons/pinsirite.png
new file mode 100644
index 0000000000..a201c320c0
Binary files /dev/null and b/graphics/items/icons/pinsirite.png differ
diff --git a/graphics/items/icons/pixie_plate.png b/graphics/items/icons/pixie_plate.png
new file mode 100644
index 0000000000..4c34f22aba
Binary files /dev/null and b/graphics/items/icons/pixie_plate.png differ
diff --git a/graphics/items/icons/plume_fossil.png b/graphics/items/icons/plume_fossil.png
new file mode 100755
index 0000000000..cf98166b31
Binary files /dev/null and b/graphics/items/icons/plume_fossil.png differ
diff --git a/graphics/items/icons/poison_barb.png b/graphics/items/icons/poison_barb.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/poison_gem.png b/graphics/items/icons/poison_gem.png
new file mode 100644
index 0000000000..ab339eb718
Binary files /dev/null and b/graphics/items/icons/poison_gem.png differ
diff --git a/graphics/items/icons/poison_memory.png b/graphics/items/icons/poison_memory.png
new file mode 100755
index 0000000000..e665d81762
Binary files /dev/null and b/graphics/items/icons/poison_memory.png differ
diff --git a/graphics/items/icons/poisonium_z.png b/graphics/items/icons/poisonium_z.png
new file mode 100644
index 0000000000..3b39e4b55b
Binary files /dev/null and b/graphics/items/icons/poisonium_z.png differ
diff --git a/graphics/items/icons/poke_ball.png b/graphics/items/icons/poke_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/poke_doll.png b/graphics/items/icons/poke_doll.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/poke_flute.png b/graphics/items/icons/poke_flute.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/poke_radar.png b/graphics/items/icons/poke_radar.png
new file mode 100644
index 0000000000..f0de8796ac
Binary files /dev/null and b/graphics/items/icons/poke_radar.png differ
diff --git a/graphics/items/icons/poke_toy.png b/graphics/items/icons/poke_toy.png
new file mode 100644
index 0000000000..be6091d3f5
Binary files /dev/null and b/graphics/items/icons/poke_toy.png differ
diff --git a/graphics/items/icons/pokeblock_case.png b/graphics/items/icons/pokeblock_case.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/pokemon_box_link.png b/graphics/items/icons/pokemon_box_link.png
new file mode 100644
index 0000000000..8022e833ab
Binary files /dev/null and b/graphics/items/icons/pokemon_box_link.png differ
diff --git a/graphics/items/icons/pomeg_berry.png b/graphics/items/icons/pomeg_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/potion.png b/graphics/items/icons/potion.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/powder.png b/graphics/items/icons/powder.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/powder_jar.png b/graphics/items/icons/powder_jar.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/power_anklet.png b/graphics/items/icons/power_anklet.png
new file mode 100755
index 0000000000..3a2091c8ee
Binary files /dev/null and b/graphics/items/icons/power_anklet.png differ
diff --git a/graphics/items/icons/power_band.png b/graphics/items/icons/power_band.png
new file mode 100755
index 0000000000..a88e5391b1
Binary files /dev/null and b/graphics/items/icons/power_band.png differ
diff --git a/graphics/items/icons/power_belt.png b/graphics/items/icons/power_belt.png
new file mode 100755
index 0000000000..e4273f85c6
Binary files /dev/null and b/graphics/items/icons/power_belt.png differ
diff --git a/graphics/items/icons/power_bracer.png b/graphics/items/icons/power_bracer.png
new file mode 100755
index 0000000000..54aa34844b
Binary files /dev/null and b/graphics/items/icons/power_bracer.png differ
diff --git a/graphics/items/icons/power_herb.png b/graphics/items/icons/power_herb.png
new file mode 100644
index 0000000000..947996c4cd
Binary files /dev/null and b/graphics/items/icons/power_herb.png differ
diff --git a/graphics/items/icons/power_lens.png b/graphics/items/icons/power_lens.png
new file mode 100755
index 0000000000..b18d911860
Binary files /dev/null and b/graphics/items/icons/power_lens.png differ
diff --git a/graphics/items/icons/power_weight.png b/graphics/items/icons/power_weight.png
new file mode 100755
index 0000000000..149679c387
Binary files /dev/null and b/graphics/items/icons/power_weight.png differ
diff --git a/graphics/items/icons/pp_max.png b/graphics/items/icons/pp_max.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/pp_up.png b/graphics/items/icons/pp_up.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/premier_ball.png b/graphics/items/icons/premier_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/pretty_feather.png b/graphics/items/icons/pretty_feather.png
new file mode 100644
index 0000000000..69c66306d2
Binary files /dev/null and b/graphics/items/icons/pretty_feather.png differ
diff --git a/graphics/items/icons/primarium_z.png b/graphics/items/icons/primarium_z.png
new file mode 100644
index 0000000000..84f04c2213
Binary files /dev/null and b/graphics/items/icons/primarium_z.png differ
diff --git a/graphics/items/icons/prism_scale.png b/graphics/items/icons/prism_scale.png
new file mode 100755
index 0000000000..335816ddbc
Binary files /dev/null and b/graphics/items/icons/prism_scale.png differ
diff --git a/graphics/items/icons/prison_bottle.png b/graphics/items/icons/prison_bottle.png
new file mode 100644
index 0000000000..3c20e771a3
Binary files /dev/null and b/graphics/items/icons/prison_bottle.png differ
diff --git a/graphics/items/icons/protective_pads.png b/graphics/items/icons/protective_pads.png
new file mode 100644
index 0000000000..3676fd311a
Binary files /dev/null and b/graphics/items/icons/protective_pads.png differ
diff --git a/graphics/items/icons/protector.png b/graphics/items/icons/protector.png
new file mode 100755
index 0000000000..fa88ae1556
Binary files /dev/null and b/graphics/items/icons/protector.png differ
diff --git a/graphics/items/icons/psychic_gem.png b/graphics/items/icons/psychic_gem.png
new file mode 100644
index 0000000000..6b84f38dab
Binary files /dev/null and b/graphics/items/icons/psychic_gem.png differ
diff --git a/graphics/items/icons/psychic_memory.png b/graphics/items/icons/psychic_memory.png
new file mode 100755
index 0000000000..beda2c22df
Binary files /dev/null and b/graphics/items/icons/psychic_memory.png differ
diff --git a/graphics/items/icons/psychic_seed.png b/graphics/items/icons/psychic_seed.png
new file mode 100644
index 0000000000..4c90afb9c9
Binary files /dev/null and b/graphics/items/icons/psychic_seed.png differ
diff --git a/graphics/items/icons/psychium_z.png b/graphics/items/icons/psychium_z.png
new file mode 100644
index 0000000000..b1ab78d66a
Binary files /dev/null and b/graphics/items/icons/psychium_z.png differ
diff --git a/graphics/items/icons/pure_incense.png b/graphics/items/icons/pure_incense.png
new file mode 100755
index 0000000000..8657683b18
Binary files /dev/null and b/graphics/items/icons/pure_incense.png differ
diff --git a/graphics/items/icons/purple_nectar.png b/graphics/items/icons/purple_nectar.png
new file mode 100755
index 0000000000..59111f1e4e
Binary files /dev/null and b/graphics/items/icons/purple_nectar.png differ
diff --git a/graphics/items/icons/qualot_berry.png b/graphics/items/icons/qualot_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/question_mark.png b/graphics/items/icons/question_mark.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/quick_ball.png b/graphics/items/icons/quick_ball.png
new file mode 100644
index 0000000000..6f39b934f4
Binary files /dev/null and b/graphics/items/icons/quick_ball.png differ
diff --git a/graphics/items/icons/quick_claw.png b/graphics/items/icons/quick_claw.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/quick_powder.png b/graphics/items/icons/quick_powder.png
new file mode 100644
index 0000000000..d83b0b5062
Binary files /dev/null and b/graphics/items/icons/quick_powder.png differ
diff --git a/graphics/items/icons/rabuta_berry.png b/graphics/items/icons/rabuta_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/rage_candy_bar.png b/graphics/items/icons/rage_candy_bar.png
new file mode 100644
index 0000000000..feb5b82cce
Binary files /dev/null and b/graphics/items/icons/rage_candy_bar.png differ
diff --git a/graphics/items/icons/rainbow_pass.png b/graphics/items/icons/rainbow_pass.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/rare_bone.png b/graphics/items/icons/rare_bone.png
new file mode 100755
index 0000000000..80b4af9d58
Binary files /dev/null and b/graphics/items/icons/rare_bone.png differ
diff --git a/graphics/items/icons/rare_candy.png b/graphics/items/icons/rare_candy.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/rawst_berry.png b/graphics/items/icons/rawst_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/razor_claw.png b/graphics/items/icons/razor_claw.png
new file mode 100755
index 0000000000..59c27fc809
Binary files /dev/null and b/graphics/items/icons/razor_claw.png differ
diff --git a/graphics/items/icons/razor_fang.png b/graphics/items/icons/razor_fang.png
new file mode 100755
index 0000000000..dd54b98e79
Binary files /dev/null and b/graphics/items/icons/razor_fang.png differ
diff --git a/graphics/items/icons/razz_berry.png b/graphics/items/icons/razz_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/reaper_cloth.png b/graphics/items/icons/reaper_cloth.png
new file mode 100755
index 0000000000..73f0874426
Binary files /dev/null and b/graphics/items/icons/reaper_cloth.png differ
diff --git a/graphics/items/icons/red_apricorn.png b/graphics/items/icons/red_apricorn.png
new file mode 100755
index 0000000000..52d219c073
Binary files /dev/null and b/graphics/items/icons/red_apricorn.png differ
diff --git a/graphics/items/icons/red_card.png b/graphics/items/icons/red_card.png
new file mode 100755
index 0000000000..1d07d827fa
Binary files /dev/null and b/graphics/items/icons/red_card.png differ
diff --git a/graphics/items/icons/red_nectar.png b/graphics/items/icons/red_nectar.png
new file mode 100755
index 0000000000..1d2058dca1
Binary files /dev/null and b/graphics/items/icons/red_nectar.png differ
diff --git a/graphics/items/icons/red_orb.png b/graphics/items/icons/red_orb.png
new file mode 100644
index 0000000000..ca132f46a0
Binary files /dev/null and b/graphics/items/icons/red_orb.png differ
diff --git a/graphics/items/icons/reins_of_unity.png b/graphics/items/icons/reins_of_unity.png
new file mode 100644
index 0000000000..123cda9b92
Binary files /dev/null and b/graphics/items/icons/reins_of_unity.png differ
diff --git a/graphics/items/icons/relic_band.png b/graphics/items/icons/relic_band.png
new file mode 100644
index 0000000000..902e04f7cc
Binary files /dev/null and b/graphics/items/icons/relic_band.png differ
diff --git a/graphics/items/icons/relic_coin.png b/graphics/items/icons/relic_coin.png
new file mode 100644
index 0000000000..b94e3eaa6e
Binary files /dev/null and b/graphics/items/icons/relic_coin.png differ
diff --git a/graphics/items/icons/relic_crown.png b/graphics/items/icons/relic_crown.png
new file mode 100644
index 0000000000..7511a2e081
Binary files /dev/null and b/graphics/items/icons/relic_crown.png differ
diff --git a/graphics/items/icons/relic_statue.png b/graphics/items/icons/relic_statue.png
new file mode 100644
index 0000000000..927aa4b8b8
Binary files /dev/null and b/graphics/items/icons/relic_statue.png differ
diff --git a/graphics/items/icons/relic_vase.png b/graphics/items/icons/relic_vase.png
new file mode 100644
index 0000000000..aa8698c1a2
Binary files /dev/null and b/graphics/items/icons/relic_vase.png differ
diff --git a/graphics/items/icons/repeat_ball.png b/graphics/items/icons/repeat_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/repel.png b/graphics/items/icons/repel.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/resist_feather.png b/graphics/items/icons/resist_feather.png
new file mode 100644
index 0000000000..d717151621
Binary files /dev/null and b/graphics/items/icons/resist_feather.png differ
diff --git a/graphics/items/icons/retro_mail.png b/graphics/items/icons/retro_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/return_to_field_arrow.png b/graphics/items/icons/return_to_field_arrow.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/reveal_glass.png b/graphics/items/icons/reveal_glass.png
new file mode 100644
index 0000000000..dbb6b856c1
Binary files /dev/null and b/graphics/items/icons/reveal_glass.png differ
diff --git a/graphics/items/icons/revival_herb.png b/graphics/items/icons/revival_herb.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/revive.png b/graphics/items/icons/revive.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/ribbon_sweet.png b/graphics/items/icons/ribbon_sweet.png
new file mode 100644
index 0000000000..19711ae8cc
Binary files /dev/null and b/graphics/items/icons/ribbon_sweet.png differ
diff --git a/graphics/items/icons/rindo_berry.png b/graphics/items/icons/rindo_berry.png
new file mode 100755
index 0000000000..4729e188c0
Binary files /dev/null and b/graphics/items/icons/rindo_berry.png differ
diff --git a/graphics/items/icons/ring_target.png b/graphics/items/icons/ring_target.png
new file mode 100755
index 0000000000..fae2b944be
Binary files /dev/null and b/graphics/items/icons/ring_target.png differ
diff --git a/graphics/items/icons/rock_gem.png b/graphics/items/icons/rock_gem.png
new file mode 100644
index 0000000000..6d6070b516
Binary files /dev/null and b/graphics/items/icons/rock_gem.png differ
diff --git a/graphics/items/icons/rock_incense.png b/graphics/items/icons/rock_incense.png
new file mode 100755
index 0000000000..04a3d1b5c2
Binary files /dev/null and b/graphics/items/icons/rock_incense.png differ
diff --git a/graphics/items/icons/rock_memory.png b/graphics/items/icons/rock_memory.png
new file mode 100755
index 0000000000..32d46fea49
Binary files /dev/null and b/graphics/items/icons/rock_memory.png differ
diff --git a/graphics/items/icons/rockium_z.png b/graphics/items/icons/rockium_z.png
new file mode 100644
index 0000000000..b43a2f26dd
Binary files /dev/null and b/graphics/items/icons/rockium_z.png differ
diff --git a/graphics/items/icons/rocky_helmet.png b/graphics/items/icons/rocky_helmet.png
new file mode 100755
index 0000000000..006a9f8aa4
Binary files /dev/null and b/graphics/items/icons/rocky_helmet.png differ
diff --git a/graphics/items/icons/room_service.png b/graphics/items/icons/room_service.png
new file mode 100644
index 0000000000..e776b4e8a7
Binary files /dev/null and b/graphics/items/icons/room_service.png differ
diff --git a/graphics/items/icons/root_fossil.png b/graphics/items/icons/root_fossil.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/rose_incense.png b/graphics/items/icons/rose_incense.png
new file mode 100755
index 0000000000..c6b6abcc36
Binary files /dev/null and b/graphics/items/icons/rose_incense.png differ
diff --git a/graphics/items/icons/roseli_berry.png b/graphics/items/icons/roseli_berry.png
new file mode 100755
index 0000000000..7487cb2a4c
Binary files /dev/null and b/graphics/items/icons/roseli_berry.png differ
diff --git a/graphics/items/icons/rotom_catalog.png b/graphics/items/icons/rotom_catalog.png
new file mode 100644
index 0000000000..ceea8e968a
Binary files /dev/null and b/graphics/items/icons/rotom_catalog.png differ
diff --git a/graphics/items/icons/rowap_berry.png b/graphics/items/icons/rowap_berry.png
new file mode 100755
index 0000000000..a25d39838f
Binary files /dev/null and b/graphics/items/icons/rowap_berry.png differ
diff --git a/graphics/items/icons/rusted_shield.png b/graphics/items/icons/rusted_shield.png
new file mode 100644
index 0000000000..a7d3de46d6
Binary files /dev/null and b/graphics/items/icons/rusted_shield.png differ
diff --git a/graphics/items/icons/rusted_sword.png b/graphics/items/icons/rusted_sword.png
new file mode 100644
index 0000000000..a05bac98be
Binary files /dev/null and b/graphics/items/icons/rusted_sword.png differ
diff --git a/graphics/items/icons/sablenite.png b/graphics/items/icons/sablenite.png
new file mode 100644
index 0000000000..ad348b4352
Binary files /dev/null and b/graphics/items/icons/sablenite.png differ
diff --git a/graphics/items/icons/sachet.png b/graphics/items/icons/sachet.png
new file mode 100755
index 0000000000..32c566a91d
Binary files /dev/null and b/graphics/items/icons/sachet.png differ
diff --git a/graphics/items/icons/sacred_ash.png b/graphics/items/icons/sacred_ash.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/safari_ball.png b/graphics/items/icons/safari_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/safety_goggles.png b/graphics/items/icons/safety_goggles.png
new file mode 100644
index 0000000000..7a1efab67a
Binary files /dev/null and b/graphics/items/icons/safety_goggles.png differ
diff --git a/graphics/items/icons/sail_fossil.png b/graphics/items/icons/sail_fossil.png
new file mode 100755
index 0000000000..4c6514820e
Binary files /dev/null and b/graphics/items/icons/sail_fossil.png differ
diff --git a/graphics/items/icons/salac_berry.png b/graphics/items/icons/salac_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/salamencite.png b/graphics/items/icons/salamencite.png
new file mode 100644
index 0000000000..557cc29d7d
Binary files /dev/null and b/graphics/items/icons/salamencite.png differ
diff --git a/graphics/items/icons/scanner.png b/graphics/items/icons/scanner.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/scarf.png b/graphics/items/icons/scarf.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/sceptilite.png b/graphics/items/icons/sceptilite.png
new file mode 100644
index 0000000000..ba61c74aac
Binary files /dev/null and b/graphics/items/icons/sceptilite.png differ
diff --git a/graphics/items/icons/scizorite.png b/graphics/items/icons/scizorite.png
new file mode 100644
index 0000000000..8b2d81335a
Binary files /dev/null and b/graphics/items/icons/scizorite.png differ
diff --git a/graphics/items/icons/scope_lens.png b/graphics/items/icons/scope_lens.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/sea_incense.png b/graphics/items/icons/sea_incense.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/secret_key.png b/graphics/items/icons/secret_key.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/shadow_mail.png b/graphics/items/icons/shadow_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/shalour_sable.png b/graphics/items/icons/shalour_sable.png
new file mode 100644
index 0000000000..88982fb475
Binary files /dev/null and b/graphics/items/icons/shalour_sable.png differ
diff --git a/graphics/items/icons/shard.png b/graphics/items/icons/shard.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/sharp_beak.png b/graphics/items/icons/sharp_beak.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/sharpedonite.png b/graphics/items/icons/sharpedonite.png
new file mode 100644
index 0000000000..20c8642b2c
Binary files /dev/null and b/graphics/items/icons/sharpedonite.png differ
diff --git a/graphics/items/icons/shed_shell.png b/graphics/items/icons/shed_shell.png
new file mode 100644
index 0000000000..6e02ff4a3a
Binary files /dev/null and b/graphics/items/icons/shed_shell.png differ
diff --git a/graphics/items/icons/shell_bell.png b/graphics/items/icons/shell_bell.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/shiny_charm.png b/graphics/items/icons/shiny_charm.png
new file mode 100644
index 0000000000..3829154cd5
Binary files /dev/null and b/graphics/items/icons/shiny_charm.png differ
diff --git a/graphics/items/icons/shiny_stone.png b/graphics/items/icons/shiny_stone.png
new file mode 100755
index 0000000000..d48db4d86a
Binary files /dev/null and b/graphics/items/icons/shiny_stone.png differ
diff --git a/graphics/items/icons/shoal_shell.png b/graphics/items/icons/shoal_shell.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/shock_drive.png b/graphics/items/icons/shock_drive.png
new file mode 100644
index 0000000000..2ac62f6cee
Binary files /dev/null and b/graphics/items/icons/shock_drive.png differ
diff --git a/graphics/items/icons/shuca_berry.png b/graphics/items/icons/shuca_berry.png
new file mode 100755
index 0000000000..cc99671876
Binary files /dev/null and b/graphics/items/icons/shuca_berry.png differ
diff --git a/graphics/items/icons/silk_scarf.png b/graphics/items/icons/silk_scarf.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/silph_scope.png b/graphics/items/icons/silph_scope.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/silver_powder.png b/graphics/items/icons/silver_powder.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/sitrus_berry.png b/graphics/items/icons/sitrus_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/skull_fossil.png b/graphics/items/icons/skull_fossil.png
new file mode 100755
index 0000000000..1868983468
Binary files /dev/null and b/graphics/items/icons/skull_fossil.png differ
diff --git a/graphics/items/icons/sky_plate.png b/graphics/items/icons/sky_plate.png
new file mode 100644
index 0000000000..f64b14aff6
Binary files /dev/null and b/graphics/items/icons/sky_plate.png differ
diff --git a/graphics/items/icons/slowbronite.png b/graphics/items/icons/slowbronite.png
new file mode 100644
index 0000000000..89bb8bf487
Binary files /dev/null and b/graphics/items/icons/slowbronite.png differ
diff --git a/graphics/items/icons/smoke_ball.png b/graphics/items/icons/smoke_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/smooth_rock.png b/graphics/items/icons/smooth_rock.png
new file mode 100644
index 0000000000..8db8ef11f5
Binary files /dev/null and b/graphics/items/icons/smooth_rock.png differ
diff --git a/graphics/items/icons/snorlium_z.png b/graphics/items/icons/snorlium_z.png
new file mode 100644
index 0000000000..a91ecf8432
Binary files /dev/null and b/graphics/items/icons/snorlium_z.png differ
diff --git a/graphics/items/icons/snowball.png b/graphics/items/icons/snowball.png
new file mode 100755
index 0000000000..3ba834ae34
Binary files /dev/null and b/graphics/items/icons/snowball.png differ
diff --git a/graphics/items/icons/soda_pop.png b/graphics/items/icons/soda_pop.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/soft_sand.png b/graphics/items/icons/soft_sand.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/solganium_z.png b/graphics/items/icons/solganium_z.png
new file mode 100644
index 0000000000..c8d8c671eb
Binary files /dev/null and b/graphics/items/icons/solganium_z.png differ
diff --git a/graphics/items/icons/soot_sack.png b/graphics/items/icons/soot_sack.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/soothe_bell.png b/graphics/items/icons/soothe_bell.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/soul_dew.png b/graphics/items/icons/soul_dew.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/spell_tag.png b/graphics/items/icons/spell_tag.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/spelon_berry.png b/graphics/items/icons/spelon_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/splash_plate.png b/graphics/items/icons/splash_plate.png
new file mode 100644
index 0000000000..b290e81001
Binary files /dev/null and b/graphics/items/icons/splash_plate.png differ
diff --git a/graphics/items/icons/spooky_plate.png b/graphics/items/icons/spooky_plate.png
new file mode 100644
index 0000000000..215657bcc6
Binary files /dev/null and b/graphics/items/icons/spooky_plate.png differ
diff --git a/graphics/items/icons/sport_ball.png b/graphics/items/icons/sport_ball.png
new file mode 100644
index 0000000000..20549f7d34
Binary files /dev/null and b/graphics/items/icons/sport_ball.png differ
diff --git a/graphics/items/icons/ss_ticket.png b/graphics/items/icons/ss_ticket.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/stable_mulch.png b/graphics/items/icons/stable_mulch.png
new file mode 100644
index 0000000000..be4369d07c
Binary files /dev/null and b/graphics/items/icons/stable_mulch.png differ
diff --git a/graphics/items/icons/star_piece.png b/graphics/items/icons/star_piece.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/star_sweet.png b/graphics/items/icons/star_sweet.png
new file mode 100644
index 0000000000..23bffe9cf7
Binary files /dev/null and b/graphics/items/icons/star_sweet.png differ
diff --git a/graphics/items/icons/stardust.png b/graphics/items/icons/stardust.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/starf_berry.png b/graphics/items/icons/starf_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/status_heal.png b/graphics/items/icons/status_heal.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/steel_gem.png b/graphics/items/icons/steel_gem.png
new file mode 100644
index 0000000000..252dc2d47e
Binary files /dev/null and b/graphics/items/icons/steel_gem.png differ
diff --git a/graphics/items/icons/steel_memory.png b/graphics/items/icons/steel_memory.png
new file mode 100755
index 0000000000..b9329e2d02
Binary files /dev/null and b/graphics/items/icons/steel_memory.png differ
diff --git a/graphics/items/icons/steelium_z.png b/graphics/items/icons/steelium_z.png
new file mode 100644
index 0000000000..d0dad6f94e
Binary files /dev/null and b/graphics/items/icons/steelium_z.png differ
diff --git a/graphics/items/icons/steelixite.png b/graphics/items/icons/steelixite.png
new file mode 100644
index 0000000000..fa2a8209e6
Binary files /dev/null and b/graphics/items/icons/steelixite.png differ
diff --git a/graphics/items/icons/sticky_barb.png b/graphics/items/icons/sticky_barb.png
new file mode 100644
index 0000000000..735d3a051f
Binary files /dev/null and b/graphics/items/icons/sticky_barb.png differ
diff --git a/graphics/items/icons/stone_plate.png b/graphics/items/icons/stone_plate.png
new file mode 100644
index 0000000000..8af90a8a65
Binary files /dev/null and b/graphics/items/icons/stone_plate.png differ
diff --git a/graphics/items/icons/storage_key.png b/graphics/items/icons/storage_key.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/strange_souvenir.png b/graphics/items/icons/strange_souvenir.png
new file mode 100644
index 0000000000..5cbc6e164c
Binary files /dev/null and b/graphics/items/icons/strange_souvenir.png differ
diff --git a/graphics/items/icons/strawberry_sweet.png b/graphics/items/icons/strawberry_sweet.png
new file mode 100644
index 0000000000..40f6c7700a
Binary files /dev/null and b/graphics/items/icons/strawberry_sweet.png differ
diff --git a/graphics/items/icons/sun_stone.png b/graphics/items/icons/sun_stone.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/super_rod.png b/graphics/items/icons/super_rod.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/swampertite.png b/graphics/items/icons/swampertite.png
new file mode 100644
index 0000000000..f2d386a3d4
Binary files /dev/null and b/graphics/items/icons/swampertite.png differ
diff --git a/graphics/items/icons/sweet_apple.png b/graphics/items/icons/sweet_apple.png
new file mode 100644
index 0000000000..35e47e0768
Binary files /dev/null and b/graphics/items/icons/sweet_apple.png differ
diff --git a/graphics/items/icons/sweet_heart.png b/graphics/items/icons/sweet_heart.png
new file mode 100755
index 0000000000..06b592022f
Binary files /dev/null and b/graphics/items/icons/sweet_heart.png differ
diff --git a/graphics/items/icons/swift_feather.png b/graphics/items/icons/swift_feather.png
new file mode 100644
index 0000000000..75af06017c
Binary files /dev/null and b/graphics/items/icons/swift_feather.png differ
diff --git a/graphics/items/icons/tamato_berry.png b/graphics/items/icons/tamato_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/tanga_berry.png b/graphics/items/icons/tanga_berry.png
new file mode 100755
index 0000000000..37f8e24656
Binary files /dev/null and b/graphics/items/icons/tanga_berry.png differ
diff --git a/graphics/items/icons/tapunium_z.png b/graphics/items/icons/tapunium_z.png
new file mode 100644
index 0000000000..160b7f5d92
Binary files /dev/null and b/graphics/items/icons/tapunium_z.png differ
diff --git a/graphics/items/icons/tart_apple.png b/graphics/items/icons/tart_apple.png
new file mode 100644
index 0000000000..b26b595da5
Binary files /dev/null and b/graphics/items/icons/tart_apple.png differ
diff --git a/graphics/items/icons/tea.png b/graphics/items/icons/tea.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/teachy_tv.png b/graphics/items/icons/teachy_tv.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/terrain_extender.png b/graphics/items/icons/terrain_extender.png
new file mode 100644
index 0000000000..7735dd8900
Binary files /dev/null and b/graphics/items/icons/terrain_extender.png differ
diff --git a/graphics/items/icons/thick_club.png b/graphics/items/icons/thick_club.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/throat_spray.png b/graphics/items/icons/throat_spray.png
new file mode 100644
index 0000000000..2d75c4aad5
Binary files /dev/null and b/graphics/items/icons/throat_spray.png differ
diff --git a/graphics/items/icons/thunder_stone.png b/graphics/items/icons/thunder_stone.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/timer_ball.png b/graphics/items/icons/timer_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/tiny_mushroom.png b/graphics/items/icons/tiny_mushroom.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/tm.png b/graphics/items/icons/tm.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/tm_case.png b/graphics/items/icons/tm_case.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/town_map.png b/graphics/items/icons/town_map.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/toxic_orb.png b/graphics/items/icons/toxic_orb.png
new file mode 100644
index 0000000000..d63ad4fa3a
Binary files /dev/null and b/graphics/items/icons/toxic_orb.png differ
diff --git a/graphics/items/icons/toxic_plate.png b/graphics/items/icons/toxic_plate.png
new file mode 100644
index 0000000000..de64d6c201
Binary files /dev/null and b/graphics/items/icons/toxic_plate.png differ
diff --git a/graphics/items/icons/tri_pass.png b/graphics/items/icons/tri_pass.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/tropic_mail.png b/graphics/items/icons/tropic_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/twisted_spoon.png b/graphics/items/icons/twisted_spoon.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/tyranitarite.png b/graphics/items/icons/tyranitarite.png
new file mode 100644
index 0000000000..ba61c74aac
Binary files /dev/null and b/graphics/items/icons/tyranitarite.png differ
diff --git a/graphics/items/icons/ultra_ball.png b/graphics/items/icons/ultra_ball.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/ultranecrozium_z.png b/graphics/items/icons/ultranecrozium_z.png
new file mode 100644
index 0000000000..52e984598e
Binary files /dev/null and b/graphics/items/icons/ultranecrozium_z.png differ
diff --git a/graphics/items/icons/up_grade.png b/graphics/items/icons/upgrade.png
old mode 100644
new mode 100755
similarity index 100%
rename from graphics/items/icons/up_grade.png
rename to graphics/items/icons/upgrade.png
diff --git a/graphics/items/icons/utility_umbrella.png b/graphics/items/icons/utility_umbrella.png
new file mode 100644
index 0000000000..a7dbb4e041
Binary files /dev/null and b/graphics/items/icons/utility_umbrella.png differ
diff --git a/graphics/items/icons/venusaurite.png b/graphics/items/icons/venusaurite.png
new file mode 100644
index 0000000000..e4a8acbf90
Binary files /dev/null and b/graphics/items/icons/venusaurite.png differ
diff --git a/graphics/items/icons/vitamin.png b/graphics/items/icons/vitamin.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/vs_seeker.png b/graphics/items/icons/vs_seeker.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/wacan_berry.png b/graphics/items/icons/wacan_berry.png
new file mode 100755
index 0000000000..af113c9b58
Binary files /dev/null and b/graphics/items/icons/wacan_berry.png differ
diff --git a/graphics/items/icons/wailmer_pail.png b/graphics/items/icons/wailmer_pail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/water_gem.png b/graphics/items/icons/water_gem.png
new file mode 100644
index 0000000000..79e0ca07f3
Binary files /dev/null and b/graphics/items/icons/water_gem.png differ
diff --git a/graphics/items/icons/water_memory.png b/graphics/items/icons/water_memory.png
new file mode 100755
index 0000000000..d7096f57cc
Binary files /dev/null and b/graphics/items/icons/water_memory.png differ
diff --git a/graphics/items/icons/water_stone.png b/graphics/items/icons/water_stone.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/waterium_z.png b/graphics/items/icons/waterium_z.png
new file mode 100644
index 0000000000..b5453261e4
Binary files /dev/null and b/graphics/items/icons/waterium_z.png differ
diff --git a/graphics/items/icons/watmel_berry.png b/graphics/items/icons/watmel_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/wave_incense.png b/graphics/items/icons/wave_incense.png
new file mode 100755
index 0000000000..aec3fd05ef
Binary files /dev/null and b/graphics/items/icons/wave_incense.png differ
diff --git a/graphics/items/icons/wave_mail.png b/graphics/items/icons/wave_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/weakness_policy.png b/graphics/items/icons/weakness_policy.png
new file mode 100755
index 0000000000..d8f0b45531
Binary files /dev/null and b/graphics/items/icons/weakness_policy.png differ
diff --git a/graphics/items/icons/wepear_berry.png b/graphics/items/icons/wepear_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/whipped_dream.png b/graphics/items/icons/whipped_dream.png
new file mode 100755
index 0000000000..9cf9c959a7
Binary files /dev/null and b/graphics/items/icons/whipped_dream.png differ
diff --git a/graphics/items/icons/white_apricorn.png b/graphics/items/icons/white_apricorn.png
new file mode 100755
index 0000000000..c2ea561742
Binary files /dev/null and b/graphics/items/icons/white_apricorn.png differ
diff --git a/graphics/items/icons/wide_lens.png b/graphics/items/icons/wide_lens.png
new file mode 100644
index 0000000000..ea432dc8de
Binary files /dev/null and b/graphics/items/icons/wide_lens.png differ
diff --git a/graphics/items/icons/wiki_berry.png b/graphics/items/icons/wiki_berry.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/wise_glasses.png b/graphics/items/icons/wise_glasses.png
new file mode 100644
index 0000000000..a3982f1816
Binary files /dev/null and b/graphics/items/icons/wise_glasses.png differ
diff --git a/graphics/items/icons/wishing_piece.png b/graphics/items/icons/wishing_piece.png
new file mode 100644
index 0000000000..324a0a646e
Binary files /dev/null and b/graphics/items/icons/wishing_piece.png differ
diff --git a/graphics/items/icons/wood_mail.png b/graphics/items/icons/wood_mail.png
old mode 100644
new mode 100755
diff --git a/graphics/items/icons/x_special_defense.png b/graphics/items/icons/x_special_defense.png
new file mode 100755
index 0000000000..54a3e00fdf
Binary files /dev/null and b/graphics/items/icons/x_special_defense.png differ
diff --git a/graphics/items/icons/yache_berry.png b/graphics/items/icons/yache_berry.png
new file mode 100755
index 0000000000..08bb40fcfb
Binary files /dev/null and b/graphics/items/icons/yache_berry.png differ
diff --git a/graphics/items/icons/yellow_apricorn.png b/graphics/items/icons/yellow_apricorn.png
new file mode 100755
index 0000000000..4dd12c5eb6
Binary files /dev/null and b/graphics/items/icons/yellow_apricorn.png differ
diff --git a/graphics/items/icons/yellow_nectar.png b/graphics/items/icons/yellow_nectar.png
new file mode 100755
index 0000000000..fff8ae6977
Binary files /dev/null and b/graphics/items/icons/yellow_nectar.png differ
diff --git a/graphics/items/icons/z_power_ring.png b/graphics/items/icons/z_power_ring.png
new file mode 100644
index 0000000000..addf901e15
Binary files /dev/null and b/graphics/items/icons/z_power_ring.png differ
diff --git a/graphics/items/icons/z_ring.png b/graphics/items/icons/z_ring.png
new file mode 100644
index 0000000000..b5ad6bf945
Binary files /dev/null and b/graphics/items/icons/z_ring.png differ
diff --git a/graphics/items/icons/zap_plate.png b/graphics/items/icons/zap_plate.png
new file mode 100644
index 0000000000..80fed9a1e5
Binary files /dev/null and b/graphics/items/icons/zap_plate.png differ
diff --git a/graphics/items/icons/zoom_lens.png b/graphics/items/icons/zoom_lens.png
new file mode 100644
index 0000000000..167619aa64
Binary files /dev/null and b/graphics/items/icons/zoom_lens.png differ
diff --git a/graphics/items/icons/zygarde_cube.png b/graphics/items/icons/zygarde_cube.png
new file mode 100644
index 0000000000..b577dcecd8
Binary files /dev/null and b/graphics/items/icons/zygarde_cube.png differ
diff --git a/graphics/naming_screen/back_button.png b/graphics/naming_screen/back_button.png
new file mode 100644
index 0000000000..bf7730024d
Binary files /dev/null and b/graphics/naming_screen/back_button.png differ
diff --git a/graphics/naming_screen/buttons.pal b/graphics/naming_screen/buttons.pal
new file mode 100644
index 0000000000..fdf80bdb06
--- /dev/null
+++ b/graphics/naming_screen/buttons.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+106 156 213
+255 255 255
+57 57 57
+139 139 131
+197 189 180
+230 222 213
+74 115 139
+123 172 197
+172 115 74
+213 156 115
+98 156 57
+148 189 106
+189 164 32
+230 222 90
+57 57 57
+57 57 57
diff --git a/graphics/naming_screen/cursor.pal b/graphics/naming_screen/cursor.pal
new file mode 100644
index 0000000000..8950f9b34b
--- /dev/null
+++ b/graphics/naming_screen/cursor.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+106 156 213
+255 8 8
+222 57 74
+180 65 82
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+230 222 213
+0 0 0
+230 222 213
+0 0 0
diff --git a/graphics/naming_screen/cursor.png b/graphics/naming_screen/cursor.png
index 3d92ef6f49..e0f5022bed 100644
Binary files a/graphics/naming_screen/cursor.png and b/graphics/naming_screen/cursor.png differ
diff --git a/graphics/naming_screen/cursor_filled.png b/graphics/naming_screen/cursor_filled.png
new file mode 100644
index 0000000000..efb5e11015
Binary files /dev/null and b/graphics/naming_screen/cursor_filled.png differ
diff --git a/graphics/naming_screen/cursor_squished.png b/graphics/naming_screen/cursor_squished.png
new file mode 100644
index 0000000000..5126fcccae
Binary files /dev/null and b/graphics/naming_screen/cursor_squished.png differ
diff --git a/graphics/naming_screen/input_arrow.png b/graphics/naming_screen/input_arrow.png
index e07b9e5a80..0a50726733 100644
Binary files a/graphics/naming_screen/input_arrow.png and b/graphics/naming_screen/input_arrow.png differ
diff --git a/graphics/naming_screen/menu.pal b/graphics/naming_screen/menu.pal
index 0da3b93f2f..2f5c86a568 100644
--- a/graphics/naming_screen/menu.pal
+++ b/graphics/naming_screen/menu.pal
@@ -1,6 +1,6 @@
JASC-PAL
0100
-96
+16
106 156 213
255 255 255
115 115 115
@@ -17,83 +17,3 @@ JASC-PAL
230 222 90
238 230 139
246 238 197
-106 156 213
-255 255 255
-57 57 57
-115 115 115
-0 0 0
-0 0 0
-0 0 0
-0 0 255
-0 0 255
-0 0 255
-0 0 255
-74 115 139
-98 139 164
-123 172 197
-156 205 230
-180 222 246
-106 156 213
-255 255 255
-57 57 57
-115 115 115
-0 0 0
-0 0 0
-0 0 0
-0 0 255
-0 0 255
-0 0 255
-0 0 255
-172 115 74
-189 131 90
-213 156 115
-246 205 164
-255 230 197
-106 156 213
-255 255 255
-57 57 57
-115 115 115
-0 0 0
-0 0 0
-0 0 0
-0 0 255
-0 0 255
-0 0 255
-0 0 255
-98 156 57
-123 172 82
-148 189 106
-197 230 156
-213 238 189
-106 156 213
-255 255 255
-57 57 57
-139 139 131
-197 189 180
-230 222 213
-74 115 139
-123 172 197
-172 115 74
-213 156 115
-98 156 57
-148 189 106
-189 164 32
-230 222 90
-57 57 57
-57 57 57
-106 156 213
-255 8 8
-222 57 74
-180 65 82
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-230 222 213
-0 0 0
-230 222 213
-0 0 0
diff --git a/graphics/naming_screen/ok_button.png b/graphics/naming_screen/ok_button.png
new file mode 100644
index 0000000000..3850f462a4
Binary files /dev/null and b/graphics/naming_screen/ok_button.png differ
diff --git a/graphics/naming_screen/page_button.png b/graphics/naming_screen/page_button.png
deleted file mode 100644
index e5a0048941..0000000000
Binary files a/graphics/naming_screen/page_button.png and /dev/null differ
diff --git a/graphics/naming_screen/page_swap_button.png b/graphics/naming_screen/page_swap_button.png
new file mode 100644
index 0000000000..2e5cabed0f
Binary files /dev/null and b/graphics/naming_screen/page_swap_button.png differ
diff --git a/graphics/naming_screen/page_swap_frame.png b/graphics/naming_screen/page_swap_frame.png
new file mode 100644
index 0000000000..bc3ff122b2
Binary files /dev/null and b/graphics/naming_screen/page_swap_frame.png differ
diff --git a/graphics/naming_screen/page_swap_lower.pal b/graphics/naming_screen/page_swap_lower.pal
new file mode 100644
index 0000000000..0fac7e3752
--- /dev/null
+++ b/graphics/naming_screen/page_swap_lower.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+106 156 213
+255 255 255
+57 57 57
+115 115 115
+0 0 0
+0 0 0
+0 0 0
+0 0 255
+0 0 255
+0 0 255
+0 0 255
+172 115 74
+189 131 90
+213 156 115
+246 205 164
+255 230 197
diff --git a/graphics/naming_screen/page_swap_lower.png b/graphics/naming_screen/page_swap_lower.png
new file mode 100644
index 0000000000..5747c6265d
Binary files /dev/null and b/graphics/naming_screen/page_swap_lower.png differ
diff --git a/graphics/naming_screen/page_swap_others.pal b/graphics/naming_screen/page_swap_others.pal
new file mode 100644
index 0000000000..0bb9d4f719
--- /dev/null
+++ b/graphics/naming_screen/page_swap_others.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+106 156 213
+255 255 255
+57 57 57
+115 115 115
+0 0 0
+0 0 0
+0 0 0
+0 0 255
+0 0 255
+0 0 255
+0 0 255
+98 156 57
+123 172 82
+148 189 106
+197 230 156
+213 238 189
diff --git a/graphics/naming_screen/page_swap_others.png b/graphics/naming_screen/page_swap_others.png
new file mode 100644
index 0000000000..1c878a7532
Binary files /dev/null and b/graphics/naming_screen/page_swap_others.png differ
diff --git a/graphics/naming_screen/page_swap_upper.pal b/graphics/naming_screen/page_swap_upper.pal
new file mode 100644
index 0000000000..af5c2d1a52
--- /dev/null
+++ b/graphics/naming_screen/page_swap_upper.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+106 156 213
+255 255 255
+57 57 57
+115 115 115
+0 0 0
+0 0 0
+0 0 0
+0 0 255
+0 0 255
+0 0 255
+0 0 255
+74 115 139
+98 139 164
+123 172 197
+156 205 230
+180 222 246
diff --git a/graphics/naming_screen/page_swap_upper.png b/graphics/naming_screen/page_swap_upper.png
new file mode 100644
index 0000000000..922f0b93f5
Binary files /dev/null and b/graphics/naming_screen/page_swap_upper.png differ
diff --git a/graphics/naming_screen/pc_icon/off.png b/graphics/naming_screen/pc_icon_off.png
similarity index 100%
rename from graphics/naming_screen/pc_icon/off.png
rename to graphics/naming_screen/pc_icon_off.png
diff --git a/graphics/naming_screen/pc_icon/on.png b/graphics/naming_screen/pc_icon_on.png
similarity index 100%
rename from graphics/naming_screen/pc_icon/on.png
rename to graphics/naming_screen/pc_icon_on.png
diff --git a/graphics/naming_screen/unused.pal b/graphics/naming_screen/rival.pal
similarity index 100%
rename from graphics/naming_screen/unused.pal
rename to graphics/naming_screen/rival.pal
diff --git a/graphics/naming_screen/roptions.png b/graphics/naming_screen/roptions.png
deleted file mode 100644
index dfb7e01059..0000000000
Binary files a/graphics/naming_screen/roptions.png and /dev/null differ
diff --git a/graphics/naming_screen/rwindow.png b/graphics/naming_screen/rwindow.png
deleted file mode 100644
index 9571abb805..0000000000
Binary files a/graphics/naming_screen/rwindow.png and /dev/null differ
diff --git a/graphics/naming_screen/underscore.png b/graphics/naming_screen/underscore.png
index 409ca82ed6..58d78ce086 100644
Binary files a/graphics/naming_screen/underscore.png and b/graphics/naming_screen/underscore.png differ
diff --git a/graphics/object_events/pics/berry_trees/chople.png b/graphics/object_events/pics/berry_trees/chople.png
new file mode 100644
index 0000000000..fc70a9af59
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/chople.png differ
diff --git a/graphics/object_events/pics/berry_trees/colbur.png b/graphics/object_events/pics/berry_trees/colbur.png
new file mode 100644
index 0000000000..241507aafd
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/colbur.png differ
diff --git a/graphics/object_events/pics/berry_trees/custap.png b/graphics/object_events/pics/berry_trees/custap.png
new file mode 100644
index 0000000000..3cb5ccfb10
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/custap.png differ
diff --git a/graphics/object_events/pics/berry_trees/haban.png b/graphics/object_events/pics/berry_trees/haban.png
new file mode 100644
index 0000000000..ba4839c80b
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/haban.png differ
diff --git a/graphics/object_events/pics/berry_trees/jaboca.png b/graphics/object_events/pics/berry_trees/jaboca.png
new file mode 100644
index 0000000000..36e51eb015
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/jaboca.png differ
diff --git a/graphics/object_events/pics/berry_trees/kasib.png b/graphics/object_events/pics/berry_trees/kasib.png
new file mode 100644
index 0000000000..b8a8401e8d
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/kasib.png differ
diff --git a/graphics/object_events/pics/berry_trees/kebia.png b/graphics/object_events/pics/berry_trees/kebia.png
new file mode 100644
index 0000000000..03efc73c1f
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/kebia.png differ
diff --git a/graphics/object_events/pics/berry_trees/micle.png b/graphics/object_events/pics/berry_trees/micle.png
new file mode 100644
index 0000000000..365ff43b21
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/micle.png differ
diff --git a/graphics/object_events/pics/berry_trees/occa.png b/graphics/object_events/pics/berry_trees/occa.png
new file mode 100644
index 0000000000..8685264f9b
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/occa.png differ
diff --git a/graphics/object_events/pics/berry_trees/payapa.png b/graphics/object_events/pics/berry_trees/payapa.png
new file mode 100644
index 0000000000..14aed0c235
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/payapa.png differ
diff --git a/graphics/object_events/pics/berry_trees/roseli.png b/graphics/object_events/pics/berry_trees/roseli.png
new file mode 100644
index 0000000000..f59bf93a2d
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/roseli.png differ
diff --git a/graphics/object_events/pics/berry_trees/rowap.png b/graphics/object_events/pics/berry_trees/rowap.png
new file mode 100644
index 0000000000..a0814bfa2e
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/rowap.png differ
diff --git a/graphics/object_events/pics/berry_trees/shuca.png b/graphics/object_events/pics/berry_trees/shuca.png
new file mode 100644
index 0000000000..4e95bb4f6a
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/shuca.png differ
diff --git a/graphics/object_events/pics/berry_trees/tanga.png b/graphics/object_events/pics/berry_trees/tanga.png
new file mode 100644
index 0000000000..28e86f6f4d
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/tanga.png differ
diff --git a/graphics/object_events/pics/berry_trees/yache.png b/graphics/object_events/pics/berry_trees/yache.png
new file mode 100644
index 0000000000..bde4393548
Binary files /dev/null and b/graphics/object_events/pics/berry_trees/yache.png differ
diff --git a/graphics/picture_frame/lobby.png b/graphics/picture_frame/lobby.png
index 1b7da4a1a6..2f04105ff0 100644
Binary files a/graphics/picture_frame/lobby.png and b/graphics/picture_frame/lobby.png differ
diff --git a/graphics/pokemon/mega_abomasnow/back.png b/graphics/pokemon/abomasnow/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_abomasnow/back.png
rename to graphics/pokemon/abomasnow/mega/back.png
diff --git a/graphics/pokemon/mega_abomasnow/front.png b/graphics/pokemon/abomasnow/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_abomasnow/front.png
rename to graphics/pokemon/abomasnow/mega/front.png
diff --git a/graphics/pokemon/mega_abomasnow/icon.png b/graphics/pokemon/abomasnow/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_abomasnow/icon.png
rename to graphics/pokemon/abomasnow/mega/icon.png
diff --git a/graphics/pokemon/mega_abomasnow/normal.pal b/graphics/pokemon/abomasnow/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_abomasnow/normal.pal
rename to graphics/pokemon/abomasnow/mega/normal.pal
diff --git a/graphics/pokemon/mega_abomasnow/shiny.pal b/graphics/pokemon/abomasnow/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_abomasnow/shiny.pal
rename to graphics/pokemon/abomasnow/mega/shiny.pal
diff --git a/graphics/pokemon/mega_absol/back.png b/graphics/pokemon/absol/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_absol/back.png
rename to graphics/pokemon/absol/mega/back.png
diff --git a/graphics/pokemon/mega_absol/front.png b/graphics/pokemon/absol/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_absol/front.png
rename to graphics/pokemon/absol/mega/front.png
diff --git a/graphics/pokemon/mega_absol/icon.png b/graphics/pokemon/absol/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_absol/icon.png
rename to graphics/pokemon/absol/mega/icon.png
diff --git a/graphics/pokemon/mega_absol/normal.pal b/graphics/pokemon/absol/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_absol/normal.pal
rename to graphics/pokemon/absol/mega/normal.pal
diff --git a/graphics/pokemon/mega_absol/shiny.pal b/graphics/pokemon/absol/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_absol/shiny.pal
rename to graphics/pokemon/absol/mega/shiny.pal
diff --git a/graphics/pokemon/mega_aerodactyl/back.png b/graphics/pokemon/aerodactyl/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_aerodactyl/back.png
rename to graphics/pokemon/aerodactyl/mega/back.png
diff --git a/graphics/pokemon/mega_aerodactyl/front.png b/graphics/pokemon/aerodactyl/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_aerodactyl/front.png
rename to graphics/pokemon/aerodactyl/mega/front.png
diff --git a/graphics/pokemon/mega_aerodactyl/icon.png b/graphics/pokemon/aerodactyl/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_aerodactyl/icon.png
rename to graphics/pokemon/aerodactyl/mega/icon.png
diff --git a/graphics/pokemon/mega_aerodactyl/normal.pal b/graphics/pokemon/aerodactyl/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_aerodactyl/normal.pal
rename to graphics/pokemon/aerodactyl/mega/normal.pal
diff --git a/graphics/pokemon/mega_aerodactyl/shiny.pal b/graphics/pokemon/aerodactyl/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_aerodactyl/shiny.pal
rename to graphics/pokemon/aerodactyl/mega/shiny.pal
diff --git a/graphics/pokemon/mega_aggron/back.png b/graphics/pokemon/aggron/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_aggron/back.png
rename to graphics/pokemon/aggron/mega/back.png
diff --git a/graphics/pokemon/mega_aggron/front.png b/graphics/pokemon/aggron/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_aggron/front.png
rename to graphics/pokemon/aggron/mega/front.png
diff --git a/graphics/pokemon/mega_aggron/icon.png b/graphics/pokemon/aggron/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_aggron/icon.png
rename to graphics/pokemon/aggron/mega/icon.png
diff --git a/graphics/pokemon/mega_aggron/normal.pal b/graphics/pokemon/aggron/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_aggron/normal.pal
rename to graphics/pokemon/aggron/mega/normal.pal
diff --git a/graphics/pokemon/mega_aggron/shiny.pal b/graphics/pokemon/aggron/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_aggron/shiny.pal
rename to graphics/pokemon/aggron/mega/shiny.pal
diff --git a/graphics/pokemon/mega_alakazam/back.png b/graphics/pokemon/alakazam/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_alakazam/back.png
rename to graphics/pokemon/alakazam/mega/back.png
diff --git a/graphics/pokemon/mega_alakazam/front.png b/graphics/pokemon/alakazam/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_alakazam/front.png
rename to graphics/pokemon/alakazam/mega/front.png
diff --git a/graphics/pokemon/mega_alakazam/icon.png b/graphics/pokemon/alakazam/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_alakazam/icon.png
rename to graphics/pokemon/alakazam/mega/icon.png
diff --git a/graphics/pokemon/mega_alakazam/normal.pal b/graphics/pokemon/alakazam/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_alakazam/normal.pal
rename to graphics/pokemon/alakazam/mega/normal.pal
diff --git a/graphics/pokemon/mega_alakazam/shiny.pal b/graphics/pokemon/alakazam/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_alakazam/shiny.pal
rename to graphics/pokemon/alakazam/mega/shiny.pal
diff --git a/graphics/pokemon/mega_altaria/back.png b/graphics/pokemon/altaria/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_altaria/back.png
rename to graphics/pokemon/altaria/mega/back.png
diff --git a/graphics/pokemon/mega_altaria/front.png b/graphics/pokemon/altaria/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_altaria/front.png
rename to graphics/pokemon/altaria/mega/front.png
diff --git a/graphics/pokemon/mega_altaria/icon.png b/graphics/pokemon/altaria/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_altaria/icon.png
rename to graphics/pokemon/altaria/mega/icon.png
diff --git a/graphics/pokemon/mega_altaria/normal.pal b/graphics/pokemon/altaria/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_altaria/normal.pal
rename to graphics/pokemon/altaria/mega/normal.pal
diff --git a/graphics/pokemon/mega_altaria/shiny.pal b/graphics/pokemon/altaria/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_altaria/shiny.pal
rename to graphics/pokemon/altaria/mega/shiny.pal
diff --git a/graphics/pokemon/mega_ampharos/back.png b/graphics/pokemon/ampharos/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_ampharos/back.png
rename to graphics/pokemon/ampharos/mega/back.png
diff --git a/graphics/pokemon/mega_ampharos/front.png b/graphics/pokemon/ampharos/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_ampharos/front.png
rename to graphics/pokemon/ampharos/mega/front.png
diff --git a/graphics/pokemon/mega_ampharos/icon.png b/graphics/pokemon/ampharos/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_ampharos/icon.png
rename to graphics/pokemon/ampharos/mega/icon.png
diff --git a/graphics/pokemon/mega_ampharos/normal.pal b/graphics/pokemon/ampharos/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_ampharos/normal.pal
rename to graphics/pokemon/ampharos/mega/normal.pal
diff --git a/graphics/pokemon/mega_ampharos/shiny.pal b/graphics/pokemon/ampharos/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_ampharos/shiny.pal
rename to graphics/pokemon/ampharos/mega/shiny.pal
diff --git a/graphics/pokemon/appletun/icon.png b/graphics/pokemon/appletun/icon.png
index 66de1521a9..3b474c0f08 100644
Binary files a/graphics/pokemon/appletun/icon.png and b/graphics/pokemon/appletun/icon.png differ
diff --git a/graphics/pokemon/applin/icon.png b/graphics/pokemon/applin/icon.png
index c518f91a04..ce9fee4a9a 100644
Binary files a/graphics/pokemon/applin/icon.png and b/graphics/pokemon/applin/icon.png differ
diff --git a/graphics/pokemon/articuno/galarian/icon.png b/graphics/pokemon/articuno/galarian/icon.png
index ce061cbc0d..556bd42b45 100644
Binary files a/graphics/pokemon/articuno/galarian/icon.png and b/graphics/pokemon/articuno/galarian/icon.png differ
diff --git a/graphics/pokemon/mega_audino/back.png b/graphics/pokemon/audino/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_audino/back.png
rename to graphics/pokemon/audino/mega/back.png
diff --git a/graphics/pokemon/mega_audino/front.png b/graphics/pokemon/audino/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_audino/front.png
rename to graphics/pokemon/audino/mega/front.png
diff --git a/graphics/pokemon/mega_audino/icon.png b/graphics/pokemon/audino/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_audino/icon.png
rename to graphics/pokemon/audino/mega/icon.png
diff --git a/graphics/pokemon/mega_audino/normal.pal b/graphics/pokemon/audino/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_audino/normal.pal
rename to graphics/pokemon/audino/mega/normal.pal
diff --git a/graphics/pokemon/mega_audino/shiny.pal b/graphics/pokemon/audino/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_audino/shiny.pal
rename to graphics/pokemon/audino/mega/shiny.pal
diff --git a/graphics/pokemon/mega_banette/back.png b/graphics/pokemon/banette/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_banette/back.png
rename to graphics/pokemon/banette/mega/back.png
diff --git a/graphics/pokemon/mega_banette/front.png b/graphics/pokemon/banette/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_banette/front.png
rename to graphics/pokemon/banette/mega/front.png
diff --git a/graphics/pokemon/mega_banette/icon.png b/graphics/pokemon/banette/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_banette/icon.png
rename to graphics/pokemon/banette/mega/icon.png
diff --git a/graphics/pokemon/mega_banette/normal.pal b/graphics/pokemon/banette/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_banette/normal.pal
rename to graphics/pokemon/banette/mega/normal.pal
diff --git a/graphics/pokemon/mega_banette/shiny.pal b/graphics/pokemon/banette/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_banette/shiny.pal
rename to graphics/pokemon/banette/mega/shiny.pal
diff --git a/graphics/pokemon/mega_beedrill/back.png b/graphics/pokemon/beedrill/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_beedrill/back.png
rename to graphics/pokemon/beedrill/mega/back.png
diff --git a/graphics/pokemon/mega_beedrill/front.png b/graphics/pokemon/beedrill/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_beedrill/front.png
rename to graphics/pokemon/beedrill/mega/front.png
diff --git a/graphics/pokemon/beedrill/mega/icon.png b/graphics/pokemon/beedrill/mega/icon.png
new file mode 100644
index 0000000000..9a1788b7e1
Binary files /dev/null and b/graphics/pokemon/beedrill/mega/icon.png differ
diff --git a/graphics/pokemon/mega_beedrill/normal.pal b/graphics/pokemon/beedrill/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_beedrill/normal.pal
rename to graphics/pokemon/beedrill/mega/normal.pal
diff --git a/graphics/pokemon/mega_beedrill/shiny.pal b/graphics/pokemon/beedrill/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_beedrill/shiny.pal
rename to graphics/pokemon/beedrill/mega/shiny.pal
diff --git a/graphics/pokemon/mega_blastoise/back.png b/graphics/pokemon/blastoise/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_blastoise/back.png
rename to graphics/pokemon/blastoise/mega/back.png
diff --git a/graphics/pokemon/mega_blastoise/front.png b/graphics/pokemon/blastoise/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_blastoise/front.png
rename to graphics/pokemon/blastoise/mega/front.png
diff --git a/graphics/pokemon/mega_blastoise/icon.png b/graphics/pokemon/blastoise/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_blastoise/icon.png
rename to graphics/pokemon/blastoise/mega/icon.png
diff --git a/graphics/pokemon/mega_blastoise/normal.pal b/graphics/pokemon/blastoise/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_blastoise/normal.pal
rename to graphics/pokemon/blastoise/mega/normal.pal
diff --git a/graphics/pokemon/mega_blastoise/shiny.pal b/graphics/pokemon/blastoise/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_blastoise/shiny.pal
rename to graphics/pokemon/blastoise/mega/shiny.pal
diff --git a/graphics/pokemon/mega_blaziken/back.png b/graphics/pokemon/blaziken/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_blaziken/back.png
rename to graphics/pokemon/blaziken/mega/back.png
diff --git a/graphics/pokemon/mega_blaziken/front.png b/graphics/pokemon/blaziken/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_blaziken/front.png
rename to graphics/pokemon/blaziken/mega/front.png
diff --git a/graphics/pokemon/mega_blaziken/icon.png b/graphics/pokemon/blaziken/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_blaziken/icon.png
rename to graphics/pokemon/blaziken/mega/icon.png
diff --git a/graphics/pokemon/mega_blaziken/normal.pal b/graphics/pokemon/blaziken/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_blaziken/normal.pal
rename to graphics/pokemon/blaziken/mega/normal.pal
diff --git a/graphics/pokemon/mega_blaziken/shiny.pal b/graphics/pokemon/blaziken/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_blaziken/shiny.pal
rename to graphics/pokemon/blaziken/mega/shiny.pal
diff --git a/graphics/pokemon/blipbug/icon.png b/graphics/pokemon/blipbug/icon.png
index e4ce3a937b..b3cf1cf792 100644
Binary files a/graphics/pokemon/blipbug/icon.png and b/graphics/pokemon/blipbug/icon.png differ
diff --git a/graphics/pokemon/mega_camerupt/back.png b/graphics/pokemon/camerupt/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_camerupt/back.png
rename to graphics/pokemon/camerupt/mega/back.png
diff --git a/graphics/pokemon/mega_camerupt/front.png b/graphics/pokemon/camerupt/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_camerupt/front.png
rename to graphics/pokemon/camerupt/mega/front.png
diff --git a/graphics/pokemon/mega_camerupt/icon.png b/graphics/pokemon/camerupt/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_camerupt/icon.png
rename to graphics/pokemon/camerupt/mega/icon.png
diff --git a/graphics/pokemon/mega_camerupt/normal.pal b/graphics/pokemon/camerupt/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_camerupt/normal.pal
rename to graphics/pokemon/camerupt/mega/normal.pal
diff --git a/graphics/pokemon/mega_camerupt/shiny.pal b/graphics/pokemon/camerupt/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_camerupt/shiny.pal
rename to graphics/pokemon/camerupt/mega/shiny.pal
diff --git a/graphics/pokemon/mega_charizard_x/back.png b/graphics/pokemon/charizard/mega_x/back.png
similarity index 100%
rename from graphics/pokemon/mega_charizard_x/back.png
rename to graphics/pokemon/charizard/mega_x/back.png
diff --git a/graphics/pokemon/mega_charizard_x/front.png b/graphics/pokemon/charizard/mega_x/front.png
similarity index 100%
rename from graphics/pokemon/mega_charizard_x/front.png
rename to graphics/pokemon/charizard/mega_x/front.png
diff --git a/graphics/pokemon/mega_charizard_x/icon.png b/graphics/pokemon/charizard/mega_x/icon.png
similarity index 100%
rename from graphics/pokemon/mega_charizard_x/icon.png
rename to graphics/pokemon/charizard/mega_x/icon.png
diff --git a/graphics/pokemon/mega_charizard_x/normal.pal b/graphics/pokemon/charizard/mega_x/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_charizard_x/normal.pal
rename to graphics/pokemon/charizard/mega_x/normal.pal
diff --git a/graphics/pokemon/mega_charizard_x/shiny.pal b/graphics/pokemon/charizard/mega_x/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_charizard_x/shiny.pal
rename to graphics/pokemon/charizard/mega_x/shiny.pal
diff --git a/graphics/pokemon/mega_charizard_y/back.png b/graphics/pokemon/charizard/mega_y/back.png
similarity index 100%
rename from graphics/pokemon/mega_charizard_y/back.png
rename to graphics/pokemon/charizard/mega_y/back.png
diff --git a/graphics/pokemon/mega_charizard_y/front.png b/graphics/pokemon/charizard/mega_y/front.png
similarity index 100%
rename from graphics/pokemon/mega_charizard_y/front.png
rename to graphics/pokemon/charizard/mega_y/front.png
diff --git a/graphics/pokemon/mega_charizard_y/icon.png b/graphics/pokemon/charizard/mega_y/icon.png
similarity index 100%
rename from graphics/pokemon/mega_charizard_y/icon.png
rename to graphics/pokemon/charizard/mega_y/icon.png
diff --git a/graphics/pokemon/mega_charizard_y/normal.pal b/graphics/pokemon/charizard/mega_y/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_charizard_y/normal.pal
rename to graphics/pokemon/charizard/mega_y/normal.pal
diff --git a/graphics/pokemon/mega_charizard_y/shiny.pal b/graphics/pokemon/charizard/mega_y/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_charizard_y/shiny.pal
rename to graphics/pokemon/charizard/mega_y/shiny.pal
diff --git a/graphics/pokemon/mega_diancie/back.png b/graphics/pokemon/diancie/mega/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/mega_diancie/back.png
rename to graphics/pokemon/diancie/mega/back.png
diff --git a/graphics/pokemon/mega_diancie/front.png b/graphics/pokemon/diancie/mega/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/mega_diancie/front.png
rename to graphics/pokemon/diancie/mega/front.png
diff --git a/graphics/pokemon/mega_diancie/icon.png b/graphics/pokemon/diancie/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_diancie/icon.png
rename to graphics/pokemon/diancie/mega/icon.png
diff --git a/graphics/pokemon/mega_diancie/normal.pal b/graphics/pokemon/diancie/mega/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/mega_diancie/normal.pal
rename to graphics/pokemon/diancie/mega/normal.pal
diff --git a/graphics/pokemon/mega_diancie/shiny.pal b/graphics/pokemon/diancie/mega/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/mega_diancie/shiny.pal
rename to graphics/pokemon/diancie/mega/shiny.pal
diff --git a/graphics/pokemon/alolan_diglett/back.png b/graphics/pokemon/diglett/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_diglett/back.png
rename to graphics/pokemon/diglett/alolan/back.png
diff --git a/graphics/pokemon/alolan_diglett/front.png b/graphics/pokemon/diglett/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_diglett/front.png
rename to graphics/pokemon/diglett/alolan/front.png
diff --git a/graphics/pokemon/alolan_diglett/icon.png b/graphics/pokemon/diglett/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_diglett/icon.png
rename to graphics/pokemon/diglett/alolan/icon.png
diff --git a/graphics/pokemon/alolan_diglett/normal.pal b/graphics/pokemon/diglett/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_diglett/normal.pal
rename to graphics/pokemon/diglett/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_diglett/shiny.pal b/graphics/pokemon/diglett/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_diglett/shiny.pal
rename to graphics/pokemon/diglett/alolan/shiny.pal
diff --git a/graphics/pokemon/alolan_dugtrio/back.png b/graphics/pokemon/dugtrio/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_dugtrio/back.png
rename to graphics/pokemon/dugtrio/alolan/back.png
diff --git a/graphics/pokemon/alolan_dugtrio/front.png b/graphics/pokemon/dugtrio/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_dugtrio/front.png
rename to graphics/pokemon/dugtrio/alolan/front.png
diff --git a/graphics/pokemon/alolan_dugtrio/icon.png b/graphics/pokemon/dugtrio/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_dugtrio/icon.png
rename to graphics/pokemon/dugtrio/alolan/icon.png
diff --git a/graphics/pokemon/alolan_dugtrio/normal.pal b/graphics/pokemon/dugtrio/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_dugtrio/normal.pal
rename to graphics/pokemon/dugtrio/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_dugtrio/shiny.pal b/graphics/pokemon/dugtrio/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_dugtrio/shiny.pal
rename to graphics/pokemon/dugtrio/alolan/shiny.pal
diff --git a/graphics/pokemon/alolan_exeggutor/back.png b/graphics/pokemon/exeggutor/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_exeggutor/back.png
rename to graphics/pokemon/exeggutor/alolan/back.png
diff --git a/graphics/pokemon/alolan_exeggutor/front.png b/graphics/pokemon/exeggutor/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_exeggutor/front.png
rename to graphics/pokemon/exeggutor/alolan/front.png
diff --git a/graphics/pokemon/alolan_exeggutor/icon.png b/graphics/pokemon/exeggutor/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_exeggutor/icon.png
rename to graphics/pokemon/exeggutor/alolan/icon.png
diff --git a/graphics/pokemon/alolan_exeggutor/normal.pal b/graphics/pokemon/exeggutor/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_exeggutor/normal.pal
rename to graphics/pokemon/exeggutor/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_exeggutor/shiny.pal b/graphics/pokemon/exeggutor/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_exeggutor/shiny.pal
rename to graphics/pokemon/exeggutor/alolan/shiny.pal
diff --git a/graphics/pokemon/mega_gallade/back.png b/graphics/pokemon/gallade/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_gallade/back.png
rename to graphics/pokemon/gallade/mega/back.png
diff --git a/graphics/pokemon/mega_gallade/front.png b/graphics/pokemon/gallade/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_gallade/front.png
rename to graphics/pokemon/gallade/mega/front.png
diff --git a/graphics/pokemon/mega_gallade/icon.png b/graphics/pokemon/gallade/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_gallade/icon.png
rename to graphics/pokemon/gallade/mega/icon.png
diff --git a/graphics/pokemon/mega_gallade/normal.pal b/graphics/pokemon/gallade/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_gallade/normal.pal
rename to graphics/pokemon/gallade/mega/normal.pal
diff --git a/graphics/pokemon/mega_gallade/shiny.pal b/graphics/pokemon/gallade/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_gallade/shiny.pal
rename to graphics/pokemon/gallade/mega/shiny.pal
diff --git a/graphics/pokemon/mega_garchomp/back.png b/graphics/pokemon/garchomp/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_garchomp/back.png
rename to graphics/pokemon/garchomp/mega/back.png
diff --git a/graphics/pokemon/mega_garchomp/front.png b/graphics/pokemon/garchomp/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_garchomp/front.png
rename to graphics/pokemon/garchomp/mega/front.png
diff --git a/graphics/pokemon/garchomp/mega/icon.png b/graphics/pokemon/garchomp/mega/icon.png
new file mode 100644
index 0000000000..4e37e08138
Binary files /dev/null and b/graphics/pokemon/garchomp/mega/icon.png differ
diff --git a/graphics/pokemon/mega_garchomp/normal.pal b/graphics/pokemon/garchomp/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_garchomp/normal.pal
rename to graphics/pokemon/garchomp/mega/normal.pal
diff --git a/graphics/pokemon/mega_garchomp/shiny.pal b/graphics/pokemon/garchomp/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_garchomp/shiny.pal
rename to graphics/pokemon/garchomp/mega/shiny.pal
diff --git a/graphics/pokemon/mega_gardevoir/back.png b/graphics/pokemon/gardevoir/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_gardevoir/back.png
rename to graphics/pokemon/gardevoir/mega/back.png
diff --git a/graphics/pokemon/mega_gardevoir/front.png b/graphics/pokemon/gardevoir/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_gardevoir/front.png
rename to graphics/pokemon/gardevoir/mega/front.png
diff --git a/graphics/pokemon/mega_gardevoir/icon.png b/graphics/pokemon/gardevoir/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_gardevoir/icon.png
rename to graphics/pokemon/gardevoir/mega/icon.png
diff --git a/graphics/pokemon/mega_gardevoir/normal.pal b/graphics/pokemon/gardevoir/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_gardevoir/normal.pal
rename to graphics/pokemon/gardevoir/mega/normal.pal
diff --git a/graphics/pokemon/mega_gardevoir/shiny.pal b/graphics/pokemon/gardevoir/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_gardevoir/shiny.pal
rename to graphics/pokemon/gardevoir/mega/shiny.pal
diff --git a/graphics/pokemon/mega_gengar/back.png b/graphics/pokemon/gengar/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_gengar/back.png
rename to graphics/pokemon/gengar/mega/back.png
diff --git a/graphics/pokemon/mega_gengar/front.png b/graphics/pokemon/gengar/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_gengar/front.png
rename to graphics/pokemon/gengar/mega/front.png
diff --git a/graphics/pokemon/mega_gengar/icon.png b/graphics/pokemon/gengar/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_gengar/icon.png
rename to graphics/pokemon/gengar/mega/icon.png
diff --git a/graphics/pokemon/mega_gengar/normal.pal b/graphics/pokemon/gengar/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_gengar/normal.pal
rename to graphics/pokemon/gengar/mega/normal.pal
diff --git a/graphics/pokemon/mega_gengar/shiny.pal b/graphics/pokemon/gengar/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_gengar/shiny.pal
rename to graphics/pokemon/gengar/mega/shiny.pal
diff --git a/graphics/pokemon/alolan_geodude/back.png b/graphics/pokemon/geodude/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_geodude/back.png
rename to graphics/pokemon/geodude/alolan/back.png
diff --git a/graphics/pokemon/alolan_geodude/front.png b/graphics/pokemon/geodude/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_geodude/front.png
rename to graphics/pokemon/geodude/alolan/front.png
diff --git a/graphics/pokemon/alolan_geodude/icon.png b/graphics/pokemon/geodude/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_geodude/icon.png
rename to graphics/pokemon/geodude/alolan/icon.png
diff --git a/graphics/pokemon/alolan_geodude/normal.pal b/graphics/pokemon/geodude/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_geodude/normal.pal
rename to graphics/pokemon/geodude/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_geodude/shiny.pal b/graphics/pokemon/geodude/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_geodude/shiny.pal
rename to graphics/pokemon/geodude/alolan/shiny.pal
diff --git a/graphics/pokemon/mega_glalie/back.png b/graphics/pokemon/glalie/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_glalie/back.png
rename to graphics/pokemon/glalie/mega/back.png
diff --git a/graphics/pokemon/mega_glalie/front.png b/graphics/pokemon/glalie/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_glalie/front.png
rename to graphics/pokemon/glalie/mega/front.png
diff --git a/graphics/pokemon/glalie/mega/icon.png b/graphics/pokemon/glalie/mega/icon.png
new file mode 100644
index 0000000000..d563426c4f
Binary files /dev/null and b/graphics/pokemon/glalie/mega/icon.png differ
diff --git a/graphics/pokemon/mega_glalie/normal.pal b/graphics/pokemon/glalie/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_glalie/normal.pal
rename to graphics/pokemon/glalie/mega/normal.pal
diff --git a/graphics/pokemon/mega_glalie/shiny.pal b/graphics/pokemon/glalie/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_glalie/shiny.pal
rename to graphics/pokemon/glalie/mega/shiny.pal
diff --git a/graphics/pokemon/alolan_golem/back.png b/graphics/pokemon/golem/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_golem/back.png
rename to graphics/pokemon/golem/alolan/back.png
diff --git a/graphics/pokemon/alolan_golem/front.png b/graphics/pokemon/golem/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_golem/front.png
rename to graphics/pokemon/golem/alolan/front.png
diff --git a/graphics/pokemon/alolan_golem/icon.png b/graphics/pokemon/golem/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_golem/icon.png
rename to graphics/pokemon/golem/alolan/icon.png
diff --git a/graphics/pokemon/alolan_golem/normal.pal b/graphics/pokemon/golem/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_golem/normal.pal
rename to graphics/pokemon/golem/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_golem/shiny.pal b/graphics/pokemon/golem/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_golem/shiny.pal
rename to graphics/pokemon/golem/alolan/shiny.pal
diff --git a/graphics/pokemon/alolan_graveler/back.png b/graphics/pokemon/graveler/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_graveler/back.png
rename to graphics/pokemon/graveler/alolan/back.png
diff --git a/graphics/pokemon/alolan_graveler/front.png b/graphics/pokemon/graveler/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_graveler/front.png
rename to graphics/pokemon/graveler/alolan/front.png
diff --git a/graphics/pokemon/alolan_graveler/icon.png b/graphics/pokemon/graveler/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_graveler/icon.png
rename to graphics/pokemon/graveler/alolan/icon.png
diff --git a/graphics/pokemon/alolan_graveler/normal.pal b/graphics/pokemon/graveler/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_graveler/normal.pal
rename to graphics/pokemon/graveler/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_graveler/shiny.pal b/graphics/pokemon/graveler/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_graveler/shiny.pal
rename to graphics/pokemon/graveler/alolan/shiny.pal
diff --git a/graphics/pokemon/alolan_grimer/back.png b/graphics/pokemon/grimer/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_grimer/back.png
rename to graphics/pokemon/grimer/alolan/back.png
diff --git a/graphics/pokemon/alolan_grimer/front.png b/graphics/pokemon/grimer/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_grimer/front.png
rename to graphics/pokemon/grimer/alolan/front.png
diff --git a/graphics/pokemon/alolan_grimer/icon.png b/graphics/pokemon/grimer/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_grimer/icon.png
rename to graphics/pokemon/grimer/alolan/icon.png
diff --git a/graphics/pokemon/alolan_grimer/normal.pal b/graphics/pokemon/grimer/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_grimer/normal.pal
rename to graphics/pokemon/grimer/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_grimer/shiny.pal b/graphics/pokemon/grimer/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_grimer/shiny.pal
rename to graphics/pokemon/grimer/alolan/shiny.pal
diff --git a/graphics/pokemon/primal_groudon/back.png b/graphics/pokemon/groudon/primal/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/primal_groudon/back.png
rename to graphics/pokemon/groudon/primal/back.png
diff --git a/graphics/pokemon/primal_groudon/front.png b/graphics/pokemon/groudon/primal/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/primal_groudon/front.png
rename to graphics/pokemon/groudon/primal/front.png
diff --git a/graphics/pokemon/primal_groudon/icon.png b/graphics/pokemon/groudon/primal/icon.png
similarity index 100%
rename from graphics/pokemon/primal_groudon/icon.png
rename to graphics/pokemon/groudon/primal/icon.png
diff --git a/graphics/pokemon/primal_groudon/normal.pal b/graphics/pokemon/groudon/primal/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/primal_groudon/normal.pal
rename to graphics/pokemon/groudon/primal/normal.pal
diff --git a/graphics/pokemon/primal_groudon/shiny.pal b/graphics/pokemon/groudon/primal/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/primal_groudon/shiny.pal
rename to graphics/pokemon/groudon/primal/shiny.pal
diff --git a/graphics/pokemon/mega_gyarados/back.png b/graphics/pokemon/gyarados/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_gyarados/back.png
rename to graphics/pokemon/gyarados/mega/back.png
diff --git a/graphics/pokemon/mega_gyarados/front.png b/graphics/pokemon/gyarados/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_gyarados/front.png
rename to graphics/pokemon/gyarados/mega/front.png
diff --git a/graphics/pokemon/mega_gyarados/icon.png b/graphics/pokemon/gyarados/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_gyarados/icon.png
rename to graphics/pokemon/gyarados/mega/icon.png
diff --git a/graphics/pokemon/mega_gyarados/normal.pal b/graphics/pokemon/gyarados/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_gyarados/normal.pal
rename to graphics/pokemon/gyarados/mega/normal.pal
diff --git a/graphics/pokemon/mega_gyarados/shiny.pal b/graphics/pokemon/gyarados/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_gyarados/shiny.pal
rename to graphics/pokemon/gyarados/mega/shiny.pal
diff --git a/graphics/pokemon/mega_heracross/back.png b/graphics/pokemon/heracross/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_heracross/back.png
rename to graphics/pokemon/heracross/mega/back.png
diff --git a/graphics/pokemon/mega_heracross/front.png b/graphics/pokemon/heracross/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_heracross/front.png
rename to graphics/pokemon/heracross/mega/front.png
diff --git a/graphics/pokemon/mega_heracross/icon.png b/graphics/pokemon/heracross/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_heracross/icon.png
rename to graphics/pokemon/heracross/mega/icon.png
diff --git a/graphics/pokemon/mega_heracross/normal.pal b/graphics/pokemon/heracross/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_heracross/normal.pal
rename to graphics/pokemon/heracross/mega/normal.pal
diff --git a/graphics/pokemon/mega_heracross/shiny.pal b/graphics/pokemon/heracross/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_heracross/shiny.pal
rename to graphics/pokemon/heracross/mega/shiny.pal
diff --git a/graphics/pokemon/mega_houndoom/back.png b/graphics/pokemon/houndoom/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_houndoom/back.png
rename to graphics/pokemon/houndoom/mega/back.png
diff --git a/graphics/pokemon/mega_houndoom/front.png b/graphics/pokemon/houndoom/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_houndoom/front.png
rename to graphics/pokemon/houndoom/mega/front.png
diff --git a/graphics/pokemon/mega_houndoom/icon.png b/graphics/pokemon/houndoom/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_houndoom/icon.png
rename to graphics/pokemon/houndoom/mega/icon.png
diff --git a/graphics/pokemon/mega_houndoom/normal.pal b/graphics/pokemon/houndoom/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_houndoom/normal.pal
rename to graphics/pokemon/houndoom/mega/normal.pal
diff --git a/graphics/pokemon/mega_houndoom/shiny.pal b/graphics/pokemon/houndoom/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_houndoom/shiny.pal
rename to graphics/pokemon/houndoom/mega/shiny.pal
diff --git a/graphics/pokemon/mega_kangaskhan/back.png b/graphics/pokemon/kangaskhan/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_kangaskhan/back.png
rename to graphics/pokemon/kangaskhan/mega/back.png
diff --git a/graphics/pokemon/mega_kangaskhan/front.png b/graphics/pokemon/kangaskhan/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_kangaskhan/front.png
rename to graphics/pokemon/kangaskhan/mega/front.png
diff --git a/graphics/pokemon/mega_kangaskhan/icon.png b/graphics/pokemon/kangaskhan/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_kangaskhan/icon.png
rename to graphics/pokemon/kangaskhan/mega/icon.png
diff --git a/graphics/pokemon/mega_kangaskhan/normal.pal b/graphics/pokemon/kangaskhan/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_kangaskhan/normal.pal
rename to graphics/pokemon/kangaskhan/mega/normal.pal
diff --git a/graphics/pokemon/mega_kangaskhan/shiny.pal b/graphics/pokemon/kangaskhan/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_kangaskhan/shiny.pal
rename to graphics/pokemon/kangaskhan/mega/shiny.pal
diff --git a/graphics/pokemon/primal_kyogre/back.png b/graphics/pokemon/kyogre/primal/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/primal_kyogre/back.png
rename to graphics/pokemon/kyogre/primal/back.png
diff --git a/graphics/pokemon/primal_kyogre/front.png b/graphics/pokemon/kyogre/primal/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/primal_kyogre/front.png
rename to graphics/pokemon/kyogre/primal/front.png
diff --git a/graphics/pokemon/primal_kyogre/icon.png b/graphics/pokemon/kyogre/primal/icon.png
similarity index 100%
rename from graphics/pokemon/primal_kyogre/icon.png
rename to graphics/pokemon/kyogre/primal/icon.png
diff --git a/graphics/pokemon/primal_kyogre/normal.pal b/graphics/pokemon/kyogre/primal/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/primal_kyogre/normal.pal
rename to graphics/pokemon/kyogre/primal/normal.pal
diff --git a/graphics/pokemon/primal_kyogre/shiny.pal b/graphics/pokemon/kyogre/primal/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/primal_kyogre/shiny.pal
rename to graphics/pokemon/kyogre/primal/shiny.pal
diff --git a/graphics/pokemon/mega_latias/back.png b/graphics/pokemon/latias/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_latias/back.png
rename to graphics/pokemon/latias/mega/back.png
diff --git a/graphics/pokemon/mega_latias/front.png b/graphics/pokemon/latias/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_latias/front.png
rename to graphics/pokemon/latias/mega/front.png
diff --git a/graphics/pokemon/latias/mega/icon.png b/graphics/pokemon/latias/mega/icon.png
new file mode 100644
index 0000000000..0d022d8027
Binary files /dev/null and b/graphics/pokemon/latias/mega/icon.png differ
diff --git a/graphics/pokemon/mega_latias/normal.pal b/graphics/pokemon/latias/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_latias/normal.pal
rename to graphics/pokemon/latias/mega/normal.pal
diff --git a/graphics/pokemon/mega_latias/shiny.pal b/graphics/pokemon/latias/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_latias/shiny.pal
rename to graphics/pokemon/latias/mega/shiny.pal
diff --git a/graphics/pokemon/mega_latios/back.png b/graphics/pokemon/latios/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_latios/back.png
rename to graphics/pokemon/latios/mega/back.png
diff --git a/graphics/pokemon/mega_latios/front.png b/graphics/pokemon/latios/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_latios/front.png
rename to graphics/pokemon/latios/mega/front.png
diff --git a/graphics/pokemon/latios/mega/icon.png b/graphics/pokemon/latios/mega/icon.png
new file mode 100644
index 0000000000..8d594c2fa7
Binary files /dev/null and b/graphics/pokemon/latios/mega/icon.png differ
diff --git a/graphics/pokemon/mega_latios/normal.pal b/graphics/pokemon/latios/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_latios/normal.pal
rename to graphics/pokemon/latios/mega/normal.pal
diff --git a/graphics/pokemon/mega_latios/shiny.pal b/graphics/pokemon/latios/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_latios/shiny.pal
rename to graphics/pokemon/latios/mega/shiny.pal
diff --git a/graphics/pokemon/mega_lopunny/back.png b/graphics/pokemon/lopunny/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_lopunny/back.png
rename to graphics/pokemon/lopunny/mega/back.png
diff --git a/graphics/pokemon/mega_lopunny/front.png b/graphics/pokemon/lopunny/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_lopunny/front.png
rename to graphics/pokemon/lopunny/mega/front.png
diff --git a/graphics/pokemon/mega_lopunny/icon.png b/graphics/pokemon/lopunny/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_lopunny/icon.png
rename to graphics/pokemon/lopunny/mega/icon.png
diff --git a/graphics/pokemon/mega_lopunny/normal.pal b/graphics/pokemon/lopunny/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_lopunny/normal.pal
rename to graphics/pokemon/lopunny/mega/normal.pal
diff --git a/graphics/pokemon/mega_lopunny/shiny.pal b/graphics/pokemon/lopunny/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_lopunny/shiny.pal
rename to graphics/pokemon/lopunny/mega/shiny.pal
diff --git a/graphics/pokemon/mega_lucario/back.png b/graphics/pokemon/lucario/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_lucario/back.png
rename to graphics/pokemon/lucario/mega/back.png
diff --git a/graphics/pokemon/mega_lucario/front.png b/graphics/pokemon/lucario/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_lucario/front.png
rename to graphics/pokemon/lucario/mega/front.png
diff --git a/graphics/pokemon/mega_lucario/icon.png b/graphics/pokemon/lucario/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_lucario/icon.png
rename to graphics/pokemon/lucario/mega/icon.png
diff --git a/graphics/pokemon/mega_lucario/normal.pal b/graphics/pokemon/lucario/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_lucario/normal.pal
rename to graphics/pokemon/lucario/mega/normal.pal
diff --git a/graphics/pokemon/mega_lucario/shiny.pal b/graphics/pokemon/lucario/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_lucario/shiny.pal
rename to graphics/pokemon/lucario/mega/shiny.pal
diff --git a/graphics/pokemon/mega_manectric/back.png b/graphics/pokemon/manectric/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_manectric/back.png
rename to graphics/pokemon/manectric/mega/back.png
diff --git a/graphics/pokemon/mega_manectric/front.png b/graphics/pokemon/manectric/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_manectric/front.png
rename to graphics/pokemon/manectric/mega/front.png
diff --git a/graphics/pokemon/mega_manectric/icon.png b/graphics/pokemon/manectric/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_manectric/icon.png
rename to graphics/pokemon/manectric/mega/icon.png
diff --git a/graphics/pokemon/mega_manectric/normal.pal b/graphics/pokemon/manectric/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_manectric/normal.pal
rename to graphics/pokemon/manectric/mega/normal.pal
diff --git a/graphics/pokemon/mega_manectric/shiny.pal b/graphics/pokemon/manectric/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_manectric/shiny.pal
rename to graphics/pokemon/manectric/mega/shiny.pal
diff --git a/graphics/pokemon/alolan_marowak/back.png b/graphics/pokemon/marowak/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_marowak/back.png
rename to graphics/pokemon/marowak/alolan/back.png
diff --git a/graphics/pokemon/alolan_marowak/front.png b/graphics/pokemon/marowak/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_marowak/front.png
rename to graphics/pokemon/marowak/alolan/front.png
diff --git a/graphics/pokemon/alolan_marowak/icon.png b/graphics/pokemon/marowak/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_marowak/icon.png
rename to graphics/pokemon/marowak/alolan/icon.png
diff --git a/graphics/pokemon/alolan_marowak/normal.pal b/graphics/pokemon/marowak/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_marowak/normal.pal
rename to graphics/pokemon/marowak/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_marowak/shiny.pal b/graphics/pokemon/marowak/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_marowak/shiny.pal
rename to graphics/pokemon/marowak/alolan/shiny.pal
diff --git a/graphics/pokemon/mega_mawile/back.png b/graphics/pokemon/mawile/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_mawile/back.png
rename to graphics/pokemon/mawile/mega/back.png
diff --git a/graphics/pokemon/mega_mawile/front.png b/graphics/pokemon/mawile/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_mawile/front.png
rename to graphics/pokemon/mawile/mega/front.png
diff --git a/graphics/pokemon/mawile/mega/icon.png b/graphics/pokemon/mawile/mega/icon.png
new file mode 100644
index 0000000000..6fdec15ccf
Binary files /dev/null and b/graphics/pokemon/mawile/mega/icon.png differ
diff --git a/graphics/pokemon/mega_mawile/normal.pal b/graphics/pokemon/mawile/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_mawile/normal.pal
rename to graphics/pokemon/mawile/mega/normal.pal
diff --git a/graphics/pokemon/mega_mawile/shiny.pal b/graphics/pokemon/mawile/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_mawile/shiny.pal
rename to graphics/pokemon/mawile/mega/shiny.pal
diff --git a/graphics/pokemon/mega_medicham/back.png b/graphics/pokemon/medicham/mega/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/mega_medicham/back.png
rename to graphics/pokemon/medicham/mega/back.png
diff --git a/graphics/pokemon/mega_medicham/front.png b/graphics/pokemon/medicham/mega/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/mega_medicham/front.png
rename to graphics/pokemon/medicham/mega/front.png
diff --git a/graphics/pokemon/mega_medicham/icon.png b/graphics/pokemon/medicham/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_medicham/icon.png
rename to graphics/pokemon/medicham/mega/icon.png
diff --git a/graphics/pokemon/mega_medicham/normal.pal b/graphics/pokemon/medicham/mega/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/mega_medicham/normal.pal
rename to graphics/pokemon/medicham/mega/normal.pal
diff --git a/graphics/pokemon/mega_medicham/shiny.pal b/graphics/pokemon/medicham/mega/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/mega_medicham/shiny.pal
rename to graphics/pokemon/medicham/mega/shiny.pal
diff --git a/graphics/pokemon/mega_beedrill/icon.png b/graphics/pokemon/mega_beedrill/icon.png
deleted file mode 100644
index 4c5b8fe46f..0000000000
Binary files a/graphics/pokemon/mega_beedrill/icon.png and /dev/null differ
diff --git a/graphics/pokemon/mega_garchomp/icon.png b/graphics/pokemon/mega_garchomp/icon.png
deleted file mode 100644
index 1686382434..0000000000
Binary files a/graphics/pokemon/mega_garchomp/icon.png and /dev/null differ
diff --git a/graphics/pokemon/mega_glalie/icon.png b/graphics/pokemon/mega_glalie/icon.png
deleted file mode 100644
index 02596508e7..0000000000
Binary files a/graphics/pokemon/mega_glalie/icon.png and /dev/null differ
diff --git a/graphics/pokemon/mega_latias/icon.png b/graphics/pokemon/mega_latias/icon.png
deleted file mode 100644
index 9c4c1c20f9..0000000000
Binary files a/graphics/pokemon/mega_latias/icon.png and /dev/null differ
diff --git a/graphics/pokemon/mega_latios/icon.png b/graphics/pokemon/mega_latios/icon.png
deleted file mode 100644
index 011c2d8f6d..0000000000
Binary files a/graphics/pokemon/mega_latios/icon.png and /dev/null differ
diff --git a/graphics/pokemon/mega_mawile/icon.png b/graphics/pokemon/mega_mawile/icon.png
deleted file mode 100644
index 81e49c8972..0000000000
Binary files a/graphics/pokemon/mega_mawile/icon.png and /dev/null differ
diff --git a/graphics/pokemon/mega_pidgeot/icon.png b/graphics/pokemon/mega_pidgeot/icon.png
deleted file mode 100644
index 255fffe589..0000000000
Binary files a/graphics/pokemon/mega_pidgeot/icon.png and /dev/null differ
diff --git a/graphics/pokemon/mega_scizor/icon.png b/graphics/pokemon/mega_scizor/icon.png
deleted file mode 100644
index e6a4eb0652..0000000000
Binary files a/graphics/pokemon/mega_scizor/icon.png and /dev/null differ
diff --git a/graphics/pokemon/mega_slowbro/icon.png b/graphics/pokemon/mega_slowbro/icon.png
deleted file mode 100644
index 621fe41840..0000000000
Binary files a/graphics/pokemon/mega_slowbro/icon.png and /dev/null differ
diff --git a/graphics/pokemon/alolan_meowth/back.png b/graphics/pokemon/meowth/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_meowth/back.png
rename to graphics/pokemon/meowth/alolan/back.png
diff --git a/graphics/pokemon/alolan_meowth/front.png b/graphics/pokemon/meowth/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_meowth/front.png
rename to graphics/pokemon/meowth/alolan/front.png
diff --git a/graphics/pokemon/alolan_meowth/icon.png b/graphics/pokemon/meowth/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_meowth/icon.png
rename to graphics/pokemon/meowth/alolan/icon.png
diff --git a/graphics/pokemon/alolan_meowth/normal.pal b/graphics/pokemon/meowth/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_meowth/normal.pal
rename to graphics/pokemon/meowth/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_meowth/shiny.pal b/graphics/pokemon/meowth/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_meowth/shiny.pal
rename to graphics/pokemon/meowth/alolan/shiny.pal
diff --git a/graphics/pokemon/mega_metagross/back.png b/graphics/pokemon/metagross/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_metagross/back.png
rename to graphics/pokemon/metagross/mega/back.png
diff --git a/graphics/pokemon/mega_metagross/front.png b/graphics/pokemon/metagross/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_metagross/front.png
rename to graphics/pokemon/metagross/mega/front.png
diff --git a/graphics/pokemon/mega_metagross/icon.png b/graphics/pokemon/metagross/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_metagross/icon.png
rename to graphics/pokemon/metagross/mega/icon.png
diff --git a/graphics/pokemon/mega_metagross/normal.pal b/graphics/pokemon/metagross/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_metagross/normal.pal
rename to graphics/pokemon/metagross/mega/normal.pal
diff --git a/graphics/pokemon/mega_metagross/shiny.pal b/graphics/pokemon/metagross/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_metagross/shiny.pal
rename to graphics/pokemon/metagross/mega/shiny.pal
diff --git a/graphics/pokemon/mega_mewtwo_x/back.png b/graphics/pokemon/mewtwo/mega_x/back.png
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_x/back.png
rename to graphics/pokemon/mewtwo/mega_x/back.png
diff --git a/graphics/pokemon/mega_mewtwo_x/front.png b/graphics/pokemon/mewtwo/mega_x/front.png
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_x/front.png
rename to graphics/pokemon/mewtwo/mega_x/front.png
diff --git a/graphics/pokemon/mega_mewtwo_x/icon.png b/graphics/pokemon/mewtwo/mega_x/icon.png
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_x/icon.png
rename to graphics/pokemon/mewtwo/mega_x/icon.png
diff --git a/graphics/pokemon/mega_mewtwo_x/normal.pal b/graphics/pokemon/mewtwo/mega_x/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_x/normal.pal
rename to graphics/pokemon/mewtwo/mega_x/normal.pal
diff --git a/graphics/pokemon/mega_mewtwo_x/shiny.pal b/graphics/pokemon/mewtwo/mega_x/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_x/shiny.pal
rename to graphics/pokemon/mewtwo/mega_x/shiny.pal
diff --git a/graphics/pokemon/mega_mewtwo_y/back.png b/graphics/pokemon/mewtwo/mega_y/back.png
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_y/back.png
rename to graphics/pokemon/mewtwo/mega_y/back.png
diff --git a/graphics/pokemon/mega_mewtwo_y/front.png b/graphics/pokemon/mewtwo/mega_y/front.png
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_y/front.png
rename to graphics/pokemon/mewtwo/mega_y/front.png
diff --git a/graphics/pokemon/mega_mewtwo_y/icon.png b/graphics/pokemon/mewtwo/mega_y/icon.png
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_y/icon.png
rename to graphics/pokemon/mewtwo/mega_y/icon.png
diff --git a/graphics/pokemon/mega_mewtwo_y/normal.pal b/graphics/pokemon/mewtwo/mega_y/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_y/normal.pal
rename to graphics/pokemon/mewtwo/mega_y/normal.pal
diff --git a/graphics/pokemon/mega_mewtwo_y/shiny.pal b/graphics/pokemon/mewtwo/mega_y/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_mewtwo_y/shiny.pal
rename to graphics/pokemon/mewtwo/mega_y/shiny.pal
diff --git a/graphics/pokemon/moltres/galarian/icon.png b/graphics/pokemon/moltres/galarian/icon.png
index 90edae5219..0f469cbf5a 100644
Binary files a/graphics/pokemon/moltres/galarian/icon.png and b/graphics/pokemon/moltres/galarian/icon.png differ
diff --git a/graphics/pokemon/alolan_muk/back.png b/graphics/pokemon/muk/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_muk/back.png
rename to graphics/pokemon/muk/alolan/back.png
diff --git a/graphics/pokemon/alolan_muk/front.png b/graphics/pokemon/muk/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_muk/front.png
rename to graphics/pokemon/muk/alolan/front.png
diff --git a/graphics/pokemon/alolan_muk/icon.png b/graphics/pokemon/muk/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_muk/icon.png
rename to graphics/pokemon/muk/alolan/icon.png
diff --git a/graphics/pokemon/alolan_muk/normal.pal b/graphics/pokemon/muk/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_muk/normal.pal
rename to graphics/pokemon/muk/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_muk/shiny.pal b/graphics/pokemon/muk/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_muk/shiny.pal
rename to graphics/pokemon/muk/alolan/shiny.pal
diff --git a/graphics/pokemon/alolan_ninetales/back.png b/graphics/pokemon/ninetales/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_ninetales/back.png
rename to graphics/pokemon/ninetales/alolan/back.png
diff --git a/graphics/pokemon/alolan_ninetales/front.png b/graphics/pokemon/ninetales/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_ninetales/front.png
rename to graphics/pokemon/ninetales/alolan/front.png
diff --git a/graphics/pokemon/alolan_ninetales/icon.png b/graphics/pokemon/ninetales/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_ninetales/icon.png
rename to graphics/pokemon/ninetales/alolan/icon.png
diff --git a/graphics/pokemon/alolan_ninetales/normal.pal b/graphics/pokemon/ninetales/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_ninetales/normal.pal
rename to graphics/pokemon/ninetales/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_ninetales/shiny.pal b/graphics/pokemon/ninetales/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_ninetales/shiny.pal
rename to graphics/pokemon/ninetales/alolan/shiny.pal
diff --git a/graphics/pokemon/alolan_persian/back.png b/graphics/pokemon/persian/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_persian/back.png
rename to graphics/pokemon/persian/alolan/back.png
diff --git a/graphics/pokemon/alolan_persian/front.png b/graphics/pokemon/persian/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_persian/front.png
rename to graphics/pokemon/persian/alolan/front.png
diff --git a/graphics/pokemon/alolan_persian/icon.png b/graphics/pokemon/persian/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_persian/icon.png
rename to graphics/pokemon/persian/alolan/icon.png
diff --git a/graphics/pokemon/alolan_persian/normal.pal b/graphics/pokemon/persian/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_persian/normal.pal
rename to graphics/pokemon/persian/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_persian/shiny.pal b/graphics/pokemon/persian/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_persian/shiny.pal
rename to graphics/pokemon/persian/alolan/shiny.pal
diff --git a/graphics/pokemon/mega_pidgeot/back.png b/graphics/pokemon/pidgeot/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_pidgeot/back.png
rename to graphics/pokemon/pidgeot/mega/back.png
diff --git a/graphics/pokemon/mega_pidgeot/front.png b/graphics/pokemon/pidgeot/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_pidgeot/front.png
rename to graphics/pokemon/pidgeot/mega/front.png
diff --git a/graphics/pokemon/pidgeot/mega/icon.png b/graphics/pokemon/pidgeot/mega/icon.png
new file mode 100644
index 0000000000..32cb6e1f11
Binary files /dev/null and b/graphics/pokemon/pidgeot/mega/icon.png differ
diff --git a/graphics/pokemon/mega_pidgeot/normal.pal b/graphics/pokemon/pidgeot/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_pidgeot/normal.pal
rename to graphics/pokemon/pidgeot/mega/normal.pal
diff --git a/graphics/pokemon/mega_pidgeot/shiny.pal b/graphics/pokemon/pidgeot/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_pidgeot/shiny.pal
rename to graphics/pokemon/pidgeot/mega/shiny.pal
diff --git a/graphics/pokemon/mega_pinsir/back.png b/graphics/pokemon/pinsir/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_pinsir/back.png
rename to graphics/pokemon/pinsir/mega/back.png
diff --git a/graphics/pokemon/mega_pinsir/front.png b/graphics/pokemon/pinsir/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_pinsir/front.png
rename to graphics/pokemon/pinsir/mega/front.png
diff --git a/graphics/pokemon/mega_pinsir/icon.png b/graphics/pokemon/pinsir/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_pinsir/icon.png
rename to graphics/pokemon/pinsir/mega/icon.png
diff --git a/graphics/pokemon/mega_pinsir/normal.pal b/graphics/pokemon/pinsir/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_pinsir/normal.pal
rename to graphics/pokemon/pinsir/mega/normal.pal
diff --git a/graphics/pokemon/mega_pinsir/shiny.pal b/graphics/pokemon/pinsir/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_pinsir/shiny.pal
rename to graphics/pokemon/pinsir/mega/shiny.pal
diff --git a/graphics/pokemon/alolan_raichu/back.png b/graphics/pokemon/raichu/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raichu/back.png
rename to graphics/pokemon/raichu/alolan/back.png
diff --git a/graphics/pokemon/alolan_raichu/front.png b/graphics/pokemon/raichu/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raichu/front.png
rename to graphics/pokemon/raichu/alolan/front.png
diff --git a/graphics/pokemon/alolan_raichu/icon.png b/graphics/pokemon/raichu/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raichu/icon.png
rename to graphics/pokemon/raichu/alolan/icon.png
diff --git a/graphics/pokemon/alolan_raichu/normal.pal b/graphics/pokemon/raichu/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raichu/normal.pal
rename to graphics/pokemon/raichu/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_raichu/shiny.pal b/graphics/pokemon/raichu/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raichu/shiny.pal
rename to graphics/pokemon/raichu/alolan/shiny.pal
diff --git a/graphics/pokemon/alolan_raticate/back.png b/graphics/pokemon/raticate/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raticate/back.png
rename to graphics/pokemon/raticate/alolan/back.png
diff --git a/graphics/pokemon/alolan_raticate/front.png b/graphics/pokemon/raticate/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raticate/front.png
rename to graphics/pokemon/raticate/alolan/front.png
diff --git a/graphics/pokemon/alolan_raticate/icon.png b/graphics/pokemon/raticate/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raticate/icon.png
rename to graphics/pokemon/raticate/alolan/icon.png
diff --git a/graphics/pokemon/alolan_raticate/normal.pal b/graphics/pokemon/raticate/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raticate/normal.pal
rename to graphics/pokemon/raticate/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_raticate/shiny.pal b/graphics/pokemon/raticate/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_raticate/shiny.pal
rename to graphics/pokemon/raticate/alolan/shiny.pal
diff --git a/graphics/pokemon/alolan_rattata/back.png b/graphics/pokemon/rattata/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_rattata/back.png
rename to graphics/pokemon/rattata/alolan/back.png
diff --git a/graphics/pokemon/alolan_rattata/front.png b/graphics/pokemon/rattata/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_rattata/front.png
rename to graphics/pokemon/rattata/alolan/front.png
diff --git a/graphics/pokemon/alolan_rattata/icon.png b/graphics/pokemon/rattata/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_rattata/icon.png
rename to graphics/pokemon/rattata/alolan/icon.png
diff --git a/graphics/pokemon/alolan_rattata/normal.pal b/graphics/pokemon/rattata/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_rattata/normal.pal
rename to graphics/pokemon/rattata/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_rattata/shiny.pal b/graphics/pokemon/rattata/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_rattata/shiny.pal
rename to graphics/pokemon/rattata/alolan/shiny.pal
diff --git a/graphics/pokemon/mega_rayquaza/back.png b/graphics/pokemon/rayquaza/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_rayquaza/back.png
rename to graphics/pokemon/rayquaza/mega/back.png
diff --git a/graphics/pokemon/mega_rayquaza/front.png b/graphics/pokemon/rayquaza/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_rayquaza/front.png
rename to graphics/pokemon/rayquaza/mega/front.png
diff --git a/graphics/pokemon/mega_rayquaza/icon.png b/graphics/pokemon/rayquaza/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_rayquaza/icon.png
rename to graphics/pokemon/rayquaza/mega/icon.png
diff --git a/graphics/pokemon/mega_rayquaza/normal.pal b/graphics/pokemon/rayquaza/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_rayquaza/normal.pal
rename to graphics/pokemon/rayquaza/mega/normal.pal
diff --git a/graphics/pokemon/mega_rayquaza/shiny.pal b/graphics/pokemon/rayquaza/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_rayquaza/shiny.pal
rename to graphics/pokemon/rayquaza/mega/shiny.pal
diff --git a/graphics/pokemon/regidrago/icon.png b/graphics/pokemon/regidrago/icon.png
index b6cfa5d9d8..3b994684b4 100644
Binary files a/graphics/pokemon/regidrago/icon.png and b/graphics/pokemon/regidrago/icon.png differ
diff --git a/graphics/pokemon/regieleki/icon.png b/graphics/pokemon/regieleki/icon.png
index 268208caf9..bf3b3f3a89 100644
Binary files a/graphics/pokemon/regieleki/icon.png and b/graphics/pokemon/regieleki/icon.png differ
diff --git a/graphics/pokemon/mega_sableye/back.png b/graphics/pokemon/sableye/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_sableye/back.png
rename to graphics/pokemon/sableye/mega/back.png
diff --git a/graphics/pokemon/mega_sableye/front.png b/graphics/pokemon/sableye/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_sableye/front.png
rename to graphics/pokemon/sableye/mega/front.png
diff --git a/graphics/pokemon/mega_sableye/icon.png b/graphics/pokemon/sableye/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_sableye/icon.png
rename to graphics/pokemon/sableye/mega/icon.png
diff --git a/graphics/pokemon/mega_sableye/normal.pal b/graphics/pokemon/sableye/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_sableye/normal.pal
rename to graphics/pokemon/sableye/mega/normal.pal
diff --git a/graphics/pokemon/mega_sableye/shiny.pal b/graphics/pokemon/sableye/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_sableye/shiny.pal
rename to graphics/pokemon/sableye/mega/shiny.pal
diff --git a/graphics/pokemon/mega_salamence/back.png b/graphics/pokemon/salamence/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_salamence/back.png
rename to graphics/pokemon/salamence/mega/back.png
diff --git a/graphics/pokemon/mega_salamence/front.png b/graphics/pokemon/salamence/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_salamence/front.png
rename to graphics/pokemon/salamence/mega/front.png
diff --git a/graphics/pokemon/mega_salamence/icon.png b/graphics/pokemon/salamence/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_salamence/icon.png
rename to graphics/pokemon/salamence/mega/icon.png
diff --git a/graphics/pokemon/mega_salamence/normal.pal b/graphics/pokemon/salamence/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_salamence/normal.pal
rename to graphics/pokemon/salamence/mega/normal.pal
diff --git a/graphics/pokemon/mega_salamence/shiny.pal b/graphics/pokemon/salamence/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_salamence/shiny.pal
rename to graphics/pokemon/salamence/mega/shiny.pal
diff --git a/graphics/pokemon/alolan_sandshrew/back.png b/graphics/pokemon/sandshrew/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandshrew/back.png
rename to graphics/pokemon/sandshrew/alolan/back.png
diff --git a/graphics/pokemon/alolan_sandshrew/front.png b/graphics/pokemon/sandshrew/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandshrew/front.png
rename to graphics/pokemon/sandshrew/alolan/front.png
diff --git a/graphics/pokemon/alolan_sandshrew/icon.png b/graphics/pokemon/sandshrew/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandshrew/icon.png
rename to graphics/pokemon/sandshrew/alolan/icon.png
diff --git a/graphics/pokemon/alolan_sandshrew/normal.pal b/graphics/pokemon/sandshrew/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandshrew/normal.pal
rename to graphics/pokemon/sandshrew/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_sandshrew/shiny.pal b/graphics/pokemon/sandshrew/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandshrew/shiny.pal
rename to graphics/pokemon/sandshrew/alolan/shiny.pal
diff --git a/graphics/pokemon/alolan_sandslash/back.png b/graphics/pokemon/sandslash/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandslash/back.png
rename to graphics/pokemon/sandslash/alolan/back.png
diff --git a/graphics/pokemon/alolan_sandslash/front.png b/graphics/pokemon/sandslash/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandslash/front.png
rename to graphics/pokemon/sandslash/alolan/front.png
diff --git a/graphics/pokemon/alolan_sandslash/icon.png b/graphics/pokemon/sandslash/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandslash/icon.png
rename to graphics/pokemon/sandslash/alolan/icon.png
diff --git a/graphics/pokemon/alolan_sandslash/normal.pal b/graphics/pokemon/sandslash/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandslash/normal.pal
rename to graphics/pokemon/sandslash/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_sandslash/shiny.pal b/graphics/pokemon/sandslash/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_sandslash/shiny.pal
rename to graphics/pokemon/sandslash/alolan/shiny.pal
diff --git a/graphics/pokemon/mega_sceptile/back.png b/graphics/pokemon/sceptile/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_sceptile/back.png
rename to graphics/pokemon/sceptile/mega/back.png
diff --git a/graphics/pokemon/mega_sceptile/front.png b/graphics/pokemon/sceptile/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_sceptile/front.png
rename to graphics/pokemon/sceptile/mega/front.png
diff --git a/graphics/pokemon/mega_sceptile/icon.png b/graphics/pokemon/sceptile/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_sceptile/icon.png
rename to graphics/pokemon/sceptile/mega/icon.png
diff --git a/graphics/pokemon/mega_sceptile/normal.pal b/graphics/pokemon/sceptile/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_sceptile/normal.pal
rename to graphics/pokemon/sceptile/mega/normal.pal
diff --git a/graphics/pokemon/mega_sceptile/shiny.pal b/graphics/pokemon/sceptile/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_sceptile/shiny.pal
rename to graphics/pokemon/sceptile/mega/shiny.pal
diff --git a/graphics/pokemon/mega_scizor/back.png b/graphics/pokemon/scizor/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_scizor/back.png
rename to graphics/pokemon/scizor/mega/back.png
diff --git a/graphics/pokemon/mega_scizor/front.png b/graphics/pokemon/scizor/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_scizor/front.png
rename to graphics/pokemon/scizor/mega/front.png
diff --git a/graphics/pokemon/scizor/mega/icon.png b/graphics/pokemon/scizor/mega/icon.png
new file mode 100644
index 0000000000..2ba3e82439
Binary files /dev/null and b/graphics/pokemon/scizor/mega/icon.png differ
diff --git a/graphics/pokemon/mega_scizor/normal.pal b/graphics/pokemon/scizor/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_scizor/normal.pal
rename to graphics/pokemon/scizor/mega/normal.pal
diff --git a/graphics/pokemon/mega_scizor/shiny.pal b/graphics/pokemon/scizor/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_scizor/shiny.pal
rename to graphics/pokemon/scizor/mega/shiny.pal
diff --git a/graphics/pokemon/scorbunny/icon.png b/graphics/pokemon/scorbunny/icon.png
index 84c83b3010..9009f3e1d6 100644
Binary files a/graphics/pokemon/scorbunny/icon.png and b/graphics/pokemon/scorbunny/icon.png differ
diff --git a/graphics/pokemon/scyther/anim_front.png b/graphics/pokemon/scyther/anim_front.png
index 60828d6f70..673dc2d221 100644
Binary files a/graphics/pokemon/scyther/anim_front.png and b/graphics/pokemon/scyther/anim_front.png differ
diff --git a/graphics/pokemon/scyther/front.png b/graphics/pokemon/scyther/front.png
index 1251395775..abf81a0632 100644
Binary files a/graphics/pokemon/scyther/front.png and b/graphics/pokemon/scyther/front.png differ
diff --git a/graphics/pokemon/mega_sharpedo/back.png b/graphics/pokemon/sharpedo/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_sharpedo/back.png
rename to graphics/pokemon/sharpedo/mega/back.png
diff --git a/graphics/pokemon/mega_sharpedo/front.png b/graphics/pokemon/sharpedo/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_sharpedo/front.png
rename to graphics/pokemon/sharpedo/mega/front.png
diff --git a/graphics/pokemon/mega_sharpedo/icon.png b/graphics/pokemon/sharpedo/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_sharpedo/icon.png
rename to graphics/pokemon/sharpedo/mega/icon.png
diff --git a/graphics/pokemon/mega_sharpedo/normal.pal b/graphics/pokemon/sharpedo/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_sharpedo/normal.pal
rename to graphics/pokemon/sharpedo/mega/normal.pal
diff --git a/graphics/pokemon/mega_sharpedo/shiny.pal b/graphics/pokemon/sharpedo/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_sharpedo/shiny.pal
rename to graphics/pokemon/sharpedo/mega/shiny.pal
diff --git a/graphics/pokemon/mega_slowbro/back.png b/graphics/pokemon/slowbro/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_slowbro/back.png
rename to graphics/pokemon/slowbro/mega/back.png
diff --git a/graphics/pokemon/mega_slowbro/front.png b/graphics/pokemon/slowbro/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_slowbro/front.png
rename to graphics/pokemon/slowbro/mega/front.png
diff --git a/graphics/pokemon/slowbro/mega/icon.png b/graphics/pokemon/slowbro/mega/icon.png
new file mode 100644
index 0000000000..826f0bccec
Binary files /dev/null and b/graphics/pokemon/slowbro/mega/icon.png differ
diff --git a/graphics/pokemon/mega_slowbro/normal.pal b/graphics/pokemon/slowbro/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_slowbro/normal.pal
rename to graphics/pokemon/slowbro/mega/normal.pal
diff --git a/graphics/pokemon/mega_slowbro/shiny.pal b/graphics/pokemon/slowbro/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_slowbro/shiny.pal
rename to graphics/pokemon/slowbro/mega/shiny.pal
diff --git a/graphics/pokemon/mega_steelix/back.png b/graphics/pokemon/steelix/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_steelix/back.png
rename to graphics/pokemon/steelix/mega/back.png
diff --git a/graphics/pokemon/mega_steelix/front.png b/graphics/pokemon/steelix/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_steelix/front.png
rename to graphics/pokemon/steelix/mega/front.png
diff --git a/graphics/pokemon/mega_steelix/icon.png b/graphics/pokemon/steelix/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_steelix/icon.png
rename to graphics/pokemon/steelix/mega/icon.png
diff --git a/graphics/pokemon/mega_steelix/normal.pal b/graphics/pokemon/steelix/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_steelix/normal.pal
rename to graphics/pokemon/steelix/mega/normal.pal
diff --git a/graphics/pokemon/mega_steelix/shiny.pal b/graphics/pokemon/steelix/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_steelix/shiny.pal
rename to graphics/pokemon/steelix/mega/shiny.pal
diff --git a/graphics/pokemon/mega_swampert/back.png b/graphics/pokemon/swampert/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_swampert/back.png
rename to graphics/pokemon/swampert/mega/back.png
diff --git a/graphics/pokemon/mega_swampert/front.png b/graphics/pokemon/swampert/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_swampert/front.png
rename to graphics/pokemon/swampert/mega/front.png
diff --git a/graphics/pokemon/mega_swampert/icon.png b/graphics/pokemon/swampert/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_swampert/icon.png
rename to graphics/pokemon/swampert/mega/icon.png
diff --git a/graphics/pokemon/mega_swampert/normal.pal b/graphics/pokemon/swampert/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_swampert/normal.pal
rename to graphics/pokemon/swampert/mega/normal.pal
diff --git a/graphics/pokemon/mega_swampert/shiny.pal b/graphics/pokemon/swampert/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_swampert/shiny.pal
rename to graphics/pokemon/swampert/mega/shiny.pal
diff --git a/graphics/pokemon/mega_tyranitar/back.png b/graphics/pokemon/tyranitar/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_tyranitar/back.png
rename to graphics/pokemon/tyranitar/mega/back.png
diff --git a/graphics/pokemon/mega_tyranitar/front.png b/graphics/pokemon/tyranitar/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_tyranitar/front.png
rename to graphics/pokemon/tyranitar/mega/front.png
diff --git a/graphics/pokemon/mega_tyranitar/icon.png b/graphics/pokemon/tyranitar/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_tyranitar/icon.png
rename to graphics/pokemon/tyranitar/mega/icon.png
diff --git a/graphics/pokemon/mega_tyranitar/normal.pal b/graphics/pokemon/tyranitar/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_tyranitar/normal.pal
rename to graphics/pokemon/tyranitar/mega/normal.pal
diff --git a/graphics/pokemon/mega_tyranitar/shiny.pal b/graphics/pokemon/tyranitar/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_tyranitar/shiny.pal
rename to graphics/pokemon/tyranitar/mega/shiny.pal
diff --git a/graphics/pokemon/mega_venusaur/back.png b/graphics/pokemon/venusaur/mega/back.png
similarity index 100%
rename from graphics/pokemon/mega_venusaur/back.png
rename to graphics/pokemon/venusaur/mega/back.png
diff --git a/graphics/pokemon/mega_venusaur/front.png b/graphics/pokemon/venusaur/mega/front.png
similarity index 100%
rename from graphics/pokemon/mega_venusaur/front.png
rename to graphics/pokemon/venusaur/mega/front.png
diff --git a/graphics/pokemon/mega_venusaur/icon.png b/graphics/pokemon/venusaur/mega/icon.png
similarity index 100%
rename from graphics/pokemon/mega_venusaur/icon.png
rename to graphics/pokemon/venusaur/mega/icon.png
diff --git a/graphics/pokemon/mega_venusaur/normal.pal b/graphics/pokemon/venusaur/mega/normal.pal
similarity index 100%
rename from graphics/pokemon/mega_venusaur/normal.pal
rename to graphics/pokemon/venusaur/mega/normal.pal
diff --git a/graphics/pokemon/mega_venusaur/shiny.pal b/graphics/pokemon/venusaur/mega/shiny.pal
similarity index 100%
rename from graphics/pokemon/mega_venusaur/shiny.pal
rename to graphics/pokemon/venusaur/mega/shiny.pal
diff --git a/graphics/pokemon/alolan_vulpix/back.png b/graphics/pokemon/vulpix/alolan/back.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_vulpix/back.png
rename to graphics/pokemon/vulpix/alolan/back.png
diff --git a/graphics/pokemon/alolan_vulpix/front.png b/graphics/pokemon/vulpix/alolan/front.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_vulpix/front.png
rename to graphics/pokemon/vulpix/alolan/front.png
diff --git a/graphics/pokemon/alolan_vulpix/icon.png b/graphics/pokemon/vulpix/alolan/icon.png
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_vulpix/icon.png
rename to graphics/pokemon/vulpix/alolan/icon.png
diff --git a/graphics/pokemon/alolan_vulpix/normal.pal b/graphics/pokemon/vulpix/alolan/normal.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_vulpix/normal.pal
rename to graphics/pokemon/vulpix/alolan/normal.pal
diff --git a/graphics/pokemon/alolan_vulpix/shiny.pal b/graphics/pokemon/vulpix/alolan/shiny.pal
old mode 100755
new mode 100644
similarity index 100%
rename from graphics/pokemon/alolan_vulpix/shiny.pal
rename to graphics/pokemon/vulpix/alolan/shiny.pal
diff --git a/graphics/pokemon/zapdos/galarian/icon.png b/graphics/pokemon/zapdos/galarian/icon.png
index df9bb29b5c..2d9f031ffd 100644
Binary files a/graphics/pokemon/zapdos/galarian/icon.png and b/graphics/pokemon/zapdos/galarian/icon.png differ
diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk
index 6087248df2..c275c37601 100644
--- a/graphics_file_rules.mk
+++ b/graphics_file_rules.mk
@@ -21,6 +21,7 @@ MISCGFXDIR := graphics/misc
JPCONTESTGFXDIR := graphics/contest/japanese
POKEDEXGFXDIR := graphics/pokedex
STARTERGFXDIR := graphics/starter_choose
+NAMINGGFXDIR := graphics/naming_screen
types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy
contest_types := cool beauty cute smart tough
@@ -82,31 +83,31 @@ $(CASTFORMGFXDIR)/shiny.gbapal: $(CASTFORMGFXDIR)/normal/shiny.gbapal \
### Tilesets ###
$(TILESETGFXDIR)/secondary/petalburg/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 159
+ $(GFX) $< $@ -num_tiles 159 -Wnum_tiles
$(TILESETGFXDIR)/secondary/rustboro/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 498
+ $(GFX) $< $@ -num_tiles 498 -Wnum_tiles
$(TILESETGFXDIR)/secondary/dewford/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 503
+ $(GFX) $< $@ -num_tiles 503 -Wnum_tiles
$(TILESETGFXDIR)/secondary/slateport/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 504
+ $(GFX) $< $@ -num_tiles 504 -Wnum_tiles
$(TILESETGFXDIR)/secondary/mauville/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 503
+ $(GFX) $< $@ -num_tiles 503 -Wnum_tiles
$(TILESETGFXDIR)/secondary/lavaridge/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 450
+ $(GFX) $< $@ -num_tiles 450 -Wnum_tiles
$(TILESETGFXDIR)/secondary/fortree/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 493
+ $(GFX) $< $@ -num_tiles 493 -Wnum_tiles
$(TILESETGFXDIR)/secondary/pacifidlog/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 504
+ $(GFX) $< $@ -num_tiles 504 -Wnum_tiles
$(TILESETGFXDIR)/secondary/sootopolis/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 328
+ $(GFX) $< $@ -num_tiles 328 -Wnum_tiles
SOOTOPOLISANIMDIR := $(TILESETGFXDIR)/secondary/sootopolis/anim
@@ -143,169 +144,169 @@ $(SOOTOPOLISANIMDIR)/stormy_water/7.4bpp: $(SOOTOPOLISANIMDIR)/stormy_water/7_ky
@cat $^ >$@
$(TILESETGFXDIR)/secondary/battle_frontier_outside_west/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 508
+ $(GFX) $< $@ -num_tiles 508 -Wnum_tiles
$(TILESETGFXDIR)/secondary/battle_frontier_outside_east/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 508
+ $(GFX) $< $@ -num_tiles 508 -Wnum_tiles
$(TILESETGFXDIR)/primary/building/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 502
+ $(GFX) $< $@ -num_tiles 502 -Wnum_tiles
$(TILESETGFXDIR)/secondary/shop/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 502
+ $(GFX) $< $@ -num_tiles 502 -Wnum_tiles
$(TILESETGFXDIR)/secondary/pokemon_center/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 478
+ $(GFX) $< $@ -num_tiles 478 -Wnum_tiles
$(TILESETGFXDIR)/secondary/cave/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 425
+ $(GFX) $< $@ -num_tiles 425 -Wnum_tiles
$(TILESETGFXDIR)/secondary/pokemon_school/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 278
+ $(GFX) $< $@ -num_tiles 278 -Wnum_tiles
$(TILESETGFXDIR)/secondary/pokemon_fan_club/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 319
+ $(GFX) $< $@ -num_tiles 319 -Wnum_tiles
$(TILESETGFXDIR)/secondary/unused_1/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 17
+ $(GFX) $< $@ -num_tiles 17 -Wnum_tiles
$(TILESETGFXDIR)/secondary/meteor_falls/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 460
+ $(GFX) $< $@ -num_tiles 460 -Wnum_tiles
$(TILESETGFXDIR)/secondary/oceanic_museum/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 319
+ $(GFX) $< $@ -num_tiles 319 -Wnum_tiles
$(TILESETGFXDIR)/secondary/cable_club/unknown_tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 120
+ $(GFX) $< $@ -num_tiles 120 -Wnum_tiles
$(TILESETGFXDIR)/secondary/seashore_house/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 312
+ $(GFX) $< $@ -num_tiles 312 -Wnum_tiles
$(TILESETGFXDIR)/secondary/pretty_petal_flower_shop/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 345
+ $(GFX) $< $@ -num_tiles 345 -Wnum_tiles
$(TILESETGFXDIR)/secondary/pokemon_day_care/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 355
+ $(GFX) $< $@ -num_tiles 355 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/brown_cave/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/brown_cave/tiles.png
- $(GFX) $< $@ -num_tiles 82
+ $(GFX) $< $@ -num_tiles 82 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/tree/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/tree/tiles.png
- $(GFX) $< $@ -num_tiles 82
+ $(GFX) $< $@ -num_tiles 82 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/shrub/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/shrub/tiles.png
- $(GFX) $< $@ -num_tiles 82
+ $(GFX) $< $@ -num_tiles 82 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/blue_cave/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/blue_cave/tiles.png
- $(GFX) $< $@ -num_tiles 82
+ $(GFX) $< $@ -num_tiles 82 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/yellow_cave/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/yellow_cave/tiles.png
- $(GFX) $< $@ -num_tiles 82
+ $(GFX) $< $@ -num_tiles 82 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/red_cave/unused_tiles.4bpp: $(TILESETGFXDIR)/secondary/secret_base/red_cave/tiles.png
- $(GFX) $< $@ -num_tiles 82
+ $(GFX) $< $@ -num_tiles 82 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/brown_cave/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 83
+ $(GFX) $< $@ -num_tiles 83 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/tree/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 83
+ $(GFX) $< $@ -num_tiles 83 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/shrub/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 83
+ $(GFX) $< $@ -num_tiles 83 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/blue_cave/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 83
+ $(GFX) $< $@ -num_tiles 83 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/yellow_cave/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 83
+ $(GFX) $< $@ -num_tiles 83 -Wnum_tiles
$(TILESETGFXDIR)/secondary/secret_base/red_cave/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 83
+ $(GFX) $< $@ -num_tiles 83 -Wnum_tiles
$(TILESETGFXDIR)/secondary/inside_of_truck/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 62
+ $(GFX) $< $@ -num_tiles 62 -Wnum_tiles
$(TILESETGFXDIR)/secondary/contest/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 430
+ $(GFX) $< $@ -num_tiles 430 -Wnum_tiles
$(TILESETGFXDIR)/secondary/lilycove_museum/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 431
+ $(GFX) $< $@ -num_tiles 431 -Wnum_tiles
$(TILESETGFXDIR)/secondary/lab/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 500
+ $(GFX) $< $@ -num_tiles 500 -Wnum_tiles
$(TILESETGFXDIR)/secondary/underwater/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 500
+ $(GFX) $< $@ -num_tiles 500 -Wnum_tiles
$(TILESETGFXDIR)/secondary/generic_building/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 509
+ $(GFX) $< $@ -num_tiles 509 -Wnum_tiles
$(TILESETGFXDIR)/secondary/mauville_game_corner/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 469
+ $(GFX) $< $@ -num_tiles 469 -Wnum_tiles
$(TILESETGFXDIR)/secondary/unused_2/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 150
+ $(GFX) $< $@ -num_tiles 150 -Wnum_tiles
$(TILESETGFXDIR)/secondary/rustboro_gym/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 60
+ $(GFX) $< $@ -num_tiles 60 -Wnum_tiles
$(TILESETGFXDIR)/secondary/dewford_gym/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 61
+ $(GFX) $< $@ -num_tiles 61 -Wnum_tiles
$(TILESETGFXDIR)/secondary/lavaridge_gym/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 54
+ $(GFX) $< $@ -num_tiles 54 -Wnum_tiles
$(TILESETGFXDIR)/secondary/petalburg_gym/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 148
+ $(GFX) $< $@ -num_tiles 148 -Wnum_tiles
$(TILESETGFXDIR)/secondary/fortree_gym/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 61
+ $(GFX) $< $@ -num_tiles 61 -Wnum_tiles
$(TILESETGFXDIR)/secondary/mossdeep_gym/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 82
+ $(GFX) $< $@ -num_tiles 82 -Wnum_tiles
$(TILESETGFXDIR)/secondary/sootopolis_gym/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 484
+ $(GFX) $< $@ -num_tiles 484 -Wnum_tiles
$(TILESETGFXDIR)/secondary/trick_house_puzzle/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 294
+ $(GFX) $< $@ -num_tiles 294 -Wnum_tiles
$(TILESETGFXDIR)/secondary/inside_ship/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 342
+ $(GFX) $< $@ -num_tiles 342 -Wnum_tiles
$(TILESETGFXDIR)/secondary/elite_four/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 505
+ $(GFX) $< $@ -num_tiles 505 -Wnum_tiles
$(TILESETGFXDIR)/secondary/battle_frontier/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 310
+ $(GFX) $< $@ -num_tiles 310 -Wnum_tiles
$(TILESETGFXDIR)/secondary/battle_factory/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 424
+ $(GFX) $< $@ -num_tiles 424 -Wnum_tiles
$(TILESETGFXDIR)/secondary/battle_pike/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 382
+ $(GFX) $< $@ -num_tiles 382 -Wnum_tiles
$(TILESETGFXDIR)/secondary/mirage_tower/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 420
+ $(GFX) $< $@ -num_tiles 420 -Wnum_tiles
$(TILESETGFXDIR)/secondary/mossdeep_game_corner/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 95
+ $(GFX) $< $@ -num_tiles 95 -Wnum_tiles
$(TILESETGFXDIR)/secondary/island_harbor/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 503
+ $(GFX) $< $@ -num_tiles 503 -Wnum_tiles
$(TILESETGFXDIR)/secondary/trainer_hill/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 374
+ $(GFX) $< $@ -num_tiles 374 -Wnum_tiles
$(TILESETGFXDIR)/secondary/navel_rock/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 420
+ $(GFX) $< $@ -num_tiles 420 -Wnum_tiles
$(TILESETGFXDIR)/secondary/battle_frontier_ranking_hall/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 136
+ $(GFX) $< $@ -num_tiles 136 -Wnum_tiles
$(TILESETGFXDIR)/secondary/mystery_events_house/tiles.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 509
+ $(GFX) $< $@ -num_tiles 509 -Wnum_tiles
@@ -353,13 +354,13 @@ graphics/title_screen/pokemon_logo.gbapal: %.gbapal: %.pal
$(GFX) $< $@ -num_colors 224
graphics/pokemon_jump/bg.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 63
+ $(GFX) $< $@ -num_tiles 63 -Wnum_tiles
graphics/pokenav/region_map.8bpp: %.8bpp: %.png
- $(GFX) $< $@ -num_tiles 233
+ $(GFX) $< $@ -num_tiles 233 -Wnum_tiles
$(MISCGFXDIR)/japanese_hof.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 29
+ $(GFX) $< $@ -num_tiles 29 -Wnum_tiles
$(BATINTGFXDIR)/textbox.gbapal: $(BATINTGFXDIR)/textbox_0.gbapal \
$(BATINTGFXDIR)/textbox_1.gbapal
@@ -403,10 +404,10 @@ $(UNUSEDGFXDIR)/redyellowgreen_frame.bin: $(UNUSEDGFXDIR)/red_frame.bin \
@cat $^ >$@
$(UNUSEDGFXDIR)/color_frames.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 353
+ $(GFX) $< $@ -num_tiles 353 -Wnum_tiles
$(BATINTGFXDIR)/unused_window2bar.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 5
+ $(GFX) $< $@ -num_tiles 5 -Wnum_tiles
$(JPCONTESTGFXDIR)/composite_1.4bpp: $(JPCONTESTGFXDIR)/frame_1.4bpp \
$(JPCONTESTGFXDIR)/floor.4bpp \
@@ -422,7 +423,7 @@ $(JPCONTESTGFXDIR)/composite_2.4bpp: $(JPCONTESTGFXDIR)/interface.4bpp \
@cat $^ >$@
$(JPCONTESTGFXDIR)/voltage.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 36
+ $(GFX) $< $@ -num_tiles 36 -Wnum_tiles
$(BTLANMSPRGFXDIR)/ice_crystals.4bpp: $(BTLANMSPRGFXDIR)/ice_crystals_0.4bpp \
$(BTLANMSPRGFXDIR)/ice_crystals_1.4bpp \
@@ -444,13 +445,13 @@ $(BTLANMSPRGFXDIR)/spark.4bpp: $(BTLANMSPRGFXDIR)/spark_0.4bpp \
@cat $^ >$@
$(MASKSGFXDIR)/unused_level_up.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 14
+ $(GFX) $< $@ -num_tiles 14 -Wnum_tiles
$(BATTRANSGFXDIR)/vs_frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 16
+ $(GFX) $< $@ -num_tiles 16 -Wnum_tiles
graphics/party_menu/bg.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 62
+ $(GFX) $< $@ -num_tiles 62 -Wnum_tiles
$(TYPESGFXDIR)/move_types.4bpp: $(types:%=$(TYPESGFXDIR)/%.4bpp) $(contest_types:%=$(TYPESGFXDIR)/contest_%.4bpp)
@cat $^ >$@
@@ -461,29 +462,29 @@ $(TYPESGFXDIR)/move_types.gbapal: $(TYPESGFXDIR)/move_types_1.gbapal \
@cat $^ >$@
graphics/bag/menu.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 53
+ $(GFX) $< $@ -num_tiles 53 -Wnum_tiles
$(RAYQUAZAGFXDIR)/scene_2/rayquaza.8bpp: %.8bpp: %.png
- $(GFX) $< $@ -num_tiles 227
+ $(GFX) $< $@ -num_tiles 227 -Wnum_tiles
$(RAYQUAZAGFXDIR)/scene_2/bg.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 313
+ $(GFX) $< $@ -num_tiles 313 -Wnum_tiles
$(RAYQUAZAGFXDIR)/scene_3/rayquaza.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 124
+ $(GFX) $< $@ -num_tiles 124 -Wnum_tiles
$(RAYQUAZAGFXDIR)/scene_3/rayquaza_tail_fix.4bpp: $(RAYQUAZAGFXDIR)/scene_3/rayquaza_tail.4bpp
cp $< $@
head -c 12 /dev/zero >> $@
$(RAYQUAZAGFXDIR)/scene_4/streaks.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 19
+ $(GFX) $< $@ -num_tiles 19 -Wnum_tiles
$(RAYQUAZAGFXDIR)/scene_4/rayquaza.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 155
+ $(GFX) $< $@ -num_tiles 155 -Wnum_tiles
graphics/picture_frame/lobby.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 86
+ $(GFX) $< $@ -num_tiles 86 -Wnum_tiles
$(ROULETTEGFXDIR)/roulette_tilt.4bpp: $(ROULETTEGFXDIR)/shroomish.4bpp \
$(ROULETTEGFXDIR)/tailow.4bpp
@@ -496,10 +497,10 @@ $(ROULETTEGFXDIR)/wheel_icons.4bpp: $(ROULETTEGFXDIR)/wynaut.4bpp \
@cat $^ >$@
$(BATTRANSGFXDIR)/regis.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 53
+ $(GFX) $< $@ -num_tiles 53 -Wnum_tiles
$(BATTRANSGFXDIR)/rayquaza.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 938
+ $(GFX) $< $@ -num_tiles 938 -Wnum_tiles
$(BATTRANSGFXDIR)/frontier_square_1.4bpp: $(BATTRANSGFXDIR)/frontier_squares_blanktiles.4bpp \
$(BATTRANSGFXDIR)/frontier_squares_1.4bpp
@@ -522,20 +523,20 @@ $(SLOTMACHINEGFXDIR)/reel_time_gfx.4bpp: $(SLOTMACHINEGFXDIR)/reel_time_pikachu.
@cat $^ >$@
graphics/birch_speech/unused_beauty.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 822
+ $(GFX) $< $@ -num_tiles 822 -Wnum_tiles
### Pokémon Storage System ###
$(WALLPAPERGFXDIR)/forest/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 55
+ $(GFX) $< $@ -num_tiles 55 -Wnum_tiles
$(WALLPAPERGFXDIR)/forest/tiles.4bpp: $(WALLPAPERGFXDIR)/forest/frame.4bpp $(WALLPAPERGFXDIR)/forest/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/city/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 52
+ $(GFX) $< $@ -num_tiles 52 -Wnum_tiles
$(WALLPAPERGFXDIR)/city/tiles.4bpp: $(WALLPAPERGFXDIR)/city/frame.4bpp $(WALLPAPERGFXDIR)/city/bg.4bpp
@cat $^ >$@
@@ -544,97 +545,97 @@ $(WALLPAPERGFXDIR)/desert/tiles.4bpp: $(WALLPAPERGFXDIR)/desert/frame.4bpp $(WAL
@cat $^ >$@
$(WALLPAPERGFXDIR)/savanna/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 45
+ $(GFX) $< $@ -num_tiles 45 -Wnum_tiles
$(WALLPAPERGFXDIR)/savanna/bg.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 23
+ $(GFX) $< $@ -num_tiles 23 -Wnum_tiles
$(WALLPAPERGFXDIR)/savanna/tiles.4bpp: $(WALLPAPERGFXDIR)/savanna/frame.4bpp $(WALLPAPERGFXDIR)/savanna/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/crag/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 49
+ $(GFX) $< $@ -num_tiles 49 -Wnum_tiles
$(WALLPAPERGFXDIR)/crag/tiles.4bpp: $(WALLPAPERGFXDIR)/crag/frame.4bpp $(WALLPAPERGFXDIR)/crag/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/volcano/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 56
+ $(GFX) $< $@ -num_tiles 56 -Wnum_tiles
$(WALLPAPERGFXDIR)/volcano/tiles.4bpp: $(WALLPAPERGFXDIR)/volcano/frame.4bpp $(WALLPAPERGFXDIR)/volcano/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/snow/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 57
+ $(GFX) $< $@ -num_tiles 57 -Wnum_tiles
$(WALLPAPERGFXDIR)/snow/tiles.4bpp: $(WALLPAPERGFXDIR)/snow/frame.4bpp $(WALLPAPERGFXDIR)/snow/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/cave/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 55
+ $(GFX) $< $@ -num_tiles 55 -Wnum_tiles
$(WALLPAPERGFXDIR)/cave/tiles.4bpp: $(WALLPAPERGFXDIR)/cave/frame.4bpp $(WALLPAPERGFXDIR)/cave/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/beach/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 46
+ $(GFX) $< $@ -num_tiles 46 -Wnum_tiles
$(WALLPAPERGFXDIR)/beach/bg.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 23
+ $(GFX) $< $@ -num_tiles 23 -Wnum_tiles
$(WALLPAPERGFXDIR)/beach/tiles.4bpp: $(WALLPAPERGFXDIR)/beach/frame.4bpp $(WALLPAPERGFXDIR)/beach/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/seafloor/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 54
+ $(GFX) $< $@ -num_tiles 54 -Wnum_tiles
$(WALLPAPERGFXDIR)/seafloor/tiles.4bpp: $(WALLPAPERGFXDIR)/seafloor/frame.4bpp $(WALLPAPERGFXDIR)/seafloor/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/river/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 51
+ $(GFX) $< $@ -num_tiles 51 -Wnum_tiles
$(WALLPAPERGFXDIR)/river/bg.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 11
+ $(GFX) $< $@ -num_tiles 11 -Wnum_tiles
$(WALLPAPERGFXDIR)/river/tiles.4bpp: $(WALLPAPERGFXDIR)/river/frame.4bpp $(WALLPAPERGFXDIR)/river/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/sky/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 45
+ $(GFX) $< $@ -num_tiles 45 -Wnum_tiles
$(WALLPAPERGFXDIR)/sky/tiles.4bpp: $(WALLPAPERGFXDIR)/sky/frame.4bpp $(WALLPAPERGFXDIR)/sky/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/polkadot/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 54
+ $(GFX) $< $@ -num_tiles 54 -Wnum_tiles
$(WALLPAPERGFXDIR)/polkadot/tiles.4bpp: $(WALLPAPERGFXDIR)/polkadot/frame.4bpp $(WALLPAPERGFXDIR)/polkadot/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/pokecenter/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 35
+ $(GFX) $< $@ -num_tiles 35 -Wnum_tiles
$(WALLPAPERGFXDIR)/pokecenter/tiles.4bpp: $(WALLPAPERGFXDIR)/pokecenter/frame.4bpp $(WALLPAPERGFXDIR)/pokecenter/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/machine/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 33
+ $(GFX) $< $@ -num_tiles 33 -Wnum_tiles
$(WALLPAPERGFXDIR)/machine/tiles.4bpp: $(WALLPAPERGFXDIR)/machine/frame.4bpp $(WALLPAPERGFXDIR)/machine/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/plain/frame.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 18
+ $(GFX) $< $@ -num_tiles 18 -Wnum_tiles
$(WALLPAPERGFXDIR)/plain/tiles.4bpp: $(WALLPAPERGFXDIR)/plain/frame.4bpp $(WALLPAPERGFXDIR)/plain/bg.4bpp
@cat $^ >$@
$(WALLPAPERGFXDIR)/friends_frame1.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 57
+ $(GFX) $< $@ -num_tiles 57 -Wnum_tiles
$(WALLPAPERGFXDIR)/friends_frame2.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 57
+ $(GFX) $< $@ -num_tiles 57 -Wnum_tiles
$(WALLPAPERGFXDIR)/zigzagoon/tiles.4bpp: $(WALLPAPERGFXDIR)/friends_frame1.4bpp $(WALLPAPERGFXDIR)/zigzagoon/bg.4bpp
@cat $^ >$@
@@ -685,13 +686,13 @@ $(WALLPAPERGFXDIR)/whiscash/tiles.4bpp: $(WALLPAPERGFXDIR)/friends_frame2.4bpp $
@cat $^ >$@
$(OBJEVENTGFXDIR)/pics/effects/unknown_4F6D38/0.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 11
+ $(GFX) $< $@ -num_tiles 11 -Wnum_tiles
$(INTERFACEGFXDIR)/selector_outline.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 8
+ $(GFX) $< $@ -num_tiles 8 -Wnum_tiles
$(BATTRANSGFXDIR)/frontier_logo_center.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 43
+ $(GFX) $< $@ -num_tiles 43 -Wnum_tiles
@@ -713,19 +714,28 @@ $(PKNAVOPTIONSGFXDIR)/options.4bpp: $(PKNAVOPTIONSGFXDIR)/hoenn_map.4bpp \
@cat $^ >$@
$(PKNAVGFXDIR)/header.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 53
+ $(GFX) $< $@ -num_tiles 53 -Wnum_tiles
$(PKNAVGFXDIR)/device_outline.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 53
+ $(GFX) $< $@ -num_tiles 53 -Wnum_tiles
$(PKNAVGFXDIR)/match_call/ui.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 13
+ $(GFX) $< $@ -num_tiles 13 -Wnum_tiles
$(POKEDEXGFXDIR)/region_map.8bpp: %.8bpp: %.png
- $(GFX) $< $@ -num_tiles 232
+ $(GFX) $< $@ -num_tiles 232 -Wnum_tiles
$(POKEDEXGFXDIR)/region_map_affine.8bpp: %.8bpp: %.png
- $(GFX) $< $@ -num_tiles 233
+ $(GFX) $< $@ -num_tiles 233 -Wnum_tiles
$(STARTERGFXDIR)/birch_help.4bpp: $(STARTERGFXDIR)/birch_bag.4bpp $(STARTERGFXDIR)/birch_grass.4bpp
@cat $^ >$@
+
+$(NAMINGGFXDIR)/cursor.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -num_tiles 5 -Wnum_tiles
+
+$(NAMINGGFXDIR)/cursor_squished.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -num_tiles 5 -Wnum_tiles
+
+$(NAMINGGFXDIR)/cursor_filled.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -num_tiles 5 -Wnum_tiles
diff --git a/include/apprentice.h b/include/apprentice.h
index 27ce0371e0..582d41435e 100644
--- a/include/apprentice.h
+++ b/include/apprentice.h
@@ -16,7 +16,7 @@ struct ApprenticeTrainer
extern const struct ApprenticeTrainer gApprentices[];
void BufferApprenticeChallengeText(u8 saveApprenticeId);
-void Apprentice_EnableBothScriptContexts(void);
+void Apprentice_ScriptContext_Enable(void);
void ResetApprenticeStruct(struct Apprentice *apprentice);
void ResetAllApprenticeData(void);
void CallApprenticeFunction(void);
diff --git a/include/battle.h b/include/battle.h
index 9656bab8d4..931b13b2f4 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -12,6 +12,7 @@
#include "battle_util2.h"
#include "battle_bg.h"
#include "pokeball.h"
+#include "battle_debug.h"
#define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler])
#define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE)
@@ -39,20 +40,10 @@
#define B_ACTION_FINISHED 12
#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
+#define B_ACTION_DEBUG 20
+#define B_ACTION_THROW_BALL 21 // R to throw last used ball
#define B_ACTION_NONE 0xFF
-#define MOVE_TARGET_SELECTED 0
-#define MOVE_TARGET_DEPENDS (1 << 0)
-#define MOVE_TARGET_USER_OR_SELECTED (1 << 1)
-#define MOVE_TARGET_RANDOM (1 << 2)
-#define MOVE_TARGET_BOTH (1 << 3)
-#define MOVE_TARGET_USER (1 << 4)
-#define MOVE_TARGET_FOES_AND_ALLY (1 << 5)
-#define MOVE_TARGET_OPPONENTS_FIELD (1 << 6)
-
-// For the second argument of GetMoveTarget, when no target override is needed
-#define NO_TARGET_OVERRIDE 0
-
#define BATTLE_BUFFER_LINK_SIZE 0x1000
struct ResourceFlags
@@ -60,7 +51,13 @@ struct ResourceFlags
u32 flags[MAX_BATTLERS_COUNT];
};
-#define RESOURCE_FLAG_FLASH_FIRE 1
+#define RESOURCE_FLAG_FLASH_FIRE 0x1
+#define RESOURCE_FLAG_ROOST 0x2
+#define RESOURCE_FLAG_UNBURDEN 0x4
+#define RESOURCE_FLAG_INTIMIDATED 0x8
+#define RESOURCE_FLAG_TRACED 0x10
+#define RESOURCE_FLAG_EMERGENCY_EXIT 0x20
+#define RESOURCE_FLAG_NEUTRALIZING_GAS 0x40
struct DisableStruct
{
@@ -69,11 +66,14 @@ struct DisableStruct
u16 encoredMove;
u8 protectUses;
u8 stockpileCounter;
+ s8 stockpileDef;
+ s8 stockpileSpDef;
+ s8 stockpileBeforeDef;
+ s8 stockpileBeforeSpDef;
u8 substituteHP;
u8 disableTimer:4;
u8 disableTimerStartValue:4;
u8 encoredMovePos;
- u8 filler_D; // Unused field.
u8 encoreTimer:4;
u8 encoreTimerStartValue:4;
u8 perishSongTimer:4;
@@ -88,26 +88,40 @@ struct DisableStruct
u8 battlerPreventingEscape;
u8 battlerWithSureHit;
u8 isFirstTurn;
- u8 filler_17; // Unused field.
u8 truantCounter:1;
u8 truantSwitchInHack:1;
- u8 filler_18_2:2; // Unused field.
u8 mimickedMoves:4;
u8 rechargeTimer;
+ u8 autotomizeCount;
+ u8 slowStartTimer;
+ u8 embargoTimer;
+ u8 magnetRiseTimer;
+ u8 telekinesisTimer;
+ u8 healBlockTimer;
+ u8 laserFocusTimer;
+ u8 throatChopTimer;
+ u8 usedMoves:4;
+ u8 wrapTurns;
+ u8 noRetreat:1;
+ u8 tarShot:1;
+ u8 octolock:1;
};
struct ProtectStruct
{
u32 protected:1;
+ u32 spikyShielded:1;
+ u32 kingsShielded:1;
+ u32 banefulBunkered:1;
+ u32 obstructed:1;
u32 endured:1;
u32 noValidMoves:1;
u32 helpingHand:1;
u32 bounceMove:1;
u32 stealMove:1;
- u32 flag0Unknown:1; // Only set to 0 once.
u32 prlzImmobility:1;
u32 confusionSelfDmg:1;
- u32 targetNotAffected:1;
+ u32 targetAffected:1;
u32 chargingTurn:1;
u32 fleeType:2; // 0: Normal, 1: FLEE_ITEM, 2: FLEE_ABILITY
u32 usedImprisonedMove:1;
@@ -118,6 +132,21 @@ struct ProtectStruct
u32 flinchImmobility:1;
u32 notFirstStrike:1;
u32 palaceUnableToUseMove:1;
+ u32 usesBouncedMove:1;
+ u32 usedHealBlockedMove:1;
+ u32 usedGravityPreventedMove:1;
+ u32 powderSelfDmg:1;
+ u32 usedThroatChopPreventedMove:1;
+ u32 statRaised:1;
+ u32 usedMicleBerry:1;
+ u32 usedCustapBerry:1; // also quick claw
+ u32 touchedProtectLike:1;
+ // End of 32-bit bitfield
+ u16 disableEjectPack:1;
+ u16 statFell:1;
+ u16 pranksterElevated:1;
+ u16 quickDraw:1;
+ u16 beakBlastCharge:1;
u32 physicalDmg;
u32 specialDmg;
u8 physicalBattlerId;
@@ -126,19 +155,35 @@ struct ProtectStruct
struct SpecialStatus
{
- u32 statLowered:1;
- u32 lightningRodRedirected:1;
- u32 restoredBattlerSprite: 1;
- u32 intimidatedMon:1;
- u32 traced:1;
- u32 ppNotAffectedByPressure:1;
- u32 faintedHasReplacement:1;
- u32 focusBanded:1;
+ u8 statLowered:1;
+ u8 lightningRodRedirected:1;
+ u8 restoredBattlerSprite: 1;
+ u8 intimidatedMon:1;
+ u8 traced:1;
+ u8 ppNotAffectedByPressure:1;
+ u8 faintedHasReplacement:1;
+ u8 focusBanded:1;
+ u8 focusSashed:1;
+ u8 sturdied:1;
+ u8 stormDrainRedirected:1;
+ u8 switchInAbilityDone:1;
+ u8 switchInItemDone:1;
+ u8 instructedChosenTarget:3;
+ u8 berryReduced:1;
+ u8 gemBoost:1;
+ u8 rototillerAffected:1; // to be affected by rototiller
+ u8 gemParam;
+ u8 damagedMons:4; // Mons that have been damaged directly by using a move, includes substitute.
+ u8 dancerUsedMove:1;
+ u8 dancerOriginalTarget:3;
+ u8 announceNeutralizingGas:1; // See Cmd_switchineffects
+ u8 neutralizingGasRemoved:1; // See VARIOUS_TRY_END_NEUTRALIZING_GAS
s32 dmg;
s32 physicalDmg;
s32 specialDmg;
u8 physicalBattlerId;
u8 specialBattlerId;
+ u8 changedStatsBattlerId; // Battler that was responsible for the latest stat change. Can be self.
};
struct SideTimer
@@ -151,23 +196,69 @@ struct SideTimer
u8 mistBattlerId;
u8 safeguardTimer;
u8 safeguardBattlerId;
- u8 followmeTimer;
- u8 followmeTarget;
u8 spikesAmount;
+ u8 toxicSpikesAmount;
+ u8 stealthRockAmount;
+ u8 stickyWebAmount;
+ u8 stickyWebBattlerSide; // Used for Court Change
+ u8 auroraVeilTimer;
+ u8 auroraVeilBattlerId;
+ u8 tailwindTimer;
+ u8 tailwindBattlerId;
+ u8 luckyChantTimer;
+ u8 luckyChantBattlerId;
+ // Timers below this point are not swapped by Court Change
+ u8 followmeTimer;
+ u8 followmeTarget:3;
+ u8 followmePowder:1; // Rage powder, does not affect grass type pokemon.
+ u8 retaliateTimer;
+};
+
+struct FieldTimer
+{
+ u8 mudSportTimer;
+ u8 waterSportTimer;
+ u8 wonderRoomTimer;
+ u8 magicRoomTimer;
+ u8 trickRoomTimer;
+ u8 terrainTimer;
+ u8 gravityTimer;
+ u8 fairyLockTimer;
};
struct WishFutureKnock
{
u8 futureSightCounter[MAX_BATTLERS_COUNT];
u8 futureSightAttacker[MAX_BATTLERS_COUNT];
- s32 futureSightDmg[MAX_BATTLERS_COUNT];
u16 futureSightMove[MAX_BATTLERS_COUNT];
u8 wishCounter[MAX_BATTLERS_COUNT];
- u8 wishMonId[MAX_BATTLERS_COUNT];
+ u8 wishPartyId[MAX_BATTLERS_COUNT];
u8 weatherDuration;
u8 knockedOffMons[2]; // Each battler is represented by a bit. The array entry is dependent on the battler's side.
};
+struct AI_SavedBattleMon
+{
+ u16 ability;
+ u16 moves[MAX_MON_MOVES];
+ u16 heldItem;
+ u16 species;
+};
+
+struct AiLogicData
+{
+ u16 abilities[MAX_BATTLERS_COUNT];
+ u16 items[MAX_BATTLERS_COUNT];
+ u16 holdEffects[MAX_BATTLERS_COUNT];
+ u8 holdEffectParams[MAX_BATTLERS_COUNT];
+ u16 predictedMoves[MAX_BATTLERS_COUNT];
+ u8 hpPercents[MAX_BATTLERS_COUNT];
+ u16 partnerMove;
+ s32 simulatedDmg[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex
+ u8 effectiveness[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex
+ u8 moveLimitations[MAX_BATTLERS_COUNT];
+};
+
struct AI_ThinkingStruct
{
u8 aiState;
@@ -178,23 +269,22 @@ struct AI_ThinkingStruct
u32 aiFlags;
u8 aiAction;
u8 aiLogicId;
- u8 filler12[6];
- u8 simulatedRNG[MAX_MON_MOVES];
+ struct AI_SavedBattleMon saved[4];
+ bool8 switchMon; // Because all available moves have no/little effect.
};
-struct UsedMoves
-{
- u16 moves[MAX_MON_MOVES];
- u16 unknown[MAX_MON_MOVES];
-};
+#define AI_MOVE_HISTORY_COUNT 3
struct BattleHistory
{
- struct UsedMoves usedMoves[MAX_BATTLERS_COUNT];
- u8 abilities[MAX_BATTLERS_COUNT];
+ u16 abilities[MAX_BATTLERS_COUNT];
u8 itemEffects[MAX_BATTLERS_COUNT];
+ u16 usedMoves[MAX_BATTLERS_COUNT][MAX_MON_MOVES];
+ u16 moveHistory[MAX_BATTLERS_COUNT][AI_MOVE_HISTORY_COUNT]; // 3 last used moves for each battler
+ u8 moveHistoryIndex[MAX_BATTLERS_COUNT];
u16 trainerItems[MAX_BATTLERS_COUNT];
u8 itemsNo;
+ u16 heldItems[MAX_BATTLERS_COUNT];
};
struct BattleScriptsStack
@@ -222,10 +312,16 @@ struct BattleResources
struct BattleCallbacksStack* battleCallbackStack;
struct StatsArray* beforeLvlUp;
struct AI_ThinkingStruct *ai;
+ struct AiLogicData *aiData;
struct BattleHistory *battleHistory;
- struct BattleScriptsStack *AI_ScriptsStack;
+ u8 bufferA[MAX_BATTLERS_COUNT][0x200];
+ u8 bufferB[MAX_BATTLERS_COUNT][0x200];
};
+#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai))
+#define AI_DATA ((struct AiLogicData *)(gBattleResources->aiData))
+#define BATTLE_HISTORY ((struct BattleHistory *)(gBattleResources->battleHistory))
+
struct BattleResults
{
u8 playerFaintCounter; // 0x0
@@ -234,7 +330,6 @@ struct BattleResults
u8 numHealingItemsUsed; // 0x3
u8 numRevivesUsed; // 0x4
u8 playerMonWasDamaged:1; // 0x5
- u8 usedMasterBall:1; // 0x5
u8 caughtMonBall:4; // 0x5
u8 shinyWildMon:1; // 0x5
u16 playerMon1Species; // 0x6
@@ -249,7 +344,7 @@ struct BattleResults
u16 caughtMonSpecies; // 0x28
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A
u8 filler35; // 0x35
- u8 catchAttempts[POKEBALL_COUNT - 1]; // 0x36 Doesn't include Master ball
+ u8 catchAttempts[POKEBALL_COUNT]; // 0x36
};
struct BattleTv_Side
@@ -346,28 +441,78 @@ struct LinkBattlerHeader
struct BattleEnigmaBerry battleEnigmaBerry;
};
+struct MegaEvolutionData
+{
+ u8 toEvolve; // As flags using gBitTable.
+ u8 evolvedPartyIds[2]; // As flags using gBitTable;
+ bool8 alreadyEvolved[4]; // Array id is used for mon position.
+ u16 evolvedSpecies[MAX_BATTLERS_COUNT];
+ u16 playerEvolvedSpecies;
+ u8 primalRevertedPartyIds[2]; // As flags using gBitTable;
+ u16 primalRevertedSpecies[MAX_BATTLERS_COUNT];
+ u16 playerPrimalRevertedSpecies;
+ u8 battlerId;
+ bool8 playerSelect;
+ u8 triggerSpriteId;
+ bool8 isWishMegaEvo;
+};
+
+struct Illusion
+{
+ u8 on;
+ u8 set;
+ u8 broken;
+ u8 partyId;
+ struct Pokemon *mon;
+};
+
+struct ZMoveData
+{
+ u8 viable:1; // current move can become a z move
+ u8 viewing:1; // if player is viewing the z move name instead of regular moves
+ u8 active:1; // is z move being used this turn
+ u8 zStatusActive:1;
+ u8 healReplacement:1;
+ u8 activeSplit:2; // active z move split
+ u8 zUnused:1;
+ u8 triggerSpriteId;
+ u8 possibleZMoves[MAX_BATTLERS_COUNT];
+ u16 chosenZMove; // z move of move cursor is on
+ u8 effect;
+ u8 used[MAX_BATTLERS_COUNT]; //one per bank for multi-battles
+ u16 toBeUsed[MAX_BATTLERS_COUNT]; // z moves per battler to be used
+ u16 baseMoves[MAX_BATTLERS_COUNT];
+ u8 splits[MAX_BATTLERS_COUNT];
+};
+
+struct StolenItem
+{
+ u16 originalItem:15;
+ u16 stolen:1;
+};
+
struct BattleStruct
{
u8 turnEffectsTracker;
u8 turnEffectsBattlerId;
- u8 unused_0;
u8 turnCountersTracker;
- u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access.
- u8 moveTarget[MAX_BATTLERS_COUNT];
+ u16 wrappedMove[MAX_BATTLERS_COUNT];
+ u16 moveTarget[MAX_BATTLERS_COUNT];
u8 expGetterMonId;
- u8 unused_1;
u8 wildVictorySong;
u8 dynamicMoveType;
u8 wrappedBy[MAX_BATTLERS_COUNT];
u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves.
u8 focusPunchBattlerId;
u8 battlerPreventingSwitchout;
- u8 moneyMultiplier;
+ u8 moneyMultiplier:6;
+ u8 moneyMultiplierItem:1;
+ u8 moneyMultiplierMove:1;
u8 savedTurnActionNumber;
u8 switchInAbilitiesCounter;
u8 faintedActionsState;
u8 faintedActionsBattlerId;
- u16 expValue;
+ u32 expValue;
u8 field_52;
u8 sentInPokes;
bool8 selectionScriptFinished[MAX_BATTLERS_COUNT];
@@ -376,7 +521,6 @@ struct BattleStruct
u8 battlerPartyOrders[MAX_BATTLERS_COUNT][PARTY_SIZE / 2];
u8 runTries;
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1];
- u8 unused_2;
u8 safariGoNearCounter;
u8 safariPkblThrowCounter;
u8 safariEscapeFactor;
@@ -386,12 +530,9 @@ struct BattleStruct
u8 formToChangeInto;
u8 chosenMovePositions[MAX_BATTLERS_COUNT];
u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT];
- u8 unused_3[3];
u8 prevSelectedPartySlot;
- u8 unused_4[2];
u8 stringMoveType;
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 field_93; // related to choosing pokemon?
@@ -399,16 +540,16 @@ struct BattleStruct
u8 wallyMovesState;
u8 wallyWaitFrames;
u8 wallyMoveFrames;
- u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // Last move that a battler was hit with. This field seems to erroneously take 16 bytes instead of 8.
+ u16 lastTakenMove[MAX_BATTLERS_COUNT]; // Last move that a battler was hit with.
u16 hpOnSwitchout[2];
u32 savedBattleTypeFlags;
- u8 abilityPreventingSwitchout;
+ u16 abilityPreventingSwitchout;
u8 hpScale;
- u8 synchronizeMoveEffect;
+ u16 synchronizeMoveEffect;
bool8 anyMonHasTransformed;
void (*savedCallback)(void);
- u16 usedHeldItems[MAX_BATTLERS_COUNT];
- u8 chosenItem[MAX_BATTLERS_COUNT]; // why is this an u8?
+ u16 usedHeldItems[PARTY_SIZE][2]; // For each party member and side. For harvest, recycle
+ u16 chosenItem[MAX_BATTLERS_COUNT];
u8 AI_itemType[2];
u8 AI_itemFlags[2];
u16 choicedMove[MAX_BATTLERS_COUNT];
@@ -417,9 +558,8 @@ struct BattleStruct
u8 switchInItemsCounter;
u8 arenaTurnCounter;
u8 turnSideTracker;
- u8 unused_6[3];
u8 givenExpMons; // Bits for enemy party's pokemon that gave exp to player's party.
- u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2]; // a 3-D array [target][attacker][byte]
+ u16 lastTakenMoveFrom[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; // a 2-D array [target][attacker]
u16 castformPalette[NUM_CASTFORM_FORMS][16];
union {
struct LinkBattlerHeader linkBattlerHeader;
@@ -428,10 +568,10 @@ struct BattleStruct
u8 wishPerishSongState;
u8 wishPerishSongBattlerId;
bool8 overworldWeatherDone;
+ bool8 terrainDone;
u8 atkCancellerTracker;
struct BattleTvMovePoints tvMovePoints;
struct BattleTv tv;
- u8 unused_7[0x28];
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
s8 arenaMindPoints[2];
s8 arenaSkillPoints[2];
@@ -439,6 +579,46 @@ struct BattleStruct
u8 arenaLostPlayerMons; // Bits for party member, lost as in referee's decision, not by fainting.
u8 arenaLostOpponentMons;
u8 alreadyStatusedMoveAttempt; // As bits for battlers; For example when using Thunder Wave on an already paralyzed pokemon.
+ u8 debugBattler;
+ u8 magnitudeBasePower;
+ u8 presentBasePower;
+ u8 roostTypes[MAX_BATTLERS_COUNT][3];
+ u8 savedBattlerTarget;
+ bool8 ateBoost[MAX_BATTLERS_COUNT];
+ u8 activeAbilityPopUps; // as bits for each battler
+ u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][2]; // two per battler
+ bool8 throwingPokeBall;
+ struct MegaEvolutionData mega;
+ struct ZMoveData zmove;
+ const u8 *trainerSlideMsg;
+ bool8 trainerSlideLowHpMsgDone;
+ u8 introState;
+ u8 ateBerry[2]; // array id determined by side, each party pokemon as bit
+ u8 stolenStats[NUM_BATTLE_STATS]; // hp byte is used for which stats to raise, other inform about by how many stages
+ u8 lastMoveFailed; // as bits for each battler, for the sake of Stomping Tantrum
+ u8 lastMoveTarget[MAX_BATTLERS_COUNT]; // The last target on which each mon used a move, for the sake of Instruct
+ u8 debugHoldEffects[MAX_BATTLERS_COUNT]; // These override actual items' hold effects.
+ u16 tracedAbility[MAX_BATTLERS_COUNT];
+ u16 hpBefore[MAX_BATTLERS_COUNT]; // Hp of battlers before using a move. For Berserk
+ bool8 spriteIgnore0Hp;
+ struct Illusion illusion[MAX_BATTLERS_COUNT];
+ s8 aiFinalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier
+ u8 aiMoveOrAction[MAX_BATTLERS_COUNT];
+ u8 aiChosenTarget[MAX_BATTLERS_COUNT];
+ u8 soulheartBattlerId;
+ u8 friskedBattler; // Frisk needs to identify 2 battlers in double battles.
+ bool8 friskedAbility; // If identifies two mons, show the ability pop-up only once.
+ u8 sameMoveTurns[MAX_BATTLERS_COUNT]; // For Metronome, number of times the same moves has been SUCCESFULLY used.
+ u16 moveEffect2; // For Knock Off
+ u16 changedSpecies[PARTY_SIZE]; // For Zygarde or future forms when multiple mons can change into the same pokemon.
+ u8 quickClawBattlerId;
+ struct StolenItem itemStolen[PARTY_SIZE]; // Player's team that had items stolen (two bytes per party member)
+ u8 blunderPolicy:1; // should blunder policy activate
+ u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky
+ u8 ballSpriteIds[2]; // item gfx, window gfx
+ u8 stickyWebUser;
+ u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change
+ u8 skyDropTargets[MAX_BATTLERS_COUNT]; // For Sky Drop, to account for if multiple Pokemon use Sky Drop in a double battle.
};
#define F_DYNAMIC_TYPE_1 (1 << 6)
@@ -453,26 +633,41 @@ struct BattleStruct
typeArg = gBattleMoves[move].type; \
}
-#define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
-#define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
+#define IS_MOVE_PHYSICAL(move)(GetBattleMoveSplit(move) == SPLIT_PHYSICAL)
+#define IS_MOVE_SPECIAL(move)(GetBattleMoveSplit(move) == SPLIT_SPECIAL)
+#define IS_MOVE_STATUS(move)(gBattleMoves[move].split == SPLIT_STATUS)
+#define BATTLER_MAX_HP(battlerId)(gBattleMons[battlerId].hp == gBattleMons[battlerId].maxHP)
#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0))
+#define BATTLER_DAMAGED(battlerId) ((gSpecialStatuses[battlerId].physicalDmg != 0 || gSpecialStatuses[battlerId].specialDmg != 0))
-#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type))
-#define SET_BATTLER_TYPE(battlerId, type) \
-{ \
- gBattleMons[battlerId].type1 = type; \
- gBattleMons[battlerId].type2 = type; \
+#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type || (gBattleMons[battlerId].type3 != TYPE_MYSTERY && gBattleMons[battlerId].type3 == type)))
+#define SET_BATTLER_TYPE(battlerId, type) \
+{ \
+ gBattleMons[battlerId].type1 = type; \
+ gBattleMons[battlerId].type2 = type; \
+ gBattleMons[battlerId].type3 = TYPE_MYSTERY; \
}
-#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
-#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0))
-#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
+#define IS_BATTLER_PROTECTED(battlerId)(gProtectStructs[battlerId].protected \
+ || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD \
+ || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_QUICK_GUARD \
+ || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD \
+ || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_MAT_BLOCK \
+ || gProtectStructs[battlerId].spikyShielded \
+ || gProtectStructs[battlerId].kingsShielded \
+ || gProtectStructs[battlerId].banefulBunkered \
+ || gProtectStructs[battlerId].obstructed) \
+
+#define GET_STAT_BUFF_ID(n)((n & 7)) // first three bits 0x1, 0x2, 0x4
+#define GET_STAT_BUFF_VALUE_WITH_SIGN(n)((n & 0xF8))
+#define GET_STAT_BUFF_VALUE(n)(((n >> 3) & 0xF)) // 0x8, 0x10, 0x20, 0x40
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
-#define SET_STAT_BUFF_VALUE(n)((((n) << 4) & 0xF0))
+#define SET_STAT_BUFF_VALUE(n)((((n) << 3) & 0xF8))
-#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7))
+#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + ((stage) << 3) + (goesDown << 7))
+#define SET_STATCHANGER2(dst, statId, stage, goesDown)(dst = (statId) + ((stage) << 3) + (goesDown << 7))
// NOTE: The members of this struct have hard-coded offsets
// in include/constants/battle_script_commands.h
@@ -481,14 +676,14 @@ struct BattleScripting
s32 painSplitHp;
s32 bideDmg;
u8 multihitString[6];
- u8 dmgMultiplier;
+ bool8 expOnCatch;
u8 twoTurnsMoveStringId;
u8 animArg1;
u8 animArg2;
u16 tripleKickPower;
u8 moveendState;
- u8 battlerWithAbility;
- u8 multihitMoveEffect;
+ u8 savedStatChanger; // For further use, if attempting to change stat two times(ex. Moody)
+ u8 shiftSwitched; // When the game tells you the next enemy's pokemon and you switch. Option for noobs but oh well.
u8 battler;
u8 animTurn;
u8 animTargetsHit;
@@ -498,13 +693,24 @@ struct BattleScripting
u8 battleStyle;
u8 drawlvlupboxState;
u8 learnMoveState;
- u8 pursuitDoublesAttacker;
+ u8 savedBattler;
u8 reshowMainState;
u8 reshowHelperState;
u8 levelUpHP;
u8 windowsType; // B_WIN_TYPE_*
u8 multiplayerId;
u8 specialTrainerBattleType;
+ bool8 monCaught;
+ s32 savedDmg;
+ u16 savedMoveEffect; // For moves hitting multiple targets.
+ u16 moveEffect;
+ u16 multihitMoveEffect;
+ u8 illusionNickHack; // To properly display nick in STRINGID_ENEMYABOUTTOSWITCHPKMN.
+ bool8 fixedPopup; // Force ability popup to stick until manually called back
+ u16 abilityPopupOverwrite;
+ u8 switchCase; // Special switching conditions, eg. red card
+ u8 overrideBerryRequirements;
+ u8 stickyWebStatDrop; // To prevent Defiant activating on a Court Change'd Sticky Web
};
struct BattleSpriteInfo
@@ -526,7 +732,9 @@ struct BattleAnimationInfo
u8 field_5;
u8 field_6;
u8 field_7;
- u8 ballThrowCaseId;
+ u8 ballThrowCaseId:6;
+ u8 isCriticalCapture:1;
+ u8 criticalCaptureSuccess:1;
u8 introAnimActive:1;
u8 wildMonInvisible:1;
u8 field_9_x1C:3;
@@ -588,10 +796,10 @@ struct BattleSpriteData
struct MonSpritesGfx
{
- void* firstDecompressed; // ptr to the decompressed sprite of the first pokemon
+ void *firstDecompressed; // ptr to the decompressed sprite of the first pokemon
union {
- void* ptr[MAX_BATTLERS_COUNT];
- u8* byte[MAX_BATTLERS_COUNT];
+ void *ptr[MAX_BATTLERS_COUNT];
+ u8 *byte[MAX_BATTLERS_COUNT];
} sprites;
struct SpriteTemplate templates[MAX_BATTLERS_COUNT];
struct SpriteFrameImage frameImages[MAX_BATTLERS_COUNT][4];
@@ -601,6 +809,12 @@ struct MonSpritesGfx
u16 *buffer;
};
+struct TotemBoost
+{
+ u8 stats; // bitfield for each battle stat that is set if the stat changes
+ s8 statChanges[NUM_BATTLE_STATS - 1]; // highest bit being set decreases the stat
+}; /* size = 8 */
+
// All battle variables are declared in battle_main.c
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
@@ -614,17 +828,15 @@ extern u16 gBattle_WIN0H;
extern u16 gBattle_WIN0V;
extern u16 gBattle_WIN1H;
extern u16 gBattle_WIN1V;
-extern u8 gDisplayedStringBattle[300];
+extern u8 gDisplayedStringBattle[400];
extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT];
extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT];
-extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT];
+extern u8 gBattleTextBuff3[30]; //to handle stupidly large z move names
extern u32 gBattleTypeFlags;
extern u8 gBattleTerrain;
extern u32 gUnusedFirstBattleVar1;
extern u8 *gBattleAnimBgTileBuffer;
extern u8 *gBattleAnimBgTilemapBuffer;
-extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
-extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
extern u8 gActiveBattler;
extern u32 gBattleControllerExecFlags;
extern u8 gBattlersCount;
@@ -645,17 +857,16 @@ extern s32 gBattleMoveDamage;
extern s32 gHpDealt;
extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
extern u16 gLastUsedItem;
-extern u8 gLastUsedAbility;
+extern u16 gLastUsedAbility;
extern u8 gBattlerAttacker;
extern u8 gBattlerTarget;
extern u8 gBattlerFainted;
extern u8 gEffectBattler;
extern u8 gPotentialItemEffectBattler;
extern u8 gAbsentBattlerFlags;
-extern u8 gCritMultiplier;
+extern u8 gIsCriticalHit;
extern u8 gMultiHitCounter;
extern const u8 *gBattlescriptCurrInstr;
-extern u32 gUnusedBattleMainVar;
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
extern const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT];
extern const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT];
@@ -665,15 +876,17 @@ extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
+extern u16 gLastUsedMove;
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
-extern u8 gMoveResultFlags;
+extern u16 gMoveResultFlags;
extern u32 gHitMarker;
extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
extern u8 gUnusedFirstBattleVar2;
-extern u16 gSideStatuses[2];
+extern u32 gSideStatuses[2];
extern struct SideTimer gSideTimers[2];
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
+extern u32 gStatuses4[MAX_BATTLERS_COUNT];
extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
extern u16 gPauseCounterBattle;
extern u16 gPaydayMoney;
@@ -686,7 +899,6 @@ extern u16 gBattleWeather;
extern struct WishFutureKnock gWishFutureKnock;
extern u16 gIntroSlideFlags;
extern u8 gSentPokesToOpponent[2];
-extern u16 gDynamicBasePower;
extern u16 gExpShareExp;
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
extern struct BattleScripting gBattleScripting;
@@ -708,6 +920,11 @@ extern struct BattleHealthboxInfo *gBattleControllerOpponentFlankHealthboxData;
extern u16 gBattleMovePower;
extern u16 gMoveToLearn;
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
+extern u32 gFieldStatuses;
+extern struct FieldTimer gFieldTimers;
+extern u8 gBattlerAbility;
+extern u16 gPartnerSpriteId;
+extern struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT];
extern void (*gPreBattleCallback1)(void);
extern void (*gBattleMainFunc)(void);
@@ -718,5 +935,9 @@ extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
extern u8 gMultiUsePlayerCursor;
extern u8 gNumberOfMovesToChoose;
extern u8 gBattleControllerData[MAX_BATTLERS_COUNT];
+extern bool8 gHasFetchedBall;
+extern u8 gLastUsedBall;
+extern u16 gLastThrownBall;
+extern u8 gPartyCriticalHits[PARTY_SIZE];
#endif // GUARD_BATTLE_H
diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h
new file mode 100644
index 0000000000..fcb31a9b2b
--- /dev/null
+++ b/include/battle_ai_main.h
@@ -0,0 +1,31 @@
+#ifndef GUARD_BATTLE_AI_MAIN_H
+#define GUARD_BATTLE_AI_MAIN_H
+
+// return values for BattleAI_ChooseMoveOrAction
+// 0 - 3 are move idx
+#define AI_CHOICE_FLEE 4
+#define AI_CHOICE_WATCH 5
+#define AI_CHOICE_SWITCH 7
+
+#define RETURN_SCORE_PLUS(val) \
+{ \
+ score += val; \
+ return score; \
+}
+
+#define RETURN_SCORE_MINUS(val) \
+{ \
+ score -= val; \
+ return score; \
+}
+
+u8 ComputeBattleAiScores(u8 battler);
+void BattleAI_SetupItems(void);
+void BattleAI_SetupFlags(void);
+void BattleAI_SetupAIData(u8 defaultScoreMoves);
+u8 BattleAI_ChooseMoveOrAction(void);
+void GetAiLogicData(void);
+
+extern u8 sBattler_AI;
+
+#endif // GUARD_BATTLE_AI_MAIN_H
diff --git a/include/battle_ai_script_commands.h b/include/battle_ai_script_commands.h
deleted file mode 100644
index d23ad048a5..0000000000
--- a/include/battle_ai_script_commands.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
-#define GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
-
-// return values for BattleAI_ChooseMoveOrAction
-// 0 - 3 are move idx
-#define AI_CHOICE_FLEE 4
-#define AI_CHOICE_WATCH 5
-
-void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves);
-void BattleAI_SetupAIData(u8 defaultScoreMoves);
-u8 BattleAI_ChooseMoveOrAction(void);
-void ClearBattlerMoveHistory(u8 battlerId);
-void RecordAbilityBattle(u8 battlerId, u8 abilityId);
-void ClearBattlerAbilityHistory(u8 battlerId);
-void RecordItemEffectBattle(u8 battlerId, u8 itemEffect);
-void ClearBattlerItemEffectHistory(u8 battlerId);
-
-#endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h
index a0b6fe62c3..70dc41b34b 100644
--- a/include/battle_ai_switch_items.h
+++ b/include/battle_ai_switch_items.h
@@ -31,7 +31,9 @@ enum {
AI_DIRE_HIT,
};
+void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId);
void AI_TrySwitchOrUseItem(void);
u8 GetMostSuitableMonToSwitchInto(void);
+bool32 ShouldSwitch(void);
#endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H
diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h
new file mode 100644
index 0000000000..5e66577e30
--- /dev/null
+++ b/include/battle_ai_util.h
@@ -0,0 +1,177 @@
+#ifndef GUARD_BATTLE_AI_UTIL_H
+#define GUARD_BATTLE_AI_UTIL_H
+
+// for AI_WhoStrikesFirst
+#define AI_IS_FASTER 0
+#define AI_IS_SLOWER 1
+
+#define FOE(battler) ((battler ^ BIT_SIDE) & BIT_SIDE)
+
+bool32 AI_RandLessThan(u8 val);
+void RecordLastUsedMoveByTarget(void);
+bool32 IsBattlerAIControlled(u32 battlerId);
+void ClearBattlerMoveHistory(u8 battlerId);
+void RecordLastUsedMoveBy(u32 battlerId, u32 move);
+void RecordKnownMove(u8 battlerId, u32 move);
+void RecordAbilityBattle(u8 battlerId, u16 abilityId);
+void ClearBattlerAbilityHistory(u8 battlerId);
+void RecordItemEffectBattle(u8 battlerId, u8 itemEffect);
+void ClearBattlerItemEffectHistory(u8 battlerId);
+void SaveBattlerData(u8 battlerId);
+void SetBattlerData(u8 battlerId);
+void RestoreBattlerData(u8 battlerId);
+u16 GetAIChosenMove(u8 battlerId);
+
+bool32 WillAIStrikeFirst(void);
+u32 GetTotalBaseStat(u32 species);
+bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler);
+bool32 AtMaxHp(u8 battler);
+u32 GetHealthPercentage(u8 battler);
+bool32 IsBattlerTrapped(u8 battler, bool8 switching);
+u8 AI_WhoStrikesFirst(u8 battlerAI, u8 battler2, u16 consideredMove);
+bool32 CanTargetFaintAi(u8 battlerDef, u8 battlerAtk);
+bool32 CanMoveFaintBattler(u16 move, u8 battlerDef, u8 battlerAtk, u8 nHits);
+bool32 CanTargetFaintAiWithMod(u8 battlerDef, u8 battlerAtk, s32 hpMod, s32 dmgMod);
+s32 AI_GetAbility(u32 battlerId);
+u16 AI_GetHoldEffect(u32 battlerId);
+u32 AI_GetMoveAccuracy(u8 battlerAtk, u8 battlerDef, u16 move);
+bool32 DoesBattlerIgnoreAbilityChecks(u16 atkAbility, u16 move);
+bool32 AI_WeatherHasEffect(void);
+bool32 CanAIFaintTarget(u8 battlerAtk, u8 battlerDef, u8 numHits);
+bool32 CanIndexMoveFaintTarget(u8 battlerAtk, u8 battlerDef, u8 index, u8 numHits);
+bool32 AI_IsTerrainAffected(u8 battlerId, u32 flags);
+bool32 AI_IsBattlerGrounded(u8 battlerId);
+bool32 HasDamagingMove(u8 battlerId);
+bool32 HasDamagingMoveOfType(u8 battlerId, u8 type);
+u32 GetBattlerSecondaryDamage(u8 battlerId);
+bool32 BattlerWillFaintFromWeather(u8 battler, u16 ability);
+bool32 BattlerWillFaintFromSecondaryDamage(u8 battler, u16 ability);
+bool32 ShouldTryOHKO(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move);
+bool32 ShouldUseRecoilMove(u8 battlerAtk, u8 battlerDef, u32 recoilDmg, u8 moveIndex);
+u16 GetBattlerSideSpeedAverage(u8 battler);
+bool32 ShouldAbsorb(u8 battlerAtk, u8 battlerDef, u16 move, s32 damage);
+bool32 ShouldRecover(u8 battlerAtk, u8 battlerDef, u16 move, u8 healPercent);
+bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect);
+bool32 ShouldPivot(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u8 moveIndex);
+bool32 IsRecycleEncouragedItem(u16 item);
+bool32 ShouldRestoreHpBerry(u8 battlerAtk, u16 item);
+bool32 IsStatBoostingBerry(u16 item);
+bool32 CanKnockOffItem(u8 battler, u16 item);
+bool32 IsAbilityOfRating(u16 ability, s8 rating);
+s8 GetAbilityRating(u16 ability);
+bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability);
+bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u16 move);
+u32 AI_GetBattlerMoveTargetType(u8 battlerId, u16 move);
+bool32 ShouldUseZMove(u8 activeId, u8 targetId, u16 chosenMove);
+
+// stat stage checks
+bool32 AnyStatIsRaised(u8 battlerId);
+bool32 ShouldLowerStat(u8 battler, u16 battlerAbility, u8 stat);
+bool32 BattlerStatCanRise(u8 battler, u16 battlerAbility, u8 stat);
+bool32 AreBattlersStatsMaxed(u8 battler);
+bool32 BattlerHasAnyStatRaised(u8 battlerId);
+u32 CountPositiveStatStages(u8 battlerId);
+u32 CountNegativeStatStages(u8 battlerId);
+bool32 ShouldLowerAttack(u8 battlerAtk, u8 battlerDef, u16 defAbility);
+bool32 ShouldLowerDefense(u8 battlerAtk, u8 battlerDef, u16 defAbility);
+bool32 ShouldLowerSpeed(u8 battlerAtk, u8 battlerDef, u16 defAbility);
+bool32 ShouldLowerSpAtk(u8 battlerAtk, u8 battlerDef, u16 defAbility);
+bool32 ShouldLowerSpDef(u8 battlerAtk, u8 battlerDef, u16 defAbility);
+bool32 ShouldLowerAccuracy(u8 battlerAtk, u8 battlerDef, u16 defAbility);
+bool32 ShouldLowerEvasion(u8 battlerAtk, u8 battlerDef, u16 defAbility);
+
+// move checks
+bool32 IsAffectedByPowder(u8 battler, u16 ability, u16 holdEffect);
+bool32 MovesWithSplitUnusable(u32 attacker, u32 target, u32 split);
+s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *effectiveness, bool32 considerZPower);
+u8 GetMoveDamageResult(u16 move);
+u32 GetCurrDamageHpPercent(u8 battlerAtk, u8 battlerDef);
+u16 AI_GetTypeEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef);
+u32 AI_GetMoveEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef);
+u16 *GetMovesArray(u32 battler);
+bool32 IsConfusionMoveEffect(u16 moveEffect);
+bool32 HasMove(u32 battlerId, u32 move);
+bool32 HasOnlyMovesWithSplit(u32 battlerId, u32 split, bool32 onlyOffensive);
+bool32 HasMoveWithSplit(u32 battler, u32 split);
+bool32 HasMoveWithType(u32 battler, u8 type);
+bool32 HasMoveWithTypeAndSplit(u32 battler, u8 type, u8 split);
+bool32 HasMoveEffect(u32 battlerId, u16 moveEffect);
+bool32 HasMoveWithLowAccuracy(u8, u8, u8, bool32, u16, u16, u16, u16);
+bool32 TestMoveFlagsInMoveset(u8 battler, u32 flags);
+bool32 IsAromaVeilProtectedMove(u16 move);
+bool32 IsNonVolatileStatusMoveEffect(u16 moveEffect);
+bool32 IsStatLoweringMoveEffect(u16 moveEffect);
+bool32 IsMoveRedirectionPrevented(u16 move, u16 atkAbility);
+bool32 IsMoveEncouragedToHit(u8 battlerAtk, u8 battlerDef, u16 move);
+bool32 IsHazardMoveEffect(u16 moveEffect);
+bool32 MoveCallsOtherMove(u16 move);
+bool32 MoveRequiresRecharging(u16 move);
+bool32 IsInstructBannedMove(u16 move);
+bool32 IsEncoreEncouragedEffect(u16 moveEffect);
+void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score);
+bool32 ShouldSetSandstorm(u8 battler, u16 ability, u16 holdEffect);
+bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect);
+bool32 ShouldSetRain(u8 battlerAtk, u16 ability, u16 holdEffect);
+bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect);
+bool32 HasSleepMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef);
+bool32 IsHealingMoveEffect(u16 effect);
+bool32 HasHealingEffect(u32 battler);
+bool32 IsTrappingMoveEffect(u16 effect);
+bool32 HasTrappingMoveEffect(u8 battler);
+bool32 ShouldFakeOut(u8 battlerAtk, u8 battlerDef, u16 move);
+bool32 HasThawingMove(u8 battlerId);
+bool32 IsStatRaisingEffect(u16 effect);
+bool32 IsStatLoweringEffect(u16 effect);
+bool32 IsStatRaisingEffect(u16 effect);
+bool32 IsAttackBoostMoveEffect(u16 effect);
+bool32 IsUngroundingEffect(u16 effect);
+bool32 IsSemiInvulnerable(u8 battlerDef, u16 move);
+
+// status checks
+bool32 AI_CanBeBurned(u8 battler, u16 ability);
+bool32 AI_CanBeConfused(u8 battler, u16 ability);
+bool32 AI_CanSleep(u8 battler, u16 ability);
+bool32 IsBattlerIncapacitated(u8 battler, u16 ability);
+bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove);
+bool32 ShouldPoisonSelf(u8 battler, u16 ability);
+bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove);
+bool32 AI_CanParalyze(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove);
+bool32 AI_CanConfuse(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove);
+bool32 ShouldBurnSelf(u8 battler, u16 ability);
+bool32 AI_CanBurn(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove);
+bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender);
+bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof);
+u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move);
+bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move);
+bool32 IsWakeupTurn(u8 battler);
+
+// partner logic
+u16 GetAllyChosenMove(u8 battlerId);
+bool32 IsValidDoubleBattle(u8 battlerAtk);
+bool32 IsTargetingPartner(u8 battlerAtk, u8 battlerDef);
+bool32 DoesPartnerHaveSameMoveEffect(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove);
+bool32 PartnerHasSameMoveEffectWithoutTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove);
+bool32 PartnerMoveEffectIsStatusSameTarget(u8 battlerAtkPartner, u8 battlerDef, u16 partnerMove);
+bool32 PartnerMoveEffectIsWeather(u8 battlerAtkPartner, u16 partnerMove);
+bool32 PartnerMoveEffectIsTerrain(u8 battlerAtkPartner, u16 partnerMove);
+bool32 PartnerMoveIs(u8 battlerAtkPartner, u16 partnerMove, u16 moveCheck);
+bool32 PartnerMoveIsSameAsAttacker(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove);
+bool32 PartnerMoveIsSameNoTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove);
+bool32 ShouldUseWishAromatherapy(u8 battlerAtk, u8 battlerDef, u16 move);
+
+// party logic
+s32 AI_CalcPartyMonDamage(u16 move, u8 battlerAtk, u8 battlerDef, struct Pokemon *mon);
+s32 CountUsablePartyMons(u8 battlerId);
+bool32 IsPartyFullyHealedExceptBattler(u8 battler);
+bool32 PartyHasMoveSplit(u8 battlerId, u8 split);
+bool32 SideHasMoveSplit(u8 battlerId, u8 split);
+
+// score increases
+void IncreaseStatUpScore(u8 battlerAtk, u8 battlerDef, u8 statId, s16 *score);
+void IncreasePoisonScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score);
+void IncreaseBurnScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score);
+void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score);
+void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score);
+void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score);
+
+#endif //GUARD_BATTLE_AI_UTIL_H
\ No newline at end of file
diff --git a/include/battle_anim.h b/include/battle_anim.h
index e5a228b079..e1dd853848 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -50,6 +50,7 @@ extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT];
extern u8 gAnimCustomPanning;
+extern u16 gAnimMoveIndex;
void ClearBattleAnimationVars(void);
void DoMoveAnim(u16 move);
@@ -57,6 +58,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
void DestroyAnimSprite(struct Sprite *sprite);
void DestroyAnimVisualTask(u8 taskId);
void DestroyAnimSoundTask(u8 taskId);
+u8 GetAnimBattlerId(u8 wantedBattler);
bool8 IsBattlerSpriteVisible(u8 battlerId);
void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible);
bool8 IsContest(void);
@@ -66,6 +68,7 @@ s16 KeepPanInRange(s16 panArg, int oldPan);
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
void RelocateBattleBgPal(u16 paletteNum, u16 *dest, u32 offset, bool8 largeScreen);
void ResetBattleAnimBg(bool8);
+void LoadMoveBg(u16 bgId);
// battle_intro.c
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
@@ -85,6 +88,7 @@ void DestroySpriteAndMatrix(struct Sprite *sprite);
void TranslateSpriteLinearFixedPoint(struct Sprite *sprite);
void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets);
void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets);
+bool32 InitSpritePosToAnimBattler(u32 animBattlerId, struct Sprite *sprite, bool8 respectMonPicOffsets);
void StartAnimLinearTranslation(struct Sprite *sprite);
void InitAnimArcTranslation(struct Sprite *sprite);
bool8 AnimTranslateLinear(struct Sprite *sprite);
@@ -108,8 +112,8 @@ u8 GetBattlerSpriteBGPriority(u8 battlerId);
void *LoadPointerFromVars(s16 bottom, s16 top);
void StorePointerInVars(s16 *bottom, s16 *top, const void *ptr);
void InitPrioritiesForVisibleBattlers(void);
-void GetBattleAnimBg1Data(struct BattleAnimBgData*);
-void GetBattleAnimBgData(struct BattleAnimBgData*, u32 bgId);
+void GetBattleAnimBg1Data(struct BattleAnimBgData *);
+void GetBattleAnimBgData(struct BattleAnimBgData *, u32 bgId);
u8 GetBattlerSpriteSubpriority(u8 battlerId);
bool8 TranslateAnimHorizontalArc(struct Sprite *sprite);
void TranslateSpriteLinearByIdFixedPoint(struct Sprite *sprite);
@@ -122,10 +126,10 @@ u32 GetBattlePalettesMask(bool8 battleBackground, bool8 attacker, bool8 target,
u32 GetBattleMonSpritePalettesMask(u8 playerLeft, u8 playerRight, u8 opponentLeft, u8 opponentRight);
u8 AnimDummyReturnArg(u8 battler);
s16 CloneBattlerSpriteWithBlend(u8);
-void DestroySpriteWithActiveSheet(struct Sprite*);
+void DestroySpriteWithActiveSheet(struct Sprite *);
u8 CreateInvisibleSpriteCopy(int, u8, int);
-void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData*, const void*, bool32);
-void AnimLoadCompressedBgGfx(u32, const u32*, u32);
+void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData *, const void *, bool32);
+void AnimLoadCompressedBgGfx(u32, const u32 *, u32);
void UpdateAnimBg3ScreenSize(bool8);
void TranslateSpriteInGrowingCircle(struct Sprite *);
void SetBattlerSpriteYOffsetFromYScale(u8 spriteId);
@@ -186,7 +190,7 @@ u8 GetAnimBattlerSpriteId(u8 wantedBattler);
bool8 IsDoubleBattle(void);
u8 GetBattleBgPaletteNum(void);
u8 GetBattlerSpriteBGPriorityRank(u8 battlerId);
-void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
+void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite *));
void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite);
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
@@ -201,30 +205,150 @@ u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
#define STAT_ANIM_MULTIPLE_MINUS1 57
#define STAT_ANIM_MULTIPLE_MINUS2 58
void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
+extern const union AnimCmd *const sAnims_SpinningSparkle[];
// battle_anim_ground.c
void AnimTask_HorizontalShake(u8 taskId);
+void AnimMudSportDirt(struct Sprite *sprite);
+void AnimDirtScatter(struct Sprite *sprite);
+void AnimMudSportDirtRising(struct Sprite *sprite);
+void AnimDirtPlumeParticle(struct Sprite *);
+extern const union AffineAnimCmd *const gAffineAnims_SpinningBone[];
// battle_anim_throw.c
void TryShinyAnimation(u8 battler, struct Pokemon *mon);
u8 ItemIdToBallId(u16 itemId);
u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 spritePalNum, u32 selectedPalettes, u8 ballId);
+bool32 IsCriticalCapture(void);
// battle_anim_utility_funcs.c
void InitStatsChangeAnimation(u8);
void StartMonScrollingBgMask(u8 taskId, int unused, u16 scrollSpeed, u8 battler, bool8 includePartner, u8 numFadeSteps, u8 fadeStepDelay, u8 duration, const u32 *gfx, const u32 *tilemap, const u32 *palette);
// battle_anim_effects_1.c
-void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite);
-void AnimMoveTwisterParticle(struct Sprite* sprite);
+void SetSpriteNextToMonHead(u8 battler, struct Sprite *sprite);
+void AnimMoveTwisterParticle(struct Sprite *sprite);
void AnimParticleBurst(struct Sprite *);
+void AnimPowerAbsorptionOrb(struct Sprite *sprite);
+void AnimNeedleArmSpike(struct Sprite *);
+void AnimTask_CompressTargetHorizontally(u8 taskId);
+void AnimSporeParticle(struct Sprite *sprite);
+void AnimAbsorptionOrb(struct Sprite *sprite);
+void AnimPetalDanceSmallFlower(struct Sprite *sprite);
+void AnimPetalDanceBigFlower(struct Sprite *sprite);
+void AnimEndureEnergy(struct Sprite *sprite);
+void AnimMimicOrb(struct Sprite *sprite);
+void AnimSolarBeamBigOrb(struct Sprite *sprite);
+void AnimHyperBeamOrb(struct Sprite *sprite);
+void AnimNeedleArmSpike_Step(struct Sprite *sprite);
+void AnimMovePowderParticle(struct Sprite *sprite);
+void AnimMetronomeFinger(struct Sprite *sprite);
+void AnimConversion(struct Sprite *sprite);
+void AnimCuttingSlice(struct Sprite *sprite);
+void AnimThoughtBubble(struct Sprite *sprite);
+void AnimTranslateLinearSingleSineWave(struct Sprite *sprite);
+void AnimGrantingStars(struct Sprite *sprite);
+void AnimFollowMeFinger(struct Sprite *sprite);
+extern const union AnimCmd *const gRazorLeafParticleAnimTable[];
+extern const union AnimCmd *const gPowerAbsorptionOrbAnimTable[];
+extern const union AffineAnimCmd *const gPowerAbsorptionOrbAffineAnimTable[];
+extern const union AnimCmd *const gMusicNotesAnimTable[];
+extern const union AffineAnimCmd *const gMimicOrbAffineAnimTable[];
+extern const union AnimCmd *const gSolarBeamBigOrbAnimTable[];
+extern const union AnimCmd *const gPowderParticlesAnimTable[];
+extern const union AffineAnimCmd *const gMetronomeFingerAffineAnimTable[];
+extern const union AnimCmd *const gPetalDanceBigFlowerAnimTable[];
+extern const union AnimCmd *const gOctazookaAnimTable[];
+extern const union AffineAnimCmd *const gAbsorptionOrbAffineAnimTable[];
+extern const union AnimCmd *const gGrantingStarsAnimTable[];
+extern const union AnimCmd *const gSporeParticleAnimTable[];
+extern const union AnimCmd *const gHealingBlueStarAnimTable[];
+extern const union AnimCmd *const gMoonlightSparkleAnimTable[];
+extern const union AnimCmd *const gEndureEnergyAnimTable[];
+extern const union AnimCmd *const gPetalDanceSmallFlowerAnimTable[];
+extern const union AnimCmd *const gConversionAnimTable[];
+extern const union AffineAnimCmd *const gConversionAffineAnimTable[];
+extern const union AnimCmd *const gCuttingSliceAnimTable[];
+extern const union AnimCmd *const gScratchAnimTable[];
+extern const union AnimCmd *const gIngrainRootAnimTable[];
+extern const union AffineAnimCmd *const gSwiftStarAffineAnimTable[];
+extern const union AnimCmd *const gMetronomeThroughtBubbleAnimTable[];
+extern const union AffineAnimCmd *const gStockpileAbsorptionOrbAffineAnimTable[];
+
+// battle_anim_effects_2.c
+void AnimUproarRing(struct Sprite *sprite);
+void AnimSonicBoomProjectile(struct Sprite *sprite);
+void AnimOrbitFast(struct Sprite *sprite);
+void AnimOrbitScatter(struct Sprite *sprite);
+void AnimAngerMark(struct Sprite *sprite);
+void AnimHyperVoiceRing(struct Sprite *sprite);
+void AnimMagentaHeart(struct Sprite *);
+extern const union AffineAnimCmd *const gThinRingShrinkingAffineAnimTable[];
+extern const union AffineAnimCmd *const gThinRingExpandingAffineAnimTable[];
+extern const union AnimCmd *const gExplosionAnimTable[];
+extern const union AffineAnimCmd *const gGuardRingAffineAnimTable[];
+extern const union AffineAnimCmd *const gAngerMarkAffineAnimTable[];
+extern const union AffineAnimCmd *const gWaterPulseRingAffineAnimTable[];
+extern const union AffineAnimCmd *const gHyperVoiceRingAffineAnimTable[];
+extern const union AnimCmd *const gCoinAnimTable[];
+extern const union AffineAnimCmd *const gHiddenPowerOrbAffineAnimTable[];
+
+// battle_anim_effects_3.c
+void AnimBlackSmoke(struct Sprite *sprite);
+void AnimSweetScentPetal(struct Sprite *sprite);
+void AnimTealAlert(struct Sprite *sprite);
+void AnimBlockX(struct Sprite *sprite);
+void AnimFlatterSpotlight_Step(struct Sprite *);
+void AnimAssistPawprint(struct Sprite *);
+void AnimReversalOrb(struct Sprite *);
+void AnimFlatterSpotlight_Step(struct Sprite *sprite);
+extern const union AnimCmd *const gOpeningEyeAnimTable[];
+extern const union AnimCmd *const gEclipsingOrbAnimTable[];
+extern const union AffineAnimCmd *const gSpotlightAffineAnimTable[];
// battle_anim_water.c
void AnimWaterPulseRing(struct Sprite *sprite);
+void AnimSmallBubblePair(struct Sprite *sprite);
+void AnimWaterPulseBubble(struct Sprite *sprite);
+extern const union AnimCmd *const gAnims_WaterBubbleProjectile[];
+extern const union AnimCmd *const gAnims_FlamethrowerFlame[];
+extern const union AnimCmd *const gAnims_WaterPulseBubble[];
// battle_anim_flying.c
void DestroyAnimSpriteAfterTimer(struct Sprite *sprite);
+void sub_810E2C8(struct Sprite *sprite);
+void AnimAirWaveCrescent(struct Sprite *sprite);
+void AnimFlyBallUp(struct Sprite *sprite);
+void AnimFlyBallAttack(struct Sprite *sprite);
+void AnimFlyBallAttack_Step(struct Sprite *sprite);
+void AnimFlyBallUp_Step(struct Sprite *sprite);
+void AnimBounceBallLand(struct Sprite *);
+void AnimEllipticalGust(struct Sprite *);
+extern const union AnimCmd *const gAffineAnims_AirWaveCrescent[];
+extern const union AffineAnimCmd *const gAffineAnims_FlyBallUp[];
+extern const union AffineAnimCmd *const gAffineAnims_FlyBallAttack[];
+extern const union AffineAnimCmd *const gAffineAnims_BounceBallLand[];
+
+// battle_anim_poison.c
+void AnimSludgeBombHitParticle(struct Sprite *);
+void AnimAcidPoisonBubble_Step(struct Sprite *sprite);
+void AnimBubbleEffect(struct Sprite *);
+extern const union AffineAnimCmd *const gAffineAnims_PoisonProjectile[];
+extern const union AnimCmd *const gAnims_PoisonProjectile[];
+extern const union AnimCmd *const gAnims_AcidPoisonDroplet[];
+extern const union AffineAnimCmd *const gAffineAnims_Bubble[];
+
+// battle_anim_ghost.c
+void AnimGhostStatusSprite(struct Sprite *sprite);
+void AnimShadowBall(struct Sprite *sprite);
+void AnimTask_GrudgeFlames_Step(u8 taskId);
+extern const union AffineAnimCmd *const gAffineAnims_ShadowBall[];
+
+// battle_anim_psychic.c
+extern const union AffineAnimCmd *const gAffineAnims_PsychoBoostOrb[];
+extern const union AffineAnimCmd *const gAffineAnims_LusterPurgeCircle[];
+void AnimPsychoBoost(struct Sprite *sprite);
// battle_anim_smokescreen.c
u8 SmokescreenImpact(s16 x, s16 y, bool8 persist);
@@ -277,6 +401,7 @@ extern const struct OamData gOamData_AffineDouble_ObjNormal_32x16;
extern const struct OamData gOamData_AffineOff_ObjNormal_64x32;
extern const struct OamData gOamData_AffineOff_ObjBlend_64x32;
extern const struct OamData gOamData_AffineOff_ObjBlend_16x32;
+extern const struct OamData gOamData_AffineDouble_ObjBlend_32x8;
extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
@@ -291,4 +416,105 @@ extern const union AnimCmd *const gAnims_SmallBubblePair[];
extern const union AnimCmd *const gAnims_WaterBubble[];
extern const union AffineAnimCmd *const gAffineAnims_Bite[];
+// battle_anim_normal.c
+extern const union AffineAnimCmd *const gAffineAnims_HitSplat[];
+void AnimHitSplatBasic(struct Sprite *sprite);
+void AnimFlashingHitSplat(struct Sprite *sprite);
+void AnimFlashingHitSplat_Step(struct Sprite *sprite);
+void AnimHitSplatRandom(struct Sprite *sprite);
+void AnimCrossImpact(struct Sprite *sprite);
+void AnimHitSplatOnMonEdge(struct Sprite *sprite);
+
+// battle_anim_electric.c
+void AnimThunderWave(struct Sprite *sprite);
+void AnimGrowingChargeOrb(struct Sprite *sprite);
+void AnimZapCannonSpark(struct Sprite *sprite);
+void AnimSparkElectricity(struct Sprite *sprite);
+void AnimElectricPuff(struct Sprite *sprite);
+void AnimSparkElectricityFlashing(struct Sprite *sprite);
+void AnimGrowingShockWaveOrb(struct Sprite *sprite);
+void AnimElectricity(struct Sprite *);
+extern const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb[];
+extern const union AffineAnimCmd *const gAffineAnims_FlashingSpark[];
+extern const union AnimCmd *const gAnims_ThunderboltOrb[];
+extern const union AnimCmd *const gAnims_ElectricPuff[];
+extern const union AnimCmd *const gAnims_ElectricChargingParticles[];
+
+// battle_anim_fight.c
+void AnimStompFoot(struct Sprite *sprite);
+void AnimSpinningKickOrPunch(struct Sprite *sprite);
+void AnimBrickBreakWall_Step(struct Sprite *sprite);
+void AnimJumpKick(struct Sprite *sprite);
+void AnimBasicFistOrFoot(struct Sprite *sprite);
+void AnimSpinningKickOrPunchFinish(struct Sprite *sprite);
+void AnimRevengeScratch(struct Sprite *sprite);
+void AnimDizzyPunchDuck(struct Sprite *sprite);
+void AnimSuperpowerFireball(struct Sprite *);
+extern const union AnimCmd *const gAnims_HandsAndFeet[];
+extern const union AffineAnimCmd *const gAffineAnims_MegaPunchKick[];
+extern const union AffineAnimCmd *const gAffineAnims_SpinningHandOrFoot[];
+extern const union AnimCmd *const gAnims_RevengeBigScratch[];
+
+// battle_anim_rock.c
+extern const union AnimCmd *const gAnims_FlyingRock[];
+extern const union AffineAnimCmd *const gAffineAnims_Whirlpool[];
+extern const union AffineAnimCmd *const gAffineAnims_BasicRock[];
+extern const union AnimCmd *const gAnims_FlyingRock[];
+void AnimParticleInVortex(struct Sprite *sprite);
+void AnimFallingRock(struct Sprite *sprite);
+void AnimRaiseSprite(struct Sprite *sprite);
+void AnimFallingRock_Step(struct Sprite *sprite);
+void AnimFlyingSandCrescent(struct Sprite *sprite);
+void AnimRockFragment(struct Sprite *);
+
+// battle_anim_dark.c
+void AnimClawSlash(struct Sprite *sprite);
+void AnimTearDrop(struct Sprite *sprite);
+void AnimBite(struct Sprite *sprite);
+extern const union AnimCmd *const gAnims_ClawSlash[];
+extern const union AffineAnimCmd *const gAffineAnims_TearDrop[];
+
+// battle_anim_bug.c
+void AnimStringWrap_Step(struct Sprite *sprite);
+void AnimMissileArc(struct Sprite *sprite);
+void AnimSpiderWeb(struct Sprite *sprite);
+void AnimMissileArc_Step(struct Sprite *sprite);
+
+// battle_anim_ice.c
+void AnimThrowMistBall(struct Sprite *sprite);
+void AnimMoveParticleBeyondTarget(struct Sprite *sprite);
+void AnimIceEffectParticle(struct Sprite *sprite);
+void AnimSwirlingSnowball_Step1(struct Sprite *sprite);
+extern const union AnimCmd *const gAnims_Snowball[];
+extern const union AffineAnimCmd *const gAffineAnims_IceCrystalHit[];
+extern const union AnimCmd *const gAnims_IceCrystalLarge[];
+extern const union AnimCmd *const gAnims_IceBallChunk[];
+extern const union AnimCmd *const gAnims_BlizzardIceCrystal[];
+
+// battle_anim_fire.c
+void AnimFireSpread(struct Sprite *sprite);
+void AnimFireSpiralOutward(struct Sprite *sprite);
+void AnimWillOWispOrb(struct Sprite *);
+void AnimEruptionFallingRock(struct Sprite *);
+void AnimFireCross(struct Sprite *);
+void AnimFirePlume(struct Sprite *);
+extern const union AnimCmd *const gAnims_FireBlastCross[];
+extern const union AnimCmd *const gAnims_WillOWispOrb[];
+extern const union AnimCmd *const gAnims_FirePlume[];
+
+// battle_anim_dragon.c
+extern const union AnimCmd *const gAnims_DragonBreathFire[];
+extern const union AnimCmd *const gAnims_DragonRageFirePlume[];
+extern const union AffineAnimCmd *const gAffineAnims_DragonRageFire[];
+extern const union AnimCmd *const gAnims_DragonRageFire[];
+extern const union AffineAnimCmd *const gAffineAnims_DragonBreathFire[];
+void AnimDragonRageFirePlume(struct Sprite *sprite);
+void AnimDragonFireToTarget(struct Sprite *sprite);
+void AnimDragonDanceOrb(struct Sprite *sprite);
+void AnimOverheatFlame(struct Sprite *sprite);
+
+// battle_anim_new.c
+void CoreEnforcerLoadBeamTarget(struct Sprite *sprite);
+void SpriteCB_RandomCentredHits(struct Sprite *sprite);
+
#endif // GUARD_BATTLE_ANIM_H
diff --git a/include/battle_arena.h b/include/battle_arena.h
index cc0e72c0c1..469c096129 100644
--- a/include/battle_arena.h
+++ b/include/battle_arena.h
@@ -1,6 +1,8 @@
#ifndef GUARD_BATTLE_ARENA_H
#define GUARD_BATTLE_ARENA_H
+#include "constants/battle_arena.h"
+
void CallBattleArenaFunction(void);
u8 BattleArena_ShowJudgmentWindow(u8 *state);
void BattleArena_InitPoints(void);
diff --git a/include/battle_bg.h b/include/battle_bg.h
index 075159148d..d0110efa2a 100644
--- a/include/battle_bg.h
+++ b/include/battle_bg.h
@@ -20,5 +20,6 @@ void LoadBattleTextboxAndBackground(void);
void InitLinkBattleVsScreen(u8 taskId);
void DrawBattleEntryBackground(void);
bool8 LoadChosenBattleElement(u8 caseId);
+void DrawTerrainTypeBattleBackground(void);
#endif // GUARD_BATTLE_BG_H
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 5b6ba30bdd..769dccbd69 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -92,12 +92,13 @@ enum {
LINK_STANDBY_MSG_ONLY,
};
-#define INSTANT_HP_BAR_DROP 32767
+#define INSTANT_HP_BAR_DROP 0x7FFF
#define PARTY_SUMM_SKIP_DRAW_DELAY (1 << 7)
// Special return values in gBattleBufferB from Battle Controller functions.
#define RET_VALUE_LEVELED_UP 11
+#define RET_MEGA_EVOLUTION 0x80
struct UnusedControllerStruct
{
@@ -126,6 +127,9 @@ struct ChooseMoveStruct
u16 species;
u8 monType1;
u8 monType2;
+ u8 monType3;
+ struct MegaEvolutionData mega;
+ struct ZMoveData zmove;
};
enum
@@ -186,6 +190,7 @@ enum
CONTROLLER_LINKSTANDBYMSG,
CONTROLLER_RESETACTIONMOVESELECTION,
CONTROLLER_ENDLINKBATTLE,
+ CONTROLLER_DEBUGMENU,
/*new controllers should go here*/
CONTROLLER_TERMINATOR_NOP,
CONTROLLER_CMDS_COUNT
@@ -197,6 +202,7 @@ extern struct UnusedControllerStruct gUnusedControllerStruct;
void HandleLinkBattleSetup(void);
void SetUpBattleVarsAndBirchZigzagoon(void);
void InitBattleControllers(void);
+bool32 IsValidForBattle(struct Pokemon *mon);
void TryReceiveLinkBattleData(void);
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
@@ -222,11 +228,11 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId);
void BtlController_EmitChooseAction(u8 bufferId, u8 action, u16 itemId);
void BtlController_EmitYesNoBox(u8 bufferId);
void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
-void BtlController_EmitChooseItem(u8 bufferId, u8* battlePartyOrder);
-void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abilityId, u8* data);
+void BtlController_EmitChooseItem(u8 bufferId, u8 *battlePartyOrder);
+void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 *data);
void BtlController_EmitCmd23(u8 bufferId); // unused
void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
-void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
+void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, s32 expPoints);
void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2);
void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status);
void BtlController_EmitStatusXor(u8 bufferId, u8 b); // unused
@@ -234,7 +240,7 @@ void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data);
void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data); // unused
void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data); // unused
void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data); // unused
-void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u16 ret16);
+void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u32 ret32);
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battlePartyOrder);
void BtlController_EmitOneReturnValue(u8 bufferId, u16 ret);
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 ret);
@@ -257,6 +263,7 @@ void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument
void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 mode, bool32 record);
void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
void BtlController_EmitEndLinkBattle(u8 bufferId, u8 battleOutcome);
+void BtlController_EmitDebugMenu(u8 bufferId);
// player controller
void SetControllerToPlayer(void);
@@ -270,6 +277,8 @@ void Task_PlayerController_RestoreBgmAfterCry(u8 taskId);
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
void ActionSelectionDestroyCursorAt(u8 cursorPos);
void InitMoveSelectionsVarsAndStrings(void);
+void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1);
+void MoveSelectionDestroyCursorAt(u8 cursorPosition);
// recorded player controller
void SetControllerToRecordedPlayer(void);
diff --git a/include/battle_debug.h b/include/battle_debug.h
new file mode 100644
index 0000000000..db2c92296e
--- /dev/null
+++ b/include/battle_debug.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_BATTLE_DEBUG_H
+#define GUARD_BATTLE_DEBUG_H
+
+void CB2_BattleDebugMenu(void);
+
+#endif // GUARD_BATTLE_DEBUG_H
diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h
index 2a848e3d93..3e940995dc 100644
--- a/include/battle_gfx_sfx_util.h
+++ b/include/battle_gfx_sfx_util.h
@@ -9,7 +9,6 @@ void SpriteCB_TrainerSlideIn(struct Sprite *sprite);
void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status);
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument);
void InitAndLaunchSpecialAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId);
-bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
bool8 IsBattleSEPlaying(u8 battlerId);
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
@@ -24,7 +23,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId);
void ClearSpritesHealthboxAnimData(void);
void CopyAllBattleSpritesInvisibilities(void);
void CopyBattleSpriteInvisibility(u8 battlerId);
-void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform);
+void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform, bool32 megaEvo);
void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite);
void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId);
void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move);
diff --git a/include/battle_interface.h b/include/battle_interface.h
index c4816e8da5..29cb45b0fe 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -39,11 +39,23 @@ enum
#define TAG_STATUS_SUMMARY_BAR_TILE 0xD70C
#define TAG_STATUS_SUMMARY_BALLS_TILE 0xD714
+#define TAG_MEGA_TRIGGER_TILE 0xD777
+#define TAG_MEGA_INDICATOR_TILE 0xD778
+#define TAG_ALPHA_INDICATOR_TILE 0xD779
+#define TAG_OMEGA_INDICATOR_TILE 0xD77A
+#define TAG_ZMOVE_TRIGGER_TILE 0xD77B
+
#define TAG_HEALTHBOX_PAL 0xD6FF
#define TAG_HEALTHBAR_PAL 0xD704
#define TAG_STATUS_SUMMARY_BAR_PAL 0xD710
#define TAG_STATUS_SUMMARY_BALLS_PAL 0xD712
+#define TAG_MEGA_TRIGGER_PAL 0xD777
+#define TAG_MEGA_INDICATOR_PAL 0xD778
+#define TAG_ALPHA_INDICATOR_PAL 0xD779
+#define TAG_OMEGA_INDICATOR_PAL 0xD77A
+#define TAG_ZMOVE_TRIGGER_PAL 0xD77B
+
enum
{
HEALTHBOX_ALL,
@@ -60,6 +72,7 @@ enum
HEALTHBOX_SAFARI_BALLS_TEXT
};
+u8 GetMegaIndicatorSpriteId(u32 healthboxSpriteId);
u8 CreateBattlerHealthboxSprites(u8 battler);
u8 CreateSafariPlayerHealthboxSprites(void);
void SetBattleBarStruct(u8 battler, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue);
@@ -67,15 +80,30 @@ void SetHealthboxSpriteInvisible(u8 healthboxSpriteId);
void SetHealthboxSpriteVisible(u8 healthboxSpriteId);
void DestoryHealthboxSprite(u8 healthboxSpriteId);
void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly);
-void UpdateOamPriorityInAllHealthboxes(u8 priority);
+void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHpBoxes);
void InitBattlerHealthboxCoords(u8 battler);
void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
void SwapHpBarsWithHpText(void);
+void ChangeMegaTriggerSprite(u8 spriteId, u8 animId);
+void CreateMegaTriggerSprite(u8 battlerId, u8 palId);
+bool32 IsMegaTriggerSpriteActive(void);
+void HideMegaTriggerSprite(void);
+void DestroyMegaTriggerSprite(void);
+u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which);
+void DestroyMegaIndicatorSprite(u32 healthboxSpriteId);
u8 CreatePartyStatusSummarySprites(u8 battler, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart);
void Task_HidePartyStatusSummary(u8 taskId);
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId);
s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 unused);
u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp);
+void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle);
+void DestroyAbilityPopUp(u8 battlerId);
+void HideTriggerSprites(void);
+bool32 CanThrowLastUsedBall(void);
+void TryHideLastUsedBall(void);
+void TryRestoreLastUsedBall(void);
+void TryAddLastUsedBallItemSprites(void);
+void UpdateAbilityPopup(u8 battlerId);
#endif // GUARD_BATTLE_INTERFACE_H
diff --git a/include/battle_main.h b/include/battle_main.h
index 449131e534..df59dcae34 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -22,21 +22,6 @@ struct MultiPartnerMenuPokemon
/*0x1D*/ u8 language;
};
-// defines for the u8 array gTypeEffectiveness
-#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
-#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
-#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
-
-// defines for the gTypeEffectiveness multipliers
-#define TYPE_MUL_NO_EFFECT 0
-#define TYPE_MUL_NOT_EFFECTIVE 5
-#define TYPE_MUL_NORMAL 10
-#define TYPE_MUL_SUPER_EFFECTIVE 20
-
-// special type table Ids
-#define TYPE_FORESIGHT 0xFE
-#define TYPE_ENDTABLE 0xFF
-
// defines for the 'DoBounceEffect' function
#define BOUNCE_MON 0x0
#define BOUNCE_HEALTHBOX 0x1
@@ -50,16 +35,16 @@ void SpriteCB_VsLetterInit(struct Sprite *sprite);
void CB2_InitEndLinkBattle(void);
u32 GetBattleBgTemplateData(u8 arrayId, u8 caseId);
u32 GetBattleWindowTemplatePixelWidth(u32 setId, u32 tableId);
-void SpriteCb_WildMon(struct Sprite *sprite);
+void SpriteCB_WildMon(struct Sprite *sprite);
void SpriteCallbackDummy_2(struct Sprite *sprite);
void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
-void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite);
-void SpriteCb_HideAsMoveTarget(struct Sprite *sprite);
+void SpriteCB_ShowAsMoveTarget(struct Sprite *sprite);
+void SpriteCB_HideAsMoveTarget(struct Sprite *sprite);
void SpriteCB_OpponentMonFromBall(struct Sprite *sprite);
void SpriteCB_BattleSpriteStartSlideLeft(struct Sprite *sprite);
void SpriteCB_FaintSlideAnim(struct Sprite *sprite);
-void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d);
-void EndBounceEffect(u8 battlerId, bool8 b);
+void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude);
+void EndBounceEffect(u8 battler, u8 which);
void SpriteCB_PlayerMonFromBall(struct Sprite *sprite);
void SpriteCB_TrainerThrowObject(struct Sprite *sprite);
void AnimSetCenterToCornerVecX(struct Sprite *sprite);
@@ -71,18 +56,22 @@ void BattleTurnPassed(void);
u8 IsRunningFromBattleImpossible(void);
void SwitchPartyOrder(u8 battlerId);
void SwapTurnOrder(u8 id1, u8 id2);
+u32 GetBattlerTotalSpeedStat(u8 battlerId);
+s8 GetChosenMovePriority(u32 battlerId);
+s8 GetMovePriority(u32 battlerId, u16 move);
u8 GetWhoStrikesFirst(u8 battlerId1, u8 battlerId2, bool8 ignoreChosenMoves);
void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
bool8 TryRunFromBattle(u8 battlerId);
void SpecialStatusesClear(void);
+void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk);
+bool32 IsWildMonSmart(void);
extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE];
extern const struct SpriteTemplate gUnusedBattleInitSprite;
extern const struct OamData gOamData_BattleSpriteOpponentSide;
extern const struct OamData gOamData_BattleSpritePlayerSide;
-extern const u8 gTypeEffectiveness[336];
extern const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1];
extern const struct TrainerMoney gTrainerMoneyTable[];
extern const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1];
diff --git a/include/battle_message.h b/include/battle_message.h
index da3009d63f..4102bb5c9a 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -1,7 +1,13 @@
#ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H
-#define TEXT_BUFF_ARRAY_COUNT 16
+#include "constants/battle_config.h"
+
+#if B_EXPANDED_ABILITY_NAMES == TRUE
+ #define TEXT_BUFF_ARRAY_COUNT 17
+#else
+ #define TEXT_BUFF_ARRAY_COUNT 16
+#endif
// for 0xFD
#define B_TXT_BUFF1 0x0
@@ -57,6 +63,15 @@
#define B_TXT_PARTNER_CLASS 0x32
#define B_TXT_PARTNER_NAME 0x33
#define B_TXT_BUFF3 0x34
+#define B_TXT_ATK_TRAINER_NAME 0x35
+#define B_TXT_ATK_TRAINER_CLASS 0x36
+#define B_TXT_ATK_TEAM1 0x37 // Your/The opposing
+#define B_TXT_ATK_TEAM2 0x38 // your/the opposing
+#define B_TXT_DEF_NAME 0x39
+#define B_TXT_DEF_TEAM1 0x3A // Your/The opposing
+#define B_TXT_DEF_TEAM2 0x3B // your/the opposing
+#define B_TXT_ACTIVE_NAME 0x3C
+#define B_TXT_ACTIVE_NAME2 0x3D // no Illusion check
// for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3
@@ -96,7 +111,8 @@
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_ABILITY; \
textVar[2] = abilityId; \
- textVar[3] = B_BUFF_EOS; \
+ textVar[3] = (abilityId & 0xFF00) >> 8; \
+ textVar[4] = B_BUFF_EOS; \
}
#define PREPARE_TYPE_BUFFER(textVar, typeId) \
@@ -145,7 +161,7 @@
{ \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_STRING; \
- textVar[2] = stringId; \
+ textVar[2] = stringId & 0xFF; \
textVar[3] = (stringId & 0xFF00) >> 8; \
textVar[4] = B_BUFF_EOS; \
}
@@ -200,29 +216,38 @@ struct BattleMsgData
u16 currentMove;
u16 originallyUsedMove;
u16 lastItem;
- u8 lastAbility;
+ u16 lastAbility;
u8 scrActive;
u8 unk1605E;
u8 hpScale;
u8 itemEffectBattler;
u8 moveType;
- u8 abilities[MAX_BATTLERS_COUNT];
+ u16 abilities[MAX_BATTLERS_COUNT];
u8 textBuffs[3][TEXT_BUFF_ARRAY_COUNT];
};
+enum
+{
+ TRAINER_SLIDE_LAST_SWITCHIN,
+ TRAINER_SLIDE_LAST_LOW_HP,
+ TRAINER_SLIDE_FIRST_DOWN,
+};
+
void BufferStringBattle(u16 stringID);
-u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src);
-u32 BattleStringExpandPlaceholders(const u8* src, u8* dst);
-void BattlePutTextOnWindow(const u8* text, u8 windowId);
+u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src);
+u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst);
+void BattlePutTextOnWindow(const u8 *text, u8 windowId);
void SetPpNumbersPaletteInMoveSelection(void);
u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp);
+bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which);
+void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst);
extern struct BattleMsgData *gBattleMsgDataPtr;
-extern const u8* const gBattleStringsTable[];
-extern const u8* const gStatNamesTable[];
-extern const u8* const gPokeblockWasTooXStringTable[];
-extern const u8* const gRefereeStringsTable[];
+extern const u8 *const gBattleStringsTable[];
+extern const u8 *const gStatNamesTable[];
+extern const u8 *const gPokeblockWasTooXStringTable[];
+extern const u8 *const gRefereeStringsTable[];
extern const u8 *const gRoundsStringTable[];
extern const u8 gText_PkmnIsEvolving[];
@@ -267,6 +292,7 @@ extern const u8 gText_BattleWallyName[];
extern const u8 gText_Win[];
extern const u8 gText_Loss[];
extern const u8 gText_Draw[];
+extern const u8 gText_StatSharply[];
extern const u8 gText_StatRose[];
extern const u8 gText_DefendersStatRose[];
extern const u8 gText_PkmnGettingPumped[];
@@ -290,6 +316,6 @@ extern const u8 gText_BattleRecordedOnPass[];
extern const u8 gText_BattleTourney[];
extern const u16 gMissStringIds[];
-extern const u16 gTrappingMoves[];
+extern const u16 gStatUpStringIds[];
#endif // GUARD_BATTLE_MESSAGE_H
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index ed90d787f0..44185a11a3 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -7,18 +7,45 @@
#define WINDOW_CLEAR (1 << 0)
#define WINDOW_BG1 (1 << 7)
-void AI_CalcDmg(u8 battlerIdAtk, u8 battlerIdDef);
-u8 TypeCalc(u16 move, u8 battlerIdAtk, u8 battlerIdDef);
-u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
+// Arguments for 'xStart, yStart, xEnd, yEnd' in HandleBattleWindow
+#define YESNOBOX_X_Y 24, 8, 29, 13
+
+struct StatFractions
+{
+ u8 dividend;
+ u8 divisor;
+};
+
+s32 CalcCritChanceStage(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recordAbility);
+s8 GetInverseCritChance(u8 battlerAtk, u8 battlerDef, u32 move);
+u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect);
u8 GetBattlerTurnOrderNum(u8 battlerId);
-void SetMoveEffect(bool8 primary, u8 certain);
+bool32 NoAliveMonsForEitherParty(void);
+void SetMoveEffect(bool32 primary, u32 certain);
+bool32 CanBattlerSwitch(u32 battlerId);
void BattleDestroyYesNoCursorAt(u8 cursorPosition);
void BattleCreateYesNoCursorAt(u8 cursorPosition);
void BufferMoveToLearnIntoBattleTextBuff2(void);
void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
bool8 UproarWakeUpCheck(u8 battlerId);
+bool32 DoesSubstituteBlockMove(u8 battlerAtk, u8 battlerDef, u32 move);
+bool32 DoesDisguiseBlockMove(u8 battlerAtk, u8 battlerDef, u32 move);
+bool32 CanPoisonType(u8 battlerAttacker, u8 battlerTarget);
+bool32 CanParalyzeType(u8 battlerAttacker, u8 battlerTarget);
+bool32 CanUseLastResort(u8 battlerId);
+u32 IsFlowerVeilProtected(u32 battler);
+u32 IsLeafGuardProtected(u32 battler);
+bool32 IsShieldsDownProtected(u32 battler);
+u32 IsAbilityStatusProtected(u32 battler);
+bool32 TryResetBattlerStatChanges(u8 battler);
+bool32 CanCamouflage(u8 battlerId);
+u16 GetNaturePowerMove(void);
+u16 GetSecretPowerMoveEffect(void);
+void StealTargetItem(u8 battlerStealer, u8 battlerItem);
+u8 GetCatchingBattler(void);
extern void (* const gBattleScriptingCommandsTable[])(void);
extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4];
+extern const struct StatFractions gAccuracyStageRatios[];
#endif // GUARD_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/battle_scripts.h b/include/battle_scripts.h
index cf39de3c4b..09e11bd8c0 100644
--- a/include/battle_scripts.h
+++ b/include/battle_scripts.h
@@ -1,12 +1,14 @@
#ifndef GUARD_BATTLE_SCRIPTS_H
#define GUARD_BATTLE_SCRIPTS_H
+extern const u8 BattleScript_NotAffected[];
extern const u8 BattleScript_HitFromCritCalc[];
extern const u8 BattleScript_MoveEnd[];
extern const u8 BattleScript_MakeMoveMissed[];
extern const u8 BattleScript_PrintMoveMissed[];
extern const u8 BattleScript_MoveMissedPause[];
extern const u8 BattleScript_MoveMissed[];
+extern const u8 BattleScript_ButItFailedAtkStringPpReduce[];
extern const u8 BattleScript_ButItFailed[];
extern const u8 BattleScript_StatUp[];
extern const u8 BattleScript_StatDown[];
@@ -46,6 +48,7 @@ extern const u8 BattleScript_SandStormHailEnds[];
extern const u8 BattleScript_SunlightContinues[];
extern const u8 BattleScript_SunlightFaded[];
extern const u8 BattleScript_OverworldWeatherStarts[];
+extern const u8 BattleScript_OverworldTerrain[];
extern const u8 BattleScript_SideStatusWoreOff[];
extern const u8 BattleScript_SafeguardProtected[];
extern const u8 BattleScript_SafeguardEnds[];
@@ -53,7 +56,8 @@ extern const u8 BattleScript_LeechSeedTurnDrain[];
extern const u8 BattleScript_BideStoringEnergy[];
extern const u8 BattleScript_BideAttack[];
extern const u8 BattleScript_BideNoEnergyToAttack[];
-extern const u8 BattleScript_SuccessForceOut[];
+extern const u8 BattleScript_RoarSuccessSwitch[];
+extern const u8 BattleScript_RoarSuccessEndBattle[];
extern const u8 BattleScript_MistProtected[];
extern const u8 BattleScript_RageIsBuilding[];
extern const u8 BattleScript_MoveUsedIsDisabled[];
@@ -63,9 +67,9 @@ extern const u8 BattleScript_SelectingDisabledMoveInPalace[];
extern const u8 BattleScript_SelectingUnusableMoveInPalace[];
extern const u8 BattleScript_EncoredNoMore[];
extern const u8 BattleScript_DestinyBondTakesLife[];
-extern const u8 BattleScript_SpikesOnAttacker[];
-extern const u8 BattleScript_SpikesOnTarget[];
-extern const u8 BattleScript_SpikesOnFaintedBattler[];
+extern const u8 BattleScript_DmgHazardsOnAttacker[];
+extern const u8 BattleScript_DmgHazardsOnTarget[];
+extern const u8 BattleScript_DmgHazardsOnFaintedBattler[];
extern const u8 BattleScript_PerishSongTakesLife[];
extern const u8 BattleScript_PerishSongCountGoesDown[];
extern const u8 BattleScript_AllStatsUp[];
@@ -86,12 +90,14 @@ extern const u8 BattleScript_SelectingNotAllowedMoveTauntInPalace[];
extern const u8 BattleScript_WishComesTrue[];
extern const u8 BattleScript_IngrainTurnHeal[];
extern const u8 BattleScript_AtkDefDown[];
+extern const u8 BattleScript_DefSpDefDown[];
extern const u8 BattleScript_KnockedOff[];
extern const u8 BattleScript_MoveUsedIsImprisoned[];
extern const u8 BattleScript_SelectingImprisonedMove[];
extern const u8 BattleScript_SelectingImprisonedMoveInPalace[];
extern const u8 BattleScript_GrudgeTakesPp[];
extern const u8 BattleScript_MagicCoatBounce[];
+extern const u8 BattleScript_MagicCoatBouncePrankster[];
extern const u8 BattleScript_SnatchedMove[];
extern const u8 BattleScript_EnduredMsg[];
extern const u8 BattleScript_OneHitKOMsg[];
@@ -119,6 +125,8 @@ extern const u8 BattleScript_MoveUsedIsInLoveCantAttack[];
extern const u8 BattleScript_NightmareTurnDmg[];
extern const u8 BattleScript_CurseTurnDmg[];
extern const u8 BattleScript_TargetPRLZHeal[];
+extern const u8 BattleScript_TargetWokeUp[];
+extern const u8 BattleScript_TargetBurnHeal[];
extern const u8 BattleScript_MoveEffectSleep[];
extern const u8 BattleScript_YawnMakesAsleep[];
extern const u8 BattleScript_MoveEffectPoison[];
@@ -137,6 +145,7 @@ extern const u8 BattleScript_ItemSteal[];
extern const u8 BattleScript_DrizzleActivates[];
extern const u8 BattleScript_SpeedBoostActivates[];
extern const u8 BattleScript_TraceActivates[];
+extern const u8 BattleScript_TraceActivatesEnd3[];
extern const u8 BattleScript_RainDishActivates[];
extern const u8 BattleScript_SandstreamActivates[];
extern const u8 BattleScript_ShedSkinActivates[];
@@ -168,13 +177,14 @@ extern const u8 BattleScript_StickyHoldActivates[];
extern const u8 BattleScript_ColorChangeActivates[];
extern const u8 BattleScript_RoughSkinActivates[];
extern const u8 BattleScript_CuteCharmActivates[];
-extern const u8 BattleScript_ApplySecondaryEffect[];
+extern const u8 BattleScript_AbilityStatusEffect[];
extern const u8 BattleScript_SynchronizeActivates[];
extern const u8 BattleScript_NoItemSteal[];
extern const u8 BattleScript_AbilityCuredStatus[];
extern const u8 BattleScript_IgnoresWhileAsleep[];
extern const u8 BattleScript_IgnoresAndUsesRandomMove[];
extern const u8 BattleScript_MoveUsedLoafingAround[];
+extern const u8 BattleScript_TruantLoafingAround[];
extern const u8 BattleScript_IgnoresAndFallsAsleep[];
extern const u8 BattleScript_IgnoresAndHitsItself[];
extern const u8 BattleScript_SubstituteFade[];
@@ -194,14 +204,17 @@ extern const u8 BattleScript_BerryCureChosenStatusEnd2[];
extern const u8 BattleScript_BerryCureChosenStatusRet[];
extern const u8 BattleScript_WhiteHerbEnd2[];
extern const u8 BattleScript_WhiteHerbRet[];
-extern const u8 BattleScript_ItemHealHP_RemoveItem[];
+extern const u8 BattleScript_ItemHealHP_RemoveItemRet[];
+extern const u8 BattleScript_ItemHealHP_RemoveItemEnd2[];
extern const u8 BattleScript_BerryPPHealEnd2[];
extern const u8 BattleScript_ItemHealHP_End2[];
extern const u8 BattleScript_ItemHealHP_Ret[];
extern const u8 BattleScript_SelectingNotAllowedMoveChoiceItem[];
-extern const u8 BattleScript_FocusBandActivates[];
+extern const u8 BattleScript_HangedOnMsg[];
extern const u8 BattleScript_BerryConfuseHealEnd2[];
+extern const u8 BattleScript_BerryConfuseHealRet[];
extern const u8 BattleScript_BerryStatRaiseEnd2[];
+extern const u8 BattleScript_BerryStatRaiseRet[];
extern const u8 BattleScript_BerryFocusEnergyEnd2[];
extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[];
extern const u8 BattleScript_ArenaTurnBeginning[];
@@ -222,5 +235,199 @@ extern const u8 BattleScript_RunByUsingItem[];
extern const u8 BattleScript_ActionWatchesCarefully[];
extern const u8 BattleScript_ActionGetNear[];
extern const u8 BattleScript_ActionThrowPokeblock[];
+extern const u8 BattleScript_EmbargoEndTurn[];
+extern const u8 BattleScript_TelekinesisEndTurn[];
+extern const u8 BattleScript_BufferEndTurn[];
+extern const u8 BattleScript_AquaRingHeal[];
+extern const u8 BattleScript_AuroraVeilEnds[];
+extern const u8 BattleScript_LuckyChantEnds[];
+extern const u8 BattleScript_TailwindEnds[];
+extern const u8 BattleScript_TrickRoomEnds[];
+extern const u8 BattleScript_WonderRoomEnds[];
+extern const u8 BattleScript_MagicRoomEnds[];
+extern const u8 BattleScript_ElectricTerrainEnds[];
+extern const u8 BattleScript_MistyTerrainEnds[];
+extern const u8 BattleScript_GrassyTerrainEnds[];
+extern const u8 BattleScript_PsychicTerrainEnds[];
+extern const u8 BattleScript_MudSportEnds[];
+extern const u8 BattleScript_WaterSportEnds[];
+extern const u8 BattleScript_SturdiedMsg[];
+extern const u8 BattleScript_GravityEnds[];
+extern const u8 BattleScript_MoveStatDrain[];
+extern const u8 BattleScript_MoveStatDrain_PPLoss[];
+extern const u8 BattleScript_TargetAbilityStatRaiseOnMoveEnd[];
+extern const u8 BattleScript_TargetsStatWasMaxedOut[];
+extern const u8 BattleScript_AttackerAbilityStatRaise[];
+extern const u8 BattleScript_AttackerAbilityStatRaiseEnd3[];
+extern const u8 BattleScript_PoisonHealActivates[];
+extern const u8 BattleScript_BadDreamsActivates[];
+extern const u8 BattleScript_SwitchInAbilityMsg[];
+extern const u8 BattleScript_SwitchInAbilityMsgRet[];
+extern const u8 BattleScript_ToxicSpikesPoisoned[];
+extern const u8 BattleScript_ToxicSpikesAbsorbed[];
+extern const u8 BattleScript_StickyWebOnSwitchIn[];
+extern const u8 BattleScript_SolarPowerActivates[];
+extern const u8 BattleScript_CursedBodyActivates[];
+extern const u8 BattleScript_MummyActivates[];
+extern const u8 BattleScript_WeakArmorActivates[];
+extern const u8 BattleScript_FellStingerRaisesStat[];
+extern const u8 BattleScript_SnowWarningActivates[];
+extern const u8 BattleScript_HarvestActivates[];
+extern const u8 BattleScript_ImposterActivates[];
+extern const u8 BattleScript_SelectingNotAllowedMoveAssaultVest[];
+extern const u8 BattleScript_SelectingNotAllowedMoveGravity[];
+extern const u8 BattleScript_MoveUsedGravityPrevents[];
+extern const u8 BattleScript_SelectingNotAllowedMoveGravityInPalace[];
+extern const u8 BattleScript_SelectingNotAllowedMoveHealBlock[];
+extern const u8 BattleScript_MoveUsedHealBlockPrevents[];
+extern const u8 BattleScript_SelectingNotAllowedMoveHealBlockInPalace[];
+extern const u8 BattleScript_ToxicSpikesFree[];
+extern const u8 BattleScript_StickyWebFree[];
+extern const u8 BattleScript_StealthRockFree[];
+extern const u8 BattleScript_MegaEvolution[];
+extern const u8 BattleScript_WishMegaEvolution[];
+extern const u8 BattleScript_MoveEffectRecoilWithStatus[];
+extern const u8 BattleScript_EffectWithChance[];
+extern const u8 BattleScript_MoveEffectClearSmog[];
+extern const u8 BattleScript_ForceRandomSwitch[];
+extern const u8 BattleScript_SideStatusWoreOffReturn[];
+extern const u8 BattleScript_MoveEffectSmackDown[];
+extern const u8 BattleScript_MoveEffectFlameBurst[];
+extern const u8 BattleScript_TrainerSlideMsgRet[];
+extern const u8 BattleScript_TrainerSlideMsgEnd2[];
+extern const u8 BattleScript_MoveEffectFeint[];
+extern const u8 BattleScript_ProteanActivates[];
+extern const u8 BattleScript_DazzlingProtected[];
+extern const u8 BattleScript_MoveUsedPsychicTerrainPrevents[];
+extern const u8 BattleScript_MoveUsedPowder[];
+extern const u8 BattleScript_SelectingNotAllowedStuffCheeks[];
+extern const u8 BattleScript_SelectingNotAllowedBelch[];
+extern const u8 BattleScript_SelectingNotAllowedBelchInPalace[];
+extern const u8 BattleScript_PsychicSurgeActivates[];
+extern const u8 BattleScript_GrassySurgeActivates[];
+extern const u8 BattleScript_MistySurgeActivates[];
+extern const u8 BattleScript_ElectricSurgeActivates[];
+extern const u8 BattleScript_SpectralThiefSteal[];
+extern const u8 BattleScript_StatUpMsg[];
+extern const u8 BattleScript_AbilityRaisesDefenderStat[];
+extern const u8 BattleScript_PowderMoveNoEffect[];
+extern const u8 BattleScript_GrassyTerrainHeals[];
+extern const u8 BattleScript_VCreateStatLoss[];
+extern const u8 BattleScript_SpikyShieldEffect[];
+extern const u8 BattleScript_KingsShieldEffect[];
+extern const u8 BattleScript_BanefulBunkerEffect[];
+extern const u8 BattleScript_FlowerVeilProtectsRet[];
+extern const u8 BattleScript_SweetVeilProtectsRet[];
+extern const u8 BattleScript_MoveEffectCoreEnforcer[];
+extern const u8 BattleScript_SelectingNotAllowedMoveThroatChop[];
+extern const u8 BattleScript_MoveUsedIsThroatChopPrevented[];
+extern const u8 BattleScript_SelectingNotAllowedMoveThroatChopInPalace[];
+extern const u8 BattleScript_ThroatChopEndTurn[];
+extern const u8 BattleScript_GemActivates[];
+extern const u8 BattleScript_BerryReduceDmg[];
+extern const u8 BattleScript_PrintBerryReduceString[];
+extern const u8 BattleScript_WeaknessPolicy[];
+extern const u8 BattleScript_TargetItemStatRaise[];
+extern const u8 BattleScript_RockyHelmetActivates[];
+extern const u8 BattleScript_ItemHurtEnd2[];
+extern const u8 BattleScript_AirBaloonMsgIn[];
+extern const u8 BattleScript_AirBaloonMsgPop[];
+extern const u8 BattleScript_ItemHurtRet[];
+extern const u8 BattleScript_ToxicOrb[];
+extern const u8 BattleScript_FlameOrb[];
+extern const u8 BattleScript_MoveEffectIncinerate[];
+extern const u8 BattleScript_MoveEffectBugBite[];
+extern const u8 BattleScript_IllusionOff[];
+extern const u8 BattleScript_DancerActivates[];
+extern const u8 BattleScript_AftermathDmg[];
+extern const u8 BattleScript_AttackerFormChange[];
+extern const u8 BattleScript_AttackerFormChangeEnd3[];
+extern const u8 BattleScript_TargetFormChange[];
+extern const u8 BattleScript_AnticipationActivates[];
+extern const u8 BattleScript_SlowStartEnds[];
+extern const u8 BattleScript_HealerActivates[];
+extern const u8 BattleScript_ScriptingAbilityStatRaise[];
+extern const u8 BattleScript_ReceiverActivates[];
+extern const u8 BattleScript_FriskActivates[];
+extern const u8 BattleScript_FriskMsg[];
+extern const u8 BattleScript_FriskMsgWithPopup[];
+extern const u8 BattleScript_MoodyActivates[];
+extern const u8 BattleScript_EmergencyExit[];
+extern const u8 BattleScript_EmergencyExitNoPopUp[];
+extern const u8 BattleScript_EmergencyExitWild[];
+extern const u8 BattleScript_EmergencyExitWildNoPopUp[];
+extern const u8 BattleScript_CheekPouchActivates[];
+extern const u8 BattleScript_TotemVar[];
+extern const u8 BattleScript_TotemFlaredToLife[];
+extern const u8 BattleScript_AnnounceAirLockCloudNine[];
+extern const u8 BattleScript_BattlerAbilityStatRaiseOnSwitchIn[];
+extern const u8 BattleScript_CottonDownActivates[];
+extern const u8 BattleScript_BallFetch[];
+extern const u8 BattleScript_SandSpitActivates[];
+extern const u8 BattleScript_PerishBodyActivates[];
+extern const u8 BattleScript_ActivateAsOne[];
+extern const u8 BattleScript_RaiseStatOnFaintingTarget[];
+extern const u8 BattleScript_QuickClawActivation[];
+extern const u8 BattleScript_QuickDrawActivation[];
+extern const u8 BattleScript_CustapBerryActivation[];
+extern const u8 BattleScript_MicleBerryActivateEnd2[];
+extern const u8 BattleScript_MicleBerryActivateRet[];
+extern const u8 BattleScript_JabocaRowapBerryActivates[];
+extern const u8 BattleScript_NotAffectedAbilityPopUp[];
+extern const u8 BattleScript_BattlerShookOffTaunt[];
+extern const u8 BattleScript_BattlerGotOverItsInfatuation[];
+extern const u8 BattleScript_Pickpocket[];
+extern const u8 BattleScript_StickyBarbTransfer[];
+extern const u8 BattleScript_AttackerItemStatRaise[];
+extern const u8 BattleScript_RedCardActivates[];
+extern const u8 BattleScript_EjectButtonActivates[];
+extern const u8 BattleScript_EjectPackActivate_Ret[];
+extern const u8 BattleScript_EjectPackActivate_End2[];
+extern const u8 BattleScript_EjectPackActivates[];
+extern const u8 BattleScript_MentalHerbCureRet[];
+extern const u8 BattleScript_MentalHerbCureEnd2[];
+extern const u8 BattleScript_TerrainPreventsEnd2[];
+extern const u8 BattleScript_MistyTerrainPrevents[];
+extern const u8 BattleScript_ElectricTerrainPrevents[];
+extern const u8 BattleScript_DarkTypePreventsPrankster[];
+extern const u8 BattleScript_GulpMissileGorging[];
+extern const u8 BattleScript_GulpMissileGulping[];
+extern const u8 BattleScript_BattleBondActivatesOnMoveEndAttacker[];
+extern const u8 BattleScript_DesolateLandActivates[];
+extern const u8 BattleScript_DesolateLandEvaporatesWaterTypeMoves[];
+extern const u8 BattleScript_PrimordialSeaActivates[];
+extern const u8 BattleScript_PrimordialSeaFizzlesOutFireTypeMoves[];
+extern const u8 BattleScript_DeltaStreamActivates[];
+extern const u8 BattleScript_MysteriousAirCurrentBlowsOn[];
+extern const u8 BattleScript_AttackWeakenedByStrongWinds[];
+extern const u8 BattleScript_BlockedByPrimalWeatherEnd3[];
+extern const u8 BattleScript_BlockedByPrimalWeatherRet[];
+extern const u8 BattleScript_PrimalReversion[];
+extern const u8 BattleScript_HyperspaceFuryRemoveProtect[];
+extern const u8 BattleScript_SelectingNotAllowedMoveGorillaTactics[];
+extern const u8 BattleScript_WanderingSpiritActivates[];
+extern const u8 BattleScript_MirrorArmorReflect[];
+extern const u8 BattleScript_GooeyActivates[];
+extern const u8 BattleScript_PastelVeilActivates[];
+extern const u8 BattleScript_MimicryActivatesEnd3[];
+extern const u8 BattleScript_ApplyMimicry[];
+extern const u8 BattleScript_AttackerFormChangeEnd3NoPopup[];
+extern const u8 BattleScript_AttackerFormChangeMoveEffect[];
+extern const u8 BattleScript_BothCanNoLongerEscape[];
+extern const u8 BattleScript_OctolockEndTurn[];
+extern const u8 BattleScript_NeutralizingGasExits[];
+extern const u8 BattleScript_MagicianActivates[];
+extern const u8 BattleScript_BeakBlastSetUp[];
+extern const u8 BattleScript_BeakBlastBurn[];
+extern const u8 BattleScript_DefDownSpeedUp[];
+
+// zmoves
+extern const u8 BattleScript_ZMoveActivateDamaging[];
+extern const u8 BattleScript_ZMoveActivateStatus[];
+extern const u8 BattleScript_ZEffectPrintString[];
+extern const u8 BattleScript_RecoverHPZMove[];
+extern const u8 BattleScript_StatUpZMove[];
+extern const u8 BattleScript_HealReplacementZMove[];
+extern const u8 BattleScript_EffectExtremeEvoboost[];
#endif // GUARD_BATTLE_SCRIPTS_H
diff --git a/include/battle_setup.h b/include/battle_setup.h
index ee2837927b..e29b3155fe 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -19,15 +19,19 @@ extern u16 gTrainerBattleOpponent_B;
extern u16 gPartnerTrainerId;
void BattleSetup_StartWildBattle(void);
+void BattleSetup_StartDoubleWildBattle(void);
void BattleSetup_StartBattlePikeWildBattle(void);
void BattleSetup_StartRoamerBattle(void);
void StartWallyTutorialBattle(void);
void BattleSetup_StartScriptedWildBattle(void);
+void BattleSetup_StartScriptedDoubleWildBattle(void);
void BattleSetup_StartLatiBattle(void);
void BattleSetup_StartLegendaryBattle(void);
void StartGroudonKyogreBattle(void);
void StartRegiBattle(void);
u8 BattleSetup_GetTerrainId(void);
+u8 GetWildBattleTransition(void);
+u8 GetTrainerBattleTransition(void);
u8 GetSpecialBattleTransition(s32 id);
void ChooseStarter(void);
void ResetTrainerOpponentIds(void);
diff --git a/include/battle_util.h b/include/battle_util.h
index d15d4583ea..d0edbc9d1b 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -13,40 +13,52 @@
#define ABILITYEFFECT_ENDTURN 1
#define ABILITYEFFECT_MOVES_BLOCK 2
#define ABILITYEFFECT_ABSORBING 3
-#define ABILITYEFFECT_ON_DAMAGE 4
-#define ABILITYEFFECT_IMMUNITY 5
-#define ABILITYEFFECT_FORECAST 6
-#define ABILITYEFFECT_SYNCHRONIZE 7
-#define ABILITYEFFECT_ATK_SYNCHRONIZE 8
-#define ABILITYEFFECT_INTIMIDATE1 9
-#define ABILITYEFFECT_INTIMIDATE2 10
-#define ABILITYEFFECT_TRACE 11
-#define ABILITYEFFECT_CHECK_OTHER_SIDE 12
-#define ABILITYEFFECT_CHECK_BATTLER_SIDE 13
-#define ABILITYEFFECT_FIELD_SPORT 14
-#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER 15
-#define ABILITYEFFECT_COUNT_OTHER_SIDE 16
-#define ABILITYEFFECT_COUNT_BATTLER_SIDE 17
-#define ABILITYEFFECT_COUNT_ON_FIELD 18
-#define ABILITYEFFECT_CHECK_ON_FIELD 19
-#define ABILITYEFFECT_MUD_SPORT 253
-#define ABILITYEFFECT_WATER_SPORT 254
+#define ABILITYEFFECT_MOVE_END_ATTACKER 4
+#define ABILITYEFFECT_MOVE_END 5
+#define ABILITYEFFECT_IMMUNITY 6
+#define ABILITYEFFECT_FORECAST 7
+#define ABILITYEFFECT_SYNCHRONIZE 8
+#define ABILITYEFFECT_ATK_SYNCHRONIZE 9
+#define ABILITYEFFECT_INTIMIDATE1 10
+#define ABILITYEFFECT_INTIMIDATE2 11
+#define ABILITYEFFECT_TRACE1 12
+#define ABILITYEFFECT_TRACE2 13
+#define ABILITYEFFECT_MOVE_END_OTHER 14
+#define ABILITYEFFECT_NEUTRALIZINGGAS 15
+#define ABILITYEFFECT_FIELD_SPORT 16 // Only used if B_SPORT_TURNS < GEN_6
+// Special cases
+#define ABILITYEFFECT_MUD_SPORT 252 // Only used if B_SPORT_TURNS < GEN_6
+#define ABILITYEFFECT_WATER_SPORT 253 // Only used if B_SPORT_TURNS < GEN_6
+#define ABILITYEFFECT_SWITCH_IN_TERRAIN 254
#define ABILITYEFFECT_SWITCH_IN_WEATHER 255
-#define ABILITY_ON_OPPOSING_FIELD(battlerId, abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, battlerId, abilityId, 0, 0))
-#define ABILITY_ON_FIELD(abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0))
-#define ABILITY_ON_FIELD2(abilityId)(AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0))
-
// For the first argument of ItemBattleEffects, to deteremine which block of item effects to try
#define ITEMEFFECT_ON_SWITCH_IN 0
#define ITEMEFFECT_NORMAL 1
#define ITEMEFFECT_DUMMY 2 // Unused, empty
#define ITEMEFFECT_MOVE_END 3
-#define ITEMEFFECT_KINGSROCK_SHELLBELL 4
+#define ITEMEFFECT_KINGSROCK 4
+#define ITEMEFFECT_TARGET 5
+#define ITEMEFFECT_ORBS 6
+#define ITEMEFFECT_LIFEORB_SHELLBELL 7
+#define ITEMEFFECT_BATTLER_MOVE_END 8 // move end effects for just the battler, not whole field
-#define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK)))
-#define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK)))
+#define WEATHER_HAS_EFFECT ((!IsAbilityOnField(ABILITY_CLOUD_NINE) && !IsAbilityOnField(ABILITY_AIR_LOCK)))
+#define IS_WHOLE_SIDE_ALIVE(battler)((IsBattlerAlive(battler) && IsBattlerAlive(BATTLE_PARTNER(battler))))
+
+// for Natural Gift and Fling
+struct TypePower
+{
+ u8 type;
+ u8 power;
+ u16 effect;
+};
+
+extern const struct TypePower gNaturalGiftTable[];
+
+void HandleAction_ThrowBall(void);
+bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move);
void HandleAction_UseMove(void);
void HandleAction_Switch(void);
void HandleAction_UseItem(void);
@@ -64,7 +76,7 @@ u8 GetBattlerForBattleScript(u8 caseId);
void PressurePPLose(u8 target, u8 attacker, u16 move);
void PressurePPLoseOnUsingPerishSong(u8 attacker);
void PressurePPLoseOnUsingImprison(u8 attacker);
-void MarkAllBattlersForControllerExec(void); // unused
+bool32 IsBattlerMarkedForControllerExec(u8 battlerId);
void MarkBattlerForControllerExec(u8 battlerId);
void MarkBattlerReceivedLinkData(u8 battlerId);
void CancelMultiTurnMoves(u8 battlerId);
@@ -73,7 +85,7 @@ void PrepareStringBattle(u16 stringId, u8 battlerId);
void ResetSentPokesToOpponentValue(void);
void OpponentSwitchInResetSentPokesToOpponentValue(u8 battlerId);
void UpdateSentPokesToOpponentValue(u8 battlerId);
-void BattleScriptPush(const u8* bsPtr);
+void BattleScriptPush(const u8 *bsPtr);
void BattleScriptPushCursor(void);
void BattleScriptPop(void);
u8 TrySetCantSelectMoveBattleScript(void);
@@ -81,20 +93,103 @@ u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check);
bool8 AreAllMovesUnusable(void);
u8 GetImprisonedMovesCount(u8 battlerId, u16 move);
u8 DoFieldEndTurnEffects(void);
+s32 GetDrainedBigRootHp(u32 battler, s32 hp);
u8 DoBattlerEndTurnEffects(void);
bool8 HandleWishPerishSongOnTurnEnd(void);
bool8 HandleFaintedMonActions(void);
-void TryClearRageStatuses(void);
+void TryClearRageAndFuryCutter(void);
u8 AtkCanceller_UnableToUseMove(void);
+u8 AtkCanceller_UnableToUseMove2(void);
bool8 HasNoMonsToSwitch(u8 battlerId, u8 r1, u8 r2);
-u8 CastformDataTypeChange(u8 battlerId);
-u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg);
-void BattleScriptExecute(const u8* BS_ptr);
-void BattleScriptPushCursorAndCallback(const u8* BS_ptr);
+u8 TryWeatherFormChange(u8 battlerId);
+bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility);
+u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u16 ability, u8 special, u16 moveArg);
+u32 GetBattlerAbility(u8 battlerId);
+u32 IsAbilityOnSide(u32 battlerId, u32 ability);
+u32 IsAbilityOnOpposingSide(u32 battlerId, u32 ability);
+u32 IsAbilityOnField(u32 ability);
+u32 IsAbilityOnFieldExcept(u32 battlerId, u32 ability);
+u32 IsAbilityPreventingEscape(u32 battlerId);
+bool32 IsBattlerProtected(u8 battlerId, u16 move);
+bool32 CanBattlerEscape(u32 battlerId); // no ability check
+void BattleScriptExecute(const u8 *BS_ptr);
+void BattleScriptPushCursorAndCallback(const u8 *BS_ptr);
u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn);
void ClearFuryCutterDestinyBondGrudge(u8 battlerId);
void HandleAction_RunBattleScript(void);
-u8 GetMoveTarget(u16 move, u8 setTarget);
+u32 SetRandomTarget(u32 battlerId);
+u32 GetMoveTarget(u16 move, u8 setTarget);
u8 IsMonDisobedient(void);
+u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating);
+u32 GetBattlerHoldEffectParam(u8 battlerId);
+bool32 IsMoveMakingContact(u16 move, u8 battlerAtk);
+bool32 IsBattlerGrounded(u8 battlerId);
+bool32 IsBattlerAlive(u8 battlerId);
+u8 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u16 move);
+u32 GetBattlerWeight(u8 battlerId);
+s32 CalculateMoveDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags);
+s32 CalculateMoveDamageAndEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, u16 *typeEffectivenessModifier);
+u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities);
+u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef);
+u16 GetTypeModifier(u8 atkType, u8 defType);
+s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId);
+u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId);
+u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId);
+u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4);
+bool32 CanMegaEvolve(u8 battlerId);
+void UndoMegaEvolution(u32 monId);
+void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut);
+bool32 DoBattlersShareType(u32 battler1, u32 battler2);
+bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId);
+struct Pokemon *GetIllusionMonPtr(u32 battlerId);
+void ClearIllusionMon(u32 battlerId);
+bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId);
+bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
+u8 GetBattleMoveSplit(u32 moveId);
+bool32 TestMoveFlags(u16 move, u32 flag);
+struct Pokemon *GetBattlerPartyData(u8 battlerId);
+bool32 CanFling(u8 battlerId);
+bool32 IsTelekinesisBannedSpecies(u16 species);
+bool32 IsHealBlockPreventingMove(u32 battler, u32 move);
+bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId);
+bool32 IsPartnerMonFromSameTrainer(u8 battlerId);
+u8 GetSplitBasedOnStats(u8 battlerId);
+void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast);
+bool32 TestSheerForceFlag(u8 battler, u16 move);
+void TryRestoreStolenItems(void);
+bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item);
+void TrySaveExchangedItem(u8 battlerId, u16 stolenItem);
+bool32 IsPartnerMonFromSameTrainer(u8 battlerId);
+u8 TryHandleSeed(u8 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute);
+bool32 IsBattlerAffectedByHazards(u8 battlerId, bool32 toxicSpikes);
+void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast);
+bool32 CompareStat(u8 battlerId, u8 statId, u8 cmpTo, u8 cmpKind);
+bool32 TryRoomService(u8 battlerId);
+void BufferStatChange(u8 battlerId, u8 statId, u8 stringId);
+void DoBurmyFormChange(u32 monId);
+bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget);
+u16 GetUsedHeldItem(u8 battler);
+bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags);
+void TryToApplyMimicry(u8 battlerId, bool8 various);
+void TryToRevertMimicry(void);
+void RestoreBattlerOriginalTypes(u8 battlerId);
+u32 GetBattlerMoveTargetType(u8 battlerId, u16 move);
+bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move);
+// Ability checks
+bool32 IsRolePlayBannedAbilityAtk(u16 ability);
+bool32 IsRolePlayBannedAbility(u16 ability);
+bool32 IsSkillSwapBannedAbility(u16 ability);
+bool32 IsWorrySeedBannedAbility(u16 ability);
+bool32 IsGastroAcidBannedAbility(u16 ability);
+bool32 IsEntrainmentBannedAbilityAttacker(u16 ability);
+bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability);
+
+bool32 CanSleep(u8 battlerId);
+bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget);
+bool32 CanBeBurned(u8 battlerId);
+bool32 CanBeParalyzed(u8 battlerId);
+bool32 CanBeFrozen(u8 battlerId);
+bool32 CanBeConfused(u8 battlerId);
+bool32 IsBattlerTerrainAffected(u8 battlerId, u32 terrainFlag);
#endif // GUARD_BATTLE_UTIL_H
diff --git a/include/battle_z_move.h b/include/battle_z_move.h
new file mode 100644
index 0000000000..94a9c3568c
--- /dev/null
+++ b/include/battle_z_move.h
@@ -0,0 +1,30 @@
+#ifndef GUARD_BATTLE_Z_MOVE_H
+#define GUARD_BATTLE_Z_MOVE_H
+
+#include "constants/z_move_effects.h"
+
+#define MOVE_Z_STATUS 0xFFFF
+
+struct SignatureZMove
+{
+ u16 species;
+ u16 item;
+ u16 move;
+ u16 zmove;
+};
+
+bool8 IsZMove(u16 move);
+void QueueZMove(u8 battlerId, u16 baseMove);
+bool32 IsViableZMove(u8 battlerId, u16 move);
+bool32 TryChangeZIndicator(u8 battlerId, u8 moveIndex);
+void CreateZMoveTriggerSprite(u8, bool8);
+void HideZMoveTriggerSprite(void);
+bool32 IsZMoveTriggerSpriteActive(void);
+void DestroyZMoveTriggerSprite(void);
+bool32 MoveSelectionDisplayZMove(u16 zmove);
+const u8 *GetZMoveName(u16 move);
+void SetZEffect(void);
+bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex);
+void GetUsableZMoves(u8 battlerId, u16 *moves);
+
+#endif // GUARD_BATTLE_Z_MOVE_H
\ No newline at end of file
diff --git a/include/config.h b/include/config.h
index 4c231a84de..5f2fa4d2cc 100644
--- a/include/config.h
+++ b/include/config.h
@@ -19,8 +19,10 @@
#ifdef ENGLISH
#define UNITS_IMPERIAL
+#define CHAR_DEC_SEPARATOR CHAR_PERIOD // Period is used as a decimal separator only in the UK and the US.
#else
#define UNITS_METRIC
+#define CHAR_DEC_SEPARATOR CHAR_COMMA
#endif
// Uncomment to fix some identified minor bugs
diff --git a/include/constants/abilities.h b/include/constants/abilities.h
index 4ad54c86fa..23b9fe2b72 100644
--- a/include/constants/abilities.h
+++ b/include/constants/abilities.h
@@ -77,9 +77,221 @@
#define ABILITY_WHITE_SMOKE 73
#define ABILITY_PURE_POWER 74
#define ABILITY_SHELL_ARMOR 75
-#define ABILITY_CACOPHONY 76
-#define ABILITY_AIR_LOCK 77
+#define ABILITY_AIR_LOCK 76
-#define ABILITIES_COUNT 78
+#define ABILITIES_COUNT_GEN3 77
+
+// Gen 4
+#define ABILITY_TANGLED_FEET 77
+#define ABILITY_MOTOR_DRIVE 78
+#define ABILITY_RIVALRY 79
+#define ABILITY_STEADFAST 80
+#define ABILITY_SNOW_CLOAK 81
+#define ABILITY_GLUTTONY 82
+#define ABILITY_ANGER_POINT 83
+#define ABILITY_UNBURDEN 84
+#define ABILITY_HEATPROOF 85
+#define ABILITY_SIMPLE 86
+#define ABILITY_DRY_SKIN 87
+#define ABILITY_DOWNLOAD 88
+#define ABILITY_IRON_FIST 89
+#define ABILITY_POISON_HEAL 90
+#define ABILITY_ADAPTABILITY 91
+#define ABILITY_SKILL_LINK 92
+#define ABILITY_HYDRATION 93
+#define ABILITY_SOLAR_POWER 94
+#define ABILITY_QUICK_FEET 95
+#define ABILITY_NORMALIZE 96
+#define ABILITY_SNIPER 97
+#define ABILITY_MAGIC_GUARD 98
+#define ABILITY_NO_GUARD 99
+#define ABILITY_STALL 100
+#define ABILITY_TECHNICIAN 101
+#define ABILITY_LEAF_GUARD 102
+#define ABILITY_KLUTZ 103
+#define ABILITY_MOLD_BREAKER 104
+#define ABILITY_SUPER_LUCK 105
+#define ABILITY_AFTERMATH 106
+#define ABILITY_ANTICIPATION 107
+#define ABILITY_FOREWARN 108
+#define ABILITY_UNAWARE 109
+#define ABILITY_TINTED_LENS 110
+#define ABILITY_FILTER 111
+#define ABILITY_SLOW_START 112
+#define ABILITY_SCRAPPY 113
+#define ABILITY_STORM_DRAIN 114
+#define ABILITY_ICE_BODY 115
+#define ABILITY_SOLID_ROCK 116
+#define ABILITY_SNOW_WARNING 117
+#define ABILITY_HONEY_GATHER 118
+#define ABILITY_FRISK 119
+#define ABILITY_RECKLESS 120
+#define ABILITY_MULTITYPE 121
+#define ABILITY_FLOWER_GIFT 122
+#define ABILITY_BAD_DREAMS 123
+
+#define ABILITIES_COUNT_GEN4 124
+
+// Gen 5
+#define ABILITY_PICKPOCKET 124
+#define ABILITY_SHEER_FORCE 125
+#define ABILITY_CONTRARY 126
+#define ABILITY_UNNERVE 127
+#define ABILITY_DEFIANT 128
+#define ABILITY_DEFEATIST 129
+#define ABILITY_CURSED_BODY 130
+#define ABILITY_HEALER 131
+#define ABILITY_FRIEND_GUARD 132
+#define ABILITY_WEAK_ARMOR 133
+#define ABILITY_HEAVY_METAL 134
+#define ABILITY_LIGHT_METAL 135
+#define ABILITY_MULTISCALE 136
+#define ABILITY_TOXIC_BOOST 137
+#define ABILITY_FLARE_BOOST 138
+#define ABILITY_HARVEST 139
+#define ABILITY_TELEPATHY 140
+#define ABILITY_MOODY 141
+#define ABILITY_OVERCOAT 142
+#define ABILITY_POISON_TOUCH 143
+#define ABILITY_REGENERATOR 144
+#define ABILITY_BIG_PECKS 145
+#define ABILITY_SAND_RUSH 146
+#define ABILITY_WONDER_SKIN 147
+#define ABILITY_ANALYTIC 148
+#define ABILITY_ILLUSION 149
+#define ABILITY_IMPOSTER 150
+#define ABILITY_INFILTRATOR 151
+#define ABILITY_MUMMY 152
+#define ABILITY_MOXIE 153
+#define ABILITY_JUSTIFIED 154
+#define ABILITY_RATTLED 155
+#define ABILITY_MAGIC_BOUNCE 156
+#define ABILITY_SAP_SIPPER 157
+#define ABILITY_PRANKSTER 158
+#define ABILITY_SAND_FORCE 159
+#define ABILITY_IRON_BARBS 160
+#define ABILITY_ZEN_MODE 161
+#define ABILITY_VICTORY_STAR 162
+#define ABILITY_TURBOBLAZE 163
+#define ABILITY_TERAVOLT 164
+
+#define ABILITIES_COUNT_GEN5 165
+
+// Gen 6
+#define ABILITY_AROMA_VEIL 165
+#define ABILITY_FLOWER_VEIL 166
+#define ABILITY_CHEEK_POUCH 167
+#define ABILITY_PROTEAN 168
+#define ABILITY_FUR_COAT 169
+#define ABILITY_MAGICIAN 170
+#define ABILITY_BULLETPROOF 171
+#define ABILITY_COMPETITIVE 172
+#define ABILITY_STRONG_JAW 173
+#define ABILITY_REFRIGERATE 174
+#define ABILITY_SWEET_VEIL 175
+#define ABILITY_STANCE_CHANGE 176
+#define ABILITY_GALE_WINGS 177
+#define ABILITY_MEGA_LAUNCHER 178
+#define ABILITY_GRASS_PELT 179
+#define ABILITY_SYMBIOSIS 180
+#define ABILITY_TOUGH_CLAWS 181
+#define ABILITY_PIXILATE 182
+#define ABILITY_GOOEY 183
+#define ABILITY_AERILATE 184
+#define ABILITY_PARENTAL_BOND 185
+#define ABILITY_DARK_AURA 186
+#define ABILITY_FAIRY_AURA 187
+#define ABILITY_AURA_BREAK 188
+#define ABILITY_PRIMORDIAL_SEA 189
+#define ABILITY_DESOLATE_LAND 190
+#define ABILITY_DELTA_STREAM 191
+
+#define ABILITIES_COUNT_GEN6 192
+
+// Gen 7
+#define ABILITY_STAMINA 192
+#define ABILITY_WIMP_OUT 193
+#define ABILITY_EMERGENCY_EXIT 194
+#define ABILITY_WATER_COMPACTION 195
+#define ABILITY_MERCILESS 196
+#define ABILITY_SHIELDS_DOWN 197
+#define ABILITY_STAKEOUT 198
+#define ABILITY_WATER_BUBBLE 199
+#define ABILITY_STEELWORKER 200
+#define ABILITY_BERSERK 201
+#define ABILITY_SLUSH_RUSH 202
+#define ABILITY_LONG_REACH 203
+#define ABILITY_LIQUID_VOICE 204
+#define ABILITY_TRIAGE 205
+#define ABILITY_GALVANIZE 206
+#define ABILITY_SURGE_SURFER 207
+#define ABILITY_SCHOOLING 208
+#define ABILITY_DISGUISE 209
+#define ABILITY_BATTLE_BOND 210
+#define ABILITY_POWER_CONSTRUCT 211
+#define ABILITY_CORROSION 212
+#define ABILITY_COMATOSE 213
+#define ABILITY_QUEENLY_MAJESTY 214
+#define ABILITY_INNARDS_OUT 215
+#define ABILITY_DANCER 216
+#define ABILITY_BATTERY 217
+#define ABILITY_FLUFFY 218
+#define ABILITY_DAZZLING 219
+#define ABILITY_SOUL_HEART 220
+#define ABILITY_TANGLING_HAIR 221
+#define ABILITY_RECEIVER 222
+#define ABILITY_POWER_OF_ALCHEMY 223
+#define ABILITY_BEAST_BOOST 224
+#define ABILITY_RKS_SYSTEM 225
+#define ABILITY_ELECTRIC_SURGE 226
+#define ABILITY_PSYCHIC_SURGE 227
+#define ABILITY_MISTY_SURGE 228
+#define ABILITY_GRASSY_SURGE 229
+#define ABILITY_FULL_METAL_BODY 230
+#define ABILITY_SHADOW_SHIELD 231
+#define ABILITY_PRISM_ARMOR 232
+#define ABILITY_NEUROFORCE 233
+
+#define ABILITIES_COUNT_GEN7 234
+
+// Gen 8
+#define ABILITY_INTREPID_SWORD 234
+#define ABILITY_DAUNTLESS_SHIELD 235
+#define ABILITY_LIBERO 236
+#define ABILITY_BALL_FETCH 237
+#define ABILITY_COTTON_DOWN 238
+#define ABILITY_PROPELLER_TAIL 239
+#define ABILITY_MIRROR_ARMOR 240
+#define ABILITY_GULP_MISSILE 241
+#define ABILITY_STALWART 242
+#define ABILITY_STEAM_ENGINE 243
+#define ABILITY_PUNK_ROCK 244
+#define ABILITY_SAND_SPIT 245
+#define ABILITY_ICE_SCALES 246
+#define ABILITY_RIPEN 247
+#define ABILITY_ICE_FACE 248
+#define ABILITY_POWER_SPOT 249
+#define ABILITY_MIMICRY 250
+#define ABILITY_SCREEN_CLEANER 251
+#define ABILITY_STEELY_SPIRIT 252
+#define ABILITY_PERISH_BODY 253
+#define ABILITY_WANDERING_SPIRIT 254
+#define ABILITY_GORILLA_TACTICS 255
+#define ABILITY_NEUTRALIZING_GAS 256
+#define ABILITY_PASTEL_VEIL 257
+#define ABILITY_HUNGER_SWITCH 258
+#define ABILITY_QUICK_DRAW 259
+#define ABILITY_UNSEEN_FIST 260
+#define ABILITY_CURIOUS_MEDICINE 261
+#define ABILITY_TRANSISTOR 262
+#define ABILITY_DRAGONS_MAW 263
+#define ABILITY_CHILLING_NEIGH 264
+#define ABILITY_GRIM_NEIGH 265
+#define ABILITY_AS_ONE_ICE_RIDER 266
+#define ABILITY_AS_ONE_SHADOW_RIDER 267
+
+#define ABILITIES_COUNT_GEN8 268
+
+#define ABILITIES_COUNT ABILITIES_COUNT_GEN8
#endif // GUARD_CONSTANTS_ABILITIES_H
diff --git a/include/constants/battle.h b/include/constants/battle.h
index 31bc7fa3fb..37b9a637a3 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -53,17 +53,17 @@
#define BATTLE_TYPE_MULTI (1 << 6)
#define BATTLE_TYPE_SAFARI (1 << 7)
#define BATTLE_TYPE_BATTLE_TOWER (1 << 8)
-#define BATTLE_TYPE_WALLY_TUTORIAL (1 << 9)
+#define BATTLE_TYPE_WALLY_TUTORIAL (1 << 9) // Used in pokefirered as BATTLE_TYPE_OLD_MAN_TUTORIAL.
#define BATTLE_TYPE_ROAMER (1 << 10)
#define BATTLE_TYPE_EREADER_TRAINER (1 << 11)
#define BATTLE_TYPE_KYOGRE_GROUDON (1 << 12)
#define BATTLE_TYPE_LEGENDARY (1 << 13)
#define BATTLE_TYPE_REGI (1 << 14)
-#define BATTLE_TYPE_TWO_OPPONENTS (1 << 15)
-#define BATTLE_TYPE_DOME (1 << 16)
-#define BATTLE_TYPE_PALACE (1 << 17)
-#define BATTLE_TYPE_ARENA (1 << 18)
-#define BATTLE_TYPE_FACTORY (1 << 19)
+#define BATTLE_TYPE_TWO_OPPONENTS (1 << 15) // Used in pokefirered as BATTLE_TYPE_GHOST.
+#define BATTLE_TYPE_DOME (1 << 16) // Used in pokefirered as BATTLE_TYPE_POKEDUDE.
+#define BATTLE_TYPE_PALACE (1 << 17) // Used in pokefirered as BATTLE_TYPE_WILD_SCRIPTED.
+#define BATTLE_TYPE_ARENA (1 << 18) // Used in pokefirered as BATTLE_TYPE_LEGENDARY_FRLG.
+#define BATTLE_TYPE_FACTORY (1 << 19) // Used in pokefirered as BATTLE_TYPE_TRAINER_TOWER.
#define BATTLE_TYPE_PIKE (1 << 20)
#define BATTLE_TYPE_PYRAMID (1 << 21)
#define BATTLE_TYPE_INGAME_PARTNER (1 << 22)
@@ -79,6 +79,11 @@
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
+#define WILD_DOUBLE_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER))))
+#define BATTLE_TWO_VS_ONE_OPPONENT ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gTrainerBattleOpponent_B == 0xFFFF))
+#define BATTLE_TYPE_HAS_AI (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER)
+
+
// Battle Outcome defines
#define B_OUTCOME_WON 1
#define B_OUTCOME_LOST 2
@@ -120,8 +125,8 @@
#define STATUS2_LOCK_CONFUSE (1 << 10 | 1 << 11) // e.g. Thrash
#define STATUS2_LOCK_CONFUSE_TURN(num)((num) << 10)
#define STATUS2_MULTIPLETURNS (1 << 12)
-#define STATUS2_WRAPPED (1 << 13 | 1 << 14 | 1 << 15)
-#define STATUS2_WRAPPED_TURN(num) ((num) << 13)
+#define STATUS2_WRAPPED (1 << 13)
+#define STATUS2_POWDER (1 << 14)
#define STATUS2_INFATUATION (1 << 16 | 1 << 17 | 1 << 18 | 1 << 19) // 4 bits, one for every battler
#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
#define STATUS2_FOCUS_ENERGY (1 << 20)
@@ -137,7 +142,6 @@
#define STATUS2_DEFENSE_CURL (1 << 30)
#define STATUS2_TORMENT (1 << 31)
-// Seems like per-battler statuses. Not quite sure how to categorize these
#define STATUS3_LEECHSEED_BATTLER (1 << 0 | 1 << 1) // The battler to receive HP from Leech Seed
#define STATUS3_LEECHSEED (1 << 2)
#define STATUS3_ALWAYS_HITS (1 << 3 | 1 << 4)
@@ -153,14 +157,29 @@
#define STATUS3_IMPRISONED_OTHERS (1 << 13)
#define STATUS3_GRUDGE (1 << 14)
#define STATUS3_CANT_SCORE_A_CRIT (1 << 15)
-#define STATUS3_MUDSPORT (1 << 16)
-#define STATUS3_WATERSPORT (1 << 17)
+#define STATUS3_GASTRO_ACID (1 << 16)
+#define STATUS3_EMBARGO (1 << 17)
#define STATUS3_UNDERWATER (1 << 18)
#define STATUS3_INTIMIDATE_POKES (1 << 19)
#define STATUS3_TRACE (1 << 20)
-#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER)
+#define STATUS3_SMACKED_DOWN (1 << 21)
+#define STATUS3_ME_FIRST (1 << 22)
+#define STATUS3_TELEKINESIS (1 << 23)
+#define STATUS3_PHANTOM_FORCE (1 << 24)
+#define STATUS3_MIRACLE_EYED (1 << 25)
+#define STATUS3_MAGNET_RISE (1 << 26)
+#define STATUS3_HEAL_BLOCK (1 << 27)
+#define STATUS3_AQUA_RING (1 << 28)
+#define STATUS3_LASER_FOCUS (1 << 29)
+#define STATUS3_POWER_TRICK (1 << 30)
+#define STATUS3_SKY_DROPPED (1 << 31) // Target of Sky Drop
+#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER | STATUS3_PHANTOM_FORCE)
+
+#define STATUS4_ELECTRIFIED (1 << 0)
+#define STATUS4_PLASMA_FISTS (1 << 1)
+#define STATUS4_MUD_SPORT (1 << 2) // Only used if B_SPORT_TURNS < GEN_6
+#define STATUS4_WATER_SPORT (1 << 3) // Only used if B_SPORT_TURNS < GEN_6
-// Not really sure what a "hitmarker" is.
#define HITMARKER_WAKE_UP_CLEAR (1 << 4) // Cleared when waking up. Never set or checked.
#define HITMARKER_SKIP_DMG_TRACK (1 << 5)
#define HITMARKER_DESTINYBOND (1 << 6)
@@ -173,9 +192,8 @@
#define HITMARKER_IGNORE_SAFEGUARD (1 << 13)
#define HITMARKER_SYNCHRONISE_EFFECT (1 << 14)
#define HITMARKER_RUN (1 << 15)
-#define HITMARKER_IGNORE_ON_AIR (1 << 16)
-#define HITMARKER_IGNORE_UNDERGROUND (1 << 17)
-#define HITMARKER_IGNORE_UNDERWATER (1 << 18)
+#define HITMARKER_IGNORE_DISGUISE (1 << 16)
+// 3 free spots because of change in handling of UNDERGROUND/UNDERWATER/ON AIR
#define HITMARKER_UNABLE_TO_USE_MOVE (1 << 19)
#define HITMARKER_PASSIVE_DAMAGE (1 << 20)
#define HITMARKER_DISOBEDIENT_MOVE (1 << 21)
@@ -187,16 +205,49 @@
#define HITMARKER_CHARGING (1 << 27)
#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28)
#define HITMARKER_FAINTED2(battler) ((1 << 28) << battler)
+#define HITMARKER_STRING_PRINTED (1 << 29)
// Per-side statuses that affect an entire party
-#define SIDE_STATUS_REFLECT (1 << 0)
-#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
-#define SIDE_STATUS_X4 (1 << 2)
-#define SIDE_STATUS_SPIKES (1 << 4)
-#define SIDE_STATUS_SAFEGUARD (1 << 5)
-#define SIDE_STATUS_FUTUREATTACK (1 << 6)
-#define SIDE_STATUS_MIST (1 << 8)
-#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
+#define SIDE_STATUS_REFLECT (1 << 0)
+#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
+#define SIDE_STATUS_STICKY_WEB (1 << 2)
+#define SIDE_STATUS_SPIKES (1 << 4)
+#define SIDE_STATUS_SAFEGUARD (1 << 5)
+#define SIDE_STATUS_FUTUREATTACK (1 << 6)
+#define SIDE_STATUS_MIST (1 << 8)
+#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
+#define SIDE_STATUS_TAILWIND (1 << 10)
+#define SIDE_STATUS_AURORA_VEIL (1 << 11)
+#define SIDE_STATUS_LUCKY_CHANT (1 << 12)
+#define SIDE_STATUS_TOXIC_SPIKES (1 << 13)
+#define SIDE_STATUS_STEALTH_ROCK (1 << 14)
+#define SIDE_STATUS_STEALTH_ROCK_DAMAGED (1 << 15)
+#define SIDE_STATUS_TOXIC_SPIKES_DAMAGED (1 << 16)
+#define SIDE_STATUS_STICKY_WEB_DAMAGED (1 << 17)
+#define SIDE_STATUS_QUICK_GUARD (1 << 18)
+#define SIDE_STATUS_WIDE_GUARD (1 << 19)
+#define SIDE_STATUS_CRAFTY_SHIELD (1 << 20)
+#define SIDE_STATUS_MAT_BLOCK (1 << 21)
+
+#define SIDE_STATUS_HAZARDS_ANY (SIDE_STATUS_SPIKES | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_STEALTH_ROCK)
+#define SIDE_STATUS_SCREEN_ANY (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL)
+
+// Field affecting statuses.
+#define STATUS_FIELD_MAGIC_ROOM (1 << 0)
+#define STATUS_FIELD_TRICK_ROOM (1 << 1)
+#define STATUS_FIELD_WONDER_ROOM (1 << 2)
+#define STATUS_FIELD_MUDSPORT (1 << 3)
+#define STATUS_FIELD_WATERSPORT (1 << 4)
+#define STATUS_FIELD_GRAVITY (1 << 5)
+#define STATUS_FIELD_GRASSY_TERRAIN (1 << 6)
+#define STATUS_FIELD_MISTY_TERRAIN (1 << 7)
+#define STATUS_FIELD_ELECTRIC_TERRAIN (1 << 8)
+#define STATUS_FIELD_PSYCHIC_TERRAIN (1 << 9)
+#define STATUS_FIELD_ION_DELUGE (1 << 10)
+#define STATUS_FIELD_FAIRY_LOCK (1 << 11)
+#define STATUS_FIELD_TERRAIN_PERMANENT (1 << 12) // Overworld thunderstorm generates electric terrain
+
+#define STATUS_FIELD_TERRAIN_ANY (STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN)
// Flags describing move's result
#define MOVE_RESULT_MISSED (1 << 0)
@@ -207,104 +258,155 @@
#define MOVE_RESULT_FAILED (1 << 5)
#define MOVE_RESULT_FOE_ENDURED (1 << 6)
#define MOVE_RESULT_FOE_HUNG_ON (1 << 7)
+#define MOVE_RESULT_STURDIED (1 << 8)
#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
// Battle Weather flags
#define B_WEATHER_RAIN_TEMPORARY (1 << 0)
#define B_WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
#define B_WEATHER_RAIN_PERMANENT (1 << 2)
-#define B_WEATHER_RAIN (B_WEATHER_RAIN_TEMPORARY | B_WEATHER_RAIN_DOWNPOUR | B_WEATHER_RAIN_PERMANENT)
-#define B_WEATHER_SANDSTORM_TEMPORARY (1 << 3)
-#define B_WEATHER_SANDSTORM_PERMANENT (1 << 4)
+#define B_WEATHER_RAIN_PRIMAL (1 << 3)
+#define B_WEATHER_RAIN (B_WEATHER_RAIN_TEMPORARY | B_WEATHER_RAIN_DOWNPOUR | B_WEATHER_RAIN_PERMANENT | B_WEATHER_RAIN_PRIMAL)
+#define B_WEATHER_SANDSTORM_TEMPORARY (1 << 4)
+#define B_WEATHER_SANDSTORM_PERMANENT (1 << 5)
#define B_WEATHER_SANDSTORM (B_WEATHER_SANDSTORM_TEMPORARY | B_WEATHER_SANDSTORM_PERMANENT)
-#define B_WEATHER_SUN_TEMPORARY (1 << 5)
-#define B_WEATHER_SUN_PERMANENT (1 << 6)
-#define B_WEATHER_SUN (B_WEATHER_SUN_TEMPORARY | B_WEATHER_SUN_PERMANENT)
-#define B_WEATHER_HAIL_TEMPORARY (1 << 7)
-#define B_WEATHER_HAIL (B_WEATHER_HAIL_TEMPORARY)
-#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL)
+#define B_WEATHER_SUN_TEMPORARY (1 << 6)
+#define B_WEATHER_SUN_PERMANENT (1 << 7)
+#define B_WEATHER_SUN_PRIMAL (1 << 8)
+#define B_WEATHER_SUN (B_WEATHER_SUN_TEMPORARY | B_WEATHER_SUN_PERMANENT | B_WEATHER_SUN_PRIMAL)
+#define B_WEATHER_HAIL_TEMPORARY (1 << 9)
+#define B_WEATHER_HAIL_PERMANENT (1 << 10)
+#define B_WEATHER_HAIL (B_WEATHER_HAIL_TEMPORARY | B_WEATHER_HAIL_PERMANENT)
+#define B_WEATHER_STRONG_WINDS (1 << 11)
+#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS)
+#define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS)
+
+// Battle Weather as enum
+#define ENUM_WEATHER_NONE 0
+#define ENUM_WEATHER_RAIN 1
+#define ENUM_WEATHER_SUN 2
+#define ENUM_WEATHER_SANDSTORM 3
+#define ENUM_WEATHER_HAIL 4
+#define ENUM_WEATHER_SUN_PRIMAL 5
+#define ENUM_WEATHER_RAIN_PRIMAL 6
+#define ENUM_WEATHER_STRONG_WINDS 7
// Move Effects
-#define MOVE_EFFECT_SLEEP 1
-#define MOVE_EFFECT_POISON 2
-#define MOVE_EFFECT_BURN 3
-#define MOVE_EFFECT_FREEZE 4
-#define MOVE_EFFECT_PARALYSIS 5
-#define MOVE_EFFECT_TOXIC 6
+#define MOVE_EFFECT_SLEEP 0x1
+#define MOVE_EFFECT_POISON 0x2
+#define MOVE_EFFECT_BURN 0x3
+#define MOVE_EFFECT_FREEZE 0x4
+#define MOVE_EFFECT_PARALYSIS 0x5
+#define MOVE_EFFECT_TOXIC 0x6
#define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_TOXIC // All above move effects apply primary status
-#define MOVE_EFFECT_CONFUSION 7
-#define MOVE_EFFECT_FLINCH 8
-#define MOVE_EFFECT_TRI_ATTACK 9
-#define MOVE_EFFECT_UPROAR 10
-#define MOVE_EFFECT_PAYDAY 11
-#define MOVE_EFFECT_CHARGING 12
-#define MOVE_EFFECT_WRAP 13
-#define MOVE_EFFECT_RECOIL_25 14
-#define MOVE_EFFECT_ATK_PLUS_1 15
-#define MOVE_EFFECT_DEF_PLUS_1 16
-#define MOVE_EFFECT_SPD_PLUS_1 17
-#define MOVE_EFFECT_SP_ATK_PLUS_1 18
-#define MOVE_EFFECT_SP_DEF_PLUS_1 19
-#define MOVE_EFFECT_ACC_PLUS_1 20
-#define MOVE_EFFECT_EVS_PLUS_1 21
-#define MOVE_EFFECT_ATK_MINUS_1 22
-#define MOVE_EFFECT_DEF_MINUS_1 23
-#define MOVE_EFFECT_SPD_MINUS_1 24
-#define MOVE_EFFECT_SP_ATK_MINUS_1 25
-#define MOVE_EFFECT_SP_DEF_MINUS_1 26
-#define MOVE_EFFECT_ACC_MINUS_1 27
-#define MOVE_EFFECT_EVS_MINUS_1 28
-#define MOVE_EFFECT_RECHARGE 29
-#define MOVE_EFFECT_RAGE 30
-#define MOVE_EFFECT_STEAL_ITEM 31
-#define MOVE_EFFECT_PREVENT_ESCAPE 32
-#define MOVE_EFFECT_NIGHTMARE 33
-#define MOVE_EFFECT_ALL_STATS_UP 34
-#define MOVE_EFFECT_RAPIDSPIN 35
-#define MOVE_EFFECT_REMOVE_PARALYSIS 36
-#define MOVE_EFFECT_ATK_DEF_DOWN 37
-#define MOVE_EFFECT_RECOIL_33 38
-#define MOVE_EFFECT_ATK_PLUS_2 39
-#define MOVE_EFFECT_DEF_PLUS_2 40
-#define MOVE_EFFECT_SPD_PLUS_2 41
-#define MOVE_EFFECT_SP_ATK_PLUS_2 42
-#define MOVE_EFFECT_SP_DEF_PLUS_2 43
-#define MOVE_EFFECT_ACC_PLUS_2 44
-#define MOVE_EFFECT_EVS_PLUS_2 45
-#define MOVE_EFFECT_ATK_MINUS_2 46
-#define MOVE_EFFECT_DEF_MINUS_2 47
-#define MOVE_EFFECT_SPD_MINUS_2 48
-#define MOVE_EFFECT_SP_ATK_MINUS_2 49
-#define MOVE_EFFECT_SP_DEF_MINUS_2 50
-#define MOVE_EFFECT_ACC_MINUS_2 51
-#define MOVE_EFFECT_EVS_MINUS_2 52
-#define MOVE_EFFECT_THRASH 53
-#define MOVE_EFFECT_KNOCK_OFF 54
-#define MOVE_EFFECT_NOTHING_37 55
-#define MOVE_EFFECT_NOTHING_38 56
-#define MOVE_EFFECT_NOTHING_39 57
-#define MOVE_EFFECT_NOTHING_3A 58
-#define MOVE_EFFECT_SP_ATK_TWO_DOWN 59
-#define NUM_MOVE_EFFECTS 60
+#define MOVE_EFFECT_CONFUSION 0x7
+#define MOVE_EFFECT_FLINCH 0x8
+#define MOVE_EFFECT_TRI_ATTACK 0x9
+#define MOVE_EFFECT_UPROAR 0xA
+#define MOVE_EFFECT_PAYDAY 0xB
+#define MOVE_EFFECT_CHARGING 0xC
+#define MOVE_EFFECT_WRAP 0xD
+#define MOVE_EFFECT_RECOIL_25 0xE
+#define MOVE_EFFECT_ATK_PLUS_1 0xF
+#define MOVE_EFFECT_DEF_PLUS_1 0x10
+#define MOVE_EFFECT_SPD_PLUS_1 0x11
+#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
+#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
+#define MOVE_EFFECT_ACC_PLUS_1 0x14
+#define MOVE_EFFECT_EVS_PLUS_1 0x15
+#define MOVE_EFFECT_ATK_MINUS_1 0x16
+#define MOVE_EFFECT_DEF_MINUS_1 0x17
+#define MOVE_EFFECT_SPD_MINUS_1 0x18
+#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
+#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
+#define MOVE_EFFECT_ACC_MINUS_1 0x1B
+#define MOVE_EFFECT_EVS_MINUS_1 0x1C
+#define MOVE_EFFECT_RECHARGE 0x1D
+#define MOVE_EFFECT_RAGE 0x1E
+#define MOVE_EFFECT_STEAL_ITEM 0x1F
+#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
+#define MOVE_EFFECT_NIGHTMARE 0x21
+#define MOVE_EFFECT_ALL_STATS_UP 0x22
+#define MOVE_EFFECT_RAPIDSPIN 0x23
+#define MOVE_EFFECT_REMOVE_STATUS 0x24
+#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
+#define MOVE_EFFECT_RECOIL_33 0x26
+#define MOVE_EFFECT_ATK_PLUS_2 0x27
+#define MOVE_EFFECT_DEF_PLUS_2 0x28
+#define MOVE_EFFECT_SPD_PLUS_2 0x29
+#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
+#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
+#define MOVE_EFFECT_ACC_PLUS_2 0x2C
+#define MOVE_EFFECT_EVS_PLUS_2 0x2D
+#define MOVE_EFFECT_ATK_MINUS_2 0x2E
+#define MOVE_EFFECT_DEF_MINUS_2 0x2F
+#define MOVE_EFFECT_SPD_MINUS_2 0x30
+#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
+#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
+#define MOVE_EFFECT_ACC_MINUS_2 0x33
+#define MOVE_EFFECT_EVS_MINUS_2 0x34
+#define MOVE_EFFECT_THRASH 0x35
+#define MOVE_EFFECT_KNOCK_OFF 0x36
+#define MOVE_EFFECT_DEF_SPDEF_DOWN 0x37
+#define MOVE_EFFECT_RECOIL_33_STATUS 0x38
+#define MOVE_EFFECT_RECOIL_50 0x39
+#define MOVE_EFFECT_CLEAR_SMOG 0x3A
+#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
+#define MOVE_EFFECT_SMACK_DOWN 0x3C
+#define MOVE_EFFECT_FLAME_BURST 0x3D
+#define MOVE_EFFECT_FEINT 0x3E
+#define MOVE_EFFECT_SPECTRAL_THIEF 0x3F
+#define MOVE_EFFECT_V_CREATE 0x40
+#define MOVE_EFFECT_HAPPY_HOUR 0x41
+#define MOVE_EFFECT_CORE_ENFORCER 0x42
+#define MOVE_EFFECT_THROAT_CHOP 0x43
+#define MOVE_EFFECT_INCINERATE 0x44
+#define MOVE_EFFECT_BUG_BITE 0x45
+#define MOVE_EFFECT_RECOIL_HP_25 0x46
+#define MOVE_EFFECT_RELIC_SONG 0x47
+#define MOVE_EFFECT_TRAP_BOTH 0x48
+#define MOVE_EFFECT_SKY_DROP 0x49
+#define MOVE_EFFECT_SCALE_SHOT 0x4A
-#define MOVE_EFFECT_AFFECTS_USER (1 << 6) // 64
-#define MOVE_EFFECT_CERTAIN (1 << 7) // 128
+#define NUM_MOVE_EFFECTS 0x4B
+
+#define MOVE_EFFECT_AFFECTS_USER 0x4000
+#define MOVE_EFFECT_CERTAIN 0x8000
// Battle terrain defines for gBattleTerrain.
-#define BATTLE_TERRAIN_GRASS 0
-#define BATTLE_TERRAIN_LONG_GRASS 1
-#define BATTLE_TERRAIN_SAND 2
-#define BATTLE_TERRAIN_UNDERWATER 3
-#define BATTLE_TERRAIN_WATER 4
-#define BATTLE_TERRAIN_POND 5
-#define BATTLE_TERRAIN_MOUNTAIN 6
-#define BATTLE_TERRAIN_CAVE 7
-#define BATTLE_TERRAIN_BUILDING 8
-#define BATTLE_TERRAIN_PLAIN 9
+#define BATTLE_TERRAIN_GRASS 0
+#define BATTLE_TERRAIN_LONG_GRASS 1
+#define BATTLE_TERRAIN_SAND 2
+#define BATTLE_TERRAIN_UNDERWATER 3
+#define BATTLE_TERRAIN_WATER 4
+#define BATTLE_TERRAIN_POND 5
+#define BATTLE_TERRAIN_MOUNTAIN 6
+#define BATTLE_TERRAIN_CAVE 7
+#define BATTLE_TERRAIN_BUILDING 8
+#define BATTLE_TERRAIN_PLAIN 9
+// New battle terrains are used for Secret Power but not fully implemented.
+#define BATTLE_TERRAIN_SOARING 10
+#define BATTLE_TERRAIN_SKY_PILLAR 11
+#define BATTLE_TERRAIN_BURIAL_GROUND 12
+#define BATTLE_TERRAIN_PUDDLE 13
+#define BATTLE_TERRAIN_MARSH 14
+#define BATTLE_TERRAIN_SWAMP 15
+#define BATTLE_TERRAIN_SNOW 16
+#define BATTLE_TERRAIN_ICE 17
+#define BATTLE_TERRAIN_VOLCANO 18
+#define BATTLE_TERRAIN_DISTORTION_WORLD 19
+#define BATTLE_TERRAIN_SPACE 20
+#define BATTLE_TERRAIN_ULTRA_SPACE 21
-#define B_WAIT_TIME_LONG 64
-#define B_WAIT_TIME_MED 48
-#define B_WAIT_TIME_SHORT 32
+#define BATTLE_TERRAIN_COUNT 22
+
+#define B_WAIT_TIME_LONG 64
+#define B_WAIT_TIME_MED 48
+#define B_WAIT_TIME_SHORT 32
+#define B_WAIT_TIME_SHORTEST 16
+
+#define CHERRIM_OVERCAST 0
+#define CHERRIM_SUNSHINE 1
#define CASTFORM_NORMAL 0
#define CASTFORM_FIRE 1
@@ -316,6 +418,11 @@
#define FLEE_ITEM 1
#define FLEE_ABILITY 2
+// Return value for IsRunningFromBattleImpossible.
+#define BATTLE_RUN_SUCCESS 0
+#define BATTLE_RUN_FORBIDDEN 1
+#define BATTLE_RUN_FAILURE 2
+
#define B_WIN_TYPE_NORMAL 0
#define B_WIN_TYPE_ARENA 1
@@ -361,4 +468,18 @@
// Indicator for the party summary bar to display an empty slot.
#define HP_EMPTY_SLOT 0xFFFF
+#define MOVE_TARGET_SELECTED 0
+#define MOVE_TARGET_DEPENDS (1 << 0)
+#define MOVE_TARGET_USER_OR_SELECTED (1 << 1)
+#define MOVE_TARGET_RANDOM (1 << 2)
+#define MOVE_TARGET_BOTH (1 << 3)
+#define MOVE_TARGET_USER (1 << 4)
+#define MOVE_TARGET_FOES_AND_ALLY (1 << 5)
+#define MOVE_TARGET_OPPONENTS_FIELD (1 << 6)
+#define MOVE_TARGET_ALLY (1 << 7)
+#define MOVE_TARGET_ALL_BATTLERS ((1 << 8) | MOVE_TARGET_USER)
+
+// For the second argument of GetMoveTarget, when no target override is needed
+#define NO_TARGET_OVERRIDE 0
+
#endif // GUARD_CONSTANTS_BATTLE_H
diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h
index 5ade58d509..d48827683a 100644
--- a/include/constants/battle_ai.h
+++ b/include/constants/battle_ai.h
@@ -15,38 +15,51 @@
#define AI_TYPE_MOVE 4
// type effectiveness
-#define AI_EFFECTIVENESS_x4 160
-#define AI_EFFECTIVENESS_x2 80
-#define AI_EFFECTIVENESS_x1 40
-#define AI_EFFECTIVENESS_x0_5 20
-#define AI_EFFECTIVENESS_x0_25 10
+#define AI_EFFECTIVENESS_x8 7
+#define AI_EFFECTIVENESS_x4 6
+#define AI_EFFECTIVENESS_x2 5
+#define AI_EFFECTIVENESS_x1 4
+#define AI_EFFECTIVENESS_x0_5 3
+#define AI_EFFECTIVENESS_x0_25 2
+#define AI_EFFECTIVENESS_x0_125 1
#define AI_EFFECTIVENESS_x0 0
// ai weather
-#define AI_WEATHER_SUN 0
-#define AI_WEATHER_RAIN 1
-#define AI_WEATHER_SANDSTORM 2
-#define AI_WEATHER_HAIL 3
+#define AI_WEATHER_NONE 0
+#define AI_WEATHER_SUN 1
+#define AI_WEATHER_RAIN 2
+#define AI_WEATHER_SANDSTORM 3
+#define AI_WEATHER_HAIL 4
// get_how_powerful_move_is
-#define MOVE_POWER_OTHER 0
-#define MOVE_NOT_MOST_POWERFUL 1
-#define MOVE_MOST_POWERFUL 2
+#define MOVE_POWER_OTHER 0
+#define MOVE_POWER_BEST 1
+#define MOVE_POWER_GOOD 2 // Similar dmg range with best.
+#define MOVE_POWER_WEAK 3 // Significantly lower than best and good.
-// script's table id to bit
-#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
-#define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
-#define AI_SCRIPT_CHECK_VIABILITY (1 << 2)
-#define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3)
-#define AI_SCRIPT_RISKY (1 << 4)
-#define AI_SCRIPT_PREFER_POWER_EXTREMES (1 << 5)
-#define AI_SCRIPT_PREFER_BATON_PASS (1 << 6)
-#define AI_SCRIPT_DOUBLE_BATTLE (1 << 7)
-#define AI_SCRIPT_HP_AWARE (1 << 8)
-#define AI_SCRIPT_TRY_SUNNY_DAY_START (1 << 9)
-// 10 - 28 are not used
-#define AI_SCRIPT_ROAMING (1 << 29)
-#define AI_SCRIPT_SAFARI (1 << 30)
-#define AI_SCRIPT_FIRST_BATTLE (1 << 31)
+// AI Flags. Most run specific functions to update score, new flags are used for internal logic in other scripts
+#define AI_FLAG_CHECK_BAD_MOVE (1 << 0)
+#define AI_FLAG_TRY_TO_FAINT (1 << 1)
+#define AI_FLAG_CHECK_VIABILITY (1 << 2)
+#define AI_FLAG_SETUP_FIRST_TURN (1 << 3)
+#define AI_FLAG_RISKY (1 << 4)
+#define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5)
+#define AI_FLAG_PREFER_BATON_PASS (1 << 6)
+#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // removed, split between AI_FLAG_CHECK_BAD_MOVE & AI_FLAG_CHECK_GOOD_MOVE
+#define AI_FLAG_HP_AWARE (1 << 8)
+// New, Trainer Handicap Flags
+#define AI_FLAG_NEGATE_UNAWARE (1 << 9) // AI is NOT aware of negating effects like wonder room, mold breaker, etc
+#define AI_FLAG_WILL_SUICIDE (1 << 10) // AI will use explosion / self destruct / final gambit / etc
+// New, Trainer Strategy Flags
+#define AI_FLAG_HELP_PARTNER (1 << 11) // AI can try to help partner. If not set, will tend not to target partner
+#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves
+#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished
+#define AI_FLAG_SCREENER (1 << 14) // AI prefers screening effects like reflect, mist, etc. TODO unfinished
+#define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks
+
+// 'other' ai logic flags
+#define AI_FLAG_ROAMING (1 << 29)
+#define AI_FLAG_SAFARI (1 << 30)
+#define AI_FLAG_FIRST_BATTLE (1 << 31)
#endif // GUARD_CONSTANTS_BATTLE_AI_H
diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h
index 00ad083eb5..d15b6876e3 100644
--- a/include/constants/battle_anim.h
+++ b/include/constants/battle_anim.h
@@ -296,6 +296,106 @@
#define ANIM_TAG_SLASH_2 (ANIM_SPRITES_START + 286)
#define ANIM_TAG_WHIP_HIT (ANIM_SPRITES_START + 287)
#define ANIM_TAG_BLUE_RING_2 (ANIM_SPRITES_START + 288)
+//new particles
+#define ANIM_TAG_WHITE_STREAK (ANIM_SPRITES_START + 289)
+#define ANIM_TAG_PURPLE_JAB (ANIM_SPRITES_START + 290)
+#define ANIM_TAG_TOXIC_SPIKES (ANIM_SPRITES_START + 291)
+#define ANIM_TAG_ENERGY_BALL (ANIM_SPRITES_START + 292)
+#define ANIM_TAG_SEED_BROWN (ANIM_SPRITES_START + 293)
+#define ANIM_TAG_FEINT (ANIM_SPRITES_START + 294)
+#define ANIM_TAG_MEGA_STONE (ANIM_SPRITES_START + 295)
+#define ANIM_TAG_MEGA_SYMBOL (ANIM_SPRITES_START + 296)
+#define ANIM_TAG_MEGA_PARTICLES (ANIM_SPRITES_START + 297)
+#define ANIM_TAG_TRUMP_CARD (ANIM_SPRITES_START + 298)
+#define ANIM_TAG_TRUMP_CARD_PARTICLES (ANIM_SPRITES_START + 299)
+#define ANIM_TAG_ACCUPRESSURE (ANIM_SPRITES_START + 300)
+#define ANIM_TAG_WRING_OUT (ANIM_SPRITES_START + 301)
+#define ANIM_TAG_COLORED_ORBS (ANIM_SPRITES_START + 302)
+#define ANIM_TAG_WORRY_SEED (ANIM_SPRITES_START + 303)
+#define ANIM_TAG_SMALL_CLOUD (ANIM_SPRITES_START + 304)
+#define ANIM_TAG_ATTACK_ORDER (ANIM_SPRITES_START + 305)
+#define ANIM_TAG_DRAGON_PULSE (ANIM_SPRITES_START + 306)
+#define ANIM_TAG_WOOD_HAMMER (ANIM_SPRITES_START + 307)
+#define ANIM_TAG_PSYCHO_CUT (ANIM_SPRITES_START + 308)
+#define ANIM_TAG_POWER_GEM (ANIM_SPRITES_START + 309)
+#define ANIM_TAG_STONE_EDGE (ANIM_SPRITES_START + 310)
+#define ANIM_TAG_STEALTH_ROCK (ANIM_SPRITES_START + 311)
+#define ANIM_TAG_POISON_JAB (ANIM_SPRITES_START + 312)
+#define ANIM_TAG_GREEN_POISON_BUBBLE (ANIM_SPRITES_START + 313)
+#define ANIM_TAG_FLASH_CANNON_BALL (ANIM_SPRITES_START + 314)
+#define ANIM_TAG_WATER_GUN (ANIM_SPRITES_START + 315)
+#define ANIM_TAG_PUNISHMENT_BLADES (ANIM_SPRITES_START + 316)
+#define ANIM_TAG_QUICK_GUARD_HAND (ANIM_SPRITES_START + 317)
+
+#define ANIM_TAG_SHELL_RIGHT (ANIM_SPRITES_START + 318)
+#define ANIM_TAG_SHELL_LEFT (ANIM_SPRITES_START + 319)
+#define ANIM_TAG_RAZOR_SHELL (ANIM_SPRITES_START + 320)
+#define ANIM_TAG_HYDRO_PUMP (ANIM_SPRITES_START + 321)
+#define ANIM_TAG_BRINE (ANIM_SPRITES_START + 322)
+#define ANIM_TAG_GEAR (ANIM_SPRITES_START + 323)
+#define ANIM_TAG_ASSURANCE_HAND (ANIM_SPRITES_START + 324)
+#define ANIM_TAG_ACUPRESSURE_FINGER (ANIM_SPRITES_START + 325)
+#define ANIM_TAG_WISHIWASHI_FISH (ANIM_SPRITES_START + 326)
+#define ANIM_TAG_ZYGARDE_HEXES (ANIM_SPRITES_START + 327)
+#define ANIM_TAG_AURA_SPHERE (ANIM_SPRITES_START + 328)
+#define ANIM_TAG_OMEGA_STONE (ANIM_SPRITES_START + 329)
+#define ANIM_TAG_ALPHA_STONE (ANIM_SPRITES_START + 330)
+#define ANIM_TAG_BERRY_NORMAL (ANIM_SPRITES_START + 331)
+#define ANIM_TAG_BERRY_EATEN (ANIM_SPRITES_START + 332)
+#define ANIM_TAG_DRAGON_ASCENT (ANIM_SPRITES_START + 333)
+#define ANIM_TAG_PINK_DIAMOND (ANIM_SPRITES_START + 334)
+#define ANIM_TAG_STEAM_ERUPTION (ANIM_SPRITES_START + 335)
+#define ANIM_TAG_CONFIDE (ANIM_SPRITES_START + 336)
+#define ANIM_TAG_VERTICAL_HEX (ANIM_SPRITES_START + 337)
+#define ANIM_TAG_UNAVAILABLE_1 (ANIM_SPRITES_START + 338) //0x2862.. supposedly used elsewhere?
+#define ANIM_TAG_UNAVAILABLE_2 (ANIM_SPRITES_START + 339)
+#define ANIM_TAG_POWER_TRICK (ANIM_SPRITES_START + 340)
+#define ANIM_TAG_CHAIN_LINK (ANIM_SPRITES_START + 341)
+#define ANIM_TAG_ANCHOR (ANIM_SPRITES_START + 342)
+#define ANIM_TAG_HORSESHOE_SIDE_FIST (ANIM_SPRITES_START + 343)
+#define ANIM_TAG_DRAGON_ASCENT_FOE (ANIM_SPRITES_START + 344)
+#define ANIM_TAG_CRAFTY_SHIELD (ANIM_SPRITES_START + 345)
+#define ANIM_TAG_BLACEPHALON_HEAD (ANIM_SPRITES_START + 346)
+#define ANIM_TAG_FAIRY_LOCK_CHAINS (ANIM_SPRITES_START + 347)
+#define ANIM_TAG_IONS (ANIM_SPRITES_START + 348)
+#define ANIM_TAG_CHOP (ANIM_SPRITES_START + 349)
+#define ANIM_TAG_HEART_STAMP (ANIM_SPRITES_START + 350)
+#define ANIM_TAG_HORN_LEECH (ANIM_SPRITES_START + 351)
+#define ANIM_TAG_STEAMROLLER (ANIM_SPRITES_START + 352)
+#define ANIM_TAG_HOOPA_HAND (ANIM_SPRITES_START + 353)
+#define ANIM_TAG_HOOPA_RING (ANIM_SPRITES_START + 354)
+#define ANIM_TAG_METAL_BITS (ANIM_SPRITES_START + 355)
+#define ANIM_TAG_SMALL_ROCK (ANIM_SPRITES_START + 356)
+#define ANIM_TAG_SPIRIT_ARROW (ANIM_SPRITES_START + 357)
+#define ANIM_TAG_ULTRA_BURST_SYMBOL (ANIM_SPRITES_START + 358)
+#define ANIM_TAG_Z_MOVE_SYMBOL (ANIM_SPRITES_START + 359)
+#define ANIM_TAG_REALLY_BIG_ROCK (ANIM_SPRITES_START + 360)
+#define ANIM_TAG_COCOON (ANIM_SPRITES_START + 361)
+#define ANIM_TAG_CORKSCREW (ANIM_SPRITES_START + 362)
+#define ANIM_TAG_HAVOC_SPEAR (ANIM_SPRITES_START + 363)
+#define ANIM_TAG_PURPLE_DRAKE (ANIM_SPRITES_START + 364)
+#define ANIM_TAG_MUD_BOMB (ANIM_SPRITES_START + 365)
+#define ANIM_TAG_BRANCH (ANIM_SPRITES_START + 366)
+#define ANIM_TAG_APPLE (ANIM_SPRITES_START + 367)
+#define ANIM_TAG_OBSTRUCT_CROSS (ANIM_SPRITES_START + 368)
+#define ANIM_TAG_POISON_COLUMN (ANIM_SPRITES_START + 369)
+#define ANIM_TAG_GARBAGE_COLUMN (ANIM_SPRITES_START + 370)
+#define ANIM_TAG_LARGE_SPIKE (ANIM_SPRITES_START + 371)
+#define ANIM_TAG_DRAGON_PULSE_RING (ANIM_SPRITES_START + 372)
+#define ANIM_TAG_STONE_PILLAR (ANIM_SPRITES_START + 373)
+#define ANIM_TAG_MUSHROOM (ANIM_SPRITES_START + 374)
+#define ANIM_TAG_GOLDEN_APPLE (ANIM_SPRITES_START + 375)
+#define ANIM_TAG_ICE_ROCK (ANIM_SPRITES_START + 376)
+#define ANIM_TAG_TORNADO (ANIM_SPRITES_START + 377)
+#define ANIM_TAG_STRAIGHT_BEAM (ANIM_SPRITES_START + 378)
+#define ANIM_TAG_DREEPY (ANIM_SPRITES_START + 379)
+#define ANIM_TAG_ICE_ROCK_SINGLE (ANIM_SPRITES_START + 380)
+#define ANIM_TAG_STONE_PILLAR_MULTI (ANIM_SPRITES_START + 381)
+#define ANIM_TAG_ALPHA_SYMBOL (ANIM_SPRITES_START + 382)
+#define ANIM_TAG_OMEGA_SYMBOL (ANIM_SPRITES_START + 383)
+#define ANIM_TAG_PRIMAL_PARTICLES (ANIM_SPRITES_START + 384)
+#define ANIM_TAG_STEEL_BEAM (ANIM_SPRITES_START + 385)
+#define ANIM_TAG_POLTERGEIST (ANIM_SPRITES_START + 386)
// battlers
#define ANIM_ATTACKER 0
@@ -345,6 +445,59 @@
#define BG_SOLAR_BEAM_OPPONENT 24
#define BG_SOLAR_BEAM_PLAYER 25
#define BG_SOLAR_BEAM_CONTESTS 26
+#define BG_MAGMA_STORM 27
+#define BG_GIGA_IMPACT_OPPONENT 28
+#define BG_GIGA_IMPACT_PLAYER 29
+#define BG_GIGA_IMPACT_CONTEST 30
+#define BG_TRICK_ROOM 31
+#define BG_ROCK_WRECKER 32
+#define BG_SPACIAL_REND_ON_OPPONENT 33
+#define BG_SPACIAL_REND_ON_PLAYER 34
+#define BG_DARK_VOID 35
+#define BG_WATER 36
+#define BG_NIGHTMARE 37
+#define BG_LEAF_STORM 38
+#define BG_FIRE 39
+#define BG_FIRE_2 40
+#define BG_WATER_2 41
+#define BG_POISON 42
+#define BG_AEROBLAST 43
+#define BG_HURRICANE 44
+#define BG_ELECTRIC_TERRAIN 45
+#define BG_GRASSY_TERRAIN 46
+#define BG_MISTY_TERRAIN 47
+#define BG_PSYCHIC_TERRAIN 48
+#define BG_FOCUS_BLAST 49
+#define BG_GUNK_SHOT 50
+#define BG_HYDRO_CANNON 51
+#define BG_WONDER_ROOM 52
+#define BG_MAGIC_ROOM 53
+#define BG_HYPERSPACE_FURY 54
+#define BG_BOLT_STRIKE 55
+#define BG_ZMOVE_ACTIVATE 56
+#define BG_TECTONIC_RAGE 57
+#define BG_BLUE_SKY_DAY 58
+#define BG_BLUE_SKY_AFTERNOON 59
+#define BG_BLUE_SKY_NIGHT 60
+#define BG_ZMOVE_MOUNTAIN 61
+#define BG_NEVERENDING_NIGHTMARE 62
+#define BG_WATER_PULSE 63
+#define BG_INFERNO_OVERDRIVE 64
+#define BG_BLOOM_DOOM 65
+#define BG_SHATTERED_PSYCHE 66
+#define BG_TWINKLE_TACKLE 67
+#define BG_BLACKHOLE_ECLIPSE 68
+#define BG_SOULSTEALING_7STAR_STRIKE 69
+#define BG_MALICIOUS_MOONSAULT 70
+#define BG_CLANGOROUS_SOULBLAZE 71
+#define BG_SNUGGLE_FOREVER 72
+#define BG_MAX_LIGHTNING 73
+#define BG_GARBAGE_FALLS 74
+#define BG_HYPER_BEAM 75
+#define BG_DYNAMAX_CANNON 76
+#define BG_AURA_SPHERE 77
+#define BG_STEEL_BEAM_OPPONENT 78
+#define BG_STEEL_BEAM_PLAYER 79
// table ids for general animations (gBattleAnims_General)
#define B_ANIM_CASTFORM_CHANGE 0
@@ -356,7 +509,7 @@
#define B_ANIM_TURN_TRAP 6
#define B_ANIM_HELD_ITEM_EFFECT 7
#define B_ANIM_SMOKEBALL_ESCAPE 8
-#define B_ANIM_FOCUS_BAND 9
+#define B_ANIM_HANGED_ON 9
#define B_ANIM_RAIN_CONTINUES 10
#define B_ANIM_SUN_CONTINUES 11
#define B_ANIM_SANDSTORM_CONTINUES 12
@@ -370,6 +523,19 @@
#define B_ANIM_FOCUS_PUNCH_SETUP 20
#define B_ANIM_INGRAIN_HEAL 21
#define B_ANIM_WISH_HEAL 22
+#define B_ANIM_MEGA_EVOLUTION 23
+#define B_ANIM_ILLUSION_OFF 24
+#define B_ANIM_FORM_CHANGE 25
+#define B_ANIM_SLIDE_OFFSCREEN 26 // for Emergency Exit
+#define B_ANIM_RESTORE_BG 27 // for Terrain Endings
+#define B_ANIM_TOTEM_FLARE 28 // Totem boosts aura flare
+#define B_ANIM_GULP_MISSILE 29
+#define B_ANIM_STRONG_WINDS 30
+#define B_ANIM_PRIMAL_REVERSION 31
+#define B_ANIM_AQUA_RING_HEAL 32
+#define B_ANIM_BEAK_BLAST_SETUP 33
+#define B_ANIM_SHELL_TRAP_SETUP 34
+#define B_ANIM_ZMOVE_ACTIVATE 35 // Using Z Moves
// special animations table (gBattleAnims_Special)
#define B_ANIM_LVL_UP 0
@@ -379,6 +545,7 @@
#define B_ANIM_BALL_THROW_WITH_TRAINER 4
#define B_ANIM_SUBSTITUTE_TO_MON 5
#define B_ANIM_MON_TO_SUBSTITUTE 6
+#define B_ANIM_CRITICAL_CAPTURE_THROW 7
// status animation table (gBattleAnims_StatusConditions)
#define B_ANIM_STATUS_PSN 0
@@ -405,6 +572,9 @@
#define TRAP_ANIM_WHIRLPOOL 2
#define TRAP_ANIM_CLAMP 3
#define TRAP_ANIM_SAND_TOMB 4
+#define TRAP_ANIM_MAGMA_STORM 5
+#define TRAP_ANIM_INFESTATION 6
+#define TRAP_ANIM_SNAP_TRAP 7
// Weather defines for battle animation scripts.
#define ANIM_WEATHER_NONE 0
@@ -413,6 +583,36 @@
#define ANIM_WEATHER_SANDSTORM 3
#define ANIM_WEATHER_HAIL 4
+// mon pal blend
+#define ANIM_PAL_BG 0x1
+#define ANIM_PAL_ATK 0x2
+#define ANIM_PAL_DEF 0x4
+#define ANIM_PAL_ATK_PARTNER 0x8
+#define ANIM_PAL_DEF_PARTNER 0x10
+#define ANIM_PAL_ALL 0x1f
+#define ANIM_PAL_BG_4 0x20
+#define ANIM_PAL_BG_5 0x40
+#define ANIM_PAL_ALL_BATTLERS 0x780
+#define ANIM_PAL_PLAYER1 0x80
+#define ANIM_PAL_PLAYER2 0x100
+#define ANIM_PAL_OPPONENT1 0x200
+#define ANIM_PAL_OPPONENT2 0x400
+
+// horseshoe/fist frames
+#define ANIM_RIGHT_FIST 0
+#define ANIM_LEFT_FIST 2
+
+// fist/chop frames
+#define ANIM_FIST_1 0
+#define ANIM_FOOT_1 1
+#define ANIM_FOOT_2 2
+#define ANIM_CHOP 3
+
+// surf wave palettes
+#define ANIM_SURF_PAL_SURF 0
+#define ANIM_SURF_PAL_MUDDY_WATER 1
+#define ANIM_SURF_PAL_SLUDGE_WAVE 2
+
// Flags given to various functions to indicate which palettes to consider.
// Handled by UnpackSelectedBattlePalettes
#define F_PAL_BG (1 << 0)
diff --git a/include/constants/battle_arena.h b/include/constants/battle_arena.h
index e04211115d..d4288d04fc 100644
--- a/include/constants/battle_arena.h
+++ b/include/constants/battle_arena.h
@@ -17,4 +17,10 @@
#define ARENA_CATEGORY_SKILL 1
#define ARENA_CATEGORY_BODY 2
+#define ARENA_RESULT_RUNNING 0 // For intermediate steps, when BattleArena_ShowJudgmentWindow should be called again immediately
+#define ARENA_RESULT_STEP_DONE 1 // A step has been completed, the script may advance to the next instruction
+#define ARENA_RESULT_PLAYER_WON 2
+#define ARENA_RESULT_PLAYER_LOST 3
+#define ARENA_RESULT_TIE 4
+
#endif //GUARD_CONSTANTS_BATTLE_ARENA_H
diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h
new file mode 100644
index 0000000000..5e9984c550
--- /dev/null
+++ b/include/constants/battle_config.h
@@ -0,0 +1,200 @@
+#ifndef GUARD_CONSTANTS_BATTLE_CONFIG_H
+#define GUARD_CONSTANTS_BATTLE_CONFIG_H
+
+#include "constants/expansion_branches.h"
+
+#ifndef GEN_3
+ #define GEN_3 0
+ #define GEN_4 1
+ #define GEN_5 2
+ #define GEN_6 3
+ #define GEN_7 4
+ #define GEN_8 5
+#endif
+
+// Calculation settings
+#define B_CRIT_CHANCE GEN_7 // Chances of a critical hit landing. See CalcCritChanceStage. Gen6+ chances guarantee that Farfetch'd and Sirfetch'd always get critical hits while holding a Leek and using high-crit ratio moves.
+#define B_CRIT_MULTIPLIER GEN_7 // In Gen6+, critical hits multiply damage by 1.5 instead of 2.
+#define B_PARALYSIS_SPEED GEN_7 // In Gen7+, Speed is decreased by 50% instead of 75%.
+#define B_CONFUSION_SELF_DMG_CHANCE GEN_7 // In Gen7+, confusion has a 33.3% of self-damage, instead of 50%.
+#define B_MULTI_HIT_CHANCE GEN_7 // In Gen5+, multi-hit moves have different %. See Cmd_setmultihitcounter for values.
+#define B_WHITEOUT_MONEY GEN_7 // In Gen4+, the amount of money lost by losing a battle is determined by the amount of badges earned. Previously, it would cut the current money by half. (While this change was also in FRLG, for the sake of simplicity, setting this to GEN_3 will result in RSE behavior.)
+
+// Exp and stat settings
+#define B_EXP_CATCH GEN_7 // In Gen6+, Pokémon get experience from catching.
+#define B_TRAINER_EXP_MULTIPLIER GEN_7 // In Gen7+, trainer battles no longer give a 1.5 multiplier to EXP gain.
+#define B_SPLIT_EXP GEN_7 // In Gen6+, all participating mon get full experience.
+#define B_SCALED_EXP GEN_7 // In Gen5 and Gen7+, experience is weighted by level difference.
+#define B_BADGE_BOOST GEN_7 // In Gen4+, Gym Badges no longer boost a Pokémon's stats.
+#define B_MAX_LEVEL_EV_GAINS GEN_7 // In Gen5+, Lv100 Pokémon can obtain Effort Values normally.
+#define B_RECALCULATE_STATS GEN_7 // In Gen5+, the stats of the Pokémon who participate in battle are recalculated at the end of each battle.
+
+// Damage settings
+#define B_BURN_DAMAGE GEN_7 // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th.
+#define B_BURN_FACADE_DMG GEN_7 // In Gen6+, burn's effect of lowering the Attack stat no longer applies to Facade.
+#define B_BINDING_DAMAGE GEN_7 // In Gen6+, binding damage is 1/8 of max HP instead of 1/16. (With Binding Band, 1/6 and 1/8 respectively.)
+#define B_PSYWAVE_DMG GEN_7 // Psywave's damage formula. See Cmd_psywavedamageeffect.
+#define B_PAYBACK_SWITCH_BOOST GEN_7 // In Gen5+, if the opponent switches out, Payback's damage will no longer be doubled.
+#define B_HIDDEN_POWER_DMG GEN_7 // In Gen6+, Hidden Power's base power was set to always be 60. Before, it was determined by the mon's IVs.
+#define B_ROUGH_SKIN_DMG GEN_7 // In Gen4+, Rough Skin contact damage is 1/8th of max HP instead of 1/16th. This will also affect Iron Barbs.
+#define B_KNOCK_OFF_DMG GEN_8 // In Gen6+, Knock Off deals 50% more damage when knocking off an item.
+#define B_SPORT_DMG_REDUCTION GEN_7 // In Gen5+, Water/Mud Sport reduce Fire/Electric Damage by 67% instead of 50%.
+#define B_EXPLOSION_DEFENSE GEN_7 // In Gen5+, Self-Destruct and Explosion don't halve the targets' defense.
+
+// Type settings
+#define B_GHOSTS_ESCAPE GEN_7 // In Gen6+, abilities like Shadow Tag or moves like Mean Look fail on Ghost-type Pokémon. They can also escape any Wild Battle.
+#define B_PARALYZE_ELECTRIC GEN_7 // In Gen6+, Electric-type Pokémon can't be paralyzed.
+#define B_POWDER_GRASS GEN_7 // In Gen6+, Grass-type Pokémon are immune to powder and spore moves.
+#define B_STEEL_RESISTANCES GEN_7 // In Gen6+, Steel-type Pokémon are no longer resistant to Dark-type and Ghost-type moves.
+#define B_PRANKSTER_DARK_TYPES GEN_7 // In Gen7+, Prankster-elevated status moves do not affect Dark type Pokémon.
+#define B_SHEER_COLD_IMMUNITY GEN_7 // In Gen7+, Ice-types are immune to Sheer Cold
+
+// Turn settings
+#define B_BINDING_TURNS GEN_7 // In Gen5+, binding moves last for 4-5 turns instead of 2-5 turns. (With Grip Claw, 7 and 5 turns respectively.)
+#define B_UPROAR_TURNS GEN_7 // In Gen5+, Uproar lasts for 3 turns instead of 2-5 turns.
+#define B_DISABLE_TURNS GEN_7 // Disable's turns. See Cmd_disablelastusedattack.
+#define B_TAILWIND_TURNS GEN_7 // In Gen5+, Tailwind lasts 4 turns instead of 3.
+#define B_SLEEP_TURNS GEN_7 // In Gen5+, sleep lasts for 1-3 turns instead of 2-5 turns.
+#define B_TAUNT_TURNS GEN_7 // In Gen5+, Taunt lasts 3 turns if the user acts before the target, or 4 turns if the target acted before the user. In Gen3, taunt lasts 2 turns and in Gen 4, 3-5 turns.
+#define B_SPORT_TURNS GEN_7 // In Gen6+, Water/Mud Sport last 5 turns, even if the user switches out.
+#define B_MEGA_EVO_TURN_ORDER GEN_7 // In Gen7, a Pokémon's Speed after Mega Evolution is used to determine turn order, not its Speed before.
+#define B_RECALC_TURN_AFTER_ACTIONS GEN_8 // In Gen8, switching/using a move affects the current turn's order of actions.
+#define B_FAINT_SWITCH_IN GEN_7 // In Gen4+, sending out a new Pokémon after the previous one fainted happens at the end of the turn. Before, it would happen after each action.
+
+// Move data settings
+#define B_UPDATED_MOVE_DATA GEN_8 // Updates move data in gBattleMoves, including Power, Accuracy, PP, stat changes, targets, chances of secondary effects, etc.
+#define B_PHYSICAL_SPECIAL_SPLIT GEN_7 // In Gen3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this.
+#define B_RECOIL_IF_MISS_DMG GEN_7 // In Gen5+, Jump Kick and High Jump Kick will always do half of the user's max HP when missing.
+#define B_KLUTZ_FLING_INTERACTION GEN_7 // In Gen5+, Pokémon with the Klutz ability can't use Fling.
+#define B_UPDATED_CONVERSION GEN_7 // In Gen6+, Conversion changes the user's type to match their first move's. Before, it would choose a move at random.
+#define B_PP_REDUCED_BY_SPITE GEN_7 // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5.
+
+// Move accuracy settings
+#define B_TOXIC_NEVER_MISS GEN_7 // In Gen6+, if Toxic is used by a Poison-type Pokémon, it will never miss.
+#define B_MINIMIZE_DMG_ACC GEN_7 // In Gen6+, moves that causes double damage to minimized Pokémon will also skip accuracy checks.
+#define B_BLIZZARD_HAIL GEN_7 // In Gen4+, Blizzard bypasses accuracy checks if it's hailing.
+#define B_SHEER_COLD_ACC GEN_7 // In Gen7+, Sheer Cold's base chance of hitting is reduced to 20% if the user isn't Ice-typed.
+
+// Move stat change settings
+#define B_FELL_STINGER_STAT_RAISE GEN_7 // In Gen7+, it raises Atk by 3 stages instead of 2 if it causes the target to faint.
+#define B_KINGS_SHIELD_LOWER_ATK GEN_7 // In Gen7+, it lowers Atk by 1 stage instead of 2 of oponents that hit it.
+#define B_SPEED_BUFFING_RAPID_SPIN GEN_8 // In Gen8, Rapid Spin raises the user's Speed by 1 stage.
+#define B_CHARGE_SPDEF_RAISE GEN_7 // In Gen5+, Charge raises the user's Special Defense by 1 stage.
+#define B_MINIMIZE_EVASION GEN_7 // In Gen5+, Minimize raises evasion by 2 stages instead of 1.
+#define B_GROWTH_STAT_RAISE GEN_7 // In Gen5+, Growth raises Attack in addition to Special Attack by 1 stage each. Under the effects of the sun, it raises them by 2 stages each instead.
+
+// Other move settings
+#define B_SOUND_SUBSTITUTE GEN_7 // In Gen6+, sound moves bypass Substitute.
+#define B_INCINERATE_GEMS GEN_7 // In Gen6+, Incinerate can destroy Gems.
+#define B_CAN_SPITE_FAIL GEN_7 // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP.
+#define B_CRASH_IF_TARGET_IMMUNE GEN_7 // In Gen4+, The user of Jump Kick or High Jump Kick will "keep going and crash" if it attacks a target that is immune to the move.
+#define B_MEMENTO_FAIL GEN_7 // In Gen4+, Memento fails if there is no target or if the target is protected or behind substitute. But not if Atk/Sp. Atk are at -6.
+#define B_GLARE_GHOST GEN_7 // In Gen4+, Glare can hit Ghost-type Pokémon normally.
+#define B_SKILL_SWAP GEN_7 // In Gen4+, Skill Swap triggers switch-in abilities after use.
+#define B_BRICK_BREAK GEN_7 // In Gen4+, you can destroy your own side's screens. In Gen 5+, screens are not removed if the target is immune.
+#define B_WISH_HP_SOURCE GEN_7 // In Gen5+, Wish heals half of the user's max HP instead of the target's.
+#define B_RAMPAGE_CANCELLING GEN_7 // In Gen5+, a failed Thrash, etc, will cancel except on its last turn.
+#define B_HEAL_BLOCKING GEN_7 // In Gen5+, Heal Block prevents healing by Black Sludge, Leftovers, Shell Bell. Affected Pokémon will not consume held HP-restoring Berries or Berry Juice.
+ // Draining abilities will not heal but will prevent damage. In Gen6+, Heal Block prevents the use of most HP-draining moves.
+#define B_ROOTED_GROUNDING GEN_7 // In Gen4+, Ingrain causes the affected Pokémon to become grounded.
+
+// Ability settings
+#define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters.
+#define B_ABILITY_WEATHER GEN_7 // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability.
+#define B_GALE_WINGS GEN_7 // In Gen7+ requires full HP to trigger.
+#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.
+#define B_SHADOW_TAG_ESCAPE GEN_7 // In Gen4+, if both sides have a Pokémon with Shadow Tag, all battlers can escape. Before, neither side could escape this situation.
+#define B_MOODY_ACC_EVASION GEN_8 // In Gen8, Moody CANNOT raise Accuracy and Evasion anymore.
+#define B_FLASH_FIRE_FROZEN GEN_7 // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before.
+#define B_SYNCHRONIZE_NATURE GEN_8 // In Gen8, if a Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same ability, as opposed to 50% previously.
+#define B_SYNCHRONIZE_TOXIC GEN_8 // In Gen5+, if a Pokémon with Synchronize is badly poisoned, the opponent will also become badly poisoned. Previously, the opponent would become regular poisoned.
+#define B_UPDATED_INTIMIDATE GEN_8 // In Gen8, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities. It also activates Rattled.
+#define B_OBLIVIOUS_TAUNT GEN_7 // In Gen6+, Pokémon with Oblivious can't be taunted.
+#define B_STURDY GEN_7 // In Gen5+, Sturdy causes the Pokémon to have 1 HP remaining if another Pokémon's attack or confusion damage would have brought it from full health to 0 HP.
+#define B_PLUS_MINUS_INTERACTION GEN_7 // In Gen5+, Plus and Minus can be activated with themselves and the opposite ability. Before, only the opposing ability could activate it.
+
+// Item settings
+#define B_HP_BERRIES GEN_7 // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn.
+#define B_BERRIES_INSTANT GEN_7 // In Gen4+, most berries activate on battle start/switch-in if applicable. In Gen3, they only activate either at the move end or turn end.
+#define B_CONFUSE_BERRIES_HEAL GEN_8 // Before Gen7, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP.
+ // Requires using Item Expansion or manually editing the holdEffectParam of Figy, Wiki, Mago, Aguav and Iapapa berries.
+#define B_X_ITEMS_BUFF GEN_7 // In Gen7+, the X Items raise a stat by 2 stages instead of 1.
+#define B_MENTAL_HERB GEN_5 // In Gen5+, the Mental Herb cures Infatuation, Taunt, Encore, Torment, Heal Block, and Disable
+#define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games trainers cannot steal items.
+#define B_SOUL_DEW_BOOST GEN_7 // In Gens3-6, Soul Dew boosts Lati@s' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead.
+#define B_NET_BALL_MODIFIER GEN_7 // In Gen7+, Net Ball's catch multiplier is x5 instead of x3.
+#define B_DIVE_BALL_MODIFIER GEN_7 // In Gen4+, Dive Ball's effectiveness increases by when Surfing or Fishing.
+#define B_NEST_BALL_MODIFIER GEN_7 // Nest Ball's formula varies depending on the Gen. See Cmd_handleballthrow.
+#define B_REPEAT_BALL_MODIFIER GEN_7 // In Gen7+, Repeat Ball's catch multiplier is x3.5 instead of x3.
+#define B_TIMER_BALL_MODIFIER GEN_7 // In Gen5+, Timer Ball's effectiveness increases by x0.3 per turn instead of x0.1
+#define B_DUSK_BALL_MODIFIER GEN_7 // In Gen7+, Dusk Ball's catch multiplier is x3 instead of x3.5.
+#define B_QUICK_BALL_MODIFIER GEN_7 // In Gen5+, Quick Ball's catch multiplier is x5 instead of x4.
+#define B_LURE_BALL_MODIFIER GEN_7 // In Gen7+, Lure Ball's catch multiplier is x5 instead of x3.
+#define B_HEAVY_BALL_MODIFIER GEN_7 // In Gen7+, Heavy Ball's ranges change. See Cmd_handleballthrow.
+#define B_DREAM_BALL_MODIFIER GEN_8 // In Gen8, Dream Ball's catch multiplier is x4 when the target is asleep or has the ability Comatose.
+#define B_SERENE_GRACE_BOOST GEN_7 // In Gen5+, Serene Grace boosts the added flinch chance of King's Rock and Razor Fang.
+
+// Flag settings
+// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to.
+// Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature.
+#define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water.
+#define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles.
+#define B_SMART_WILD_AI_FLAG 0 // If not 0, you can set this flag in a script to enable smart wild pokemon
+
+// Var Settings
+// To use the following features in scripting, replace the 0s with the var ID you're assigning it to.
+// Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature.
+#define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active
+#define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15)
+
+// Terrain settings
+#define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades.
+#define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8.
+#define B_TERRAIN_TYPE_BOOST GEN_8 // In Gen8, damage is boosted by 30% instead of 50%.
+#define B_SECRET_POWER_EFFECT GEN_7 // Secret Power's effects change depending on terrain and generation. See GetSecretPowerMoveEffect.
+#define B_SECRET_POWER_ANIMATION GEN_7 // Secret Power's animations change depending on terrain and generation.
+#define B_NATURE_POWER_MOVES GEN_8 // Nature Power calls different moves depending on terrain and generation. See sNaturePowerMoves.
+#define B_CAMOUFLAGE_TYPES GEN_7 // Camouflage changes the user to different types depending on terrain and generation. See sTerrainToType.
+
+// Interface settings
+#define B_ABILITY_POP_UP TRUE // In Gen5+, the Pokémon abilities are displayed in a pop-up, when they activate in battle.
+#define B_FAST_INTRO TRUE // If set to TRUE, battle intro texts print at the same time as animation of a Pokémon, as opposing to waiting for the animation to end.
+#define B_FAST_HP_DRAIN TRUE // If set to TRUE, HP bars will move faster to accomodate higher max HP amounts.
+#define B_SHOW_TARGETS TRUE // If set to TRUE, all available targets, for moves hitting 2 or 3 Pokémon, will be shown before selecting a move.
+#define B_SHOW_SPLIT_ICON TRUE // If set to TRUE, it will show an icon in the summary showing the move's category split.
+#define B_HIDE_HEALTHBOX_IN_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations.
+#define B_EXPANDED_MOVE_NAMES FALSE // If set to TRUE, move names are increased from 12 characters to 16 characters.
+
+// Catching settings
+#define B_SEMI_INVULNERABLE_CATCH GEN_7 // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc)
+#define B_CATCHING_CHARM_BOOST 20 // % boost in Critical Capture odds if player has the Catching Charm.
+#define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled.
+#define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented
+#define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball.
+
+// Other settings
+#define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter.
+#define B_MULTI_BATTLE_WHITEOUT GEN_8 // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight.
+#define B_EVOLUTION_AFTER_WHITEOUT GEN_6 // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses.
+#define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper)
+
+// Animation Settings
+#define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle.
+#define B_NEW_LEECH_SEED_PARTICLE FALSE // If set to TRUE, it updates Leech Seed's animation particle.
+#define B_NEW_HORN_ATTACK_PARTICLE FALSE // If set to TRUE, it updates Horn Attack's horn particle.
+#define B_NEW_LEAF_PARTICLE FALSE // If set to TRUE, it updates leaf particle.
+#define B_NEW_EMBER_PARTICLES FALSE // If set to TRUE, it updates Ember's fire particle.
+#define B_NEW_MEAN_LOOK_PARTICLE FALSE // If set to TRUE, it updates Mean Look's eye particle.
+#define B_NEW_TEETH_PARTICLE FALSE // If set to TRUE, it updates Bite/Crunch teeth particle.
+#define B_NEW_HANDS_FEET_PARTICLE FALSE // If set to TRUE, it updates chop/kick/punch particles.
+#define B_NEW_SPIKES_PARTICLE FALSE // If set to TRUE, it updates Spikes particle.
+#define B_NEW_FLY_BUBBLE_PARTICLE FALSE // If set to TRUE, it updates Fly's 'bubble' particle.
+#define B_NEW_CURSE_NAIL_PARTICLE FALSE // If set to TRUE, it updates Curse's nail.
+#define B_NEW_BATON_PASS_BALL_PARTICLE FALSE // If set to TRUE, it updates Baton Pass' Poké Ball sprite.
+#define B_NEW_MORNING_SUN_STAR_PARTICLE FALSE // If set to TRUE, it updates Morning Sun's star particles.
+#define B_NEW_IMPACT_PALETTE FALSE // If set to TRUE, it updates the basic 'hit' palette.
+#define B_NEW_SURF_PARTICLE_PALETTE FALSE // If set to TRUE, it updates Surf's wave palette.
+
+#define B_ENABLE_DEBUG TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button.
+
+#endif // GUARD_CONSTANTS_BATTLE_CONFIG_H
diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h
index 6cfdc79314..85c1df085e 100644
--- a/include/constants/battle_frontier.h
+++ b/include/constants/battle_frontier.h
@@ -44,6 +44,7 @@
#define SPECIAL_BATTLE_STEVEN 8
#define SPECIAL_BATTLE_PIKE_DOUBLE 9
#define SPECIAL_BATTLE_PYRAMID 10
+#define SPECIAL_BATTLE_MULTI 11
#define MAX_BATTLE_FRONTIER_POINTS 9999
#define MAX_STREAK 9999
@@ -176,7 +177,7 @@
#define BATTLE_FRONTIER_ITEM_APICOT_BERRY 50
#define BATTLE_FRONTIER_ITEM_STARF_BERRY 51
#define BATTLE_FRONTIER_ITEM_LIECHI_BERRY 52
-#define BATTLE_FRONTIER_ITEM_STICK 53
+#define BATTLE_FRONTIER_ITEM_LEEK 53
#define BATTLE_FRONTIER_ITEM_LAX_INCENSE 54
#define BATTLE_FRONTIER_ITEM_AGUAV_BERRY 55
#define BATTLE_FRONTIER_ITEM_FIGY_BERRY 56
diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h
index c4f79efc31..f217ecd33a 100644
--- a/include/constants/battle_move_effects.h
+++ b/include/constants/battle_move_effects.h
@@ -18,12 +18,12 @@
#define EFFECT_SPECIAL_DEFENSE_UP 14
#define EFFECT_ACCURACY_UP 15
#define EFFECT_EVASION_UP 16
-#define EFFECT_ALWAYS_HIT 17
+#define EFFECT_SPECIAL_ATTACK_UP_3 17
#define EFFECT_ATTACK_DOWN 18
#define EFFECT_DEFENSE_DOWN 19
#define EFFECT_SPEED_DOWN 20
-#define EFFECT_SPECIAL_ATTACK_DOWN 21 // unused
-#define EFFECT_SPECIAL_DEFENSE_DOWN 22 // unused
+#define EFFECT_SPECIAL_ATTACK_DOWN 21
+#define EFFECT_SPECIAL_DEFENSE_DOWN 22
#define EFFECT_ACCURACY_DOWN 23
#define EFFECT_EVASION_DOWN 24
#define EFFECT_HAZE 25
@@ -40,16 +40,16 @@
#define EFFECT_TRI_ATTACK 36
#define EFFECT_REST 37
#define EFFECT_OHKO 38
-#define EFFECT_RAZOR_WIND 39
+#define EFFECT_FUSION_COMBO 39
#define EFFECT_SUPER_FANG 40
#define EFFECT_DRAGON_RAGE 41
#define EFFECT_TRAP 42
-#define EFFECT_HIGH_CRITICAL 43
+#define EFFECT_HEAL_BLOCK 43
#define EFFECT_DOUBLE_HIT 44
#define EFFECT_RECOIL_IF_MISS 45
#define EFFECT_MIST 46
#define EFFECT_FOCUS_ENERGY 47
-#define EFFECT_RECOIL 48
+#define EFFECT_RECOIL_25 48
#define EFFECT_CONFUSE 49
#define EFFECT_ATTACK_UP_2 50
#define EFFECT_DEFENSE_UP_2 51
@@ -76,7 +76,7 @@
#define EFFECT_SPECIAL_DEFENSE_DOWN_HIT 72
#define EFFECT_ACCURACY_DOWN_HIT 73
#define EFFECT_EVASION_DOWN_HIT 74
-#define EFFECT_SKY_ATTACK 75
+#define EFFECT_TWO_TURNS_ATTACK 75
#define EFFECT_CONFUSE_HIT 76
#define EFFECT_TWINEEDLE 77
#define EFFECT_VITAL_THROW 78
@@ -86,7 +86,7 @@
#define EFFECT_MIMIC 82
#define EFFECT_METRONOME 83
#define EFFECT_LEECH_SEED 84
-#define EFFECT_SPLASH 85
+#define EFFECT_DO_NOTHING 85
#define EFFECT_DISABLE 86
#define EFFECT_LEVEL_DAMAGE 87
#define EFFECT_PSYWAVE 88
@@ -97,21 +97,21 @@
#define EFFECT_CONVERSION_2 93
#define EFFECT_LOCK_ON 94
#define EFFECT_SKETCH 95
-#define EFFECT_UNUSED_60 96 // thaw
+#define EFFECT_HAMMER_ARM 96
#define EFFECT_SLEEP_TALK 97
#define EFFECT_DESTINY_BOND 98
#define EFFECT_FLAIL 99
#define EFFECT_SPITE 100
#define EFFECT_FALSE_SWIPE 101
#define EFFECT_HEAL_BELL 102
-#define EFFECT_QUICK_ATTACK 103
+#define EFFECT_ALWAYS_CRIT 103
#define EFFECT_TRIPLE_KICK 104
#define EFFECT_THIEF 105
#define EFFECT_MEAN_LOOK 106
#define EFFECT_NIGHTMARE 107
#define EFFECT_MINIMIZE 108
#define EFFECT_CURSE 109
-#define EFFECT_UNUSED_6E 110
+#define EFFECT_HEALING_WISH 110
#define EFFECT_PROTECT 111
#define EFFECT_SPIKES 112
#define EFFECT_FORESIGHT 113
@@ -126,13 +126,13 @@
#define EFFECT_PRESENT 122
#define EFFECT_FRUSTRATION 123
#define EFFECT_SAFEGUARD 124
-#define EFFECT_THAW_HIT 125
+#define EFFECT_UNUSED_125 125
#define EFFECT_MAGNITUDE 126
#define EFFECT_BATON_PASS 127
#define EFFECT_PURSUIT 128
#define EFFECT_RAPID_SPIN 129
#define EFFECT_SONICBOOM 130
-#define EFFECT_UNUSED_83 131
+#define EFFECT_CAPTIVATE 131
#define EFFECT_MORNING_SUN 132
#define EFFECT_SYNTHESIS 133
#define EFFECT_MOONLIGHT 134
@@ -142,7 +142,7 @@
#define EFFECT_DEFENSE_UP_HIT 138
#define EFFECT_ATTACK_UP_HIT 139
#define EFFECT_ALL_STATS_UP_HIT 140
-#define EFFECT_UNUSED_8D 141 // incomplete fake out in gen 2
+#define EFFECT_FELL_STINGER 141
#define EFFECT_BELLY_DRUM 142
#define EFFECT_PSYCH_UP 143
#define EFFECT_MIRROR_COAT 144
@@ -151,7 +151,7 @@
#define EFFECT_EARTHQUAKE 147
#define EFFECT_FUTURE_SIGHT 148
#define EFFECT_GUST 149
-#define EFFECT_FLINCH_MINIMIZE_HIT 150 // STOMP ASTONISH EXTRASENSORY NEEDLE_ARM
+#define EFFECT_FLINCH_MINIMIZE_HIT 150
#define EFFECT_SOLAR_BEAM 151
#define EFFECT_THUNDER 152
#define EFFECT_TELEPORT 153
@@ -164,7 +164,7 @@
#define EFFECT_STOCKPILE 160
#define EFFECT_SPIT_UP 161
#define EFFECT_SWALLOW 162
-#define EFFECT_UNUSED_A3 163
+#define EFFECT_WORRY_SEED 163
#define EFFECT_HAIL 164
#define EFFECT_TORMENT 165
#define EFFECT_FLATTER 166
@@ -199,9 +199,9 @@
#define EFFECT_SNATCH 195
#define EFFECT_LOW_KICK 196
#define EFFECT_SECRET_POWER 197
-#define EFFECT_DOUBLE_EDGE 198
+#define EFFECT_RECOIL_33 198
#define EFFECT_TEETER_DANCE 199
-#define EFFECT_BLAZE_KICK 200
+#define EFFECT_HIT_ESCAPE 200
#define EFFECT_MUD_SPORT 201
#define EFFECT_POISON_FANG 202
#define EFFECT_WEATHER_BALL 203
@@ -210,12 +210,193 @@
#define EFFECT_COSMIC_POWER 206
#define EFFECT_SKY_UPPERCUT 207
#define EFFECT_BULK_UP 208
-#define EFFECT_POISON_TAIL 209
+#define EFFECT_PLACEHOLDER 209
#define EFFECT_WATER_SPORT 210
#define EFFECT_CALM_MIND 211
#define EFFECT_DRAGON_DANCE 212
#define EFFECT_CAMOUFLAGE 213
-#define NUM_BATTLE_MOVE_EFFECTS 214
+// New move effects
+#define EFFECT_PLEDGE 214
+#define EFFECT_FLING 215
+#define EFFECT_NATURAL_GIFT 216
+#define EFFECT_WAKE_UP_SLAP 217
+#define EFFECT_WRING_OUT 218
+#define EFFECT_HEX 219
+#define EFFECT_ASSURANCE 220
+#define EFFECT_TRUMP_CARD 221
+#define EFFECT_ACROBATICS 222
+#define EFFECT_HEAT_CRASH 223
+#define EFFECT_PUNISHMENT 224
+#define EFFECT_STORED_POWER 225
+#define EFFECT_ELECTRO_BALL 226
+#define EFFECT_GYRO_BALL 227
+#define EFFECT_ECHOED_VOICE 228
+#define EFFECT_PAYBACK 229
+#define EFFECT_ROUND 230
+#define EFFECT_BRINE 231
+#define EFFECT_VENOSHOCK 232
+#define EFFECT_RETALIATE 233
+#define EFFECT_BULLDOZE 234
+#define EFFECT_FOUL_PLAY 235
+#define EFFECT_PSYSHOCK 236
+#define EFFECT_ROOST 237
+#define EFFECT_GRAVITY 238
+#define EFFECT_MIRACLE_EYE 239
+#define EFFECT_TAILWIND 240
+#define EFFECT_EMBARGO 241
+#define EFFECT_AQUA_RING 242
+#define EFFECT_TRICK_ROOM 243
+#define EFFECT_WONDER_ROOM 244
+#define EFFECT_MAGIC_ROOM 245
+#define EFFECT_MAGNET_RISE 246
+#define EFFECT_TOXIC_SPIKES 247
+#define EFFECT_GASTRO_ACID 248
+#define EFFECT_STEALTH_ROCK 249
+#define EFFECT_TELEKINESIS 250
+#define EFFECT_POWER_SWAP 251
+#define EFFECT_GUARD_SWAP 252
+#define EFFECT_HEART_SWAP 253
+#define EFFECT_POWER_SPLIT 254
+#define EFFECT_GUARD_SPLIT 255
+#define EFFECT_STICKY_WEB 256
+#define EFFECT_METAL_BURST 257
+#define EFFECT_LUCKY_CHANT 258
+#define EFFECT_SUCKER_PUNCH 259
+#define EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2 260
+#define EFFECT_SIMPLE_BEAM 261
+#define EFFECT_ENTRAINMENT 262
+#define EFFECT_HEAL_PULSE 263
+#define EFFECT_QUASH 264
+#define EFFECT_ION_DELUGE 265
+#define EFFECT_FREEZE_DRY 266
+#define EFFECT_TOPSY_TURVY 267
+#define EFFECT_MISTY_TERRAIN 268
+#define EFFECT_GRASSY_TERRAIN 269
+#define EFFECT_ELECTRIC_TERRAIN 270
+#define EFFECT_PSYCHIC_TERRAIN 271
+#define EFFECT_ATTACK_ACCURACY_UP 272
+#define EFFECT_ATTACK_SPATK_UP 273
+#define EFFECT_HURRICANE 274
+#define EFFECT_TWO_TYPED_MOVE 275
+#define EFFECT_ME_FIRST 276
+#define EFFECT_SPEED_UP_HIT 277
+#define EFFECT_QUIVER_DANCE 278
+#define EFFECT_COIL 279
+#define EFFECT_ELECTRIFY 280
+#define EFFECT_SCALD 281
+#define EFFECT_REFLECT_TYPE 282
+#define EFFECT_SOAK 283
+#define EFFECT_GROWTH 284
+#define EFFECT_CLOSE_COMBAT 285
+#define EFFECT_LAST_RESORT 286
+#define EFFECT_RECOIL_33_STATUS 287
+#define EFFECT_FLINCH_STATUS 288
+#define EFFECT_RECOIL_50 289
+#define EFFECT_SHELL_SMASH 290
+#define EFFECT_SHIFT_GEAR 291
+#define EFFECT_DEFENSE_UP_3 292
+#define EFFECT_NOBLE_ROAR 293
+#define EFFECT_VENOM_DRENCH 294
+#define EFFECT_TOXIC_THREAD 295
+#define EFFECT_CLEAR_SMOG 296
+#define EFFECT_HIT_SWITCH_TARGET 297
+#define EFFECT_FINAL_GAMBIT 298
+#define EFFECT_CHANGE_TYPE_ON_ITEM 299
+#define EFFECT_AUTOTOMIZE 300
+#define EFFECT_COPYCAT 301
+#define EFFECT_DEFOG 302
+#define EFFECT_HIT_ENEMY_HEAL_ALLY 303
+#define EFFECT_SMACK_DOWN 304
+#define EFFECT_SYNCHRONOISE 305
+#define EFFECT_PSYCHO_SHIFT 306
+#define EFFECT_POWER_TRICK 307
+#define EFFECT_FLAME_BURST 308
+#define EFFECT_AFTER_YOU 309
+#define EFFECT_BESTOW 310
+#define EFFECT_ROTOTILLER 311
+#define EFFECT_FLOWER_SHIELD 312
+#define EFFECT_HIT_PREVENT_ESCAPE 313
+#define EFFECT_SPEED_SWAP 314
+#define EFFECT_DEFENSE_UP2_HIT 315
+#define EFFECT_REVELATION_DANCE 316
+#define EFFECT_AURORA_VEIL 317
+#define EFFECT_THIRD_TYPE 318
+#define EFFECT_FEINT 319
+#define EFFECT_SPARKLING_ARIA 320
+#define EFFECT_ACUPRESSURE 321
+#define EFFECT_AROMATIC_MIST 322
+#define EFFECT_POWDER 323
+#define EFFECT_SP_ATTACK_UP_HIT 324
+#define EFFECT_BELCH 325
+#define EFFECT_PARTING_SHOT 326
+#define EFFECT_SPECTRAL_THIEF 327
+#define EFFECT_V_CREATE 328
+#define EFFECT_MAT_BLOCK 329
+#define EFFECT_STOMPING_TANTRUM 330
+#define EFFECT_CORE_ENFORCER 331
+#define EFFECT_INSTRUCT 332
+#define EFFECT_THROAT_CHOP 333
+#define EFFECT_LASER_FOCUS 334
+#define EFFECT_MAGNETIC_FLUX 335
+#define EFFECT_GEAR_UP 336
+#define EFFECT_INCINERATE 337
+#define EFFECT_BUG_BITE 338
+#define EFFECT_STRENGTH_SAP 339
+#define EFFECT_MIND_BLOWN 340
+#define EFFECT_PURIFY 341
+#define EFFECT_BURN_UP 342
+#define EFFECT_SHORE_UP 343
+#define EFFECT_GEOMANCY 344
+#define EFFECT_FAIRY_LOCK 345
+#define EFFECT_ALLY_SWITCH 346
+#define EFFECT_RELIC_SONG 347
+#define EFFECT_ATTACKER_DEFENSE_DOWN_HIT 348
+#define EFFECT_BODY_PRESS 349
+#define EFFECT_EERIE_SPELL 350
+#define EFFECT_JUNGLE_HEALING 351
+#define EFFECT_COACHING 352
+#define EFFECT_LASH_OUT 353
+#define EFFECT_GRASSY_GLIDE 354
+#define EFFECT_REMOVE_TERRAIN 355
+#define EFFECT_DYNAMAX_DOUBLE_DMG 356
+#define EFFECT_DECORATE 357
+#define EFFECT_SNIPE_SHOT 358
+#define EFFECT_TRIPLE_HIT 359
+#define EFFECT_RECOIL_HP_25 360
+#define EFFECT_STUFF_CHEEKS 361
+#define EFFECT_GRAV_APPLE 362
+#define EFFECT_EVASION_UP_HIT 363
+#define EFFECT_DOUBLE_IRON_BASH 364
+#define EFFECT_GLITZY_GLOW 365
+#define EFFECT_BADDY_BAD 366
+#define EFFECT_SAPPY_SEED 367
+#define EFFECT_FREEZY_FROST 368
+#define EFFECT_SPARKLY_SWIRL 369
+#define EFFECT_PLASMA_FISTS 370
+#define EFFECT_HYPERSPACE_FURY 371
+#define EFFECT_AURA_WHEEL 372
+#define EFFECT_PHOTON_GEYSER 373
+#define EFFECT_SHELL_SIDE_ARM 374
+#define EFFECT_TERRAIN_PULSE 375
+#define EFFECT_JAW_LOCK 376
+#define EFFECT_NO_RETREAT 377
+#define EFFECT_TAR_SHOT 378
+#define EFFECT_POLTERGEIST 379
+#define EFFECT_OCTOLOCK 380
+#define EFFECT_CLANGOROUS_SOUL 381
+#define EFFECT_BOLT_BEAK 382
+#define EFFECT_SKY_DROP 383
+#define EFFECT_EXPANDING_FORCE 384
+#define EFFECT_SCALE_SHOT 385
+#define EFFECT_METEOR_BEAM 386
+#define EFFECT_RISING_VOLTAGE 387
+#define EFFECT_BEAK_BLAST 388
+#define EFFECT_COURT_CHANGE 389
+#define EFFECT_STEEL_BEAM 390
+#define EFFECT_EXTREME_EVOBOOST 391
+#define EFFECT_DAMAGE_SET_TERRAIN 392 // genesis supernova
+
+#define NUM_BATTLE_MOVE_EFFECTS 393
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index 83aacf3160..077cba1eb2 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -5,14 +5,14 @@
#define sPAINSPLIT_HP (gBattleScripting + 0x00) // painSplitHp
#define sBIDE_DMG (gBattleScripting + 0x04) // bideDmg
#define sMULTIHIT_STRING (gBattleScripting + 0x08) // multihitString
-#define sDMG_MULTIPLIER (gBattleScripting + 0x0E) // dmgMultiplier
+#define sEXP_CATCH (gBattleScripting + 0x0E) // expOnCatch
#define sTWOTURN_STRINGID (gBattleScripting + 0x0F) // twoTurnsMoveStringId
#define sB_ANIM_ARG1 (gBattleScripting + 0x10) // animArg1
#define sB_ANIM_ARG2 (gBattleScripting + 0x11) // animArg2
#define sTRIPLE_KICK_POWER (gBattleScripting + 0x12) // tripleKickPower
#define sMOVEEND_STATE (gBattleScripting + 0x14) // moveendState
-#define sBATTLER_WITH_ABILITY (gBattleScripting + 0x15) // battlerWithAbility
-#define sMULTIHIT_EFFECT (gBattleScripting + 0x16) // multihitMoveEffect
+#define sSAVED_STAT_CHANGER (gBattleScripting + 0x15) // savedStatChanger
+#define sSHIFT_SWITCHED (gBattleScripting + 0x16) // shiftSwitched
#define sBATTLER (gBattleScripting + 0x17) // battler
#define sB_ANIM_TURN (gBattleScripting + 0x18) // animTurn
#define sB_ANIM_TARGETS_HIT (gBattleScripting + 0x19) // animTargetsHit
@@ -22,13 +22,24 @@
#define sBATTLE_STYLE (gBattleScripting + 0x1D) // battleStyle
#define sLVLBOX_STATE (gBattleScripting + 0x1E) // drawlvlupboxState
#define sLEARNMOVE_STATE (gBattleScripting + 0x1F) // learnMoveState
-#define sPURSUIT_DOUBLES_ATTACKER (gBattleScripting + 0x20) // pursuitDoublesAttacker
+#define sSAVED_BATTLER (gBattleScripting + 0x20) // savedBattler
#define sRESHOW_MAIN_STATE (gBattleScripting + 0x21) // reshowMainState
#define sRESHOW_HELPER_STATE (gBattleScripting + 0x22) // reshowHelperState
#define sLVLUP_HP (gBattleScripting + 0x23) // levelUpHP
#define sWINDOWS_TYPE (gBattleScripting + 0x24) // windowsType
#define sMULTIPLAYER_ID (gBattleScripting + 0x25) // multiplayerId
#define sSPECIAL_TRAINER_BATTLE_TYPE (gBattleScripting + 0x26) // specialTrainerBattleType
+#define sMON_CAUGHT (gBattleScripting + 0x27) // monCaught
+#define sSAVED_DMG (gBattleScripting + 0x28) // savedDmg
+#define sSAVED_MOVE_EFFECT (gBattleScripting + 0x2C) // savedMoveEffect
+#define sMOVE_EFFECT (gBattleScripting + 0x2E) // moveEffect
+#define sMULTIHIT_EFFECT (gBattleScripting + 0x30) // multihitMoveEffect
+#define sILLUSION_NICK_HACK (gBattleScripting + 0x32) // illusionNickHack
+#define sFIXED_ABILITY_POPUP (gBattleScripting + 0x33) // fixedPopup
+#define sABILITY_OVERWRITE (gBattleScripting + 0x34) // abilityPopupOverwrite
+#define sSWITCH_CASE (gBattleScripting + 0x36) // switchCase
+#define sBERRY_OVERRIDE (gBattleScripting + 0x37) // overrideBerryRequirements
+#define sSTICKY_WEB_STAT_DROP (gBattleScripting + 0x38) // stickyWebStatDrop
// Array entries for battle communication
#define MULTIUSE_STATE 0
@@ -43,7 +54,6 @@
#define MSG_DISPLAY 7
#define BATTLE_COMMUNICATION_ENTRIES_COUNT 8
-#define cEFFECT_CHOOSER (gBattleCommunication + MOVE_EFFECT_BYTE)
#define cMULTISTRING_CHOOSER (gBattleCommunication + MULTISTRING_CHOOSER)
#define cMISS_TYPE (gBattleCommunication + MISS_TYPE)
@@ -53,19 +63,19 @@
#define BS_EFFECT_BATTLER 2
#define BS_FAINTED 3
#define BS_ATTACKER_WITH_PARTNER 4 // for Cmd_updatestatusicon
-#define BS_FAINTED_LINK_MULTIPLE_1 5
-#define BS_FAINTED_LINK_MULTIPLE_2 6
+#define BS_FAINTED_LINK_MULTIPLE_1 5 // for openpartyscreen
+#define BS_FAINTED_LINK_MULTIPLE_2 6 // for openpartyscreen
#define BS_BATTLER_0 7
#define BS_ATTACKER_SIDE 8 // for Cmd_jumpifability
-#define BS_NOT_ATTACKER_SIDE 9 // for Cmd_jumpifability
+#define BS_TARGET_SIDE 9 // for Cmd_jumpifability
#define BS_SCRIPTING 10
#define BS_PLAYER1 11
#define BS_OPPONENT1 12
-#define BS_PLAYER2 13
+#define BS_PLAYER2 13 // for Cmd_updatestatusicon
#define BS_OPPONENT2 14
+#define BS_ABILITY_BATTLER 15
// Cmd_accuracycheck
-#define NO_ACC_CALC 0xFFFE
#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
#define ACC_CURR_MOVE 0
@@ -78,45 +88,179 @@
#define CMP_NO_COMMON_BITS 5
// Cmd_various
-#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
-#define VARIOUS_SET_MAGIC_COAT_TARGET 1
-#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
-#define VARIOUS_GET_MOVE_TARGET 3
-#define VARIOUS_GET_BATTLER_FAINTED 4
-#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
-#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
-#define VARIOUS_RESET_PLAYER_FAINTED 7
-#define VARIOUS_PALACE_FLAVOR_TEXT 8
-#define VARIOUS_ARENA_JUDGMENT_WINDOW 9
-#define VARIOUS_ARENA_OPPONENT_MON_LOST 10
-#define VARIOUS_ARENA_PLAYER_MON_LOST 11
-#define VARIOUS_ARENA_BOTH_MONS_LOST 12
-#define VARIOUS_EMIT_YESNOBOX 13
-#define VARIOUS_DRAW_ARENA_REF_TEXT_BOX 14
-#define VARIOUS_ERASE_ARENA_REF_TEXT_BOX 15
-#define VARIOUS_ARENA_JUDGMENT_STRING 16
-#define VARIOUS_ARENA_WAIT_STRING 17
-#define VARIOUS_WAIT_CRY 18
-#define VARIOUS_RETURN_OPPONENT_MON1 19
-#define VARIOUS_RETURN_OPPONENT_MON2 20
-#define VARIOUS_VOLUME_DOWN 21
-#define VARIOUS_VOLUME_UP 22
-#define VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT 23
-#define VARIOUS_PALACE_TRY_ESCAPE_STATUS 24
-#define VARIOUS_SET_TELEPORT_OUTCOME 25
-#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
+#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
+#define VARIOUS_SET_MAGIC_COAT_TARGET 1
+#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
+#define VARIOUS_GET_MOVE_TARGET 3
+#define VARIOUS_GET_BATTLER_FAINTED 4
+#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
+#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
+#define VARIOUS_RESET_PLAYER_FAINTED 7
+#define VARIOUS_PALACE_FLAVOR_TEXT 8
+#define VARIOUS_ARENA_JUDGMENT_WINDOW 9
+#define VARIOUS_ARENA_OPPONENT_MON_LOST 10
+#define VARIOUS_ARENA_PLAYER_MON_LOST 11
+#define VARIOUS_ARENA_BOTH_MONS_LOST 12
+#define VARIOUS_EMIT_YESNOBOX 13
+#define VARIOUS_DRAW_ARENA_REF_TEXT_BOX 14
+#define VARIOUS_ERASE_ARENA_REF_TEXT_BOX 15
+#define VARIOUS_ARENA_JUDGMENT_STRING 16
+#define VARIOUS_ARENA_WAIT_STRING 17
+#define VARIOUS_WAIT_CRY 18
+#define VARIOUS_RETURN_OPPONENT_MON1 19
+#define VARIOUS_RETURN_OPPONENT_MON2 20
+#define VARIOUS_VOLUME_DOWN 21
+#define VARIOUS_VOLUME_UP 22
+#define VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT 23
+#define VARIOUS_PALACE_TRY_ESCAPE_STATUS 24
+#define VARIOUS_SET_TELEPORT_OUTCOME 25
+#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
+#define VARIOUS_STAT_TEXT_BUFFER 27
+#define VARIOUS_SWITCHIN_ABILITIES 28
+#define VARIOUS_SAVE_TARGET 29
+#define VARIOUS_RESTORE_TARGET 30
+#define VARIOUS_INSTANT_HP_DROP 31
+#define VARIOUS_CLEAR_STATUS 32
+#define VARIOUS_RESTORE_PP 33
+#define VARIOUS_TRY_ACTIVATE_MOXIE 34
+#define VARIOUS_TRY_ACTIVATE_FELL_STINGER 35
+#define VARIOUS_PLAY_MOVE_ANIMATION 36
+#define VARIOUS_SET_LUCKY_CHANT 37
+#define VARIOUS_SUCKER_PUNCH_CHECK 38
+#define VARIOUS_SET_SIMPLE_BEAM 39
+#define VARIOUS_TRY_ENTRAINMENT 40
+#define VARIOUS_SET_LAST_USED_ABILITY 41
+#define VARIOUS_TRY_HEAL_PULSE 42
+#define VARIOUS_TRY_QUASH 43
+#define VARIOUS_INVERT_STAT_STAGES 44
+#define VARIOUS_SET_TERRAIN 45
+#define VARIOUS_TRY_ME_FIRST 46
+#define VARIOUS_JUMP_IF_BATTLE_END 47
+#define VARIOUS_TRY_ELECTRIFY 48
+#define VARIOUS_TRY_REFLECT_TYPE 49
+#define VARIOUS_TRY_SOAK 50
+#define VARIOUS_HANDLE_MEGA_EVO 51
+#define VARIOUS_TRY_LAST_RESORT 52
+#define VARIOUS_ARGUMENT_STATUS_EFFECT 53
+#define VARIOUS_TRY_HIT_SWITCH_TARGET 54
+#define VARIOUS_TRY_AUTOTOMIZE 55
+#define VARIOUS_TRY_COPYCAT 56
+#define VARIOUS_ABILITY_POPUP 57
+#define VARIOUS_DEFOG 58
+#define VARIOUS_JUMP_IF_TARGET_ALLY 59
+#define VARIOUS_TRY_SYNCHRONOISE 60
+#define VARIOUS_PSYCHO_SHIFT 61
+#define VARIOUS_CURE_STATUS 62
+#define VARIOUS_POWER_TRICK 63
+#define VARIOUS_AFTER_YOU 64
+#define VARIOUS_BESTOW 65
+#define VARIOUS_ARGUMENT_TO_MOVE_EFFECT 66
+#define VARIOUS_JUMP_IF_NOT_GROUNDED 67
+#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 68
+#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 69
+#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 70
+#define VARIOUS_SET_AURORA_VEIL 71
+#define VARIOUS_TRY_THIRD_TYPE 72
+#define VARIOUS_ACUPRESSURE 73
+#define VARIOUS_SET_POWDER 74
+#define VARIOUS_SPECTRAL_THIEF 75
+#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 76
+#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 77
+#define VARIOUS_JUMP_IF_ROAR_FAILS 78
+#define VARIOUS_TRY_INSTRUCT 79
+#define VARIOUS_JUMP_IF_NOT_BERRY 80
+#define VARIOUS_TRACE_ABILITY 81
+#define VARIOUS_UPDATE_NICK 82
+#define VARIOUS_TRY_ILLUSION_OFF 83
+#define VARIOUS_SET_SPRITEIGNORE0HP 84
+#define VARIOUS_HANDLE_FORM_CHANGE 85
+#define VARIOUS_GET_STAT_VALUE 86
+#define VARIOUS_JUMP_IF_FULL_HP 87
+#define VARIOUS_LOSE_TYPE 88
+#define VARIOUS_TRY_ACTIVATE_SOULHEART 89
+#define VARIOUS_TRY_ACTIVATE_RECEIVER 90
+#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 91
+#define VARIOUS_TRY_FRISK 92
+#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 93
+#define VARIOUS_TRY_FAIRY_LOCK 94
+#define VARIOUS_JUMP_IF_NO_ALLY 95
+#define VARIOUS_POISON_TYPE_IMMUNITY 96
+#define VARIOUS_JUMP_IF_NO_HOLD_EFFECT 97
+#define VARIOUS_INFATUATE_WITH_BATTLER 98
+#define VARIOUS_SET_LAST_USED_ITEM 99
+#define VARIOUS_PARALYZE_TYPE_IMMUNITY 100
+#define VARIOUS_JUMP_IF_ABSENT 101
+#define VARIOUS_DESTROY_ABILITY_POPUP 102
+#define VARIOUS_TOTEM_BOOST 103
+#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 104
+#define VARIOUS_MOVEEND_ITEM_EFFECTS 105
+#define VARIOUS_TERRAIN_SEED 106
+#define VARIOUS_MAKE_INVISIBLE 107
+#define VARIOUS_ROOM_SERVICE 108
+#define VARIOUS_JUMP_IF_TERRAIN_AFFECTED 109
+#define VARIOUS_EERIE_SPELL_PP_REDUCE 110
+#define VARIOUS_JUMP_IF_TEAM_HEALTHY 111
+#define VARIOUS_TRY_HEAL_QUARTER_HP 112
+#define VARIOUS_REMOVE_TERRAIN 113
+#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 114
+#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 115
+#define VARIOUS_GET_ROTOTILLER_TARGETS 116
+#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 117
+#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 118
+#define VARIOUS_CONSUME_BERRY 119
+#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 120
+#define VARIOUS_HANDLE_PRIMAL_REVERSION 121
+#define VARIOUS_APPLY_PLASMA_FISTS 122
+#define VARIOUS_JUMP_IF_SPECIES 123
+#define VARIOUS_UPDATE_ABILITY_POPUP 124
+#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 125
+#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 126
+#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 127
+#define VARIOUS_TRY_TO_APPLY_MIMICRY 128
+#define VARIOUS_PHOTON_GEYSER_CHECK 129
+#define VARIOUS_SHELL_SIDE_ARM_CHECK 130
+#define VARIOUS_TRY_NO_RETREAT 131
+#define VARIOUS_TRY_TAR_SHOT 132
+#define VARIOUS_CAN_TAR_SHOT_WORK 133
+#define VARIOUS_CHECK_POLTERGEIST 134
+#define VARIOUS_SET_OCTOLOCK 135
+#define VARIOUS_CUT_1_3_HP_RAISE_STATS 136
+#define VARIOUS_TRY_END_NEUTRALIZING_GAS 137
+#define VARIOUS_JUMP_IF_UNDER_200 138
+#define VARIOUS_SET_SKY_DROP 139
+#define VARIOUS_CLEAR_SKY_DROP 140
+#define VARIOUS_SKY_DROP_YAWN 141
+#define VARIOUS_JUMP_IF_CANT_FLING 142
+#define VARIOUS_JUMP_IF_HOLD_EFFECT 143
+#define VARIOUS_CURE_CERTAIN_STATUSES 144
+#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 145
+#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 146
+#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 147
+#define VARIOUS_SAVE_BATTLER_ITEM 148
+#define VARIOUS_RESTORE_BATTLER_ITEM 149
+#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 150
+#define VARIOUS_SET_BEAK_BLAST 151
+#define VARIOUS_SWAP_SIDE_STATUSES 152
+#define VARIOUS_SET_Z_EFFECT 153
-// Cmd_manipulatedmg
+// Cmd_manipulatedamage
#define DMG_CHANGE_SIGN 0
#define DMG_RECOIL_FROM_MISS 1
#define DMG_DOUBLED 2
+#define DMG_1_8_TARGET_HP 3
+#define DMG_FULL_ATTACKER_HP 4
+#define DMG_CURR_ATTACKER_HP 5
+#define DMG_BIG_ROOT 6
+#define DMG_1_2_ATTACKER_HP 7
+#define DMG_RECOIL_FROM_IMMUNE 8 // Used to calculate recoil for the Gen 4 version of Jump Kick
// Cmd_jumpifcantswitch
#define SWITCH_IGNORE_ESCAPE_PREVENTION (1 << 7)
// Cmd_statbuffchange
-#define STAT_BUFF_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. Set in every use of statbuffchange
-#define STAT_BUFF_NOT_PROTECT_AFFECTED (1 << 5)
+#define STAT_CHANGE_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. Set in every use of statbuffchange
+#define STAT_CHANGE_NOT_PROTECT_AFFECTED (1 << 5)
+#define STAT_CHANGE_UPDATE_MOVE_EFFECT (1 << 6)
// stat change flags for Cmd_playstatchangeanimation
#define STAT_CHANGE_NEGATIVE (1 << 0)
@@ -137,23 +281,42 @@
#define PARTY_SCREEN_OPTIONAL (1 << 7) // Flag for first argument to openpartyscreen
// cases for Cmd_moveend
-#define MOVEEND_RAGE 0
-#define MOVEEND_DEFROST 1
-#define MOVEEND_SYNCHRONIZE_TARGET 2
-#define MOVEEND_ON_DAMAGE_ABILITIES 3
-#define MOVEEND_IMMUNITY_ABILITIES 4
-#define MOVEEND_SYNCHRONIZE_ATTACKER 5
-#define MOVEEND_CHOICE_MOVE 6
-#define MOVEEND_CHANGED_ITEMS 7
-#define MOVEEND_ATTACKER_INVISIBLE 8
-#define MOVEEND_ATTACKER_VISIBLE 9
-#define MOVEEND_TARGET_VISIBLE 10
-#define MOVEEND_ITEM_EFFECTS_ALL 11
-#define MOVEEND_KINGSROCK_SHELLBELL 12
-#define MOVEEND_SUBSTITUTE 13
-#define MOVEEND_UPDATE_LAST_MOVES 14
-#define MOVEEND_MIRROR_MOVE 15
-#define MOVEEND_NEXT_TARGET 16
-#define MOVEEND_COUNT 17
+#define MOVEEND_PROTECT_LIKE_EFFECT 0
+#define MOVEEND_RAGE 1
+#define MOVEEND_DEFROST 2
+#define MOVEEND_SYNCHRONIZE_TARGET 3
+#define MOVEEND_ABILITIES 4
+#define MOVEEND_ABILITIES_ATTACKER 5
+#define MOVEEND_STATUS_IMMUNITY_ABILITIES 6
+#define MOVEEND_SYNCHRONIZE_ATTACKER 7
+#define MOVEEND_CHOICE_MOVE 8
+#define MOVEEND_CHANGED_ITEMS 9
+#define MOVEEND_ATTACKER_INVISIBLE 10
+#define MOVEEND_ATTACKER_VISIBLE 11
+#define MOVEEND_TARGET_VISIBLE 12
+#define MOVEEND_ITEM_EFFECTS_TARGET 13
+#define MOVEEND_MOVE_EFFECTS2 14
+#define MOVEEND_ITEM_EFFECTS_ALL 15
+#define MOVEEND_KINGSROCK 16 // These item effects will occur each strike of a multi-hit move
+#define MOVEEND_SUBSTITUTE 17
+#define MOVEEND_SKY_DROP_CONFUSE 18
+#define MOVEEND_UPDATE_LAST_MOVES 19
+#define MOVEEND_MIRROR_MOVE 20
+#define MOVEEND_NEXT_TARGET 21 // Everything up until here is handled for each strike of a multi-hit move
+#define MOVEEND_MAGICIAN 22 // Occurs after final multi-hit strike, and after other items/abilities would activate
+#define MOVEEND_EJECT_BUTTON 23
+#define MOVEEND_RED_CARD 24
+#define MOVEEND_EJECT_PACK 25
+#define MOVEEND_LIFEORB_SHELLBELL 26 // Includes shell bell, throat spray, etc
+#define MOVEEND_PICKPOCKET 27
+#define MOVEEND_DANCER 28
+#define MOVEEND_EMERGENCY_EXIT 29
+#define MOVEEND_CLEAR_BITS 30
+#define MOVEEND_COUNT 31
+
+// switch cases
+#define B_SWITCH_NORMAL 0
+#define B_SWITCH_HIT 1 // dragon tail, circle throw
+#define B_SWITCH_RED_CARD 2
#endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h
index ae18b61ef2..39092410a1 100644
--- a/include/constants/battle_string_ids.h
+++ b/include/constants/battle_string_ids.h
@@ -7,379 +7,625 @@
#define STRINGID_SWITCHINMON 3
#define STRINGID_USEDMOVE 4
#define STRINGID_BATTLEEND 5
+#define STRINGID_TRAINERSLIDE 6
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
-#define STRINGID_TRAINER1LOSETEXT 12
-#define STRINGID_PKMNGAINEDEXP 13
-#define STRINGID_PKMNGREWTOLV 14
-#define STRINGID_PKMNLEARNEDMOVE 15
-#define STRINGID_TRYTOLEARNMOVE1 16
-#define STRINGID_TRYTOLEARNMOVE2 17
-#define STRINGID_TRYTOLEARNMOVE3 18
-#define STRINGID_PKMNFORGOTMOVE 19
-#define STRINGID_STOPLEARNINGMOVE 20
-#define STRINGID_DIDNOTLEARNMOVE 21
-#define STRINGID_PKMNLEARNEDMOVE2 22
-#define STRINGID_ATTACKMISSED 23
-#define STRINGID_PKMNPROTECTEDITSELF 24
-#define STRINGID_STATSWONTINCREASE2 25
-#define STRINGID_AVOIDEDDAMAGE 26
-#define STRINGID_ITDOESNTAFFECT 27
-#define STRINGID_ATTACKERFAINTED 28
-#define STRINGID_TARGETFAINTED 29
-#define STRINGID_PLAYERGOTMONEY 30
-#define STRINGID_PLAYERWHITEOUT 31
-#define STRINGID_PLAYERWHITEOUT2 32
-#define STRINGID_PREVENTSESCAPE 33
-#define STRINGID_HITXTIMES 34
-#define STRINGID_PKMNFELLASLEEP 35
-#define STRINGID_PKMNMADESLEEP 36
-#define STRINGID_PKMNALREADYASLEEP 37
-#define STRINGID_PKMNALREADYASLEEP2 38
-#define STRINGID_PKMNWASNTAFFECTED 39
-#define STRINGID_PKMNWASPOISONED 40
-#define STRINGID_PKMNPOISONEDBY 41
-#define STRINGID_PKMNHURTBYPOISON 42
-#define STRINGID_PKMNALREADYPOISONED 43
-#define STRINGID_PKMNBADLYPOISONED 44
-#define STRINGID_PKMNENERGYDRAINED 45
-#define STRINGID_PKMNWASBURNED 46
-#define STRINGID_PKMNBURNEDBY 47
-#define STRINGID_PKMNHURTBYBURN 48
-#define STRINGID_PKMNWASFROZEN 49
-#define STRINGID_PKMNFROZENBY 50
-#define STRINGID_PKMNISFROZEN 51
-#define STRINGID_PKMNWASDEFROSTED 52
-#define STRINGID_PKMNWASDEFROSTED2 53
-#define STRINGID_PKMNWASDEFROSTEDBY 54
-#define STRINGID_PKMNWASPARALYZED 55
-#define STRINGID_PKMNWASPARALYZEDBY 56
-#define STRINGID_PKMNISPARALYZED 57
-#define STRINGID_PKMNISALREADYPARALYZED 58
-#define STRINGID_PKMNHEALEDPARALYSIS 59
-#define STRINGID_PKMNDREAMEATEN 60
-#define STRINGID_STATSWONTINCREASE 61
-#define STRINGID_STATSWONTDECREASE 62
-#define STRINGID_TEAMSTOPPEDWORKING 63
-#define STRINGID_FOESTOPPEDWORKING 64
-#define STRINGID_PKMNISCONFUSED 65
-#define STRINGID_PKMNHEALEDCONFUSION 66
-#define STRINGID_PKMNWASCONFUSED 67
-#define STRINGID_PKMNALREADYCONFUSED 68
-#define STRINGID_PKMNFELLINLOVE 69
-#define STRINGID_PKMNINLOVE 70
-#define STRINGID_PKMNIMMOBILIZEDBYLOVE 71
-#define STRINGID_PKMNBLOWNAWAY 72
-#define STRINGID_PKMNCHANGEDTYPE 73
-#define STRINGID_PKMNFLINCHED 74
-#define STRINGID_PKMNREGAINEDHEALTH 75
-#define STRINGID_PKMNHPFULL 76
-#define STRINGID_PKMNRAISEDSPDEF 77
-#define STRINGID_PKMNRAISEDDEF 78
-#define STRINGID_PKMNCOVEREDBYVEIL 79
-#define STRINGID_PKMNUSEDSAFEGUARD 80
-#define STRINGID_PKMNSAFEGUARDEXPIRED 81
-#define STRINGID_PKMNWENTTOSLEEP 82
-#define STRINGID_PKMNSLEPTHEALTHY 83
-#define STRINGID_PKMNWHIPPEDWHIRLWIND 84
-#define STRINGID_PKMNTOOKSUNLIGHT 85
-#define STRINGID_PKMNLOWEREDHEAD 86
-#define STRINGID_PKMNISGLOWING 87
-#define STRINGID_PKMNFLEWHIGH 88
-#define STRINGID_PKMNDUGHOLE 89
-#define STRINGID_PKMNSQUEEZEDBYBIND 90
-#define STRINGID_PKMNTRAPPEDINVORTEX 91
-#define STRINGID_PKMNWRAPPEDBY 92
-#define STRINGID_PKMNCLAMPED 93
-#define STRINGID_PKMNHURTBY 94
-#define STRINGID_PKMNFREEDFROM 95
-#define STRINGID_PKMNCRASHED 96
-#define STRINGID_PKMNSHROUDEDINMIST 97
-#define STRINGID_PKMNPROTECTEDBYMIST 98
-#define STRINGID_PKMNGETTINGPUMPED 99
-#define STRINGID_PKMNHITWITHRECOIL 100
-#define STRINGID_PKMNPROTECTEDITSELF2 101
-#define STRINGID_PKMNBUFFETEDBYSANDSTORM 102
-#define STRINGID_PKMNPELTEDBYHAIL 103
-#define STRINGID_PKMNSEEDED 104
-#define STRINGID_PKMNEVADEDATTACK 105
-#define STRINGID_PKMNSAPPEDBYLEECHSEED 106
-#define STRINGID_PKMNFASTASLEEP 107
-#define STRINGID_PKMNWOKEUP 108
-#define STRINGID_PKMNUPROARKEPTAWAKE 109
-#define STRINGID_PKMNWOKEUPINUPROAR 110
-#define STRINGID_PKMNCAUSEDUPROAR 111
-#define STRINGID_PKMNMAKINGUPROAR 112
-#define STRINGID_PKMNCALMEDDOWN 113
-#define STRINGID_PKMNCANTSLEEPINUPROAR 114
-#define STRINGID_PKMNSTOCKPILED 115
-#define STRINGID_PKMNCANTSTOCKPILE 116
-#define STRINGID_PKMNCANTSLEEPINUPROAR2 117
-#define STRINGID_UPROARKEPTPKMNAWAKE 118
-#define STRINGID_PKMNSTAYEDAWAKEUSING 119
-#define STRINGID_PKMNSTORINGENERGY 120
-#define STRINGID_PKMNUNLEASHEDENERGY 121
-#define STRINGID_PKMNFATIGUECONFUSION 122
-#define STRINGID_PLAYERPICKEDUPMONEY 123
-#define STRINGID_PKMNUNAFFECTED 124
-#define STRINGID_PKMNTRANSFORMEDINTO 125
-#define STRINGID_PKMNMADESUBSTITUTE 126
-#define STRINGID_PKMNHASSUBSTITUTE 127
-#define STRINGID_SUBSTITUTEDAMAGED 128
-#define STRINGID_PKMNSUBSTITUTEFADED 129
-#define STRINGID_PKMNMUSTRECHARGE 130
-#define STRINGID_PKMNRAGEBUILDING 131
-#define STRINGID_PKMNMOVEWASDISABLED 132
-#define STRINGID_PKMNMOVEISDISABLED 133
-#define STRINGID_PKMNMOVEDISABLEDNOMORE 134
-#define STRINGID_PKMNGOTENCORE 135
-#define STRINGID_PKMNENCOREENDED 136
-#define STRINGID_PKMNTOOKAIM 137
-#define STRINGID_PKMNSKETCHEDMOVE 138
-#define STRINGID_PKMNTRYINGTOTAKEFOE 139
-#define STRINGID_PKMNTOOKFOE 140
-#define STRINGID_PKMNREDUCEDPP 141
-#define STRINGID_PKMNSTOLEITEM 142
-#define STRINGID_TARGETCANTESCAPENOW 143
-#define STRINGID_PKMNFELLINTONIGHTMARE 144
-#define STRINGID_PKMNLOCKEDINNIGHTMARE 145
-#define STRINGID_PKMNLAIDCURSE 146
-#define STRINGID_PKMNAFFLICTEDBYCURSE 147
-#define STRINGID_SPIKESSCATTERED 148
-#define STRINGID_PKMNHURTBYSPIKES 149
-#define STRINGID_PKMNIDENTIFIED 150
-#define STRINGID_PKMNPERISHCOUNTFELL 151
-#define STRINGID_PKMNBRACEDITSELF 152
-#define STRINGID_PKMNENDUREDHIT 153
-#define STRINGID_MAGNITUDESTRENGTH 154
-#define STRINGID_PKMNCUTHPMAXEDATTACK 155
-#define STRINGID_PKMNCOPIEDSTATCHANGES 156
-#define STRINGID_PKMNGOTFREE 157
-#define STRINGID_PKMNSHEDLEECHSEED 158
-#define STRINGID_PKMNBLEWAWAYSPIKES 159
-#define STRINGID_PKMNFLEDFROMBATTLE 160
-#define STRINGID_PKMNFORESAWATTACK 161
-#define STRINGID_PKMNTOOKATTACK 162
-#define STRINGID_PKMNATTACK 163
-#define STRINGID_PKMNCENTERATTENTION 164
-#define STRINGID_PKMNCHARGINGPOWER 165
-#define STRINGID_NATUREPOWERTURNEDINTO 166
-#define STRINGID_PKMNSTATUSNORMAL 167
-#define STRINGID_PKMNHASNOMOVESLEFT 168
-#define STRINGID_PKMNSUBJECTEDTOTORMENT 169
-#define STRINGID_PKMNCANTUSEMOVETORMENT 170
-#define STRINGID_PKMNTIGHTENINGFOCUS 171
-#define STRINGID_PKMNFELLFORTAUNT 172
-#define STRINGID_PKMNCANTUSEMOVETAUNT 173
-#define STRINGID_PKMNREADYTOHELP 174
-#define STRINGID_PKMNSWITCHEDITEMS 175
-#define STRINGID_PKMNCOPIEDFOE 176
-#define STRINGID_PKMNMADEWISH 177
-#define STRINGID_PKMNWISHCAMETRUE 178
-#define STRINGID_PKMNPLANTEDROOTS 179
-#define STRINGID_PKMNABSORBEDNUTRIENTS 180
-#define STRINGID_PKMNANCHOREDITSELF 181
-#define STRINGID_PKMNWASMADEDROWSY 182
-#define STRINGID_PKMNKNOCKEDOFF 183
-#define STRINGID_PKMNSWAPPEDABILITIES 184
-#define STRINGID_PKMNSEALEDOPPONENTMOVE 185
-#define STRINGID_PKMNCANTUSEMOVESEALED 186
-#define STRINGID_PKMNWANTSGRUDGE 187
-#define STRINGID_PKMNLOSTPPGRUDGE 188
-#define STRINGID_PKMNSHROUDEDITSELF 189
-#define STRINGID_PKMNMOVEBOUNCED 190
-#define STRINGID_PKMNWAITSFORTARGET 191
-#define STRINGID_PKMNSNATCHEDMOVE 192
-#define STRINGID_PKMNMADEITRAIN 193
-#define STRINGID_PKMNRAISEDSPEED 194
-#define STRINGID_PKMNPROTECTEDBY 195
-#define STRINGID_PKMNPREVENTSUSAGE 196
-#define STRINGID_PKMNRESTOREDHPUSING 197
-#define STRINGID_PKMNCHANGEDTYPEWITH 198
-#define STRINGID_PKMNPREVENTSPARALYSISWITH 199
-#define STRINGID_PKMNPREVENTSROMANCEWITH 200
-#define STRINGID_PKMNPREVENTSPOISONINGWITH 201
-#define STRINGID_PKMNPREVENTSCONFUSIONWITH 202
-#define STRINGID_PKMNRAISEDFIREPOWERWITH 203
-#define STRINGID_PKMNANCHORSITSELFWITH 204
-#define STRINGID_PKMNCUTSATTACKWITH 205
-#define STRINGID_PKMNPREVENTSSTATLOSSWITH 206
-#define STRINGID_PKMNHURTSWITH 207
-#define STRINGID_PKMNTRACED 208
-#define STRINGID_STATSHARPLY 209
-#define STRINGID_STATROSE 210
-#define STRINGID_STATHARSHLY 211
-#define STRINGID_STATFELL 212
-#define STRINGID_ATTACKERSSTATROSE 213
-#define STRINGID_DEFENDERSSTATROSE 214
-#define STRINGID_ATTACKERSSTATFELL 215
-#define STRINGID_DEFENDERSSTATFELL 216
-#define STRINGID_CRITICALHIT 217
-#define STRINGID_ONEHITKO 218
-#define STRINGID_123POOF 219
-#define STRINGID_ANDELLIPSIS 220
-#define STRINGID_NOTVERYEFFECTIVE 221
-#define STRINGID_SUPEREFFECTIVE 222
-#define STRINGID_GOTAWAYSAFELY 223
-#define STRINGID_WILDPKMNFLED 224
-#define STRINGID_NORUNNINGFROMTRAINERS 225
-#define STRINGID_CANTESCAPE 226
-#define STRINGID_DONTLEAVEBIRCH 227
-#define STRINGID_BUTNOTHINGHAPPENED 228
-#define STRINGID_BUTITFAILED 229
-#define STRINGID_ITHURTCONFUSION 230
-#define STRINGID_MIRRORMOVEFAILED 231
-#define STRINGID_STARTEDTORAIN 232
-#define STRINGID_DOWNPOURSTARTED 233
-#define STRINGID_RAINCONTINUES 234
-#define STRINGID_DOWNPOURCONTINUES 235
-#define STRINGID_RAINSTOPPED 236
-#define STRINGID_SANDSTORMBREWED 237
-#define STRINGID_SANDSTORMRAGES 238
-#define STRINGID_SANDSTORMSUBSIDED 239
-#define STRINGID_SUNLIGHTGOTBRIGHT 240
-#define STRINGID_SUNLIGHTSTRONG 241
-#define STRINGID_SUNLIGHTFADED 242
-#define STRINGID_STARTEDHAIL 243
-#define STRINGID_HAILCONTINUES 244
-#define STRINGID_HAILSTOPPED 245
-#define STRINGID_FAILEDTOSPITUP 246
-#define STRINGID_FAILEDTOSWALLOW 247
-#define STRINGID_WINDBECAMEHEATWAVE 248
-#define STRINGID_STATCHANGESGONE 249
-#define STRINGID_COINSSCATTERED 250
-#define STRINGID_TOOWEAKFORSUBSTITUTE 251
-#define STRINGID_SHAREDPAIN 252
-#define STRINGID_BELLCHIMED 253
-#define STRINGID_FAINTINTHREE 254
-#define STRINGID_NOPPLEFT 255
-#define STRINGID_BUTNOPPLEFT 256
-#define STRINGID_PLAYERUSEDITEM 257
-#define STRINGID_WALLYUSEDITEM 258
-#define STRINGID_TRAINERBLOCKEDBALL 259
-#define STRINGID_DONTBEATHIEF 260
-#define STRINGID_ITDODGEDBALL 261
-#define STRINGID_YOUMISSEDPKMN 262
-#define STRINGID_PKMNBROKEFREE 263
-#define STRINGID_ITAPPEAREDCAUGHT 264
-#define STRINGID_AARGHALMOSTHADIT 265
-#define STRINGID_SHOOTSOCLOSE 266
-#define STRINGID_GOTCHAPKMNCAUGHT 267
-#define STRINGID_GOTCHAPKMNCAUGHT2 268
-#define STRINGID_GIVENICKNAMECAPTURED 269
-#define STRINGID_PKMNSENTTOPC 270
-#define STRINGID_PKMNDATAADDEDTODEX 271
-#define STRINGID_ITISRAINING 272
-#define STRINGID_SANDSTORMISRAGING 273
-#define STRINGID_CANTESCAPE2 274
-#define STRINGID_PKMNIGNORESASLEEP 275
-#define STRINGID_PKMNIGNOREDORDERS 276
-#define STRINGID_PKMNBEGANTONAP 277
-#define STRINGID_PKMNLOAFING 278
-#define STRINGID_PKMNWONTOBEY 279
-#define STRINGID_PKMNTURNEDAWAY 280
-#define STRINGID_PKMNPRETENDNOTNOTICE 281
-#define STRINGID_ENEMYABOUTTOSWITCHPKMN 282
-#define STRINGID_CREPTCLOSER 283
-#define STRINGID_CANTGETCLOSER 284
-#define STRINGID_PKMNWATCHINGCAREFULLY 285
-#define STRINGID_PKMNCURIOUSABOUTX 286
-#define STRINGID_PKMNENTHRALLEDBYX 287
-#define STRINGID_PKMNIGNOREDX 288
-#define STRINGID_THREWPOKEBLOCKATPKMN 289
-#define STRINGID_OUTOFSAFARIBALLS 290
-#define STRINGID_PKMNSITEMCUREDPARALYSIS 291
-#define STRINGID_PKMNSITEMCUREDPOISON 292
-#define STRINGID_PKMNSITEMHEALEDBURN 293
-#define STRINGID_PKMNSITEMDEFROSTEDIT 294
-#define STRINGID_PKMNSITEMWOKEIT 295
-#define STRINGID_PKMNSITEMSNAPPEDOUT 296
-#define STRINGID_PKMNSITEMCUREDPROBLEM 297
-#define STRINGID_PKMNSITEMRESTOREDHEALTH 298
-#define STRINGID_PKMNSITEMRESTOREDPP 299
-#define STRINGID_PKMNSITEMRESTOREDSTATUS 300
-#define STRINGID_PKMNSITEMRESTOREDHPALITTLE 301
-#define STRINGID_ITEMALLOWSONLYYMOVE 302
-#define STRINGID_PKMNHUNGONWITHX 303
-#define STRINGID_EMPTYSTRING3 304
-#define STRINGID_PKMNSXPREVENTSBURNS 305
-#define STRINGID_PKMNSXBLOCKSY 306
-#define STRINGID_PKMNSXRESTOREDHPALITTLE2 307
-#define STRINGID_PKMNSXWHIPPEDUPSANDSTORM 308
-#define STRINGID_PKMNSXPREVENTSYLOSS 309
-#define STRINGID_PKMNSXINFATUATEDY 310
-#define STRINGID_PKMNSXMADEYINEFFECTIVE 311
-#define STRINGID_PKMNSXCUREDYPROBLEM 312
-#define STRINGID_ITSUCKEDLIQUIDOOZE 313
-#define STRINGID_PKMNTRANSFORMED 314
-#define STRINGID_ELECTRICITYWEAKENED 315
-#define STRINGID_FIREWEAKENED 316
-#define STRINGID_PKMNHIDUNDERWATER 317
-#define STRINGID_PKMNSPRANGUP 318
-#define STRINGID_HMMOVESCANTBEFORGOTTEN 319
-#define STRINGID_XFOUNDONEY 320
-#define STRINGID_PLAYERDEFEATEDTRAINER1 321
-#define STRINGID_SOOTHINGAROMA 322
-#define STRINGID_ITEMSCANTBEUSEDNOW 323
-#define STRINGID_FORXCOMMAYZ 324
-#define STRINGID_USINGITEMSTATOFPKMNROSE 325
-#define STRINGID_PKMNUSEDXTOGETPUMPED 326
-#define STRINGID_PKMNSXMADEYUSELESS 327
-#define STRINGID_PKMNTRAPPEDBYSANDTOMB 328
-#define STRINGID_EMPTYSTRING4 329
-#define STRINGID_ABOOSTED 330
-#define STRINGID_PKMNSXINTENSIFIEDSUN 331
-#define STRINGID_PKMNMAKESGROUNDMISS 332
-#define STRINGID_YOUTHROWABALLNOWRIGHT 333
-#define STRINGID_PKMNSXTOOKATTACK 334
-#define STRINGID_PKMNCHOSEXASDESTINY 335
-#define STRINGID_PKMNLOSTFOCUS 336
-#define STRINGID_USENEXTPKMN 337
-#define STRINGID_PKMNFLEDUSINGITS 338
-#define STRINGID_PKMNFLEDUSING 339
-#define STRINGID_PKMNWASDRAGGEDOUT 340
-#define STRINGID_PREVENTEDFROMWORKING 341
-#define STRINGID_PKMNSITEMNORMALIZEDSTATUS 342
-#define STRINGID_TRAINER1USEDITEM 343
-#define STRINGID_BOXISFULL 344
-#define STRINGID_PKMNAVOIDEDATTACK 345
-#define STRINGID_PKMNSXMADEITINEFFECTIVE 346
-#define STRINGID_PKMNSXPREVENTSFLINCHING 347
-#define STRINGID_PKMNALREADYHASBURN 348
-#define STRINGID_STATSWONTDECREASE2 349
-#define STRINGID_PKMNSXBLOCKSY2 350
-#define STRINGID_PKMNSXWOREOFF 351
-#define STRINGID_PKMNRAISEDDEFALITTLE 352
-#define STRINGID_PKMNRAISEDSPDEFALITTLE 353
-#define STRINGID_THEWALLSHATTERED 354
-#define STRINGID_PKMNSXPREVENTSYSZ 355
-#define STRINGID_PKMNSXCUREDITSYPROBLEM 356
-#define STRINGID_ATTACKERCANTESCAPE 357
-#define STRINGID_PKMNOBTAINEDX 358
-#define STRINGID_PKMNOBTAINEDX2 359
-#define STRINGID_PKMNOBTAINEDXYOBTAINEDZ 360
-#define STRINGID_BUTNOEFFECT 361
-#define STRINGID_PKMNSXHADNOEFFECTONY 362
-#define STRINGID_TWOENEMIESDEFEATED 363
-#define STRINGID_TRAINER2LOSETEXT 364
-#define STRINGID_PKMNINCAPABLEOFPOWER 365
-#define STRINGID_GLINTAPPEARSINEYE 366
-#define STRINGID_PKMNGETTINGINTOPOSITION 367
-#define STRINGID_PKMNBEGANGROWLINGDEEPLY 368
-#define STRINGID_PKMNEAGERFORMORE 369
-#define STRINGID_DEFEATEDOPPONENTBYREFEREE 370
-#define STRINGID_LOSTTOOPPONENTBYREFEREE 371
-#define STRINGID_TIEDOPPONENTBYREFEREE 372
-#define STRINGID_QUESTIONFORFEITMATCH 373
-#define STRINGID_FORFEITEDMATCH 374
-#define STRINGID_PKMNTRANSFERREDSOMEONESPC 375
-#define STRINGID_PKMNTRANSFERREDLANETTESPC 376
-#define STRINGID_PKMNBOXSOMEONESPCFULL 377
-#define STRINGID_PKMNBOXLANETTESPCFULL 378
-#define STRINGID_TRAINER1WINTEXT 379
-#define STRINGID_TRAINER2WINTEXT 380
+#define STRINGID_TRAINER1LOSETEXT 12
+#define STRINGID_PKMNGAINEDEXP 13
+#define STRINGID_PKMNGREWTOLV 14
+#define STRINGID_PKMNLEARNEDMOVE 15
+#define STRINGID_TRYTOLEARNMOVE1 16
+#define STRINGID_TRYTOLEARNMOVE2 17
+#define STRINGID_TRYTOLEARNMOVE3 18
+#define STRINGID_PKMNFORGOTMOVE 19
+#define STRINGID_STOPLEARNINGMOVE 20
+#define STRINGID_DIDNOTLEARNMOVE 21
+#define STRINGID_PKMNLEARNEDMOVE2 22
+#define STRINGID_ATTACKMISSED 23
+#define STRINGID_PKMNPROTECTEDITSELF 24
+#define STRINGID_STATSWONTINCREASE2 25
+#define STRINGID_AVOIDEDDAMAGE 26
+#define STRINGID_ITDOESNTAFFECT 27
+#define STRINGID_ATTACKERFAINTED 28
+#define STRINGID_TARGETFAINTED 29
+#define STRINGID_PLAYERGOTMONEY 30
+#define STRINGID_PLAYERWHITEOUT 31
+#define STRINGID_PLAYERWHITEOUT2 32
+#define STRINGID_PREVENTSESCAPE 33
+#define STRINGID_HITXTIMES 34
+#define STRINGID_PKMNFELLASLEEP 35
+#define STRINGID_PKMNMADESLEEP 36
+#define STRINGID_PKMNALREADYASLEEP 37
+#define STRINGID_PKMNALREADYASLEEP2 38
+#define STRINGID_PKMNWASNTAFFECTED 39
+#define STRINGID_PKMNWASPOISONED 40
+#define STRINGID_PKMNPOISONEDBY 41
+#define STRINGID_PKMNHURTBYPOISON 42
+#define STRINGID_PKMNALREADYPOISONED 43
+#define STRINGID_PKMNBADLYPOISONED 44
+#define STRINGID_PKMNENERGYDRAINED 45
+#define STRINGID_PKMNWASBURNED 46
+#define STRINGID_PKMNBURNEDBY 47
+#define STRINGID_PKMNHURTBYBURN 48
+#define STRINGID_PKMNWASFROZEN 49
+#define STRINGID_PKMNFROZENBY 50
+#define STRINGID_PKMNISFROZEN 51
+#define STRINGID_PKMNWASDEFROSTED 52
+#define STRINGID_PKMNWASDEFROSTED2 53
+#define STRINGID_PKMNWASDEFROSTEDBY 54
+#define STRINGID_PKMNWASPARALYZED 55
+#define STRINGID_PKMNWASPARALYZEDBY 56
+#define STRINGID_PKMNISPARALYZED 57
+#define STRINGID_PKMNISALREADYPARALYZED 58
+#define STRINGID_PKMNHEALEDPARALYSIS 59
+#define STRINGID_PKMNDREAMEATEN 60
+#define STRINGID_STATSWONTINCREASE 61
+#define STRINGID_STATSWONTDECREASE 62
+#define STRINGID_TEAMSTOPPEDWORKING 63
+#define STRINGID_FOESTOPPEDWORKING 64
+#define STRINGID_PKMNISCONFUSED 65
+#define STRINGID_PKMNHEALEDCONFUSION 66
+#define STRINGID_PKMNWASCONFUSED 67
+#define STRINGID_PKMNALREADYCONFUSED 68
+#define STRINGID_PKMNFELLINLOVE 69
+#define STRINGID_PKMNINLOVE 70
+#define STRINGID_PKMNIMMOBILIZEDBYLOVE 71
+#define STRINGID_PKMNBLOWNAWAY 72
+#define STRINGID_PKMNCHANGEDTYPE 73
+#define STRINGID_PKMNFLINCHED 74
+#define STRINGID_PKMNREGAINEDHEALTH 75
+#define STRINGID_PKMNHPFULL 76
+#define STRINGID_PKMNRAISEDSPDEF 77
+#define STRINGID_PKMNRAISEDDEF 78
+#define STRINGID_PKMNCOVEREDBYVEIL 79
+#define STRINGID_PKMNUSEDSAFEGUARD 80
+#define STRINGID_PKMNSAFEGUARDEXPIRED 81
+#define STRINGID_PKMNWENTTOSLEEP 82
+#define STRINGID_PKMNSLEPTHEALTHY 83
+#define STRINGID_PKMNWHIPPEDWHIRLWIND 84
+#define STRINGID_PKMNTOOKSUNLIGHT 85
+#define STRINGID_PKMNLOWEREDHEAD 86
+#define STRINGID_PKMNISGLOWING 87
+#define STRINGID_PKMNFLEWHIGH 88
+#define STRINGID_PKMNDUGHOLE 89
+#define STRINGID_PKMNSQUEEZEDBYBIND 90
+#define STRINGID_PKMNTRAPPEDINVORTEX 91
+#define STRINGID_PKMNWRAPPEDBY 92
+#define STRINGID_PKMNCLAMPED 93
+#define STRINGID_PKMNHURTBY 94
+#define STRINGID_PKMNFREEDFROM 95
+#define STRINGID_PKMNCRASHED 96
+#define STRINGID_PKMNSHROUDEDINMIST 97
+#define STRINGID_PKMNPROTECTEDBYMIST 98
+#define STRINGID_PKMNGETTINGPUMPED 99
+#define STRINGID_PKMNHITWITHRECOIL 100
+#define STRINGID_PKMNPROTECTEDITSELF2 101
+#define STRINGID_PKMNBUFFETEDBYSANDSTORM 102
+#define STRINGID_PKMNPELTEDBYHAIL 103
+#define STRINGID_PKMNSEEDED 104
+#define STRINGID_PKMNEVADEDATTACK 105
+#define STRINGID_PKMNSAPPEDBYLEECHSEED 106
+#define STRINGID_PKMNFASTASLEEP 107
+#define STRINGID_PKMNWOKEUP 108
+#define STRINGID_PKMNUPROARKEPTAWAKE 109
+#define STRINGID_PKMNWOKEUPINUPROAR 110
+#define STRINGID_PKMNCAUSEDUPROAR 111
+#define STRINGID_PKMNMAKINGUPROAR 112
+#define STRINGID_PKMNCALMEDDOWN 113
+#define STRINGID_PKMNCANTSLEEPINUPROAR 114
+#define STRINGID_PKMNSTOCKPILED 115
+#define STRINGID_PKMNCANTSTOCKPILE 116
+#define STRINGID_PKMNCANTSLEEPINUPROAR2 117
+#define STRINGID_UPROARKEPTPKMNAWAKE 118
+#define STRINGID_PKMNSTAYEDAWAKEUSING 119
+#define STRINGID_PKMNSTORINGENERGY 120
+#define STRINGID_PKMNUNLEASHEDENERGY 121
+#define STRINGID_PKMNFATIGUECONFUSION 122
+#define STRINGID_PLAYERPICKEDUPMONEY 123
+#define STRINGID_PKMNUNAFFECTED 124
+#define STRINGID_PKMNTRANSFORMEDINTO 125
+#define STRINGID_PKMNMADESUBSTITUTE 126
+#define STRINGID_PKMNHASSUBSTITUTE 127
+#define STRINGID_SUBSTITUTEDAMAGED 128
+#define STRINGID_PKMNSUBSTITUTEFADED 129
+#define STRINGID_PKMNMUSTRECHARGE 130
+#define STRINGID_PKMNRAGEBUILDING 131
+#define STRINGID_PKMNMOVEWASDISABLED 132
+#define STRINGID_PKMNMOVEISDISABLED 133
+#define STRINGID_PKMNMOVEDISABLEDNOMORE 134
+#define STRINGID_PKMNGOTENCORE 135
+#define STRINGID_PKMNENCOREENDED 136
+#define STRINGID_PKMNTOOKAIM 137
+#define STRINGID_PKMNSKETCHEDMOVE 138
+#define STRINGID_PKMNTRYINGTOTAKEFOE 139
+#define STRINGID_PKMNTOOKFOE 140
+#define STRINGID_PKMNREDUCEDPP 141
+#define STRINGID_PKMNSTOLEITEM 142
+#define STRINGID_TARGETCANTESCAPENOW 143
+#define STRINGID_PKMNFELLINTONIGHTMARE 144
+#define STRINGID_PKMNLOCKEDINNIGHTMARE 145
+#define STRINGID_PKMNLAIDCURSE 146
+#define STRINGID_PKMNAFFLICTEDBYCURSE 147
+#define STRINGID_SPIKESSCATTERED 148
+#define STRINGID_PKMNHURTBYSPIKES 149
+#define STRINGID_PKMNIDENTIFIED 150
+#define STRINGID_PKMNPERISHCOUNTFELL 151
+#define STRINGID_PKMNBRACEDITSELF 152
+#define STRINGID_PKMNENDUREDHIT 153
+#define STRINGID_MAGNITUDESTRENGTH 154
+#define STRINGID_PKMNCUTHPMAXEDATTACK 155
+#define STRINGID_PKMNCOPIEDSTATCHANGES 156
+#define STRINGID_PKMNGOTFREE 157
+#define STRINGID_PKMNSHEDLEECHSEED 158
+#define STRINGID_PKMNBLEWAWAYSPIKES 159
+#define STRINGID_PKMNFLEDFROMBATTLE 160
+#define STRINGID_PKMNFORESAWATTACK 161
+#define STRINGID_PKMNTOOKATTACK 162
+#define STRINGID_PKMNATTACK 163
+#define STRINGID_PKMNCENTERATTENTION 164
+#define STRINGID_PKMNCHARGINGPOWER 165
+#define STRINGID_NATUREPOWERTURNEDINTO 166
+#define STRINGID_PKMNSTATUSNORMAL 167
+#define STRINGID_PKMNHASNOMOVESLEFT 168
+#define STRINGID_PKMNSUBJECTEDTOTORMENT 169
+#define STRINGID_PKMNCANTUSEMOVETORMENT 170
+#define STRINGID_PKMNTIGHTENINGFOCUS 171
+#define STRINGID_PKMNFELLFORTAUNT 172
+#define STRINGID_PKMNCANTUSEMOVETAUNT 173
+#define STRINGID_PKMNREADYTOHELP 174
+#define STRINGID_PKMNSWITCHEDITEMS 175
+#define STRINGID_PKMNCOPIEDFOE 176
+#define STRINGID_PKMNMADEWISH 177
+#define STRINGID_PKMNWISHCAMETRUE 178
+#define STRINGID_PKMNPLANTEDROOTS 179
+#define STRINGID_PKMNABSORBEDNUTRIENTS 180
+#define STRINGID_PKMNANCHOREDITSELF 181
+#define STRINGID_PKMNWASMADEDROWSY 182
+#define STRINGID_PKMNKNOCKEDOFF 183
+#define STRINGID_PKMNSWAPPEDABILITIES 184
+#define STRINGID_PKMNSEALEDOPPONENTMOVE 185
+#define STRINGID_PKMNCANTUSEMOVESEALED 186
+#define STRINGID_PKMNWANTSGRUDGE 187
+#define STRINGID_PKMNLOSTPPGRUDGE 188
+#define STRINGID_PKMNSHROUDEDITSELF 189
+#define STRINGID_PKMNMOVEBOUNCED 190
+#define STRINGID_PKMNWAITSFORTARGET 191
+#define STRINGID_PKMNSNATCHEDMOVE 192
+#define STRINGID_PKMNMADEITRAIN 193
+#define STRINGID_PKMNRAISEDSPEED 194
+#define STRINGID_PKMNPROTECTEDBY 195
+#define STRINGID_PKMNPREVENTSUSAGE 196
+#define STRINGID_PKMNRESTOREDHPUSING 197
+#define STRINGID_PKMNCHANGEDTYPEWITH 198
+#define STRINGID_PKMNPREVENTSPARALYSISWITH 199
+#define STRINGID_PKMNPREVENTSROMANCEWITH 200
+#define STRINGID_PKMNPREVENTSPOISONINGWITH 201
+#define STRINGID_PKMNPREVENTSCONFUSIONWITH 202
+#define STRINGID_PKMNRAISEDFIREPOWERWITH 203
+#define STRINGID_PKMNANCHORSITSELFWITH 204
+#define STRINGID_PKMNCUTSATTACKWITH 205
+#define STRINGID_PKMNPREVENTSSTATLOSSWITH 206
+#define STRINGID_PKMNHURTSWITH 207
+#define STRINGID_PKMNTRACED 208
+#define STRINGID_STATSHARPLY 209
+#define STRINGID_STATROSE 210
+#define STRINGID_STATHARSHLY 211
+#define STRINGID_STATFELL 212
+#define STRINGID_ATTACKERSSTATROSE 213
+#define STRINGID_DEFENDERSSTATROSE 214
+#define STRINGID_ATTACKERSSTATFELL 215
+#define STRINGID_DEFENDERSSTATFELL 216
+#define STRINGID_CRITICALHIT 217
+#define STRINGID_ONEHITKO 218
+#define STRINGID_123POOF 219
+#define STRINGID_ANDELLIPSIS 220
+#define STRINGID_NOTVERYEFFECTIVE 221
+#define STRINGID_SUPEREFFECTIVE 222
+#define STRINGID_GOTAWAYSAFELY 223
+#define STRINGID_WILDPKMNFLED 224
+#define STRINGID_NORUNNINGFROMTRAINERS 225
+#define STRINGID_CANTESCAPE 226
+#define STRINGID_DONTLEAVEBIRCH 227
+#define STRINGID_BUTNOTHINGHAPPENED 228
+#define STRINGID_BUTITFAILED 229
+#define STRINGID_ITHURTCONFUSION 230
+#define STRINGID_MIRRORMOVEFAILED 231
+#define STRINGID_STARTEDTORAIN 232
+#define STRINGID_DOWNPOURSTARTED 233
+#define STRINGID_RAINCONTINUES 234
+#define STRINGID_DOWNPOURCONTINUES 235
+#define STRINGID_RAINSTOPPED 236
+#define STRINGID_SANDSTORMBREWED 237
+#define STRINGID_SANDSTORMRAGES 238
+#define STRINGID_SANDSTORMSUBSIDED 239
+#define STRINGID_SUNLIGHTGOTBRIGHT 240
+#define STRINGID_SUNLIGHTSTRONG 241
+#define STRINGID_SUNLIGHTFADED 242
+#define STRINGID_STARTEDHAIL 243
+#define STRINGID_HAILCONTINUES 244
+#define STRINGID_HAILSTOPPED 245
+#define STRINGID_FAILEDTOSPITUP 246
+#define STRINGID_FAILEDTOSWALLOW 247
+#define STRINGID_WINDBECAMEHEATWAVE 248
+#define STRINGID_STATCHANGESGONE 249
+#define STRINGID_COINSSCATTERED 250
+#define STRINGID_TOOWEAKFORSUBSTITUTE 251
+#define STRINGID_SHAREDPAIN 252
+#define STRINGID_BELLCHIMED 253
+#define STRINGID_FAINTINTHREE 254
+#define STRINGID_NOPPLEFT 255
+#define STRINGID_BUTNOPPLEFT 256
+#define STRINGID_PLAYERUSEDITEM 257
+#define STRINGID_WALLYUSEDITEM 258
+#define STRINGID_TRAINERBLOCKEDBALL 259
+#define STRINGID_DONTBEATHIEF 260
+#define STRINGID_ITDODGEDBALL 261
+#define STRINGID_YOUMISSEDPKMN 262
+#define STRINGID_PKMNBROKEFREE 263
+#define STRINGID_ITAPPEAREDCAUGHT 264
+#define STRINGID_AARGHALMOSTHADIT 265
+#define STRINGID_SHOOTSOCLOSE 266
+#define STRINGID_GOTCHAPKMNCAUGHT 267
+#define STRINGID_GOTCHAPKMNCAUGHT2 268
+#define STRINGID_GIVENICKNAMECAPTURED 269
+#define STRINGID_PKMNSENTTOPC 270
+#define STRINGID_PKMNDATAADDEDTODEX 271
+#define STRINGID_ITISRAINING 272
+#define STRINGID_SANDSTORMISRAGING 273
+#define STRINGID_CANTESCAPE2 274
+#define STRINGID_PKMNIGNORESASLEEP 275
+#define STRINGID_PKMNIGNOREDORDERS 276
+#define STRINGID_PKMNBEGANTONAP 277
+#define STRINGID_PKMNLOAFING 278
+#define STRINGID_PKMNWONTOBEY 279
+#define STRINGID_PKMNTURNEDAWAY 280
+#define STRINGID_PKMNPRETENDNOTNOTICE 281
+#define STRINGID_ENEMYABOUTTOSWITCHPKMN 282
+#define STRINGID_CREPTCLOSER 283
+#define STRINGID_CANTGETCLOSER 284
+#define STRINGID_PKMNWATCHINGCAREFULLY 285
+#define STRINGID_PKMNCURIOUSABOUTX 286
+#define STRINGID_PKMNENTHRALLEDBYX 287
+#define STRINGID_PKMNIGNOREDX 288
+#define STRINGID_THREWPOKEBLOCKATPKMN 289
+#define STRINGID_OUTOFSAFARIBALLS 290
+#define STRINGID_PKMNSITEMCUREDPARALYSIS 291
+#define STRINGID_PKMNSITEMCUREDPOISON 292
+#define STRINGID_PKMNSITEMHEALEDBURN 293
+#define STRINGID_PKMNSITEMDEFROSTEDIT 294
+#define STRINGID_PKMNSITEMWOKEIT 295
+#define STRINGID_PKMNSITEMSNAPPEDOUT 296
+#define STRINGID_PKMNSITEMCUREDPROBLEM 297
+#define STRINGID_PKMNSITEMRESTOREDHEALTH 298
+#define STRINGID_PKMNSITEMRESTOREDPP 299
+#define STRINGID_PKMNSITEMRESTOREDSTATUS 300
+#define STRINGID_PKMNSITEMRESTOREDHPALITTLE 301
+#define STRINGID_ITEMALLOWSONLYYMOVE 302
+#define STRINGID_PKMNHUNGONWITHX 303
+#define STRINGID_EMPTYSTRING3 304
+#define STRINGID_PKMNSXPREVENTSBURNS 305
+#define STRINGID_PKMNSXBLOCKSY 306
+#define STRINGID_PKMNSXRESTOREDHPALITTLE2 307
+#define STRINGID_PKMNSXWHIPPEDUPSANDSTORM 308
+#define STRINGID_PKMNSXPREVENTSYLOSS 309
+#define STRINGID_PKMNSXINFATUATEDY 310
+#define STRINGID_PKMNSXMADEYINEFFECTIVE 311
+#define STRINGID_PKMNSXCUREDYPROBLEM 312
+#define STRINGID_ITSUCKEDLIQUIDOOZE 313
+#define STRINGID_PKMNTRANSFORMED 314
+#define STRINGID_ELECTRICITYWEAKENED 315
+#define STRINGID_FIREWEAKENED 316
+#define STRINGID_PKMNHIDUNDERWATER 317
+#define STRINGID_PKMNSPRANGUP 318
+#define STRINGID_HMMOVESCANTBEFORGOTTEN 319
+#define STRINGID_XFOUNDONEY 320
+#define STRINGID_PLAYERDEFEATEDTRAINER1 321
+#define STRINGID_SOOTHINGAROMA 322
+#define STRINGID_ITEMSCANTBEUSEDNOW 323
+#define STRINGID_FORXCOMMAYZ 324
+#define STRINGID_USINGITEMSTATOFPKMNROSE 325
+#define STRINGID_PKMNUSEDXTOGETPUMPED 326
+#define STRINGID_PKMNSXMADEYUSELESS 327
+#define STRINGID_PKMNTRAPPEDBYSANDTOMB 328
+#define STRINGID_EMPTYSTRING4 329
+#define STRINGID_ABOOSTED 330
+#define STRINGID_PKMNSXINTENSIFIEDSUN 331
+#define STRINGID_PKMNMAKESGROUNDMISS 332
+#define STRINGID_YOUTHROWABALLNOWRIGHT 333
+#define STRINGID_PKMNSXTOOKATTACK 334
+#define STRINGID_PKMNCHOSEXASDESTINY 335
+#define STRINGID_PKMNLOSTFOCUS 336
+#define STRINGID_USENEXTPKMN 337
+#define STRINGID_PKMNFLEDUSINGITS 338
+#define STRINGID_PKMNFLEDUSING 339
+#define STRINGID_PKMNWASDRAGGEDOUT 340
+#define STRINGID_PREVENTEDFROMWORKING 341
+#define STRINGID_PKMNSITEMNORMALIZEDSTATUS 342
+#define STRINGID_TRAINER1USEDITEM 343
+#define STRINGID_BOXISFULL 344
+#define STRINGID_PKMNAVOIDEDATTACK 345
+#define STRINGID_PKMNSXMADEITINEFFECTIVE 346
+#define STRINGID_PKMNSXPREVENTSFLINCHING 347
+#define STRINGID_PKMNALREADYHASBURN 348
+#define STRINGID_STATSWONTDECREASE2 349
+#define STRINGID_PKMNSXBLOCKSY2 350
+#define STRINGID_PKMNSXWOREOFF 351
+#define STRINGID_PKMNRAISEDDEFALITTLE 352
+#define STRINGID_PKMNRAISEDSPDEFALITTLE 353
+#define STRINGID_THEWALLSHATTERED 354
+#define STRINGID_PKMNSXPREVENTSYSZ 355
+#define STRINGID_PKMNSXCUREDITSYPROBLEM 356
+#define STRINGID_ATTACKERCANTESCAPE 357
+#define STRINGID_PKMNOBTAINEDX 358
+#define STRINGID_PKMNOBTAINEDX2 359
+#define STRINGID_PKMNOBTAINEDXYOBTAINEDZ 360
+#define STRINGID_BUTNOEFFECT 361
+#define STRINGID_PKMNSXHADNOEFFECTONY 362
+#define STRINGID_TWOENEMIESDEFEATED 363
+#define STRINGID_TRAINER2LOSETEXT 364
+#define STRINGID_PKMNINCAPABLEOFPOWER 365
+#define STRINGID_GLINTAPPEARSINEYE 366
+#define STRINGID_PKMNGETTINGINTOPOSITION 367
+#define STRINGID_PKMNBEGANGROWLINGDEEPLY 368
+#define STRINGID_PKMNEAGERFORMORE 369
+#define STRINGID_DEFEATEDOPPONENTBYREFEREE 370
+#define STRINGID_LOSTTOOPPONENTBYREFEREE 371
+#define STRINGID_TIEDOPPONENTBYREFEREE 372
+#define STRINGID_QUESTIONFORFEITMATCH 373
+#define STRINGID_FORFEITEDMATCH 374
+#define STRINGID_PKMNTRANSFERREDSOMEONESPC 375
+#define STRINGID_PKMNTRANSFERREDLANETTESPC 376
+#define STRINGID_PKMNBOXSOMEONESPCFULL 377
+#define STRINGID_PKMNBOXLANETTESPCFULL 378
+#define STRINGID_TRAINER1WINTEXT 379
+#define STRINGID_TRAINER2WINTEXT 380
+
+#define STRINGID_ENDUREDSTURDY 381
+#define STRINGID_POWERHERB 382
+#define STRINGID_HURTBYITEM 383
+#define STRINGID_PSNBYITEM 384
+#define STRINGID_BRNBYITEM 385
+#define STRINGID_DEFABILITYIN 386
+#define STRINGID_GRAVITYINTENSIFIED 387
+#define STRINGID_TARGETIDENTIFIED 388
+#define STRINGID_TARGETWOKEUP 389
+#define STRINGID_PKMNSTOLEANDATEITEM 390
+#define STRINGID_TAILWINDBLEW 391
+#define STRINGID_PKMNWENTBACK 392
+#define STRINGID_PKMNCANTUSEITEMSANYMORE 393
+#define STRINGID_PKMNFLUNG 394
+#define STRINGID_PKMNPREVENTEDFROMHEALING 395
+#define STRINGID_PKMNSWITCHEDATKANDDEF 396
+#define STRINGID_PKMNSABILITYSUPPRESSED 397
+#define STRINGID_SHIELDEDFROMCRITICALHITS 398
+#define STRINGID_SWITCHEDATKANDSPATK 399
+#define STRINGID_SWITCHEDDEFANDSPDEF 400
+#define STRINGID_PKMNACQUIREDABILITY 401
+#define STRINGID_POISONSPIKESSCATTERED 402
+#define STRINGID_PKMNSWITCHEDSTATCHANGES 403
+#define STRINGID_PKMNSURROUNDEDWITHVEILOFWATER 404
+#define STRINGID_PKMNLEVITATEDONELECTROMAGNETISM 405
+#define STRINGID_PKMNTWISTEDDIMENSIONS 406
+#define STRINGID_POINTEDSTONESFLOAT 407
+#define STRINGID_CLOAKEDINMYSTICALMOONLIGHT 408
+#define STRINGID_TRAPPEDBYSWIRLINGMAGMA 409
+#define STRINGID_VANISHEDINSTANTLY 410
+#define STRINGID_PROTECTEDTEAM 411
+#define STRINGID_SHAREDITSGUARD 412
+#define STRINGID_SHAREDITSPOWER 413
+#define STRINGID_SWAPSDEFANDSPDEFOFALLPOKEMON 414
+#define STRINGID_BECAMENIMBLE 415
+#define STRINGID_HURLEDINTOTHEAIR 416
+#define STRINGID_HELDITEMSLOSEEFFECTS 417
+#define STRINGID_FELLSTRAIGHTDOWN 418
+#define STRINGID_TARGETCHANGEDTYPE 419
+#define STRINGID_PKMNACQUIREDSIMPLE 420
+#define STRINGID_EMPTYSTRING5 421
+#define STRINGID_KINDOFFER 422
+#define STRINGID_RESETSTARGETSSTATLEVELS 423
+#define STRINGID_EMPTYSTRING6 424
+#define STRINGID_ALLYSWITCHPOSITION 425
+#define STRINGID_RESTORETARGETSHEALTH 426
+#define STRINGID_TOOKPJMNINTOTHESKY 427
+#define STRINGID_FREEDFROMSKYDROP 428
+#define STRINGID_POSTPONETARGETMOVE 429
+#define STRINGID_REFLECTTARGETSTYPE 430
+#define STRINGID_TRANSFERHELDITEM 431
+#define STRINGID_EMBARGOENDS 432
+#define STRINGID_ELECTROMAGNETISM 433
+#define STRINGID_BUFFERENDS 434
+#define STRINGID_TELEKINESISENDS 435
+#define STRINGID_TAILWINDENDS 436
+#define STRINGID_LUCKYCHANTENDS 437
+#define STRINGID_TRICKROOMENDS 438
+#define STRINGID_WONDERROOMENDS 439
+#define STRINGID_MAGICROOMENDS 440
+#define STRINGID_MUDSPORTENDS 441
+#define STRINGID_WATERSPORTENDS 442
+#define STRINGID_GRAVITYENDS 443
+#define STRINGID_AQUARINGHEAL 444
+#define STRINGID_AURORAVEILENDS 445
+#define STRINGID_ELECTRICTERRAINENDS 446
+#define STRINGID_MISTYTERRAINENDS 447
+#define STRINGID_PSYCHICTERRAINENDS 448
+#define STRINGID_GRASSYTERRAINENDS 449
+#define STRINGID_TARGETABILITYSTATRAISE 450
+#define STRINGID_TARGETSSTATWASMAXEDOUT 451
+#define STRINGID_ATTACKERABILITYSTATRAISE 452
+#define STRINGID_POISONHEALHPUP 453
+#define STRINGID_BADDREAMSDMG 454
+#define STRINGID_MOLDBREAKERENTERS 455
+#define STRINGID_TERAVOLTENTERS 456
+#define STRINGID_TURBOBLAZEENTERS 457
+#define STRINGID_SLOWSTARTENTERS 458
+#define STRINGID_SLOWSTARTEND 459
+#define STRINGID_SOLARPOWERHPDROP 460
+#define STRINGID_AFTERMATHDMG 461
+#define STRINGID_ANTICIPATIONACTIVATES 462
+#define STRINGID_FOREWARNACTIVATES 463
+#define STRINGID_ICEBODYHPGAIN 464
+#define STRINGID_SNOWWARNINGHAIL 465
+#define STRINGID_FRISKACTIVATES 466
+#define STRINGID_UNNERVEENTERS 467
+#define STRINGID_HARVESTBERRY 468
+#define STRINGID_LASTABILITYRAISEDSTAT 469
+#define STRINGID_MAGICBOUNCEACTIVATES 470
+#define STRINGID_PROTEANTYPECHANGE 471
+#define STRINGID_SYMBIOSISITEMPASS 472
+#define STRINGID_STEALTHROCKDMG 473
+#define STRINGID_TOXICSPIKESABSORBED 474
+#define STRINGID_TOXICSPIKESPOISONED 475
+#define STRINGID_STICKYWEBSWITCHIN 476
+#define STRINGID_HEALINGWISHCAMETRUE 477
+#define STRINGID_HEALINGWISHHEALED 478
+#define STRINGID_LUNARDANCECAMETRUE 479
+#define STRINGID_CUSEDBODYDISABLED 480
+#define STRINGID_ATTACKERACQUIREDABILITY 481
+#define STRINGID_TARGETABILITYSTATLOWER 482
+#define STRINGID_TARGETSTATWONTGOHIGHER 483
+#define STRINGID_PKMNMOVEBOUNCEDABILITY 484
+#define STRINGID_IMPOSTERTRANSFORM 485
+#define STRINGID_ASSAULTVESTDOESNTALLOW 486
+#define STRINGID_GRAVITYPREVENTSUSAGE 487
+#define STRINGID_HEALBLOCKPREVENTSUSAGE 488
+#define STRINGID_NOTDONEYET 489
+#define STRINGID_STICKYWEBUSED 490
+#define STRINGID_QUASHSUCCESS 491
+#define STRINGID_PKMNBLEWAWAYTOXICSPIKES 492
+#define STRINGID_PKMNBLEWAWAYSTICKYWEB 493
+#define STRINGID_PKMNBLEWAWAYSTEALTHROCK 494
+#define STRINGID_IONDELUGEON 495
+#define STRINGID_TOPSYTURVYSWITCHEDSTATS 496
+#define STRINGID_TERRAINBECOMESMISTY 497
+#define STRINGID_TERRAINBECOMESGRASSY 498
+#define STRINGID_TERRAINBECOMESELECTRIC 499
+#define STRINGID_TERRAINBECOMESPSYCHIC 500
+#define STRINGID_TARGETELECTRIFIED 501
+#define STRINGID_MEGAEVOREACTING 502
+#define STRINGID_MEGAEVOEVOLVED 503
+#define STRINGID_DRASTICALLY 504
+#define STRINGID_SEVERELY 505
+#define STRINGID_INFESTATION 506
+#define STRINGID_NOEFFECTONTARGET 507
+#define STRINGID_BURSTINGFLAMESHIT 508
+#define STRINGID_BESTOWITEMGIVING 509
+#define STRINGID_THIRDTYPEADDED 510
+#define STRINGID_FELLFORFEINT 511
+#define STRINGID_POKEMONCANNOTUSEMOVE 512
+#define STRINGID_COVEREDINPOWDER 513
+#define STRINGID_POWDEREXPLODES 514
+#define STRINGID_BELCHCANTSELECT 515
+#define STRINGID_SPECTRALTHIEFSTEAL 516
+#define STRINGID_GRAVITYGROUNDING 517
+#define STRINGID_MISTYTERRAINPREVENTS 518
+#define STRINGID_GRASSYTERRAINHEALS 519
+#define STRINGID_ELECTRICTERRAINPREVENTS 520
+#define STRINGID_PSYCHICTERRAINPREVENTS 521
+#define STRINGID_SAFETYGOGGLESPROTECTED 522
+#define STRINGID_FLOWERVEILPROTECTED 523
+#define STRINGID_SWEETVEILPROTECTED 524
+#define STRINGID_AROMAVEILPROTECTED 525
+#define STRINGID_CELEBRATEMESSAGE 526
+#define STRINGID_USEDINSTRUCTEDMOVE 527
+#define STRINGID_THROATCHOPENDS 528
+#define STRINGID_PKMNCANTUSEMOVETHROATCHOP 529
+#define STRINGID_LASERFOCUS 530
+#define STRINGID_GEMACTIVATES 531
+#define STRINGID_BERRYDMGREDUCES 532
+#define STRINGID_TARGETATEITEM 533
+#define STRINGID_AIRBALLOONFLOAT 534
+#define STRINGID_AIRBALLOONPOP 535
+#define STRINGID_INCINERATEBURN 536
+#define STRINGID_BUGBITE 537
+#define STRINGID_ILLUSIONWOREOFF 538
+#define STRINGID_ATTACKERCUREDTARGETSTATUS 539
+#define STRINGID_ATTACKERLOSTFIRETYPE 540
+#define STRINGID_HEALERCURE 541
+#define STRINGID_SCRIPTINGABILITYSTATRAISE 542
+#define STRINGID_RECEIVERABILITYTAKEOVER 543
+#define STRINGID_PKNMABSORBINGPOWER 544
+#define STRINGID_NOONEWILLBEABLETORUNAWAY 545
+#define STRINGID_DESTINYKNOTACTIVATES 546
+#define STRINGID_CLOAKEDINAFREEZINGLIGHT 547
+#define STRINGID_STATWASNOTLOWERED 548
+#define STRINGID_FERVENTWISHREACHED 549
+#define STRINGID_AIRLOCKACTIVATES 550
+#define STRINGID_PRESSUREENTERS 551
+#define STRINGID_DARKAURAENTERS 552
+#define STRINGID_FAIRYAURAENTERS 553
+#define STRINGID_AURABREAKENTERS 554
+#define STRINGID_COMATOSEENTERS 555
+#define STRINGID_SCREENCLEANERENTERS 556
+#define STRINGID_FETCHEDPOKEBALL 557
+#define STRINGID_BATTLERABILITYRAISEDSTAT 558
+#define STRINGID_ASANDSTORMKICKEDUP 559
+#define STRINGID_PKMNSWILLPERISHIN3TURNS 560
+#define STRINGID_ABILITYRAISEDSTATDRASTICALLY 561
+#define STRINGID_AURAFLAREDTOLIFE 562
+#define STRINGID_ASONEENTERS 563
+#define STRINGID_CURIOUSMEDICINEENTERS 564
+#define STRINGID_CANACTFASTERTHANKSTO 565
+#define STRINGID_MICLEBERRYACTIVATES 566
+#define STRINGID_PKMNSHOOKOFFTHETAUNT 567
+#define STRINGID_PKMNGOTOVERITSINFATUATION 568
+#define STRINGID_ITEMCANNOTBEREMOVED 569
+#define STRINGID_STICKYBARBTRANSFER 570
+#define STRINGID_PKMNBURNHEALED 571
+#define STRINGID_REDCARDACTIVATE 572
+#define STRINGID_EJECTBUTTONACTIVATE 573
+#define STRINGID_ATKGOTOVERINFATUATION 574
+#define STRINGID_TORMENTEDNOMORE 575
+#define STRINGID_HEALBLOCKEDNOMORE 576
+#define STRINGID_ATTACKERBECAMEFULLYCHARGED 577
+#define STRINGID_ATTACKERBECAMEASHSPECIES 578
+#define STRINGID_EXTREMELYHARSHSUNLIGHT 579
+#define STRINGID_EXTREMESUNLIGHTFADED 580
+#define STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT 581
+#define STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED 582
+#define STRINGID_HEAVYRAIN 583
+#define STRINGID_HEAVYRAINLIFTED 584
+#define STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN 585
+#define STRINGID_NORELIEFROMHEAVYRAIN 586
+#define STRINGID_MYSTERIOUSAIRCURRENT 587
+#define STRINGID_STRONGWINDSDISSIPATED 588
+#define STRINGID_MYSTERIOUSAIRCURRENTBLOWSON 589
+#define STRINGID_ATTACKWEAKENEDBSTRONGWINDS 590
+#define STRINGID_STUFFCHEEKSCANTSELECT 591
+#define STRINGID_PKMNREVERTEDTOPRIMAL 592
+#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 593
+#define STRINGID_BUTHOOPACANTUSEIT 594
+#define STRINGID_BROKETHROUGHPROTECTION 595
+#define STRINGID_ABILITYALLOWSONLYMOVE 596
+#define STRINGID_SWAPPEDABILITIES 597
+#define STRINGID_PASTELVEILPROTECTED 598
+#define STRINGID_PASTELVEILENTERS 599
+#define STRINGID_BATTLERTYPECHANGEDTO 600
+#define STRINGID_BOTHCANNOLONGERESCAPE 601
+#define STRINGID_CANTESCAPEDUETOUSEDMOVE 602
+#define STRINGID_PKMNBECAMEWEAKERTOFIRE 603
+#define STRINGID_ABOUTTOUSEPOLTERGEIST 604
+#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 605
+#define STRINGID_NEUTRALIZINGGASENTERS 606
+#define STRINGID_NEUTRALIZINGGASOVER 607
+#define STRINGID_TARGETTOOHEAVY 608
+#define STRINGID_PKMNTOOKTARGETHIGH 609
+#define STRINGID_PKMNINSNAPTRAP 610
+#define STRINGID_METEORBEAMCHARGING 611
+#define STRINGID_HEATUPBEAK 612
+#define STRINGID_COURTCHANGE 613
+#define STRINGID_PLAYERLOSTTOENEMYTRAINER 614
+#define STRINGID_PLAYERPAIDPRIZEMONEY 615
+#define STRINGID_ZPOWERSURROUNDS 616
+#define STRINGID_ZMOVEUNLEASHED 617
+#define STRINGID_ZMOVERESETSSTATS 618
+#define STRINGID_ZMOVEALLSTATSUP 619
+#define STRINGID_ZMOVEZBOOSTCRIT 620
+#define STRINGID_ZMOVERESTOREHP 621
+#define STRINGID_ZMOVESTATUP 622
+#define STRINGID_ZMOVEHPTRAP 623
+#define STRINGID_TERRAINREMOVED 624
-#define BATTLESTRINGS_COUNT 381
+#define BATTLESTRINGS_COUNT 625
// This is the string id that gBattleStringsTable starts with.
// String ids before this (e.g. STRINGID_INTROMSG) are not in the table,
@@ -424,14 +670,19 @@
#define B_MSG_LEECH_SEED_OOZE 4
// gFirstTurnOfTwoStringIds
-#define B_MSG_TURN1_RAZOR_WIND 0
-#define B_MSG_TURN1_SOLAR_BEAM 1
-#define B_MSG_TURN1_SKULL_BASH 2
-#define B_MSG_TURN1_SKY_ATTACK 3
-#define B_MSG_TURN1_FLY 4
-#define B_MSG_TURN1_DIG 5
-#define B_MSG_TURN1_DIVE 6
-#define B_MSG_TURN1_BOUNCE 7
+#define B_MSG_TURN1_RAZOR_WIND 0
+#define B_MSG_TURN1_SOLAR_BEAM 1
+#define B_MSG_TURN1_SKULL_BASH 2
+#define B_MSG_TURN1_SKY_ATTACK 3
+#define B_MSG_TURN1_FLY 4
+#define B_MSG_TURN1_DIG 5
+#define B_MSG_TURN1_DIVE 6
+#define B_MSG_TURN1_BOUNCE 7
+#define B_MSG_TURN1_PHANTOM_FORCE 8
+#define B_MSG_TURN1_GEOMANCY 9
+#define B_MSG_TURN1_FREEZE_SHOCK 10
+#define B_MSG_TURN1_SKY_DROP 11
+#define B_MSG_TURN1_METEOR_BEAM 12
// gMoveWeatherChangeStringIds
#define B_MSG_STARTED_RAIN 0
@@ -462,6 +713,7 @@
#define B_MSG_PROTECTED_ITSELF 0
#define B_MSG_BRACED_ITSELF 1
#define B_MSG_PROTECT_FAILED 2
+#define B_MSG_PROTECTED_TEAM 3
// gRestUsedStringIds
#define B_MSG_REST 0
@@ -599,6 +851,57 @@
#define B_MSG_REF_DRAW 7
#define B_MSG_REF_COMMENCE_BATTLE 8
-#define NUM_TRAPPING_MOVES 6
+// gSwitchInAbilityStringIds
+#define B_MSG_SWITCHIN_MOLDBREAKER 0
+#define B_MSG_SWITCHIN_TERAVOLT 1
+#define B_MSG_SWITCHIN_TURBOBLAZE 2
+#define B_MSG_SWITCHIN_SLOWSTART 3
+#define B_MSG_SWITCHIN_UNNERVE 4
+#define B_MSG_SWITCHIN_ANTICIPATION 5
+#define B_MSG_SWITCHIN_FOREWARN 6
+#define B_MSG_SWITCHIN_PRESSURE 7
+#define B_MSG_SWITCHIN_DARKAURA 8
+#define B_MSG_SWITCHIN_FAIRYAURA 9
+#define B_MSG_SWITCHIN_AURABREAK 10
+#define B_MSG_SWITCHIN_COMATOSE 11
+#define B_MSG_SWITCHIN_SCREENCLEANER 12
+#define B_MSG_SWITCHIN_ASONE 13
+#define B_MSG_SWITCHIN_CURIOUS_MEDICINE 14
+#define B_MSG_SWITCHIN_PASTEL_VEIL 15
+#define B_MSG_SWITCHIN_NEUTRALIZING_GAS 16
+
+// gMentalHerbCureStringIds
+#define B_MSG_MENTALHERBCURE_INFATUATION 0
+#define B_MSG_MENTALHERBCURE_TAUNT 1
+#define B_MSG_MENTALHERBCURE_ENCORE 2
+#define B_MSG_MENTALHERBCURE_TORMENT 3
+#define B_MSG_MENTALHERBCURE_HEALBLOCK 4
+#define B_MSG_MENTALHERBCURE_DISABLE 5
+
+// gTerrainPreventsStringIds
+#define B_MSG_TERRAINPREVENTS_MISTY 0
+#define B_MSG_TERRAINPREVENTS_ELECTRIC 1
+#define B_MSG_TERRAINPREVENTS_PSYCHIC 2
+
+// gWrappedStringIds
+#define B_MSG_WRAPPED_BIND 0
+#define B_MSG_WRAPPED_WRAP 1
+#define B_MSG_WRAPPED_FIRE_SPIN 2
+#define B_MSG_WRAPPED_CLAMP 3
+#define B_MSG_WRAPPED_WHIRLPOOL 4
+#define B_MSG_WRAPPED_SAND_TOMB 5
+#define B_MSG_WRAPPED_MAGMA_STORM 6
+#define B_MSG_WRAPPED_INFESTATION 7
+#define B_MSG_WRAPPED_SNAP_TRAP 8
+#define NUM_TRAPPING_MOVES 9
+
+// z effects
+#define B_MSG_Z_RESET_STATS 0
+#define B_MSG_Z_ALL_STATS_UP 1
+#define B_MSG_Z_BOOST_CRITS 2
+#define B_MSG_Z_FOLLOW_ME 3
+#define B_MSG_Z_RECOVER_HP 4
+#define B_MSG_Z_STAT_UP 5
+#define B_MSG_Z_HP_TRAP 6
#endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H
diff --git a/include/constants/battle_tower.h b/include/constants/battle_tower.h
index 002422d850..47858e807c 100644
--- a/include/constants/battle_tower.h
+++ b/include/constants/battle_tower.h
@@ -38,4 +38,10 @@
#define BATTLE_TOWER_LINKSTAT_MEMBER_RETIRE 2
#define BATTLE_TOWER_LINKSTAT_LEADER_RETIRE 3
+// Ids for special multi battle types
+#define MULTI_BATTLE_2_VS_2 0
+#define MULTI_BATTLE_2_VS_WILD 1
+#define MULTI_BATTLE_2_VS_1 2
+#define MULTI_BATTLE_CHOOSE_MONS 0x80
+
#endif //GUARD_CONSTANTS_BATTLE_TOWER_H
diff --git a/include/constants/contest.h b/include/constants/contest.h
index 775dcbe62b..f7b858c4a3 100644
--- a/include/constants/contest.h
+++ b/include/constants/contest.h
@@ -154,67 +154,93 @@
#define CONTEST_EFFECT_TYPE_SPECIAL_APPEAL 5
#define CONTEST_EFFECT_TYPE_TURN_ORDER 6
-#define COMBO_STARTER_RAIN_DANCE 1
-#define COMBO_STARTER_RAGE 2
-#define COMBO_STARTER_FOCUS_ENERGY 3
-#define COMBO_STARTER_HYPNOSIS 4
-#define COMBO_STARTER_ENDURE 5
-#define COMBO_STARTER_HORN_ATTACK 6
-#define COMBO_STARTER_SWORDS_DANCE 7
-#define COMBO_STARTER_STOCKPILE 8
-#define COMBO_STARTER_SUNNY_DAY 9
-#define COMBO_STARTER_REST 10
-#define COMBO_STARTER_VICE_GRIP 11
-#define COMBO_STARTER_DEFENSE_CURL 12
-#define COMBO_STARTER_CHARGE 13
-#define COMBO_STARTER_ROCK_THROW 14
-#define COMBO_STARTER_YAWN 15
-#define COMBO_STARTER_SCARY_FACE 16
-#define COMBO_STARTER_POWDER_SNOW 17
-#define COMBO_STARTER_LOCK_ON 18
-#define COMBO_STARTER_SOFT_BOILED 19
-#define COMBO_STARTER_MEAN_LOOK 20
-#define COMBO_STARTER_SCRATCH 21
-#define COMBO_STARTER_GROWTH 22
-#define COMBO_STARTER_HAIL 23
-#define COMBO_STARTER_SANDSTORM 24
-#define COMBO_STARTER_BELLY_DRUM 25
-#define COMBO_STARTER_MIND_READER 26
-#define COMBO_STARTER_DRAGON_BREATH 27
-#define COMBO_STARTER_DRAGON_RAGE 28
-#define COMBO_STARTER_DRAGON_DANCE 29
-#define COMBO_STARTER_SURF 30
-#define COMBO_STARTER_DIVE 31
-#define COMBO_STARTER_STRING_SHOT 32
-#define COMBO_STARTER_LEER 33
-#define COMBO_STARTER_TAUNT 34
-#define COMBO_STARTER_CHARM 35
-#define COMBO_STARTER_HARDEN 36
-#define COMBO_STARTER_SING 37
-#define COMBO_STARTER_EARTHQUAKE 38
-#define COMBO_STARTER_DOUBLE_TEAM 39
-#define COMBO_STARTER_CURSE 40
-#define COMBO_STARTER_SWEET_SCENT 41
-#define COMBO_STARTER_SLUDGE 42
-#define COMBO_STARTER_SLUDGE_BOMB 43
-#define COMBO_STARTER_THUNDER_PUNCH 44
-#define COMBO_STARTER_FIRE_PUNCH 45
-#define COMBO_STARTER_ICE_PUNCH 46
-#define COMBO_STARTER_PECK 47
-#define COMBO_STARTER_METAL_SOUND 48
-#define COMBO_STARTER_MUD_SPORT 49
-#define COMBO_STARTER_WATER_SPORT 50
-#define COMBO_STARTER_BONE_CLUB 51
-#define COMBO_STARTER_BONEMERANG 52
-#define COMBO_STARTER_BONE_RUSH 53
-#define COMBO_STARTER_SAND_ATTACK 54
-#define COMBO_STARTER_MUD_SLAP 55
-#define COMBO_STARTER_FAKE_OUT 56
-#define COMBO_STARTER_PSYCHIC 57
-#define COMBO_STARTER_KINESIS 58
-#define COMBO_STARTER_CONFUSION 59
-#define COMBO_STARTER_POUND 60
-#define COMBO_STARTER_SMOG 61
-#define COMBO_STARTER_CALM_MIND 62
+#define COMBO_STARTER_POUND 1
+#define COMBO_STARTER_FIRE_PUNCH 2
+#define COMBO_STARTER_ICE_PUNCH 3
+#define COMBO_STARTER_THUNDER_PUNCH 4
+#define COMBO_STARTER_SCRATCH 5
+#define COMBO_STARTER_VICE_GRIP 6
+#define COMBO_STARTER_SWORDS_DANCE 7
+#define COMBO_STARTER_SAND_ATTACK 8
+#define COMBO_STARTER_HORN_ATTACK 9
+#define COMBO_STARTER_LEER 10
+#define COMBO_STARTER_SING 11
+#define COMBO_STARTER_SURF 12
+#define COMBO_STARTER_PECK 13
+#define COMBO_STARTER_LEECH_SEED 14
+#define COMBO_STARTER_GROWTH 15
+#define COMBO_STARTER_STRING_SHOT 16
+#define COMBO_STARTER_DRAGON_RAGE 17
+#define COMBO_STARTER_ROCK_THROW 18
+#define COMBO_STARTER_EARTHQUAKE 19
+#define COMBO_STARTER_TOXIC 20
+#define COMBO_STARTER_CONFUSION 21
+#define COMBO_STARTER_PSYCHIC 22
+#define COMBO_STARTER_HYPNOSIS 23
+#define COMBO_STARTER_RAGE 24
+#define COMBO_STARTER_DOUBLE_TEAM 25
+#define COMBO_STARTER_HARDEN 26
+#define COMBO_STARTER_DEFENSE_CURL 27
+#define COMBO_STARTER_FOCUS_ENERGY 28
+#define COMBO_STARTER_SMOG 29
+#define COMBO_STARTER_SLUDGE 30
+#define COMBO_STARTER_BONE_CLUB 31
+#define COMBO_STARTER_KINESIS 32
+#define COMBO_STARTER_SOFT_BOILED 33
+#define COMBO_STARTER_BONEMERANG 34
+#define COMBO_STARTER_REST 35
+#define COMBO_STARTER_MIND_READER 36
+#define COMBO_STARTER_CURSE 37
+#define COMBO_STARTER_POWDER_SNOW 38
+#define COMBO_STARTER_SCARY_FACE 39
+#define COMBO_STARTER_BELLY_DRUM 40
+#define COMBO_STARTER_SLUDGE_BOMB 41
+#define COMBO_STARTER_MUD_SLAP 42
+#define COMBO_STARTER_BONE_RUSH 43
+#define COMBO_STARTER_LOCK_ON 44
+#define COMBO_STARTER_SANDSTORM 45
+#define COMBO_STARTER_ENDURE 46
+#define COMBO_STARTER_CHARM 47
+#define COMBO_STARTER_MEAN_LOOK 48
+#define COMBO_STARTER_HEAL_BELL 49
+#define COMBO_STARTER_DRAGON_BREATH 50
+#define COMBO_STARTER_SWEET_SCENT 51
+#define COMBO_STARTER_RAIN_DANCE 52
+#define COMBO_STARTER_SUNNY_DAY 53
+#define COMBO_STARTER_FAKE_OUT 54
+#define COMBO_STARTER_STOCKPILE 55
+#define COMBO_STARTER_HAIL 56
+#define COMBO_STARTER_CHARGE 57
+#define COMBO_STARTER_TAUNT 58
+#define COMBO_STARTER_REVENGE 59
+#define COMBO_STARTER_YAWN 60
+#define COMBO_STARTER_DIVE 61
+#define COMBO_STARTER_MUD_SPORT 62
+#define COMBO_STARTER_METAL_SOUND 63
+#define COMBO_STARTER_WATER_SPORT 64
+#define COMBO_STARTER_CALM_MIND 65
+#define COMBO_STARTER_DRAGON_DANCE 66
+#define COMBO_STARTER_PAYBACK 67
+#define COMBO_STARTER_LUCKY_CHANT 68
+#define COMBO_STARTER_WORRY_SEED 69
+#define COMBO_STARTER_DRAGON_RUSH 70
+#define COMBO_STARTER_BRAVE_BIRD 71
+#define COMBO_STARTER_THUNDER_FANG 72
+#define COMBO_STARTER_ICE_FANG 73
+#define COMBO_STARTER_FIRE_FANG 74
+#define COMBO_STARTER_ATTACK_ORDER 75
+#define COMBO_STARTER_DEFEND_ORDER 76
+#define COMBO_STARTER_HEAL_ORDER 77
+#define COMBO_STARTER_SCALD 78
+#define COMBO_STARTER_DRAGON_TAIL 79
+#define COMBO_STARTER_HYPERSPACE_HOLE 80
+#define COMBO_STARTER_THOUSAND_ARROWS 81
+#define COMBO_STARTER_THOUSAND_WAVES 82
+#define COMBO_STARTER_HYPERSPACE_FURY 83
+#define COMBO_STARTER_SHADOW_BONE 84
+#define COMBO_STARTER_ELECTRIC_TERRAIN 85
+#define COMBO_STARTER_MISTY_TERRAIN 86
+#define COMBO_STARTER_GRASSY_TERRAIN 87
+#define COMBO_STARTER_PSYCHIC_TERRAIN 88
#endif // GUARD_CONSTANTS_CONTEST_H
diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h
index a9d59935ec..af5af53403 100755
--- a/include/constants/event_object_movement.h
+++ b/include/constants/event_object_movement.h
@@ -232,8 +232,8 @@
#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT 0x91
#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT 0x92
#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT 0x93
-#define MOVEMENT_ACTION_STORE_AND_LOCK_ANIM 0x94
-#define MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM 0x95
+#define MOVEMENT_ACTION_LOCK_ANIM 0x94
+#define MOVEMENT_ACTION_UNLOCK_ANIM 0x95
#define MOVEMENT_ACTION_WALK_LEFT_AFFINE 0x96
#define MOVEMENT_ACTION_WALK_RIGHT_AFFINE 0x97
#define MOVEMENT_ACTION_LEVITATE 0x98
diff --git a/include/constants/expansion_branches.h b/include/constants/expansion_branches.h
index a2ee2d61fb..48af6bf1b9 100644
--- a/include/constants/expansion_branches.h
+++ b/include/constants/expansion_branches.h
@@ -5,6 +5,8 @@
// Each define must be here for each of RHH's branch you have pulled.
// e.g. If you have both the battle_engine and pokemon_expansion branch,
// then both BATTLE_ENGINE and POKEMON_EXPANSION must be defined here.
+#define BATTLE_ENGINE
#define POKEMON_EXPANSION
+#define ITEM_EXPANSION
#endif
diff --git a/include/constants/global.h b/include/constants/global.h
index f4b503c327..2a773dbb95 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -1,5 +1,8 @@
#ifndef GUARD_CONSTANTS_GLOBAL_H
#define GUARD_CONSTANTS_GLOBAL_H
+
+#include "constants/battle_config.h"
+
// Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen.
// In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen.
// In Gen 4 only, migrated Pokemon with Diamond, Pearl, or Platinum's ID show as "----------".
@@ -94,7 +97,11 @@
#define PLAYER_NAME_LENGTH 7
#define MAIL_WORDS_COUNT 9
#define EASY_CHAT_BATTLE_WORDS_COUNT 6
+#if B_EXPANDED_MOVE_NAMES == TRUE
+#define MOVE_NAME_LENGTH 16
+#else
#define MOVE_NAME_LENGTH 12
+#endif
#define NUM_QUESTIONNAIRE_WORDS 4
#define QUIZ_QUESTION_LEN 9
#define WONDER_CARD_TEXT_LENGTH 40
@@ -102,7 +109,12 @@
#define WONDER_CARD_BODY_TEXT_LINES 4
#define WONDER_NEWS_BODY_TEXT_LINES 10
#define TYPE_NAME_LENGTH 6
+#if B_EXPANDED_ABILITY_NAMES == TRUE
+#define ABILITY_NAME_LENGTH 16
+#else
#define ABILITY_NAME_LENGTH 12
+#endif
+#define TRAINER_NAME_LENGTH 10
#define MAX_STAMP_CARD_STAMPS 7
diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h
index 5853f17086..e0361795d7 100644
--- a/include/constants/hold_effects.h
+++ b/include/constants/hold_effects.h
@@ -29,7 +29,7 @@
#define HOLD_EFFECT_EXP_SHARE 25
#define HOLD_EFFECT_QUICK_CLAW 26
#define HOLD_EFFECT_FRIENDSHIP_UP 27
-#define HOLD_EFFECT_CURE_ATTRACT 28
+#define HOLD_EFFECT_MENTAL_HERB 28
#define HOLD_EFFECT_CHOICE_BAND 29
#define HOLD_EFFECT_FLINCH 30
#define HOLD_EFFECT_BUG_POWER 31
@@ -62,11 +62,102 @@
#define HOLD_EFFECT_FIRE_POWER 58
#define HOLD_EFFECT_DRAGON_POWER 59
#define HOLD_EFFECT_NORMAL_POWER 60
-#define HOLD_EFFECT_UP_GRADE 61
+#define HOLD_EFFECT_UPGRADE 61
#define HOLD_EFFECT_SHELL_BELL 62
#define HOLD_EFFECT_LUCKY_PUNCH 63
#define HOLD_EFFECT_METAL_POWDER 64
#define HOLD_EFFECT_THICK_CLUB 65
-#define HOLD_EFFECT_STICK 66
+#define HOLD_EFFECT_LEEK 66
+
+// Gen4 hold effects.
+#define HOLD_EFFECT_CHOICE_SCARF 67
+#define HOLD_EFFECT_CHOICE_SPECS 68
+#define HOLD_EFFECT_DAMP_ROCK 69
+#define HOLD_EFFECT_GRIP_CLAW 70
+#define HOLD_EFFECT_HEAT_ROCK 71
+#define HOLD_EFFECT_ICY_ROCK 72
+#define HOLD_EFFECT_LIGHT_CLAY 73
+#define HOLD_EFFECT_SMOOTH_ROCK 74
+#define HOLD_EFFECT_POWER_HERB 75
+#define HOLD_EFFECT_BIG_ROOT 76
+#define HOLD_EFFECT_EXPERT_BELT 77
+#define HOLD_EFFECT_LIFE_ORB 78
+#define HOLD_EFFECT_METRONOME 79
+#define HOLD_EFFECT_MUSCLE_BAND 80
+#define HOLD_EFFECT_WIDE_LENS 81
+#define HOLD_EFFECT_WISE_GLASSES 82
+#define HOLD_EFFECT_ZOOM_LENS 83
+#define HOLD_EFFECT_LAGGING_TAIL 84
+#define HOLD_EFFECT_FOCUS_SASH 85
+#define HOLD_EFFECT_FLAME_ORB 86
+#define HOLD_EFFECT_TOXIC_ORB 87
+#define HOLD_EFFECT_STICKY_BARB 88
+#define HOLD_EFFECT_IRON_BALL 89
+#define HOLD_EFFECT_BLACK_SLUDGE 90
+#define HOLD_EFFECT_DESTINY_KNOT 91
+#define HOLD_EFFECT_SHED_SHELL 92
+#define HOLD_EFFECT_QUICK_POWDER 93
+#define HOLD_EFFECT_ADAMANT_ORB 94
+#define HOLD_EFFECT_LUSTROUS_ORB 95
+#define HOLD_EFFECT_GRISEOUS_ORB 96
+#define HOLD_EFFECT_ENIGMA_BERRY 97
+#define HOLD_EFFECT_RESIST_BERRY 98
+#define HOLD_EFFECT_POWER_ITEM 99
+#define HOLD_EFFECT_RESTORE_PCT_HP 100
+#define HOLD_EFFECT_MICLE_BERRY 101
+#define HOLD_EFFECT_CUSTAP_BERRY 102
+#define HOLD_EFFECT_JABOCA_BERRY 103
+#define HOLD_EFFECT_ROWAP_BERRY 104
+#define HOLD_EFFECT_KEE_BERRY 105
+#define HOLD_EFFECT_MARANGA_BERRY 106
+#define HOLD_EFFECT_PLATE 107
+
+// Gen5 hold effects
+#define HOLD_EFFECT_FLOAT_STONE 117
+#define HOLD_EFFECT_EVIOLITE 118
+#define HOLD_EFFECT_ASSAULT_VEST 119
+#define HOLD_EFFECT_DRIVE 120
+#define HOLD_EFFECT_GEMS 121
+#define HOLD_EFFECT_ROCKY_HELMET 122
+#define HOLD_EFFECT_AIR_BALLOON 123
+#define HOLD_EFFECT_RED_CARD 124
+#define HOLD_EFFECT_RING_TARGET 125
+#define HOLD_EFFECT_BINDING_BAND 126
+#define HOLD_EFFECT_EJECT_BUTTON 127
+#define HOLD_EFFECT_ABSORB_BULB 128
+#define HOLD_EFFECT_CELL_BATTERY 129
+
+// Gen6 hold effects
+#define HOLD_EFFECT_FAIRY_POWER 139
+#define HOLD_EFFECT_MEGA_STONE 140
+#define HOLD_EFFECT_SAFETY_GOGGLES 141
+#define HOLD_EFFECT_LUMINOUS_MOSS 142
+#define HOLD_EFFECT_SNOWBALL 143
+#define HOLD_EFFECT_WEAKNESS_POLICY 144
+#define HOLD_EFFECT_PRIMAL_ORB 145
+
+// Gen7 hold effects
+#define HOLD_EFFECT_PROTECTIVE_PADS 154
+#define HOLD_EFFECT_TERRAIN_EXTENDER 155
+#define HOLD_EFFECT_SEEDS 156
+#define HOLD_EFFECT_ADRENALINE_ORB 157
+#define HOLD_EFFECT_MEMORY 158
+#define HOLD_EFFECT_Z_CRYSTAL 159
+
+// Gen8 hold effects
+#define HOLD_EFFECT_UTILITY_UMBRELLA 169
+#define HOLD_EFFECT_EJECT_PACK 170
+#define HOLD_EFFECT_ROOM_SERVICE 171
+#define HOLD_EFFECT_BLUNDER_POLICY 172
+#define HOLD_EFFECT_HEAVY_DUTY_BOOTS 173
+#define HOLD_EFFECT_THROAT_SPRAY 174
+
+#define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS))
+
+// Terrain seed params
+#define HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN 0
+#define HOLD_EFFECT_PARAM_GRASSY_TERRAIN 1
+#define HOLD_EFFECT_PARAM_MISTY_TERRAIN 2
+#define HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN 3
#endif // GUARD_HOLD_EFFECTS_H
diff --git a/include/constants/item_config.h b/include/constants/item_config.h
new file mode 100644
index 0000000000..01b5fa3587
--- /dev/null
+++ b/include/constants/item_config.h
@@ -0,0 +1,23 @@
+#ifndef GUARD_CONSTANTS_ITEM_CONFIG_H
+#define GUARD_CONSTANTS_ITEM_CONFIG_H
+
+#include "constants/expansion_branches.h"
+
+#ifndef GEN_3
+#define GEN_3 0
+#define GEN_4 1
+#define GEN_5 2
+#define GEN_6 3
+#define GEN_7 4
+#define GEN_8 5
+#endif
+
+// Item config
+#define I_SHINY_CHARM_REROLLS 3 // Amount of re-rolls if the player has the Shiny Charm. Set to 0 to disable Shiny Charm's effects.
+#define I_KEY_FOSSILS GEN_7 // In Gen4+, all Gen 3 fossils became regular items.
+#define I_KEY_ESCAPE_ROPE GEN_7 // In Gen8, Escape Rope became a Key Item. Keep in mind, this will make it free to buy in marts.
+#define I_HEALTH_RECOVERY GEN_7 // In Gen7+, certain healing items recover a different amount of HP than they used to.
+#define I_SITRUS_BERRY_HEAL GEN_7 // In Gen4+, Sitrus Berry was changed from healing 30 HP to healing 25% of Max HP.
+#define I_VITAMIN_EV_CAP GEN_8 // In Gen8, the Vitamins no longer have a cap of 100 EV per stat.
+
+#endif // GUARD_CONSTANTS_ITEM_CONFIG_H
diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h
index f08b17ee9a..c3970b9c1b 100644
--- a/include/constants/item_effects.h
+++ b/include/constants/item_effects.h
@@ -2,18 +2,17 @@
#define GUARD_CONSTANTS_ITEM_EFFECTS_H
// field 0 masks
-#define ITEM0_X_ATTACK 0x0F
#define ITEM0_DIRE_HIT 0x30 // Works the same way as the move Focus Energy.
#define ITEM0_SACRED_ASH 0x40
#define ITEM0_INFATUATION 0x80
-// field 1 masks
-#define ITEM1_X_SPEED 0x0F
-#define ITEM1_X_DEFEND 0xF0
-
-// field 2 masks
-#define ITEM2_X_SPATK 0x0F
-#define ITEM2_X_ACCURACY 0xF0
+// new field 1 masks
+#define ITEM1_X_ATTACK 0x1
+#define ITEM1_X_DEFENSE 0x2
+#define ITEM1_X_SPEED 0x4
+#define ITEM1_X_SPATK 0x8
+#define ITEM1_X_SPDEF 0x10
+#define ITEM1_X_ACCURACY 0x20
// field 3 masks
#define ITEM3_CONFUSION 0x1
@@ -49,13 +48,16 @@
#define ITEM5_FRIENDSHIP_ALL (ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID | ITEM5_FRIENDSHIP_HIGH)
-// fields 6 and onwards are item-specific arguments
+#define ITEM10_IS_VITAMIN 0x1
+
+// fields 6 and onwards (except field 10) are item-specific arguments
#define ITEM_EFFECT_ARG_START 6
// Special HP recovery amounts for ITEM4_HEAL_HP
-#define ITEM6_HEAL_HP_FULL ((u8) -1)
-#define ITEM6_HEAL_HP_HALF ((u8) -2)
-#define ITEM6_HEAL_HP_LVL_UP ((u8) -3)
+#define ITEM6_HEAL_HP_FULL ((u8) -1)
+#define ITEM6_HEAL_HP_HALF ((u8) -2)
+#define ITEM6_HEAL_HP_LVL_UP ((u8) -3)
+#define ITEM6_HEAL_HP_QUARTER ((u8) -4)
// Special PP recovery amounts for ITEM4_HEAL_PP
#define ITEM6_HEAL_PP_FULL 0x7F
@@ -63,6 +65,7 @@
// Amount of EV modified by ITEM4_EV_HP, ITEM4_EV_ATK, ITEM5_EV_DEF, ITEM5_EV_SPEED, ITEM5_EV_SPDEF and ITEM5_EV_SPATK
#define ITEM6_ADD_EV 10
#define ITEM6_SUBTRACT_EV -10
+#define ITEM6_ADD_ONE_EV 1
// Used for GetItemEffectType.
#define ITEM_EFFECT_X_ITEM 0
diff --git a/include/constants/items.h b/include/constants/items.h
index e9d889cfa0..5413a7afef 100644
--- a/include/constants/items.h
+++ b/include/constants/items.h
@@ -3,383 +3,792 @@
#define ITEM_NONE 0
-// Balls
-#define ITEM_MASTER_BALL 1
-#define ITEM_ULTRA_BALL 2
-#define ITEM_GREAT_BALL 3
-#define ITEM_POKE_BALL 4
-#define ITEM_SAFARI_BALL 5
-#define ITEM_NET_BALL 6
-#define ITEM_DIVE_BALL 7
+// Poké Balls
+#define ITEM_POKE_BALL 1
+#define ITEM_GREAT_BALL 2
+#define ITEM_ULTRA_BALL 3
+#define ITEM_MASTER_BALL 4
+#define ITEM_PREMIER_BALL 5
+#define ITEM_HEAL_BALL 6
+#define ITEM_NET_BALL 7
#define ITEM_NEST_BALL 8
-#define ITEM_REPEAT_BALL 9
-#define ITEM_TIMER_BALL 10
-#define ITEM_LUXURY_BALL 11
-#define ITEM_PREMIER_BALL 12
+#define ITEM_DIVE_BALL 9
+#define ITEM_DUSK_BALL 10
+#define ITEM_TIMER_BALL 11
+#define ITEM_QUICK_BALL 12
+#define ITEM_REPEAT_BALL 13
+#define ITEM_LUXURY_BALL 14
+#define ITEM_LEVEL_BALL 15
+#define ITEM_LURE_BALL 16
+#define ITEM_MOON_BALL 17
+#define ITEM_FRIEND_BALL 18
+#define ITEM_LOVE_BALL 19
+#define ITEM_FAST_BALL 20
+#define ITEM_HEAVY_BALL 21
+#define ITEM_DREAM_BALL 22
+#define ITEM_SAFARI_BALL 23
+#define ITEM_SPORT_BALL 24
+#define ITEM_PARK_BALL 25
+#define ITEM_BEAST_BALL 26
+#define ITEM_CHERISH_BALL 27
// Note: If moving ball IDs around, updating FIRST_BALL/LAST_BALL is not sufficient
-// Several places expect the ball IDs to be first and contiguous (e.g. gBattlescriptsForBallThrow and MON_DATA_POKEBALL)
+// Several places expect the ball IDs to be first and contiguous (e.g. MON_DATA_POKEBALL)
// If adding new balls, it's easiest to insert them after the last ball and increment the below IDs (and removing ITEM_034 for example)
-#define FIRST_BALL ITEM_MASTER_BALL
-#define LAST_BALL ITEM_PREMIER_BALL
+#define FIRST_BALL ITEM_POKE_BALL
+#define LAST_BALL ITEM_CHERISH_BALL
-// Pokemon Items
-#define ITEM_POTION 13
-#define ITEM_ANTIDOTE 14
-#define ITEM_BURN_HEAL 15
-#define ITEM_ICE_HEAL 16
-#define ITEM_AWAKENING 17
-#define ITEM_PARALYZE_HEAL 18
-#define ITEM_FULL_RESTORE 19
-#define ITEM_MAX_POTION 20
-#define ITEM_HYPER_POTION 21
-#define ITEM_SUPER_POTION 22
-#define ITEM_FULL_HEAL 23
-#define ITEM_REVIVE 24
-#define ITEM_MAX_REVIVE 25
-#define ITEM_FRESH_WATER 26
-#define ITEM_SODA_POP 27
-#define ITEM_LEMONADE 28
-#define ITEM_MOOMOO_MILK 29
-#define ITEM_ENERGY_POWDER 30
-#define ITEM_ENERGY_ROOT 31
-#define ITEM_HEAL_POWDER 32
-#define ITEM_REVIVAL_HERB 33
-#define ITEM_ETHER 34
-#define ITEM_MAX_ETHER 35
-#define ITEM_ELIXIR 36
-#define ITEM_MAX_ELIXIR 37
-#define ITEM_LAVA_COOKIE 38
-#define ITEM_BLUE_FLUTE 39
-#define ITEM_YELLOW_FLUTE 40
-#define ITEM_RED_FLUTE 41
-#define ITEM_BLACK_FLUTE 42
-#define ITEM_WHITE_FLUTE 43
-#define ITEM_BERRY_JUICE 44
-#define ITEM_SACRED_ASH 45
-#define ITEM_SHOAL_SALT 46
-#define ITEM_SHOAL_SHELL 47
-#define ITEM_RED_SHARD 48
-#define ITEM_BLUE_SHARD 49
-#define ITEM_YELLOW_SHARD 50
-#define ITEM_GREEN_SHARD 51
-#define ITEM_034 52
-#define ITEM_035 53
-#define ITEM_036 54
-#define ITEM_037 55
-#define ITEM_038 56
-#define ITEM_039 57
-#define ITEM_03A 58
-#define ITEM_03B 59
-#define ITEM_03C 60
-#define ITEM_03D 61
-#define ITEM_03E 62
-#define ITEM_HP_UP 63
-#define ITEM_PROTEIN 64
-#define ITEM_IRON 65
-#define ITEM_CARBOS 66
-#define ITEM_CALCIUM 67
-#define ITEM_RARE_CANDY 68
-#define ITEM_PP_UP 69
-#define ITEM_ZINC 70
-#define ITEM_PP_MAX 71
-#define ITEM_048 72
-#define ITEM_GUARD_SPEC 73
-#define ITEM_DIRE_HIT 74
-#define ITEM_X_ATTACK 75
-#define ITEM_X_DEFEND 76
-#define ITEM_X_SPEED 77
-#define ITEM_X_ACCURACY 78
-#define ITEM_X_SPECIAL 79
-#define ITEM_POKE_DOLL 80
-#define ITEM_FLUFFY_TAIL 81
-#define ITEM_052 82
-#define ITEM_SUPER_REPEL 83
-#define ITEM_MAX_REPEL 84
-#define ITEM_ESCAPE_ROPE 85
-#define ITEM_REPEL 86
-#define ITEM_057 87
-#define ITEM_058 88
-#define ITEM_059 89
-#define ITEM_05A 90
-#define ITEM_05B 91
-#define ITEM_05C 92
-#define ITEM_SUN_STONE 93
-#define ITEM_MOON_STONE 94
-#define ITEM_FIRE_STONE 95
-#define ITEM_THUNDER_STONE 96
-#define ITEM_WATER_STONE 97
-#define ITEM_LEAF_STONE 98
-#define ITEM_063 99
-#define ITEM_064 100
-#define ITEM_065 101
-#define ITEM_066 102
+// Medicine
+#define ITEM_POTION 28
+#define ITEM_SUPER_POTION 29
+#define ITEM_HYPER_POTION 30
+#define ITEM_MAX_POTION 31
+#define ITEM_FULL_RESTORE 32
+#define ITEM_REVIVE 33
+#define ITEM_MAX_REVIVE 34
+#define ITEM_FRESH_WATER 35
+#define ITEM_SODA_POP 36
+#define ITEM_LEMONADE 37
+#define ITEM_MOOMOO_MILK 38
+#define ITEM_ENERGY_POWDER 39
+#define ITEM_ENERGY_ROOT 40
+#define ITEM_HEAL_POWDER 41
+#define ITEM_REVIVAL_HERB 42
+#define ITEM_ANTIDOTE 43
+#define ITEM_PARALYZE_HEAL 44
+#define ITEM_BURN_HEAL 45
+#define ITEM_ICE_HEAL 46
+#define ITEM_AWAKENING 47
+#define ITEM_FULL_HEAL 48
+#define ITEM_ETHER 49
+#define ITEM_MAX_ETHER 50
+#define ITEM_ELIXIR 51
+#define ITEM_MAX_ELIXIR 52
+#define ITEM_BERRY_JUICE 53
+#define ITEM_SACRED_ASH 54
+#define ITEM_SWEET_HEART 55
+#define ITEM_MAX_HONEY 56
-// Unusable
-#define ITEM_TINY_MUSHROOM 103
-#define ITEM_BIG_MUSHROOM 104
-#define ITEM_069 105
-#define ITEM_PEARL 106
-#define ITEM_BIG_PEARL 107
-#define ITEM_STARDUST 108
-#define ITEM_STAR_PIECE 109
-#define ITEM_NUGGET 110
-#define ITEM_HEART_SCALE 111
-#define ITEM_070 112
-#define ITEM_071 113
-#define ITEM_072 114
-#define ITEM_073 115
-#define ITEM_074 116
-#define ITEM_075 117
-#define ITEM_076 118
-#define ITEM_077 119
-#define ITEM_078 120
+// Regional Specialties
+#define ITEM_PEWTER_CRUNCHIES 57
+#define ITEM_RAGE_CANDY_BAR 58
+#define ITEM_LAVA_COOKIE 59
+#define ITEM_OLD_GATEAU 60
+#define ITEM_CASTELIACONE 61
+#define ITEM_LUMIOSE_GALETTE 62
+#define ITEM_SHALOUR_SABLE 63
+#define ITEM_BIG_MALASADA 64
-// Mails
-#define ITEM_ORANGE_MAIL 121
-#define ITEM_HARBOR_MAIL 122
-#define ITEM_GLITTER_MAIL 123
-#define ITEM_MECH_MAIL 124
-#define ITEM_WOOD_MAIL 125
-#define ITEM_WAVE_MAIL 126
-#define ITEM_BEAD_MAIL 127
-#define ITEM_SHADOW_MAIL 128
-#define ITEM_TROPIC_MAIL 129
-#define ITEM_DREAM_MAIL 130
-#define ITEM_FAB_MAIL 131
-#define ITEM_RETRO_MAIL 132
+// Vitamins
+#define ITEM_HP_UP 65
+#define ITEM_PROTEIN 66
+#define ITEM_IRON 67
+#define ITEM_CALCIUM 68
+#define ITEM_ZINC 69
+#define ITEM_CARBOS 70
+#define ITEM_PP_UP 71
+#define ITEM_PP_MAX 72
+
+// EV Feathers
+#define ITEM_HEALTH_FEATHER 73
+#define ITEM_MUSCLE_FEATHER 74
+#define ITEM_RESIST_FEATHER 75
+#define ITEM_GENIUS_FEATHER 76
+#define ITEM_CLEVER_FEATHER 77
+#define ITEM_SWIFT_FEATHER 78
+
+// Ability Modifiers
+#define ITEM_ABILITY_CAPSULE 79
+#define ITEM_ABILITY_PATCH 80
+
+// Mints
+#define ITEM_LONELY_MINT 81
+#define ITEM_ADAMANT_MINT 82
+#define ITEM_NAUGHTY_MINT 83
+#define ITEM_BRAVE_MINT 84
+#define ITEM_BOLD_MINT 85
+#define ITEM_IMPISH_MINT 86
+#define ITEM_LAX_MINT 87
+#define ITEM_RELAXED_MINT 88
+#define ITEM_MODEST_MINT 89
+#define ITEM_MILD_MINT 90
+#define ITEM_RASH_MINT 91
+#define ITEM_QUIET_MINT 92
+#define ITEM_CALM_MINT 93
+#define ITEM_GENTLE_MINT 94
+#define ITEM_CAREFUL_MINT 95
+#define ITEM_SASSY_MINT 96
+#define ITEM_TIMID_MINT 97
+#define ITEM_HASTY_MINT 98
+#define ITEM_JOLLY_MINT 99
+#define ITEM_NAIVE_MINT 100
+#define ITEM_SERIOUS_MINT 101
+
+// Candy
+#define ITEM_RARE_CANDY 102
+#define ITEM_EXP_CANDY_XS 103
+#define ITEM_EXP_CANDY_S 104
+#define ITEM_EXP_CANDY_M 105
+#define ITEM_EXP_CANDY_L 106
+#define ITEM_EXP_CANDY_XL 107
+#define ITEM_DYNAMAX_CANDY 108
+
+// Medicinal Flutes
+#define ITEM_BLUE_FLUTE 109
+#define ITEM_YELLOW_FLUTE 110
+#define ITEM_RED_FLUTE 111
+
+// Encounter-modifying Flutes
+#define ITEM_BLACK_FLUTE 112
+#define ITEM_WHITE_FLUTE 113
+
+// Encounter Modifiers
+#define ITEM_REPEL 114
+#define ITEM_SUPER_REPEL 115
+#define ITEM_MAX_REPEL 116
+#define ITEM_LURE 117
+#define ITEM_SUPER_LURE 118
+#define ITEM_MAX_LURE 119
+
+#define ITEM_ESCAPE_ROPE 120
+
+// X Items
+#define ITEM_X_ATTACK 121
+#define ITEM_X_DEFENSE 122
+#define ITEM_X_SP_ATK 123
+#define ITEM_X_SP_DEF 124
+#define ITEM_X_SPEED 125
+#define ITEM_X_ACCURACY 126
+
+#define ITEM_DIRE_HIT 127
+#define ITEM_GUARD_SPEC 128
+
+// Escape Items
+#define ITEM_POKE_DOLL 129
+#define ITEM_FLUFFY_TAIL 130
+#define ITEM_POKE_TOY 131
+
+#define ITEM_MAX_MUSHROOMS 132
+
+// Treasures
+#define ITEM_BOTTLE_CAP 133
+#define ITEM_GOLD_BOTTLE_CAP 134
+#define ITEM_NUGGET 135
+#define ITEM_BIG_NUGGET 136
+#define ITEM_TINY_MUSHROOM 137
+#define ITEM_BIG_MUSHROOM 138
+#define ITEM_BALM_MUSHROOM 139
+#define ITEM_PEARL 140
+#define ITEM_BIG_PEARL 141
+#define ITEM_PEARL_STRING 142
+#define ITEM_STARDUST 143
+#define ITEM_STAR_PIECE 144
+#define ITEM_COMET_SHARD 145
+#define ITEM_SHOAL_SALT 146
+#define ITEM_SHOAL_SHELL 147
+#define ITEM_RED_SHARD 148
+#define ITEM_BLUE_SHARD 149
+#define ITEM_YELLOW_SHARD 150
+#define ITEM_GREEN_SHARD 151
+#define ITEM_HEART_SCALE 152
+#define ITEM_HONEY 153
+#define ITEM_RARE_BONE 154
+#define ITEM_ODD_KEYSTONE 155
+#define ITEM_PRETTY_FEATHER 156
+#define ITEM_RELIC_COPPER 157
+#define ITEM_RELIC_SILVER 158
+#define ITEM_RELIC_GOLD 159
+#define ITEM_RELIC_VASE 160
+#define ITEM_RELIC_BAND 161
+#define ITEM_RELIC_STATUE 162
+#define ITEM_RELIC_CROWN 163
+#define ITEM_STRANGE_SOUVENIR 164
+
+// Fossils
+#define ITEM_HELIX_FOSSIL 165
+#define ITEM_DOME_FOSSIL 166
+#define ITEM_OLD_AMBER 167
+#define ITEM_ROOT_FOSSIL 168
+#define ITEM_CLAW_FOSSIL 169
+#define ITEM_ARMOR_FOSSIL 170
+#define ITEM_SKULL_FOSSIL 171
+#define ITEM_COVER_FOSSIL 172
+#define ITEM_PLUME_FOSSIL 173
+#define ITEM_JAW_FOSSIL 174
+#define ITEM_SAIL_FOSSIL 175
+#define ITEM_FOSSILIZED_BIRD 176
+#define ITEM_FOSSILIZED_FISH 177
+#define ITEM_FOSSILIZED_DRAKE 178
+#define ITEM_FOSSILIZED_DINO 179
+
+// Mulch
+#define ITEM_GROWTH_MULCH 180
+#define ITEM_DAMP_MULCH 181
+#define ITEM_STABLE_MULCH 182
+#define ITEM_GOOEY_MULCH 183
+#define ITEM_RICH_MULCH 184
+#define ITEM_SURPRISE_MULCH 185
+#define ITEM_BOOST_MULCH 186
+#define ITEM_AMAZE_MULCH 187
+
+// Apricorns
+#define ITEM_RED_APRICORN 188
+#define ITEM_BLUE_APRICORN 189
+#define ITEM_YELLOW_APRICORN 190
+#define ITEM_GREEN_APRICORN 191
+#define ITEM_PINK_APRICORN 192
+#define ITEM_WHITE_APRICORN 193
+#define ITEM_BLACK_APRICORN 194
+
+#define ITEM_WISHING_PIECE 195
+#define ITEM_GALARICA_TWIG 196
+#define ITEM_ARMORITE_ORE 197
+#define ITEM_DYNITE_ORE 198
+
+// Mail
+#define ITEM_ORANGE_MAIL 199
+#define ITEM_HARBOR_MAIL 200
+#define ITEM_GLITTER_MAIL 201
+#define ITEM_MECH_MAIL 202
+#define ITEM_WOOD_MAIL 203
+#define ITEM_WAVE_MAIL 204
+#define ITEM_BEAD_MAIL 205
+#define ITEM_SHADOW_MAIL 206
+#define ITEM_TROPIC_MAIL 207
+#define ITEM_DREAM_MAIL 208
+#define ITEM_FAB_MAIL 209
+#define ITEM_RETRO_MAIL 210
#define FIRST_MAIL_INDEX ITEM_ORANGE_MAIL
+// Evolution Items
+#define ITEM_FIRE_STONE 211
+#define ITEM_WATER_STONE 212
+#define ITEM_THUNDER_STONE 213
+#define ITEM_LEAF_STONE 214
+#define ITEM_ICE_STONE 215
+#define ITEM_SUN_STONE 216
+#define ITEM_MOON_STONE 217
+#define ITEM_SHINY_STONE 218
+#define ITEM_DUSK_STONE 219
+#define ITEM_DAWN_STONE 220
+#define ITEM_SWEET_APPLE 221
+#define ITEM_TART_APPLE 222
+#define ITEM_CRACKED_POT 223
+#define ITEM_CHIPPED_POT 224
+#define ITEM_GALARICA_CUFF 225
+#define ITEM_GALARICA_WREATH 226
+#define ITEM_DRAGON_SCALE 227
+#define ITEM_UPGRADE 228
+#define ITEM_PROTECTOR 229
+#define ITEM_ELECTIRIZER 230
+#define ITEM_MAGMARIZER 231
+#define ITEM_DUBIOUS_DISC 232
+#define ITEM_REAPER_CLOTH 233
+#define ITEM_PRISM_SCALE 234
+#define ITEM_WHIPPED_DREAM 235
+#define ITEM_SACHET 236
+#define ITEM_OVAL_STONE 237
+#define ITEM_STRAWBERRY_SWEET 238
+#define ITEM_LOVE_SWEET 239
+#define ITEM_BERRY_SWEET 240
+#define ITEM_CLOVER_SWEET 241
+#define ITEM_FLOWER_SWEET 242
+#define ITEM_STAR_SWEET 243
+#define ITEM_RIBBON_SWEET 244
+
+#define ITEM_EVERSTONE 245
+
+// Nectars
+#define ITEM_RED_NECTAR 246
+#define ITEM_YELLOW_NECTAR 247
+#define ITEM_PINK_NECTAR 248
+#define ITEM_PURPLE_NECTAR 249
+
+// Plates
+#define ITEM_FLAME_PLATE 250
+#define ITEM_SPLASH_PLATE 251
+#define ITEM_ZAP_PLATE 252
+#define ITEM_MEADOW_PLATE 253
+#define ITEM_ICICLE_PLATE 254
+#define ITEM_FIST_PLATE 255
+#define ITEM_TOXIC_PLATE 256
+#define ITEM_EARTH_PLATE 257
+#define ITEM_SKY_PLATE 258
+#define ITEM_MIND_PLATE 259
+#define ITEM_INSECT_PLATE 260
+#define ITEM_STONE_PLATE 261
+#define ITEM_SPOOKY_PLATE 262
+#define ITEM_DRACO_PLATE 263
+#define ITEM_DREAD_PLATE 264
+#define ITEM_IRON_PLATE 265
+#define ITEM_PIXIE_PLATE 266
+
+// Drives
+#define ITEM_DOUSE_DRIVE 267
+#define ITEM_SHOCK_DRIVE 268
+#define ITEM_BURN_DRIVE 269
+#define ITEM_CHILL_DRIVE 270
+
+// Memories
+#define ITEM_FIRE_MEMORY 271
+#define ITEM_WATER_MEMORY 272
+#define ITEM_ELECTRIC_MEMORY 273
+#define ITEM_GRASS_MEMORY 274
+#define ITEM_ICE_MEMORY 275
+#define ITEM_FIGHTING_MEMORY 276
+#define ITEM_POISON_MEMORY 277
+#define ITEM_GROUND_MEMORY 278
+#define ITEM_FLYING_MEMORY 279
+#define ITEM_PSYCHIC_MEMORY 280
+#define ITEM_BUG_MEMORY 281
+#define ITEM_ROCK_MEMORY 282
+#define ITEM_GHOST_MEMORY 283
+#define ITEM_DRAGON_MEMORY 284
+#define ITEM_DARK_MEMORY 285
+#define ITEM_STEEL_MEMORY 286
+#define ITEM_FAIRY_MEMORY 287
+
+#define ITEM_RUSTED_SWORD 288
+#define ITEM_RUSTED_SHIELD 289
+
+// Colored Orbs
+#define ITEM_RED_ORB 290
+#define ITEM_BLUE_ORB 291
+
+// Mega Stones
+#define ITEM_VENUSAURITE 292
+#define ITEM_CHARIZARDITE_X 293
+#define ITEM_CHARIZARDITE_Y 294
+#define ITEM_BLASTOISINITE 295
+#define ITEM_BEEDRILLITE 296
+#define ITEM_PIDGEOTITE 297
+#define ITEM_ALAKAZITE 298
+#define ITEM_SLOWBRONITE 299
+#define ITEM_GENGARITE 300
+#define ITEM_KANGASKHANITE 301
+#define ITEM_PINSIRITE 302
+#define ITEM_GYARADOSITE 303
+#define ITEM_AERODACTYLITE 304
+#define ITEM_MEWTWONITE_X 305
+#define ITEM_MEWTWONITE_Y 306
+#define ITEM_AMPHAROSITE 307
+#define ITEM_STEELIXITE 308
+#define ITEM_SCIZORITE 309
+#define ITEM_HERACRONITE 310
+#define ITEM_HOUNDOOMINITE 311
+#define ITEM_TYRANITARITE 312
+#define ITEM_SCEPTILITE 313
+#define ITEM_BLAZIKENITE 314
+#define ITEM_SWAMPERTITE 315
+#define ITEM_GARDEVOIRITE 316
+#define ITEM_SABLENITE 317
+#define ITEM_MAWILITE 318
+#define ITEM_AGGRONITE 319
+#define ITEM_MEDICHAMITE 320
+#define ITEM_MANECTITE 321
+#define ITEM_SHARPEDONITE 322
+#define ITEM_CAMERUPTITE 323
+#define ITEM_ALTARIANITE 324
+#define ITEM_BANETTITE 325
+#define ITEM_ABSOLITE 326
+#define ITEM_GLALITITE 327
+#define ITEM_SALAMENCITE 328
+#define ITEM_METAGROSSITE 329
+#define ITEM_LATIASITE 330
+#define ITEM_LATIOSITE 331
+#define ITEM_LOPUNNITE 332
+#define ITEM_GARCHOMPITE 333
+#define ITEM_LUCARIONITE 334
+#define ITEM_ABOMASITE 335
+#define ITEM_GALLADITE 336
+#define ITEM_AUDINITE 337
+#define ITEM_DIANCITE 338
+
+// Gems
+#define ITEM_NORMAL_GEM 339
+#define ITEM_FIRE_GEM 340
+#define ITEM_WATER_GEM 341
+#define ITEM_ELECTRIC_GEM 342
+#define ITEM_GRASS_GEM 343
+#define ITEM_ICE_GEM 344
+#define ITEM_FIGHTING_GEM 345
+#define ITEM_POISON_GEM 346
+#define ITEM_GROUND_GEM 347
+#define ITEM_FLYING_GEM 348
+#define ITEM_PSYCHIC_GEM 349
+#define ITEM_BUG_GEM 350
+#define ITEM_ROCK_GEM 351
+#define ITEM_GHOST_GEM 352
+#define ITEM_DRAGON_GEM 353
+#define ITEM_DARK_GEM 354
+#define ITEM_STEEL_GEM 355
+#define ITEM_FAIRY_GEM 356
+
+// Z-Crystals
+#define ITEM_NORMALIUM_Z 357
+#define ITEM_FIRIUM_Z 358
+#define ITEM_WATERIUM_Z 359
+#define ITEM_ELECTRIUM_Z 360
+#define ITEM_GRASSIUM_Z 361
+#define ITEM_ICIUM_Z 362
+#define ITEM_FIGHTINIUM_Z 363
+#define ITEM_POISONIUM_Z 364
+#define ITEM_GROUNDIUM_Z 365
+#define ITEM_FLYINIUM_Z 366
+#define ITEM_PSYCHIUM_Z 367
+#define ITEM_BUGINIUM_Z 368
+#define ITEM_ROCKIUM_Z 369
+#define ITEM_GHOSTIUM_Z 370
+#define ITEM_DRAGONIUM_Z 371
+#define ITEM_DARKINIUM_Z 372
+#define ITEM_STEELIUM_Z 373
+#define ITEM_FAIRIUM_Z 374
+#define ITEM_PIKANIUM_Z 375
+#define ITEM_EEVIUM_Z 376
+#define ITEM_SNORLIUM_Z 377
+#define ITEM_MEWNIUM_Z 378
+#define ITEM_DECIDIUM_Z 379
+#define ITEM_INCINIUM_Z 380
+#define ITEM_PRIMARIUM_Z 381
+#define ITEM_LYCANIUM_Z 382
+#define ITEM_MIMIKIUM_Z 383
+#define ITEM_KOMMONIUM_Z 384
+#define ITEM_TAPUNIUM_Z 385
+#define ITEM_SOLGANIUM_Z 386
+#define ITEM_LUNALIUM_Z 387
+#define ITEM_MARSHADIUM_Z 388
+#define ITEM_ALORAICHIUM_Z 389
+#define ITEM_PIKASHUNIUM_Z 390
+#define ITEM_ULTRANECROZIUM_Z 391
+
+// Species-specific Held Items
+#define ITEM_LIGHT_BALL 392
+#define ITEM_LEEK 393
+#define ITEM_THICK_CLUB 394
+#define ITEM_LUCKY_PUNCH 395
+#define ITEM_METAL_POWDER 396
+#define ITEM_QUICK_POWDER 397
+#define ITEM_DEEP_SEA_SCALE 398
+#define ITEM_DEEP_SEA_TOOTH 399
+#define ITEM_SOUL_DEW 400
+#define ITEM_ADAMANT_ORB 401
+#define ITEM_LUSTROUS_ORB 402
+#define ITEM_GRISEOUS_ORB 403
+
+// Incenses
+#define ITEM_SEA_INCENSE 404
+#define ITEM_LAX_INCENSE 405
+#define ITEM_ODD_INCENSE 406
+#define ITEM_ROCK_INCENSE 407
+#define ITEM_FULL_INCENSE 408
+#define ITEM_WAVE_INCENSE 409
+#define ITEM_ROSE_INCENSE 410
+#define ITEM_LUCK_INCENSE 411
+#define ITEM_PURE_INCENSE 412
+
+// Contest Scarves
+#define ITEM_RED_SCARF 413
+#define ITEM_BLUE_SCARF 414
+#define ITEM_PINK_SCARF 415
+#define ITEM_GREEN_SCARF 416
+#define ITEM_YELLOW_SCARF 417
+
+// EV Gain Modifiers
+#define ITEM_MACHO_BRACE 418
+#define ITEM_POWER_WEIGHT 419
+#define ITEM_POWER_BRACER 420
+#define ITEM_POWER_BELT 421
+#define ITEM_POWER_LENS 422
+#define ITEM_POWER_BAND 423
+#define ITEM_POWER_ANKLET 424
+
+// Type-boosting Held Items
+#define ITEM_SILK_SCARF 425
+#define ITEM_CHARCOAL 426
+#define ITEM_MYSTIC_WATER 427
+#define ITEM_MAGNET 428
+#define ITEM_MIRACLE_SEED 429
+#define ITEM_NEVER_MELT_ICE 430
+#define ITEM_BLACK_BELT 431
+#define ITEM_POISON_BARB 432
+#define ITEM_SOFT_SAND 433
+#define ITEM_SHARP_BEAK 434
+#define ITEM_TWISTED_SPOON 435
+#define ITEM_SILVER_POWDER 436
+#define ITEM_HARD_STONE 437
+#define ITEM_SPELL_TAG 438
+#define ITEM_DRAGON_FANG 439
+#define ITEM_BLACK_GLASSES 440
+#define ITEM_METAL_COAT 441
+
+// Choice Items
+#define ITEM_CHOICE_BAND 442
+#define ITEM_CHOICE_SPECS 443
+#define ITEM_CHOICE_SCARF 444
+
+// Status Orbs
+#define ITEM_FLAME_ORB 445
+#define ITEM_TOXIC_ORB 446
+
+// Weather Rocks
+#define ITEM_DAMP_ROCK 447
+#define ITEM_HEAT_ROCK 448
+#define ITEM_SMOOTH_ROCK 449
+#define ITEM_ICY_ROCK 450
+
+// Terrain Seeds
+#define ITEM_ELECTRIC_SEED 451
+#define ITEM_PSYCHIC_SEED 452
+#define ITEM_MISTY_SEED 453
+#define ITEM_GRASSY_SEED 454
+
+// Type-activated Stat Modifiers
+#define ITEM_ABSORB_BULB 455
+#define ITEM_CELL_BATTERY 456
+#define ITEM_LUMINOUS_MOSS 457
+#define ITEM_SNOWBALL 458
+
+// Misc. Held Items
+#define ITEM_BRIGHT_POWDER 459
+#define ITEM_WHITE_HERB 460
+#define ITEM_EXP_SHARE 461
+#define ITEM_QUICK_CLAW 462
+#define ITEM_SOOTHE_BELL 463
+#define ITEM_MENTAL_HERB 464
+#define ITEM_KINGS_ROCK 465
+#define ITEM_AMULET_COIN 466
+#define ITEM_CLEANSE_TAG 467
+#define ITEM_SMOKE_BALL 468
+#define ITEM_FOCUS_BAND 469
+#define ITEM_LUCKY_EGG 470
+#define ITEM_SCOPE_LENS 471
+#define ITEM_LEFTOVERS 472
+#define ITEM_SHELL_BELL 473
+#define ITEM_WIDE_LENS 474
+#define ITEM_MUSCLE_BAND 475
+#define ITEM_WISE_GLASSES 476
+#define ITEM_EXPERT_BELT 477
+#define ITEM_LIGHT_CLAY 478
+#define ITEM_LIFE_ORB 479
+#define ITEM_POWER_HERB 480
+#define ITEM_FOCUS_SASH 481
+#define ITEM_ZOOM_LENS 482
+#define ITEM_METRONOME 483
+#define ITEM_IRON_BALL 484
+#define ITEM_LAGGING_TAIL 485
+#define ITEM_DESTINY_KNOT 486
+#define ITEM_BLACK_SLUDGE 487
+#define ITEM_GRIP_CLAW 488
+#define ITEM_STICKY_BARB 489
+#define ITEM_SHED_SHELL 490
+#define ITEM_BIG_ROOT 491
+#define ITEM_RAZOR_CLAW 492
+#define ITEM_RAZOR_FANG 493
+#define ITEM_EVIOLITE 494
+#define ITEM_FLOAT_STONE 495
+#define ITEM_ROCKY_HELMET 496
+#define ITEM_AIR_BALLOON 497
+#define ITEM_RED_CARD 498
+#define ITEM_RING_TARGET 499
+#define ITEM_BINDING_BAND 500
+#define ITEM_EJECT_BUTTON 501
+#define ITEM_WEAKNESS_POLICY 502
+#define ITEM_ASSAULT_VEST 503
+#define ITEM_SAFETY_GOGGLES 504
+#define ITEM_ADRENALINE_ORB 505
+#define ITEM_TERRAIN_EXTENDER 506
+#define ITEM_PROTECTIVE_PADS 507
+#define ITEM_THROAT_SPRAY 508
+#define ITEM_EJECT_PACK 509
+#define ITEM_HEAVY_DUTY_BOOTS 510
+#define ITEM_BLUNDER_POLICY 511
+#define ITEM_ROOM_SERVICE 512
+#define ITEM_UTILITY_UMBRELLA 513
+
// Berries
-#define ITEM_CHERI_BERRY 133
-#define ITEM_CHESTO_BERRY 134
-#define ITEM_PECHA_BERRY 135
-#define ITEM_RAWST_BERRY 136
-#define ITEM_ASPEAR_BERRY 137
-#define ITEM_LEPPA_BERRY 138
-#define ITEM_ORAN_BERRY 139
-#define ITEM_PERSIM_BERRY 140
-#define ITEM_LUM_BERRY 141
-#define ITEM_SITRUS_BERRY 142
-#define ITEM_FIGY_BERRY 143
-#define ITEM_WIKI_BERRY 144
-#define ITEM_MAGO_BERRY 145
-#define ITEM_AGUAV_BERRY 146
-#define ITEM_IAPAPA_BERRY 147
-#define ITEM_RAZZ_BERRY 148
-#define ITEM_BLUK_BERRY 149
-#define ITEM_NANAB_BERRY 150
-#define ITEM_WEPEAR_BERRY 151
-#define ITEM_PINAP_BERRY 152
-#define ITEM_POMEG_BERRY 153
-#define ITEM_KELPSY_BERRY 154
-#define ITEM_QUALOT_BERRY 155
-#define ITEM_HONDEW_BERRY 156
-#define ITEM_GREPA_BERRY 157
-#define ITEM_TAMATO_BERRY 158
-#define ITEM_CORNN_BERRY 159
-#define ITEM_MAGOST_BERRY 160
-#define ITEM_RABUTA_BERRY 161
-#define ITEM_NOMEL_BERRY 162
-#define ITEM_SPELON_BERRY 163
-#define ITEM_PAMTRE_BERRY 164
-#define ITEM_WATMEL_BERRY 165
-#define ITEM_DURIN_BERRY 166
-#define ITEM_BELUE_BERRY 167
-#define ITEM_LIECHI_BERRY 168
-#define ITEM_GANLON_BERRY 169
-#define ITEM_SALAC_BERRY 170
-#define ITEM_PETAYA_BERRY 171
-#define ITEM_APICOT_BERRY 172
-#define ITEM_LANSAT_BERRY 173
-#define ITEM_STARF_BERRY 174
-#define ITEM_ENIGMA_BERRY 175
+#define ITEM_CHERI_BERRY 514
+#define ITEM_CHESTO_BERRY 515
+#define ITEM_PECHA_BERRY 516
+#define ITEM_RAWST_BERRY 517
+#define ITEM_ASPEAR_BERRY 518
+#define ITEM_LEPPA_BERRY 519
+#define ITEM_ORAN_BERRY 520
+#define ITEM_PERSIM_BERRY 521
+#define ITEM_LUM_BERRY 522
+#define ITEM_SITRUS_BERRY 523
+#define ITEM_FIGY_BERRY 524
+#define ITEM_WIKI_BERRY 525
+#define ITEM_MAGO_BERRY 526
+#define ITEM_AGUAV_BERRY 527
+#define ITEM_IAPAPA_BERRY 528
+#define ITEM_RAZZ_BERRY 529
+#define ITEM_BLUK_BERRY 530
+#define ITEM_NANAB_BERRY 531
+#define ITEM_WEPEAR_BERRY 532
+#define ITEM_PINAP_BERRY 533
+#define ITEM_POMEG_BERRY 534
+#define ITEM_KELPSY_BERRY 535
+#define ITEM_QUALOT_BERRY 536
+#define ITEM_HONDEW_BERRY 537
+#define ITEM_GREPA_BERRY 538
+#define ITEM_TAMATO_BERRY 539
+#define ITEM_CORNN_BERRY 540
+#define ITEM_MAGOST_BERRY 541
+#define ITEM_RABUTA_BERRY 542
+#define ITEM_NOMEL_BERRY 543
+#define ITEM_SPELON_BERRY 544
+#define ITEM_PAMTRE_BERRY 545
+#define ITEM_WATMEL_BERRY 546
+#define ITEM_DURIN_BERRY 547
+#define ITEM_BELUE_BERRY 548
+#define ITEM_CHILAN_BERRY 549
+#define ITEM_OCCA_BERRY 550
+#define ITEM_PASSHO_BERRY 551
+#define ITEM_WACAN_BERRY 552
+#define ITEM_RINDO_BERRY 553
+#define ITEM_YACHE_BERRY 554
+#define ITEM_CHOPLE_BERRY 555
+#define ITEM_KEBIA_BERRY 556
+#define ITEM_SHUCA_BERRY 557
+#define ITEM_COBA_BERRY 558
+#define ITEM_PAYAPA_BERRY 559
+#define ITEM_TANGA_BERRY 560
+#define ITEM_CHARTI_BERRY 561
+#define ITEM_KASIB_BERRY 562
+#define ITEM_HABAN_BERRY 563
+#define ITEM_COLBUR_BERRY 564
+#define ITEM_BABIRI_BERRY 565
+#define ITEM_ROSELI_BERRY 566
+#define ITEM_LIECHI_BERRY 567
+#define ITEM_GANLON_BERRY 568
+#define ITEM_SALAC_BERRY 569
+#define ITEM_PETAYA_BERRY 570
+#define ITEM_APICOT_BERRY 571
+#define ITEM_LANSAT_BERRY 572
+#define ITEM_STARF_BERRY 573
+#define ITEM_ENIGMA_BERRY 574
+#define ITEM_MICLE_BERRY 575
+#define ITEM_CUSTAP_BERRY 576
+#define ITEM_JABOCA_BERRY 577
+#define ITEM_ROWAP_BERRY 578
+#define ITEM_KEE_BERRY 579
+#define ITEM_MARANGA_BERRY 580
+#define ITEM_ENIGMA_BERRY_E_READER 581
#define FIRST_BERRY_INDEX ITEM_CHERI_BERRY
-#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY
-
-#define ITEM_UNUSED_BERRY_1 176
-#define ITEM_UNUSED_BERRY_2 177
-#define ITEM_UNUSED_BERRY_3 178
-
-#define MAX_BERRY_INDEX ITEM_UNUSED_BERRY_3
-
-// Battle Held items
-#define ITEM_BRIGHT_POWDER 179
-#define ITEM_WHITE_HERB 180
-#define ITEM_MACHO_BRACE 181
-#define ITEM_EXP_SHARE 182
-#define ITEM_QUICK_CLAW 183
-#define ITEM_SOOTHE_BELL 184
-#define ITEM_MENTAL_HERB 185
-#define ITEM_CHOICE_BAND 186
-#define ITEM_KINGS_ROCK 187
-#define ITEM_SILVER_POWDER 188
-#define ITEM_AMULET_COIN 189
-#define ITEM_CLEANSE_TAG 190
-#define ITEM_SOUL_DEW 191
-#define ITEM_DEEP_SEA_TOOTH 192
-#define ITEM_DEEP_SEA_SCALE 193
-#define ITEM_SMOKE_BALL 194
-#define ITEM_EVERSTONE 195
-#define ITEM_FOCUS_BAND 196
-#define ITEM_LUCKY_EGG 197
-#define ITEM_SCOPE_LENS 198
-#define ITEM_METAL_COAT 199
-#define ITEM_LEFTOVERS 200
-#define ITEM_DRAGON_SCALE 201
-#define ITEM_LIGHT_BALL 202
-#define ITEM_SOFT_SAND 203
-#define ITEM_HARD_STONE 204
-#define ITEM_MIRACLE_SEED 205
-#define ITEM_BLACK_GLASSES 206
-#define ITEM_BLACK_BELT 207
-#define ITEM_MAGNET 208
-#define ITEM_MYSTIC_WATER 209
-#define ITEM_SHARP_BEAK 210
-#define ITEM_POISON_BARB 211
-#define ITEM_NEVER_MELT_ICE 212
-#define ITEM_SPELL_TAG 213
-#define ITEM_TWISTED_SPOON 214
-#define ITEM_CHARCOAL 215
-#define ITEM_DRAGON_FANG 216
-#define ITEM_SILK_SCARF 217
-#define ITEM_UP_GRADE 218
-#define ITEM_SHELL_BELL 219
-#define ITEM_SEA_INCENSE 220
-#define ITEM_LAX_INCENSE 221
-#define ITEM_LUCKY_PUNCH 222
-#define ITEM_METAL_POWDER 223
-#define ITEM_THICK_CLUB 224
-#define ITEM_STICK 225
-#define ITEM_0E2 226
-#define ITEM_0E3 227
-#define ITEM_0E4 228
-#define ITEM_0E5 229
-#define ITEM_0E6 230
-#define ITEM_0E7 231
-#define ITEM_0E8 232
-#define ITEM_0E9 233
-#define ITEM_0EA 234
-#define ITEM_0EB 235
-#define ITEM_0EC 236
-#define ITEM_0ED 237
-#define ITEM_0EE 238
-#define ITEM_0EF 239
-#define ITEM_0F0 240
-#define ITEM_0F1 241
-#define ITEM_0F2 242
-#define ITEM_0F3 243
-#define ITEM_0F4 244
-#define ITEM_0F5 245
-#define ITEM_0F6 246
-#define ITEM_0F7 247
-#define ITEM_0F8 248
-#define ITEM_0F9 249
-#define ITEM_0FA 250
-#define ITEM_0FB 251
-#define ITEM_0FC 252
-#define ITEM_0FD 253
-
-// Contest held items
-#define ITEM_RED_SCARF 254
-#define ITEM_BLUE_SCARF 255
-#define ITEM_PINK_SCARF 256
-#define ITEM_GREEN_SCARF 257
-#define ITEM_YELLOW_SCARF 258
-
-// Key Items
-#define ITEM_MACH_BIKE 259
-#define ITEM_COIN_CASE 260
-#define ITEM_ITEMFINDER 261
-#define ITEM_OLD_ROD 262
-#define ITEM_GOOD_ROD 263
-#define ITEM_SUPER_ROD 264
-#define ITEM_SS_TICKET 265
-#define ITEM_CONTEST_PASS 266
-#define ITEM_10B 267
-#define ITEM_WAILMER_PAIL 268
-#define ITEM_DEVON_GOODS 269
-#define ITEM_SOOT_SACK 270
-#define ITEM_BASEMENT_KEY 271
-#define ITEM_ACRO_BIKE 272
-#define ITEM_POKEBLOCK_CASE 273
-#define ITEM_LETTER 274
-#define ITEM_EON_TICKET 275
-#define ITEM_RED_ORB 276
-#define ITEM_BLUE_ORB 277
-#define ITEM_SCANNER 278
-#define ITEM_GO_GOGGLES 279
-#define ITEM_METEORITE 280
-#define ITEM_ROOM_1_KEY 281
-#define ITEM_ROOM_2_KEY 282
-#define ITEM_ROOM_4_KEY 283
-#define ITEM_ROOM_6_KEY 284
-#define ITEM_STORAGE_KEY 285
-#define ITEM_ROOT_FOSSIL 286
-#define ITEM_CLAW_FOSSIL 287
-#define ITEM_DEVON_SCOPE 288
+#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY_E_READER
// TMs/HMs
-#define ITEM_TM01 289
-#define ITEM_TM02 290
-#define ITEM_TM03 291
-#define ITEM_TM04 292
-#define ITEM_TM05 293
-#define ITEM_TM06 294
-#define ITEM_TM07 295
-#define ITEM_TM08 296
-#define ITEM_TM09 297
-#define ITEM_TM10 298
-#define ITEM_TM11 299
-#define ITEM_TM12 300
-#define ITEM_TM13 301
-#define ITEM_TM14 302
-#define ITEM_TM15 303
-#define ITEM_TM16 304
-#define ITEM_TM17 305
-#define ITEM_TM18 306
-#define ITEM_TM19 307
-#define ITEM_TM20 308
-#define ITEM_TM21 309
-#define ITEM_TM22 310
-#define ITEM_TM23 311
-#define ITEM_TM24 312
-#define ITEM_TM25 313
-#define ITEM_TM26 314
-#define ITEM_TM27 315
-#define ITEM_TM28 316
-#define ITEM_TM29 317
-#define ITEM_TM30 318
-#define ITEM_TM31 319
-#define ITEM_TM32 320
-#define ITEM_TM33 321
-#define ITEM_TM34 322
-#define ITEM_TM35 323
-#define ITEM_TM36 324
-#define ITEM_TM37 325
-#define ITEM_TM38 326
-#define ITEM_TM39 327
-#define ITEM_TM40 328
-#define ITEM_TM41 329
-#define ITEM_TM42 330
-#define ITEM_TM43 331
-#define ITEM_TM44 332
-#define ITEM_TM45 333
-#define ITEM_TM46 334
-#define ITEM_TM47 335
-#define ITEM_TM48 336
-#define ITEM_TM49 337
-#define ITEM_TM50 338
-#define ITEM_HM01 339
-#define ITEM_HM02 340
-#define ITEM_HM03 341
-#define ITEM_HM04 342
-#define ITEM_HM05 343
-#define ITEM_HM06 344
-#define ITEM_HM07 345
-#define ITEM_HM08 346
+#define ITEM_TM01 582
+#define ITEM_TM02 583
+#define ITEM_TM03 584
+#define ITEM_TM04 585
+#define ITEM_TM05 586
+#define ITEM_TM06 587
+#define ITEM_TM07 588
+#define ITEM_TM08 589
+#define ITEM_TM09 590
+#define ITEM_TM10 591
+#define ITEM_TM11 592
+#define ITEM_TM12 593
+#define ITEM_TM13 594
+#define ITEM_TM14 595
+#define ITEM_TM15 596
+#define ITEM_TM16 597
+#define ITEM_TM17 598
+#define ITEM_TM18 599
+#define ITEM_TM19 600
+#define ITEM_TM20 601
+#define ITEM_TM21 602
+#define ITEM_TM22 603
+#define ITEM_TM23 604
+#define ITEM_TM24 605
+#define ITEM_TM25 606
+#define ITEM_TM26 607
+#define ITEM_TM27 608
+#define ITEM_TM28 609
+#define ITEM_TM29 610
+#define ITEM_TM30 611
+#define ITEM_TM31 612
+#define ITEM_TM32 613
+#define ITEM_TM33 614
+#define ITEM_TM34 615
+#define ITEM_TM35 616
+#define ITEM_TM36 617
+#define ITEM_TM37 618
+#define ITEM_TM38 619
+#define ITEM_TM39 620
+#define ITEM_TM40 621
+#define ITEM_TM41 622
+#define ITEM_TM42 623
+#define ITEM_TM43 624
+#define ITEM_TM44 625
+#define ITEM_TM45 626
+#define ITEM_TM46 627
+#define ITEM_TM47 628
+#define ITEM_TM48 629
+#define ITEM_TM49 630
+#define ITEM_TM50 631
+#define ITEM_TM51 632
+#define ITEM_TM52 633
+#define ITEM_TM53 634
+#define ITEM_TM54 635
+#define ITEM_TM55 636
+#define ITEM_TM56 637
+#define ITEM_TM57 638
+#define ITEM_TM58 639
+#define ITEM_TM59 640
+#define ITEM_TM60 641
+#define ITEM_TM61 642
+#define ITEM_TM62 643
+#define ITEM_TM63 644
+#define ITEM_TM64 645
+#define ITEM_TM65 646
+#define ITEM_TM66 647
+#define ITEM_TM67 648
+#define ITEM_TM68 649
+#define ITEM_TM69 650
+#define ITEM_TM70 651
+#define ITEM_TM71 652
+#define ITEM_TM72 653
+#define ITEM_TM73 654
+#define ITEM_TM74 655
+#define ITEM_TM75 656
+#define ITEM_TM76 657
+#define ITEM_TM77 658
+#define ITEM_TM78 659
+#define ITEM_TM79 660
+#define ITEM_TM80 661
+#define ITEM_TM81 662
+#define ITEM_TM82 663
+#define ITEM_TM83 664
+#define ITEM_TM84 665
+#define ITEM_TM85 666
+#define ITEM_TM86 667
+#define ITEM_TM87 668
+#define ITEM_TM88 669
+#define ITEM_TM89 670
+#define ITEM_TM90 671
+#define ITEM_TM91 672
+#define ITEM_TM92 673
+#define ITEM_TM93 674
+#define ITEM_TM94 675
+#define ITEM_TM95 676
+#define ITEM_TM96 677
+#define ITEM_TM97 678
+#define ITEM_TM98 679
+#define ITEM_TM99 680
+#define ITEM_TM100 681
+
+#define ITEM_HM01 682
+#define ITEM_HM02 683
+#define ITEM_HM03 684
+#define ITEM_HM04 685
+#define ITEM_HM05 686
+#define ITEM_HM06 687
+#define ITEM_HM07 688
+#define ITEM_HM08 689
#define ITEM_TM01_FOCUS_PUNCH ITEM_TM01
#define ITEM_TM02_DRAGON_CLAW ITEM_TM02
@@ -431,6 +840,7 @@
#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
@@ -440,43 +850,85 @@
#define ITEM_HM07_WATERFALL ITEM_HM07
#define ITEM_HM08_DIVE ITEM_HM08
-// Unknown
-#define ITEM_15B 347
-#define ITEM_15C 348
+// Charms
+#define ITEM_OVAL_CHARM 690
+#define ITEM_SHINY_CHARM 691
+#define ITEM_CATCHING_CHARM 692
+#define ITEM_EXP_CHARM 693
-// FireRed/LeafGreen
-#define ITEM_OAKS_PARCEL 349
-#define ITEM_POKE_FLUTE 350
-#define ITEM_SECRET_KEY 351
-#define ITEM_BIKE_VOUCHER 352
-#define ITEM_GOLD_TEETH 353
-#define ITEM_OLD_AMBER 354
-#define ITEM_CARD_KEY 355
-#define ITEM_LIFT_KEY 356
-#define ITEM_HELIX_FOSSIL 357
-#define ITEM_DOME_FOSSIL 358
-#define ITEM_SILPH_SCOPE 359
-#define ITEM_BICYCLE 360
-#define ITEM_TOWN_MAP 361
-#define ITEM_VS_SEEKER 362
-#define ITEM_FAME_CHECKER 363
-#define ITEM_TM_CASE 364
-#define ITEM_BERRY_POUCH 365
-#define ITEM_TEACHY_TV 366
-#define ITEM_TRI_PASS 367
-#define ITEM_RAINBOW_PASS 368
-#define ITEM_TEA 369
-#define ITEM_MYSTIC_TICKET 370
-#define ITEM_AURORA_TICKET 371
-#define ITEM_POWDER_JAR 372
-#define ITEM_RUBY 373
-#define ITEM_SAPPHIRE 374
+// Form-changing Key Items
+#define ITEM_ROTOM_CATALOG 694
+#define ITEM_GRACIDEA 695
+#define ITEM_REVEAL_GLASS 696
+#define ITEM_DNA_SPLICERS 697
+#define ITEM_ZYGARDE_CUBE 698
+#define ITEM_PRISON_BOTTLE 699
+#define ITEM_N_SOLARIZER 700
+#define ITEM_N_LUNARIZER 701
+#define ITEM_REINS_OF_UNITY 702
-// Emerald
-#define ITEM_MAGMA_EMBLEM 375
-#define ITEM_OLD_SEA_MAP 376
+// Battle Mechanic Key Items
+#define ITEM_MEGA_RING 703
+#define ITEM_Z_POWER_RING 704
+#define ITEM_DYNAMAX_BAND 705
-#define ITEMS_COUNT 377
+// Misc. Key Items
+#define ITEM_BICYCLE 706
+#define ITEM_MACH_BIKE 707
+#define ITEM_ACRO_BIKE 708
+#define ITEM_OLD_ROD 709
+#define ITEM_GOOD_ROD 710
+#define ITEM_SUPER_ROD 711
+#define ITEM_DOWSING_MACHINE 712
+#define ITEM_TOWN_MAP 713
+#define ITEM_VS_SEEKER 714
+#define ITEM_TM_CASE 715
+#define ITEM_BERRY_POUCH 716
+#define ITEM_POKEMON_BOX_LINK 717
+#define ITEM_COIN_CASE 718
+#define ITEM_POWDER_JAR 719
+#define ITEM_WAILMER_PAIL 720
+#define ITEM_POKE_RADAR 721
+#define ITEM_POKEBLOCK_CASE 722
+#define ITEM_SOOT_SACK 723
+#define ITEM_POKE_FLUTE 724
+#define ITEM_FAME_CHECKER 725
+#define ITEM_TEACHY_TV 726
+
+// Story Key Items
+#define ITEM_SS_TICKET 727
+#define ITEM_EON_TICKET 728
+#define ITEM_MYSTIC_TICKET 729
+#define ITEM_AURORA_TICKET 730
+#define ITEM_OLD_SEA_MAP 731
+#define ITEM_LETTER 732
+#define ITEM_DEVON_PARTS 733
+#define ITEM_GO_GOGGLES 734
+#define ITEM_DEVON_SCOPE 735
+#define ITEM_BASEMENT_KEY 736
+#define ITEM_SCANNER 737
+#define ITEM_STORAGE_KEY 738
+#define ITEM_KEY_TO_ROOM_1 739
+#define ITEM_KEY_TO_ROOM_2 740
+#define ITEM_KEY_TO_ROOM_4 741
+#define ITEM_KEY_TO_ROOM_6 742
+#define ITEM_METEORITE 743
+#define ITEM_MAGMA_EMBLEM 744
+#define ITEM_CONTEST_PASS 745
+#define ITEM_OAKS_PARCEL 746
+#define ITEM_SECRET_KEY 747
+#define ITEM_BIKE_VOUCHER 748
+#define ITEM_GOLD_TEETH 749
+#define ITEM_CARD_KEY 750
+#define ITEM_LIFT_KEY 751
+#define ITEM_SILPH_SCOPE 752
+#define ITEM_TRI_PASS 753
+#define ITEM_RAINBOW_PASS 754
+#define ITEM_TEA 755
+#define ITEM_RUBY 756
+#define ITEM_SAPPHIRE 757
+
+#define ITEMS_COUNT 758
#define ITEM_FIELD_ARROW ITEMS_COUNT
// Range of berries given out by various NPCS
@@ -501,8 +953,8 @@
#define ITEM_TO_MAIL(itemId)((itemId) - FIRST_MAIL_INDEX)
#define MAIL_NONE 0xFF
-#define NUM_TECHNICAL_MACHINES 50
-#define NUM_HIDDEN_MACHINES 8
+#define NUM_TECHNICAL_MACHINES 100
+#define NUM_HIDDEN_MACHINES 8
#define MAX_BAG_ITEM_CAPACITY 99
#define MAX_PC_ITEM_CAPACITY 999
@@ -533,6 +985,6 @@
#define ITEM_B_USE_OTHER 2
// Check if the item is one that can be used on a Pokemon.
-#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= MAX_BERRY_INDEX)
+#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= LAST_BERRY_INDEX)
#endif // GUARD_CONSTANTS_ITEMS_H
diff --git a/include/constants/pokedex.h b/include/constants/pokedex.h
index 8e1c03d104..6b6582af09 100644
--- a/include/constants/pokedex.h
+++ b/include/constants/pokedex.h
@@ -1,7 +1,8 @@
#ifndef GUARD_CONSTANTS_POKEDEX_H
#define GUARD_CONSTANTS_POKEDEX_H
-// National Pokedex order
+#include "constants/pokemon_config.h"
+// National Pokedex order. Gen 4+ mons and forms are not disabled by P_NEW_POKEMON to keep pokedex_orders.h clean.
enum {
NATIONAL_DEX_NONE,
// Kanto
@@ -922,7 +923,11 @@ enum {
#define KANTO_DEX_COUNT NATIONAL_DEX_MEW
#define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI
+#if P_NEW_POKEMON == TRUE
#define NATIONAL_DEX_COUNT NATIONAL_DEX_ENAMORUS
+#else
+#define NATIONAL_DEX_COUNT NATIONAL_DEX_DEOXYS
+#endif
#define POKEMON_SLOTS_NUMBER (NATIONAL_DEX_COUNT + 1)
// Hoenn Pokedex order
@@ -959,7 +964,9 @@ enum {
HOENN_DEX_RALTS,
HOENN_DEX_KIRLIA,
HOENN_DEX_GARDEVOIR,
+#if P_NEW_POKEMON == TRUE
HOENN_DEX_GALLADE,
+#endif
HOENN_DEX_SURSKIT,
HOENN_DEX_MASQUERAIN,
HOENN_DEX_SHROOMISH,
@@ -989,7 +996,9 @@ enum {
HOENN_DEX_GRAVELER,
HOENN_DEX_GOLEM,
HOENN_DEX_NOSEPASS,
+#if P_NEW_POKEMON == TRUE
HOENN_DEX_PROBOPASS,
+#endif
HOENN_DEX_SKITTY,
HOENN_DEX_DELCATTY,
HOENN_DEX_ZUBAT,
@@ -1013,7 +1022,9 @@ enum {
HOENN_DEX_MINUN,
HOENN_DEX_MAGNEMITE,
HOENN_DEX_MAGNETON,
+#if P_NEW_POKEMON == TRUE
HOENN_DEX_MAGNEZONE,
+#endif
HOENN_DEX_VOLTORB,
HOENN_DEX_ELECTRODE,
HOENN_DEX_VOLBEAT,
@@ -1024,9 +1035,13 @@ enum {
HOENN_DEX_BELLOSSOM,
HOENN_DEX_DODUO,
HOENN_DEX_DODRIO,
+#if P_NEW_POKEMON == TRUE
HOENN_DEX_BUDEW,
HOENN_DEX_ROSELIA,
HOENN_DEX_ROSERADE,
+#else
+ HOENN_DEX_ROSELIA,
+#endif
HOENN_DEX_GULPIN,
HOENN_DEX_SWALOT,
HOENN_DEX_CARVANHA,
@@ -1082,9 +1097,13 @@ enum {
HOENN_DEX_BANETTE,
HOENN_DEX_DUSKULL,
HOENN_DEX_DUSCLOPS,
+#if P_NEW_POKEMON == TRUE
HOENN_DEX_DUSKNOIR,
HOENN_DEX_TROPIUS,
HOENN_DEX_CHINGLING,
+#else
+ HOENN_DEX_TROPIUS,
+#endif
HOENN_DEX_CHIMECHO,
HOENN_DEX_ABSOL,
HOENN_DEX_VULPIX,
@@ -1105,10 +1124,14 @@ enum {
HOENN_DEX_HERACROSS,
HOENN_DEX_RHYHORN,
HOENN_DEX_RHYDON,
+#if P_NEW_POKEMON == TRUE
HOENN_DEX_RHYPERIOR,
+#endif
HOENN_DEX_SNORUNT,
HOENN_DEX_GLALIE,
+#if P_NEW_POKEMON == TRUE
HOENN_DEX_FROSLASS,
+#endif
HOENN_DEX_SPHEAL,
HOENN_DEX_SEALEO,
HOENN_DEX_WALREIN,
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 3edda316d7..3d23d37332 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -94,97 +94,6 @@
// Shiny odds
#define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536
-// Flags for Get(Box)MonData / Set(Box)MonData
-#define MON_DATA_PERSONALITY 0
-#define MON_DATA_OT_ID 1
-#define MON_DATA_NICKNAME 2
-#define MON_DATA_LANGUAGE 3
-#define MON_DATA_SANITY_IS_BAD_EGG 4
-#define MON_DATA_SANITY_HAS_SPECIES 5
-#define MON_DATA_SANITY_IS_EGG 6
-#define MON_DATA_OT_NAME 7
-#define MON_DATA_MARKINGS 8
-#define MON_DATA_CHECKSUM 9
-#define MON_DATA_ENCRYPT_SEPARATOR 10
-#define MON_DATA_SPECIES 11
-#define MON_DATA_HELD_ITEM 12
-#define MON_DATA_MOVE1 13
-#define MON_DATA_MOVE2 14
-#define MON_DATA_MOVE3 15
-#define MON_DATA_MOVE4 16
-#define MON_DATA_PP1 17
-#define MON_DATA_PP2 18
-#define MON_DATA_PP3 19
-#define MON_DATA_PP4 20
-#define MON_DATA_PP_BONUSES 21
-#define MON_DATA_COOL 22
-#define MON_DATA_BEAUTY 23
-#define MON_DATA_CUTE 24
-#define MON_DATA_EXP 25
-#define MON_DATA_HP_EV 26
-#define MON_DATA_ATK_EV 27
-#define MON_DATA_DEF_EV 28
-#define MON_DATA_SPEED_EV 29
-#define MON_DATA_SPATK_EV 30
-#define MON_DATA_SPDEF_EV 31
-#define MON_DATA_FRIENDSHIP 32
-#define MON_DATA_SMART 33
-#define MON_DATA_POKERUS 34
-#define MON_DATA_MET_LOCATION 35
-#define MON_DATA_MET_LEVEL 36
-#define MON_DATA_MET_GAME 37
-#define MON_DATA_POKEBALL 38
-#define MON_DATA_HP_IV 39
-#define MON_DATA_ATK_IV 40
-#define MON_DATA_DEF_IV 41
-#define MON_DATA_SPEED_IV 42
-#define MON_DATA_SPATK_IV 43
-#define MON_DATA_SPDEF_IV 44
-#define MON_DATA_IS_EGG 45
-#define MON_DATA_ABILITY_NUM 46
-#define MON_DATA_TOUGH 47
-#define MON_DATA_SHEEN 48
-#define MON_DATA_OT_GENDER 49
-#define MON_DATA_COOL_RIBBON 50
-#define MON_DATA_BEAUTY_RIBBON 51
-#define MON_DATA_CUTE_RIBBON 52
-#define MON_DATA_SMART_RIBBON 53
-#define MON_DATA_TOUGH_RIBBON 54
-#define MON_DATA_STATUS 55
-#define MON_DATA_LEVEL 56
-#define MON_DATA_HP 57
-#define MON_DATA_MAX_HP 58
-#define MON_DATA_ATK 59
-#define MON_DATA_DEF 60
-#define MON_DATA_SPEED 61
-#define MON_DATA_SPATK 62
-#define MON_DATA_SPDEF 63
-#define MON_DATA_MAIL 64
-#define MON_DATA_SPECIES2 65
-#define MON_DATA_IVS 66
-#define MON_DATA_CHAMPION_RIBBON 67
-#define MON_DATA_WINNING_RIBBON 68
-#define MON_DATA_VICTORY_RIBBON 69
-#define MON_DATA_ARTIST_RIBBON 70
-#define MON_DATA_EFFORT_RIBBON 71
-#define MON_DATA_MARINE_RIBBON 72
-#define MON_DATA_LAND_RIBBON 73
-#define MON_DATA_SKY_RIBBON 74
-#define MON_DATA_COUNTRY_RIBBON 75
-#define MON_DATA_NATIONAL_RIBBON 76
-#define MON_DATA_EARTH_RIBBON 77
-#define MON_DATA_WORLD_RIBBON 78
-#define MON_DATA_UNUSED_RIBBONS 79
-#define MON_DATA_EVENT_LEGAL 80
-#define MON_DATA_KNOWN_MOVES 81
-#define MON_DATA_RIBBON_COUNT 82
-#define MON_DATA_RIBBONS 83
-#define MON_DATA_ATK2 84
-#define MON_DATA_DEF2 85
-#define MON_DATA_SPEED2 86
-#define MON_DATA_SPATK2 87
-#define MON_DATA_SPDEF2 88
-
// Ribbon IDs used by TV and Pokénav
#define CHAMPION_RIBBON 0
#define COOL_RIBBON_NORMAL 1
@@ -282,15 +191,46 @@
#define USE_RANDOM_IVS (MAX_PER_STAT_IVS + 1)
#define MAX_PER_STAT_EVS 255
#define MAX_TOTAL_EVS 510
+#if I_VITAMIN_EV_CAP >= GEN_8
+#define EV_ITEM_RAISE_LIMIT MAX_PER_STAT_EVS
+#else
#define EV_ITEM_RAISE_LIMIT 100
+#endif
// Battle move flags
-#define FLAG_MAKES_CONTACT (1 << 0)
-#define FLAG_PROTECT_AFFECTED (1 << 1)
-#define FLAG_MAGIC_COAT_AFFECTED (1 << 2)
-#define FLAG_SNATCH_AFFECTED (1 << 3)
-#define FLAG_MIRROR_MOVE_AFFECTED (1 << 4)
-#define FLAG_KINGS_ROCK_AFFECTED (1 << 5)
+#define FLAG_MAKES_CONTACT (1 << 0)
+#define FLAG_PROTECT_AFFECTED (1 << 1)
+#define FLAG_MAGIC_COAT_AFFECTED (1 << 2)
+#define FLAG_SNATCH_AFFECTED (1 << 3)
+#define FLAG_MIRROR_MOVE_AFFECTED (1 << 4)
+#define FLAG_KINGS_ROCK_AFFECTED (1 << 5)
+#define FLAG_HIGH_CRIT (1 << 6)
+#define FLAG_RECKLESS_BOOST (1 << 7)
+#define FLAG_IRON_FIST_BOOST (1 << 8)
+#define FLAG_SHEER_FORCE_BOOST (1 << 9)
+#define FLAG_STRONG_JAW_BOOST (1 << 10)
+#define FLAG_MEGA_LAUNCHER_BOOST (1 << 11)
+#define FLAG_STAT_STAGES_IGNORED (1 << 12)
+#define FLAG_DMG_MINIMIZE (1 << 13)
+#define FLAG_DMG_UNDERGROUND (1 << 14)
+#define FLAG_DMG_UNDERWATER (1 << 15)
+#define FLAG_SOUND (1 << 16)
+#define FLAG_BALLISTIC (1 << 17)
+#define FLAG_PROTECTION_MOVE (1 << 18)
+#define FLAG_POWDER (1 << 19)
+#define FLAG_TARGET_ABILITY_IGNORED (1 << 20)
+#define FLAG_DANCE (1 << 21)
+#define FLAG_DMG_2X_IN_AIR (1 << 22) // If target is in the air, can hit and deal double damage.
+#define FLAG_DMG_IN_AIR (1 << 23) // If target is in the air, can hit.
+#define FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING (1 << 24) // Makes a Ground type move do 1x damage to flying and levitating targets
+#define FLAG_THAW_USER (1 << 25)
+#define FLAG_HIT_IN_SUBSTITUTE (1 << 26) // Hyperspace Fury
+#define FLAG_TWO_STRIKES (1 << 27) // A move with this flag will strike twice, and may apply its effect on each hit
+
+// Split defines.
+#define SPLIT_PHYSICAL 0x0
+#define SPLIT_SPECIAL 0x1
+#define SPLIT_STATUS 0x2
// Growth rates
#define GROWTH_MEDIUM_FAST 0
diff --git a/include/constants/pokemon_config.h b/include/constants/pokemon_config.h
index 685f5df42d..077c02e332 100644
--- a/include/constants/pokemon_config.h
+++ b/include/constants/pokemon_config.h
@@ -21,355 +21,8 @@
#define P_KADABRA_EVERSTONE GEN_8 // Since Gen 4, Kadabra can evolve even when holding an Everstone.
#define P_NIDORAN_M_DITTO_BREED GEN_8 // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat.
+#define P_NEW_POKEMON TRUE // Turning this to FALSE will remove all newly added Pokémon and Forms. Only Unown, Castform and Deoxys forms will remain.
+
#define P_ENABLE_DEBUG TRUE // Enables a debug menu for pokemon sprites and icons, accessed by pressing SELECT in the summary screen.
-#ifndef ITEM_EXPANSION
-//Item Definitions for gEvolutionTable
-
- //EVO_MEGA_EVOLUTION
- #define ITEM_VENUSAURITE 10001
- #define ITEM_CHARIZARDITE_X 10002
- #define ITEM_CHARIZARDITE_Y 10003
- #define ITEM_BLASTOISINITE 10004
- #define ITEM_BEEDRILLITE 10005
- #define ITEM_PIDGEOTITE 10006
- #define ITEM_ALAKAZITE 10007
- #define ITEM_SLOWBRONITE 10008
- #define ITEM_GENGARITE 10009
- #define ITEM_KANGASKHANITE 10010
- #define ITEM_PINSIRITE 10011
- #define ITEM_GYARADOSITE 10012
- #define ITEM_AERODACTYLITE 10013
- #define ITEM_MEWTWONITE_X 10014
- #define ITEM_MEWTWONITE_Y 10015
- #define ITEM_AMPHAROSITE 10016
- #define ITEM_STEELIXITE 10017
- #define ITEM_SCIZORITE 10018
- #define ITEM_HERACRONITE 10019
- #define ITEM_HOUNDOOMINITE 10020
- #define ITEM_TYRANITARITE 10021
- #define ITEM_SCEPTILITE 10022
- #define ITEM_BLAZIKENITE 10023
- #define ITEM_SWAMPERTITE 10024
- #define ITEM_SABLENITE 10025
- #define ITEM_SHARPEDONITE 10026
- #define ITEM_MANECTITE 10027
- #define ITEM_CAMERUPTITE 10028
- #define ITEM_GLALITITE 10029
- #define ITEM_MAWILITE 10030
- #define ITEM_MEDICHAMITE 10031
- #define ITEM_ALTARIANITE 10032
- #define ITEM_ABSOLITE 10033
- #define ITEM_BANETTITE 10034
- #define ITEM_AGGRONITE 10035
- #define ITEM_GARDEVOIRITE 10036
- #define ITEM_SALAMENCITE 10037
- #define ITEM_METAGROSSITE 10038
- #define ITEM_LATIASITE 10039
- #define ITEM_LATIOSITE 10040
- #define ITEM_LOPUNNITE 10041
- #define ITEM_GARCHOMPITE 10042
- #define ITEM_LUCARIONITE 10043
- #define ITEM_ABOMASITE 10044
- #define ITEM_GALLADITE 10045
- #define ITEM_AUDINITE 10046
- #define ITEM_DIANCITE 10047
-
- //EVO_TRADE_ITEM
- #define ITEM_PROTECTOR 10048
- #define ITEM_ELECTIRIZER 10049
- #define ITEM_MAGMARIZER 10050
- #define ITEM_DUBIOUS_DISC 10051
- #define ITEM_PRISM_SCALE 10052
- #define ITEM_REAPER_CLOTH 10053
- #define ITEM_SACHET 10054
- #define ITEM_WHIPPED_DREAM 10055
-
- //EVO_ITEM
- #define ITEM_ICE_STONE 10056
- #define ITEM_SHINY_STONE 10057
- #define ITEM_DUSK_STONE 10058
- #define ITEM_DAWN_STONE 10059
- #define ITEM_TART_APPLE 10060
- #define ITEM_SWEET_APPLE 10061
- #define ITEM_CRACKED_POT 10062
- #define ITEM_GALARICA_CUFF 10063
- #define ITEM_GALARICA_WREATH 10064
- #define ITEM_CHIPPED_POT 10065
-
- //EVO_ITEM_HOLD
- #define ITEM_RAZOR_FANG 10066
- #define ITEM_RAZOR_CLAW 10067
- #define ITEM_OVAL_STONE 10068
-
- //FORM_ITEM_HOLD
- #define ITEM_GRISEOUS_ORB 10069
- #define ITEM_DRACO_PLATE 10070
- #define ITEM_DREAD_PLATE 10071
- #define ITEM_EARTH_PLATE 10072
- #define ITEM_FIST_PLATE 10073
- #define ITEM_FLAME_PLATE 10074
- #define ITEM_ICICLE_PLATE 10075
- #define ITEM_INSECT_PLATE 10076
- #define ITEM_IRON_PLATE 10077
- #define ITEM_MEADOW_PLATE 10078
- #define ITEM_MIND_PLATE 10079
- #define ITEM_PIXIE_PLATE 10080
- #define ITEM_SKY_PLATE 10081
- #define ITEM_SPLASH_PLATE 10082
- #define ITEM_SPOOKY_PLATE 10083
- #define ITEM_STONE_PLATE 10084
- #define ITEM_TOXIC_PLATE 10085
- #define ITEM_ZAP_PLATE 10086
- #define ITEM_FIGHTINIUM_Z 10087
- #define ITEM_FLYINIUM_Z 10088
- #define ITEM_POISONIUM_Z 10089
- #define ITEM_GROUNDIUM_Z 10090
- #define ITEM_ROCKIUM_Z 10091
- #define ITEM_BUGINIUM_Z 10092
- #define ITEM_GHOSTIUM_Z 10093
- #define ITEM_STEELIUM_Z 10094
- #define ITEM_FIRIUM_Z 10095
- #define ITEM_WATERIUM_Z 10096
- #define ITEM_GRASSIUM_Z 10097
- #define ITEM_ELECTRIUM_Z 10098
- #define ITEM_PSYCHIUM_Z 10099
- #define ITEM_ICIUM_Z 10100
- #define ITEM_DRAGONIUM_Z 10101
- #define ITEM_DARKINIUM_Z 10102
- #define ITEM_FAIRIUM_Z 10103
- #define ITEM_DOUSE_DRIVE 10104
- #define ITEM_SHOCK_DRIVE 10105
- #define ITEM_BURN_DRIVE 10106
- #define ITEM_CHILL_DRIVE 10107
- #define ITEM_BUG_MEMORY 10108
- #define ITEM_DARK_MEMORY 10109
- #define ITEM_DRAGON_MEMORY 10110
- #define ITEM_ELECTRIC_MEMORY 10111
- #define ITEM_FAIRY_MEMORY 10112
- #define ITEM_FIGHTING_MEMORY 10113
- #define ITEM_FIRE_MEMORY 10114
- #define ITEM_FLYING_MEMORY 10115
- #define ITEM_GHOST_MEMORY 10116
- #define ITEM_GRASS_MEMORY 10117
- #define ITEM_GROUND_MEMORY 10118
- #define ITEM_ICE_MEMORY 10119
- #define ITEM_POISON_MEMORY 10120
- #define ITEM_PSYCHIC_MEMORY 10121
- #define ITEM_ROCK_MEMORY 10122
- #define ITEM_STEEL_MEMORY 10123
- #define ITEM_WATER_MEMORY 10124
-
- //FORM_ITEM_USE
- #define ITEM_GRACIDEA 10125
- #define ITEM_REVEAL_GLASS 10126
- #define ITEM_PRISON_BOTTLE 10127
- #define ITEM_RED_NECTAR 10128
- #define ITEM_YELLOW_NECTAR 10129
- #define ITEM_PINK_NECTAR 10130
- #define ITEM_PURPLE_NECTAR 10131
-
- // Held Items
- #define ITEM_HONEY ITEM_NONE
-#endif // ITEM_EXPANSION
-
-#ifndef BATTLE_ENGINE
- // Gen 4
- #define ABILITY_TANGLED_FEET ABILITY_NONE
- #define ABILITY_MOTOR_DRIVE ABILITY_NONE
- #define ABILITY_RIVALRY ABILITY_NONE
- #define ABILITY_STEADFAST ABILITY_NONE
- #define ABILITY_SNOW_CLOAK ABILITY_NONE
- #define ABILITY_GLUTTONY ABILITY_NONE
- #define ABILITY_ANGER_POINT ABILITY_NONE
- #define ABILITY_UNBURDEN ABILITY_NONE
- #define ABILITY_HEATPROOF ABILITY_NONE
- #define ABILITY_SIMPLE ABILITY_NONE
- #define ABILITY_DRY_SKIN ABILITY_NONE
- #define ABILITY_DOWNLOAD ABILITY_NONE
- #define ABILITY_IRON_FIST ABILITY_NONE
- #define ABILITY_POISON_HEAL ABILITY_NONE
- #define ABILITY_ADAPTABILITY ABILITY_NONE
- #define ABILITY_SKILL_LINK ABILITY_NONE
- #define ABILITY_HYDRATION ABILITY_NONE
- #define ABILITY_SOLAR_POWER ABILITY_NONE
- #define ABILITY_QUICK_FEET ABILITY_NONE
- #define ABILITY_NORMALIZE ABILITY_NONE
- #define ABILITY_SNIPER ABILITY_NONE
- #define ABILITY_MAGIC_GUARD ABILITY_NONE
- #define ABILITY_NO_GUARD ABILITY_NONE
- #define ABILITY_STALL ABILITY_NONE
- #define ABILITY_TECHNICIAN ABILITY_NONE
- #define ABILITY_LEAF_GUARD ABILITY_NONE
- #define ABILITY_KLUTZ ABILITY_NONE
- #define ABILITY_MOLD_BREAKER ABILITY_NONE
- #define ABILITY_SUPER_LUCK ABILITY_NONE
- #define ABILITY_AFTERMATH ABILITY_NONE
- #define ABILITY_ANTICIPATION ABILITY_NONE
- #define ABILITY_FOREWARN ABILITY_NONE
- #define ABILITY_UNAWARE ABILITY_NONE
- #define ABILITY_TINTED_LENS ABILITY_NONE
- #define ABILITY_FILTER ABILITY_NONE
- #define ABILITY_SLOW_START ABILITY_NONE
- #define ABILITY_SCRAPPY ABILITY_NONE
- #define ABILITY_STORM_DRAIN ABILITY_NONE
- #define ABILITY_ICE_BODY ABILITY_NONE
- #define ABILITY_SOLID_ROCK ABILITY_NONE
- #define ABILITY_SNOW_WARNING ABILITY_NONE
- #define ABILITY_HONEY_GATHER ABILITY_NONE
- #define ABILITY_FRISK ABILITY_NONE
- #define ABILITY_RECKLESS ABILITY_NONE
- #define ABILITY_MULTITYPE ABILITY_NONE
- #define ABILITY_FLOWER_GIFT ABILITY_NONE
- #define ABILITY_BAD_DREAMS ABILITY_NONE
- // Gen 5
- #define ABILITY_PICKPOCKET ABILITY_NONE
- #define ABILITY_SHEER_FORCE ABILITY_NONE
- #define ABILITY_CONTRARY ABILITY_NONE
- #define ABILITY_UNNERVE ABILITY_NONE
- #define ABILITY_DEFIANT ABILITY_NONE
- #define ABILITY_DEFEATIST ABILITY_NONE
- #define ABILITY_CURSED_BODY ABILITY_NONE
- #define ABILITY_HEALER ABILITY_NONE
- #define ABILITY_FRIEND_GUARD ABILITY_NONE
- #define ABILITY_WEAK_ARMOR ABILITY_NONE
- #define ABILITY_HEAVY_METAL ABILITY_NONE
- #define ABILITY_LIGHT_METAL ABILITY_NONE
- #define ABILITY_MULTISCALE ABILITY_NONE
- #define ABILITY_TOXIC_BOOST ABILITY_NONE
- #define ABILITY_FLARE_BOOST ABILITY_NONE
- #define ABILITY_HARVEST ABILITY_NONE
- #define ABILITY_TELEPATHY ABILITY_NONE
- #define ABILITY_MOODY ABILITY_NONE
- #define ABILITY_OVERCOAT ABILITY_NONE
- #define ABILITY_POISON_TOUCH ABILITY_NONE
- #define ABILITY_REGENERATOR ABILITY_NONE
- #define ABILITY_BIG_PECKS ABILITY_NONE
- #define ABILITY_SAND_RUSH ABILITY_NONE
- #define ABILITY_WONDER_SKIN ABILITY_NONE
- #define ABILITY_ANALYTIC ABILITY_NONE
- #define ABILITY_ILLUSION ABILITY_NONE
- #define ABILITY_IMPOSTER ABILITY_NONE
- #define ABILITY_INFILTRATOR ABILITY_NONE
- #define ABILITY_MUMMY ABILITY_NONE
- #define ABILITY_MOXIE ABILITY_NONE
- #define ABILITY_JUSTIFIED ABILITY_NONE
- #define ABILITY_RATTLED ABILITY_NONE
- #define ABILITY_MAGIC_BOUNCE ABILITY_NONE
- #define ABILITY_SAP_SIPPER ABILITY_NONE
- #define ABILITY_PRANKSTER ABILITY_NONE
- #define ABILITY_SAND_FORCE ABILITY_NONE
- #define ABILITY_IRON_BARBS ABILITY_NONE
- #define ABILITY_ZEN_MODE ABILITY_NONE
- #define ABILITY_VICTORY_STAR ABILITY_NONE
- #define ABILITY_TURBOBLAZE ABILITY_NONE
- #define ABILITY_TERAVOLT ABILITY_NONE
- // Gen 6
- #define ABILITY_AROMA_VEIL ABILITY_NONE
- #define ABILITY_FLOWER_VEIL ABILITY_NONE
- #define ABILITY_CHEEK_POUCH ABILITY_NONE
- #define ABILITY_PROTEAN ABILITY_NONE
- #define ABILITY_FUR_COAT ABILITY_NONE
- #define ABILITY_MAGICIAN ABILITY_NONE
- #define ABILITY_BULLETPROOF ABILITY_NONE
- #define ABILITY_COMPETITIVE ABILITY_NONE
- #define ABILITY_STRONG_JAW ABILITY_NONE
- #define ABILITY_REFRIGERATE ABILITY_NONE
- #define ABILITY_SWEET_VEIL ABILITY_NONE
- #define ABILITY_STANCE_CHANGE ABILITY_NONE
- #define ABILITY_GALE_WINGS ABILITY_NONE
- #define ABILITY_MEGA_LAUNCHER ABILITY_NONE
- #define ABILITY_GRASS_PELT ABILITY_NONE
- #define ABILITY_SYMBIOSIS ABILITY_NONE
- #define ABILITY_TOUGH_CLAWS ABILITY_NONE
- #define ABILITY_PIXILATE ABILITY_NONE
- #define ABILITY_GOOEY ABILITY_NONE
- #define ABILITY_AERILATE ABILITY_NONE
- #define ABILITY_PARENTAL_BOND ABILITY_NONE
- #define ABILITY_DARK_AURA ABILITY_NONE
- #define ABILITY_FAIRY_AURA ABILITY_NONE
- #define ABILITY_AURA_BREAK ABILITY_NONE
- #define ABILITY_PRIMORDIAL_SEA ABILITY_NONE
- #define ABILITY_DESOLATE_LAND ABILITY_NONE
- #define ABILITY_DELTA_STREAM ABILITY_NONE
- // Gen 7
- #define ABILITY_STAMINA ABILITY_NONE
- #define ABILITY_WIMP_OUT ABILITY_NONE
- #define ABILITY_EMERGENCY_EXIT ABILITY_NONE
- #define ABILITY_WATER_COMPACTION ABILITY_NONE
- #define ABILITY_MERCILESS ABILITY_NONE
- #define ABILITY_SHIELDS_DOWN ABILITY_NONE
- #define ABILITY_STAKEOUT ABILITY_NONE
- #define ABILITY_WATER_BUBBLE ABILITY_NONE
- #define ABILITY_STEELWORKER ABILITY_NONE
- #define ABILITY_BERSERK ABILITY_NONE
- #define ABILITY_SLUSH_RUSH ABILITY_NONE
- #define ABILITY_LONG_REACH ABILITY_NONE
- #define ABILITY_LIQUID_VOICE ABILITY_NONE
- #define ABILITY_TRIAGE ABILITY_NONE
- #define ABILITY_GALVANIZE ABILITY_NONE
- #define ABILITY_SURGE_SURFER ABILITY_NONE
- #define ABILITY_SCHOOLING ABILITY_NONE
- #define ABILITY_DISGUISE ABILITY_NONE
- #define ABILITY_BATTLE_BOND ABILITY_NONE
- #define ABILITY_POWER_CONSTRUCT ABILITY_NONE
- #define ABILITY_CORROSION ABILITY_NONE
- #define ABILITY_COMATOSE ABILITY_NONE
- #define ABILITY_QUEENLY_MAJESTY ABILITY_NONE
- #define ABILITY_INNARDS_OUT ABILITY_NONE
- #define ABILITY_DANCER ABILITY_NONE
- #define ABILITY_BATTERY ABILITY_NONE
- #define ABILITY_FLUFFY ABILITY_NONE
- #define ABILITY_DAZZLING ABILITY_NONE
- #define ABILITY_SOUL_HEART ABILITY_NONE
- #define ABILITY_TANGLING_HAIR ABILITY_NONE
- #define ABILITY_RECEIVER ABILITY_NONE
- #define ABILITY_POWER_OF_ALCHEMY ABILITY_NONE
- #define ABILITY_BEAST_BOOST ABILITY_NONE
- #define ABILITY_RKS_SYSTEM ABILITY_NONE
- #define ABILITY_ELECTRIC_SURGE ABILITY_NONE
- #define ABILITY_PSYCHIC_SURGE ABILITY_NONE
- #define ABILITY_MISTY_SURGE ABILITY_NONE
- #define ABILITY_GRASSY_SURGE ABILITY_NONE
- #define ABILITY_FULL_METAL_BODY ABILITY_NONE
- #define ABILITY_SHADOW_SHIELD ABILITY_NONE
- #define ABILITY_PRISM_ARMOR ABILITY_NONE
- #define ABILITY_NEUROFORCE ABILITY_NONE
- // Gen 8
- #define ABILITY_INTREPID_SWORD ABILITY_NONE
- #define ABILITY_DAUNTLESS_SHIELD ABILITY_NONE
- #define ABILITY_LIBERO ABILITY_NONE
- #define ABILITY_BALL_FETCH ABILITY_NONE
- #define ABILITY_COTTON_DOWN ABILITY_NONE
- #define ABILITY_PROPELLER_TAIL ABILITY_NONE
- #define ABILITY_MIRROR_ARMOR ABILITY_NONE
- #define ABILITY_GULP_MISSILE ABILITY_NONE
- #define ABILITY_STALWART ABILITY_NONE
- #define ABILITY_STEAM_ENGINE ABILITY_NONE
- #define ABILITY_PUNK_ROCK ABILITY_NONE
- #define ABILITY_SAND_SPIT ABILITY_NONE
- #define ABILITY_ICE_SCALES ABILITY_NONE
- #define ABILITY_RIPEN ABILITY_NONE
- #define ABILITY_ICE_FACE ABILITY_NONE
- #define ABILITY_POWER_SPOT ABILITY_NONE
- #define ABILITY_MIMICRY ABILITY_NONE
- #define ABILITY_SCREEN_CLEANER ABILITY_NONE
- #define ABILITY_STEELY_SPIRIT ABILITY_NONE
- #define ABILITY_PERISH_BODY ABILITY_NONE
- #define ABILITY_WANDERING_SPIRIT ABILITY_NONE
- #define ABILITY_GORILLA_TACTICS ABILITY_NONE
- #define ABILITY_NEUTRALIZING_GAS ABILITY_NONE
- #define ABILITY_PASTEL_VEIL ABILITY_NONE
- #define ABILITY_HUNGER_SWITCH ABILITY_NONE
- #define ABILITY_QUICK_DRAW ABILITY_NONE
- #define ABILITY_UNSEEN_FIST ABILITY_NONE
- #define ABILITY_CURIOUS_MEDICINE ABILITY_NONE
- #define ABILITY_TRANSISTOR ABILITY_NONE
- #define ABILITY_DRAGONS_MAW ABILITY_NONE
- #define ABILITY_CHILLING_NEIGH ABILITY_NONE
- #define ABILITY_GRIM_NEIGH ABILITY_NONE
- #define ABILITY_AS_ONE_ICE_RIDER ABILITY_NONE
- #define ABILITY_AS_ONE_SHADOW_RIDER ABILITY_NONE
-#endif // BATTLE_ENGINE
-
#endif // GUARD_CONSTANTS_POKEMON_CONFIG_H
diff --git a/include/constants/region_map_sections.h b/include/constants/region_map_sections.h
index 65aa3e1ca8..5b8029acf5 100644
--- a/include/constants/region_map_sections.h
+++ b/include/constants/region_map_sections.h
@@ -100,8 +100,8 @@
#define MAPSEC_CINNABAR_ISLAND 0x60
#define MAPSEC_INDIGO_PLATEAU 0x61
#define MAPSEC_SAFFRON_CITY 0x62
-#define MAPSEC_ROUTE_4_FLYDUP 0x63
-#define MAPSEC_ROUTE_10_FLYDUP 0x64
+#define MAPSEC_ROUTE_4_POKECENTER 0x63
+#define MAPSEC_ROUTE_10_POKECENTER 0x64
#define MAPSEC_ROUTE_1 0x65
#define MAPSEC_ROUTE_2 0x66
#define MAPSEC_ROUTE_3 0x67
diff --git a/include/constants/species.h b/include/constants/species.h
index 03bd9eabbc..976b303028 100644
--- a/include/constants/species.h
+++ b/include/constants/species.h
@@ -1,6 +1,8 @@
#ifndef GUARD_CONSTANTS_SPECIES_H
#define GUARD_CONSTANTS_SPECIES_H
+#include "constants/pokemon_config.h"
+
#define SPECIES_NONE 0
#define SPECIES_BULBASAUR 1
#define SPECIES_IVYSAUR 2
@@ -908,8 +910,6 @@
#define SPECIES_OVERQWIL 904
#define SPECIES_ENAMORUS 905
-#define FORMS_START SPECIES_ENAMORUS
-
// Megas
#define SPECIES_VENUSAUR_MEGA FORMS_START + 1
#define SPECIES_CHARIZARD_MEGA_X FORMS_START + 2
@@ -1046,6 +1046,7 @@
// Pichu
#define SPECIES_PICHU_SPIKY_EARED FORMS_START + 118
+#if P_NEW_POKEMON == TRUE
// Unown
#define SPECIES_UNOWN_B FORMS_START + 119
#define SPECIES_UNOWN_C FORMS_START + 120
@@ -1085,6 +1086,47 @@
#define SPECIES_DEOXYS_DEFENSE FORMS_START + 150
#define SPECIES_DEOXYS_SPEED FORMS_START + 151
+#else
+// Unown
+#define SPECIES_UNOWN_B FORMS_START + 1
+#define SPECIES_UNOWN_C FORMS_START + 2
+#define SPECIES_UNOWN_D FORMS_START + 3
+#define SPECIES_UNOWN_E FORMS_START + 4
+#define SPECIES_UNOWN_F FORMS_START + 5
+#define SPECIES_UNOWN_G FORMS_START + 6
+#define SPECIES_UNOWN_H FORMS_START + 7
+#define SPECIES_UNOWN_I FORMS_START + 8
+#define SPECIES_UNOWN_J FORMS_START + 9
+#define SPECIES_UNOWN_K FORMS_START + 10
+#define SPECIES_UNOWN_L FORMS_START + 11
+#define SPECIES_UNOWN_M FORMS_START + 12
+#define SPECIES_UNOWN_N FORMS_START + 13
+#define SPECIES_UNOWN_O FORMS_START + 14
+#define SPECIES_UNOWN_P FORMS_START + 15
+#define SPECIES_UNOWN_Q FORMS_START + 16
+#define SPECIES_UNOWN_R FORMS_START + 17
+#define SPECIES_UNOWN_S FORMS_START + 18
+#define SPECIES_UNOWN_T FORMS_START + 19
+#define SPECIES_UNOWN_U FORMS_START + 20
+#define SPECIES_UNOWN_V FORMS_START + 21
+#define SPECIES_UNOWN_W FORMS_START + 22
+#define SPECIES_UNOWN_X FORMS_START + 23
+#define SPECIES_UNOWN_Y FORMS_START + 24
+#define SPECIES_UNOWN_Z FORMS_START + 25
+#define SPECIES_UNOWN_EMARK FORMS_START + 26
+#define SPECIES_UNOWN_QMARK FORMS_START + 27
+
+// Castform
+#define SPECIES_CASTFORM_SUNNY FORMS_START + 28
+#define SPECIES_CASTFORM_RAINY FORMS_START + 29
+#define SPECIES_CASTFORM_SNOWY FORMS_START + 30
+
+// Deoxys
+#define SPECIES_DEOXYS_ATTACK FORMS_START + 31
+#define SPECIES_DEOXYS_DEFENSE FORMS_START + 32
+#define SPECIES_DEOXYS_SPEED FORMS_START + 33
+#endif
+
// Burmy
#define SPECIES_BURMY_SANDY_CLOAK FORMS_START + 152
#define SPECIES_BURMY_TRASH_CLOAK FORMS_START + 153
@@ -1370,7 +1412,14 @@
#define SPECIES_CALYREX_ICE_RIDER FORMS_START + 327
#define SPECIES_CALYREX_SHADOW_RIDER FORMS_START + 328
+#if P_NEW_POKEMON == TRUE
+#define FORMS_START SPECIES_ENAMORUS
#define SPECIES_EGG SPECIES_CALYREX_SHADOW_RIDER + 1
+#else
+#define FORMS_START SPECIES_DEOXYS
+#define SPECIES_EGG SPECIES_DEOXYS_SPEED + 1
+#endif
+
#define NUM_SPECIES SPECIES_EGG
#endif // GUARD_CONSTANTS_SPECIES_H
diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h
index 371763faf3..e0f660b6f0 100644
--- a/include/constants/trainer_hill.h
+++ b/include/constants/trainer_hill.h
@@ -52,8 +52,6 @@
#define TRAINER_HILL_PLAYER_STATUS_ECARD_SCANNED 1
#define TRAINER_HILL_PLAYER_STATUS_NORMAL 2
-#define HILL_TRAINER_NAME_LENGTH 11
-
#define TRAINER_HILL_OTID 0x10000000
// The full map of each Trainer Hill floor is 16x21.
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
index 31bad25df8..09ae720111 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -15,6 +15,7 @@
#define TRAINER_LINK_OPPONENT 2048
#define TRAINER_UNION_ROOM 3072
#define TRAINER_STEVEN_PARTNER 3075
+#define TRAINER_CUSTOM_PARTNER 3076
#define TRAINER_PIC_HIKER 0
#define TRAINER_PIC_AQUA_GRUNT_M 1
diff --git a/include/constants/z_move_effects.h b/include/constants/z_move_effects.h
new file mode 100644
index 0000000000..ce4d5c4adc
--- /dev/null
+++ b/include/constants/z_move_effects.h
@@ -0,0 +1,38 @@
+#ifndef GUARD_Z_MOVE_EFFECTS_H
+#define GUARD_Z_MOVE_EFFECTS_H
+
+#define Z_EFFECT_NONE 0
+#define Z_EFFECT_RESET_STATS 1
+#define Z_EFFECT_ALL_STATS_UP_1 2
+#define Z_EFFECT_BOOST_CRITS 3
+#define Z_EFFECT_FOLLOW_ME 4
+#define Z_EFFECT_CURSE 5
+#define Z_EFFECT_RECOVER_HP 6
+#define Z_EFFECT_RESTORE_REPLACEMENT_HP 7
+
+#define Z_EFFECT_ATK_UP_1 8
+#define Z_EFFECT_DEF_UP_1 9
+#define Z_EFFECT_SPD_UP_1 10
+#define Z_EFFECT_SPATK_UP_1 11
+#define Z_EFFECT_SPDEF_UP_1 12
+#define Z_EFFECT_ACC_UP_1 13
+#define Z_EFFECT_EVSN_UP_1 14
+
+#define Z_EFFECT_ATK_UP_2 15
+#define Z_EFFECT_DEF_UP_2 16
+#define Z_EFFECT_SPD_UP_2 17
+#define Z_EFFECT_SPATK_UP_2 18
+#define Z_EFFECT_SPDEF_UP_2 19
+#define Z_EFFECT_ACC_UP_2 20
+#define Z_EFFECT_EVSN_UP_2 21
+
+#define Z_EFFECT_ATK_UP_3 22
+#define Z_EFFECT_DEF_UP_3 23
+#define Z_EFFECT_SPD_UP_3 24
+#define Z_EFFECT_SPATK_UP_3 25
+#define Z_EFFECT_SPDEF_UP_3 26
+#define Z_EFFECT_ACC_UP_3 27
+#define Z_EFFECT_EVSN_UP_3 28
+
+
+#endif // GUARD_Z_MOVE_EFFECTS_H
diff --git a/include/contest.h b/include/contest.h
index d0630a8011..21e2530c21 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -291,7 +291,7 @@ struct ContestResources
struct ContestMoveAnimData *moveAnim;
struct ContestTV *tv;
struct ContestUnused * unused;
- u8 * contestBgTilemaps[CONTESTANT_COUNT];
+ u8 *contestBgTilemaps[CONTESTANT_COUNT];
void * boxBlinkTiles1;
void * boxBlinkTiles2;
void * animBgTileBuffer;
diff --git a/include/contest_effect.h b/include/contest_effect.h
index 0474cb38cc..9089207acd 100644
--- a/include/contest_effect.h
+++ b/include/contest_effect.h
@@ -1,12 +1,13 @@
#ifndef GUARD_CONTEST_EFFECT_H
#define GUARD_CONTEST_EFFECT_H
+#define MAX_COMBO_MOVES 5
struct ContestMove
{
u8 effect;
u8 contestCategory:3;
u8 comboStarterId;
- u8 comboMoves[4];
+ u8 comboMoves[MAX_COMBO_MOVES];
};
struct ContestEffect
diff --git a/include/data.h b/include/data.h
index 8a6d7cef73..b018da3f3b 100644
--- a/include/data.h
+++ b/include/data.h
@@ -57,6 +57,11 @@ struct TrainerMonItemCustomMoves
u16 moves[MAX_MON_MOVES];
};
+#define NO_ITEM_DEFAULT_MOVES(party) { .NoItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = 0
+#define NO_ITEM_CUSTOM_MOVES(party) { .NoItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET
+#define ITEM_DEFAULT_MOVES(party) { .ItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_HELD_ITEM
+#define ITEM_CUSTOM_MOVES(party) { .ItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM
+
union TrainerMonPtr
{
const struct TrainerMonNoItemDefaultMoves *NoItemDefaultMoves;
@@ -71,7 +76,7 @@ struct Trainer
/*0x01*/ u8 trainerClass;
/*0x02*/ u8 encounterMusic_gender; // last bit is gender
/*0x03*/ u8 trainerPic;
- /*0x04*/ u8 trainerName[12];
+ /*0x04*/ u8 trainerName[TRAINER_NAME_LENGTH + 1];
/*0x10*/ u16 items[MAX_TRAINER_ITEMS];
/*0x18*/ bool8 doubleBattle;
/*0x1C*/ u32 aiFlags;
@@ -129,5 +134,6 @@ extern const struct Trainer gTrainers[];
extern const u8 gTrainerClassNames[][13];
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
extern const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1];
+extern const u8 *const gZMoveNames[];
#endif // GUARD_DATA_H
diff --git a/include/decompress.h b/include/decompress.h
index 27fc5e61ab..bea2788abc 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -10,14 +10,13 @@ void LZDecompressVram(const u32 *src, void *dest);
u16 LoadCompressedSpriteSheet(const struct CompressedSpriteSheet *src);
void LoadCompressedSpriteSheetOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer);
-bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src);
+bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet *src);
void LoadCompressedSpritePalette(const struct CompressedSpritePalette *src);
void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *src, void *buffer);
bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette *src);
-void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species);
-
+void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void *buffer, s32 species);
void DecompressPicFromTableGender(void* buffer, s32 species, u32 personality);
void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality);
diff --git a/include/easy_chat.h b/include/easy_chat.h
index c9ef4428f7..d84af93fc8 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -122,7 +122,7 @@ struct EasyChatWordsByLetter
void InitEasyChatPhrases(void);
void ShowEasyChatScreen(void);
-u8 * CopyEasyChatWord(u8 *dest, u16 word);
+u8 *CopyEasyChatWord(u8 *dest, u16 word);
bool32 IsEasyChatAnswerUnlocked(int word);
void InitializeEasyChatWordArray(u16 *words, u16 length);
u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows);
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index d31802a67f..22cef49219 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -63,7 +63,7 @@ struct PairedPalettes
struct LockedAnimObjectEvents
{
- u8 objectEventIds[OBJECT_EVENTS_COUNT];
+ u8 localIds[OBJECT_EVENTS_COUNT];
u8 count;
};
diff --git a/include/evolution_scene.h b/include/evolution_scene.h
index 5f8c534b93..25d34eddfb 100644
--- a/include/evolution_scene.h
+++ b/include/evolution_scene.h
@@ -1,9 +1,9 @@
#ifndef GUARD_EVOLUTION_SCENE_H
#define GUARD_EVOLUTION_SCENE_H
-void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID);
-void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID);
-void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID);
+void BeginEvolutionScene(struct Pokemon *mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID);
+void EvolutionScene(struct Pokemon *mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID);
+void TradeEvolutionScene(struct Pokemon *mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID);
extern void (*gCB2_AfterEvolution)(void);
diff --git a/include/faraway_island.h b/include/faraway_island.h
index a5243c6a70..9fd2a69fc4 100755
--- a/include/faraway_island.h
+++ b/include/faraway_island.h
@@ -2,7 +2,7 @@
#define GUARD_FARAWAY_ISLAND_H
u32 GetMewMoveDirection(void);
-bool8 ShouldMewShakeGrass(struct ObjectEvent*);
+bool8 ShouldMewShakeGrass(struct ObjectEvent *);
void UpdateFarawayIslandStepCounter(void);
bool8 ObjectEventIsFarawayIslandMew(struct ObjectEvent *);
bool8 IsMewPlayingHideAndSeek(void);
diff --git a/include/field_effect.h b/include/field_effect.h
index 731fb9c59f..b35a8c8694 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -39,8 +39,8 @@ void StartEscalatorWarp(u8 metatileBehavior, u8 priority);
void StartLavaridgeGymB1FWarp(u8 priority);
void StartLavaridgeGym1FWarp(u8 priority);
-void SpriteCB_AshPuff(struct Sprite*);
-void SpriteCB_AshLaunch(struct Sprite*);
+void SpriteCB_AshPuff(struct Sprite *);
+void SpriteCB_AshLaunch(struct Sprite *);
void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b);
void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId);
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index 528492d814..2ae5d79f75 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -20,25 +20,25 @@ void SetSurfBlob_PlayerOffset(u8 spriteId, bool8 hasOffset, s16 offset);
bool8 UpdateRevealDisguise(struct ObjectEvent *);
void StartRevealDisguise(struct ObjectEvent *);
void StartAshFieldEffect(s16, s16, u16, s16);
-void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8);
-u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*);
+void SetUpReflection(struct ObjectEvent *, struct Sprite *, u8);
+u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent *);
u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
-void UpdateRayquazaSpotlightEffect(struct Sprite*);
-void UpdateShadowFieldEffect(struct Sprite*);
-void UpdateTallGrassFieldEffect(struct Sprite*);
-void WaitFieldEffectSpriteAnim(struct Sprite*);
-void UpdateAshFieldEffect(struct Sprite*);
-void UpdateSurfBlobFieldEffect(struct Sprite*);
-void UpdateJumpImpactEffect(struct Sprite*);
-void UpdateFootprintsTireTracksFieldEffect(struct Sprite*);
-void UpdateSplashFieldEffect(struct Sprite*);
-void UpdateLongGrassFieldEffect(struct Sprite*);
-void UpdateSandPileFieldEffect(struct Sprite*);
-void UpdateDisguiseFieldEffect(struct Sprite*);
-void UpdateShortGrassFieldEffect(struct Sprite*);
-void UpdateHotSpringsWaterFieldEffect(struct Sprite*);
-void UpdateBubblesFieldEffect(struct Sprite*);
-void UpdateSparkleFieldEffect(struct Sprite*);
+void UpdateRayquazaSpotlightEffect(struct Sprite *);
+void UpdateShadowFieldEffect(struct Sprite *);
+void UpdateTallGrassFieldEffect(struct Sprite *);
+void WaitFieldEffectSpriteAnim(struct Sprite *);
+void UpdateAshFieldEffect(struct Sprite *);
+void UpdateSurfBlobFieldEffect(struct Sprite *);
+void UpdateJumpImpactEffect(struct Sprite *);
+void UpdateFootprintsTireTracksFieldEffect(struct Sprite *);
+void UpdateSplashFieldEffect(struct Sprite *);
+void UpdateLongGrassFieldEffect(struct Sprite *);
+void UpdateSandPileFieldEffect(struct Sprite *);
+void UpdateDisguiseFieldEffect(struct Sprite *);
+void UpdateShortGrassFieldEffect(struct Sprite *);
+void UpdateHotSpringsWaterFieldEffect(struct Sprite *);
+void UpdateBubblesFieldEffect(struct Sprite *);
+void UpdateSparkleFieldEffect(struct Sprite *);
void SetSpriteInvisible(u8 spriteId);
void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y);
diff --git a/include/fieldmap.h b/include/fieldmap.h
index e7497f7bd4..7caadfcaaa 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -25,8 +25,8 @@ u32 MapGridGetMetatileIdAt(int, int);
u32 MapGridGetMetatileBehaviorAt(int, int);
void MapGridSetMetatileIdAt(int, int, u16);
void MapGridSetMetatileEntryAt(int, int, u16);
-void GetCameraCoords(u16*, u16*);
-bool8 MapGridIsImpassableAt(int, int);
+void GetCameraCoords(u16 *, u16 *);
+u8 MapGridGetCollisionAt(int, int);
int GetMapBorderIdAt(int x, int y);
bool32 CanCameraMoveInDirection(int direction);
u16 GetMetatileAttributesById(u16 metatileId);
diff --git a/include/gba/isagbprint.h b/include/gba/isagbprint.h
index 1be3852e3b..13687825ef 100644
--- a/include/gba/isagbprint.h
+++ b/include/gba/isagbprint.h
@@ -23,14 +23,14 @@ void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopP
#ifdef NDEBUG
#define AGB_ASSERT(exp)
#else
-#define AGB_ASSERT(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 1);
+#define AGB_ASSERT(exp) (exp) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #exp, 1);
#endif
#undef AGB_WARNING
#ifdef NDEBUG
#define AGB_WARNING(exp)
#else
-#define AGB_WARNING(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 0);
+#define AGB_WARNING(exp) (exp) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #exp, 0);
#endif
// for matching purposes
@@ -38,13 +38,13 @@ void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopP
#ifdef NDEBUG
#define AGB_ASSERT_EX(exp, file, line)
#else
-#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 1);
+#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void *)0) : AGBAssert(file, line, #exp, 1);
#endif
#ifdef NDEBUG
#define AGB_WARNING_EX(exp, file, line)
#else
-#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 0);
+#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void *)0) : AGBAssert(file, line, #exp, 0);
#endif
#endif // GUARD_GBA_ISAGBPRINT_H
diff --git a/include/global.h b/include/global.h
index bee24ebde2..25b43db206 100644
--- a/include/global.h
+++ b/include/global.h
@@ -59,6 +59,7 @@
// Converts a number to Q4.12 fixed-point format
#define Q_4_12(n) ((s16)((n) * 4096))
+#define UQ_4_12(n) ((u16)((n) * 4096))
// Converts a number to Q24.8 fixed-point format
#define Q_24_8(n) ((s32)((n) << 8))
@@ -68,10 +69,15 @@
// Converts a Q4.12 fixed-point format number to a regular integer
#define Q_4_12_TO_INT(n) ((int)((n) / 4096))
+#define UQ_4_12_TO_INT(n) ((int)((n) / 4096))
// Converts a Q24.8 fixed-point format number to a regular integer
#define Q_24_8_TO_INT(n) ((int)((n) >> 8))
+// Rounding value for Q4.12 fixed-point format
+#define Q_4_12_ROUND ((1) << (12 - 1))
+#define UQ_4_12_ROUND ((1) << (12 - 1))
+
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
@@ -103,13 +109,13 @@
#define T1_READ_8(ptr) ((ptr)[0])
#define T1_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
#define T1_READ_32(ptr) ((ptr)[0] | ((ptr)[1] << 8) | ((ptr)[2] << 16) | ((ptr)[3] << 24))
-#define T1_READ_PTR(ptr) (u8*) T1_READ_32(ptr)
+#define T1_READ_PTR(ptr) (u8 *) T1_READ_32(ptr)
// T2_READ_8 is a duplicate to remain consistent with each group.
#define T2_READ_8(ptr) ((ptr)[0])
#define T2_READ_16(ptr) ((ptr)[0] + ((ptr)[1] << 8))
#define T2_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
-#define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr)
+#define T2_READ_PTR(ptr) (void *) T2_READ_32(ptr)
// Macros for checking the joypad
#define TEST_BUTTON(field, button) ((field) & (button))
diff --git a/include/global.tv.h b/include/global.tv.h
index e24ead3f21..1fb1b8a333 100644
--- a/include/global.tv.h
+++ b/include/global.tv.h
@@ -81,7 +81,8 @@ typedef union // size = 0x24
/*0x01*/ bool8 active;
/*0x02*/ u16 species;
/*0x04*/ u8 pokemonName[POKEMON_NAME_LENGTH + 1];
- /*0x0F*/ u8 trainerName[11];
+ /*0x0F*/ u8 trainerName[PLAYER_NAME_LENGTH + 1];
+ /*0x17*/ u8 unused[3];
/*0x1A*/ u8 random;
/*0x1B*/ u8 random2;
/*0x1C*/ u16 randomSpecies;
diff --git a/include/graphics.h b/include/graphics.h
index 1c06c53a5e..65857e5e31 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -10,26 +10,56 @@ extern const u32 gBallGfx_Poke[];
extern const u32 gBallPal_Poke[];
extern const u32 gBallGfx_Great[];
extern const u32 gBallPal_Great[];
-extern const u32 gBallGfx_Safari[];
-extern const u32 gBallPal_Safari[];
extern const u32 gBallGfx_Ultra[];
extern const u32 gBallPal_Ultra[];
extern const u32 gBallGfx_Master[];
extern const u32 gBallPal_Master[];
-extern const u32 gBallGfx_Net[];
-extern const u32 gBallPal_Net[];
-extern const u32 gBallGfx_Dive[];
-extern const u32 gBallPal_Dive[];
-extern const u32 gBallGfx_Nest[];
-extern const u32 gBallPal_Nest[];
-extern const u32 gBallGfx_Repeat[];
-extern const u32 gBallPal_Repeat[];
-extern const u32 gBallGfx_Timer[];
-extern const u32 gBallPal_Timer[];
-extern const u32 gBallGfx_Luxury[];
-extern const u32 gBallPal_Luxury[];
extern const u32 gBallGfx_Premier[];
extern const u32 gBallPal_Premier[];
+extern const u32 gBallGfx_Heal[];
+extern const u32 gBallPal_Heal[];
+extern const u32 gBallGfx_Net[];
+extern const u32 gBallPal_Net[];
+extern const u32 gBallGfx_Nest[];
+extern const u32 gBallPal_Nest[];
+extern const u32 gBallGfx_Dive[];
+extern const u32 gBallPal_Dive[];
+extern const u32 gBallGfx_Dusk[];
+extern const u32 gBallPal_Dusk[];
+extern const u32 gBallGfx_Timer[];
+extern const u32 gBallPal_Timer[];
+extern const u32 gBallGfx_Quick[];
+extern const u32 gBallPal_Quick[];
+extern const u32 gBallGfx_Repeat[];
+extern const u32 gBallPal_Repeat[];
+extern const u32 gBallGfx_Luxury[];
+extern const u32 gBallPal_Luxury[];
+extern const u32 gBallGfx_Level[];
+extern const u32 gBallPal_Level[];
+extern const u32 gBallGfx_Lure[];
+extern const u32 gBallPal_Lure[];
+extern const u32 gBallGfx_Moon[];
+extern const u32 gBallPal_Moon[];
+extern const u32 gBallGfx_Friend[];
+extern const u32 gBallPal_Friend[];
+extern const u32 gBallGfx_Love[];
+extern const u32 gBallPal_Love[];
+extern const u32 gBallGfx_Fast[];
+extern const u32 gBallPal_Fast[];
+extern const u32 gBallGfx_Heavy[];
+extern const u32 gBallPal_Heavy[];
+extern const u32 gBallGfx_Dream[];
+extern const u32 gBallPal_Dream[];
+extern const u32 gBallGfx_Safari[];
+extern const u32 gBallPal_Safari[];
+extern const u32 gBallGfx_Sport[];
+extern const u32 gBallPal_Sport[];
+extern const u32 gBallGfx_Park[];
+extern const u32 gBallPal_Park[];
+extern const u32 gBallGfx_Beast[];
+extern const u32 gBallPal_Beast[];
+extern const u32 gBallGfx_Cherish[];
+extern const u32 gBallPal_Cherish[];
extern const u32 gOpenPokeballGfx[];
// pokemon gfx
@@ -424,6 +454,7 @@ extern const u32 gMonFrontPic_Groudon[];
extern const u32 gMonFrontPic_Rayquaza[];
extern const u32 gMonFrontPic_Jirachi[];
extern const u32 gMonFrontPic_Deoxys[];
+#if P_NEW_POKEMON == TRUE
extern const u32 gMonFrontPic_Turtwig[];
extern const u32 gMonFrontPic_Grotle[];
extern const u32 gMonFrontPic_Torterra[];
@@ -1075,6 +1106,7 @@ extern const u32 gMonFrontPic_PikachuAlolaCap[];
extern const u32 gMonFrontPic_PikachuPartnerCap[];
extern const u32 gMonFrontPic_PikachuWorldCap[];
extern const u32 gMonFrontPic_PichuSpikyEared[];
+#endif
extern const u32 gMonFrontPic_UnownB[];
extern const u32 gMonFrontPic_UnownC[];
extern const u32 gMonFrontPic_UnownD[];
@@ -1108,6 +1140,7 @@ extern const u32 gMonFrontPic_CastformSnowy[];
extern const u32 gMonFrontPic_DeoxysAttack[];
extern const u32 gMonFrontPic_DeoxysDefense[];
extern const u32 gMonFrontPic_DeoxysSpeed[];
+#if P_NEW_POKEMON == TRUE
extern const u32 gMonFrontPic_BurmySandyCloak[];
extern const u32 gMonFrontPic_BurmyTrashCloak[];
extern const u32 gMonFrontPic_WormadamSandyCloak[];
@@ -1214,6 +1247,7 @@ extern const u32 gMonFrontPic_UrshifuRapidStrikeStyle[];
extern const u32 gMonFrontPic_ZarudeDada[];
extern const u32 gMonFrontPic_CalyrexIceRider[];
extern const u32 gMonFrontPic_CalyrexShadowRider[];
+#endif
extern const u32 gMonFrontPic_Egg[];
extern const u32 gMonBackPic_CircledQuestionMark[];
@@ -1605,6 +1639,7 @@ extern const u32 gMonBackPic_Groudon[];
extern const u32 gMonBackPic_Rayquaza[];
extern const u32 gMonBackPic_Jirachi[];
extern const u32 gMonBackPic_Deoxys[];
+#if P_NEW_POKEMON == TRUE
extern const u32 gMonBackPic_Turtwig[];
extern const u32 gMonBackPic_Grotle[];
extern const u32 gMonBackPic_Torterra[];
@@ -2255,6 +2290,7 @@ extern const u32 gMonBackPic_PikachuAlolaCap[];
extern const u32 gMonBackPic_PikachuPartnerCap[];
extern const u32 gMonBackPic_PikachuWorldCap[];
extern const u32 gMonBackPic_PichuSpikyEared[];
+#endif
extern const u32 gMonBackPic_UnownB[];
extern const u32 gMonBackPic_UnownC[];
extern const u32 gMonBackPic_UnownD[];
@@ -2288,6 +2324,7 @@ extern const u32 gMonBackPic_CastformSnowy[];
extern const u32 gMonBackPic_DeoxysAttack[];
extern const u32 gMonBackPic_DeoxysDefense[];
extern const u32 gMonBackPic_DeoxysSpeed[];
+#if P_NEW_POKEMON == TRUE
extern const u32 gMonBackPic_BurmySandyCloak[];
extern const u32 gMonBackPic_BurmyTrashCloak[];
extern const u32 gMonBackPic_WormadamSandyCloak[];
@@ -2394,6 +2431,7 @@ extern const u32 gMonBackPic_UrshifuRapidStrikeStyle[];
extern const u32 gMonBackPic_ZarudeDada[];
extern const u32 gMonBackPic_CalyrexIceRider[];
extern const u32 gMonBackPic_CalyrexShadowRider[];
+#endif
extern const u32 gMonPalette_CircledQuestionMark[];
extern const u32 gMonPalette_DoubleQuestionMark[];
@@ -2783,6 +2821,7 @@ extern const u32 gMonPalette_Groudon[];
extern const u32 gMonPalette_Rayquaza[];
extern const u32 gMonPalette_Jirachi[];
extern const u32 gMonPalette_Deoxys[];
+#if P_NEW_POKEMON == TRUE
extern const u32 gMonPalette_Turtwig[];
extern const u32 gMonPalette_Grotle[];
extern const u32 gMonPalette_Torterra[];
@@ -3427,12 +3466,14 @@ extern const u32 gMonPalette_PikachuAlolaCap[];
extern const u32 gMonPalette_PikachuPartnerCap[];
extern const u32 gMonPalette_PikachuWorldCap[];
extern const u32 gMonPalette_PichuSpikyEared[];
+#endif
extern const u32 gMonPalette_CastformSunny[];
extern const u32 gMonPalette_CastformRainy[];
extern const u32 gMonPalette_CastformSnowy[];
extern const u32 gMonPalette_DeoxysAttack[];
extern const u32 gMonPalette_DeoxysDefense[];
extern const u32 gMonPalette_DeoxysSpeed[];
+#if P_NEW_POKEMON == TRUE
extern const u32 gMonPalette_BurmySandyCloak[];
extern const u32 gMonPalette_BurmyTrashCloak[];
extern const u32 gMonPalette_WormadamSandyCloak[];
@@ -3592,6 +3633,7 @@ extern const u32 gMonPalette_UrshifuRapidStrikeStyle[];
extern const u32 gMonPalette_ZarudeDada[];
extern const u32 gMonPalette_CalyrexIceRider[];
extern const u32 gMonPalette_CalyrexShadowRider[];
+#endif
extern const u32 gMonPalette_Egg[];
extern const u32 gMonShinyPalette_CircledQuestionMark[];
@@ -3982,6 +4024,7 @@ extern const u32 gMonShinyPalette_Groudon[];
extern const u32 gMonShinyPalette_Rayquaza[];
extern const u32 gMonShinyPalette_Jirachi[];
extern const u32 gMonShinyPalette_Deoxys[];
+#if P_NEW_POKEMON == TRUE
extern const u32 gMonShinyPalette_Turtwig[];
extern const u32 gMonShinyPalette_Grotle[];
extern const u32 gMonShinyPalette_Torterra[];
@@ -4627,12 +4670,14 @@ extern const u32 gMonShinyPalette_PikachuAlolaCap[];
extern const u32 gMonShinyPalette_PikachuPartnerCap[];
extern const u32 gMonShinyPalette_PikachuWorldCap[];
extern const u32 gMonShinyPalette_PichuSpikyEared[];
+#endif
extern const u32 gMonShinyPalette_CastformSunny[];
extern const u32 gMonShinyPalette_CastformRainy[];
extern const u32 gMonShinyPalette_CastformSnowy[];
extern const u32 gMonShinyPalette_DeoxysAttack[];
extern const u32 gMonShinyPalette_DeoxysDefense[];
extern const u32 gMonShinyPalette_DeoxysSpeed[];
+#if P_NEW_POKEMON == TRUE
extern const u32 gMonShinyPalette_BurmySandyCloak[];
extern const u32 gMonShinyPalette_BurmyTrashCloak[];
extern const u32 gMonShinyPalette_WormadamSandyCloak[];
@@ -4786,6 +4831,7 @@ extern const u32 gMonShinyPalette_UrshifuRapidStrikeStyle[];
extern const u32 gMonShinyPalette_ZarudeDada[];
extern const u32 gMonShinyPalette_CalyrexIceRider[];
extern const u32 gMonShinyPalette_CalyrexShadowRider[];
+#endif
extern const u8 gMonIcon_QuestionMark[];
extern const u8 gMonIcon_Bulbasaur[];
@@ -5174,6 +5220,7 @@ extern const u8 gMonIcon_Groudon[];
extern const u8 gMonIcon_Rayquaza[];
extern const u8 gMonIcon_Jirachi[];
extern const u8 gMonIcon_Deoxys[];
+#if P_NEW_POKEMON == TRUE
extern const u8 gMonIcon_Turtwig[];
extern const u8 gMonIcon_Grotle[];
extern const u8 gMonIcon_Torterra[];
@@ -5815,6 +5862,7 @@ extern const u8 gMonIcon_PikachuKalosCap[];
extern const u8 gMonIcon_PikachuAlolaCap[];
extern const u8 gMonIcon_PikachuPartnerCap[];
extern const u8 gMonIcon_PichuSpikyEared[];
+#endif
extern const u8 gMonIcon_UnownB[];
extern const u8 gMonIcon_UnownC[];
extern const u8 gMonIcon_UnownD[];
@@ -5848,6 +5896,7 @@ extern const u8 gMonIcon_CastformSnowy[];
extern const u8 gMonIcon_DeoxysAttack[];
extern const u8 gMonIcon_DeoxysDefense[];
extern const u8 gMonIcon_DeoxysSpeed[];
+#if P_NEW_POKEMON == TRUE
extern const u8 gMonIcon_BurmySandyCloak[];
extern const u8 gMonIcon_BurmyTrashCloak[];
extern const u8 gMonIcon_WormadamSandyCloak[];
@@ -5968,6 +6017,7 @@ extern const u8 gMonIcon_EternatusEternamax[];
extern const u8 gMonIcon_ZarudeDada[];
extern const u8 gMonIcon_CalyrexIceRider[];
extern const u8 gMonIcon_CalyrexShadowRider[];
+#endif
extern const u8 gMonIcon_Egg[];
extern const u8 gMonFootprint_QuestionMark[];
@@ -6357,6 +6407,7 @@ extern const u8 gMonFootprint_Latios[];
extern const u8 gMonFootprint_Jirachi[];
extern const u8 gMonFootprint_Deoxys[];
extern const u8 gMonFootprint_Chimecho[];
+#if P_NEW_POKEMON == TRUE
extern const u8 gMonFootprint_Turtwig[];
extern const u8 gMonFootprint_Grotle[];
extern const u8 gMonFootprint_Torterra[];
@@ -6876,6 +6927,7 @@ extern const u8 gMonFootprint_Calyrex[];
//extern const u8 gMonFootprint_Sneasler[];
//extern const u8 gMonFootprint_Overqwil[];
//extern const u8 gMonFootprint_Enamorus[];
+#endif
// trainer sprites
extern const u32 gTrainerFrontPic_Hiker[];
@@ -7371,46 +7423,67 @@ extern const u32 gRaySceneChasesAway_Bg_Pal[];
extern const u32 gRaySceneChasesAway_Light_Gfx[];
extern const u32 gRaySceneChasesAway_Ring_Gfx[];
-// Pokeballs
-extern const u32 gItemIcon_MasterBall[];
-extern const u32 gItemIconPalette_MasterBall[];
-extern const u32 gItemIcon_UltraBall[];
-extern const u32 gItemIconPalette_UltraBall[];
-extern const u32 gItemIcon_GreatBall[];
-extern const u32 gItemIconPalette_GreatBall[];
+// Poké Balls
extern const u32 gItemIcon_PokeBall[];
extern const u32 gItemIconPalette_PokeBall[];
-extern const u32 gItemIcon_SafariBall[];
-extern const u32 gItemIconPalette_SafariBall[];
+extern const u32 gItemIcon_GreatBall[];
+extern const u32 gItemIconPalette_GreatBall[];
+extern const u32 gItemIcon_UltraBall[];
+extern const u32 gItemIconPalette_UltraBall[];
+extern const u32 gItemIcon_MasterBall[];
+extern const u32 gItemIconPalette_MasterBall[];
+extern const u32 gItemIcon_PremierBall[];
+extern const u32 gItemIcon_HealBall[];
+extern const u32 gItemIconPalette_HealBall[];
extern const u32 gItemIcon_NetBall[];
extern const u32 gItemIconPalette_NetBall[];
-extern const u32 gItemIcon_DiveBall[];
-extern const u32 gItemIconPalette_DiveBall[];
extern const u32 gItemIcon_NestBall[];
extern const u32 gItemIconPalette_NestBall[];
+extern const u32 gItemIcon_DiveBall[];
+extern const u32 gItemIconPalette_DiveBall[];
+extern const u32 gItemIcon_DuskBall[];
+extern const u32 gItemIconPalette_DuskBall[];
+extern const u32 gItemIcon_TimerBall[];
+extern const u32 gItemIcon_QuickBall[];
+extern const u32 gItemIconPalette_QuickBall[];
extern const u32 gItemIcon_RepeatBall[];
extern const u32 gItemIconPalette_RepeatBall[];
-extern const u32 gItemIcon_TimerBall[];
extern const u32 gItemIcon_LuxuryBall[];
extern const u32 gItemIconPalette_LuxuryBall[];
-extern const u32 gItemIcon_PremierBall[];
+extern const u32 gItemIcon_LevelBall[];
+extern const u32 gItemIconPalette_LevelBall[];
+extern const u32 gItemIcon_LureBall[];
+extern const u32 gItemIconPalette_LureBall[];
+extern const u32 gItemIcon_MoonBall[];
+extern const u32 gItemIconPalette_MoonBall[];
+extern const u32 gItemIcon_FriendBall[];
+extern const u32 gItemIconPalette_FriendBall[];
+extern const u32 gItemIcon_LoveBall[];
+extern const u32 gItemIconPalette_LoveBall[];
+extern const u32 gItemIcon_FastBall[];
+extern const u32 gItemIconPalette_FastBall[];
+extern const u32 gItemIcon_HeavyBall[];
+extern const u32 gItemIconPalette_HeavyBall[];
+extern const u32 gItemIcon_DreamBall[];
+extern const u32 gItemIconPalette_DreamBall[];
+extern const u32 gItemIcon_SafariBall[];
+extern const u32 gItemIconPalette_SafariBall[];
+extern const u32 gItemIcon_SportBall[];
+extern const u32 gItemIconPalette_SportBall[];
+extern const u32 gItemIcon_ParkBall[];
+extern const u32 gItemIconPalette_ParkBall[];
+extern const u32 gItemIcon_BeastBall[];
+extern const u32 gItemIconPalette_BeastBall[];
+extern const u32 gItemIcon_CherishBall[];
+extern const u32 gItemIconPalette_CherishBall[];
// Medicine
extern const u32 gItemIcon_Potion[];
extern const u32 gItemIconPalette_Potion[];
-extern const u32 gItemIcon_Antidote[];
-extern const u32 gItemIconPalette_Antidote[];
-extern const u32 gItemIcon_StatusHeal[];
-extern const u32 gItemIconPalette_BurnHeal[];
-extern const u32 gItemIconPalette_IceHeal[];
-extern const u32 gItemIconPalette_Awakening[];
-extern const u32 gItemIconPalette_ParalyzeHeal[];
-extern const u32 gItemIcon_LargePotion[];
-extern const u32 gItemIconPalette_FullRestore[];
-extern const u32 gItemIconPalette_MaxPotion[];
-extern const u32 gItemIconPalette_HyperPotion[];
extern const u32 gItemIconPalette_SuperPotion[];
-extern const u32 gItemIcon_FullHeal[];
-extern const u32 gItemIconPalette_FullHeal[];
+extern const u32 gItemIconPalette_HyperPotion[];
+extern const u32 gItemIcon_LargePotion[];
+extern const u32 gItemIconPalette_MaxPotion[];
+extern const u32 gItemIconPalette_FullRestore[];
extern const u32 gItemIcon_Revive[];
extern const u32 gItemIconPalette_Revive[];
extern const u32 gItemIcon_MaxRevive[];
@@ -7429,24 +7502,157 @@ extern const u32 gItemIconPalette_EnergyRoot[];
extern const u32 gItemIconPalette_HealPowder[];
extern const u32 gItemIcon_RevivalHerb[];
extern const u32 gItemIconPalette_RevivalHerb[];
+extern const u32 gItemIcon_Antidote[];
+extern const u32 gItemIconPalette_Antidote[];
+extern const u32 gItemIcon_StatusHeal[];
+extern const u32 gItemIconPalette_ParalyzeHeal[];
+extern const u32 gItemIconPalette_BurnHeal[];
+extern const u32 gItemIconPalette_IceHeal[];
+extern const u32 gItemIconPalette_Awakening[];
+extern const u32 gItemIcon_FullHeal[];
+extern const u32 gItemIconPalette_FullHeal[];
extern const u32 gItemIcon_Ether[];
extern const u32 gItemIconPalette_Ether[];
extern const u32 gItemIconPalette_MaxEther[];
extern const u32 gItemIconPalette_Elixir[];
extern const u32 gItemIconPalette_MaxElixir[];
-extern const u32 gItemIcon_LavaCookie[];
-extern const u32 gItemIconPalette_LavaCookieAndLetter[];
-extern const u32 gItemIcon_Flute[];
-extern const u32 gItemIconPalette_BlueFlute[];
-extern const u32 gItemIconPalette_YellowFlute[];
-extern const u32 gItemIconPalette_RedFlute[];
-extern const u32 gItemIconPalette_BlackFlute[];
-extern const u32 gItemIconPalette_WhiteFlute[];
extern const u32 gItemIcon_BerryJuice[];
extern const u32 gItemIconPalette_BerryJuice[];
extern const u32 gItemIcon_SacredAsh[];
extern const u32 gItemIconPalette_SacredAsh[];
-// Collectibles
+extern const u32 gItemIcon_SweetHeart[];
+extern const u32 gItemIconPalette_SweetHeart[];
+extern const u32 gItemIcon_MaxHoney[];
+extern const u32 gItemIconPalette_MaxHoney[];
+// Regional Specialties
+extern const u32 gItemIcon_PewterCrunchies[];
+extern const u32 gItemIconPalette_PewterCrunchies[];
+extern const u32 gItemIcon_RageCandyBar[];
+extern const u32 gItemIconPalette_RageCandyBar[];
+extern const u32 gItemIcon_LavaCookie[];
+extern const u32 gItemIconPalette_LavaCookieAndLetter[];
+extern const u32 gItemIcon_OldGateau[];
+extern const u32 gItemIconPalette_OldGateau[];
+extern const u32 gItemIcon_Casteliacone[];
+extern const u32 gItemIconPalette_Casteliacone[];
+extern const u32 gItemIcon_LumioseGalette[];
+extern const u32 gItemIconPalette_LumioseGalette[];
+extern const u32 gItemIcon_ShalourSable[];
+extern const u32 gItemIconPalette_ShalourSable[];
+extern const u32 gItemIcon_BigMalasada[];
+extern const u32 gItemIconPalette_BigMalasada[];
+// Vitamins
+extern const u32 gItemIcon_HPUp[];
+extern const u32 gItemIconPalette_HPUp[];
+extern const u32 gItemIcon_Vitamin[];
+extern const u32 gItemIconPalette_Protein[];
+extern const u32 gItemIconPalette_Iron[];
+extern const u32 gItemIconPalette_Calcium[];
+extern const u32 gItemIconPalette_Zinc[];
+extern const u32 gItemIconPalette_Carbos[];
+extern const u32 gItemIcon_PPUp[];
+extern const u32 gItemIconPalette_PPUp[];
+extern const u32 gItemIcon_PPMax[];
+extern const u32 gItemIconPalette_PPMax[];
+// EV Feathers
+extern const u32 gItemIcon_HealthFeather[];
+extern const u32 gItemIconPalette_HealthFeather[];
+extern const u32 gItemIcon_MuscleFeather[];
+extern const u32 gItemIconPalette_MuscleFeather[];
+extern const u32 gItemIcon_ResistFeather[];
+extern const u32 gItemIconPalette_ResistFeather[];
+extern const u32 gItemIcon_GeniusFeather[];
+extern const u32 gItemIconPalette_GeniusFeather[];
+extern const u32 gItemIcon_CleverFeather[];
+extern const u32 gItemIconPalette_CleverFeather[];
+extern const u32 gItemIcon_SwiftFeather[];
+extern const u32 gItemIconPalette_SwiftFeather[];
+// Ability Modifiers
+extern const u32 gItemIcon_AbilityCapsule[];
+extern const u32 gItemIconPalette_AbilityCapsule[];
+extern const u32 gItemIcon_AbilityPatch[];
+extern const u32 gItemIconPalette_AbilityPatch[];
+// Mints
+extern const u32 gItemIcon_Mint[];
+extern const u32 gItemIconPalette_RedMint[];
+extern const u32 gItemIconPalette_BlueMint[];
+extern const u32 gItemIconPalette_LightBlueMint[];
+extern const u32 gItemIconPalette_PinkMint[];
+extern const u32 gItemIconPalette_GreenMint[];
+extern const u32 gItemIconPalette_YellowMint[];
+// Candy
+extern const u32 gItemIcon_RareCandy[];
+extern const u32 gItemIconPalette_RareCandy[];
+extern const u32 gItemIcon_ExpCandyXS[];
+extern const u32 gItemIcon_ExpCandyS[];
+extern const u32 gItemIcon_ExpCandyM[];
+extern const u32 gItemIcon_ExpCandyL[];
+extern const u32 gItemIcon_ExpCandyXL[];
+extern const u32 gItemIconPalette_ExpCandies[];
+extern const u32 gItemIcon_DynamaxCandy[];
+extern const u32 gItemIconPalette_DynamaxCandy[];
+// Medicinal Flutes
+extern const u32 gItemIcon_Flute[];
+extern const u32 gItemIconPalette_BlueFlute[];
+extern const u32 gItemIconPalette_YellowFlute[];
+extern const u32 gItemIconPalette_RedFlute[];
+// Encounter-modifying Flutes
+extern const u32 gItemIconPalette_BlackFlute[];
+extern const u32 gItemIconPalette_WhiteFlute[];
+// Encounter Modifiers
+extern const u32 gItemIcon_Repel[];
+extern const u32 gItemIconPalette_Repel[];
+extern const u32 gItemIconPalette_SuperRepel[];
+extern const u32 gItemIconPalette_MaxRepel[];
+extern const u32 gItemIcon_Lure[];
+extern const u32 gItemIconPalette_Lure[];
+extern const u32 gItemIconPalette_SuperLure[];
+extern const u32 gItemIconPalette_MaxLure[];
+extern const u32 gItemIcon_EscapeRope[];
+extern const u32 gItemIconPalette_EscapeRope[];
+// X Items
+extern const u32 gItemIcon_BattleStatItem[];
+extern const u32 gItemIconPalette_XAttack[];
+extern const u32 gItemIconPalette_XDefend[];
+extern const u32 gItemIconPalette_XSpecial[];
+extern const u32 gItemIcon_XSpecialDefense[];
+extern const u32 gItemIconPalette_XSpecialDefense[];
+extern const u32 gItemIconPalette_XSpeed[];
+extern const u32 gItemIconPalette_XAccuracy[];
+extern const u32 gItemIconPalette_DireHit[];
+extern const u32 gItemIconPalette_GuardSpec[];
+// Escape Items
+extern const u32 gItemIcon_PokeDoll[];
+extern const u32 gItemIconPalette_PokeDoll[];
+extern const u32 gItemIcon_FluffyTail[];
+extern const u32 gItemIconPalette_FluffyTail[];
+extern const u32 gItemIcon_PokeToy[];
+extern const u32 gItemIconPalette_PokeToy[];
+extern const u32 gItemIcon_MaxMushrooms[];
+extern const u32 gItemIconPalette_MaxMushrooms[];
+// Treasures
+extern const u32 gItemIcon_BottleCap[];
+extern const u32 gItemIconPalette_BottleCap[];
+extern const u32 gItemIconPalette_GoldBottleCap[];
+extern const u32 gItemIcon_Nugget[];
+extern const u32 gItemIconPalette_Nugget[];
+extern const u32 gItemIcon_BigNugget[];
+extern const u32 gItemIconPalette_BigNugget[];
+extern const u32 gItemIcon_TinyMushroom[];
+extern const u32 gItemIconPalette_Mushroom[];
+extern const u32 gItemIcon_BigMushroom[];
+extern const u32 gItemIcon_BalmMushroom[];
+extern const u32 gItemIconPalette_BalmMushroom[];
+extern const u32 gItemIcon_Pearl[];
+extern const u32 gItemIconPalette_Pearl[];
+extern const u32 gItemIcon_BigPearl[];
+extern const u32 gItemIcon_PearlString[];
+extern const u32 gItemIconPalette_PearlString[];
+extern const u32 gItemIcon_Stardust[];
+extern const u32 gItemIconPalette_Star[];
+extern const u32 gItemIcon_StarPiece[];
+extern const u32 gItemIcon_CometShard[];
+extern const u32 gItemIconPalette_CometShard[];
extern const u32 gItemIconPalette_ShoalSalt[];
extern const u32 gItemIcon_ShoalShell[];
extern const u32 gItemIconPalette_Shell[];
@@ -7455,69 +7661,90 @@ extern const u32 gItemIconPalette_RedShard[];
extern const u32 gItemIconPalette_BlueShard[];
extern const u32 gItemIconPalette_YellowShard[];
extern const u32 gItemIconPalette_GreenShard[];
-// Vitamins
-extern const u32 gItemIcon_HPUp[];
-extern const u32 gItemIconPalette_HPUp[];
-extern const u32 gItemIcon_Vitamin[];
-extern const u32 gItemIconPalette_Protein[];
-extern const u32 gItemIconPalette_Iron[];
-extern const u32 gItemIconPalette_Carbos[];
-extern const u32 gItemIconPalette_Calcium[];
-extern const u32 gItemIcon_RareCandy[];
-extern const u32 gItemIconPalette_RareCandy[];
-extern const u32 gItemIcon_PPUp[];
-extern const u32 gItemIconPalette_PPUp[];
-extern const u32 gItemIconPalette_Zinc[];
-extern const u32 gItemIcon_PPMax[];
-extern const u32 gItemIconPalette_PPMax[];
-// Battle items
-extern const u32 gItemIcon_BattleStatItem[];
-extern const u32 gItemIconPalette_GuardSpec[];
-extern const u32 gItemIconPalette_DireHit[];
-extern const u32 gItemIconPalette_XAttack[];
-extern const u32 gItemIconPalette_XDefend[];
-extern const u32 gItemIconPalette_XSpeed[];
-extern const u32 gItemIconPalette_XAccuracy[];
-extern const u32 gItemIconPalette_XSpecial[];
-extern const u32 gItemIcon_PokeDoll[];
-extern const u32 gItemIconPalette_PokeDoll[];
-extern const u32 gItemIcon_FluffyTail[];
-extern const u32 gItemIconPalette_FluffyTail[];
-// Field items
-extern const u32 gItemIcon_Repel[];
-extern const u32 gItemIconPalette_SuperRepel[];
-extern const u32 gItemIconPalette_MaxRepel[];
-extern const u32 gItemIcon_EscapeRope[];
-extern const u32 gItemIconPalette_EscapeRope[];
-extern const u32 gItemIcon_Repel[];
-extern const u32 gItemIconPalette_Repel[];
-// Evolution stones
-extern const u32 gItemIcon_SunStone[];
-extern const u32 gItemIconPalette_SunStone[];
-extern const u32 gItemIcon_MoonStone[];
-extern const u32 gItemIconPalette_MoonStone[];
-extern const u32 gItemIcon_FireStone[];
-extern const u32 gItemIconPalette_FireStone[];
-extern const u32 gItemIcon_ThunderStone[];
-extern const u32 gItemIconPalette_ThunderStone[];
-extern const u32 gItemIcon_WaterStone[];
-extern const u32 gItemIconPalette_WaterStone[];
-extern const u32 gItemIcon_LeafStone[];
-extern const u32 gItemIconPalette_LeafStone[];
-// Valuables
-extern const u32 gItemIcon_TinyMushroom[];
-extern const u32 gItemIconPalette_Mushroom[];
-extern const u32 gItemIcon_BigMushroom[];
-extern const u32 gItemIcon_Pearl[];
-extern const u32 gItemIconPalette_Pearl[];
-extern const u32 gItemIcon_BigPearl[];
-extern const u32 gItemIcon_Stardust[];
-extern const u32 gItemIconPalette_Star[];
-extern const u32 gItemIcon_StarPiece[];
-extern const u32 gItemIcon_Nugget[];
-extern const u32 gItemIconPalette_Nugget[];
extern const u32 gItemIcon_HeartScale[];
extern const u32 gItemIconPalette_HeartScale[];
+extern const u32 gItemIcon_Honey[];
+extern const u32 gItemIconPalette_Honey[];
+extern const u32 gItemIcon_RareBone[];
+extern const u32 gItemIconPalette_RareBone[];
+extern const u32 gItemIcon_OddKeystone[];
+extern const u32 gItemIconPalette_OddKeystone[];
+extern const u32 gItemIcon_PrettyFeather[];
+extern const u32 gItemIconPalette_PrettyFeather[];
+extern const u32 gItemIcon_RelicCoin[];
+extern const u32 gItemIconPalette_RelicCopper[];
+extern const u32 gItemIconPalette_RelicSilver[];
+extern const u32 gItemIconPalette_RelicGold[];
+extern const u32 gItemIcon_RelicVase[];
+extern const u32 gItemIconPalette_Relics[];
+extern const u32 gItemIcon_RelicBand[];
+extern const u32 gItemIcon_RelicStatue[];
+extern const u32 gItemIcon_RelicCrown[];
+extern const u32 gItemIcon_StrangeSouvenir[];
+extern const u32 gItemIconPalette_StrangeSouvenir[];
+// Fossils
+extern const u32 gItemIcon_HelixFossil[];
+extern const u32 gItemIconPalette_KantoFossil[];
+extern const u32 gItemIcon_DomeFossil[];
+extern const u32 gItemIcon_OldAmber[];
+extern const u32 gItemIconPalette_OldAmber[];
+extern const u32 gItemIcon_RootFossil[];
+extern const u32 gItemIconPalette_HoennFossil[];
+extern const u32 gItemIcon_ClawFossil[];
+extern const u32 gItemIcon_ArmorFossil[];
+extern const u32 gItemIconPalette_ArmorFossil[];
+extern const u32 gItemIcon_SkullFossil[];
+extern const u32 gItemIconPalette_SkullFossil[];
+extern const u32 gItemIcon_CoverFossil[];
+extern const u32 gItemIconPalette_CoverFossil[];
+extern const u32 gItemIcon_PlumeFossil[];
+extern const u32 gItemIconPalette_PlumeFossil[];
+extern const u32 gItemIcon_JawFossil[];
+extern const u32 gItemIconPalette_JawFossil[];
+extern const u32 gItemIcon_SailFossil[];
+extern const u32 gItemIconPalette_SailFossil[];
+extern const u32 gItemIcon_FossilizedBird[];
+extern const u32 gItemIconPalette_FossilizedBird[];
+extern const u32 gItemIcon_FossilizedFish[];
+extern const u32 gItemIconPalette_FossilizedFish[];
+extern const u32 gItemIcon_FossilizedDrake[];
+extern const u32 gItemIconPalette_FossilizedDrake[];
+extern const u32 gItemIcon_FossilizedDino[];
+extern const u32 gItemIconPalette_FossilizedDino[];
+// Mulch
+extern const u32 gItemIcon_Mulch[];
+extern const u32 gItemIconPalette_GrowthMulch[];
+extern const u32 gItemIconPalette_DampMulch[];
+extern const u32 gItemIcon_StableMulch[];
+extern const u32 gItemIconPalette_StableMulch[];
+extern const u32 gItemIconPalette_GooeyMulch[];
+extern const u32 gItemIconPalette_RichMulch[];
+extern const u32 gItemIconPalette_SurpriseMulch[];
+extern const u32 gItemIconPalette_BoostMulch[];
+extern const u32 gItemIconPalette_AmazeMulch[];
+// Apricorns
+extern const u32 gItemIcon_RedApricorn[];
+extern const u32 gItemIconPalette_RedApricorn[];
+extern const u32 gItemIcon_BlueApricorn[];
+extern const u32 gItemIconPalette_BlueApricorn[];
+extern const u32 gItemIcon_YellowApricorn[];
+extern const u32 gItemIconPalette_YellowApricorn[];
+extern const u32 gItemIcon_GreenApricorn[];
+extern const u32 gItemIconPalette_GreenApricorn[];
+extern const u32 gItemIcon_PinkApricorn[];
+extern const u32 gItemIconPalette_PinkApricorn[];
+extern const u32 gItemIcon_WhiteApricorn[];
+extern const u32 gItemIconPalette_WhiteApricorn[];
+extern const u32 gItemIcon_BlackApricorn[];
+extern const u32 gItemIconPalette_BlackApricorn[];
+extern const u32 gItemIcon_WishingPiece[];
+extern const u32 gItemIconPalette_WishingPiece[];
+extern const u32 gItemIcon_GalaricaTwig[];
+extern const u32 gItemIconPalette_GalaricaItem[];
+extern const u32 gItemIcon_ArmoriteOre[];
+extern const u32 gItemIconPalette_ArmoriteOre[];
+extern const u32 gItemIcon_DyniteOre[];
+extern const u32 gItemIconPalette_DyniteOre[];
// Mail
extern const u32 gItemIcon_OrangeMail[];
extern const u32 gItemIconPalette_OrangeMail[];
@@ -7543,6 +7770,621 @@ extern const u32 gItemIcon_FabMail[];
extern const u32 gItemIconPalette_FabMail[];
extern const u32 gItemIcon_RetroMail[];
extern const u32 gItemIconPalette_RetroMail[];
+// Evolution Items
+extern const u32 gItemIcon_FireStone[];
+extern const u32 gItemIconPalette_FireStone[];
+extern const u32 gItemIcon_WaterStone[];
+extern const u32 gItemIconPalette_WaterStone[];
+extern const u32 gItemIcon_ThunderStone[];
+extern const u32 gItemIconPalette_ThunderStone[];
+extern const u32 gItemIcon_LeafStone[];
+extern const u32 gItemIconPalette_LeafStone[];
+extern const u32 gItemIcon_IceStone[];
+extern const u32 gItemIconPalette_IceStone[];
+extern const u32 gItemIcon_SunStone[];
+extern const u32 gItemIconPalette_SunStone[];
+extern const u32 gItemIcon_MoonStone[];
+extern const u32 gItemIconPalette_MoonStone[];
+extern const u32 gItemIcon_ShinyStone[];
+extern const u32 gItemIconPalette_ShinyStone[];
+extern const u32 gItemIcon_DuskStone[];
+extern const u32 gItemIconPalette_DuskStone[];
+extern const u32 gItemIcon_DawnStone[];
+extern const u32 gItemIconPalette_DawnStone[];
+extern const u32 gItemIcon_SweetApple[];
+extern const u32 gItemIconPalette_SweetApple[];
+extern const u32 gItemIcon_TartApple[];
+extern const u32 gItemIconPalette_TartApple[];
+extern const u32 gItemIcon_CrackedPot[];
+extern const u32 gItemIcon_ChippedPot[];
+extern const u32 gItemIconPalette_Pot[];
+extern const u32 gItemIcon_GalaricaCuff[];
+extern const u32 gItemIcon_GalaricaWreath[];
+extern const u32 gItemIcon_DragonScale[];
+extern const u32 gItemIconPalette_DragonScale[];
+extern const u32 gItemIcon_Upgrade[];
+extern const u32 gItemIconPalette_Upgrade[];
+extern const u32 gItemIcon_Protector[];
+extern const u32 gItemIconPalette_Protector[];
+extern const u32 gItemIcon_Electirizer[];
+extern const u32 gItemIconPalette_Electirizer[];
+extern const u32 gItemIcon_Magmarizer[];
+extern const u32 gItemIconPalette_Magmarizer[];
+extern const u32 gItemIcon_DubiousDisc[];
+extern const u32 gItemIconPalette_DubiousDisc[];
+extern const u32 gItemIcon_ReaperCloth[];
+extern const u32 gItemIconPalette_ReaperCloth[];
+extern const u32 gItemIcon_PrismScale[];
+extern const u32 gItemIconPalette_PrismScale[];
+extern const u32 gItemIcon_WhippedDream[];
+extern const u32 gItemIconPalette_WhippedDream[];
+extern const u32 gItemIcon_Sachet[];
+extern const u32 gItemIconPalette_Sachet[];
+extern const u32 gItemIcon_OvalStone[];
+extern const u32 gItemIconPalette_OvalStone[];
+extern const u32 gItemIcon_StrawberrySweet[];
+extern const u32 gItemIconPalette_StrawberrySweet[];
+extern const u32 gItemIcon_LoveSweet[];
+extern const u32 gItemIconPalette_LoveSweet[];
+extern const u32 gItemIcon_BerrySweet[];
+extern const u32 gItemIconPalette_BerrySweet[];
+extern const u32 gItemIcon_CloverSweet[];
+extern const u32 gItemIconPalette_CloverSweet[];
+extern const u32 gItemIcon_FlowerSweet[];
+extern const u32 gItemIconPalette_FlowerSweet[];
+extern const u32 gItemIcon_StarSweet[];
+extern const u32 gItemIconPalette_StarSweet[];
+extern const u32 gItemIcon_RibbonSweet[];
+extern const u32 gItemIconPalette_RibbonSweet[];
+extern const u32 gItemIcon_Everstone[];
+extern const u32 gItemIconPalette_Everstone[];
+// Nectars
+extern const u32 gItemIcon_RedNectar[];
+extern const u32 gItemIconPalette_RedNectar[];
+extern const u32 gItemIcon_YellowNectar[];
+extern const u32 gItemIconPalette_YellowNectar[];
+extern const u32 gItemIcon_PinkNectar[];
+extern const u32 gItemIconPalette_PinkNectar[];
+extern const u32 gItemIcon_PurpleNectar[];
+extern const u32 gItemIconPalette_PurpleNectar[];
+// Plates
+extern const u32 gItemIcon_FlamePlate[];
+extern const u32 gItemIconPalette_FlamePlate[];
+extern const u32 gItemIcon_SplashPlate[];
+extern const u32 gItemIconPalette_SplashPlate[];
+extern const u32 gItemIcon_ZapPlate[];
+extern const u32 gItemIconPalette_ZapPlate[];
+extern const u32 gItemIcon_MeadowPlate[];
+extern const u32 gItemIconPalette_MeadowPlate[];
+extern const u32 gItemIcon_IciclePlate[];
+extern const u32 gItemIconPalette_IciclePlate[];
+extern const u32 gItemIcon_FistPlate[];
+extern const u32 gItemIconPalette_FistPlate[];
+extern const u32 gItemIcon_ToxicPlate[];
+extern const u32 gItemIconPalette_ToxicPlate[];
+extern const u32 gItemIcon_EarthPlate[];
+extern const u32 gItemIconPalette_EarthPlate[];
+extern const u32 gItemIcon_SkyPlate[];
+extern const u32 gItemIconPalette_SkyPlate[];
+extern const u32 gItemIcon_MindPlate[];
+extern const u32 gItemIconPalette_MindPlate[];
+extern const u32 gItemIcon_InsectPlate[];
+extern const u32 gItemIconPalette_InsectPlate[];
+extern const u32 gItemIcon_StonePlate[];
+extern const u32 gItemIconPalette_StonePlate[];
+extern const u32 gItemIcon_SpookyPlate[];
+extern const u32 gItemIconPalette_SpookyPlate[];
+extern const u32 gItemIcon_DracoPlate[];
+extern const u32 gItemIconPalette_DracoPlate[];
+extern const u32 gItemIcon_DreadPlate[];
+extern const u32 gItemIconPalette_DreadPlate[];
+extern const u32 gItemIcon_IronPlate[];
+extern const u32 gItemIconPalette_IronPlate[];
+extern const u32 gItemIcon_PixiePlate[];
+extern const u32 gItemIconPalette_PixiePlate[];
+// Drives
+extern const u32 gItemIcon_DouseDrive[];
+extern const u32 gItemIconPalette_DouseDrive[];
+extern const u32 gItemIcon_ShockDrive[];
+extern const u32 gItemIconPalette_ShockDrive[];
+extern const u32 gItemIcon_BurnDrive[];
+extern const u32 gItemIconPalette_BurnDrive[];
+extern const u32 gItemIcon_ChillDrive[];
+extern const u32 gItemIconPalette_ChillDrive[];
+// Memories
+extern const u32 gItemIcon_FireMemory[];
+extern const u32 gItemIconPalette_FireMemory[];
+extern const u32 gItemIcon_WaterMemory[];
+extern const u32 gItemIconPalette_WaterMemory[];
+extern const u32 gItemIcon_ElectricMemory[];
+extern const u32 gItemIconPalette_ElectricMemory[];
+extern const u32 gItemIcon_GrassMemory[];
+extern const u32 gItemIconPalette_GrassMemory[];
+extern const u32 gItemIcon_IceMemory[];
+extern const u32 gItemIconPalette_IceMemory[];
+extern const u32 gItemIcon_FightingMemory[];
+extern const u32 gItemIconPalette_FightingMemory[];
+extern const u32 gItemIcon_PoisonMemory[];
+extern const u32 gItemIconPalette_PoisonMemory[];
+extern const u32 gItemIcon_GroundMemory[];
+extern const u32 gItemIconPalette_GroundMemory[];
+extern const u32 gItemIcon_FlyingMemory[];
+extern const u32 gItemIconPalette_FlyingMemory[];
+extern const u32 gItemIcon_PsychicMemory[];
+extern const u32 gItemIconPalette_PsychicMemory[];
+extern const u32 gItemIcon_BugMemory[];
+extern const u32 gItemIconPalette_BugMemory[];
+extern const u32 gItemIcon_RockMemory[];
+extern const u32 gItemIconPalette_RockMemory[];
+extern const u32 gItemIcon_GhostMemory[];
+extern const u32 gItemIconPalette_GhostMemory[];
+extern const u32 gItemIcon_DragonMemory[];
+extern const u32 gItemIconPalette_DragonMemory[];
+extern const u32 gItemIcon_DarkMemory[];
+extern const u32 gItemIconPalette_DarkMemory[];
+extern const u32 gItemIcon_SteelMemory[];
+extern const u32 gItemIconPalette_SteelMemory[];
+extern const u32 gItemIcon_FairyMemory[];
+extern const u32 gItemIconPalette_FairyMemory[];
+extern const u32 gItemIcon_RustedSword[];
+extern const u32 gItemIcon_RustedShield[];
+extern const u32 gItemIconPalette_RustedWeapons[];
+// Colored Orbs
+extern const u32 gItemIcon_RedOrb[];
+extern const u32 gItemIconPalette_RedOrb[];
+extern const u32 gItemIcon_BlueOrb[];
+extern const u32 gItemIconPalette_BlueOrb[];
+// Mega Stones
+extern const u32 gItemIcon_Venusaurite[];
+extern const u32 gItemIconPalette_Venusaurite[];
+extern const u32 gItemIcon_CharizarditeX[];
+extern const u32 gItemIconPalette_CharizarditeX[];
+extern const u32 gItemIcon_CharizarditeY[];
+extern const u32 gItemIconPalette_CharizarditeY[];
+extern const u32 gItemIcon_Blastoisinite[];
+extern const u32 gItemIconPalette_Blastoisinite[];
+extern const u32 gItemIcon_Beedrillite[];
+extern const u32 gItemIconPalette_Beedrillite[];
+extern const u32 gItemIcon_Pidgeotite[];
+extern const u32 gItemIconPalette_Pidgeotite[];
+extern const u32 gItemIcon_Alakazite[];
+extern const u32 gItemIconPalette_Alakazite[];
+extern const u32 gItemIcon_Slowbronite[];
+extern const u32 gItemIconPalette_Slowbronite[];
+extern const u32 gItemIcon_Gengarite[];
+extern const u32 gItemIconPalette_Gengarite[];
+extern const u32 gItemIcon_Kangaskhanite[];
+extern const u32 gItemIconPalette_Kangaskhanite[];
+extern const u32 gItemIcon_Pinsirite[];
+extern const u32 gItemIconPalette_Pinsirite[];
+extern const u32 gItemIcon_Gyaradosite[];
+extern const u32 gItemIconPalette_Gyaradosite[];
+extern const u32 gItemIcon_Aerodactylite[];
+extern const u32 gItemIconPalette_Aerodactylite[];
+extern const u32 gItemIcon_MewtwoniteX[];
+extern const u32 gItemIconPalette_MewtwoniteX[];
+extern const u32 gItemIcon_MewtwoniteY[];
+extern const u32 gItemIconPalette_MewtwoniteY[];
+extern const u32 gItemIcon_Ampharosite[];
+extern const u32 gItemIconPalette_Ampharosite[];
+extern const u32 gItemIcon_Steelixite[];
+extern const u32 gItemIconPalette_Steelixite[];
+extern const u32 gItemIcon_Scizorite[];
+extern const u32 gItemIconPalette_Scizorite[];
+extern const u32 gItemIcon_Heracronite[];
+extern const u32 gItemIconPalette_Heracronite[];
+extern const u32 gItemIcon_Houndoominite[];
+extern const u32 gItemIconPalette_Houndoominite[];
+extern const u32 gItemIcon_Tyranitarite[];
+extern const u32 gItemIconPalette_Tyranitarite[];
+extern const u32 gItemIcon_Sceptilite[];
+extern const u32 gItemIconPalette_Sceptilite[];
+extern const u32 gItemIcon_Blazikenite[];
+extern const u32 gItemIconPalette_Blazikenite[];
+extern const u32 gItemIcon_Swampertite[];
+extern const u32 gItemIconPalette_Swampertite[];
+extern const u32 gItemIcon_Gardevoirite[];
+extern const u32 gItemIconPalette_Gardevoirite[];
+extern const u32 gItemIcon_Sablenite[];
+extern const u32 gItemIconPalette_Sablenite[];
+extern const u32 gItemIcon_Mawilite[];
+extern const u32 gItemIconPalette_Mawilite[];
+extern const u32 gItemIcon_Aggronite[];
+extern const u32 gItemIconPalette_Aggronite[];
+extern const u32 gItemIcon_Medichamite[];
+extern const u32 gItemIconPalette_Medichamite[];
+extern const u32 gItemIcon_Manectite[];
+extern const u32 gItemIconPalette_Manectite[];
+extern const u32 gItemIcon_Sharpedonite[];
+extern const u32 gItemIconPalette_Sharpedonite[];
+extern const u32 gItemIcon_Cameruptite[];
+extern const u32 gItemIconPalette_Cameruptite[];
+extern const u32 gItemIcon_Altarianite[];
+extern const u32 gItemIconPalette_Altarianite[];
+extern const u32 gItemIcon_Banettite[];
+extern const u32 gItemIconPalette_Banettite[];
+extern const u32 gItemIcon_Absolite[];
+extern const u32 gItemIconPalette_Absolite[];
+extern const u32 gItemIcon_Glalitite[];
+extern const u32 gItemIconPalette_Glalitite[];
+extern const u32 gItemIcon_Salamencite[];
+extern const u32 gItemIconPalette_Salamencite[];
+extern const u32 gItemIcon_Metagrossite[];
+extern const u32 gItemIconPalette_Metagrossite[];
+extern const u32 gItemIcon_Latiasite[];
+extern const u32 gItemIconPalette_Latiasite[];
+extern const u32 gItemIcon_Latiosite[];
+extern const u32 gItemIconPalette_Latiosite[];
+extern const u32 gItemIcon_Lopunnite[];
+extern const u32 gItemIconPalette_Lopunnite[];
+extern const u32 gItemIcon_Garchompite[];
+extern const u32 gItemIconPalette_Garchompite[];
+extern const u32 gItemIcon_Lucarionite[];
+extern const u32 gItemIconPalette_Lucarionite[];
+extern const u32 gItemIcon_Abomasite[];
+extern const u32 gItemIconPalette_Abomasite[];
+extern const u32 gItemIcon_Galladite[];
+extern const u32 gItemIconPalette_Galladite[];
+extern const u32 gItemIcon_Audinite[];
+extern const u32 gItemIconPalette_Audinite[];
+extern const u32 gItemIcon_Diancite[];
+extern const u32 gItemIconPalette_Diancite[];
+// Gems
+extern const u32 gItemIcon_NormalGem[];
+extern const u32 gItemIconPalette_NormalGem[];
+extern const u32 gItemIcon_FireGem[];
+extern const u32 gItemIconPalette_FireGem[];
+extern const u32 gItemIcon_WaterGem[];
+extern const u32 gItemIconPalette_WaterGem[];
+extern const u32 gItemIcon_ElectricGem[];
+extern const u32 gItemIconPalette_ElectricGem[];
+extern const u32 gItemIcon_GrassGem[];
+extern const u32 gItemIconPalette_GrassGem[];
+extern const u32 gItemIcon_IceGem[];
+extern const u32 gItemIconPalette_IceGem[];
+extern const u32 gItemIcon_FightingGem[];
+extern const u32 gItemIconPalette_FightingGem[];
+extern const u32 gItemIcon_PoisonGem[];
+extern const u32 gItemIconPalette_PoisonGem[];
+extern const u32 gItemIcon_GroundGem[];
+extern const u32 gItemIconPalette_GroundGem[];
+extern const u32 gItemIcon_FlyingGem[];
+extern const u32 gItemIconPalette_FlyingGem[];
+extern const u32 gItemIcon_PsychicGem[];
+extern const u32 gItemIconPalette_PsychicGem[];
+extern const u32 gItemIcon_BugGem[];
+extern const u32 gItemIconPalette_BugGem[];
+extern const u32 gItemIcon_RockGem[];
+extern const u32 gItemIconPalette_RockGem[];
+extern const u32 gItemIcon_GhostGem[];
+extern const u32 gItemIconPalette_GhostGem[];
+extern const u32 gItemIcon_DragonGem[];
+extern const u32 gItemIconPalette_DragonGem[];
+extern const u32 gItemIcon_DarkGem[];
+extern const u32 gItemIconPalette_DarkGem[];
+extern const u32 gItemIcon_SteelGem[];
+extern const u32 gItemIconPalette_SteelGem[];
+extern const u32 gItemIcon_FairyGem[];
+extern const u32 gItemIconPalette_FairyGem[];
+// Z-Crystals
+extern const u32 gItemIcon_NormaliumZ[];
+extern const u32 gItemIconPalette_NormaliumZ[];
+extern const u32 gItemIcon_FiriumZ[];
+extern const u32 gItemIconPalette_FiriumZ[];
+extern const u32 gItemIcon_WateriumZ[];
+extern const u32 gItemIconPalette_WateriumZ[];
+extern const u32 gItemIcon_ElectriumZ[];
+extern const u32 gItemIconPalette_ElectriumZ[];
+extern const u32 gItemIcon_GrassiumZ[];
+extern const u32 gItemIconPalette_GrassiumZ[];
+extern const u32 gItemIcon_IciumZ[];
+extern const u32 gItemIconPalette_IciumZ[];
+extern const u32 gItemIcon_FightiniumZ[];
+extern const u32 gItemIconPalette_FightiniumZ[];
+extern const u32 gItemIcon_PoisoniumZ[];
+extern const u32 gItemIconPalette_PoisoniumZ[];
+extern const u32 gItemIcon_GroundiumZ[];
+extern const u32 gItemIconPalette_GroundiumZ[];
+extern const u32 gItemIcon_FlyiniumZ[];
+extern const u32 gItemIconPalette_FlyiniumZ[];
+extern const u32 gItemIcon_PsychiumZ[];
+extern const u32 gItemIconPalette_PsychiumZ[];
+extern const u32 gItemIcon_BuginiumZ[];
+extern const u32 gItemIconPalette_BuginiumZ[];
+extern const u32 gItemIcon_RockiumZ[];
+extern const u32 gItemIconPalette_RockiumZ[];
+extern const u32 gItemIcon_GhostiumZ[];
+extern const u32 gItemIconPalette_GhostiumZ[];
+extern const u32 gItemIcon_DragoniumZ[];
+extern const u32 gItemIconPalette_DragoniumZ[];
+extern const u32 gItemIcon_DarkiniumZ[];
+extern const u32 gItemIconPalette_DarkiniumZ[];
+extern const u32 gItemIcon_SteeliumZ[];
+extern const u32 gItemIconPalette_SteeliumZ[];
+extern const u32 gItemIcon_FairiumZ[];
+extern const u32 gItemIconPalette_FairiumZ[];
+extern const u32 gItemIcon_PikaniumZ[];
+extern const u32 gItemIconPalette_PikaniumZ[];
+extern const u32 gItemIcon_EeviumZ[];
+extern const u32 gItemIconPalette_EeviumZ[];
+extern const u32 gItemIcon_SnorliumZ[];
+extern const u32 gItemIconPalette_SnorliumZ[];
+extern const u32 gItemIcon_MewniumZ[];
+extern const u32 gItemIconPalette_MewniumZ[];
+extern const u32 gItemIcon_DecidiumZ[];
+extern const u32 gItemIconPalette_DecidiumZ[];
+extern const u32 gItemIcon_InciniumZ[];
+extern const u32 gItemIconPalette_InciniumZ[];
+extern const u32 gItemIcon_PrimariumZ[];
+extern const u32 gItemIconPalette_PrimariumZ[];
+extern const u32 gItemIcon_LycaniumZ[];
+extern const u32 gItemIconPalette_LycaniumZ[];
+extern const u32 gItemIcon_MimikiumZ[];
+extern const u32 gItemIconPalette_MimikiumZ[];
+extern const u32 gItemIcon_KommoniumZ[];
+extern const u32 gItemIconPalette_KommoniumZ[];
+extern const u32 gItemIcon_TapuniumZ[];
+extern const u32 gItemIconPalette_TapuniumZ[];
+extern const u32 gItemIcon_SolganiumZ[];
+extern const u32 gItemIconPalette_SolganiumZ[];
+extern const u32 gItemIcon_LunaliumZ[];
+extern const u32 gItemIconPalette_LunaliumZ[];
+extern const u32 gItemIcon_MarshadiumZ[];
+extern const u32 gItemIconPalette_MarshadiumZ[];
+extern const u32 gItemIcon_AloraichiumZ[];
+extern const u32 gItemIconPalette_AloraichiumZ[];
+extern const u32 gItemIcon_PikashuniumZ[];
+extern const u32 gItemIconPalette_PikashuniumZ[];
+extern const u32 gItemIcon_UltranecroziumZ[];
+extern const u32 gItemIconPalette_UltranecroziumZ[];
+// Species-specific Held Items
+extern const u32 gItemIcon_LightBall[];
+extern const u32 gItemIconPalette_LightBall[];
+extern const u32 gItemIcon_Leek[];
+extern const u32 gItemIconPalette_Leek[];
+extern const u32 gItemIcon_ThickClub[];
+extern const u32 gItemIconPalette_ThickClub[];
+extern const u32 gItemIcon_LuckyPunch[];
+extern const u32 gItemIconPalette_LuckyPunch[];
+extern const u32 gItemIcon_MetalPowder[];
+extern const u32 gItemIconPalette_MetalPowder[];
+extern const u32 gItemIcon_QuickPowder[];
+extern const u32 gItemIconPalette_QuickPowder[];
+extern const u32 gItemIcon_DeepSeaScale[];
+extern const u32 gItemIconPalette_DeepSeaScale[];
+extern const u32 gItemIcon_DeepSeaTooth[];
+extern const u32 gItemIconPalette_DeepSeaTooth[];
+extern const u32 gItemIcon_SoulDew[];
+extern const u32 gItemIconPalette_SoulDew[];
+extern const u32 gItemIcon_AdamantOrb[];
+extern const u32 gItemIconPalette_AdamantOrb[];
+extern const u32 gItemIcon_LustrousOrb[];
+extern const u32 gItemIconPalette_LustrousOrb[];
+extern const u32 gItemIcon_GriseousOrb[];
+extern const u32 gItemIconPalette_GriseousOrb[];
+// Incenses
+extern const u32 gItemIcon_SeaIncense[];
+extern const u32 gItemIconPalette_SeaIncense[];
+extern const u32 gItemIcon_LaxIncense[];
+extern const u32 gItemIconPalette_LaxIncense[];
+extern const u32 gItemIcon_OddIncense[];
+extern const u32 gItemIconPalette_OddIncense[];
+extern const u32 gItemIcon_RockIncense[];
+extern const u32 gItemIconPalette_RockIncense[];
+extern const u32 gItemIcon_FullIncense[];
+extern const u32 gItemIconPalette_FullIncense[];
+extern const u32 gItemIcon_WaveIncense[];
+extern const u32 gItemIconPalette_WaveIncense[];
+extern const u32 gItemIcon_RoseIncense[];
+extern const u32 gItemIconPalette_RoseIncense[];
+extern const u32 gItemIcon_LuckIncense[];
+extern const u32 gItemIconPalette_LuckIncense[];
+extern const u32 gItemIcon_PureIncense[];
+extern const u32 gItemIconPalette_PureIncense[];
+// Contest Scarves
+extern const u32 gItemIcon_Scarf[];
+extern const u32 gItemIconPalette_RedScarf[];
+extern const u32 gItemIconPalette_BlueScarf[];
+extern const u32 gItemIconPalette_PinkScarf[];
+extern const u32 gItemIconPalette_GreenScarf[];
+extern const u32 gItemIconPalette_YellowScarf[];
+// EV Gain Modifiers
+extern const u32 gItemIcon_MachoBrace[];
+extern const u32 gItemIconPalette_MachoBrace[];
+extern const u32 gItemIcon_PowerWeight[];
+extern const u32 gItemIconPalette_PowerWeight[];
+extern const u32 gItemIcon_PowerBracer[];
+extern const u32 gItemIconPalette_PowerBracer[];
+extern const u32 gItemIcon_PowerBelt[];
+extern const u32 gItemIconPalette_PowerBelt[];
+extern const u32 gItemIcon_PowerLens[];
+extern const u32 gItemIconPalette_PowerLens[];
+extern const u32 gItemIcon_PowerBand[];
+extern const u32 gItemIconPalette_PowerBand[];
+extern const u32 gItemIcon_PowerAnklet[];
+extern const u32 gItemIconPalette_PowerAnklet[];
+// Type-boosting Held Items
+extern const u32 gItemIcon_SilkScarf[];
+extern const u32 gItemIconPalette_SilkScarf[];
+extern const u32 gItemIcon_Charcoal[];
+extern const u32 gItemIconPalette_Charcoal[];
+extern const u32 gItemIcon_MysticWater[];
+extern const u32 gItemIconPalette_MysticWater[];
+extern const u32 gItemIcon_Magnet[];
+extern const u32 gItemIconPalette_Magnet[];
+extern const u32 gItemIcon_MiracleSeed[];
+extern const u32 gItemIconPalette_MiracleSeed[];
+extern const u32 gItemIcon_NeverMeltIce[];
+extern const u32 gItemIconPalette_NeverMeltIce[];
+extern const u32 gItemIcon_BlackBelt[];
+extern const u32 gItemIconPalette_BlackTypeEnhancingItem[];
+extern const u32 gItemIcon_PoisonBarb[];
+extern const u32 gItemIconPalette_PoisonBarb[];
+extern const u32 gItemIcon_SoftSand[];
+extern const u32 gItemIconPalette_SoftSand[];
+extern const u32 gItemIcon_SharpBeak[];
+extern const u32 gItemIconPalette_SharpBeak[];
+extern const u32 gItemIcon_TwistedSpoon[];
+extern const u32 gItemIconPalette_TwistedSpoon[];
+extern const u32 gItemIcon_SilverPowder[];
+extern const u32 gItemIconPalette_SilverPowder[];
+extern const u32 gItemIcon_HardStone[];
+extern const u32 gItemIconPalette_HardStone[];
+extern const u32 gItemIcon_SpellTag[];
+extern const u32 gItemIconPalette_SpellTag[];
+extern const u32 gItemIcon_DragonFang[];
+extern const u32 gItemIconPalette_DragonFang[];
+extern const u32 gItemIcon_BlackGlasses[];
+extern const u32 gItemIcon_MetalCoat[];
+extern const u32 gItemIconPalette_MetalCoat[];
+// Choice Items
+extern const u32 gItemIcon_ChoiceBand[];
+extern const u32 gItemIconPalette_ChoiceBand[];
+extern const u32 gItemIcon_ChoiceSpecs[];
+extern const u32 gItemIconPalette_ChoiceSpecs[];
+extern const u32 gItemIcon_ChoiceScarf[];
+extern const u32 gItemIconPalette_ChoiceScarf[];
+// Status Orbs
+extern const u32 gItemIcon_FlameOrb[];
+extern const u32 gItemIconPalette_FlameOrb[];
+extern const u32 gItemIcon_ToxicOrb[];
+extern const u32 gItemIconPalette_ToxicOrb[];
+// Weather Rocks
+extern const u32 gItemIcon_DampRock[];
+extern const u32 gItemIconPalette_DampRock[];
+extern const u32 gItemIcon_HeatRock[];
+extern const u32 gItemIconPalette_HeatRock[];
+extern const u32 gItemIcon_SmoothRock[];
+extern const u32 gItemIconPalette_SmoothRock[];
+extern const u32 gItemIcon_IcyRock[];
+extern const u32 gItemIconPalette_IcyRock[];
+// Terrain Seeds
+extern const u32 gItemIcon_ElectricSeed[];
+extern const u32 gItemIconPalette_ElectricSeed[];
+extern const u32 gItemIcon_PsychicSeed[];
+extern const u32 gItemIconPalette_PsychicSeed[];
+extern const u32 gItemIcon_MistySeed[];
+extern const u32 gItemIconPalette_MistySeed[];
+extern const u32 gItemIcon_GrassySeed[];
+extern const u32 gItemIconPalette_GrassySeed[];
+// Type-activated Stat Modifiers
+extern const u32 gItemIcon_AbsorbBulb[];
+extern const u32 gItemIconPalette_AbsorbBulb[];
+extern const u32 gItemIcon_CellBattery[];
+extern const u32 gItemIconPalette_CellBattery[];
+extern const u32 gItemIcon_LuminousMoss[];
+extern const u32 gItemIconPalette_LuminousMoss[];
+extern const u32 gItemIcon_Snowball[];
+extern const u32 gItemIconPalette_Snowball[];
+// Misc. Held Items
+extern const u32 gItemIcon_BrightPowder[];
+extern const u32 gItemIconPalette_BrightPowder[];
+extern const u32 gItemIcon_InBattleHerb[];
+extern const u32 gItemIconPalette_WhiteHerb[];
+extern const u32 gItemIcon_ExpShare[];
+extern const u32 gItemIconPalette_ExpShare[];
+extern const u32 gItemIcon_QuickClaw[];
+extern const u32 gItemIconPalette_QuickClaw[];
+extern const u32 gItemIcon_SootheBell[];
+extern const u32 gItemIconPalette_SootheBell[];
+extern const u32 gItemIconPalette_MentalHerb[];
+extern const u32 gItemIcon_KingsRock[];
+extern const u32 gItemIconPalette_KingsRock[];
+extern const u32 gItemIcon_AmuletCoin[];
+extern const u32 gItemIconPalette_AmuletCoin[];
+extern const u32 gItemIcon_CleanseTag[];
+extern const u32 gItemIconPalette_CleanseTag[];
+extern const u32 gItemIcon_SmokeBall[];
+extern const u32 gItemIconPalette_SmokeBall[];
+extern const u32 gItemIcon_FocusBand[];
+extern const u32 gItemIconPalette_FocusBand[];
+extern const u32 gItemIcon_LuckyEgg[];
+extern const u32 gItemIconPalette_LuckyEgg[];
+extern const u32 gItemIcon_ScopeLens[];
+extern const u32 gItemIconPalette_ScopeLens[];
+extern const u32 gItemIcon_Leftovers[];
+extern const u32 gItemIconPalette_Leftovers[];
+extern const u32 gItemIcon_ShellBell[];
+extern const u32 gItemIcon_WideLens[];
+extern const u32 gItemIconPalette_WideLens[];
+extern const u32 gItemIcon_MuscleBand[];
+extern const u32 gItemIconPalette_MuscleBand[];
+extern const u32 gItemIcon_WiseGlasses[];
+extern const u32 gItemIconPalette_WiseGlasses[];
+extern const u32 gItemIcon_ExpertBelt[];
+extern const u32 gItemIconPalette_ExpertBelt[];
+extern const u32 gItemIcon_LightClay[];
+extern const u32 gItemIconPalette_LightClay[];
+extern const u32 gItemIcon_LifeOrb[];
+extern const u32 gItemIconPalette_LifeOrb[];
+extern const u32 gItemIcon_PowerHerb[];
+extern const u32 gItemIconPalette_PowerHerb[];
+extern const u32 gItemIcon_FocusSash[];
+extern const u32 gItemIconPalette_FocusSash[];
+extern const u32 gItemIcon_ZoomLens[];
+extern const u32 gItemIconPalette_ZoomLens[];
+extern const u32 gItemIcon_Metronome[];
+extern const u32 gItemIconPalette_Metronome[];
+extern const u32 gItemIcon_IronBall[];
+extern const u32 gItemIconPalette_IronBall[];
+extern const u32 gItemIcon_LaggingTail[];
+extern const u32 gItemIconPalette_LaggingTail[];
+extern const u32 gItemIcon_DestinyKnot[];
+extern const u32 gItemIconPalette_DestinyKnot[];
+extern const u32 gItemIcon_BlackSludge[];
+extern const u32 gItemIconPalette_BlackSludge[];
+extern const u32 gItemIcon_GripClaw[];
+extern const u32 gItemIconPalette_GripClaw[];
+extern const u32 gItemIcon_StickyBarb[];
+extern const u32 gItemIconPalette_StickyBarb[];
+extern const u32 gItemIcon_ShedShell[];
+extern const u32 gItemIconPalette_ShedShell[];
+extern const u32 gItemIcon_BigRoot[];
+extern const u32 gItemIconPalette_BigRoot[];
+extern const u32 gItemIcon_RazorClaw[];
+extern const u32 gItemIconPalette_RazorClaw[];
+extern const u32 gItemIcon_RazorFang[];
+extern const u32 gItemIconPalette_RazorFang[];
+extern const u32 gItemIcon_Eviolite[];
+extern const u32 gItemIconPalette_Eviolite[];
+extern const u32 gItemIcon_FloatStone[];
+extern const u32 gItemIconPalette_FloatStone[];
+extern const u32 gItemIcon_RockyHelmet[];
+extern const u32 gItemIconPalette_RockyHelmet[];
+extern const u32 gItemIcon_AirBalloon[];
+extern const u32 gItemIconPalette_AirBalloon[];
+extern const u32 gItemIcon_RedCard[];
+extern const u32 gItemIconPalette_RedCard[];
+extern const u32 gItemIcon_RingTarget[];
+extern const u32 gItemIconPalette_RingTarget[];
+extern const u32 gItemIcon_BindingBand[];
+extern const u32 gItemIconPalette_BindingBand[];
+extern const u32 gItemIcon_EjectButton[];
+extern const u32 gItemIconPalette_EjectButton[];
+extern const u32 gItemIcon_WeaknessPolicy[];
+extern const u32 gItemIconPalette_WeaknessPolicy[];
+extern const u32 gItemIcon_AssaultVest[];
+extern const u32 gItemIconPalette_AssaultVest[];
+extern const u32 gItemIcon_SafetyGoggles[];
+extern const u32 gItemIconPalette_SafetyGoggles[];
+extern const u32 gItemIcon_AdrenalineOrb[];
+extern const u32 gItemIconPalette_AdrenalineOrb[];
+extern const u32 gItemIcon_TerrainExtender[];
+extern const u32 gItemIconPalette_TerrainExtender[];
+extern const u32 gItemIcon_ProtectivePads[];
+extern const u32 gItemIconPalette_ProtectivePads[];
+extern const u32 gItemIcon_ThroatSpray[];
+extern const u32 gItemIconPalette_ThroatSpray[];
+extern const u32 gItemIcon_EjectPack[];
+extern const u32 gItemIconPalette_EjectPack[];
+extern const u32 gItemIcon_HeavyDutyBoots[];
+extern const u32 gItemIconPalette_HeavyDutyBoots[];
+extern const u32 gItemIcon_BlunderPolicy[];
+extern const u32 gItemIconPalette_BlunderPolicy[];
+extern const u32 gItemIcon_RoomService[];
+extern const u32 gItemIconPalette_RoomService[];
+extern const u32 gItemIcon_UtilityUmbrella[];
+extern const u32 gItemIconPalette_UtilityUmbrella[];
// Berries
extern const u32 gItemIcon_CheriBerry[];
extern const u32 gItemIconPalette_CheriBerry[];
@@ -7614,6 +8456,42 @@ extern const u32 gItemIcon_DurinBerry[];
extern const u32 gItemIconPalette_DurinBerry[];
extern const u32 gItemIcon_BelueBerry[];
extern const u32 gItemIconPalette_BelueBerry[];
+extern const u32 gItemIcon_ChilanBerry[];
+extern const u32 gItemIconPalette_ChilanBerry[];
+extern const u32 gItemIcon_OccaBerry[];
+extern const u32 gItemIconPalette_OccaBerry[];
+extern const u32 gItemIcon_PasshoBerry[];
+extern const u32 gItemIconPalette_PasshoBerry[];
+extern const u32 gItemIcon_WacanBerry[];
+extern const u32 gItemIconPalette_WacanBerry[];
+extern const u32 gItemIcon_RindoBerry[];
+extern const u32 gItemIconPalette_RindoBerry[];
+extern const u32 gItemIcon_YacheBerry[];
+extern const u32 gItemIconPalette_YacheBerry[];
+extern const u32 gItemIcon_ChopleBerry[];
+extern const u32 gItemIconPalette_ChopleBerry[];
+extern const u32 gItemIcon_KebiaBerry[];
+extern const u32 gItemIconPalette_KebiaBerry[];
+extern const u32 gItemIcon_ShucaBerry[];
+extern const u32 gItemIconPalette_ShucaBerry[];
+extern const u32 gItemIcon_CobaBerry[];
+extern const u32 gItemIconPalette_CobaBerry[];
+extern const u32 gItemIcon_PayapaBerry[];
+extern const u32 gItemIconPalette_PayapaBerry[];
+extern const u32 gItemIcon_TangaBerry[];
+extern const u32 gItemIconPalette_TangaBerry[];
+extern const u32 gItemIcon_ChartiBerry[];
+extern const u32 gItemIconPalette_ChartiBerry[];
+extern const u32 gItemIcon_KasibBerry[];
+extern const u32 gItemIconPalette_KasibBerry[];
+extern const u32 gItemIcon_HabanBerry[];
+extern const u32 gItemIconPalette_HabanBerry[];
+extern const u32 gItemIcon_ColburBerry[];
+extern const u32 gItemIconPalette_ColburBerry[];
+extern const u32 gItemIcon_BabiriBerry[];
+extern const u32 gItemIconPalette_BabiriBerry[];
+extern const u32 gItemIcon_RoseliBerry[];
+extern const u32 gItemIconPalette_RoseliBerry[];
extern const u32 gItemIcon_LiechiBerry[];
extern const u32 gItemIconPalette_LiechiBerry[];
extern const u32 gItemIcon_GanlonBerry[];
@@ -7630,235 +8508,172 @@ extern const u32 gItemIcon_StarfBerry[];
extern const u32 gItemIconPalette_StarfBerry[];
extern const u32 gItemIcon_EnigmaBerry[];
extern const u32 gItemIconPalette_EnigmaBerry[];
-// Hold items
-extern const u32 gItemIcon_BrightPowder[];
-extern const u32 gItemIconPalette_BrightPowder[];
-extern const u32 gItemIcon_InBattleHerb[];
-extern const u32 gItemIconPalette_WhiteHerb[];
-extern const u32 gItemIcon_MachoBrace[];
-extern const u32 gItemIconPalette_MachoBrace[];
-extern const u32 gItemIcon_ExpShare[];
-extern const u32 gItemIconPalette_ExpShare[];
-extern const u32 gItemIcon_QuickClaw[];
-extern const u32 gItemIconPalette_QuickClaw[];
-extern const u32 gItemIcon_SootheBell[];
-extern const u32 gItemIconPalette_SootheBell[];
-extern const u32 gItemIcon_InBattleHerb[];
-extern const u32 gItemIconPalette_MentalHerb[];
-extern const u32 gItemIcon_ChoiceBand[];
-extern const u32 gItemIconPalette_ChoiceBand[];
-extern const u32 gItemIcon_KingsRock[];
-extern const u32 gItemIconPalette_KingsRock[];
-extern const u32 gItemIcon_SilverPowder[];
-extern const u32 gItemIconPalette_SilverPowder[];
-extern const u32 gItemIcon_AmuletCoin[];
-extern const u32 gItemIconPalette_AmuletCoin[];
-extern const u32 gItemIcon_CleanseTag[];
-extern const u32 gItemIconPalette_CleanseTag[];
-extern const u32 gItemIcon_SoulDew[];
-extern const u32 gItemIconPalette_SoulDew[];
-extern const u32 gItemIcon_DeepSeaTooth[];
-extern const u32 gItemIconPalette_DeepSeaTooth[];
-extern const u32 gItemIcon_DeepSeaScale[];
-extern const u32 gItemIconPalette_DeepSeaScale[];
-extern const u32 gItemIcon_SmokeBall[];
-extern const u32 gItemIconPalette_SmokeBall[];
-extern const u32 gItemIcon_Everstone[];
-extern const u32 gItemIconPalette_Everstone[];
-extern const u32 gItemIcon_FocusBand[];
-extern const u32 gItemIconPalette_FocusBand[];
-extern const u32 gItemIcon_LuckyEgg[];
-extern const u32 gItemIconPalette_LuckyEgg[];
-extern const u32 gItemIcon_ScopeLens[];
-extern const u32 gItemIconPalette_ScopeLens[];
-extern const u32 gItemIcon_MetalCoat[];
-extern const u32 gItemIconPalette_MetalCoat[];
-extern const u32 gItemIcon_Leftovers[];
-extern const u32 gItemIconPalette_Leftovers[];
-extern const u32 gItemIcon_DragonScale[];
-extern const u32 gItemIconPalette_DragonScale[];
-extern const u32 gItemIcon_LightBall[];
-extern const u32 gItemIconPalette_LightBall[];
-extern const u32 gItemIcon_SoftSand[];
-extern const u32 gItemIconPalette_SoftSand[];
-extern const u32 gItemIcon_HardStone[];
-extern const u32 gItemIconPalette_HardStone[];
-extern const u32 gItemIcon_MiracleSeed[];
-extern const u32 gItemIconPalette_MiracleSeed[];
-extern const u32 gItemIcon_BlackGlasses[];
-extern const u32 gItemIconPalette_BlackTypeEnhancingItem[];
-extern const u32 gItemIcon_BlackBelt[];
-extern const u32 gItemIconPalette_BlackTypeEnhancingItem[];
-extern const u32 gItemIcon_Magnet[];
-extern const u32 gItemIconPalette_Magnet[];
-extern const u32 gItemIcon_MysticWater[];
-extern const u32 gItemIconPalette_MysticWater[];
-extern const u32 gItemIcon_SharpBeak[];
-extern const u32 gItemIconPalette_SharpBeak[];
-extern const u32 gItemIcon_PoisonBarb[];
-extern const u32 gItemIconPalette_PoisonBarb[];
-extern const u32 gItemIcon_NeverMeltIce[];
-extern const u32 gItemIconPalette_NeverMeltIce[];
-extern const u32 gItemIcon_SpellTag[];
-extern const u32 gItemIconPalette_SpellTag[];
-extern const u32 gItemIcon_TwistedSpoon[];
-extern const u32 gItemIconPalette_TwistedSpoon[];
-extern const u32 gItemIcon_Charcoal[];
-extern const u32 gItemIconPalette_Charcoal[];
-extern const u32 gItemIcon_DragonFang[];
-extern const u32 gItemIconPalette_DragonFang[];
-extern const u32 gItemIcon_SilkScarf[];
-extern const u32 gItemIconPalette_SilkScarf[];
-extern const u32 gItemIcon_UpGrade[];
-extern const u32 gItemIconPalette_UpGrade[];
-extern const u32 gItemIcon_ShellBell[];
-extern const u32 gItemIconPalette_Shell[];
-extern const u32 gItemIcon_SeaIncense[];
-extern const u32 gItemIconPalette_SeaIncense[];
-extern const u32 gItemIcon_LaxIncense[];
-extern const u32 gItemIconPalette_LaxIncense[];
-extern const u32 gItemIcon_LuckyPunch[];
-extern const u32 gItemIconPalette_LuckyPunch[];
-extern const u32 gItemIcon_MetalPowder[];
-extern const u32 gItemIconPalette_MetalPowder[];
-extern const u32 gItemIcon_ThickClub[];
-extern const u32 gItemIconPalette_ThickClub[];
-extern const u32 gItemIcon_Stick[];
-extern const u32 gItemIconPalette_Stick[];
-// Contest hold items
-extern const u32 gItemIcon_Scarf[];
-extern const u32 gItemIconPalette_RedScarf[];
-extern const u32 gItemIconPalette_BlueScarf[];
-extern const u32 gItemIconPalette_PinkScarf[];
-extern const u32 gItemIconPalette_GreenScarf[];
-extern const u32 gItemIconPalette_YellowScarf[];
-// Key items
+extern const u32 gItemIcon_MicleBerry[];
+extern const u32 gItemIconPalette_MicleBerry[];
+extern const u32 gItemIcon_CustapBerry[];
+extern const u32 gItemIconPalette_CustapBerry[];
+extern const u32 gItemIcon_JabocaBerry[];
+extern const u32 gItemIconPalette_JabocaBerry[];
+extern const u32 gItemIcon_RowapBerry[];
+extern const u32 gItemIconPalette_RowapBerry[];
+extern const u32 gItemIcon_KeeBerry[];
+extern const u32 gItemIconPalette_KeeBerry[];
+extern const u32 gItemIcon_MarangaBerry[];
+extern const u32 gItemIconPalette_MarangaBerry[];
+// TMs/HMs
+extern const u32 gItemIcon_TM[];
+extern const u32 gItemIcon_HM[];
+extern const u32 gItemIconPalette_NormalTMHM[];
+extern const u32 gItemIconPalette_FireTMHM[];
+extern const u32 gItemIconPalette_WaterTMHM[];
+extern const u32 gItemIconPalette_ElectricTMHM[];
+extern const u32 gItemIconPalette_GrassTMHM[];
+extern const u32 gItemIconPalette_IceTMHM[];
+extern const u32 gItemIconPalette_FightingTMHM[];
+extern const u32 gItemIconPalette_PoisonTMHM[];
+extern const u32 gItemIconPalette_GroundTMHM[];
+extern const u32 gItemIconPalette_FlyingTMHM[];
+extern const u32 gItemIconPalette_PsychicTMHM[];
+extern const u32 gItemIconPalette_BugTMHM[];
+extern const u32 gItemIconPalette_RockTMHM[];
+extern const u32 gItemIconPalette_GhostTMHM[];
+extern const u32 gItemIconPalette_DragonTMHM[];
+extern const u32 gItemIconPalette_DarkTMHM[];
+extern const u32 gItemIconPalette_SteelTMHM[];
+extern const u32 gItemIconPalette_FairyTMHM[];
+// Charms
+extern const u32 gItemIcon_OvalCharm[];
+extern const u32 gItemIconPalette_OvalCharm[];
+extern const u32 gItemIcon_ShinyCharm[];
+extern const u32 gItemIconPalette_ShinyCharm[];
+extern const u32 gItemIcon_CatchingCharm[];
+extern const u32 gItemIconPalette_CatchingCharm[];
+extern const u32 gItemIcon_ExpCharm[];
+extern const u32 gItemIconPalette_ExpCharm[];
+// Form-changing Key Items
+extern const u32 gItemIcon_RotomCatalog[];
+extern const u32 gItemIconPalette_RotomCatalog[];
+extern const u32 gItemIcon_Gracidea[];
+extern const u32 gItemIconPalette_Gracidea[];
+extern const u32 gItemIcon_RevealGlass[];
+extern const u32 gItemIconPalette_RevealGlass[];
+extern const u32 gItemIcon_DNASplicers[];
+extern const u32 gItemIconPalette_DNASplicers[];
+extern const u32 gItemIcon_ZygardeCube[];
+extern const u32 gItemIconPalette_ZygardeCube[];
+extern const u32 gItemIcon_PrisonBottle[];
+extern const u32 gItemIconPalette_PrisonBottle[];
+extern const u32 gItemIcon_NecrozmaFuser[];
+extern const u32 gItemIconPalette_NSolarizer[];
+extern const u32 gItemIconPalette_NLunarizer[];
+extern const u32 gItemIcon_ReinsOfUnity[];
+extern const u32 gItemIconPalette_ReinsOfUnity[];
+// Battle Mechanic Key Items
+extern const u32 gItemIcon_MegaRing[];
+extern const u32 gItemIconPalette_MegaRing[];
+extern const u32 gItemIcon_ZPowerRing[];
+extern const u32 gItemIconPalette_ZPowerRing[];
+extern const u32 gItemIcon_DynamaxBand[];
+extern const u32 gItemIconPalette_DynamaxBand[];
+// Misc. Key Items
+extern const u32 gItemIcon_Bicycle[];
+extern const u32 gItemIconPalette_Bicycle[];
extern const u32 gItemIcon_MachBike[];
extern const u32 gItemIconPalette_MachBike[];
-extern const u32 gItemIcon_CoinCase[];
-extern const u32 gItemIconPalette_CoinCase[];
-extern const u32 gItemIcon_Itemfinder[];
-extern const u32 gItemIconPalette_Itemfinder[];
+extern const u32 gItemIcon_AcroBike[];
+extern const u32 gItemIconPalette_AcroBike[];
extern const u32 gItemIcon_OldRod[];
extern const u32 gItemIconPalette_OldRod[];
extern const u32 gItemIcon_GoodRod[];
extern const u32 gItemIconPalette_GoodRod[];
extern const u32 gItemIcon_SuperRod[];
extern const u32 gItemIconPalette_SuperRod[];
-extern const u32 gItemIcon_SSTicket[];
-extern const u32 gItemIconPalette_SSTicket[];
-extern const u32 gItemIcon_ContestPass[];
-extern const u32 gItemIconPalette_ContestPass[];
+extern const u32 gItemIcon_DowsingMachine[];
+extern const u32 gItemIconPalette_DowsingMachine[];
+extern const u32 gItemIcon_TownMap[];
+extern const u32 gItemIconPalette_TownMap[];
+extern const u32 gItemIcon_VsSeeker[];
+extern const u32 gItemIconPalette_VsSeeker[];
+extern const u32 gItemIcon_TMCase[];
+extern const u32 gItemIconPalette_TMCase[];
+extern const u32 gItemIcon_BerryPouch[];
+extern const u32 gItemIconPalette_BerryPouch[];
+extern const u32 gItemIcon_PokemonBoxLink[];
+extern const u32 gItemIconPalette_PokemonBoxLink[];
+extern const u32 gItemIcon_CoinCase[];
+extern const u32 gItemIconPalette_CoinCase[];
+extern const u32 gItemIcon_PowderJar[];
+extern const u32 gItemIconPalette_PowderJar[];
extern const u32 gItemIcon_WailmerPail[];
extern const u32 gItemIconPalette_WailmerPail[];
-extern const u32 gItemIcon_DevonGoods[];
-extern const u32 gItemIconPalette_DevonGoods[];
-extern const u32 gItemIcon_SootSack[];
-extern const u32 gItemIconPalette_SootSack[];
-extern const u32 gItemIcon_BasementKey[];
-extern const u32 gItemIconPalette_OldKey[];
-extern const u32 gItemIcon_AcroBike[];
-extern const u32 gItemIconPalette_AcroBike[];
+extern const u32 gItemIcon_PokeRadar[];
+extern const u32 gItemIconPalette_PokeRadar[];
extern const u32 gItemIcon_PokeblockCase[];
extern const u32 gItemIconPalette_PokeblockCase[];
-extern const u32 gItemIcon_Letter[];
-extern const u32 gItemIcon_EonTicket[];
-extern const u32 gItemIconPalette_EonTicket[];
-extern const u32 gItemIcon_Orb[];
-extern const u32 gItemIconPalette_RedOrb[];
-extern const u32 gItemIconPalette_BlueOrb[];
-extern const u32 gItemIcon_Scanner[];
-extern const u32 gItemIconPalette_Scanner[];
-extern const u32 gItemIcon_GoGoggles[];
-extern const u32 gItemIconPalette_GoGoggles[];
-extern const u32 gItemIcon_Meteorite[];
-extern const u32 gItemIconPalette_Meteorite[];
-extern const u32 gItemIcon_Room1Key[];
-extern const u32 gItemIconPalette_Key[];
-extern const u32 gItemIcon_Room2Key[];
-extern const u32 gItemIcon_Room4Key[];
-extern const u32 gItemIcon_Room6Key[];
-extern const u32 gItemIcon_StorageKey[];
-extern const u32 gItemIcon_RootFossil[];
-extern const u32 gItemIconPalette_HoennFossil[];
-extern const u32 gItemIcon_ClawFossil[];
-extern const u32 gItemIcon_DevonScope[];
-extern const u32 gItemIconPalette_DevonScope[];
-// TMs/HMs
-extern const u32 gItemIcon_TM[];
-extern const u32 gItemIconPalette_FightingTMHM[];
-extern const u32 gItemIconPalette_DragonTMHM[];
-extern const u32 gItemIconPalette_WaterTMHM[];
-extern const u32 gItemIconPalette_PsychicTMHM[];
-extern const u32 gItemIconPalette_NormalTMHM[];
-extern const u32 gItemIconPalette_PoisonTMHM[];
-extern const u32 gItemIconPalette_IceTMHM[];
-extern const u32 gItemIconPalette_GrassTMHM[];
-extern const u32 gItemIconPalette_FireTMHM[];
-extern const u32 gItemIconPalette_DarkTMHM[];
-extern const u32 gItemIconPalette_SteelTMHM[];
-extern const u32 gItemIconPalette_ElectricTMHM[];
-extern const u32 gItemIconPalette_GroundTMHM[];
-extern const u32 gItemIconPalette_GhostTMHM[];
-extern const u32 gItemIconPalette_RockTMHM[];
-extern const u32 gItemIconPalette_FlyingTMHM[];
-extern const u32 gItemIcon_HM[];
-// FireRed/LeafGreen key items
-extern const u32 gItemIcon_OaksParcel[];
-extern const u32 gItemIconPalette_OaksParcel[];
+extern const u32 gItemIcon_SootSack[];
+extern const u32 gItemIconPalette_SootSack[];
extern const u32 gItemIcon_PokeFlute[];
extern const u32 gItemIconPalette_PokeFlute[];
+extern const u32 gItemIcon_FameChecker[];
+extern const u32 gItemIconPalette_FameChecker[];
+extern const u32 gItemIcon_TeachyTV[];
+extern const u32 gItemIconPalette_TeachyTV[];
+// Story Key Items
+extern const u32 gItemIcon_SSTicket[];
+extern const u32 gItemIconPalette_SSTicket[];
+extern const u32 gItemIcon_EonTicket[];
+extern const u32 gItemIconPalette_EonTicket[];
+extern const u32 gItemIcon_MysticTicket[];
+extern const u32 gItemIconPalette_MysticTicket[];
+extern const u32 gItemIcon_AuroraTicket[];
+extern const u32 gItemIconPalette_AuroraTicket[];
+extern const u32 gItemIcon_OldSeaMap[];
+extern const u32 gItemIconPalette_OldSeaMap[];
+extern const u32 gItemIcon_Letter[];
+extern const u32 gItemIcon_DevonParts[];
+extern const u32 gItemIconPalette_DevonParts[];
+extern const u32 gItemIcon_GoGoggles[];
+extern const u32 gItemIconPalette_GoGoggles[];
+extern const u32 gItemIcon_DevonScope[];
+extern const u32 gItemIconPalette_DevonScope[];
+extern const u32 gItemIcon_BasementKey[];
+extern const u32 gItemIconPalette_OldKey[];
+extern const u32 gItemIcon_Scanner[];
+extern const u32 gItemIconPalette_Scanner[];
+extern const u32 gItemIcon_StorageKey[];
+extern const u32 gItemIcon_KeyToRoom1[];
+extern const u32 gItemIconPalette_Key[];
+extern const u32 gItemIcon_KeyToRoom2[];
+extern const u32 gItemIcon_KeyToRoom4[];
+extern const u32 gItemIcon_KeyToRoom6[];
+extern const u32 gItemIcon_Meteorite[];
+extern const u32 gItemIconPalette_Meteorite[];
+extern const u32 gItemIcon_MagmaEmblem[];
+extern const u32 gItemIconPalette_MagmaEmblem[];
+extern const u32 gItemIcon_ContestPass[];
+extern const u32 gItemIconPalette_ContestPass[];
+extern const u32 gItemIcon_OaksParcel[];
+extern const u32 gItemIconPalette_OaksParcel[];
extern const u32 gItemIcon_SecretKey[];
extern const u32 gItemIconPalette_SecretKey[];
extern const u32 gItemIcon_BikeVoucher[];
extern const u32 gItemIconPalette_BikeVoucher[];
extern const u32 gItemIcon_GoldTeeth[];
extern const u32 gItemIconPalette_GoldTeeth[];
-extern const u32 gItemIcon_OldAmber[];
-extern const u32 gItemIconPalette_OldAmber[];
extern const u32 gItemIcon_CardKey[];
extern const u32 gItemIconPalette_CardKey[];
extern const u32 gItemIcon_LiftKey[];
-extern const u32 gItemIconPalette_Key[];
-extern const u32 gItemIcon_HelixFossil[];
-extern const u32 gItemIconPalette_KantoFossil[];
-extern const u32 gItemIcon_DomeFossil[];
extern const u32 gItemIcon_SilphScope[];
extern const u32 gItemIconPalette_SilphScope[];
-extern const u32 gItemIcon_Bicycle[];
-extern const u32 gItemIconPalette_Bicycle[];
-extern const u32 gItemIcon_TownMap[];
-extern const u32 gItemIconPalette_TownMap[];
-extern const u32 gItemIcon_VSSeeker[];
-extern const u32 gItemIconPalette_VSSeeker[];
-extern const u32 gItemIcon_FameChecker[];
-extern const u32 gItemIconPalette_FameChecker[];
-extern const u32 gItemIcon_TMCase[];
-extern const u32 gItemIconPalette_TMCase[];
-extern const u32 gItemIcon_BerryPouch[];
-extern const u32 gItemIconPalette_BerryPouch[];
-extern const u32 gItemIcon_TeachyTV[];
-extern const u32 gItemIconPalette_TeachyTV[];
extern const u32 gItemIcon_TriPass[];
extern const u32 gItemIconPalette_TriPass[];
extern const u32 gItemIcon_RainbowPass[];
extern const u32 gItemIconPalette_RainbowPass[];
extern const u32 gItemIcon_Tea[];
extern const u32 gItemIconPalette_Tea[];
-extern const u32 gItemIcon_MysticTicket[];
-extern const u32 gItemIconPalette_MysticTicket[];
-extern const u32 gItemIcon_AuroraTicket[];
-extern const u32 gItemIconPalette_AuroraTicket[];
-extern const u32 gItemIcon_PowderJar[];
-extern const u32 gItemIconPalette_PowderJar[];
extern const u32 gItemIcon_Gem[];
extern const u32 gItemIconPalette_Ruby[];
extern const u32 gItemIconPalette_Sapphire[];
-// Emerald-only key items
-extern const u32 gItemIcon_MagmaEmblem[];
-extern const u32 gItemIconPalette_MagmaEmblem[];
-extern const u32 gItemIcon_OldSeaMap[];
-extern const u32 gItemIconPalette_OldSeaMap[];
extern const u32 gItemIcon_ReturnToFieldArrow[];
extern const u32 gItemIconPalette_ReturnToFieldArrow[];
@@ -7928,91 +8743,139 @@ extern const u32 gPartyMenuBg_Pal[];
// berry pics
extern const u32 gBerryPic_Cheri[];
-extern const u32 gBerryPalette_Cheri[];
extern const u32 gBerryPic_Chesto[];
-extern const u32 gBerryPalette_Chesto[];
extern const u32 gBerryPic_Pecha[];
-extern const u32 gBerryPalette_Pecha[];
extern const u32 gBerryPic_Rawst[];
-extern const u32 gBerryPalette_Rawst[];
extern const u32 gBerryPic_Aspear[];
-extern const u32 gBerryPalette_Aspear[];
extern const u32 gBerryPic_Leppa[];
-extern const u32 gBerryPalette_Leppa[];
extern const u32 gBerryPic_Oran[];
-extern const u32 gBerryPalette_Oran[];
extern const u32 gBerryPic_Persim[];
-extern const u32 gBerryPalette_Persim[];
extern const u32 gBerryPic_Lum[];
-extern const u32 gBerryPalette_Lum[];
extern const u32 gBerryPic_Sitrus[];
-extern const u32 gBerryPalette_Sitrus[];
extern const u32 gBerryPic_Figy[];
-extern const u32 gBerryPalette_Figy[];
extern const u32 gBerryPic_Wiki[];
-extern const u32 gBerryPalette_Wiki[];
extern const u32 gBerryPic_Mago[];
-extern const u32 gBerryPalette_Mago[];
extern const u32 gBerryPic_Aguav[];
-extern const u32 gBerryPalette_Aguav[];
extern const u32 gBerryPic_Iapapa[];
-extern const u32 gBerryPalette_Iapapa[];
extern const u32 gBerryPic_Razz[];
-extern const u32 gBerryPalette_Razz[];
extern const u32 gBerryPic_Bluk[];
-extern const u32 gBerryPalette_Bluk[];
extern const u32 gBerryPic_Nanab[];
-extern const u32 gBerryPalette_Nanab[];
extern const u32 gBerryPic_Wepear[];
-extern const u32 gBerryPalette_Wepear[];
extern const u32 gBerryPic_Pinap[];
-extern const u32 gBerryPalette_Pinap[];
extern const u32 gBerryPic_Pomeg[];
-extern const u32 gBerryPalette_Pomeg[];
extern const u32 gBerryPic_Kelpsy[];
-extern const u32 gBerryPalette_Kelpsy[];
extern const u32 gBerryPic_Qualot[];
-extern const u32 gBerryPalette_Qualot[];
extern const u32 gBerryPic_Hondew[];
-extern const u32 gBerryPalette_Hondew[];
extern const u32 gBerryPic_Grepa[];
-extern const u32 gBerryPalette_Grepa[];
extern const u32 gBerryPic_Tamato[];
-extern const u32 gBerryPalette_Tamato[];
extern const u32 gBerryPic_Cornn[];
-extern const u32 gBerryPalette_Cornn[];
extern const u32 gBerryPic_Magost[];
-extern const u32 gBerryPalette_Magost[];
extern const u32 gBerryPic_Rabuta[];
-extern const u32 gBerryPalette_Rabuta[];
extern const u32 gBerryPic_Nomel[];
-extern const u32 gBerryPalette_Nomel[];
extern const u32 gBerryPic_Spelon[];
-extern const u32 gBerryPalette_Spelon[];
extern const u32 gBerryPic_Pamtre[];
-extern const u32 gBerryPalette_Pamtre[];
extern const u32 gBerryPic_Watmel[];
-extern const u32 gBerryPalette_Watmel[];
extern const u32 gBerryPic_Durin[];
-extern const u32 gBerryPalette_Durin[];
extern const u32 gBerryPic_Belue[];
-extern const u32 gBerryPalette_Belue[];
+extern const u32 gBerryPic_Chilan[];
+extern const u32 gBerryPic_Occa[];
+extern const u32 gBerryPic_Passho[];
+extern const u32 gBerryPic_Wacan[];
+extern const u32 gBerryPic_Rindo[];
+extern const u32 gBerryPic_Yache[];
+extern const u32 gBerryPic_Chople[];
+extern const u32 gBerryPic_Kebia[];
+extern const u32 gBerryPic_Shuca[];
+extern const u32 gBerryPic_Coba[];
+extern const u32 gBerryPic_Payapa[];
+extern const u32 gBerryPic_Tanga[];
+extern const u32 gBerryPic_Charti[];
+extern const u32 gBerryPic_Kasib[];
+extern const u32 gBerryPic_Haban[];
+extern const u32 gBerryPic_Colbur[];
+extern const u32 gBerryPic_Babiri[];
+extern const u32 gBerryPic_Roseli[];
extern const u32 gBerryPic_Liechi[];
-extern const u32 gBerryPalette_Liechi[];
extern const u32 gBerryPic_Ganlon[];
-extern const u32 gBerryPalette_Ganlon[];
extern const u32 gBerryPic_Salac[];
-extern const u32 gBerryPalette_Salac[];
extern const u32 gBerryPic_Petaya[];
-extern const u32 gBerryPalette_Petaya[];
extern const u32 gBerryPic_Apicot[];
-extern const u32 gBerryPalette_Apicot[];
extern const u32 gBerryPic_Lansat[];
-extern const u32 gBerryPalette_Lansat[];
extern const u32 gBerryPic_Starf[];
-extern const u32 gBerryPalette_Starf[];
extern const u32 gBerryPic_Enigma[];
+extern const u32 gBerryPic_Micle[];
+extern const u32 gBerryPic_Custap[];
+extern const u32 gBerryPic_Jaboca[];
+extern const u32 gBerryPic_Rowap[];
+extern const u32 gBerryPic_Kee[];
+extern const u32 gBerryPic_Maranga[];
+extern const u32 gBerryPalette_Cheri[];
+extern const u32 gBerryPalette_Chesto[];
+extern const u32 gBerryPalette_Pecha[];
+extern const u32 gBerryPalette_Rawst[];
+extern const u32 gBerryPalette_Aspear[];
+extern const u32 gBerryPalette_Leppa[];
+extern const u32 gBerryPalette_Oran[];
+extern const u32 gBerryPalette_Persim[];
+extern const u32 gBerryPalette_Lum[];
+extern const u32 gBerryPalette_Sitrus[];
+extern const u32 gBerryPalette_Figy[];
+extern const u32 gBerryPalette_Wiki[];
+extern const u32 gBerryPalette_Mago[];
+extern const u32 gBerryPalette_Aguav[];
+extern const u32 gBerryPalette_Iapapa[];
+extern const u32 gBerryPalette_Razz[];
+extern const u32 gBerryPalette_Bluk[];
+extern const u32 gBerryPalette_Nanab[];
+extern const u32 gBerryPalette_Wepear[];
+extern const u32 gBerryPalette_Pinap[];
+extern const u32 gBerryPalette_Pomeg[];
+extern const u32 gBerryPalette_Kelpsy[];
+extern const u32 gBerryPalette_Qualot[];
+extern const u32 gBerryPalette_Hondew[];
+extern const u32 gBerryPalette_Grepa[];
+extern const u32 gBerryPalette_Tamato[];
+extern const u32 gBerryPalette_Cornn[];
+extern const u32 gBerryPalette_Magost[];
+extern const u32 gBerryPalette_Rabuta[];
+extern const u32 gBerryPalette_Nomel[];
+extern const u32 gBerryPalette_Spelon[];
+extern const u32 gBerryPalette_Pamtre[];
+extern const u32 gBerryPalette_Watmel[];
+extern const u32 gBerryPalette_Durin[];
+extern const u32 gBerryPalette_Belue[];
+extern const u32 gBerryPalette_Chilan[];
+extern const u32 gBerryPalette_Occa[];
+extern const u32 gBerryPalette_Passho[];
+extern const u32 gBerryPalette_Wacan[];
+extern const u32 gBerryPalette_Rindo[];
+extern const u32 gBerryPalette_Yache[];
+extern const u32 gBerryPalette_Chople[];
+extern const u32 gBerryPalette_Kebia[];
+extern const u32 gBerryPalette_Shuca[];
+extern const u32 gBerryPalette_Coba[];
+extern const u32 gBerryPalette_Payapa[];
+extern const u32 gBerryPalette_Tanga[];
+extern const u32 gBerryPalette_Charti[];
+extern const u32 gBerryPalette_Kasib[];
+extern const u32 gBerryPalette_Haban[];
+extern const u32 gBerryPalette_Colbur[];
+extern const u32 gBerryPalette_Babiri[];
+extern const u32 gBerryPalette_Roseli[];
+extern const u32 gBerryPalette_Liechi[];
+extern const u32 gBerryPalette_Ganlon[];
+extern const u32 gBerryPalette_Salac[];
+extern const u32 gBerryPalette_Petaya[];
+extern const u32 gBerryPalette_Apicot[];
+extern const u32 gBerryPalette_Lansat[];
+extern const u32 gBerryPalette_Starf[];
extern const u32 gBerryPalette_Enigma[];
+extern const u32 gBerryPalette_Micle[];
+extern const u32 gBerryPalette_Custap[];
+extern const u32 gBerryPalette_Jaboca[];
+extern const u32 gBerryPalette_Rowap[];
+extern const u32 gBerryPalette_Kee[];
+extern const u32 gBerryPalette_Maranga[];
//pokenav
extern const u16 gPokenavCondition_Pal[];
@@ -8072,18 +8935,24 @@ extern const u16 gBattleInterface_BallStatusBarPal[];
extern const u16 gBattleInterface_BallDisplayPal[];
extern const u8 gHealthboxElementsGfxTable[][32];
-extern const u16 gNamingScreenMenu_Pal[];
+extern const u16 gNamingScreenMenu_Pal[6][16];
extern const u32 gNamingScreenMenu_Gfx[];
extern const u32 gNamingScreenBackground_Tilemap[];
extern const u8 gNamingScreenKeyboardUpper_Tilemap[];
extern const u8 gNamingScreenKeyboardLower_Tilemap[];
extern const u8 gNamingScreenKeyboardSymbols_Tilemap[];
-extern const u8 gNamingScreenRWindow_Gfx[];
-extern const u8 gNamingScreenPageButton_Gfx[];
-extern const u8 gNamingScreenROptions_Gfx[];
-extern const u8 gNamingScreenCursor_Gfx[];
-extern const u8 gNamingScreenInputArrow_Gfx[];
-extern const u8 gNamingScreenUnderscore_Gfx[];
+extern const u32 gNamingScreenPageSwapFrame_Gfx[];
+extern const u32 gNamingScreenBackButton_Gfx[];
+extern const u32 gNamingScreenOKButton_Gfx[];
+extern const u32 gNamingScreenPageSwapButton_Gfx[];
+extern const u32 gNamingScreenPageSwapUpper_Gfx[];
+extern const u32 gNamingScreenPageSwapLower_Gfx[];
+extern const u32 gNamingScreenPageSwapOthers_Gfx[];
+extern const u32 gNamingScreenCursor_Gfx[];
+extern const u32 gNamingScreenCursorSquished_Gfx[];
+extern const u32 gNamingScreenCursorFilled_Gfx[];
+extern const u32 gNamingScreenInputArrow_Gfx[];
+extern const u32 gNamingScreenUnderscore_Gfx[];
extern const u32 gPokeblockFeedBg_Tilemap[];
@@ -8158,6 +9027,8 @@ extern const u32 gBattleAnimSpriteGfx_AirWave[];
extern const u32 gBattleAnimSpriteGfx_Orb[];
extern const u32 gBattleAnimSpriteGfx_Sword[];
extern const u32 gBattleAnimSpriteGfx_Seed[];
+extern const u32 gBattleAnimSpriteGfx_SeedBrown[];
+extern const u32 gBattleAnimSpriteGfx_Feint[];
extern const u32 gBattleAnimSpriteGfx_Explosion6[];
extern const u32 gBattleAnimSpriteGfx_PinkOrb[];
extern const u32 gBattleAnimSpriteGfx_Gust[];
@@ -8287,6 +9158,7 @@ extern const u32 gBattleAnimSpriteGfx_Smoke[];
extern const u32 gBattleAnimSpriteGfx_Smoke2[];
extern const u32 gBattleAnimSpriteGfx_Impact[];
extern const u32 gBattleAnimSpriteGfx_Particles[];
+extern const u32 gBattleAnimSpriteGfx_Particles2[];
extern const u32 gBattleAnimSpriteGfx_CircleImpact[];
extern const u32 gBattleAnimSpriteGfx_Scratch[];
extern const u32 gBattleAnimSpriteGfx_Cut[];
@@ -8430,6 +9302,21 @@ extern const u32 gBattleAnimBgTilemap_ScaryFaceOpponent[];
extern const u32 gBattleAnimBgTilemap_ScaryFaceContest[];
extern const u32 gBattleAnimSpriteGfx_Bird[];
extern const u32 gBattleAnimSpriteGfx_CrossImpact[];
+extern const u32 gBattleAnimSpriteGfx_TrumpCard[];
+extern const u32 gBattleAnimSpriteGfx_TrumpCardParticles[];
+extern const u32 gBattleAnimSpriteGfx_Accupressure[];
+extern const u32 gBattleAnimSpriteGfx_WringOut[];
+extern const u32 gBattleAnimSpriteGfx_ColoredOrbs[];
+extern const u32 gBattleAnimSpriteGfx_WorrySeed[];
+extern const u32 gBattleAnimSpriteGfx_SmallCloud[];
+extern const u32 gBattleAnimSpriteGfx_AttackOrder[];
+extern const u32 gBattleAnimSpriteGfx_DragonPulse[];
+extern const u32 gBattleAnimSpriteGfx_WoodHammer[];
+extern const u32 gBattleAnimSpriteGfx_PsychoCut[];
+extern const u32 gBattleAnimSpriteGfx_PowerGem[];
+extern const u32 gBattleAnimSpriteGfx_StoneEdge[];
+extern const u32 gBattleAnimSpriteGfx_StealthRock[];
+extern const u32 gBattleAnimSpriteGfx_PoisonJab[];
extern const u32 gBattleAnimSpritePal_Bone[];
extern const u32 gBattleAnimSpritePal_Spark[];
@@ -8438,6 +9325,8 @@ extern const u32 gBattleAnimSpritePal_AirWave[];
extern const u32 gBattleAnimSpritePal_Orb[];
extern const u32 gBattleAnimSpritePal_Sword[];
extern const u32 gBattleAnimSpritePal_Seed[];
+extern const u32 gBattleAnimSpritePal_SeedBrown[];
+extern const u32 gBattleAnimSpritePal_Feint[];
extern const u32 gBattleAnimSpritePal_Explosion6[];
extern const u32 gBattleAnimSpritePal_PinkOrb[];
extern const u32 gBattleAnimSpritePal_Gust[];
@@ -8567,6 +9456,7 @@ extern const u32 gBattleAnimSpritePal_Tongue[];
extern const u32 gBattleAnimSpritePal_Smoke[];
extern const u32 gBattleAnimSpritePal_Smoke[];
extern const u32 gBattleAnimSpritePal_Impact[];
+extern const u32 gBattleAnimSpritePal_Particles2[];
extern const u32 gBattleAnimSpritePal_CircleImpact[];
extern const u32 gBattleAnimSpritePal_Impact[];
extern const u32 gBattleAnimSpritePal_Impact[];
@@ -8689,6 +9579,7 @@ extern const u32 gBattleAnimSpritePal_MagnifyingGlass[];
extern const u32 gBattleAnimSpritePal_BrownOrb[];
extern const u32 gBattleAnimSpritePal_MetalSoundWaves[];
extern const u32 gBattleAnimSpritePal_FlyingDirt[];
+extern const u32 gBattleAnimSpritePal_Windstorm[];
extern const u32 gBattleAnimSpritePal_IcicleSpear[];
extern const u32 gBattleAnimSpritePal_Hail[];
extern const u32 gBattleAnimSpritePal_GlowyRedOrb[];
@@ -8713,6 +9604,203 @@ extern const u32 gBattleAnimSpritePal_CrossImpact[];
extern const u32 gBattleAnimSpritePal_Slash2[];
extern const u32 gBattleAnimSpritePal_WhipHit[];
extern const u32 gBattleAnimSpritePal_BlueRing2[];
+extern const u32 gBattleAnimSpritePal_TrumpCard[];
+extern const u32 gBattleAnimSpritePal_TrumpCardParticles[];
+extern const u32 gBattleAnimSpritePal_Accupressure[];
+extern const u32 gBattleAnimSpritePal_WringOut[];
+extern const u32 gBattleAnimSpritePal_ColoredOrbs[];
+extern const u32 gBattleAnimSpritePal_WorrySeed[];
+extern const u32 gBattleAnimSpritePal_SmallCloud[];
+extern const u32 gBattleAnimSpritePal_AttackOrder[];
+extern const u32 gBattleAnimSpritePal_DragonPulse[];
+extern const u32 gBattleAnimSpritePal_WoodHammer[];
+extern const u32 gBattleAnimSpritePal_PsychoCut[];
+extern const u32 gBattleAnimSpritePal_PowerGem[];
+extern const u32 gBattleAnimSpritePal_StoneEdge[];
+extern const u32 gBattleAnimSpritePal_StealthRock[];
+extern const u32 gBattleAnimSpritePal_PoisonJab[];
+// New Battle Anim Particles
+extern const u32 gBattleAnimSpriteGfx_WhiteStreak[];
+extern const u32 gBattleAnimSpritePal_WhiteStreak[];
+extern const u32 gBattleAnimSpriteGfx_PurpleJab[];
+extern const u32 gBattleAnimSpritePal_PurpleJab[];
+extern const u32 gBattleAnimSpritePal_ToxicSpikes[];
+extern const u32 gBattleAnimSpriteGfx_EnergyBall[];
+extern const u32 gBattleAnimSpritePal_EnergyBall[];
+extern const u32 gBattleAnimSpriteGfx_MegaStone[];
+extern const u32 gBattleAnimSpritePal_MegaStone[];
+extern const u32 gBattleAnimSpriteGfx_MegaParticles[];
+extern const u32 gBattleAnimSpritePal_MegaParticles[];
+extern const u32 gBattleAnimSpriteGfx_PrimalParticles[];
+extern const u32 gBattleAnimSpritePal_PrimalParticles[];
+extern const u32 gBattleAnimSpriteGfx_MegaSymbol[];
+extern const u32 gBattleAnimSpritePal_MegaSymbol[];
+extern const u32 gBattleAnimSpriteGfx_FlashCannonBall[];
+extern const u32 gBattleAnimSpritePal_FlashCannonBall[];
+extern const u32 gBattleAnimSpriteGfx_WaterGun[];
+extern const u32 gBattleAnimSpritePal_WaterGun[];
+extern const u32 gBattleAnimSpriteGfx_Punishment[];
+extern const u32 gBattleAnimSpritePal_Punishment[];
+extern const u32 gBattleAnimSpriteGfx_QuickGuard[];
+extern const u32 gBattleAnimSpritePal_QuickGuard[];
+
+// New Battle Anim Particles
+extern const u32 gBattleAnimSpriteGfx_AcupressureFinger[];
+extern const u32 gBattleAnimSpritePal_AcupressureFinger[];
+extern const u32 gBattleAnimSpriteGfx_AlphaStone[];
+extern const u32 gBattleAnimSpritePal_AlphaStone[];
+extern const u32 gBattleAnimSpriteGfx_AlphaSymbol[];
+extern const u32 gBattleAnimSpritePal_AlphaSymbol[];
+extern const u32 gBattleAnimSpriteGfx_Anchor[];
+extern const u32 gBattleAnimSpriteGfx_Apple[];
+extern const u32 gBattleAnimSpritePal_Apple[];
+extern const u32 gBattleAnimSpriteGfx_Arrows[];
+extern const u32 gBattleAnimSpriteGfx_AssuranceHand[];
+extern const u32 gBattleAnimSpritePal_AssuranceHand[];
+extern const u32 gBattleAnimSpriteGfx_AuraSphere[];
+extern const u32 gBattleAnimSpritePal_AuraSphere[];
+extern const u32 gBattleAnimSpritePal_AvalancheRocks[];
+extern const u32 gBattleAnimSpriteGfx_NewPokeball[];
+extern const u32 gBattleAnimSpritePal_NewPokeball[];
+extern const u32 gBattleAnimSpriteGfx_BerryEaten[];
+extern const u32 gBattleAnimSpritePal_BerryEaten[];
+extern const u32 gBattleAnimSpriteGfx_BerryNormal[];
+extern const u32 gBattleAnimSpritePal_BerryNormal[];
+extern const u32 gBattleAnimSpriteGfx_BigRock[];
+extern const u32 gBattleAnimSpritePal_BigRock[];
+extern const u32 gBattleAnimSpriteGfx_BlacephalonHead[];
+extern const u32 gBattleAnimSpritePal_BlacephalonHead[];
+extern const u32 gBattleAnimSpritePal_BlueFlare[];
+extern const u32 gBattleAnimSpriteGfx_Branch[];
+extern const u32 gBattleAnimSpritePal_Branch[];
+extern const u32 gBattleAnimSpriteGfx_Brine[];
+extern const u32 gBattleAnimSpritePal_Brine[];
+extern const u32 gBattleAnimSpriteGfx_ChainLink[];
+extern const u32 gBattleAnimSpritePal_ChainLink[];
+extern const u32 gBattleAnimSpriteGfx_Chop[];
+extern const u32 gBattleAnimSpritePal_Chop[];
+extern const u32 gBattleAnimSpriteGfx_Cacoon[];
+extern const u32 gBattleAnimSpritePal_Cacoon[];
+extern const u32 gBattleAnimSpriteGfx_Confide[];
+extern const u32 gBattleAnimSpritePal_Confide[];
+extern const u32 gBattleAnimSpriteGfx_CraftyShield[];
+extern const u32 gBattleAnimSpritePal_CraftyShield[];
+extern const u32 gBattleAnimSpriteGfx_NewNail[];
+extern const u32 gBattleAnimSpritePal_NewNail[];
+extern const u32 gBattleAnimSpritePal_DracoMeteor[];
+extern const u32 gBattleAnimSpriteGfx_DragonPulseRing[];
+extern const u32 gBattleAnimSpritePal_DragonPulseRing[];
+extern const u32 gBattleAnimSpriteGfx_DreepyMissile[];
+extern const u32 gBattleAnimSpritePal_DreepyMissile[];
+extern const u32 gBattleAnimSpriteGfx_Drill[];
+extern const u32 gBattleAnimSpritePal_Drill[];
+extern const u32 gBattleAnimSpriteGfx_NewEmbers[];
+extern const u32 gBattleAnimSpritePal_NewEmbers[];
+extern const u32 gBattleAnimSpriteGfx_FairyLockChains[];
+extern const u32 gBattleAnimSpriteGfx_Fishies[];
+extern const u32 gBattleAnimSpritePal_Fishies[];
+extern const u32 gBattleAnimSpriteGfx_NewFly[];
+extern const u32 gBattleAnimSpritePal_NewFly[];
+extern const u32 gBattleAnimSpritePal_FusionFlare[];
+extern const u32 gBattleAnimSpritePal_GarbagePoisonPillar[];
+extern const u32 gBattleAnimSpriteGfx_Gear[];
+extern const u32 gBattleAnimSpritePal_Gear[];
+extern const u32 gBattleAnimSpriteGfx_GigavoltHavocSpear[];
+extern const u32 gBattleAnimSpritePal_GigavoltHavocSpear[];
+extern const u32 gBattleAnimSpriteGfx_GoldenApple[];
+extern const u32 gBattleAnimSpritePal_GoldenApple[];
+extern const u32 gBattleAnimSpritePal_GreenDrake[];
+extern const u32 gBattleAnimSpriteGfx_NewGreenStar[];
+extern const u32 gBattleAnimSpritePal_NewGreenStar[];
+extern const u32 gBattleAnimSpriteGfx_HeartStamp[];
+extern const u32 gBattleAnimSpritePal_HeartStamp[];
+extern const u32 gBattleAnimSpriteGfx_ZygardeHexes[];
+extern const u32 gBattleAnimSpritePal_ZygardeHexes[];
+extern const u32 gBattleAnimSpriteGfx_HoopaHand[];
+extern const u32 gBattleAnimSpritePal_HoopaHand[];
+extern const u32 gBattleAnimSpriteGfx_HoopaRing[];
+extern const u32 gBattleAnimSpritePal_HoopaRing[];
+extern const u32 gBattleAnimSpriteGfx_NewHornHit[];
+extern const u32 gBattleAnimSpritePal_NewHornHit[];
+extern const u32 gBattleAnimSpriteGfx_HornLeech[];
+extern const u32 gBattleAnimSpritePal_HornLeech[];
+extern const u32 gBattleAnimSpriteGfx_HorseshoeFist[];
+extern const u32 gBattleAnimSpritePal_HorseshoeFist[];
+extern const u32 gBattleAnimSpriteGfx_HydroPump[];
+extern const u32 gBattleAnimSpritePal_HydroPump[];
+extern const u32 gBattleAnimSpriteGfx_IceRock[];
+extern const u32 gBattleAnimSpritePal_IceRock[];
+extern const u32 gBattleAnimSpriteGfx_LargeSpike[];
+extern const u32 gBattleAnimSpritePal_LargeSpike[];
+extern const u32 gBattleAnimSpriteGfx_NewLeaf[];
+extern const u32 gBattleAnimSpritePal_NewLeaf[];
+extern const u32 gBattleAnimSpriteGfx_NewLeechSeed[];
+extern const u32 gBattleAnimSpritePal_NewLeechSeed[];
+extern const u32 gBattleAnimSpriteGfx_LightningRain[];
+extern const u32 gBattleAnimSpritePal_LightningRain[];
+extern const u32 gBattleAnimSpriteGfx_NewEye[];
+extern const u32 gBattleAnimSpritePal_NewEye[];
+extern const u32 gBattleAnimSpriteGfx_MetalBits[];
+extern const u32 gBattleAnimSpriteGfx_MudBomb[];
+extern const u32 gBattleAnimSpritePal_MudBomb[];
+extern const u32 gBattleAnimSpriteGfx_Mushroom[];
+extern const u32 gBattleAnimSpritePal_Mushroom[];
+extern const u32 gBattleAnimSpritePal_NaturalGiftRing[];
+extern const u32 gBattleAnimSpriteGfx_NecrozmaStar[];
+extern const u32 gBattleAnimSpritePal_NecrozmaStar[];
+extern const u32 gBattleAnimSpritePal_NewImpact[];
+extern const u32 gBattleAnimSpriteGfx_Obstruct[];
+extern const u32 gBattleAnimSpritePal_Obstruct[];
+extern const u32 gBattleAnimSpriteGfx_OmegaStone[];
+extern const u32 gBattleAnimSpritePal_OmegaStone[];
+extern const u32 gBattleAnimSpriteGfx_OmegaSymbol[];
+extern const u32 gBattleAnimSpritePal_OmegaSymbol[];
+extern const u32 gBattleAnimSpriteGfx_PinkDiamond[];
+extern const u32 gBattleAnimSpritePal_PinkDiamond[];
+extern const u32 gBattleAnimSpriteGfx_PoisonColumn[];
+extern const u32 gBattleAnimSpritePal_PoisonColumn[];
+extern const u32 gBattleAnimSpriteGfx_PowerTrick[];
+extern const u32 gBattleAnimSpritePal_PowerTrick[];
+extern const u32 gBattleAnimSpriteGfx_PurpleDrake[];
+extern const u32 gBattleAnimSpritePal_PurpleDrake[];
+extern const u32 gBattleAnimSpriteGfx_QuickGuard[];
+extern const u32 gBattleAnimSpritePal_QuickGuard[];
+extern const u32 gBattleAnimSpriteGfx_RazorShell[];
+extern const u32 gBattleAnimSpritePal_RazorShell[];
+extern const u32 gBattleAnimSpriteGfx_RocksSmall[];
+extern const u32 gBattleAnimSpriteGfx_NewRocks[];
+extern const u32 gBattleAnimSpritePal_NewRocks[];
+extern const u32 gBattleAnimSpriteGfx_ShellLeft[];
+extern const u32 gBattleAnimSpritePal_ShellLeft[];
+extern const u32 gBattleAnimSpriteGfx_ShellRight[];
+extern const u32 gBattleAnimSpritePal_SpacialRendSlices[];
+extern const u32 gBattleAnimSpriteGfx_NewSpikes[];
+extern const u32 gBattleAnimSpritePal_NewSpikes[];
+extern const u32 gBattleAnimSpriteGfx_SpiritShackleArrow[];
+extern const u32 gBattleAnimSpritePal_SpiritShackleArrow[];
+extern const u32 gBattleAnimSpriteGfx_SteamEruption[];
+extern const u32 gBattleAnimSpritePal_SteamEruption[];
+extern const u32 gBattleAnimSpriteGfx_Steamroller[];
+extern const u32 gBattleAnimSpritePal_Steamroller[];
+extern const u32 gBattleAnimSpriteGfx_StonePillar[];
+extern const u32 gBattleAnimSpritePal_StonePillar[];
+extern const u32 gBattleAnimSpriteGfx_StraightBeam[];
+extern const u32 gBattleAnimSpritePal_StraightBeam[];
+extern const u32 gBattleAnimSpritePal_Poltergeist[];
+extern const u32 gBattleAnimSpriteGfx_SubstituteBack[];
+extern const u32 gBattleAnimSpriteGfx_SubstituteFront[];
+extern const u32 gBattleAnimSpritePal_SubstituteFront[];
+extern const u32 gBattleAnimSpritePal_NewSurf[];
+extern const u32 gBattleAnimSpriteGfx_NewSword[];
+extern const u32 gBattleAnimSpritePal_NewSword[];
+extern const u32 gBattleAnimSpriteGfx_NewTeeth[];
+extern const u32 gBattleAnimSpritePal_NewTeeth[];
+extern const u32 gBattleAnimSpriteGfx_NewHandsAndFeet[];
+extern const u32 gBattleAnimSpritePal_NewHandsAndFeet[];
+extern const u32 gBattleAnimSpriteGfx_Tornado[];
+extern const u32 gBattleAnimSpritePal_Tornado[];
+extern const u32 gBattleAnimSpriteGfx_ZMoveSymbol[];
+extern const u32 gBattleAnimSpritePal_ZMoveSymbol[];
extern const u32 gBattleAnimBgImage_Dark[];
extern const u32 gBattleAnimBgImage_Ghost[];
@@ -8727,6 +9815,20 @@ extern const u32 gBattleAnimBgImage_Cosmic[];
extern const u32 gBattleAnimBgImage_InAir[];
extern const u32 gBattleAnimBgImage_Aurora[];
extern const u32 gBattleAnimBgImage_Fissure[];
+extern const u32 gBattleAnimBgImage_TrickRoom[];
+extern const u32 gBattleAnimBgImage_Hurricane[];
+extern const u32 gBattleAnimBgPalette_Hurricane[];
+extern const u32 gBattleAnimBgTilemap_Hurricane[];
+extern const u32 gBattleAnimBgPalette_RockWrecker[];
+extern const u32 gBattleAnimBgTilemap_GigaImpactPlayer[];
+extern const u32 gBattleAnimBgTilemap_GigaImpactOpponent[];
+extern const u32 gBattleAnimBgTilemap_GigaImpactContest[];
+extern const u32 gBattleAnimBgImage_GigaImpact[];
+extern const u32 gBattleAnimBgPalette_GigaImpact[];
+extern const u32 gBattleAnimBgImage_SpacialRend[];
+extern const u32 gBattleAnimBgPalette_SpacialRend[];
+extern const u32 gBattleAnimBgPalette_DarkVoid[];
+extern const u32 gBattleAnimBgTilemap_DarkVoid[];
extern const u32 gBattleAnimBgPalette_Dark[];
extern const u32 gBattleAnimBgPalette_Ghost[];
extern const u32 gBattleAnimBgPalette_Psychic[];
@@ -8743,6 +9845,8 @@ extern const u32 gBattleAnimBgPalette_Aurora[];
extern const u32 gBattleAnimBgPalette_Fissure[];
extern const u32 gBattleAnimBgPalette_Bug[];
extern const u32 gBattleAnimBgPalette_SolarBeam[];
+extern const u32 gBattleAnimBgPalette_MagmaStorm[];
+extern const u32 gBattleAnimBgPalette_TrickRoom[];
extern const u32 gBattleAnimBgTilemap_Dark[];
extern const u32 gBattleAnimBgTilemap_Ghost[];
extern const u32 gBattleAnimBgTilemap_Psychic[];
@@ -8753,6 +9857,7 @@ extern const u32 gBattleAnimBgTilemap_Drill[];
extern const u32 gBattleAnimBgTilemap_DrillContests[];
extern const u32 gBattleAnimBgTilemap_HighspeedOpponent[];
extern const u32 gBattleAnimBgTilemap_HighspeedPlayer[];
+extern const u32 gBattleAnimBgTilemap_TrickRoom[];
extern const u32 gBattleAnimMaskImage_LightBeam[];
extern const u32 gBattleAnimMaskPalette_LightBeam[];
extern const u32 gBattleAnimMaskTilemap_LightBeam[];
@@ -8765,6 +9870,107 @@ extern const u32 gBattleAnimBgTilemap_Cosmic[];
extern const u32 gBattleAnimBgTilemap_InAir[];
extern const u32 gBattleAnimBgTilemap_Aurora[];
extern const u32 gBattleAnimBgTilemap_Fissure[];
+extern const u32 gBattleAnimBgPalette_SludgeWave[];
+extern const u32 gBattleAnimBgImage_Aeroblast[];
+extern const u32 gBattleAnimBgPalette_Aeroblast[];
+extern const u32 gBattleAnimBgTilemap_Aeroblast[];
+extern const u32 gBattleAnimBgPalette_AuraSphere[];
+extern const u32 gBattleAnimBgImage_BlackholeEclipse[];
+extern const u32 gBattleAnimBgPalette_BlackholeEclipse[];
+extern const u32 gBattleAnimBgTilemap_BlackholeEclipse[];
+extern const u32 gBattleAnimBgImage_BloomDoom[];
+extern const u32 gBattleAnimBgPalette_BloomDoom[];
+extern const u32 gBattleAnimBgTilemap_BloomDoom[];
+extern const u32 gBattleAnimBgImage_BoltStrike[];
+extern const u32 gBattleAnimBgPalette_BoltStrike[];
+extern const u32 gBattleAnimBgTilemap_BoltStrike[];
+extern const u32 gBattleAnimBgImage_ClangorousSoulblaze[];
+extern const u32 gBattleAnimBgPalette_ClangorousSoulblaze[];
+extern const u32 gBattleAnimBgTilemap_ClangorousSoulblaze[];
+extern const u32 gBattleAnimBgPalette_DynamaxCannon[];
+extern const u32 gBattleAnimBgImage_ElectricTerrain[];
+extern const u32 gBattleAnimBgPalette_ElectricTerrain[];
+extern const u32 gBattleAnimBgTilemap_ElectricTerrain[];
+extern const u32 gBattleAnimBgImage_Fire1[];
+extern const u32 gBattleAnimBgPalette_Fire1[];
+extern const u32 gBattleAnimBgTilemap_Fire1[];
+extern const u32 gBattleAnimBgPalette_Fire2[];
+extern const u32 gBattleAnimBgImage_FocusBlast[];
+extern const u32 gBattleAnimBgPalette_FocusBlast[];
+extern const u32 gBattleAnimBgTilemap_FocusBlast[];
+extern const u32 gBattleAnimBgPalette_GarbageFalls[];
+extern const u32 gBattleAnimBgImage_GrassyTerrain[];
+extern const u32 gBattleAnimBgPalette_GrassyTerrain[];
+extern const u32 gBattleAnimBgTilemap_GrassyTerrain[];
+extern const u32 gBattleAnimBgPalette_GunkShot[];
+extern const u32 gBattleAnimBgImage_HydroCannon[];
+extern const u32 gBattleAnimBgPalette_HydroCannon[];
+extern const u32 gBattleAnimBgTilemap_HydroCannon[];
+extern const u32 gBattleAnimBgImage_HydroPump[];
+extern const u32 gBattleAnimBgPalette_HydroPump[];
+extern const u32 gBattleAnimBgTilemap_HydroPump[];
+extern const u32 gBattleAnimBgPalette_HyperBeam[];
+extern const u32 gBattleAnimBgPalette_HyperspaceFury[];
+extern const u32 gBattleAnimBgImage_InfernoOverdrive[];
+extern const u32 gBattleAnimBgPalette_InfernoOverdrive[];
+extern const u32 gBattleAnimBgTilemap_InfernoOverdrive[];
+extern const u32 gBattleAnimBgImage_LeafStorm[];
+extern const u32 gBattleAnimBgPalette_LeafStorm[];
+extern const u32 gBattleAnimBgTilemap_LeafStorm[];
+extern const u32 gBattleAnimBgPalette_MagicRoom[];
+extern const u32 gBattleAnimBgImage_MaliciousMoonsault[];
+extern const u32 gBattleAnimBgPalette_MaliciousMoonsault[];
+extern const u32 gBattleAnimBgTilemap_MaliciousMoonsault[];
+extern const u32 gBattleAnimBgImage_MaxLightning[];
+extern const u32 gBattleAnimBgPalette_MaxLightning[];
+extern const u32 gBattleAnimBgTilemap_MaxLightning[];
+extern const u32 gBattleAnimBgImage_MistyTerrain[];
+extern const u32 gBattleAnimBgPalette_MistyTerrain[];
+extern const u32 gBattleAnimBgTilemap_MistyTerrain[];
+extern const u32 gBattleAnimBgImage_NeverendingNightmare[];
+extern const u32 gBattleAnimBgPalette_NeverendingNightmare[];
+extern const u32 gBattleAnimBgTilemap_NeverendingNightmare[];
+extern const u32 gBattleAnimBgImage_Nightmare[];
+extern const u32 gBattleAnimBgPalette_Nightmare[];
+extern const u32 gBattleAnimBgTilemap_Nightmare[];
+extern const u32 gBattleAnimBgPalette_PoisonFalls[];
+extern const u32 gBattleAnimBgPalette_PsychicNew[];
+extern const u32 gBattleAnimBgImage_PsychicTerrain[];
+extern const u32 gBattleAnimBgPalette_PsychicTerrain[];
+extern const u32 gBattleAnimBgTilemap_PsychicTerrain[];
+extern const u32 gBattleAnimBgImage_ShatteredPsyche[];
+extern const u32 gBattleAnimBgPalette_ShatteredPsyche[];
+extern const u32 gBattleAnimBgTilemap_ShatteredPsyche[];
+extern const u32 gBattleAnimBgImage_SkyDay[];
+extern const u32 gBattleAnimBgPalette_SkyDay[];
+extern const u32 gBattleAnimBgTilemap_SkyDay[];
+extern const u32 gBattleAnimBgPalette_SkyAfternoon[];
+extern const u32 gBattleAnimBgPalette_SkyNight[];
+extern const u32 gBattleAnimBgImage_SnuggleForever[];
+extern const u32 gBattleAnimBgPalette_SnuggleForever[];
+extern const u32 gBattleAnimBgTilemap_SnuggleForever[];
+extern const u32 gBattleAnimBgImage_SoulStealing7StarStrike[];
+extern const u32 gBattleAnimBgPalette_SoulStealing7StarStrike[];
+extern const u32 gBattleAnimBgTilemap_SoulStealing7StarStrike[];
+extern const u32 gBattleAnimBgPalette_TectonicRage[];
+extern const u32 gBattleAnimBgImage_TwinkleTackle[];
+extern const u32 gBattleAnimBgPalette_TwinkleTackle[];
+extern const u32 gBattleAnimBgTilemap_TwinkleTackle[];
+extern const u32 gBattleAnimBgImage_WaterPulse[];
+extern const u32 gBattleAnimBgPalette_WaterPulse[];
+extern const u32 gBattleAnimBgTilemap_WaterPulse[];
+extern const u32 gBattleAnimBgImage_Waterfall[];
+extern const u32 gBattleAnimBgPalette_Waterfall[];
+extern const u32 gBattleAnimBgTilemap_Waterfall[];
+extern const u32 gBattleAnimBgPalette_WonderRoom[];
+extern const u32 gBattleAnimBgImage_ZMoveActivate[];
+extern const u32 gBattleAnimBgPalette_ZMoveActivate[];
+extern const u32 gBattleAnimBgTilemap_ZMoveActivate[];
+extern const u32 gBattleAnimBgImage_ZMoveMountain[];
+extern const u32 gBattleAnimBgPalette_ZMoveMountain[];
+extern const u32 gBattleAnimBgTilemap_ZMoveMountain[];
+extern const u32 gBattleAnimSpritePal_SteelBeam[];
+extern const u32 gBattleAnimBgPalette_SteelBeam[];
extern const u32 gMetalShineGfx[];
extern const u32 gMetalShinePalette[];
@@ -8881,6 +10087,9 @@ extern const u16 gSlotMachineReelTimePikachu_Pal[];
extern const u32 gBattleAnimBgTilemap_Sandstorm[];
extern const u32 gBattleAnimBgImage_Sandstorm[];
+extern const u32 gBattleAnimBgTilemap_Windstorm[];
+extern const u32 gBattleAnimBgImage_Windstorm[];
+
// Pokedex Area Screen
extern const u32 gPokedexAreaScreenAreaUnknown_Gfx[];
extern const u16 gPokedexAreaScreenAreaUnknown_Pal[];
diff --git a/include/international_string_util.h b/include/international_string_util.h
index dd5c6ac5fe..b0ac8afb6b 100644
--- a/include/international_string_util.h
+++ b/include/international_string_util.h
@@ -11,7 +11,7 @@ int GetStringRightAlignXOffset(int fontId, const u8 *str, int totalWidth);
int GetStringCenterAlignXOffsetWithLetterSpacing(int fontId, const u8 *str, int totalWidth, int letterSpacing);
int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int letterSpacing);
int GetMaxWidthInMenuTable(const struct MenuAction *actions, int numActions);
-int GetMaxWidthInSubsetOfMenuTable(const struct MenuAction *actions, const u8* actionIds, int numActions);
+int GetMaxWidthInSubsetOfMenuTable(const struct MenuAction *actions, const u8 *actionIds, int numActions);
int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu);
void CopyMonCategoryText(int dexNum, u8 *dest);
u8 *GetStringClearToWidth(u8 *dest, int fontId, const u8 *str, int totalStringWidth);
diff --git a/include/intro.h b/include/intro.h
index 198ae26696..8ba030a287 100644
--- a/include/intro.h
+++ b/include/intro.h
@@ -7,7 +7,6 @@
// Exported ROM declarations
void CB2_InitCopyrightScreenAfterBootup(void);
-void CB2_InitCopyrightScreenAfterBootup(void);
void CB2_InitCopyrightScreenAfterTitleScreen(void);
void PanFadeAndZoomScreen(u16, u16, u16, u16);
diff --git a/include/item.h b/include/item.h
index bcd9178e54..0aaa678a16 100644
--- a/include/item.h
+++ b/include/item.h
@@ -2,6 +2,7 @@
#define GUARD_ITEM_H
#include "constants/item.h"
+#include "constants/item_config.h"
typedef void (*ItemUseFunc)(u8);
@@ -21,6 +22,7 @@ struct Item
u8 battleUsage;
ItemUseFunc battleUseFunc;
u8 secondaryId;
+ u8 flingPower;
};
struct BagPocket
@@ -75,5 +77,6 @@ ItemUseFunc ItemId_GetFieldFunc(u16 itemId);
u8 ItemId_GetBattleUsage(u16 itemId);
ItemUseFunc ItemId_GetBattleFunc(u16 itemId);
u8 ItemId_GetSecondaryId(u16 itemId);
+u8 ItemId_GetFlingPower(u16 itemId);
#endif // GUARD_ITEM_H
diff --git a/include/item_menu.h b/include/item_menu.h
index fd576c3b5a..ce03cdacb8 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -71,7 +71,7 @@ struct BagMenu
u8 unused1[2];
u8 pocketScrollArrowsTask;
u8 pocketSwitchArrowsTask;
- const u8* contextMenuItemsPtr;
+ const u8 *contextMenuItemsPtr;
u8 contextMenuItemsBuffer[4];
u8 contextMenuNumItems;
u8 numItemStacks[POCKETS_COUNT];
diff --git a/include/item_use.h b/include/item_use.h
index 3bc3c2226b..036a541012 100644
--- a/include/item_use.h
+++ b/include/item_use.h
@@ -11,6 +11,8 @@ void ItemUseOutOfBattle_PowderJar(u8);
void ItemUseOutOfBattle_SSTicket(u8);
void ItemUseOutOfBattle_WailmerPail(u8);
void ItemUseOutOfBattle_Medicine(u8);
+void ItemUseOutOfBattle_AbilityCapsule(u8);
+void ItemUseOutOfBattle_AbilityPatch(u8);
void ItemUseOutOfBattle_ReduceEV(u8);
void ItemUseOutOfBattle_SacredAsh(u8);
void ItemUseOutOfBattle_PPRecovery(u8);
@@ -36,4 +38,13 @@ void Task_UseDigEscapeRopeOnField(u8 taskId);
u8 CanUseDigOrEscapeRopeOnCurMap(void);
u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId);
+enum {
+ BALL_THROW_UNABLE_TWO_MONS,
+ BALL_THROW_UNABLE_NO_ROOM,
+ BALL_THROW_UNABLE_SEMI_INVULNERABLE,
+ BALL_THROW_ABLE,
+};
+
+bool32 CanThrowBall(void);
+
#endif // GUARD_ITEM_USE_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index d52c2fef6a..a8f8362cb3 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -98,7 +98,7 @@ struct RfuGameCompatibilityData
// anything the developers want. This struct is what GF decided to use it for.
// It can be up to 13 bytes in size (RFU_GAME_NAME_LENGTH).
// The player's name is sent separately as the username ("uname"), and does not
-// use a struct (gHostRfuUsername).
+// use a struct (gHostRfuUsername).
struct __attribute__((packed, aligned(2))) RfuGameData
{
struct RfuGameCompatibilityData compatibility;
diff --git a/include/mail.h b/include/mail.h
index 68c532b310..f4590a70ec 100644
--- a/include/mail.h
+++ b/include/mail.h
@@ -15,7 +15,7 @@
|| itemId == ITEM_RETRO_MAIL))
// mail.h
-void ReadMail(struct Mail *mail, void (*callback)(void), bool8 flag);
+void ReadMail(struct Mail *mail, void (*exitCallback)(void), bool8 hasText);
// mail_data.h
void ClearAllMail(void);
diff --git a/include/menu.h b/include/menu.h
index c38e87cbd6..43b564da28 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -50,7 +50,7 @@ void LoadMessageBoxAndBorderGfx(void);
void DrawDialogueFrame(u8 windowId, bool8 copyToVram);
void ClearStdWindowAndFrame(u8 windowId, bool8 copyToVram);
u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 fgColor, u8 bgColor, u8 shadowColor);
-void PrintPlayerNameOnWindow(u8, const u8*, u16, u16);
+void PrintPlayerNameOnWindow(u8, const u8 *, u16, u16);
void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram);
void SetStandardWindowBorderStyle(u8 windowId, bool8 copyToVram);
void DisplayYesNoMenuDefaultYes(void);
@@ -61,7 +61,7 @@ void AddTextPrinterWithCallbackForMessage(bool8 canSpeedUp, void (*callback)(str
void BgDmaFill(u32 bg, u8 value, int offset, int size);
void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 speed, const u8 *str);
void ClearStdWindowAndFrameToTransparent(u8 windowId, bool8 copyToVram);
-void SetWindowTemplateFields(struct WindowTemplate* template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock);
+void SetWindowTemplateFields(struct WindowTemplate *template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock);
void DrawStdFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 tileStart, u8 palette);
void ScheduleBgCopyTilemapToVram(u8 bgNum);
void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *strs);
diff --git a/include/money.h b/include/money.h
index 5c7c1c9842..e7a8379787 100644
--- a/include/money.h
+++ b/include/money.h
@@ -1,11 +1,11 @@
#ifndef GUARD_MONEY_H
#define GUARD_MONEY_H
-u32 GetMoney(u32* moneyPtr);
-void SetMoney(u32* moneyPtr, u32 newValue);
-bool8 IsEnoughMoney(u32* moneyPtr, u32 cost);
-void AddMoney(u32* moneyPtr, u32 toAdd);
-void RemoveMoney(u32* moneyPtr, u32 toSub);
+u32 GetMoney(u32 *moneyPtr);
+void SetMoney(u32 *moneyPtr, u32 newValue);
+bool8 IsEnoughMoney(u32 *moneyPtr, u32 cost);
+void AddMoney(u32 *moneyPtr, u32 toAdd);
+void RemoveMoney(u32 *moneyPtr, u32 toSub);
bool8 IsEnoughForCostInVar0x8005(void);
void SubtractMoneyFromVar0x8005(void);
void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed);
diff --git a/include/party_menu.h b/include/party_menu.h
index 23a17d7534..02f7b30b10 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -36,8 +36,8 @@ bool8 IsMultiBattle(void);
u8 GetCursorSelectionMonId(void);
u8 GetPartyMenuType(void);
void Task_HandleChooseMonInput(u8 taskId);
-u8* GetMonNickname(struct Pokemon *mon, u8 *dest);
-u8 DisplayPartyMenuMessage(const u8* str, bool8 keepOpen);
+u8 *GetMonNickname(struct Pokemon *mon, u8 *dest);
+u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen);
bool8 IsPartyMenuTextPrinterActive(void);
void PartyMenuModifyHP(u8 taskId, u8 slot, s8 hpIncrement, s16 HPDifference, TaskFunc task);
u8 GetAilmentFromStatus(u32 status);
@@ -49,6 +49,8 @@ void LoadHeldItemIcons(void);
void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty);
void CB2_ShowPartyMenuForItemUse(void);
void ItemUseCB_Medicine(u8 taskId, TaskFunc task);
+void ItemUseCB_AbilityCapsule(u8 taskId, TaskFunc task);
+void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task);
void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task);
void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task);
void ItemUseCB_PPUp(u8 taskId, TaskFunc task);
diff --git a/include/pokeball.h b/include/pokeball.h
index 1149791b86..815221c89f 100644
--- a/include/pokeball.h
+++ b/include/pokeball.h
@@ -5,16 +5,31 @@ enum
{
BALL_POKE,
BALL_GREAT,
- BALL_SAFARI,
BALL_ULTRA,
BALL_MASTER,
- BALL_NET,
- BALL_DIVE,
- BALL_NEST,
- BALL_REPEAT,
- BALL_TIMER,
- BALL_LUXURY,
BALL_PREMIER,
+ BALL_HEAL,
+ BALL_NET,
+ BALL_NEST,
+ BALL_DIVE,
+ BALL_DUSK,
+ BALL_TIMER,
+ BALL_QUICK,
+ BALL_REPEAT,
+ BALL_LUXURY,
+ BALL_LEVEL,
+ BALL_LURE,
+ BALL_MOON,
+ BALL_FRIEND,
+ BALL_LOVE,
+ BALL_FAST,
+ BALL_HEAVY,
+ BALL_DREAM,
+ BALL_SAFARI,
+ BALL_SPORT,
+ BALL_PARK,
+ BALL_BEAST,
+ BALL_CHERISH,
POKEBALL_COUNT
};
diff --git a/include/pokedex_area_screen.h b/include/pokedex_area_screen.h
index 027d3e4a78..86dfaa6c5b 100755
--- a/include/pokedex_area_screen.h
+++ b/include/pokedex_area_screen.h
@@ -1,6 +1,6 @@
#ifndef GUARD_POKEDEX_AREA_SCREEN_H
#define GUARD_POKEDEX_AREA_SCREEN_H
-void ShowPokedexAreaScreen(u16, u8*);
+void ShowPokedexAreaScreen(u16, u8 *);
#endif // GUARD_POKEDEX_AREA_SCREEN_H
diff --git a/include/pokedex_cry_screen.h b/include/pokedex_cry_screen.h
index 4d2043292d..3401db22da 100755
--- a/include/pokedex_cry_screen.h
+++ b/include/pokedex_cry_screen.h
@@ -12,10 +12,10 @@ struct CryScreenWindow
extern u8 gDexCryScreenState;
-bool8 LoadCryWaveformWindow(struct CryScreenWindow*, u8);
+bool8 LoadCryWaveformWindow(struct CryScreenWindow *, u8);
void UpdateCryWaveformWindow(u8);
void CryScreenPlayButton(u16);
-bool8 LoadCryMeter(struct CryScreenWindow*, u8);
+bool8 LoadCryMeter(struct CryScreenWindow *, u8);
void FreeCryScreen(void);
#endif
diff --git a/include/pokemon.h b/include/pokemon.h
index 5bbde135c4..d7de38c61f 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -9,37 +9,131 @@
#define GET_BASE_SPECIES_ID(speciesId) (GetFormSpeciesId(speciesId, 0))
#define FORM_SPECIES_END (0xffff)
+// Property labels for Get(Box)MonData / Set(Box)MonData
+enum {
+ MON_DATA_PERSONALITY,
+ MON_DATA_OT_ID,
+ MON_DATA_NICKNAME,
+ MON_DATA_LANGUAGE,
+ MON_DATA_SANITY_IS_BAD_EGG,
+ MON_DATA_SANITY_HAS_SPECIES,
+ MON_DATA_SANITY_IS_EGG,
+ MON_DATA_OT_NAME,
+ MON_DATA_MARKINGS,
+ MON_DATA_CHECKSUM,
+ MON_DATA_ENCRYPT_SEPARATOR,
+ MON_DATA_SPECIES,
+ MON_DATA_HELD_ITEM,
+ MON_DATA_MOVE1,
+ MON_DATA_MOVE2,
+ MON_DATA_MOVE3,
+ MON_DATA_MOVE4,
+ MON_DATA_PP1,
+ MON_DATA_PP2,
+ MON_DATA_PP3,
+ MON_DATA_PP4,
+ MON_DATA_PP_BONUSES,
+ MON_DATA_COOL,
+ MON_DATA_BEAUTY,
+ MON_DATA_CUTE,
+ MON_DATA_EXP,
+ MON_DATA_HP_EV,
+ MON_DATA_ATK_EV,
+ MON_DATA_DEF_EV,
+ MON_DATA_SPEED_EV,
+ MON_DATA_SPATK_EV,
+ MON_DATA_SPDEF_EV,
+ MON_DATA_FRIENDSHIP,
+ MON_DATA_SMART,
+ MON_DATA_POKERUS,
+ MON_DATA_MET_LOCATION,
+ MON_DATA_MET_LEVEL,
+ MON_DATA_MET_GAME,
+ MON_DATA_POKEBALL,
+ MON_DATA_HP_IV,
+ MON_DATA_ATK_IV,
+ MON_DATA_DEF_IV,
+ MON_DATA_SPEED_IV,
+ MON_DATA_SPATK_IV,
+ MON_DATA_SPDEF_IV,
+ MON_DATA_IS_EGG,
+ MON_DATA_ABILITY_NUM,
+ MON_DATA_TOUGH,
+ MON_DATA_SHEEN,
+ MON_DATA_OT_GENDER,
+ MON_DATA_COOL_RIBBON,
+ MON_DATA_BEAUTY_RIBBON,
+ MON_DATA_CUTE_RIBBON,
+ MON_DATA_SMART_RIBBON,
+ MON_DATA_TOUGH_RIBBON,
+ MON_DATA_STATUS,
+ MON_DATA_LEVEL,
+ MON_DATA_HP,
+ MON_DATA_MAX_HP,
+ MON_DATA_ATK,
+ MON_DATA_DEF,
+ MON_DATA_SPEED,
+ MON_DATA_SPATK,
+ MON_DATA_SPDEF,
+ MON_DATA_MAIL,
+ MON_DATA_SPECIES2,
+ MON_DATA_IVS,
+ MON_DATA_CHAMPION_RIBBON,
+ MON_DATA_WINNING_RIBBON,
+ MON_DATA_VICTORY_RIBBON,
+ MON_DATA_ARTIST_RIBBON,
+ MON_DATA_EFFORT_RIBBON,
+ MON_DATA_MARINE_RIBBON,
+ MON_DATA_LAND_RIBBON,
+ MON_DATA_SKY_RIBBON,
+ MON_DATA_COUNTRY_RIBBON,
+ MON_DATA_NATIONAL_RIBBON,
+ MON_DATA_EARTH_RIBBON,
+ MON_DATA_WORLD_RIBBON,
+ MON_DATA_UNUSED_RIBBONS,
+ MON_DATA_EVENT_LEGAL,
+ MON_DATA_KNOWN_MOVES,
+ MON_DATA_RIBBON_COUNT,
+ MON_DATA_RIBBONS,
+ MON_DATA_ATK2,
+ MON_DATA_DEF2,
+ MON_DATA_SPEED2,
+ MON_DATA_SPATK2,
+ MON_DATA_SPDEF2,
+};
+
struct PokemonSubstruct0
{
- u16 species;
- u16 heldItem;
- u32 experience;
- u8 ppBonuses;
- u8 friendship;
- u16 filler;
-};
+ /*0x00*/ u16 species;
+ /*0x02*/ u16 heldItem;
+ /*0x04*/ u32 experience;
+ /*0x08*/ u8 ppBonuses;
+ /*0x09*/ u8 friendship;
+ /*0x0A*/ u16 pokeball:5; //31 balls
+ u16 filler:11;
+}; /* size = 12 */
struct PokemonSubstruct1
{
- u16 moves[MAX_MON_MOVES];
- u8 pp[MAX_MON_MOVES];
-};
+ /*0x00*/ u16 moves[MAX_MON_MOVES];
+ /*0x08*/ u8 pp[MAX_MON_MOVES];
+}; /* size = 12 */
struct PokemonSubstruct2
{
- u8 hpEV;
- u8 attackEV;
- u8 defenseEV;
- u8 speedEV;
- u8 spAttackEV;
- u8 spDefenseEV;
- u8 cool;
- u8 beauty;
- u8 cute;
- u8 smart;
- u8 tough;
- u8 sheen;
-};
+ /*0x00*/ u8 hpEV;
+ /*0x01*/ u8 attackEV;
+ /*0x02*/ u8 defenseEV;
+ /*0x03*/ u8 speedEV;
+ /*0x04*/ u8 spAttackEV;
+ /*0x05*/ u8 spDefenseEV;
+ /*0x06*/ u8 cool;
+ /*0x07*/ u8 beauty;
+ /*0x08*/ u8 cute;
+ /*0x09*/ u8 smart;
+ /*0x0A*/ u8 tough;
+ /*0x0B*/ u8 sheen;
+}; /* size = 12 */
struct PokemonSubstruct3
{
@@ -48,7 +142,7 @@ struct PokemonSubstruct3
/* 0x02 */ u16 metLevel:7;
/* 0x02 */ u16 metGame:4;
- /* 0x03 */ u16 pokeball:4;
+ /* 0x03 */ u16 unused3_3:4;
/* 0x03 */ u16 otGender:1;
/* 0x04 */ u32 hpIV:5;
@@ -79,7 +173,7 @@ struct PokemonSubstruct3
/* 0x0B */ u32 unusedRibbons:2; // discarded in Gen 4
/* 0x0B */ u32 abilityNum:2;
/* 0x0B */ u32 eventLegal:1; // controls Mew & Deoxys obedience; if set, Pokémon is a fateful encounter in Gen 4+; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness.
-};
+}; /* size = 12 */
// Number of bytes in the largest Pokémon substruct.
// They are assumed to be the same size, and will be padded to
@@ -179,24 +273,24 @@ struct BattlePokemon
/*0x17*/ u32 spDefenseIV:5;
/*0x17*/ u32 abilityNum:2;
/*0x18*/ s8 statStages[NUM_BATTLE_STATS];
- /*0x20*/ u8 ability;
- /*0x21*/ u8 type1;
- /*0x22*/ u8 type2;
- /*0x23*/ u8 unknown;
- /*0x24*/ u8 pp[MAX_MON_MOVES];
- /*0x28*/ u16 hp;
- /*0x2A*/ u8 level;
- /*0x2B*/ u8 friendship;
- /*0x2C*/ u16 maxHP;
- /*0x2E*/ u16 item;
- /*0x30*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
- /*0x3B*/ u8 ppBonuses;
- /*0x3C*/ u8 otName[PLAYER_NAME_LENGTH + 1];
- /*0x44*/ u32 experience;
- /*0x48*/ u32 personality;
- /*0x4C*/ u32 status1;
- /*0x50*/ u32 status2;
- /*0x54*/ u32 otId;
+ /*0x20*/ u16 ability;
+ /*0x22*/ u8 type1;
+ /*0x23*/ u8 type2;
+ /*0x24*/ u8 type3;
+ /*0x25*/ u8 pp[MAX_MON_MOVES];
+ /*0x29*/ u16 hp;
+ /*0x2B*/ u8 level;
+ /*0x2C*/ u8 friendship;
+ /*0x2D*/ u16 maxHP;
+ /*0x2F*/ u16 item;
+ /*0x31*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x3C*/ u8 ppBonuses;
+ /*0x3D*/ u8 otName[PLAYER_NAME_LENGTH + 1];
+ /*0x45*/ u32 experience;
+ /*0x49*/ u32 personality;
+ /*0x4D*/ u32 status1;
+ /*0x51*/ u32 status2;
+ /*0x55*/ u32 otId;
};
struct BaseStats
@@ -225,24 +319,29 @@ struct BaseStats
/* 0x13 */ u8 growthRate;
/* 0x14 */ u8 eggGroup1;
/* 0x15 */ u8 eggGroup2;
- /* 0x16 */ u8 abilities[NUM_ABILITY_SLOTS];
+ /* 0x16 */ u16 abilities[NUM_ABILITY_SLOTS];
u8 safariZoneFleeRate;
u8 bodyColor : 7;
u8 noFlip : 1;
u8 flags;
};
+#include "constants/battle_config.h"
struct BattleMove
{
- u8 effect;
- u8 power;
+ u16 effect;
+ u16 power; //higher than 255 for z moves
u8 type;
u8 accuracy;
u8 pp;
u8 secondaryEffectChance;
- u8 target;
+ u16 target;
s8 priority;
- u8 flags;
+ u32 flags;
+ u8 split;
+ u8 argument;
+ u8 zMovePower;
+ u8 zMoveEffect;
};
#define SPINDA_SPOT_WIDTH 16
@@ -342,7 +441,6 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon);
u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove);
void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move);
void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
-s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef);
u8 CountAliveMonsInBattle(u8 caseId);
u8 GetDefaultMoveTarget(u8 battlerId);
u8 GetMonGender(struct Pokemon *mon);
@@ -368,8 +466,8 @@ u8 CalculatePlayerPartyCount(void);
u8 CalculateEnemyPartyCount(void);
u8 GetMonsStateToDoubles(void);
u8 GetMonsStateToDoubles_2(void);
-u8 GetAbilityBySpecies(u16 species, u8 abilityNum);
-u8 GetMonAbility(struct Pokemon *mon);
+u16 GetAbilityBySpecies(u16 species, u8 abilityNum);
+u16 GetMonAbility(struct Pokemon *mon);
void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord);
u8 GetSecretBaseTrainerPicIndex(void);
u8 GetSecretBaseTrainerClass(void);
@@ -379,6 +477,7 @@ void GetSpeciesName(u8 *name, u16 species);
u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex);
void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex);
void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex);
+void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst);
void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex);
bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex);
bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, u8 e);
@@ -439,11 +538,11 @@ void SetWildMonHeldItem(void);
bool8 IsMonShiny(struct Pokemon *mon);
bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
const u8 *GetTrainerPartnerName(void);
-void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u8 panMode);
-void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 panModeAnimFlag);
-void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneFrame);
+void BattleAnimateFrontSprite(struct Sprite *sprite, u16 species, bool8 noCry, u8 panMode);
+void DoMonFrontSpriteAnimation(struct Sprite *sprite, u16 species, bool8 noCry, u8 panModeAnimFlag);
+void PokemonSummaryDoMonAnimation(struct Sprite *sprite, u16 species, bool8 oneFrame);
void StopPokemonAnimationDelayTask(void);
-void BattleAnimateBackSprite(struct Sprite* sprite, u16 species);
+void BattleAnimateBackSprite(struct Sprite *sprite, u16 species);
u8 GetOpposingLinkMultiBattlerId(bool8 rightSide, u8 multiplayerId);
u16 FacilityClassToPicIndex(u16 facilityClass);
u16 PlayerGenderToFrontTrainerPicId(u8 playerGender);
diff --git a/include/pokenav.h b/include/pokenav.h
index 593c684890..959998383f 100644
--- a/include/pokenav.h
+++ b/include/pokenav.h
@@ -116,21 +116,21 @@ enum
#define POKENAV_MENU_IDS_START 100000
enum
{
- POKENAV_MAIN_MENU = POKENAV_MENU_IDS_START, // The main menu where the player selects Hoenn Map/Condition/Match Call/Ribbons
- POKENAV_MAIN_MENU_CURSOR_ON_MAP,
- POKENAV_CONDITION_MENU, // The first Condition screen where the player selects Party or Search
- POKENAV_CONDITION_SEARCH_MENU, // The Condition search menu where the player selects a search parameter
- POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL,
- POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS,
- POKENAV_REGION_MAP,
- POKENAV_CONDITION_GRAPH_PARTY, // The Condition graph screen when Party has been selected
- POKENAV_CONDITION_SEARCH_RESULTS, // The list of results from a Condition search
- POKENAV_CONDITION_GRAPH_SEARCH, // The Condition graph screen when a search result has been selected
- POKENAV_RETURN_CONDITION_SEARCH, // Exited the graph screen back to the list of Condition search results
- POKENAV_MATCH_CALL,
- POKENAV_RIBBONS_MON_LIST, // The list of Pokémon with ribbons
- POKENAV_RIBBONS_SUMMARY_SCREEN, // The ribbon summary screen shown when a Pokémon has been selected
- POKENAV_RIBBONS_RETURN_TO_MON_LIST, // Exited the summary screen back to the ribbon list
+ POKENAV_MAIN_MENU = POKENAV_MENU_IDS_START, // The main menu where the player selects Hoenn Map/Condition/Match Call/Ribbons
+ POKENAV_MAIN_MENU_CURSOR_ON_MAP,
+ POKENAV_CONDITION_MENU, // The first Condition screen where the player selects Party or Search
+ POKENAV_CONDITION_SEARCH_MENU, // The Condition search menu where the player selects a search parameter
+ POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL,
+ POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS,
+ POKENAV_REGION_MAP,
+ POKENAV_CONDITION_GRAPH_PARTY, // The Condition graph screen when Party has been selected
+ POKENAV_CONDITION_SEARCH_RESULTS, // The list of results from a Condition search
+ POKENAV_CONDITION_GRAPH_SEARCH, // The Condition graph screen when a search result has been selected
+ POKENAV_RETURN_CONDITION_SEARCH, // Exited the graph screen back to the list of Condition search results
+ POKENAV_MATCH_CALL,
+ POKENAV_RIBBONS_MON_LIST, // The list of Pokémon with ribbons
+ POKENAV_RIBBONS_SUMMARY_SCREEN, // The ribbon summary screen shown when a Pokémon has been selected
+ POKENAV_RIBBONS_RETURN_TO_MON_LIST, // Exited the summary screen back to the ribbon list
};
enum
@@ -185,28 +185,28 @@ enum
enum
{
- MC_HEADER_MR_STONE,
- MC_HEADER_PROF_BIRCH,
- MC_HEADER_BRENDAN,
- MC_HEADER_MAY,
- MC_HEADER_WALLY,
- MC_HEADER_NORMAN,
- MC_HEADER_MOM,
- MC_HEADER_STEVEN,
- MC_HEADER_SCOTT,
- MC_HEADER_ROXANNE,
- MC_HEADER_BRAWLY,
- MC_HEADER_WATTSON,
- MC_HEADER_FLANNERY,
- MC_HEADER_WINONA,
- MC_HEADER_TATE_LIZA,
- MC_HEADER_JUAN,
- MC_HEADER_SIDNEY,
- MC_HEADER_PHOEBE,
- MC_HEADER_GLACIA,
- MC_HEADER_DRAKE,
- MC_HEADER_WALLACE,
- MC_HEADER_COUNT
+ MC_HEADER_MR_STONE,
+ MC_HEADER_PROF_BIRCH,
+ MC_HEADER_BRENDAN,
+ MC_HEADER_MAY,
+ MC_HEADER_WALLY,
+ MC_HEADER_NORMAN,
+ MC_HEADER_MOM,
+ MC_HEADER_STEVEN,
+ MC_HEADER_SCOTT,
+ MC_HEADER_ROXANNE,
+ MC_HEADER_BRAWLY,
+ MC_HEADER_WATTSON,
+ MC_HEADER_FLANNERY,
+ MC_HEADER_WINONA,
+ MC_HEADER_TATE_LIZA,
+ MC_HEADER_JUAN,
+ MC_HEADER_SIDNEY,
+ MC_HEADER_PHOEBE,
+ MC_HEADER_GLACIA,
+ MC_HEADER_DRAKE,
+ MC_HEADER_WALLACE,
+ MC_HEADER_COUNT
};
enum
diff --git a/include/save.h b/include/save.h
index 89fc9ad33e..41913d1df4 100644
--- a/include/save.h
+++ b/include/save.h
@@ -9,8 +9,8 @@
#define NUM_SAVE_SLOTS 2
-// If the sector's security field is not this value then the sector is either invalid or empty.
-#define SECTOR_SECURITY_NUM 0x8012025
+// If the sector's signature field is not this value then the sector is either invalid or empty.
+#define SECTOR_SIGNATURE 0x8012025
#define SPECIAL_SECTOR_SENTINEL 0xB39D
@@ -72,12 +72,12 @@ struct SaveSector
u8 unused[SECTOR_FOOTER_SIZE - 12]; // Unused portion of the footer
u16 id;
u16 checksum;
- u32 security;
+ u32 signature;
u32 counter;
}; // size is SECTOR_SIZE (0x1000)
-#define SECTOR_SECURITY_OFFSET offsetof(struct SaveSector, security)
-#define SECTOR_COUNTER_OFFSET offsetof(struct SaveSector, counter)
+#define SECTOR_SIGNATURE_OFFSET offsetof(struct SaveSector, signature)
+#define SECTOR_COUNTER_OFFSET offsetof(struct SaveSector, counter)
extern u16 gLastWrittenSector;
extern u32 gLastSaveCounter;
@@ -99,13 +99,13 @@ u8 TrySavingData(u8 saveType);
bool8 LinkFullSave_Init(void);
bool8 LinkFullSave_WriteSector(void);
bool8 LinkFullSave_ReplaceLastSector(void);
-bool8 LinkFullSave_SetLastSectorSecurity(void);
+bool8 LinkFullSave_SetLastSectorSignature(void);
bool8 WriteSaveBlock2(void);
bool8 WriteSaveBlock1Sector(void);
u8 LoadGameSave(u8 saveType);
u16 GetSaveBlocksPointersBaseOffset(void);
-u32 TryReadSpecialSaveSector(u8 sector, u8* dst);
-u32 TryWriteSpecialSaveSector(u8 sector, u8* src);
+u32 TryReadSpecialSaveSector(u8 sector, u8 *dst);
+u32 TryWriteSpecialSaveSector(u8 sector, u8 *src);
void Task_LinkFullSave(u8 taskId);
// save_failed_screen.c
diff --git a/include/script.h b/include/script.h
index 63f6f5aef9..7c180e961b 100644
--- a/include/script.h
+++ b/include/script.h
@@ -31,16 +31,16 @@ void ScriptCall(struct ScriptContext *ctx, const u8 *ptr);
void ScriptReturn(struct ScriptContext *ctx);
u16 ScriptReadHalfword(struct ScriptContext *ctx);
u32 ScriptReadWord(struct ScriptContext *ctx);
-void ScriptContext2_Enable(void);
-void ScriptContext2_Disable(void);
-bool8 ScriptContext2_IsEnabled(void);
-void ScriptContext1_Init(void);
-bool8 ScriptContext1_IsScriptSetUp(void);
-bool8 ScriptContext2_RunScript(void);
-void ScriptContext1_SetupScript(const u8 *ptr);
-void ScriptContext1_Stop(void);
-void EnableBothScriptContexts(void);
-void ScriptContext2_RunNewScript(const u8 *ptr);
+void LockPlayerFieldControls(void);
+void UnlockPlayerFieldControls(void);
+bool8 ArePlayerFieldControlsLocked(void);
+void ScriptContext_Init(void);
+bool8 ScriptContext_IsEnabled(void);
+bool8 ScriptContext_RunScript(void);
+void ScriptContext_SetupScript(const u8 *ptr);
+void ScriptContext_Stop(void);
+void ScriptContext_Enable(void);
+void RunScriptImmediately(const u8 *ptr);
u8 *MapHeaderGetScriptTable(u8 tag);
void MapHeaderRunScriptType(u8 tag);
u8 *MapHeaderCheckScriptTable(u8 tag);
diff --git a/include/script_menu.h b/include/script_menu.h
index a690ef8b8b..36b66bf987 100644
--- a/include/script_menu.h
+++ b/include/script_menu.h
@@ -12,7 +12,7 @@ bool8 (*ScriptMenu_HidePokemonPic(void))(void);
int ConvertPixelWidthToTileWidth(int width);
u8 CreateWindowFromRect(u8 x, u8 y, u8 width, u8 height);
void ClearToTransparentAndRemoveWindow(u8 windowId);
-int DisplayTextAndGetWidth(const u8* str, int width);
+int DisplayTextAndGetWidth(const u8 *str, int width);
int ScriptMenu_AdjustLeftCoordFromWidth(int left, int width);
bool16 ScriptMenu_CreatePCMultichoice(void);
void ScriptMenu_DisplayPCStartupPrompt(void);
diff --git a/include/script_pokemon_util.h b/include/script_pokemon_util.h
index cae16e40a6..a2e6915609 100644
--- a/include/script_pokemon_util.h
+++ b/include/script_pokemon_util.h
@@ -4,6 +4,7 @@
u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
u8 ScriptGiveEgg(u16);
void CreateScriptedWildMon(u16, u8, u16);
+void CreateScriptedDoubleWildMon(u16, u8, u16, u16, u8, u16);
void ScriptSetMonMoveSlot(u8, u16, u8);
void ReducePlayerPartyToSelectedMons(void);
void HealPlayerParty(void);
diff --git a/include/secret_base.h b/include/secret_base.h
index b7d36a8ee9..cb3b95ee78 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -24,7 +24,7 @@ void SetCurSecretBaseIdFromPosition(const struct MapPosition *position, const st
void TrySetCurSecretBaseIndex(void);
void CheckPlayerHasSecretBase(void);
void ToggleSecretBaseEntranceMetatile(void);
-void EnableBothScriptContexts(void);
+void ScriptContext_Enable(void);
void ReceiveSecretBasesData(void *records, size_t recordSize, u8 linkIdx);
#endif //GUARD_SECRET_BASE_H
diff --git a/include/sound.h b/include/sound.h
index a5463a4561..b39a7306a6 100644
--- a/include/sound.h
+++ b/include/sound.h
@@ -12,7 +12,6 @@ void StopMapMusic(void);
void FadeOutMapMusic(u8 speed);
void FadeOutAndPlayNewMapMusic(u16 songNum, u8 speed);
void FadeOutAndFadeInNewMapMusic(u16 songNum, u8 fadeOutSpeed, u8 fadeInSpeed);
-void FadeInNewMapMusic(u16 songNum, u8 speed);
bool8 IsNotWaitingForBGMStop(void);
void PlayFanfareByFanfareNum(u8 fanfareNum);
bool8 WaitFanfare(bool8 stop);
diff --git a/include/start_menu.h b/include/start_menu.h
index 1ddd82066d..94d0f9d5b6 100644
--- a/include/start_menu.h
+++ b/include/start_menu.h
@@ -11,6 +11,6 @@ void SaveGame(void);
void CB2_SetUpSaveAfterLinkBattle(void);
void SaveForBattleTowerLink(void);
void HideStartMenu(void);
-void AppendToList(u8* list, u8* pos, u8 newEntry);
+void AppendToList(u8 *list, u8 *pos, u8 newEntry);
#endif // GUARD_START_MENU_H
diff --git a/include/strings.h b/include/strings.h
index 6ace70c4d7..e2ae613d06 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -179,7 +179,7 @@ extern const u8 gText_EmptyString2[];
extern const u8 gText_Confirm3[];
extern const u8 gText_Cancel4[];
extern const u8 gText_IsThisTheCorrectTime[];
-extern const u8 gText_PkmnFainted3[];
+extern const u8 gText_PkmnFainted_FldPsn[];
extern const u8 gText_Coins[];
extern const u8 gText_Silver[];
extern const u8 gText_Gold[];
@@ -3022,4 +3022,11 @@ extern const u8 gText_PkmnForSwap[];
extern const u8 gText_SamePkmnInPartyAlready[];
extern const u8 gText_Cancel3[];
+// Naming Screen
+extern const u8 gText_MoveOkBack[];
+extern const u8 gText_YourName[];
+extern const u8 gText_BoxName[];
+extern const u8 gText_PkmnsNickname[];
+extern const u8 gText_TellHimTheWords[];
+
#endif // GUARD_STRINGS_H
diff --git a/include/trade.h b/include/trade.h
index 27b5ee8bdf..d63749653a 100644
--- a/include/trade.h
+++ b/include/trade.h
@@ -14,10 +14,10 @@ void CB2_StartCreateTradeMenu(void);
void CB2_LinkTrade(void);
int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal);
int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal);
-int CanSpinTradeMon(struct Pokemon*, u16);
+int CanSpinTradeMon(struct Pokemon *, u16);
void InitTradeSequenceBgGpuRegs(void);
void LinkTradeDrawWindow(void);
-void InitTradeBg(void);
+void LoadTradeAnimGfx(void);
void DrawTextOnTradeWindow(u8, const u8 *, u8);
#endif //GUARD_TRADE_H
diff --git a/include/trainer_hill.h b/include/trainer_hill.h
index 954087e1bb..6e2ec0ba0a 100644
--- a/include/trainer_hill.h
+++ b/include/trainer_hill.h
@@ -5,7 +5,7 @@
struct TrainerHillTrainer
{
- u8 name[HILL_TRAINER_NAME_LENGTH];
+ u8 name[TRAINER_NAME_LENGTH + 1];
u8 facilityClass;
bool32 unused; // Set to TRUE on JP trainers
u16 speechBefore[EASY_CHAT_BATTLE_WORDS_COUNT];
diff --git a/include/util.h b/include/util.h
index 77062de96e..8f2079a0ba 100644
--- a/include/util.h
+++ b/include/util.h
@@ -12,7 +12,7 @@ void LoadWordFromTwoHalfwords(u16 *, u32 *);
int CountTrailingZeroBits(u32 value);
u16 CalcCRC16(const u8 *data, s32 length);
u16 CalcCRC16WithTable(const u8 *data, u32 length);
-u32 CalcByteArraySum(const u8* data, u32 length);
+u32 CalcByteArraySum(const u8 *data, u32 length);
void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor);
void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha);
void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output);
diff --git a/include/wild_encounter.h b/include/wild_encounter.h
index 8608ec5b16..e853efbadc 100644
--- a/include/wild_encounter.h
+++ b/include/wild_encounter.h
@@ -27,6 +27,8 @@ struct WildPokemonHeader
};
extern const struct WildPokemonHeader gWildMonHeaders[];
+extern bool8 gIsFishingEncounter;
+extern bool8 gIsSurfingEncounter;
void DisableWildEncounters(bool8 disabled);
bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavior);
@@ -36,5 +38,6 @@ void FishingWildEncounter(u8 rod);
u16 GetLocalWildMon(bool8 *isWaterMon);
u16 GetLocalWaterMon(void);
bool8 UpdateRepelCounter(void);
+bool8 TryDoDoubleWildBattle(void);
#endif // GUARD_WILD_ENCOUNTER_H
diff --git a/ld_script.txt b/ld_script.txt
index ae9029aa38..da0eb682d3 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -14,6 +14,9 @@ SECTIONS {
. = 0x1C000;
INCLUDE "sym_ewram.ld"
+ src/*.o(.ewram_data);
+ gflib/*.o(.ewram_data);
+
*libc.a:impure.o(.data);
*libc.a:locale.o(.data);
*libc.a:mallocr.o(.data);
@@ -27,6 +30,9 @@ SECTIONS {
{
/* .bss starts at 0x3000000 */
INCLUDE "sym_bss.ld"
+ src/*.o(.bss);
+ gflib/*.o(.bss);
+ data/*.o(.bss);
/* .bss.code starts at 0x3001AA8 */
src/m4a.o(.bss.code);
@@ -85,6 +91,7 @@ SECTIONS {
src/battle_bg.o(.text);
src/battle_main.o(.text);
src/battle_util.o(.text);
+ src/battle_z_move.o(.text);
src/battle_script_commands.o(.text);
src/battle_util2.o(.text);
src/battle_controller_player.o(.text);
@@ -92,6 +99,7 @@ SECTIONS {
src/battle_controller_opponent.o(.text);
src/battle_ai_switch_items.o(.text);
src/battle_controller_link_opponent.o(.text);
+ src/battle_debug.o(.text);
src/pokemon.o(.text);
src/trig.o(.text);
src/random.o(.text);
@@ -195,6 +203,7 @@ SECTIONS {
src/battle_anim_ground.o(.text);
src/battle_anim_normal.o(.text);
src/battle_anim_utility_funcs.o(.text);
+ src/battle_anim_new.o(.text);
src/battle_intro.o(.text);
src/bike.o(.text);
src/easy_chat.o(.text);
@@ -209,7 +218,8 @@ SECTIONS {
src/decoration.o(.text);
src/slot_machine.o(.text);
src/contest_painting.o(.text);
- src/battle_ai_script_commands.o(.text);
+ src/battle_ai_main.o(.text);
+ src/battle_ai_util.o(.text);
src/trader.o(.text);
src/starter_choose.o(.text);
src/wallclock.o(.text);
@@ -342,7 +352,6 @@ SECTIONS {
data/battle_scripts_1.o(script_data);
data/field_effect_scripts.o(script_data);
data/battle_scripts_2.o(script_data);
- data/battle_ai_scripts.o(script_data);
data/contest_ai_scripts.o(script_data);
data/mystery_event_script_cmd_table.o(script_data);
} =0
@@ -474,12 +483,14 @@ SECTIONS {
src/battle_bg.o(.rodata);
src/battle_main.o(.rodata);
src/battle_util.o(.rodata);
+ src/battle_z_move.o(.rodata);
src/battle_script_commands.o(.rodata);
src/battle_controller_player.o(.rodata);
src/battle_anim_smokescreen.o(.rodata);
src/battle_controller_opponent.o(.rodata);
src/battle_ai_switch_items.o(.rodata);
src/battle_controller_link_opponent.o(.rodata);
+ src/battle_debug.o(.rodata);
src/pokemon.o(.rodata);
src/trig.o(.rodata);
src/util.o(.rodata);
@@ -572,6 +583,7 @@ SECTIONS {
src/battle_anim_ground.o(.rodata);
src/battle_anim_normal.o(.rodata);
src/battle_anim_utility_funcs.o(.rodata);
+ src/battle_anim_new.o(.rodata);
src/battle_intro.o(.rodata);
src/bike.o(.rodata);
src/easy_chat.o(.rodata);
@@ -585,7 +597,8 @@ SECTIONS {
src/decoration.o(.rodata);
src/slot_machine.o(.rodata);
src/contest_painting.o(.rodata);
- src/battle_ai_script_commands.o(.rodata);
+ src/battle_ai_main.o(.rodata);
+ src/battle_ai_util.o(.rodata);
src/trader.o(.rodata);
src/starter_choose.o(.rodata);
src/wallclock.o(.rodata);
@@ -689,6 +702,7 @@ SECTIONS {
src/battle_transition_frontier.o(.rodata);
src/text_input_strings.o(.rodata);
src/fonts.o(.rodata);
+ src/international_string_util.o(.rodata);
src/mystery_event_msg.o(.rodata);
data/mystery_gift.o(.rodata);
src/m4a_tables.o(.rodata);
@@ -1298,6 +1312,16 @@ SECTIONS {
src/graphics.o(.rodata);
} =0
+ extra :
+ ALIGN(4)
+ {
+ src/*.o(.text);
+ gflib/*.o(.text);
+ src/*.o(.rodata);
+ gflib/*.o(.rodata);
+ data/*.o(.rodata);
+ } = 0
+
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc
index 5505c73212..30eef3327c 100644
--- a/sound/cry_tables.inc
+++ b/sound/cry_tables.inc
@@ -386,6 +386,7 @@ gCryTable::
cry Cry_Rayquaza
cry Cry_Jirachi
cry Cry_Deoxys
+.if P_NEW_POKEMON == TRUE
cry Cry_Turtwig
cry Cry_Grotle
cry Cry_Torterra
@@ -1298,6 +1299,44 @@ gCryTable::
@ Calyrex
cry Cry_CalyrexIceRider
cry Cry_CalyrexShadowRider
+.else
+ @ Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ cry Cry_Unown
+ @ Castform
+ cry Cry_Castform
+ cry Cry_Castform
+ cry Cry_Castform
+ @ Deoxys
+ cry Cry_Deoxys
+ cry Cry_Deoxys
+ cry Cry_Deoxys
+.endif
.align 2
gCryTable_Reverse::
@@ -1687,6 +1726,7 @@ gCryTable_Reverse::
cry_reverse Cry_Rayquaza
cry_reverse Cry_Jirachi
cry_reverse Cry_Deoxys
+.if P_NEW_POKEMON == TRUE
cry_reverse Cry_Turtwig
cry_reverse Cry_Grotle
cry_reverse Cry_Torterra
@@ -2600,3 +2640,41 @@ gCryTable_Reverse::
@ Calyrex
cry_reverse Cry_CalyrexIceRider
cry_reverse Cry_CalyrexShadowRider
+.else
+ @ Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ cry_reverse Cry_Unown
+ @ Castform
+ cry_reverse Cry_Castform
+ cry_reverse Cry_Castform
+ cry_reverse Cry_Castform
+ @ Deoxys
+ cry_reverse Cry_Deoxys
+ cry_reverse Cry_Deoxys
+ cry_reverse Cry_Deoxys
+.endif
diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc
index 6ec747940b..4ce03dbedd 100644
--- a/sound/direct_sound_data.inc
+++ b/sound/direct_sound_data.inc
@@ -1930,6 +1930,7 @@ Cry_Jirachi::
Cry_Deoxys::
.incbin "sound/direct_sound_samples/cries/deoxys.bin"
+.if P_NEW_POKEMON == TRUE
.align 2
Cry_Turtwig::
.incbin "sound/direct_sound_samples/cries/turtwig.bin"
@@ -4339,6 +4340,7 @@ Cry_CalyrexIceRider::
.align 2
Cry_CalyrexShadowRider::
.incbin "sound/direct_sound_samples/cries/calyrex_shadow_rider.bin"
+.endif
.align 2
DirectSoundWaveData_register_noise::
diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk
index 87293669c7..c89d6e81cd 100644
--- a/spritesheet_rules.mk
+++ b/spritesheet_rules.mk
@@ -563,6 +563,50 @@ $(OBJEVENTGFXDIR)/berry_trees/wepear.4bpp: %.4bpp: %.png
$(OBJEVENTGFXDIR)/berry_trees/wiki.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 4
+$(OBJEVENTGFXDIR)/berry_trees/occa.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/yache.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/chople.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/kebia.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/shuca.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/payapa.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/tanga.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/kasib.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/haban.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/colbur.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/roseli.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/custap.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/jaboca.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/rowap.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
+
+$(OBJEVENTGFXDIR)/berry_trees/micle.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
$(OBJEVENTGFXDIR)/misc/breakable_rock.4bpp: %.4bpp: %.png
diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c
index f6ebcc7265..747a6c7849 100644
--- a/src/AgbRfu_LinkManager.c
+++ b/src/AgbRfu_LinkManager.c
@@ -49,7 +49,7 @@ u32 rfu_LMAN_REQBN_softReset_and_checkID(void)
return id;
}
-void rfu_LMAN_REQ_sendData(u8 clockChangeFlag)
+void rfu_LMAN_REQ_sendData(bool8 clockChangeFlag)
{
if (gRfuLinkStatus->parentChild == MODE_CHILD)
{
diff --git a/src/apprentice.c b/src/apprentice.c
index cf14585aae..4103e8f795 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -132,9 +132,9 @@ void BufferApprenticeChallengeText(u8 saveApprenticeId)
StringExpandPlaceholders(gStringVar4, challengeText);
}
-void Apprentice_EnableBothScriptContexts(void)
+void Apprentice_ScriptContext_Enable(void)
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
void ResetApprenticeStruct(struct Apprentice *apprentice)
@@ -638,7 +638,7 @@ static void CreateApprenticeMenu(u8 menu)
width = ConvertPixelWidthToTileWidth(pixelWidth);
left = ScriptMenu_AdjustLeftCoordFromWidth(left, width);
windowId = CreateAndShowWindow(left, top, width, count * 2);
- SetStandardWindowBorderStyle(windowId, 0);
+ SetStandardWindowBorderStyle(windowId, FALSE);
for (i = 0; i < count; i++)
AddTextPrinterParameterized(windowId, FONT_NORMAL, strings[i], 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL);
@@ -679,7 +679,7 @@ static void Task_ChooseAnswer(u8 taskId)
RemoveAndHideWindow(tWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height)
@@ -815,9 +815,9 @@ static void Task_WaitForPrintingMessage(u8 taskId)
{
DestroyTask(taskId);
if (gSpecialVar_0x8005)
- ExecuteFuncAfterButtonPress(EnableBothScriptContexts);
+ ExecuteFuncAfterButtonPress(ScriptContext_Enable);
else
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
}
@@ -895,7 +895,7 @@ static void PrintApprenticeMessage(void)
}
else
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
return;
}
@@ -906,11 +906,11 @@ static void PrintApprenticeMessage(void)
static void Script_PrintApprenticeMessage(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
PlayerFreeze();
StopPlayerAvatar();
- DrawDialogueFrame(0, 1);
+ DrawDialogueFrame(0, TRUE);
PrintApprenticeMessage();
}
@@ -1289,7 +1289,7 @@ static void Task_ExecuteFuncAfterButtonPress(u8 taskId)
{
if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
- gApprenticeFunc = (void*)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16)));
+ gApprenticeFunc = (void *)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16)));
gApprenticeFunc();
DestroyTask(taskId);
}
diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c
new file mode 100644
index 0000000000..732dea7807
--- /dev/null
+++ b/src/battle_ai_main.c
@@ -0,0 +1,5132 @@
+#include "global.h"
+#include "malloc.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_ai_util.h"
+#include "battle_ai_main.h"
+#include "battle_factory.h"
+#include "battle_setup.h"
+#include "battle_z_move.h"
+#include "data.h"
+#include "event_data.h"
+#include "item.h"
+#include "pokemon.h"
+#include "random.h"
+#include "recorded_battle.h"
+#include "util.h"
+#include "constants/abilities.h"
+#include "constants/battle_ai.h"
+#include "constants/battle_move_effects.h"
+#include "constants/hold_effects.h"
+#include "constants/moves.h"
+#include "constants/items.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
+
+// AI states
+enum
+{
+ AIState_SettingUp,
+ AIState_Processing,
+ AIState_FinishedProcessing,
+ AIState_DoNotProcess
+};
+
+static u8 ChooseMoveOrAction_Singles(void);
+static u8 ChooseMoveOrAction_Doubles(void);
+static void BattleAI_DoAIProcessing(void);
+static bool32 IsPinchBerryItemEffect(u16 holdEffect);
+
+// ewram
+EWRAM_DATA const u8 *gAIScriptPtr = NULL; // Still used in contests
+EWRAM_DATA u8 sBattler_AI = 0;
+
+// const rom data
+static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_TryToFaint(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_Risky(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_PreferStrongestMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_PreferBatonPass(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_HPAware(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_Roaming(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_Safari(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_FirstBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);
+
+static s16 (*const sBattleAiFuncTable[])(u8, u8, u16, s16) =
+{
+ [0] = AI_CheckBadMove, // AI_FLAG_CHECK_BAD_MOVE
+ [1] = AI_TryToFaint, // AI_FLAG_TRY_TO_FAINT
+ [2] = AI_CheckViability, // AI_FLAG_CHECK_VIABILITY
+ [3] = AI_SetupFirstTurn, // AI_FLAG_SETUP_FIRST_TURN
+ [4] = AI_Risky, // AI_FLAG_RISKY
+ [5] = AI_PreferStrongestMove, // AI_FLAG_PREFER_STRONGEST_MOVE
+ [6] = AI_PreferBatonPass, // AI_FLAG_PREFER_BATON_PASS
+ [7] = AI_DoubleBattle, // AI_FLAG_DOUBLE_BATTLE
+ [8] = AI_HPAware, // AI_FLAG_HP_AWARE
+ [9] = NULL, // AI_FLAG_NEGATE_UNAWARE
+ [10] = NULL, // AI_FLAG_WILL_SUICIDE
+ [11] = NULL, // AI_FLAG_HELP_PARTNER
+ [12] = NULL, // Unused
+ [13] = NULL, // Unused
+ [14] = NULL, // Unused
+ [15] = NULL, // Unused
+ [16] = NULL, // Unused
+ [17] = NULL, // Unused
+ [18] = NULL, // Unused
+ [19] = NULL, // Unused
+ [20] = NULL, // Unused
+ [21] = NULL, // Unused
+ [22] = NULL, // Unused
+ [23] = NULL, // Unused
+ [24] = NULL, // Unused
+ [25] = NULL, // Unused
+ [26] = NULL, // Unused
+ [27] = NULL, // Unused
+ [28] = NULL, // Unused
+ [29] = AI_Roaming, // AI_FLAG_ROAMING
+ [30] = AI_Safari, // AI_FLAG_SAFARI
+ [31] = AI_FirstBattle, // AI_FLAG_FIRST_BATTLE
+};
+
+// Functions
+void BattleAI_SetupItems(void)
+{
+ s32 i;
+ u8 *data = (u8 *)BATTLE_HISTORY;
+
+ for (i = 0; i < sizeof(struct BattleHistory); i++)
+ data[i] = 0;
+
+ // Items are allowed to use in ONLY trainer battles.
+ if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER
+ | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_SECRET_BASE | BATTLE_TYPE_FRONTIER
+ | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_RECORDED_LINK)
+ )
+ )
+ {
+ for (i = 0; i < MAX_TRAINER_ITEMS; i++)
+ {
+ if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0)
+ {
+ BATTLE_HISTORY->trainerItems[BATTLE_HISTORY->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i];
+ BATTLE_HISTORY->itemsNo++;
+ }
+ }
+ }
+}
+
+static u32 GetWildAiFlags(void)
+{
+ u8 avgLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
+ u32 flags;
+
+ if (IsDoubleBattle())
+ avgLevel = (GetMonData(&gEnemyParty[0], MON_DATA_LEVEL) + GetMonData(&gEnemyParty[1], MON_DATA_LEVEL)) / 2;
+
+ flags |= AI_FLAG_CHECK_BAD_MOVE;
+ if (avgLevel >= 20)
+ flags |= AI_FLAG_CHECK_VIABILITY;
+ if (avgLevel >= 60)
+ flags |= AI_FLAG_PREFER_STRONGEST_MOVE;
+ if (avgLevel >= 80)
+ flags |= AI_FLAG_HP_AWARE;
+
+ if (B_VAR_WILD_AI_FLAGS != 0 && VarGet(B_VAR_WILD_AI_FLAGS) != 0)
+ flags |= VarGet(B_VAR_WILD_AI_FLAGS);
+
+ return flags;
+}
+
+void BattleAI_SetupFlags(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
+ AI_THINKING_STRUCT->aiFlags = GetAiScriptsInRecordedBattle();
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ AI_THINKING_STRUCT->aiFlags = AI_FLAG_SAFARI;
+ else if (gBattleTypeFlags & BATTLE_TYPE_ROAMER)
+ AI_THINKING_STRUCT->aiFlags = AI_FLAG_ROAMING;
+ else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
+ AI_THINKING_STRUCT->aiFlags = AI_FLAG_FIRST_BATTLE;
+ else if (gBattleTypeFlags & BATTLE_TYPE_FACTORY)
+ AI_THINKING_STRUCT->aiFlags = GetAiScriptsInBattleFactory();
+ else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE))
+ AI_THINKING_STRUCT->aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT;
+ else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
+ AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags | gTrainers[gTrainerBattleOpponent_B].aiFlags;
+ else
+ AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags;
+
+ // check smart wild AI
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER)) && IsWildMonSmart())
+ AI_THINKING_STRUCT->aiFlags |= GetWildAiFlags();
+
+ if (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS) || gTrainers[gTrainerBattleOpponent_A].doubleBattle)
+ AI_THINKING_STRUCT->aiFlags |= AI_FLAG_DOUBLE_BATTLE; // Act smart in doubles and don't attack your partner.
+}
+
+// sBattler_AI set in ComputeBattleAiScores
+void BattleAI_SetupAIData(u8 defaultScoreMoves)
+{
+ s32 i, move, dmg;
+ u8 moveLimitations;
+
+ // Clear AI data but preserve the flags.
+ u32 flags = AI_THINKING_STRUCT->aiFlags;
+ memset(AI_THINKING_STRUCT, 0, sizeof(struct AI_ThinkingStruct));
+ AI_THINKING_STRUCT->aiFlags = flags;
+
+ // Conditional score reset, unlike Ruby.
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (defaultScoreMoves & 1)
+ AI_THINKING_STRUCT->score[i] = 100;
+ else
+ AI_THINKING_STRUCT->score[i] = 0;
+
+ defaultScoreMoves >>= 1;
+ }
+
+ moveLimitations = AI_DATA->moveLimitations[gActiveBattler];
+
+ // Ignore moves that aren't possible to use.
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (gBitTable[i] & moveLimitations)
+ AI_THINKING_STRUCT->score[i] = 0;
+ }
+
+ //sBattler_AI = gActiveBattler;
+ gBattlerTarget = SetRandomTarget(sBattler_AI);
+ gBattleStruct->aiChosenTarget[sBattler_AI] = gBattlerTarget;
+}
+
+u8 BattleAI_ChooseMoveOrAction(void)
+{
+ u32 savedCurrentMove = gCurrentMove;
+ u8 ret;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ ret = ChooseMoveOrAction_Singles();
+ else
+ ret = ChooseMoveOrAction_Doubles();
+
+ // Clear protect structures, some flags may be set during AI calcs
+ // e.g. pranksterElevated from GetMovePriority
+ memset(&gProtectStructs, 0, MAX_BATTLERS_COUNT * sizeof(struct ProtectStruct));
+
+ gCurrentMove = savedCurrentMove;
+ return ret;
+}
+
+// damages/other info computed in GetAIDataAndCalcDmg
+u8 ComputeBattleAiScores(u8 battler)
+{
+ sBattler_AI = battler;
+ BattleAI_SetupAIData(0xF);
+ return BattleAI_ChooseMoveOrAction();
+}
+
+static void SetBattlerAiData(u8 battlerId)
+{
+ AI_DATA->abilities[battlerId] = AI_GetAbility(battlerId);
+ AI_DATA->items[battlerId] = gBattleMons[battlerId].item;
+ AI_DATA->holdEffects[battlerId] = AI_GetHoldEffect(battlerId);
+ AI_DATA->holdEffectParams[battlerId] = GetBattlerHoldEffectParam(battlerId);
+ AI_DATA->predictedMoves[battlerId] = gLastMoves[battlerId];
+ AI_DATA->hpPercents[battlerId] = GetHealthPercentage(battlerId);
+ AI_DATA->moveLimitations[battlerId] = CheckMoveLimitations(battlerId, 0, 0xFF);
+}
+
+void GetAiLogicData(void)
+{
+ u32 battlerAtk, battlerDef, i, move;
+ u8 effectiveness;
+ s32 dmg;
+
+ memset(AI_DATA, 0, sizeof(struct AiLogicData));
+
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER))
+ && !IsWildMonSmart())
+ return;
+
+ // get/assume all battler data
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (IsBattlerAlive(i)) {
+ SetBattlerAiData(i);
+ }
+ }
+
+ // simulate AI damage
+ for (battlerAtk = 0; battlerAtk < gBattlersCount; battlerAtk++)
+ {
+ if (!IsBattlerAlive(battlerAtk)
+ || !IsBattlerAIControlled(battlerAtk)) {
+ continue;
+ }
+
+ for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++)
+ {
+ if (battlerAtk == battlerDef)
+ continue;
+
+ RecordKnownMove(battlerDef, gLastMoves[battlerDef]);
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ dmg = 0;
+ effectiveness = AI_EFFECTIVENESS_x0;
+ move = gBattleMons[battlerAtk].moves[i];
+
+ if (move != 0
+ && move != 0xFFFF
+ //&& gBattleMoves[move].power != 0 /* we want to get effectiveness of status moves */
+ && !(AI_DATA->moveLimitations[battlerAtk] & gBitTable[i])) {
+ dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE);
+ }
+
+ AI_DATA->simulatedDmg[battlerAtk][battlerDef][i] = dmg;
+ AI_DATA->effectiveness[battlerAtk][battlerDef][i] = effectiveness;
+ }
+ }
+ }
+}
+
+static u8 ChooseMoveOrAction_Singles(void)
+{
+ u8 currentMoveArray[MAX_MON_MOVES];
+ u8 consideredMoveArray[MAX_MON_MOVES];
+ u32 numOfBestMoves;
+ s32 i, id;
+ u32 flags = AI_THINKING_STRUCT->aiFlags;
+
+ AI_DATA->partnerMove = 0; // no ally
+ while (flags != 0)
+ {
+ if (flags & 1)
+ {
+ AI_THINKING_STRUCT->aiState = AIState_SettingUp;
+ BattleAI_DoAIProcessing();
+ }
+ flags >>= 1;
+ AI_THINKING_STRUCT->aiLogicId++;
+ AI_THINKING_STRUCT->movesetIndex = 0;
+ }
+
+ for (i = 0; i < MAX_MON_MOVES; i++) {
+ gBattleStruct->aiFinalScore[sBattler_AI][gBattlerTarget][i] = AI_THINKING_STRUCT->score[i];
+ }
+
+ // Check special AI actions.
+ if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE)
+ return AI_CHOICE_FLEE;
+ if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH)
+ return AI_CHOICE_WATCH;
+
+ gActiveBattler = sBattler_AI;
+
+ // If can switch.
+ if (CountUsablePartyMons(sBattler_AI) > 0
+ && !IsAbilityPreventingEscape(sBattler_AI)
+ && !(gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
+ && !(gStatuses3[gActiveBattler] & STATUS3_ROOTED)
+ && !(gBattleTypeFlags & (BATTLE_TYPE_ARENA | BATTLE_TYPE_PALACE))
+ && AI_THINKING_STRUCT->aiFlags & (AI_FLAG_CHECK_VIABILITY | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_PREFER_BATON_PASS))
+ {
+ // Consider switching if all moves are worthless to use.
+ if (GetTotalBaseStat(gBattleMons[sBattler_AI].species) >= 310 // Mon is not weak.
+ && gBattleMons[sBattler_AI].hp >= gBattleMons[sBattler_AI].maxHP / 2)
+ {
+ s32 cap = AI_THINKING_STRUCT->aiFlags & (AI_FLAG_CHECK_VIABILITY) ? 95 : 93;
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (AI_THINKING_STRUCT->score[i] > cap)
+ break;
+ }
+
+ if (i == MAX_MON_MOVES && GetMostSuitableMonToSwitchInto() != PARTY_SIZE)
+ {
+ AI_THINKING_STRUCT->switchMon = TRUE;
+ return AI_CHOICE_SWITCH;
+ }
+ }
+
+ // Consider switching if your mon with truant is bodied by Protect spam.
+ // Or is using a double turn semi invulnerable move(such as Fly) and is faster.
+ if (GetBattlerAbility(sBattler_AI) == ABILITY_TRUANT
+ && IsTruantMonVulnerable(sBattler_AI, gBattlerTarget)
+ && gDisableStructs[sBattler_AI].truantCounter
+ && gBattleMons[sBattler_AI].hp >= gBattleMons[sBattler_AI].maxHP / 2)
+ {
+ if (GetMostSuitableMonToSwitchInto() != PARTY_SIZE)
+ {
+ AI_THINKING_STRUCT->switchMon = TRUE;
+ return AI_CHOICE_SWITCH;
+ }
+ }
+ }
+
+ numOfBestMoves = 1;
+ currentMoveArray[0] = AI_THINKING_STRUCT->score[0];
+ consideredMoveArray[0] = 0;
+
+ for (i = 1; i < MAX_MON_MOVES; i++)
+ {
+ if (gBattleMons[sBattler_AI].moves[i] != MOVE_NONE)
+ {
+ // In ruby, the order of these if statements is reversed.
+ if (currentMoveArray[0] == AI_THINKING_STRUCT->score[i])
+ {
+ currentMoveArray[numOfBestMoves] = AI_THINKING_STRUCT->score[i];
+ consideredMoveArray[numOfBestMoves++] = i;
+ }
+ if (currentMoveArray[0] < AI_THINKING_STRUCT->score[i])
+ {
+ numOfBestMoves = 1;
+ currentMoveArray[0] = AI_THINKING_STRUCT->score[i];
+ consideredMoveArray[0] = i;
+ }
+ }
+ }
+ return consideredMoveArray[Random() % numOfBestMoves];
+}
+
+static u8 ChooseMoveOrAction_Doubles(void)
+{
+ s32 i, j;
+ u32 flags;
+ s16 bestMovePointsForTarget[MAX_BATTLERS_COUNT];
+ s8 mostViableTargetsArray[MAX_BATTLERS_COUNT];
+ u8 actionOrMoveIndex[MAX_BATTLERS_COUNT];
+ u8 mostViableMovesScores[MAX_MON_MOVES];
+ u8 mostViableMovesIndices[MAX_MON_MOVES];
+ s32 mostViableTargetsNo;
+ s32 mostViableMovesNo;
+ s16 mostMovePoints;
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (i == sBattler_AI || gBattleMons[i].hp == 0)
+ {
+ actionOrMoveIndex[i] = 0xFF;
+ bestMovePointsForTarget[i] = -1;
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ BattleAI_SetupAIData(gBattleStruct->palaceFlags >> 4);
+ else
+ BattleAI_SetupAIData(0xF);
+
+ gBattlerTarget = i;
+ if ((i & BIT_SIDE) != (sBattler_AI & BIT_SIDE))
+ RecordLastUsedMoveByTarget();
+
+ AI_DATA->partnerMove = GetAllyChosenMove(i);
+ AI_THINKING_STRUCT->aiLogicId = 0;
+ AI_THINKING_STRUCT->movesetIndex = 0;
+ flags = AI_THINKING_STRUCT->aiFlags;
+ while (flags != 0)
+ {
+ if (flags & 1)
+ {
+ AI_THINKING_STRUCT->aiState = AIState_SettingUp;
+ BattleAI_DoAIProcessing();
+ }
+ flags >>= 1;
+ AI_THINKING_STRUCT->aiLogicId++;
+ AI_THINKING_STRUCT->movesetIndex = 0;
+ }
+
+ if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE)
+ {
+ actionOrMoveIndex[i] = AI_CHOICE_FLEE;
+ }
+ else if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH)
+ {
+ actionOrMoveIndex[i] = AI_CHOICE_WATCH;
+ }
+ else
+ {
+ mostViableMovesScores[0] = AI_THINKING_STRUCT->score[0];
+ mostViableMovesIndices[0] = 0;
+ mostViableMovesNo = 1;
+ for (j = 1; j < MAX_MON_MOVES; j++)
+ {
+ if (gBattleMons[sBattler_AI].moves[j] != 0)
+ {
+ if (!CanTargetBattler(sBattler_AI, i, gBattleMons[sBattler_AI].moves[j]))
+ continue;
+
+ if (mostViableMovesScores[0] == AI_THINKING_STRUCT->score[j])
+ {
+ mostViableMovesScores[mostViableMovesNo] = AI_THINKING_STRUCT->score[j];
+ mostViableMovesIndices[mostViableMovesNo] = j;
+ mostViableMovesNo++;
+ }
+ if (mostViableMovesScores[0] < AI_THINKING_STRUCT->score[j])
+ {
+ mostViableMovesScores[0] = AI_THINKING_STRUCT->score[j];
+ mostViableMovesIndices[0] = j;
+ mostViableMovesNo = 1;
+ }
+ }
+ }
+ actionOrMoveIndex[i] = mostViableMovesIndices[Random() % mostViableMovesNo];
+ bestMovePointsForTarget[i] = mostViableMovesScores[0];
+
+ // Don't use a move against ally if it has less than 100 points.
+ if (i == (sBattler_AI ^ BIT_FLANK) && bestMovePointsForTarget[i] < 100)
+ {
+ bestMovePointsForTarget[i] = -1;
+ mostViableMovesScores[0] = mostViableMovesScores[0]; // Needed to match.
+ }
+ }
+
+ for (j = 0; j < MAX_MON_MOVES; j++) {
+ gBattleStruct->aiFinalScore[sBattler_AI][gBattlerTarget][j] = AI_THINKING_STRUCT->score[j];
+ }
+ }
+ }
+
+ mostMovePoints = bestMovePointsForTarget[0];
+ mostViableTargetsArray[0] = 0;
+ mostViableTargetsNo = 1;
+
+ for (i = 1; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (mostMovePoints == bestMovePointsForTarget[i])
+ {
+ mostViableTargetsArray[mostViableTargetsNo] = i;
+ mostViableTargetsNo++;
+ }
+ if (mostMovePoints < bestMovePointsForTarget[i])
+ {
+ mostMovePoints = bestMovePointsForTarget[i];
+ mostViableTargetsArray[0] = i;
+ mostViableTargetsNo = 1;
+ }
+ }
+
+ gBattlerTarget = mostViableTargetsArray[Random() % mostViableTargetsNo];
+ gBattleStruct->aiChosenTarget[sBattler_AI] = gBattlerTarget;
+ return actionOrMoveIndex[gBattlerTarget];
+}
+
+static void BattleAI_DoAIProcessing(void)
+{
+ while (AI_THINKING_STRUCT->aiState != AIState_FinishedProcessing)
+ {
+ switch (AI_THINKING_STRUCT->aiState)
+ {
+ case AIState_DoNotProcess: // Needed to match.
+ break;
+ case AIState_SettingUp:
+ if (gBattleMons[sBattler_AI].pp[AI_THINKING_STRUCT->movesetIndex] == 0)
+ {
+ AI_THINKING_STRUCT->moveConsidered = 0;
+ }
+ else
+ {
+ AI_THINKING_STRUCT->moveConsidered = gBattleMons[sBattler_AI].moves[AI_THINKING_STRUCT->movesetIndex];
+ }
+ AI_THINKING_STRUCT->aiState++;
+ break;
+ case AIState_Processing:
+ if (AI_THINKING_STRUCT->moveConsidered != MOVE_NONE
+ && AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] > 0)
+ {
+ if (AI_THINKING_STRUCT->aiLogicId < ARRAY_COUNT(sBattleAiFuncTable)
+ && sBattleAiFuncTable[AI_THINKING_STRUCT->aiLogicId] != NULL)
+ {
+ // Call AI function
+ AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] =
+ sBattleAiFuncTable[AI_THINKING_STRUCT->aiLogicId](sBattler_AI,
+ gBattlerTarget,
+ AI_THINKING_STRUCT->moveConsidered,
+ AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex]);
+ }
+ }
+ else
+ {
+ AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0;
+ }
+
+ AI_THINKING_STRUCT->movesetIndex++;
+ if (AI_THINKING_STRUCT->movesetIndex < MAX_MON_MOVES && !(AI_THINKING_STRUCT->aiAction & AI_ACTION_DO_NOT_ATTACK))
+ AI_THINKING_STRUCT->aiState = AIState_SettingUp;
+ else
+ AI_THINKING_STRUCT->aiState++;
+ break;
+ }
+ }
+}
+
+// AI Score Functions
+// AI_FLAG_CHECK_BAD_MOVE - decreases move scores
+static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ // move data
+ u8 atkPriority = GetMovePriority(battlerAtk, move);
+ u16 moveEffect = gBattleMoves[move].effect;
+ s32 moveType;
+ u16 moveTarget = AI_GetBattlerMoveTargetType(battlerAtk, move);
+ u16 accuracy = AI_GetMoveAccuracy(battlerAtk, battlerDef, move);
+ u32 effectiveness = AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex];
+ bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk);
+ u32 i;
+ u16 predictedMove = AI_DATA->predictedMoves[battlerDef];
+
+ SetTypeBeforeUsingMove(move, battlerAtk);
+ GET_MOVE_TYPE(move, moveType);
+
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ return score;
+
+ GET_MOVE_TYPE(move, moveType);
+
+ // check non-user target
+ if (!(moveTarget & MOVE_TARGET_USER))
+ {
+ // handle negative checks on non-user target
+ // check powder moves
+ if (TestMoveFlags(move, FLAG_POWDER) && !IsAffectedByPowder(battlerDef, AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerDef]))
+ {
+ RETURN_SCORE_MINUS(20);
+ }
+
+ // check ground immunities
+ if (moveType == TYPE_GROUND
+ && !IsBattlerGrounded(battlerDef)
+ && ((AI_DATA->abilities[battlerDef] == ABILITY_LEVITATE
+ && DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move))
+ || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_AIR_BALLOON
+ || (gStatuses3[battlerDef] & (STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS)))
+ && move != MOVE_THOUSAND_ARROWS)
+ {
+ RETURN_SCORE_MINUS(20);
+ }
+
+ // check off screen
+ if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ RETURN_SCORE_MINUS(20); // if target off screen and we go first, don't use move
+
+ // check if negates type
+ switch (effectiveness)
+ {
+ case AI_EFFECTIVENESS_x0:
+ RETURN_SCORE_MINUS(20);
+ break;
+ case AI_EFFECTIVENESS_x0_125:
+ case AI_EFFECTIVENESS_x0_25:
+ RETURN_SCORE_MINUS(10);
+ break;
+ }
+
+ // target ability checks
+ if (!DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move))
+ {
+ switch (AI_DATA->abilities[battlerDef])
+ {
+ case ABILITY_MAGIC_GUARD:
+ switch (moveEffect)
+ {
+ case EFFECT_POISON:
+ case EFFECT_WILL_O_WISP:
+ case EFFECT_TOXIC:
+ case EFFECT_LEECH_SEED:
+ score -= 5;
+ break;
+ case EFFECT_CURSE:
+ if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage.
+ score -= 5;
+ break;
+ }
+ break;
+ case ABILITY_VOLT_ABSORB:
+ case ABILITY_MOTOR_DRIVE:
+ case ABILITY_LIGHTNING_ROD:
+ if (moveType == TYPE_ELECTRIC)
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_WATER_ABSORB:
+ case ABILITY_DRY_SKIN:
+ case ABILITY_STORM_DRAIN:
+ if (moveType == TYPE_WATER)
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_FLASH_FIRE:
+ if (moveType == TYPE_FIRE)
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_WONDER_GUARD:
+ if (effectiveness < AI_EFFECTIVENESS_x2)
+ return 0;
+ break;
+ case ABILITY_SAP_SIPPER:
+ if (moveType == TYPE_GRASS)
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_JUSTIFIED:
+ if (moveType == TYPE_DARK && !IS_MOVE_STATUS(move))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_RATTLED:
+ if (!IS_MOVE_STATUS(move)
+ && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_SOUNDPROOF:
+ if (TestMoveFlags(move, FLAG_SOUND))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_BULLETPROOF:
+ if (TestMoveFlags(move, FLAG_BALLISTIC))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_DAZZLING:
+ case ABILITY_QUEENLY_MAJESTY:
+ if (atkPriority > 0)
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_AROMA_VEIL:
+ if (IsAromaVeilProtectedMove(move))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_SWEET_VEIL:
+ if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN)
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_FLOWER_VEIL:
+ if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringMoveEffect(moveEffect)))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_MAGIC_BOUNCE:
+ if (TestMoveFlags(move, FLAG_MAGIC_COAT_AFFECTED))
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_CONTRARY:
+ if (IsStatLoweringMoveEffect(moveEffect))
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_CLEAR_BODY:
+ case ABILITY_FULL_METAL_BODY:
+ case ABILITY_WHITE_SMOKE:
+ if (IsStatLoweringMoveEffect(moveEffect))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_HYPER_CUTTER:
+ if ((moveEffect == EFFECT_ATTACK_DOWN || moveEffect == EFFECT_ATTACK_DOWN_2)
+ && move != MOVE_PLAY_NICE && move != MOVE_NOBLE_ROAR && move != MOVE_TEARFUL_LOOK && move != MOVE_VENOM_DRENCH)
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_KEEN_EYE:
+ if (moveEffect == EFFECT_ACCURACY_DOWN || moveEffect == EFFECT_ACCURACY_DOWN_2)
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_BIG_PECKS:
+ if (moveEffect == EFFECT_DEFENSE_DOWN || moveEffect == EFFECT_DEFENSE_DOWN_2)
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_DEFIANT:
+ case ABILITY_COMPETITIVE:
+ if (IsStatLoweringMoveEffect(moveEffect) && !IsTargetingPartner(battlerAtk, battlerDef))
+ RETURN_SCORE_MINUS(8);
+ break;
+ case ABILITY_COMATOSE:
+ if (IsNonVolatileStatusMoveEffect(moveEffect))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_SHIELDS_DOWN:
+ if (IsShieldsDownProtected(battlerAtk) && IsNonVolatileStatusMoveEffect(moveEffect))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_LEAF_GUARD:
+ if (AI_WeatherHasEffect() && (gBattleWeather & B_WEATHER_SUN)
+ && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_UTILITY_UMBRELLA
+ && IsNonVolatileStatusMoveEffect(moveEffect))
+ RETURN_SCORE_MINUS(10);
+ break;
+ } // def ability checks
+
+ // target partner ability checks & not attacking partner
+ if (isDoubleBattle)
+ {
+ switch (AI_DATA->abilities[BATTLE_PARTNER(battlerDef)])
+ {
+ case ABILITY_LIGHTNING_ROD:
+ if (moveType == TYPE_ELECTRIC && !IsMoveRedirectionPrevented(move, AI_DATA->abilities[battlerAtk]))
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_STORM_DRAIN:
+ if (moveType == TYPE_WATER && !IsMoveRedirectionPrevented(move, AI_DATA->abilities[battlerAtk]))
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_MAGIC_BOUNCE:
+ if (TestMoveFlags(move, FLAG_MAGIC_COAT_AFFECTED) && moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD))
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_SWEET_VEIL:
+ if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN)
+ RETURN_SCORE_MINUS(20);
+ break;
+ case ABILITY_FLOWER_VEIL:
+ if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringMoveEffect(moveEffect)))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_AROMA_VEIL:
+ if (IsAromaVeilProtectedMove(move))
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_DAZZLING:
+ case ABILITY_QUEENLY_MAJESTY:
+ if (atkPriority > 0)
+ RETURN_SCORE_MINUS(10);
+ break;
+ }
+ } // def partner ability checks
+ } // ignore def ability check
+
+ // gen7+ dark type mons immune to priority->elevated moves from prankster
+ #if B_PRANKSTER_DARK_TYPES >= GEN_7
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_PRANKSTER && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) && IS_MOVE_STATUS(move)
+ && !(moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER)))
+ RETURN_SCORE_MINUS(10);
+ #endif
+
+ // terrain & effect checks
+ if (AI_IsTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN))
+ {
+ if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN)
+ RETURN_SCORE_MINUS(20);
+ }
+
+ if (AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN))
+ {
+ if (IsNonVolatileStatusMoveEffect(moveEffect) || IsConfusionMoveEffect(moveEffect))
+ RETURN_SCORE_MINUS(20);
+ }
+
+ if (AI_IsTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && atkPriority > 0)
+ {
+ RETURN_SCORE_MINUS(20);
+ }
+ } // end check MOVE_TARGET_USER
+
+// the following checks apply to any target (including user)
+
+ // throat chop check
+ if (gDisableStructs[battlerAtk].throatChopTimer && TestMoveFlags(move, FLAG_SOUND))
+ return 0; // Can't even select move at all
+ // heal block check
+ if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(battlerAtk, move))
+ return 0; // Can't even select heal blocked move
+ // primal weather check
+ if (WEATHER_HAS_EFFECT)
+ {
+ if (gBattleWeather & B_WEATHER_PRIMAL_ANY)
+ {
+ switch (move)
+ {
+ case MOVE_SUNNY_DAY:
+ case MOVE_RAIN_DANCE:
+ case MOVE_HAIL:
+ case MOVE_SANDSTORM:
+ RETURN_SCORE_MINUS(30);
+ }
+ }
+
+ if (!IS_MOVE_STATUS(move))
+ {
+ if (gBattleWeather & B_WEATHER_SUN_PRIMAL)
+ {
+ if (moveType == TYPE_WATER)
+ RETURN_SCORE_MINUS(30);
+ }
+ else if (gBattleWeather & B_WEATHER_RAIN_PRIMAL)
+ {
+ if (moveType == TYPE_FIRE)
+ RETURN_SCORE_MINUS(30);
+ }
+ }
+ }
+
+ // check move effects
+ switch (moveEffect)
+ {
+ case EFFECT_HIT:
+ default:
+ break; // check move damage
+ case EFFECT_SLEEP:
+ if (!AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_EXPLOSION:
+ if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_WILL_SUICIDE))
+ score -= 2;
+
+ if (effectiveness == AI_EFFECTIVENESS_x0)
+ {
+ score -= 10;
+ }
+ else if (IsAbilityOnField(ABILITY_DAMP) && !DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move))
+ {
+ score -= 10;
+ }
+ else if (CountUsablePartyMons(battlerAtk) == 0)
+ {
+ if (CountUsablePartyMons(battlerDef) != 0)
+ score -= 10;
+ else
+ score--;
+ }
+ break;
+ case EFFECT_DREAM_EATER:
+ if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE)
+ score -= 8;
+ else if (effectiveness == AI_EFFECTIVENESS_x0)
+ score -= 10;
+ break;
+ // stat raising effects
+ case EFFECT_ATTACK_UP:
+ case EFFECT_ATTACK_UP_2:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 10;
+ break;
+ case EFFECT_STUFF_CHEEKS:
+ if (ItemId_GetPocket(gBattleMons[battlerAtk].item) != POCKET_BERRIES)
+ return 0; // cannot even select
+ //fallthrough
+ case EFFECT_DEFENSE_UP:
+ case EFFECT_DEFENSE_UP_2:
+ case EFFECT_DEFENSE_UP_3:
+ case EFFECT_DEFENSE_CURL:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF))
+ score -= 10;
+ break;
+ case EFFECT_SPECIAL_ATTACK_UP:
+ case EFFECT_SPECIAL_ATTACK_UP_2:
+ case EFFECT_SPECIAL_ATTACK_UP_3:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))
+ score -= 10;
+ break;
+ case EFFECT_SPECIAL_DEFENSE_UP:
+ case EFFECT_SPECIAL_DEFENSE_UP_2:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF))
+ score -= 10;
+ break;
+ case EFFECT_ACCURACY_UP:
+ case EFFECT_ACCURACY_UP_2:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ACC))
+ score -= 10;
+ break;
+ case EFFECT_EVASION_UP:
+ case EFFECT_EVASION_UP_2:
+ case EFFECT_MINIMIZE:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_EVASION))
+ score -= 10;
+ break;
+ case EFFECT_COSMIC_POWER:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF))
+ score -= 8;
+ break;
+ case EFFECT_BULK_UP:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF))
+ score -= 8;
+ break;
+ case EFFECT_CALM_MIND:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF))
+ score -= 8;
+ break;
+ case EFFECT_DRAGON_DANCE:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPEED))
+ score -= 8;
+ break;
+ case EFFECT_COIL:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ACC))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 8;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF))
+ score -= 6;
+ break;
+ case EFFECT_ATTACK_ACCURACY_UP: //hone claws
+ if (AI_DATA->abilities[battlerAtk] != ABILITY_CONTRARY)
+ {
+ if (gBattleMons[battlerAtk].statStages[STAT_ATK] >= MAX_STAT_STAGE
+ && (gBattleMons[battlerAtk].statStages[STAT_ACC] >= MAX_STAT_STAGE || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)))
+ score -= 10;
+ break;
+ }
+ else
+ {
+ score -= 10;
+ }
+ break;
+ case EFFECT_CHARGE:
+ if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP)
+ score -= 20;
+ else if (!HasMoveWithType(battlerAtk, TYPE_ELECTRIC))
+ score -= 10;
+ #if B_CHARGE_SPDEF_RAISE >= GEN_5
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF))
+ score -= 5;
+ #endif
+ break;
+ case EFFECT_QUIVER_DANCE:
+ case EFFECT_GEOMANCY:
+ if (gBattleMons[battlerAtk].statStages[STAT_SPATK] >= MAX_STAT_STAGE || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPEED))
+ score -= 8;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF))
+ score -= 6;
+ break;
+ case EFFECT_SHIFT_GEAR:
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPEED))
+ score -= 8;
+ break;
+ case EFFECT_SHELL_SMASH:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY)
+ {
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF))
+ score -= 8;
+ }
+ else
+ {
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))
+ score -= 8;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPEED))
+ score -= 6;
+ }
+ break;
+ case EFFECT_GROWTH:
+ case EFFECT_ATTACK_SPATK_UP: // work up
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))
+ score -= 8;
+ break;
+ case EFFECT_ROTOTILLER:
+ if (isDoubleBattle)
+ {
+ if (!(IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS)
+ && AI_IsBattlerGrounded(battlerAtk)
+ && (BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK)))
+ && !(IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS)
+ && AI_IsBattlerGrounded(BATTLE_PARTNER(battlerAtk))
+ && AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] != ABILITY_CONTRARY
+ && (BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_ATK)
+ || BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPATK))))
+ {
+ score -= 10;
+ }
+ }
+ else if (!(IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS)
+ && AI_IsBattlerGrounded(battlerAtk)
+ && (BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK))))
+ {
+ score -= 10;
+ }
+ break;
+ case EFFECT_GEAR_UP:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_PLUS || AI_DATA->abilities[battlerAtk] == ABILITY_MINUS)
+ {
+ // same as growth, work up
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))
+ score -= 8;
+ break;
+ }
+ else if (!isDoubleBattle)
+ {
+ score -= 10; // no partner and our stats wont rise, so don't use
+ }
+
+ if (isDoubleBattle)
+ {
+ if (AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_PLUS || AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_MINUS)
+ {
+ if ((!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ && (!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)))
+ score -= 10;
+ }
+ else if (AI_DATA->abilities[battlerAtk] != ABILITY_PLUS && AI_DATA->abilities[battlerAtk] != ABILITY_MINUS)
+ {
+ score -= 10; // nor our or our partner's ability is plus/minus
+ }
+ }
+ break;
+ case EFFECT_ACUPRESSURE:
+ if (DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || AreBattlersStatsMaxed(battlerDef))
+ score -= 10;
+ break;
+ case EFFECT_MAGNETIC_FLUX:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_PLUS || AI_DATA->abilities[battlerAtk] == ABILITY_MINUS)
+ {
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPDEF))
+ score -= 8;
+ }
+ else if (!isDoubleBattle)
+ {
+ score -= 10; // our stats wont rise from this move
+ }
+
+ if (isDoubleBattle)
+ {
+ if (AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_PLUS || AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_MINUS)
+ {
+ if (!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_DEF))
+ score -= 10;
+ else if (!BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPDEF))
+ score -= 8;
+ }
+ else if (AI_DATA->abilities[battlerAtk] != ABILITY_PLUS && AI_DATA->abilities[battlerAtk] != ABILITY_MINUS)
+ {
+ score -= 10; // nor our or our partner's ability is plus/minus
+ }
+ }
+ break;
+ // stat lowering effects
+ case EFFECT_ATTACK_DOWN:
+ case EFFECT_ATTACK_DOWN_2:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK)) //|| !HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL))
+ score -= 10;
+ else if (AI_DATA->abilities[battlerDef] == ABILITY_HYPER_CUTTER)
+ score -= 10;
+ break;
+ case EFFECT_DEFENSE_DOWN:
+ case EFFECT_DEFENSE_DOWN_2:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_DEF))
+ score -= 10;
+ break;
+ case EFFECT_SPEED_DOWN:
+ case EFFECT_SPEED_DOWN_2:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPEED))
+ score -= 10;
+ else if (AI_DATA->abilities[battlerDef] == ABILITY_SPEED_BOOST)
+ score -= 10;
+ break;
+ case EFFECT_SPECIAL_ATTACK_DOWN:
+ case EFFECT_SPECIAL_ATTACK_DOWN_2:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPATK)) //|| !HasMoveWithSplit(battlerDef, SPLIT_SPECIAL))
+ score -= 10;
+ break;
+ case EFFECT_SPECIAL_DEFENSE_DOWN:
+ case EFFECT_SPECIAL_DEFENSE_DOWN_2:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPDEF))
+ score -= 10;
+ break;
+ case EFFECT_ACCURACY_DOWN:
+ case EFFECT_ACCURACY_DOWN_2:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ACC))
+ score -= 10;
+ else if (AI_DATA->abilities[battlerDef] == ABILITY_KEEN_EYE)
+ score -= 8;
+ break;
+ case EFFECT_EVASION_DOWN:
+ case EFFECT_EVASION_DOWN_2:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_EVASION))
+ score -= 10;
+ break;
+ case EFFECT_TICKLE:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK))
+ score -= 10;
+ else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_DEF))
+ score -= 8;
+ break;
+ case EFFECT_VENOM_DRENCH:
+ if (!(gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY))
+ {
+ score -= 10;
+ }
+ else
+ {
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPEED))
+ score -= 10;
+ else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPATK))
+ score -= 8;
+ else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK))
+ score -= 6;
+ }
+ break;
+ case EFFECT_NOBLE_ROAR:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPATK))
+ score -= 10;
+ else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK))
+ score -= 8;
+ break;
+ case EFFECT_CAPTIVATE:
+ {
+ u8 atkGender = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality);
+ u8 defGender = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality);
+ if (atkGender == MON_GENDERLESS || defGender == MON_GENDERLESS || atkGender == defGender)
+ score -= 10;
+ }
+ break;
+ // other
+ case EFFECT_HAZE:
+ if (PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ {
+ score -= 10; // partner already using haze
+ }
+ else
+ {
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerAtk].statStages[i] > DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerAtk)].statStages[i] > DEFAULT_STAT_STAGE)
+ score -= 10; // Don't want to reset our boosted stats
+ }
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerDef].statStages[i] < DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerDef)].statStages[i] < DEFAULT_STAT_STAGE)
+ score -= 10; //Don't want to reset enemy lowered stats
+ }
+ }
+ break;
+ //case EFFECT_BIDE:
+ //case EFFECT_SUPER_FANG:
+ //case EFFECT_RECHARGE:
+ case EFFECT_LEVEL_DAMAGE:
+ case EFFECT_PSYWAVE:
+ //case EFFECT_COUNTER:
+ //case EFFECT_FLAIL:
+ case EFFECT_RETURN:
+ case EFFECT_PRESENT:
+ case EFFECT_FRUSTRATION:
+ case EFFECT_SONICBOOM:
+ //case EFFECT_MIRROR_COAT:
+ case EFFECT_SKULL_BASH:
+ case EFFECT_FOCUS_PUNCH:
+ case EFFECT_SUPERPOWER:
+ //case EFFECT_ENDEAVOR:
+ case EFFECT_LOW_KICK:
+ // AI_CBM_HighRiskForDamage
+ if (AI_DATA->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < AI_EFFECTIVENESS_x2)
+ score -= 10;
+ break;
+ case EFFECT_COUNTER:
+ case EFFECT_MIRROR_COAT:
+ if (IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]) || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))
+ score--;
+ if (predictedMove == MOVE_NONE || GetBattleMoveSplit(predictedMove) == SPLIT_STATUS
+ || DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove))
+ score -= 10;
+ break;
+
+ case EFFECT_ROAR:
+ if (CountUsablePartyMons(battlerDef) == 0)
+ score -= 10;
+ else if (AI_DATA->abilities[battlerDef] == ABILITY_SUCTION_CUPS)
+ score -= 10;
+ break;
+ case EFFECT_TOXIC_THREAD:
+ if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_SPEED))
+ score--; // may still want to just poison
+ //fallthrough
+ case EFFECT_POISON:
+ case EFFECT_TOXIC:
+ if (!AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_LIGHT_SCREEN:
+ if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_LIGHTSCREEN
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_REFLECT:
+ if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_REFLECT
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_AURORA_VEIL:
+ if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_AURORA_VEIL
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)
+ || !(gBattleWeather & B_WEATHER_HAIL))
+ score -= 10;
+ break;
+ case EFFECT_OHKO:
+ if (B_SHEER_COLD_IMMUNITY >= GEN_7
+ && move == MOVE_SHEER_COLD
+ && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE))
+ return 0;
+ if (!ShouldTryOHKO(battlerAtk, battlerDef, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], move))
+ score -= 10;
+ break;
+ case EFFECT_MIST:
+ if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_MIST
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_FOCUS_ENERGY:
+ if (gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY)
+ score -= 10;
+ break;
+ case EFFECT_CONFUSE:
+ case EFFECT_SWAGGER:
+ case EFFECT_FLATTER:
+ if (!AI_CanConfuse(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_PARALYZE:
+ if (!AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_SUBSTITUTE:
+ if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || AI_DATA->abilities[battlerDef] == ABILITY_INFILTRATOR)
+ score -= 8;
+ else if (AI_DATA->hpPercents[battlerAtk] <= 25)
+ score -= 10;
+ else if (B_SOUND_SUBSTITUTE >= GEN_6 && TestMoveFlagsInMoveset(battlerDef, FLAG_SOUND))
+ score -= 8;
+ break;
+ case EFFECT_LEECH_SEED:
+ if (gStatuses3[battlerDef] & STATUS3_LEECHSEED
+ || IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)
+ || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ else if (AI_DATA->abilities[battlerDef] == ABILITY_LIQUID_OOZE)
+ score -= 3;
+ break;
+ case EFFECT_DISABLE:
+ if (gDisableStructs[battlerDef].disableTimer == 0
+ && (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)
+ && !PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ {
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first
+ {
+ if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF)
+ score -= 10; // no anticipated move to disable
+ }
+ else if (predictedMove == MOVE_NONE)
+ {
+ score -= 10;
+ }
+ }
+ else
+ {
+ score -= 10;
+ }
+ break;
+ case EFFECT_ENCORE:
+ if (gDisableStructs[battlerDef].encoreTimer == 0
+ && (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)
+ && !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ {
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first
+ {
+ if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF)
+ score -= 10; // no anticipated move to encore
+ }
+ else if (predictedMove == MOVE_NONE)
+ {
+ score -= 10;
+ }
+ }
+ else
+ {
+ score -= 10;
+ }
+ break;
+ case EFFECT_SNORE:
+ case EFFECT_SLEEP_TALK:
+ if (IsWakeupTurn(battlerAtk) || (!(gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerAtk] != ABILITY_COMATOSE))
+ score -= 10; // if mon will wake up, is not asleep, or is not comatose
+ break;
+ case EFFECT_MEAN_LOOK:
+ if (IsBattlerTrapped(battlerDef, TRUE) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_NIGHTMARE:
+ if (gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE)
+ score -= 10;
+ else if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE)
+ score -= 8;
+ else if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_CURSE:
+ if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST))
+ {
+ if (gBattleMons[battlerDef].status2 & STATUS2_CURSED
+ || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ else if (AI_DATA->hpPercents[battlerAtk] <= 50)
+ score -= 6;
+ }
+ else // regular curse
+ {
+ if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 10;
+ else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_DEF))
+ score -= 8;
+ }
+ break;
+ case EFFECT_SPIKES:
+ if (gSideTimers[GetBattlerSide(battlerDef)].spikesAmount >= 3)
+ score -= 10;
+ else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)
+ && gSideTimers[GetBattlerSide(battlerDef)].spikesAmount == 2)
+ score -= 10; // only one mon needs to set up the last layer of Spikes
+ break;
+ case EFFECT_STEALTH_ROCK:
+ if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0
+ || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) //Only one mon needs to set up Stealth Rocks
+ score -= 10;
+ break;
+ case EFFECT_TOXIC_SPIKES:
+ if (gSideTimers[GetBattlerSide(battlerDef)].toxicSpikesAmount >= 2)
+ score -= 10;
+ else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) && gSideTimers[GetBattlerSide(battlerDef)].toxicSpikesAmount == 1)
+ score -= 10; // only one mon needs to set up the last layer of Toxic Spikes
+ break;
+ case EFFECT_STICKY_WEB:
+ if (gSideTimers[GetBattlerSide(battlerDef)].stickyWebAmount)
+ score -= 10;
+ else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) && gSideTimers[GetBattlerSide(battlerDef)].stickyWebAmount)
+ score -= 10; // only one mon needs to set up Sticky Web
+ break;
+ case EFFECT_FORESIGHT:
+ if (gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT)
+ score -= 10;
+ else if (gBattleMons[battlerDef].statStages[STAT_EVASION] <= 4
+ || !(IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST))
+ || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 9;
+ break;
+ case EFFECT_PERISH_SONG:
+ if (isDoubleBattle)
+ {
+ if (CountUsablePartyMons(battlerAtk) == 0
+ && AI_DATA->abilities[battlerAtk] != ABILITY_SOUNDPROOF
+ && AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] != ABILITY_SOUNDPROOF
+ && CountUsablePartyMons(FOE(battlerAtk)) >= 1)
+ {
+ score -= 10; //Don't wipe your team if you're going to lose
+ }
+ else if ((!IsBattlerAlive(FOE(battlerAtk)) || AI_DATA->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF
+ || gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG)
+ && (!IsBattlerAlive(BATTLE_PARTNER(FOE(battlerAtk))) || AI_DATA->abilities[BATTLE_PARTNER(FOE(battlerAtk))] == ABILITY_SOUNDPROOF
+ || gStatuses3[BATTLE_PARTNER(FOE(battlerAtk))] & STATUS3_PERISH_SONG))
+ {
+ score -= 10; //Both enemies are perish songed
+ }
+ else if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ {
+ score -= 10;
+ }
+ }
+ else
+ {
+ if (CountUsablePartyMons(battlerAtk) == 0 && AI_DATA->abilities[battlerAtk] != ABILITY_SOUNDPROOF
+ && CountUsablePartyMons(battlerDef) >= 1)
+ score -= 10;
+
+ if (gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG || AI_DATA->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF)
+ score -= 10;
+ }
+ break;
+ case EFFECT_SANDSTORM:
+ if (gBattleWeather & (B_WEATHER_SANDSTORM | B_WEATHER_PRIMAL_ANY)
+ || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove))
+ score -= 8;
+ break;
+ case EFFECT_SUNNY_DAY:
+ if (gBattleWeather & (B_WEATHER_SUN | B_WEATHER_PRIMAL_ANY)
+ || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove))
+ score -= 8;
+ break;
+ case EFFECT_RAIN_DANCE:
+ if (gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_PRIMAL_ANY)
+ || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove))
+ score -= 8;
+ break;
+ case EFFECT_HAIL:
+ if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY)
+ || PartnerMoveEffectIsWeather(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove))
+ score -= 8;
+ break;
+ case EFFECT_ATTRACT:
+ if (!AI_CanBeInfatuated(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef],
+ GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality),
+ GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality)))
+ score -= 10;
+ break;
+ case EFFECT_SAFEGUARD:
+ if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_SAFEGUARD
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_MAGNITUDE:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_LEVITATE)
+ score -= 10;
+ break;
+ case EFFECT_PARTING_SHOT:
+ if (CountUsablePartyMons(battlerAtk) == 0)
+ score -= 10;
+ break;
+ case EFFECT_BATON_PASS:
+ if (CountUsablePartyMons(battlerAtk) == 0)
+ score -= 10;
+ else if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE
+ || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK))
+ || AnyStatIsRaised(battlerAtk))
+ break;
+ else
+ score -= 6;
+ break;
+ case EFFECT_HIT_ESCAPE:
+ break;
+ case EFFECT_RAPID_SPIN:
+ if ((gBattleMons[battlerAtk].status2 & STATUS2_WRAPPED) || (gStatuses3[battlerAtk] & STATUS3_LEECHSEED))
+ break; // check damage/accuracy
+ //Spin checks
+ if (!(gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY))
+ score -= 6;
+ break;
+ case EFFECT_BELLY_DRUM:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY)
+ score -= 10;
+ else if (AI_DATA->hpPercents[battlerAtk] <= 60)
+ score -= 10;
+ break;
+ case EFFECT_FUTURE_SIGHT:
+ if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_FUTUREATTACK
+ || gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_FUTUREATTACK)
+ score -= 12;
+ else
+ score += 5;
+ break;
+ case EFFECT_TELEPORT:
+ score -= 10;
+ break;
+ case EFFECT_FAKE_OUT:
+ if (!gDisableStructs[battlerAtk].isFirstTurn)
+ {
+ score -= 10;
+ }
+ else if (move == MOVE_FAKE_OUT) // filter out first impression
+ {
+ if ((AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND || AI_DATA->abilities[battlerAtk] == ABILITY_GORILLA_TACTICS)
+ && (CountUsablePartyMons(battlerDef) > 0 || !CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0)))
+ {
+ if (CountUsablePartyMons(battlerAtk) == 0)
+ score -= 10; // Don't lock the attacker into Fake Out if they can't switch out afterwards.
+ }
+ }
+ break;
+ case EFFECT_STOCKPILE:
+ if (gDisableStructs[battlerAtk].stockpileCounter >= 3)
+ score -= 10;
+ break;
+ case EFFECT_SPIT_UP:
+ if (gDisableStructs[battlerAtk].stockpileCounter <= 1)
+ score -= 10;
+ break;
+ case EFFECT_SWALLOW:
+ if (gDisableStructs[battlerAtk].stockpileCounter == 0)
+ {
+ score -= 10;
+ }
+ else
+ {
+ if (AtMaxHp(battlerAtk))
+ score -= 10;
+ else if (AI_DATA->hpPercents[battlerAtk] >= 80)
+ score -= 5; // do it if nothing better
+ }
+ break;
+ case EFFECT_TORMENT:
+ if (gBattleMons[battlerDef].status2 & STATUS2_TORMENT
+ || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ {
+ score -= 10;
+ break;
+ }
+
+ if (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_MENTAL_HERB)
+ score -= 6;
+ break;
+ case EFFECT_WILL_O_WISP:
+ if (!AI_CanBurn(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_MEMENTO:
+ if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ else if (gBattleMons[battlerDef].statStages[STAT_ATK] == MIN_STAT_STAGE && gBattleMons[battlerDef].statStages[STAT_SPATK] == MIN_STAT_STAGE)
+ score -= 10;
+ break;
+ case EFFECT_FOLLOW_ME:
+ case EFFECT_HELPING_HAND:
+ if (!isDoubleBattle
+ || !IsBattlerAlive(BATTLE_PARTNER(battlerAtk))
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)
+ || (AI_DATA->partnerMove != MOVE_NONE && IS_MOVE_STATUS(AI_DATA->partnerMove))
+ || *(gBattleStruct->monToSwitchIntoId + BATTLE_PARTNER(battlerAtk)) != PARTY_SIZE) //Partner is switching out.
+ score -= 10;
+ break;
+ case EFFECT_TRICK:
+ case EFFECT_KNOCK_OFF:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_STICKY_HOLD)
+ score -= 10;
+ break;
+ case EFFECT_INGRAIN:
+ if (gStatuses3[battlerAtk] & STATUS3_ROOTED)
+ score -= 10;
+ break;
+ case EFFECT_AQUA_RING:
+ if (gStatuses3[battlerAtk] & STATUS3_AQUA_RING)
+ score -= 10;
+ break;
+ case EFFECT_RECYCLE:
+ if (GetUsedHeldItem(battlerAtk) == 0 || gBattleMons[battlerAtk].item != 0)
+ score -= 10;
+ break;
+ case EFFECT_IMPRISON:
+ if (gStatuses3[battlerAtk] & STATUS3_IMPRISONED_OTHERS)
+ score -= 10;
+ break;
+ case EFFECT_REFRESH:
+ if (!(gBattleMons[battlerDef].status1 & (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_PARALYSIS)))
+ score -= 10;
+ break;
+ case EFFECT_PSYCHO_SHIFT:
+ if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY && !AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ else if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && !AI_CanBurn(battlerAtk, battlerDef,
+ AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ else if (gBattleMons[battlerAtk].status1 & STATUS1_PARALYSIS && !AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ else if (gBattleMons[battlerAtk].status1 & STATUS1_SLEEP && !AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ else
+ score -= 10; // attacker has no status to transmit
+ break;
+ case EFFECT_MUD_SPORT:
+ if (gFieldStatuses & STATUS_FIELD_MUDSPORT
+ || gStatuses4[battlerAtk] & STATUS4_MUD_SPORT
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_WATER_SPORT:
+ if (gFieldStatuses & STATUS_FIELD_WATERSPORT
+ || gStatuses4[battlerAtk] & STATUS4_WATER_SPORT
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_ABSORB:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_LIQUID_OOZE)
+ score -= 6;
+ break;
+ case EFFECT_STRENGTH_SAP:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_CONTRARY)
+ score -= 10;
+ else if (!ShouldLowerStat(battlerDef, AI_DATA->abilities[battlerDef], STAT_ATK))
+ score -= 10;
+ break;
+ case EFFECT_COPYCAT:
+ case EFFECT_MIRROR_MOVE:
+ return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score);
+ case EFFECT_FLOWER_SHIELD:
+ if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS)
+ && !(isDoubleBattle && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS)))
+ score -= 10;
+ break;
+ case EFFECT_AROMATIC_MIST:
+ if (!isDoubleBattle || gBattleMons[BATTLE_PARTNER(battlerAtk)].hp == 0 || !BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPDEF))
+ score -= 10;
+ break;
+ case EFFECT_BIDE:
+ if (!HasDamagingMove(battlerDef)
+ || AI_DATA->hpPercents[battlerAtk] < 30 //Close to death
+ || gBattleMons[battlerDef].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) //No point in biding if can't take damage
+ score -= 10;
+ break;
+ case EFFECT_HIT_SWITCH_TARGET:
+ if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10; // don't scare away pokemon twice
+ else if (AI_DATA->hpPercents[battlerDef] < 10 && GetBattlerSecondaryDamage(battlerDef))
+ score -= 10; // don't blow away mon that will faint soon
+ else if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG)
+ score -= 10;
+ break;
+ case EFFECT_CONVERSION:
+ //Check first move type
+ if (IS_BATTLER_OF_TYPE(battlerAtk, gBattleMoves[gBattleMons[battlerAtk].moves[0]].type))
+ score -= 10;
+ break;
+ case EFFECT_REST:
+ if (!AI_CanSleep(battlerAtk, AI_DATA->abilities[battlerAtk]))
+ score -= 10;
+ //fallthrough
+ case EFFECT_RESTORE_HP:
+ case EFFECT_SOFTBOILED:
+ case EFFECT_ROOST:
+ if (AtMaxHp(battlerAtk))
+ score -= 10;
+ else if (AI_DATA->hpPercents[battlerAtk] >= 90)
+ score -= 9; //No point in healing, but should at least do it if nothing better
+ break;
+ case EFFECT_MORNING_SUN:
+ case EFFECT_SYNTHESIS:
+ case EFFECT_MOONLIGHT:
+ if (AI_WeatherHasEffect() && (gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL)))
+ score -= 3;
+ else if (AtMaxHp(battlerAtk))
+ score -= 10;
+ else if (AI_DATA->hpPercents[battlerAtk] >= 90)
+ score -= 9; //No point in healing, but should at least do it if nothing better
+ break;
+ case EFFECT_PURIFY:
+ if (!(gBattleMons[battlerDef].status1 & STATUS1_ANY))
+ score -= 10;
+ else if (battlerDef == BATTLE_PARTNER(battlerAtk))
+ break; //Always heal your ally
+ else if (AtMaxHp(battlerAtk))
+ score -= 10;
+ else if (AI_DATA->hpPercents[battlerAtk] >= 90)
+ score -= 8; //No point in healing, but should at least do it if nothing better
+ break;
+ case EFFECT_SUPER_FANG:
+ if (AI_DATA->hpPercents[battlerDef] < 50)
+ score -= 4;
+ break;
+ case EFFECT_RECOIL_IF_MISS:
+ if (AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_GetMoveAccuracy(battlerAtk, battlerDef, move) < 75)
+ score -= 6;
+ break;
+ case EFFECT_RECOIL_25:
+ if (AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->abilities[battlerAtk] != ABILITY_ROCK_HEAD)
+ {
+ u32 recoilDmg = max(1, AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 4);
+ if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex))
+ score -= 10;
+ break;
+ }
+ break;
+ case EFFECT_RECOIL_33:
+ case EFFECT_RECOIL_33_STATUS:
+ if (AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->abilities[battlerAtk] != ABILITY_ROCK_HEAD)
+ {
+ u32 recoilDmg = max(1, AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 3);
+ if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex))
+ score -= 10;
+ break;
+ }
+ break;
+ case EFFECT_RECOIL_50:
+ if (AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->abilities[battlerAtk] != ABILITY_ROCK_HEAD)
+ {
+ u32 recoilDmg = max(1, AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 2);
+ if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex))
+ score -= 10;
+ break;
+ }
+ break;
+ case EFFECT_TEETER_DANCE:
+ if (((gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
+ || (!DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move) && AI_DATA->abilities[battlerDef] == ABILITY_OWN_TEMPO)
+ || (IsBattlerGrounded(battlerDef) && AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN))
+ || (DoesSubstituteBlockMove(battlerAtk, battlerDef, move)))
+ && ((gBattleMons[BATTLE_PARTNER(battlerDef)].status2 & STATUS2_CONFUSION)
+ || (!DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move) && AI_DATA->abilities[BATTLE_PARTNER(battlerDef)] == ABILITY_OWN_TEMPO)
+ || (IsBattlerGrounded(BATTLE_PARTNER(battlerDef)) && AI_IsTerrainAffected(BATTLE_PARTNER(battlerDef), STATUS_FIELD_MISTY_TERRAIN))
+ || (DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), move))))
+ {
+ score -= 10;
+ }
+ break;
+ case EFFECT_TRANSFORM:
+ if (gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED
+ || (gBattleMons[battlerDef].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE))) //Leave out Illusion b/c AI is supposed to be fooled
+ score -= 10;
+ break;
+ case EFFECT_TWO_TURNS_ATTACK:
+ if (AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_POWER_HERB && CanTargetFaintAi(battlerDef, battlerAtk))
+ score -= 6;
+ break;
+ case EFFECT_RECHARGE:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < AI_EFFECTIVENESS_x2)
+ score -= 10;
+ else if (AI_DATA->abilities[battlerAtk] != ABILITY_TRUANT
+ && !CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0))
+ score -= 2;
+ break;
+ case EFFECT_SPITE:
+ case EFFECT_MIMIC:
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first
+ {
+ if (gLastMoves[battlerDef] == MOVE_NONE
+ || gLastMoves[battlerDef] == 0xFFFF)
+ score -= 10;
+ }
+ else if (predictedMove == MOVE_NONE)
+ {
+ // TODO predicted move separate from gLastMoves
+ score -= 10;
+ }
+ break;
+ case EFFECT_METRONOME:
+ break;
+ case EFFECT_ENDEAVOR:
+ case EFFECT_PAIN_SPLIT:
+ if (gBattleMons[battlerAtk].hp > (gBattleMons[battlerAtk].hp + gBattleMons[battlerDef].hp) / 2)
+ score -= 10;
+ break;
+
+ case EFFECT_CONVERSION_2:
+ //TODO
+ break;
+ case EFFECT_LOCK_ON:
+ if (gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS
+ || AI_DATA->abilities[battlerAtk] == ABILITY_NO_GUARD
+ || AI_DATA->abilities[battlerDef] == ABILITY_NO_GUARD
+ || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_LASER_FOCUS:
+ if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS)
+ score -= 10;
+ else if (AI_DATA->abilities[battlerDef] == ABILITY_SHELL_ARMOR || AI_DATA->abilities[battlerDef] == ABILITY_BATTLE_ARMOR)
+ score -= 8;
+ break;
+ case EFFECT_SKETCH:
+ if (gLastMoves[battlerDef] == MOVE_NONE)
+ score -= 10;
+ break;
+ case EFFECT_DESTINY_BOND:
+ if (gBattleMons[battlerDef].status2 & STATUS2_DESTINY_BOND)
+ score -= 10;
+ break;
+ case EFFECT_FALSE_SWIPE:
+ // TODO
+ break;
+ case EFFECT_HEAL_BELL:
+ if (!AnyPartyMemberStatused(battlerAtk, TestMoveFlags(move, FLAG_SOUND)) || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_HIT_PREVENT_ESCAPE:
+ break;
+ case EFFECT_ENDURE:
+ if (gBattleMons[battlerAtk].hp == 1 || GetBattlerSecondaryDamage(battlerAtk)) //Don't use Endure if you'll die after using it
+ score -= 10;
+ break;
+ case EFFECT_PROTECT:
+ {
+ bool32 decreased = FALSE;
+ switch (move)
+ {
+ case MOVE_QUICK_GUARD:
+ case MOVE_WIDE_GUARD:
+ case MOVE_CRAFTY_SHIELD:
+ if (!isDoubleBattle)
+ {
+ score -= 10;
+ decreased = TRUE;
+ }
+ break;
+ case MOVE_MAT_BLOCK:
+ if (!gDisableStructs[battlerAtk].isFirstTurn)
+ {
+ score -= 10;
+ decreased = TRUE;
+ }
+ break;
+ } // move check
+
+ if (decreased)
+ break;
+ if (IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]))
+ {
+ score -= 10;
+ break;
+ }
+
+ if (move != MOVE_QUICK_GUARD
+ && move != MOVE_WIDE_GUARD
+ && move != MOVE_CRAFTY_SHIELD) //These moves have infinite usage
+ {
+ if (GetBattlerSecondaryDamage(battlerAtk) >= gBattleMons[battlerAtk].hp
+ && AI_DATA->abilities[battlerDef] != ABILITY_MOXIE
+ && AI_DATA->abilities[battlerDef] != ABILITY_BEAST_BOOST)
+ {
+ score -= 10; //Don't protect if you're going to faint after protecting
+ }
+ else if (gDisableStructs[battlerAtk].protectUses == 1 && Random() % 100 < 50)
+ {
+ if (!isDoubleBattle)
+ score -= 6;
+ else
+ score -= 10; //Don't try double protecting in doubles
+ }
+ else if (gDisableStructs[battlerAtk].protectUses >= 2)
+ {
+ score -= 10;
+ }
+ }
+
+ /*if (AI_THINKING_STRUCT->aiFlags == AI_SCRIPT_CHECK_BAD_MOVE //Only basic AI
+ && IS_DOUBLE_BATTLE) //Make the regular AI know how to use Protect minimally in Doubles
+ {
+ u8 shouldProtect = ShouldProtect(battlerAtk, battlerDef, move);
+ if (shouldProtect == USE_PROTECT || shouldProtect == PROTECT_FROM_FOES)
+ IncreaseFoeProtectionViability(&viability, 0xFF, battlerAtk, battlerDef);
+ else if (shouldProtect == PROTECT_FROM_ALLIES)
+ IncreaseAllyProtectionViability(&viability, 0xFF);
+ }*/
+ }
+ break;
+ case EFFECT_MIRACLE_EYE:
+ if (gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED)
+ score -= 10;
+
+ if (gBattleMons[battlerDef].statStages[STAT_EVASION] <= 4
+ || !(IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK))
+ || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 9;
+ break;
+ case EFFECT_BURN_UP:
+ if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_FIRE))
+ score -= 10;
+ break;
+ case EFFECT_DEFOG:
+ if (gSideStatuses[GetBattlerSide(battlerDef)]
+ & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST)
+ || gSideTimers[GetBattlerSide(battlerDef)].auroraVeilTimer != 0
+ || gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY)
+ {
+ if (PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ {
+ score -= 10; //Only need one hazards removal
+ break;
+ }
+ }
+
+ if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_HAZARDS_ANY)
+ {
+ score -= 10; //Don't blow away opposing hazards
+ break;
+ }
+
+ if (isDoubleBattle)
+ {
+ if (IsHazardMoveEffect(gBattleMoves[AI_DATA->partnerMove].effect) // partner is going to set up hazards
+ && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerAtk, AI_DATA->partnerMove) == AI_IS_FASTER) // partner is going to set up before the potential Defog
+ {
+ score -= 10;
+ break; // Don't use Defog if partner is going to set up hazards
+ }
+ }
+
+ // evasion check
+ if (gBattleMons[battlerDef].statStages[STAT_EVASION] == MIN_STAT_STAGE
+ || ((AI_DATA->abilities[battlerDef] == ABILITY_CONTRARY) && !IsTargetingPartner(battlerAtk, battlerDef))) // don't want to raise target stats unless its your partner
+ score -= 10;
+ break;
+
+ case EFFECT_PSYCH_UP: // haze stats check
+ {
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerAtk].statStages[i] > DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerAtk)].statStages[i] > DEFAULT_STAT_STAGE)
+ score -= 10; // Don't want to reset our boosted stats
+ }
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerDef].statStages[i] < DEFAULT_STAT_STAGE || gBattleMons[BATTLE_PARTNER(battlerDef)].statStages[i] < DEFAULT_STAT_STAGE)
+ score -= 10; //Don't want to copy enemy lowered stats
+ }
+ }
+ break;
+ case EFFECT_SPECTRAL_THIEF:
+ break;
+ case EFFECT_SOLAR_BEAM:
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB
+ || (AI_WeatherHasEffect() && gBattleWeather & B_WEATHER_SUN && AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA))
+ break;
+ if (CanTargetFaintAi(battlerDef, battlerAtk)) //Attacker can be knocked out
+ score -= 4;
+ break;
+ case EFFECT_SEMI_INVULNERABLE:
+ if (predictedMove != MOVE_NONE
+ && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
+ && gBattleMoves[predictedMove].effect == EFFECT_SEMI_INVULNERABLE)
+ score -= 10; // Don't Fly/dig/etc if opponent is going to fly/dig/etc after you
+
+ if (BattlerWillFaintFromWeather(battlerAtk, AI_DATA->abilities[battlerAtk])
+ && (move == MOVE_FLY || move == MOVE_BOUNCE))
+ score -= 10; // Attacker will faint while in the air
+ break;
+ case EFFECT_HEALING_WISH: //healing wish, lunar dance
+ if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ else if (IsPartyFullyHealedExceptBattler(battlerAtk))
+ score -= 10;
+ break;
+ case EFFECT_FINAL_GAMBIT:
+ if (CountUsablePartyMons(battlerAtk) == 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_NATURE_POWER:
+ return AI_CheckBadMove(battlerAtk, battlerDef, GetNaturePowerMove(), score);
+ case EFFECT_TAUNT:
+ if (gDisableStructs[battlerDef].tauntTimer > 0
+ || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score--;
+ break;
+ case EFFECT_BESTOW:
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_NONE
+ || !CanBattlerGetOrLoseItem(battlerAtk, gBattleMons[battlerAtk].item)) // AI knows its own item
+ score -= 10;
+ break;
+ case EFFECT_ROLE_PLAY:
+ if (AI_DATA->abilities[battlerAtk] == AI_DATA->abilities[battlerDef]
+ || AI_DATA->abilities[battlerDef] == ABILITY_NONE
+ || IsRolePlayBannedAbilityAtk(AI_DATA->abilities[battlerAtk])
+ || IsRolePlayBannedAbility(AI_DATA->abilities[battlerDef]))
+ score -= 10;
+ else if (IsAbilityOfRating(AI_DATA->abilities[battlerAtk], 5))
+ score -= 4;
+ break;
+ case EFFECT_WISH:
+ if (gWishFutureKnock.wishCounter[battlerAtk] != 0)
+ score -= 10;
+ break;
+ case EFFECT_ASSIST:
+ if (CountUsablePartyMons(battlerAtk) == 0)
+ score -= 10; // no teammates to assist from
+ break;
+ case EFFECT_MAGIC_COAT:
+ if (!TestMoveFlagsInMoveset(battlerDef, FLAG_MAGIC_COAT_AFFECTED))
+ score -= 10;
+ break;
+ case EFFECT_BELCH:
+ if (ItemId_GetPocket(GetUsedHeldItem(battlerAtk)) != POCKET_BERRIES)
+ score -= 10; // attacker has not consumed a berry
+ break;
+ case EFFECT_YAWN:
+ if (gStatuses3[battlerDef] & STATUS3_YAWN)
+ score -= 10;
+ else if (!AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_SKILL_SWAP:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_NONE || AI_DATA->abilities[battlerDef] == ABILITY_NONE
+ || IsSkillSwapBannedAbility(AI_DATA->abilities[battlerAtk]) || IsSkillSwapBannedAbility(AI_DATA->abilities[battlerDef]))
+ score -= 10;
+ break;
+ case EFFECT_WORRY_SEED:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_INSOMNIA
+ || IsWorrySeedBannedAbility(AI_DATA->abilities[battlerDef]))
+ score -= 10;
+ break;
+ case EFFECT_GASTRO_ACID:
+ if (gStatuses3[battlerDef] & STATUS3_GASTRO_ACID
+ || IsGastroAcidBannedAbility(AI_DATA->abilities[battlerDef]))
+ score -= 10;
+ break;
+ case EFFECT_ENTRAINMENT:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_NONE
+ || IsEntrainmentBannedAbilityAttacker(AI_DATA->abilities[battlerAtk])
+ || IsEntrainmentTargetOrSimpleBeamBannedAbility(AI_DATA->abilities[battlerDef]))
+ score -= 10;
+ break;
+ case EFFECT_CORE_ENFORCER:
+ break;
+ case EFFECT_SIMPLE_BEAM:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_SIMPLE
+ || IsEntrainmentTargetOrSimpleBeamBannedAbility(AI_DATA->abilities[battlerDef]))
+ score -= 10;
+ break;
+ case EFFECT_SNATCH:
+ if (!TestMoveFlagsInMoveset(battlerDef, FLAG_SNATCH_AFFECTED)
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_POWER_TRICK:
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ score -= 10;
+ else if (gBattleMons[battlerAtk].defense >= gBattleMons[battlerAtk].attack && !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score -= 10;
+ break;
+ case EFFECT_POWER_SWAP: // Don't use if attacker's stat stages are higher than opponents
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ score -= 10;
+ else if (gBattleMons[battlerAtk].statStages[STAT_ATK] >= gBattleMons[battlerDef].statStages[STAT_ATK]
+ && gBattleMons[battlerAtk].statStages[STAT_SPATK] >= gBattleMons[battlerDef].statStages[STAT_SPATK])
+ score -= 10;
+ break;
+ case EFFECT_GUARD_SWAP: // Don't use if attacker's stat stages are higher than opponents
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ score -= 10;
+ else if (gBattleMons[battlerAtk].statStages[STAT_DEF] >= gBattleMons[battlerDef].statStages[STAT_DEF]
+ && gBattleMons[battlerAtk].statStages[STAT_SPDEF] >= gBattleMons[battlerDef].statStages[STAT_SPDEF])
+ score -= 10;
+ break;
+ case EFFECT_SPEED_SWAP:
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ {
+ score -= 10;
+ }
+ else
+ {
+ if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && (gBattleMons[battlerAtk].speed <= gBattleMons[battlerDef].speed))
+ score -= 10;
+ else if (gBattleMons[battlerAtk].speed >= gBattleMons[battlerDef].speed)
+ score -= 10;
+ }
+ break;
+ case EFFECT_HEART_SWAP:
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ {
+ score -= 10;
+ }
+ else
+ {
+ u32 atkPositiveStages = CountPositiveStatStages(battlerAtk);
+ u32 atkNegativeStages = CountNegativeStatStages(battlerAtk);
+ u32 defPositiveStages = CountPositiveStatStages(battlerDef);
+ u32 defNegativeStages = CountNegativeStatStages(battlerDef);
+
+ if (atkPositiveStages >= defPositiveStages && atkNegativeStages <= defNegativeStages)
+ score -= 10;
+ break;
+ }
+ break;
+ case EFFECT_POWER_SPLIT:
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ {
+ score -= 10;
+ }
+ else
+ {
+ u8 atkAttack = gBattleMons[battlerAtk].attack;
+ u8 defAttack = gBattleMons[battlerDef].attack;
+ u8 atkSpAttack = gBattleMons[battlerAtk].spAttack;
+ u8 defSpAttack = gBattleMons[battlerDef].spAttack;
+
+ if (atkAttack + atkSpAttack >= defAttack + defSpAttack) // Combined attacker stats are > than combined target stats
+ score -= 10;
+ break;
+ }
+ break;
+ case EFFECT_GUARD_SPLIT:
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ {
+ score -= 10;
+ }
+ else
+ {
+ u8 atkDefense = gBattleMons[battlerAtk].defense;
+ u8 defDefense = gBattleMons[battlerDef].defense;
+ u8 atkSpDefense = gBattleMons[battlerAtk].spDefense;
+ u8 defSpDefense = gBattleMons[battlerDef].spDefense;
+
+ if (atkDefense + atkSpDefense >= defDefense + defSpDefense) //Combined attacker stats are > than combined target stats
+ score -= 10;
+ break;
+ }
+ break;
+ case EFFECT_ME_FIRST:
+ if (predictedMove != MOVE_NONE)
+ {
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)
+ score -= 10; // Target is predicted to go first, Me First will fail
+ else
+ return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score);
+ }
+ else
+ {
+ score -= 10; //Target is predicted to switch most likely
+ }
+ break;
+ case EFFECT_NATURAL_GIFT:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_KLUTZ
+ || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM
+ || GetPocketByItemId(gBattleMons[battlerAtk].item) != POCKET_BERRIES)
+ score -= 10;
+ break;
+ case EFFECT_GRASSY_TERRAIN:
+ if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) || gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
+ score -= 10;
+ break;
+ case EFFECT_ELECTRIC_TERRAIN:
+ if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) || gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
+ score -= 10;
+ break;
+ case EFFECT_PSYCHIC_TERRAIN:
+ if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) || gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
+ score -= 10;
+ break;
+ case EFFECT_MISTY_TERRAIN:
+ if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) || gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
+ score -= 10;
+ break;
+ case EFFECT_PLEDGE:
+ if (isDoubleBattle && gBattleMons[BATTLE_PARTNER(battlerAtk)].hp > 0)
+ {
+ if (AI_DATA->partnerMove != MOVE_NONE
+ && gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_PLEDGE
+ && move != AI_DATA->partnerMove) // Different pledge moves
+ {
+ if (gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & (STATUS1_SLEEP | STATUS1_FREEZE))
+ // && gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 != 1) // Will wake up this turn - how would AI know
+ score -= 10; // Don't use combo move if your partner will cause failure
+ }
+ }
+ break;
+ case EFFECT_TRICK_ROOM:
+ if (PartnerMoveIs(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove, MOVE_TRICK_ROOM))
+ {
+ score -= 10;
+ }
+ else if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM) // Trick Room Up
+ {
+ if (GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) // Attacker side slower than target side
+ score -= 10; // Keep the Trick Room up
+ }
+ else
+ {
+ if (GetBattlerSideSpeedAverage(battlerAtk) >= GetBattlerSideSpeedAverage(battlerDef)) // Attacker side faster than target side
+ score -= 10; // Keep the Trick Room down
+ }
+ break;
+ case EFFECT_MAGIC_ROOM:
+ if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_WONDER_ROOM:
+ if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_GRAVITY:
+ if ((gFieldStatuses & STATUS_FIELD_GRAVITY
+ && !IS_BATTLER_OF_TYPE(battlerAtk, TYPE_FLYING)
+ && AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_AIR_BALLOON) // Should revert Gravity in this case
+ || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_ION_DELUGE:
+ if (gFieldStatuses & STATUS_FIELD_ION_DELUGE
+ || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_FLING:
+ if (!CanFling(battlerAtk))
+ {
+ score -= 10;
+ }
+ else
+ {
+ /* TODO Fling
+ u8 effect = gFlingTable[gBattleMons[battlerAtk].item].effect;
+ switch (effect)
+ {
+ case MOVE_EFFECT_BURN:
+ if (!AI_CanBurn(battlerAtk, battlerDef, BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case MOVE_EFFECT_PARALYSIS:
+ if (!AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case MOVE_EFFECT_POISON:
+ if (!AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case MOVE_EFFECT_TOXIC:
+ if (!AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case MOVE_EFFECT_FREEZE:
+ if (!CanBeFrozen(battlerDef, TRUE)
+ || MoveBlockedBySubstitute(move, battlerAtk, battlerDef))
+ score -= 10;
+ break;
+ }*/
+ }
+ break;
+ case EFFECT_EMBARGO:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_KLUTZ
+ || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM
+ || gDisableStructs[battlerDef].embargoTimer != 0
+ || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_POWDER:
+ if (!HasMoveWithType(battlerDef, TYPE_FIRE)
+ || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_TELEKINESIS:
+ if (gStatuses3[battlerDef] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN)
+ || gFieldStatuses & STATUS_FIELD_GRAVITY
+ || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_IRON_BALL
+ || IsTelekinesisBannedSpecies(gBattleMons[battlerDef].species)
+ || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_THROAT_CHOP:
+ break;
+ case EFFECT_HEAL_BLOCK:
+ if (gDisableStructs[battlerDef].healBlockTimer != 0
+ || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_SOAK:
+ if (PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)
+ || (gBattleMons[battlerDef].type1 == TYPE_WATER
+ && gBattleMons[battlerDef].type2 == TYPE_WATER
+ && gBattleMons[battlerDef].type3 == TYPE_MYSTERY))
+ score -= 10; // target is already water-only
+ break;
+ case EFFECT_THIRD_TYPE:
+ switch (move)
+ {
+ case MOVE_TRICK_OR_TREAT:
+ if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case MOVE_FORESTS_CURSE:
+ if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ }
+ break;
+ case EFFECT_HIT_ENEMY_HEAL_ALLY: // pollen puff
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ {
+ if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK)
+ return 0;
+ if (AtMaxHp(battlerDef))
+ score -= 10;
+ else if (gBattleMons[battlerDef].hp > gBattleMons[battlerDef].maxHP / 2)
+ score -= 5;
+ break;
+ }
+ // fallthrough
+ case EFFECT_HEAL_PULSE: // and floral healing
+ if (!IsTargetingPartner(battlerAtk, battlerDef)) // Don't heal enemies
+ {
+ score -= 10;
+ }
+ else
+ {
+ if (AtMaxHp(battlerDef))
+ score -= 10;
+ else if (gBattleMons[battlerDef].hp > gBattleMons[battlerDef].maxHP / 2)
+ score -= 5;
+ }
+ break;
+ case EFFECT_ELECTRIFY:
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER
+ //|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type
+ || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_TOPSY_TURVY:
+ if (!IsTargetingPartner(battlerAtk, battlerDef))
+ {
+ u8 targetPositiveStages = CountPositiveStatStages(battlerDef);
+ u8 targetNegativeStages = CountNegativeStatStages(battlerDef);
+
+ if (targetPositiveStages == 0 //No good stat changes to make bad
+ || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+
+ else if (targetNegativeStages < targetPositiveStages)
+ score -= 5; //More stages would be made positive than negative
+ }
+ break;
+ case EFFECT_FAIRY_LOCK:
+ if ((gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_DO_NOTHING:
+ score -= 10;
+ break;
+ case EFFECT_INSTRUCT:
+ {
+ u16 instructedMove;
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)
+ instructedMove = predictedMove;
+ else
+ instructedMove = gLastMoves[battlerDef];
+
+ if (instructedMove == MOVE_NONE
+ || IsInstructBannedMove(instructedMove)
+ || MoveRequiresRecharging(instructedMove)
+ || MoveCallsOtherMove(instructedMove)
+ || IsZMove(instructedMove)
+ || (gLockedMoves[battlerDef] != 0 && gLockedMoves[battlerDef] != 0xFFFF)
+ || gBattleMons[battlerDef].status2 & STATUS2_MULTIPLETURNS
+ || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ {
+ score -= 10;
+ }
+ else if (isDoubleBattle)
+ {
+ if (!IsTargetingPartner(battlerAtk, battlerDef))
+ score -= 10;
+ }
+ else
+ {
+ if (AI_GetBattlerMoveTargetType(battlerDef, instructedMove) & (MOVE_TARGET_SELECTED
+ | MOVE_TARGET_DEPENDS
+ | MOVE_TARGET_RANDOM
+ | MOVE_TARGET_BOTH
+ | MOVE_TARGET_FOES_AND_ALLY
+ | MOVE_TARGET_OPPONENTS_FIELD)
+ && instructedMove != MOVE_MIND_BLOWN && instructedMove != MOVE_STEEL_BEAM)
+ score -= 10; //Don't force the enemy to attack you again unless it can kill itself with Mind Blown
+ else if (instructedMove != MOVE_MIND_BLOWN)
+ score -= 5; //Do something better
+ }
+ }
+ break;
+ case EFFECT_QUASH:
+ if (!isDoubleBattle
+ || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
+ || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_AFTER_YOU:
+ if (!IsTargetingPartner(battlerAtk, battlerDef)
+ || !isDoubleBattle
+ || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
+ || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_SUCKER_PUNCH:
+ if (predictedMove != MOVE_NONE)
+ {
+ if (IS_MOVE_STATUS(predictedMove) || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent going first
+ score -= 10;
+ }
+ break;
+ case EFFECT_TAILWIND:
+ if (gSideTimers[GetBattlerSide(battlerAtk)].tailwindTimer != 0
+ || PartnerMoveIs(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove, MOVE_TAILWIND)
+ || (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer > 1)) // Trick Room active and not ending this turn
+ score -= 10;
+ break;
+ case EFFECT_LUCKY_CHANT:
+ if (gSideTimers[GET_BATTLER_SIDE(battlerAtk)].luckyChantTimer != 0
+ || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 10;
+ break;
+ case EFFECT_MAGNET_RISE:
+ if (gFieldStatuses & STATUS_FIELD_GRAVITY
+ || gDisableStructs[battlerAtk].magnetRiseTimer != 0
+ || AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_IRON_BALL
+ || gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_MAGNET_RISE | STATUS3_SMACKED_DOWN)
+ || !IsBattlerGrounded(battlerAtk))
+ score -= 10;
+ break;
+ case EFFECT_CAMOUFLAGE:
+ if (!CanCamouflage(battlerAtk))
+ score -= 10;
+ break;
+ case EFFECT_LAST_RESORT:
+ if (!CanUseLastResort(battlerAtk))
+ score -= 10;
+ break;
+ case EFFECT_SYNCHRONOISE:
+ //Check holding ring target or is of same type
+ if (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_RING_TARGET
+ || IS_BATTLER_OF_TYPE(battlerDef, gBattleMons[battlerAtk].type1)
+ || IS_BATTLER_OF_TYPE(battlerDef, gBattleMons[battlerAtk].type2)
+ || IS_BATTLER_OF_TYPE(battlerDef, gBattleMons[battlerAtk].type3))
+ break;
+ else
+ score -= 10;
+ break;
+ case EFFECT_ERUPTION:
+ if (effectiveness <= AI_EFFECTIVENESS_x0_5)
+ score--;
+ if (AI_DATA->hpPercents[battlerDef] < 50)
+ score--;
+ break;
+ case EFFECT_VITAL_THROW:
+ if (WillAIStrikeFirst() && AI_DATA->hpPercents[battlerAtk] < 40)
+ score--; // don't want to move last
+ break;
+ case EFFECT_FLAIL:
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER // Opponent should go first
+ || AI_DATA->hpPercents[battlerAtk] > 50)
+ score -= 4;
+ break;
+ //TODO
+ //case EFFECT_PLASMA_FISTS:
+ //break;
+ //case EFFECT_SHELL_TRAP:
+ //break;
+ //case EFFECT_BEAK_BLAST:
+ //break;
+ case EFFECT_SKY_DROP:
+ if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_FLYING))
+ score -= 10;
+ if (BattlerWillFaintFromWeather(battlerAtk, AI_DATA->abilities[battlerAtk])
+ || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
+ || GetBattlerWeight(battlerDef) >= 2000) //200.0 kg
+ score -= 10;
+ break;
+ /*case EFFECT_NO_RETREAT:
+ if (TrappedByNoRetreat(battlerAtk))
+ score -= 10;
+ break;
+ case EFFECT_EXTREME_EVOBOOST:
+ if (MainStatsMaxed(battlerAtk))
+ score -= 10;
+ break;
+ case EFFECT_CLANGOROUS_SOUL:
+ if (gBattleMons[battlerAtk].hp <= gBattleMons[battlerAtk].maxHP / 3)
+ score -= 10;
+ break;*/
+ } // move effect checks
+
+ if (score < 0)
+ score = 0;
+
+ return score;
+}
+
+static s16 AI_TryToFaint(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ return score;
+
+ if (gBattleMoves[move].power == 0)
+ return score; // can't make anything faint with no power
+
+ if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0) && gBattleMoves[move].effect != EFFECT_EXPLOSION)
+ {
+ // this move can faint the target
+ if (!WillAIStrikeFirst() || GetMovePriority(battlerAtk, move) > 0)
+ score += 4; // we go first or we're using priority move
+ else
+ score += 2;
+ }
+ else
+ {
+ // this move isn't expected to faint the target
+ if (TestMoveFlags(move, FLAG_HIGH_CRIT))
+ score += 2; // crit makes it more likely to make them faint
+
+ if (GetMoveDamageResult(move) == MOVE_POWER_OTHER)
+ score--;
+
+ switch (AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex])
+ {
+ case AI_EFFECTIVENESS_x8:
+ score += 8;
+ break;
+ case AI_EFFECTIVENESS_x4:
+ score += 4;
+ break;
+ case AI_EFFECTIVENESS_x2:
+ if (AI_RandLessThan(176))
+ score += 2;
+ else
+ score++;
+ break;
+ }
+ }
+
+ //AI_TryToFaint_CheckIfDanger
+ if (!WillAIStrikeFirst() && CanTargetFaintAi(battlerDef, battlerAtk))
+ { // AI_TryToFaint_Danger
+ if (GetMoveDamageResult(move) != MOVE_POWER_BEST)
+ score--;
+ else
+ score++;
+ }
+
+ return score;
+}
+
+// double battle logic
+static s16 AI_DoubleBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ // move data
+ u8 moveType = gBattleMoves[move].type;
+ u16 effect = gBattleMoves[move].effect;
+ u16 moveTarget = AI_GetBattlerMoveTargetType(battlerAtk, move);
+ // ally data
+ u8 battlerAtkPartner = BATTLE_PARTNER(battlerAtk);
+ u16 atkPartnerAbility = AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)];
+ u16 atkPartnerHoldEffect = AI_DATA->holdEffects[BATTLE_PARTNER(battlerAtk)];
+ bool32 partnerProtecting = (gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_PROTECT);
+ bool32 attackerHasBadAbility = (GetAbilityRating(AI_DATA->abilities[battlerAtk]) < 0);
+ bool32 partnerHasBadAbility = (GetAbilityRating(atkPartnerAbility) < 0);
+ u16 predictedMove = AI_DATA->predictedMoves[battlerDef];
+
+ SetTypeBeforeUsingMove(move, battlerAtk);
+ GET_MOVE_TYPE(move, moveType);
+
+ // check what effect partner is using
+ if (AI_DATA->partnerMove != 0)
+ {
+ switch (gBattleMoves[AI_DATA->partnerMove].effect)
+ {
+ case EFFECT_HELPING_HAND:
+ if (IS_MOVE_STATUS(move))
+ score += 5;
+ break;
+ case EFFECT_PERISH_SONG:
+ if (!(gBattleMons[battlerDef].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)))
+ {
+ if (IsTrappingMoveEffect(effect) || predictedMove == MOVE_INGRAIN)
+ score++;
+ }
+ break;
+ case EFFECT_ALWAYS_CRIT:
+ // Ally decided to use Frost Breath on us. we must have Anger Point as our ability
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_ANGER_POINT)
+ {
+ if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER) // Partner moving first
+ {
+ // discourage raising our attack since it's about to be maxed out
+ if (IsAttackBoostMoveEffect(effect))
+ score -= 3;
+ // encourage moves hitting multiple opponents
+ if (!IS_MOVE_STATUS(move) && (moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)))
+ score += 3;
+ }
+ }
+ break;
+ }
+ } // check partner move effect
+
+
+ // consider our move effect relative to partner state
+ switch (effect)
+ {
+ case EFFECT_HELPING_HAND:
+ if (AI_DATA->partnerMove != 0 && !HasDamagingMove(battlerAtkPartner))
+ score -= 5;
+ break;
+ case EFFECT_PERISH_SONG:
+ if (AI_DATA->partnerMove != 0 && HasTrappingMoveEffect(battlerAtkPartner))
+ score++;
+ break;
+ case EFFECT_MAGNET_RISE:
+ if (IsBattlerGrounded(battlerAtk)
+ && (HasMove(battlerAtkPartner, MOVE_EARTHQUAKE) || HasMove(battlerAtkPartner, MOVE_MAGNITUDE))
+ && (AI_GetMoveEffectiveness(MOVE_EARTHQUAKE, battlerAtk, battlerAtkPartner) != AI_EFFECTIVENESS_x0)) // Doesn't resist ground move
+ {
+ RETURN_SCORE_PLUS(2); // partner has earthquake or magnitude -> good idea to use magnet rise
+ }
+ break;
+ } // our effect relative to partner
+
+
+ // consider global move effects
+ switch (effect)
+ {
+ case EFFECT_SANDSTORM:
+ if (ShouldSetSandstorm(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect))
+ {
+ RETURN_SCORE_PLUS(1); // our partner benefits from sandstorm
+ }
+ break;
+ case EFFECT_RAIN_DANCE:
+ if (ShouldSetRain(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect))
+ {
+ RETURN_SCORE_PLUS(1); // our partner benefits from rain
+ }
+ break;
+ case EFFECT_SUNNY_DAY:
+ if (ShouldSetSun(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect))
+ {
+ RETURN_SCORE_PLUS(1); // our partner benefits from sun
+ }
+ break;
+ case EFFECT_HAIL:
+ if (IsBattlerAlive(battlerAtkPartner)
+ && ShouldSetHail(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect))
+ {
+ RETURN_SCORE_PLUS(2); // our partner benefits from hail
+ }
+ break;
+ } // global move effect check
+
+
+ // check specific target
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ {
+ if (GetMoveDamageResult(move) == MOVE_POWER_OTHER)
+ {
+ // partner ability checks
+ if (!partnerProtecting && moveTarget != MOVE_TARGET_BOTH && !DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battlerAtk], move))
+ {
+ switch (atkPartnerAbility)
+ {
+ case ABILITY_VOLT_ABSORB:
+ if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_HP_AWARE))
+ {
+ RETURN_SCORE_MINUS(10);
+ }
+ break; // handled in AI_HPAware
+ case ABILITY_MOTOR_DRIVE:
+ if (moveType == TYPE_ELECTRIC && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case ABILITY_LIGHTNING_ROD:
+ if (moveType == TYPE_ELECTRIC
+ && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL)
+ && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case ABILITY_WATER_ABSORB:
+ case ABILITY_DRY_SKIN:
+ if (!(AI_THINKING_STRUCT->aiFlags & AI_FLAG_HP_AWARE))
+ {
+ RETURN_SCORE_MINUS(10);
+ }
+ break; // handled in AI_HPAware
+ case ABILITY_STORM_DRAIN:
+ if (moveType == TYPE_WATER
+ && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL)
+ && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case ABILITY_WATER_COMPACTION:
+ if (moveType == TYPE_WATER && GetMoveDamageResult(move) == MOVE_POWER_WEAK)
+ {
+ RETURN_SCORE_PLUS(1); // only mon with this ability is weak to water so only make it okay if we do very little damage
+ }
+ RETURN_SCORE_MINUS(10);
+ break;
+ case ABILITY_FLASH_FIRE:
+ if (moveType == TYPE_FIRE
+ && HasMoveWithType(battlerAtkPartner, TYPE_FIRE)
+ && !(gBattleResources->flags->flags[battlerAtkPartner] & RESOURCE_FLAG_FLASH_FIRE))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case ABILITY_SAP_SIPPER:
+ if (moveType == TYPE_GRASS
+ && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL)
+ && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case ABILITY_JUSTIFIED:
+ if (moveType == TYPE_DARK
+ && !IS_MOVE_STATUS(move)
+ && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL)
+ && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)
+ && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case ABILITY_RATTLED:
+ if (!IS_MOVE_STATUS(move)
+ && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG)
+ && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED)
+ && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case ABILITY_CONTRARY:
+ if (IsStatLoweringEffect(effect))
+ {
+ RETURN_SCORE_PLUS(2);
+ }
+ break;
+ case ABILITY_DEFIANT:
+ if (IsStatLoweringEffect(effect)
+ && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case ABILITY_COMPETITIVE:
+ if (IsStatLoweringEffect(effect)
+ && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPATK))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ }
+ } // ability checks
+ } // move power check
+
+ // attacker move effects specifically targeting partner
+ if (!partnerProtecting)
+ {
+ switch (effect)
+ {
+ case EFFECT_PURIFY:
+ if (gBattleMons[battlerAtkPartner].status1 & STATUS1_ANY)
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case EFFECT_SWAGGER:
+ if (gBattleMons[battlerAtkPartner].statStages[STAT_ATK] < MAX_STAT_STAGE
+ && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL)
+ && (!AI_CanBeConfused(battlerAtkPartner, TRUE)
+ || atkPartnerHoldEffect == HOLD_EFFECT_CURE_CONFUSION
+ || atkPartnerHoldEffect == HOLD_EFFECT_CURE_STATUS))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case EFFECT_FLATTER:
+ if (gBattleMons[battlerAtkPartner].statStages[STAT_SPATK] < MAX_STAT_STAGE
+ && HasMoveWithSplit(battlerAtkPartner, SPLIT_SPECIAL)
+ && (!AI_CanBeConfused(battlerAtkPartner, TRUE)
+ || atkPartnerHoldEffect == HOLD_EFFECT_CURE_CONFUSION
+ || atkPartnerHoldEffect == HOLD_EFFECT_CURE_STATUS))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case EFFECT_BEAT_UP:
+ if (atkPartnerAbility == ABILITY_JUSTIFIED
+ && moveType == TYPE_DARK
+ && !IS_MOVE_STATUS(move)
+ && HasMoveWithSplit(battlerAtkPartner, SPLIT_PHYSICAL)
+ && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK)
+ && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 0))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case EFFECT_SKILL_SWAP:
+ if (AI_DATA->abilities[battlerAtk] != AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] && !attackerHasBadAbility)
+ {
+ if (AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_TRUANT)
+ {
+ RETURN_SCORE_PLUS(10);
+ }
+ else if (AI_DATA->abilities[battlerAtk] == ABILITY_COMPOUND_EYES
+ && HasMoveWithLowAccuracy(battlerAtkPartner, FOE(battlerAtkPartner), 90, TRUE, atkPartnerAbility, AI_DATA->abilities[FOE(battlerAtkPartner)], atkPartnerHoldEffect, AI_DATA->holdEffects[FOE(battlerAtkPartner)]))
+ {
+ RETURN_SCORE_PLUS(3);
+ }
+ }
+ break;
+ case EFFECT_ROLE_PLAY:
+ if (attackerHasBadAbility && !partnerHasBadAbility)
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case EFFECT_WORRY_SEED:
+ case EFFECT_GASTRO_ACID:
+ case EFFECT_SIMPLE_BEAM:
+ if (partnerHasBadAbility)
+ {
+ RETURN_SCORE_PLUS(2);
+ }
+ break;
+ case EFFECT_ENTRAINMENT:
+ if (partnerHasBadAbility && IsAbilityOfRating(AI_DATA->abilities[battlerAtk], 0))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case EFFECT_SOAK:
+ if (atkPartnerAbility == ABILITY_WONDER_GUARD
+ && (gBattleMons[battlerAtkPartner].type1 != TYPE_WATER
+ || gBattleMons[battlerAtkPartner].type2 != TYPE_WATER
+ || gBattleMons[battlerAtkPartner].type3 != TYPE_WATER))
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ case EFFECT_INSTRUCT:
+ {
+ u16 instructedMove;
+ if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_FASTER)
+ instructedMove = AI_DATA->partnerMove;
+ else
+ instructedMove = gLastMoves[battlerAtkPartner];
+
+ if (instructedMove != MOVE_NONE
+ && !IS_MOVE_STATUS(instructedMove)
+ && (AI_GetBattlerMoveTargetType(battlerAtkPartner, instructedMove) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) // Use instruct on multi-target moves
+ {
+ RETURN_SCORE_PLUS(1);
+ }
+ }
+ break;
+ case EFFECT_AFTER_YOU:
+ if (AI_WhoStrikesFirst(battlerAtkPartner, FOE(battlerAtkPartner), AI_DATA->partnerMove) == AI_IS_SLOWER // Opponent mon 1 goes before partner
+ || AI_WhoStrikesFirst(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), AI_DATA->partnerMove) == AI_IS_SLOWER) // Opponent mon 2 goes before partner
+ {
+ if (gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_COUNTER || gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_MIRROR_COAT)
+ break; // These moves need to go last
+ RETURN_SCORE_PLUS(1);
+ }
+ break;
+ } // attacker move effects
+ } // check partner protecting
+
+ score -= 30; // otherwise, don't target partner
+ }
+ else // checking opponent
+ {
+ // these checks mostly handled in AI_CheckBadMove and AI_CheckViability
+ switch (effect)
+ {
+ case EFFECT_SKILL_SWAP:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_TRUANT)
+ score += 5;
+ else if (IsAbilityOfRating(AI_DATA->abilities[battlerAtk], 0) || IsAbilityOfRating(AI_DATA->abilities[battlerDef], 10))
+ score += 2; // we want to transfer our bad ability or take their awesome ability
+ break;
+ case EFFECT_EARTHQUAKE:
+ case EFFECT_MAGNITUDE:
+ if (!IsBattlerGrounded(battlerAtkPartner)
+ || (IsBattlerGrounded(battlerAtkPartner)
+ && AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER
+ && IsUngroundingEffect(gBattleMoves[AI_DATA->partnerMove].effect)))
+ score += 2;
+ else if (IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_FIRE)
+ || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_ELECTRIC)
+ || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_POISON)
+ || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_ROCK))
+ score -= 10; // partner will be hit by earthquake and is weak to it
+ else
+ score -= 3;
+ break;
+ }
+
+ // lightning rod, flash fire against enemy handled in AI_CheckBadMove
+ }
+
+ return score;
+}
+
+static bool32 IsPinchBerryItemEffect(u16 holdEffect)
+{
+ switch (holdEffect)
+ {
+ case HOLD_EFFECT_ATTACK_UP:
+ case HOLD_EFFECT_DEFENSE_UP:
+ case HOLD_EFFECT_SPEED_UP:
+ case HOLD_EFFECT_SP_ATTACK_UP:
+ case HOLD_EFFECT_SP_DEFENSE_UP:
+ case HOLD_EFFECT_CRITICAL_UP:
+ case HOLD_EFFECT_RANDOM_STAT_UP:
+ #ifdef HOLD_EFFECT_CUSTAP_BERRY
+ case HOLD_EFFECT_CUSTAP_BERRY:
+ #endif
+ #ifdef HOLD_EFFECT_MICLE_BERRY
+ case HOLD_EFFECT_MICLE_BERRY:
+ #endif
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+// AI_FLAG_CHECK_VIABILITY - a weird mix of increasing and decreasing scores
+static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ // move data
+ u16 moveEffect = gBattleMoves[move].effect;
+ u32 effectiveness = AI_DATA->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex];
+ u8 atkPriority = GetMovePriority(battlerAtk, move);
+ u16 predictedMove = AI_DATA->predictedMoves[battlerDef];
+ bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk);
+ u32 i;
+
+ // Targeting partner, check benefits of doing that instead
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ return score;
+
+ // check always hits
+ if (!IS_MOVE_STATUS(move) && gBattleMoves[move].accuracy == 0)
+ {
+ if (gBattleMons[battlerDef].statStages[STAT_EVASION] >= 10 || gBattleMons[battlerAtk].statStages[STAT_ACC] <= 2)
+ score++;
+ if (AI_RandLessThan(100) && (gBattleMons[battlerDef].statStages[STAT_EVASION] >= 8 || gBattleMons[battlerAtk].statStages[STAT_ACC] <= 4))
+ score++;
+ }
+
+ // check high crit
+ if (TestMoveFlags(move, FLAG_HIGH_CRIT) && effectiveness >= AI_EFFECTIVENESS_x2 && AI_RandLessThan(128))
+ score++;
+
+ // check already dead
+ if (!IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef])
+ && CanTargetFaintAi(battlerAtk, battlerDef)
+ && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent should go first
+ {
+ if (atkPriority > 0)
+ score++;
+ else
+ score--;
+ }
+
+ // check damage
+ if (gBattleMoves[move].power != 0 && GetMoveDamageResult(move) == MOVE_POWER_WEAK)
+ score--;
+
+ // check status move preference
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_PREFER_STATUS_MOVES && IS_MOVE_STATUS(move) && effectiveness != AI_EFFECTIVENESS_x0)
+ score++;
+
+ // check thawing moves
+ if ((gBattleMons[battlerAtk].status1 & STATUS1_FREEZE) && TestMoveFlags(move, FLAG_THAW_USER))
+ score += (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? 20 : 10;
+
+ // check burn
+ if (gBattleMons[battlerAtk].status1 & STATUS1_BURN)
+ {
+ switch (AI_DATA->abilities[battlerAtk])
+ {
+ case ABILITY_GUTS:
+ break;
+ case ABILITY_NATURAL_CURE:
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING
+ && HasOnlyMovesWithSplit(battlerAtk, SPLIT_PHYSICAL, TRUE))
+ score = 90; // Force switch if all your attacking moves are physical and you have Natural Cure.
+ break;
+ default:
+ if (IS_MOVE_PHYSICAL(move) && gBattleMoves[move].effect != EFFECT_FACADE)
+ score -= 2;
+ break;
+ }
+ }
+
+ // attacker ability checks
+ switch (AI_DATA->abilities[battlerAtk])
+ {
+ case ABILITY_MOXIE:
+ case ABILITY_BEAST_BOOST:
+ case ABILITY_CHILLING_NEIGH:
+ case ABILITY_GRIM_NEIGH:
+ case ABILITY_AS_ONE_ICE_RIDER:
+ case ABILITY_AS_ONE_SHADOW_RIDER:
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first
+ {
+ if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0))
+ score += 8; // prioritize killing target for stat boost
+ }
+ break;
+ } // ability checks
+
+ // move effect checks
+ switch (moveEffect)
+ {
+ case EFFECT_HIT:
+ break;
+ case EFFECT_SLEEP:
+ case EFFECT_YAWN:
+ if (AI_RandLessThan(128))
+ IncreaseSleepScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case EFFECT_ABSORB:
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT)
+ score++;
+ if (effectiveness <= AI_EFFECTIVENESS_x0_5 && AI_RandLessThan(50))
+ score -= 3;
+ break;
+ case EFFECT_EXPLOSION:
+ case EFFECT_MEMENTO:
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_WILL_SUICIDE && gBattleMons[battlerDef].statStages[STAT_EVASION] < 7)
+ {
+ if (AI_DATA->hpPercents[battlerAtk] < 50 && AI_RandLessThan(128))
+ score++;
+ }
+ break;
+ case EFFECT_MIRROR_MOVE:
+ if (predictedMove != MOVE_NONE)
+ return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score);
+ break;
+// stat raising effects
+ case EFFECT_ATTACK_UP:
+ case EFFECT_ATTACK_UP_2:
+ if (MovesWithSplitUnusable(battlerAtk, battlerDef, SPLIT_PHYSICAL))
+ {
+ score -= 8;
+ break;
+ }
+ else if (gBattleMons[battlerAtk].statStages[STAT_ATK] < 9)
+ {
+ if (AI_DATA->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128))
+ {
+ score += 2;
+ break;
+ }
+ }
+
+ if (!AI_RandLessThan(100))
+ {
+ score--;
+ }
+ break;
+ case EFFECT_DEFENSE_UP:
+ case EFFECT_DEFENSE_UP_2:
+ case EFFECT_DEFENSE_UP_3:
+ if (!HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL))
+ score -= 2;
+ if (AI_DATA->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128))
+ score += 2;
+ else if (AI_DATA->hpPercents[battlerAtk] > 70 && AI_RandLessThan(200))
+ break;
+ else if (AI_DATA->hpPercents[battlerAtk] < 40)
+ score -= 2;
+ break;
+ case EFFECT_SPEED_UP:
+ case EFFECT_SPEED_UP_2:
+ if (!WillAIStrikeFirst())
+ {
+ if (!AI_RandLessThan(70))
+ score += 3;
+ }
+ else
+ {
+ score -= 3;
+ }
+ break;
+ case EFFECT_SPECIAL_ATTACK_UP:
+ case EFFECT_SPECIAL_ATTACK_UP_2:
+ case EFFECT_SPECIAL_ATTACK_UP_3:
+ if (MovesWithSplitUnusable(battlerAtk, battlerDef, SPLIT_SPECIAL))
+ {
+ score -= 8;
+ break;
+ }
+ else if (gBattleMons[battlerAtk].statStages[STAT_SPATK] < 9)
+ {
+ if (AI_DATA->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128))
+ {
+ score += 2;
+ break;
+ }
+ }
+
+ if (!AI_RandLessThan(100))
+ {
+ score--;
+ }
+ break;
+ case EFFECT_SPECIAL_DEFENSE_UP:
+ case EFFECT_SPECIAL_DEFENSE_UP_2:
+ if (!HasMoveWithSplit(battlerDef, SPLIT_SPECIAL))
+ score -= 2;
+ if (AI_DATA->hpPercents[battlerAtk] > 90 && AI_RandLessThan(128))
+ score += 2;
+ else if (AI_DATA->hpPercents[battlerAtk] > 70 && AI_RandLessThan(200))
+ break;
+ else if (AI_DATA->hpPercents[battlerAtk] < 40)
+ score -= 2;
+ break;
+ case EFFECT_ACCURACY_UP:
+ case EFFECT_ACCURACY_UP_2:
+ if (gBattleMons[battlerAtk].statStages[STAT_ACC] >= 9 && !AI_RandLessThan(50))
+ score -= 2;
+ else if (AI_DATA->hpPercents[battlerAtk] <= 70)
+ score -= 2;
+ else
+ score++;
+ break;
+ case EFFECT_EVASION_UP:
+ case EFFECT_EVASION_UP_2:
+ if (AI_DATA->hpPercents[battlerAtk] > 90 && !AI_RandLessThan(100))
+ score += 3;
+ if (gBattleMons[battlerAtk].statStages[STAT_EVASION] > 9 && AI_RandLessThan(128))
+ score--;
+ if ((gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) && AI_DATA->hpPercents[battlerAtk] >= 50 && !AI_RandLessThan(80))
+ score += 3;
+ if (gStatuses3[battlerDef] & STATUS3_LEECHSEED && !AI_RandLessThan(70))
+ score += 3;
+ if (gStatuses3[battlerAtk] & STATUS3_ROOTED && AI_RandLessThan(128))
+ score += 2;
+ if (gBattleMons[battlerDef].status2 & STATUS2_CURSED && !AI_RandLessThan(70))
+ score += 3;
+ if (AI_DATA->hpPercents[battlerAtk] < 70 || gBattleMons[battlerAtk].statStages[STAT_EVASION] == DEFAULT_STAT_STAGE)
+ break;
+ else if (AI_DATA->hpPercents[battlerAtk] < 40 || AI_DATA->hpPercents[battlerDef] < 40)
+ score -= 2;
+ else if (!AI_RandLessThan(70))
+ score -= 2;
+ break;
+// stat lowering effects
+ case EFFECT_ATTACK_DOWN:
+ case EFFECT_ATTACK_DOWN_2:
+ if (!ShouldLowerAttack(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ score -= 2;
+ if (gBattleMons[battlerDef].statStages[STAT_ATK] < DEFAULT_STAT_STAGE)
+ score--;
+ else if (AI_DATA->hpPercents[battlerAtk] <= 90)
+ score--;
+ if (gBattleMons[battlerDef].statStages[STAT_ATK] > 3 && !AI_RandLessThan(50))
+ score -= 2;
+ else if (AI_DATA->hpPercents[battlerDef] < 70)
+ score -= 2;
+ break;
+ case EFFECT_DEFENSE_DOWN:
+ case EFFECT_DEFENSE_DOWN_2:
+ if (!ShouldLowerDefense(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ score -= 2;
+ if ((AI_DATA->hpPercents[battlerAtk] < 70 && !AI_RandLessThan(50)) || (gBattleMons[battlerDef].statStages[STAT_DEF] <= 3 && !AI_RandLessThan(50)))
+ score -= 2;
+ if (AI_DATA->hpPercents[battlerDef] <= 70)
+ score -= 2;
+ break;
+ case EFFECT_SPEED_DOWN:
+ case EFFECT_SPEED_DOWN_2:
+ if (WillAIStrikeFirst())
+ score -= 3;
+ else if (!AI_RandLessThan(70))
+ score += 2;
+ break;
+ case EFFECT_SPECIAL_ATTACK_DOWN:
+ case EFFECT_SPECIAL_ATTACK_DOWN_2:
+ if (!ShouldLowerSpAtk(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ score -= 2;
+ if (gBattleMons[battlerDef].statStages[STAT_SPATK] < DEFAULT_STAT_STAGE)
+ score--;
+ else if (AI_DATA->hpPercents[battlerAtk] <= 90)
+ score--;
+ if (gBattleMons[battlerDef].statStages[STAT_SPATK] > 3 && !AI_RandLessThan(50))
+ score -= 2;
+ else if (AI_DATA->hpPercents[battlerDef] < 70)
+ score -= 2;
+ break;
+ case EFFECT_SPECIAL_DEFENSE_DOWN:
+ case EFFECT_SPECIAL_DEFENSE_DOWN_2:
+ if (!ShouldLowerSpDef(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ score -= 2;
+ if ((AI_DATA->hpPercents[battlerAtk] < 70 && !AI_RandLessThan(50))
+ || (gBattleMons[battlerDef].statStages[STAT_SPDEF] <= 3 && !AI_RandLessThan(50)))
+ score -= 2;
+ if (AI_DATA->hpPercents[battlerDef] <= 70)
+ score -= 2;
+ break;
+ case EFFECT_ACCURACY_DOWN:
+ case EFFECT_ACCURACY_DOWN_2:
+ if (ShouldLowerAccuracy(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ score -= 2;
+ if ((AI_DATA->hpPercents[battlerAtk] < 70 || AI_DATA->hpPercents[battlerDef] < 70) && AI_RandLessThan(100))
+ score--;
+ if (gBattleMons[battlerDef].statStages[STAT_ACC] <= 4 && !AI_RandLessThan(80))
+ score -= 2;
+ if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY && !AI_RandLessThan(70))
+ score += 2;
+ if (gStatuses3[battlerDef] & STATUS3_LEECHSEED && !AI_RandLessThan(70))
+ score += 2;
+ if (gStatuses3[battlerDef] & STATUS3_ROOTED && AI_RandLessThan(128))
+ score++;
+ if (gBattleMons[battlerDef].status2 & STATUS2_CURSED && !AI_RandLessThan(70))
+ score += 2;
+ if (AI_DATA->hpPercents[battlerAtk] > 70 || gBattleMons[battlerDef].statStages[STAT_ACC] < DEFAULT_STAT_STAGE)
+ break;
+ else if (AI_DATA->hpPercents[battlerAtk] < 40 || AI_DATA->hpPercents[battlerDef] < 40 || !AI_RandLessThan(70))
+ score -= 2;
+ break;
+ case EFFECT_EVASION_DOWN:
+ case EFFECT_EVASION_DOWN_2:
+ if (!ShouldLowerEvasion(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ score -= 2;
+ if ((AI_DATA->hpPercents[battlerAtk] < 70 || gBattleMons[battlerDef].statStages[STAT_EVASION] <= 3) && !AI_RandLessThan(50))
+ score -= 2;
+ if (AI_DATA->hpPercents[battlerDef] <= 70)
+ score -= 2;
+ if (gBattleMons[battlerAtk].statStages[STAT_ACC] < DEFAULT_STAT_STAGE)
+ score++;
+ if (gBattleMons[battlerDef].statStages[STAT_EVASION] < 7 || AI_DATA->abilities[battlerAtk] == ABILITY_NO_GUARD)
+ score -= 2;
+ break;
+ case EFFECT_BIDE:
+ if (AI_DATA->hpPercents[battlerAtk] < 90)
+ score -= 2;
+ break;
+ case EFFECT_DREAM_EATER:
+ if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP))
+ break;
+ score++; // if target is asleep, dream eater is a pretty good move even without draining
+ // fallthrough
+ case EFFECT_ACUPRESSURE:
+ break;
+ case EFFECT_ATTACK_ACCURACY_UP: // hone claws
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ACC, &score);
+ break;
+ case EFFECT_GROWTH:
+ case EFFECT_ATTACK_SPATK_UP: // work up
+ if (AI_DATA->hpPercents[battlerAtk] <= 40 || AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY)
+ break;
+
+ if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score);
+ else if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score);
+ break;
+ case EFFECT_HAZE:
+ if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk))
+ || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ score -= 3;
+ break;
+ // fallthrough
+ case EFFECT_ROAR:
+ case EFFECT_CLEAR_SMOG:
+ if (isDoubleBattle)
+ score += min(CountPositiveStatStages(battlerDef) + CountPositiveStatStages(BATTLE_PARTNER(battlerDef)), 7);
+ else
+ score += min(CountPositiveStatStages(battlerDef), 4);
+ break;
+ case EFFECT_MULTI_HIT:
+ case EFFECT_DOUBLE_HIT:
+ case EFFECT_TRIPLE_KICK:
+ if (AI_MoveMakesContact(AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk], move)
+ && AI_DATA->abilities[battlerAtk] != ABILITY_MAGIC_GUARD
+ && AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_ROCKY_HELMET)
+ score -= 2;
+ break;
+ case EFFECT_CONVERSION:
+ if (!IS_BATTLER_OF_TYPE(battlerAtk, gBattleMoves[gBattleMons[battlerAtk].moves[0]].type))
+ score++;
+ break;
+ case EFFECT_FLINCH_HIT:
+ score += ShouldTryToFlinch(battlerAtk, battlerDef, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], move);
+ break;
+ case EFFECT_SWALLOW:
+ if (gDisableStructs[battlerAtk].stockpileCounter == 0)
+ {
+ break;
+ }
+ else
+ {
+ u32 healPercent = 0;
+ switch (gDisableStructs[battlerAtk].stockpileCounter)
+ {
+ case 1:
+ healPercent = 25;
+ break;
+ case 2:
+ healPercent = 50;
+ break;
+ case 3:
+ healPercent = 100;
+ break;
+ default:
+ break;
+ }
+
+ if (ShouldRecover(battlerAtk, battlerDef, move, healPercent))
+ score += 2;
+ }
+ break;
+ case EFFECT_RESTORE_HP:
+ case EFFECT_SOFTBOILED:
+ case EFFECT_ROOST:
+ case EFFECT_MORNING_SUN:
+ case EFFECT_SYNTHESIS:
+ case EFFECT_MOONLIGHT:
+ if (ShouldRecover(battlerAtk, battlerDef, move, 50))
+ score += 3;
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT)
+ score++;
+ break;
+ case EFFECT_TOXIC:
+ case EFFECT_POISON:
+ IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case EFFECT_LIGHT_SCREEN:
+ case EFFECT_REFLECT:
+ case EFFECT_AURORA_VEIL:
+ if (ShouldSetScreen(battlerAtk, battlerDef, moveEffect))
+ {
+ score += 5;
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_LIGHT_CLAY)
+ score += 2;
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SCREENER)
+ score += 2;
+ }
+ break;
+ case EFFECT_REST:
+ if (!(AI_CanSleep(battlerAtk, AI_DATA->abilities[battlerAtk])))
+ {
+ break;
+ }
+ else if (ShouldRecover(battlerAtk, battlerDef, move, 100))
+ {
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_SLP
+ || AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_STATUS
+ || HasMoveEffect(EFFECT_SLEEP_TALK, battlerAtk)
+ || HasMoveEffect(EFFECT_SNORE, battlerAtk)
+ || AI_DATA->abilities[battlerAtk] == ABILITY_SHED_SKIN
+ || AI_DATA->abilities[battlerAtk] == ABILITY_EARLY_BIRD
+ || (gBattleWeather & B_WEATHER_RAIN && gWishFutureKnock.weatherDuration != 1 && AI_DATA->abilities[battlerAtk] == ABILITY_HYDRATION && AI_DATA->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA))
+ {
+ score += 2;
+ }
+ else
+ {
+ score++;
+ }
+ }
+ break;
+ case EFFECT_OHKO:
+ if (gStatuses3[battlerAtk] & STATUS3_ALWAYS_HITS)
+ score += 5;
+ break;
+ case EFFECT_TRAP:
+ if (HasMoveEffect(battlerDef, EFFECT_RAPID_SPIN))
+ break;
+ //fallthrough
+ case EFFECT_MEAN_LOOK:
+ if (IsBattlerTrapped(battlerDef, TRUE))
+ break; // in this case its a bad attacking move
+ else if (ShouldTrap(battlerAtk, battlerDef, move))
+ score += 5;
+ break;
+ case EFFECT_MIST:
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SCREENER)
+ score += 2;
+ break;
+ case EFFECT_FOCUS_ENERGY:
+ case EFFECT_LASER_FOCUS:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_SUPER_LUCK
+ || AI_DATA->abilities[battlerAtk] == ABILITY_SNIPER
+ || AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_SCOPE_LENS
+ || TestMoveFlagsInMoveset(battlerAtk, FLAG_HIGH_CRIT))
+ score += 2;
+ break;
+ case EFFECT_CONFUSE_HIT:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE)
+ score++;
+ //fallthrough
+ case EFFECT_CONFUSE:
+ IncreaseConfusionScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case EFFECT_PARALYZE:
+ IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case EFFECT_GRAV_APPLE:
+ if (gFieldStatuses & STATUS_FIELD_GRAVITY)
+ score += 2;
+ // fall through
+ case EFFECT_ATTACK_DOWN_HIT:
+ case EFFECT_DEFENSE_DOWN_HIT:
+ case EFFECT_SPECIAL_ATTACK_DOWN_HIT:
+ case EFFECT_SPECIAL_DEFENSE_DOWN_HIT:
+ case EFFECT_ACCURACY_DOWN_HIT:
+ case EFFECT_EVASION_DOWN_HIT:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY)
+ score += 2;
+ break;
+ case EFFECT_SPEED_DOWN_HIT:
+ if (WillAIStrikeFirst())
+ score -= 2;
+ else if (!AI_RandLessThan(70))
+ score++;
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY)
+ score++;
+ if (ShouldLowerSpeed(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ {
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY)
+ score += 4;
+ else
+ score += 2;
+ }
+ break;
+ case EFFECT_SUBSTITUTE:
+ if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG)
+ score += 3;
+ if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY))
+ score++;
+ if (HasMoveEffect(battlerDef, EFFECT_SLEEP)
+ || HasMoveEffect(battlerDef, EFFECT_TOXIC)
+ || HasMoveEffect(battlerDef, EFFECT_POISON)
+ || HasMoveEffect(battlerDef, EFFECT_PARALYZE)
+ || HasMoveEffect(battlerDef, EFFECT_WILL_O_WISP)
+ || HasMoveEffect(battlerDef, EFFECT_CONFUSE)
+ || HasMoveEffect(battlerDef, EFFECT_LEECH_SEED))
+ score += 2;
+ if (!gBattleMons[battlerDef].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION && AI_DATA->hpPercents[battlerAtk] > 70))
+ score++;
+ break;
+ case EFFECT_MIMIC:
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ {
+ if (gLastMoves[battlerDef] != MOVE_NONE && gLastMoves[battlerDef] != 0xFFFF)
+ return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score);
+ }
+ break;
+ case EFFECT_LEECH_SEED:
+ if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)
+ || gStatuses3[battlerDef] & STATUS3_LEECHSEED
+ || HasMoveEffect(battlerDef, EFFECT_RAPID_SPIN)
+ || AI_DATA->abilities[battlerDef] == ABILITY_LIQUID_OOZE
+ || AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_GUARD)
+ break;
+ score += 3;
+ if (!HasDamagingMove(battlerDef) || IsBattlerTrapped(battlerDef, FALSE))
+ score += 2;
+ break;
+ case EFFECT_DO_NOTHING:
+ //todo - check z splash, z celebrate, z happy hour (lol)
+ break;
+ case EFFECT_TELEPORT:
+ if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) || GetBattlerSide(battlerAtk) != B_SIDE_PLAYER)
+ break;
+ //fallthrough
+ case EFFECT_HIT_ESCAPE:
+ case EFFECT_PARTING_SHOT:
+ if (!IsDoubleBattle())
+ {
+ switch (ShouldPivot(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_THINKING_STRUCT->movesetIndex))
+ {
+ case 0: // no
+ score -= 10; // technically should go in CheckBadMove, but this is easier/less computationally demanding
+ break;
+ case 1: // maybe
+ break;
+ case 2: // yes
+ score += 7;
+ break;
+ }
+ }
+ else //Double Battle
+ {
+ if (CountUsablePartyMons(battlerAtk) == 0)
+ break; // Can't switch
+
+ //if (switchAbility == ABILITY_INTIMIDATE && PartyHasMoveSplit(battlerDef, SPLIT_PHYSICAL))
+ //score += 7;
+ }
+ break;
+ case EFFECT_BATON_PASS:
+ if (ShouldSwitch() && (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE
+ || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK))
+ || AnyStatIsRaised(battlerAtk)))
+ score += 5;
+ break;
+ case EFFECT_DISABLE:
+ if (gDisableStructs[battlerDef].disableTimer == 0
+ && (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)) // mental herb
+ {
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // AI goes first
+ {
+ if (gLastMoves[battlerDef] != MOVE_NONE
+ && gLastMoves[battlerDef] != 0xFFFF)
+ {
+ /* TODO predicted moves
+ if (gLastMoves[battlerDef] == predictedMove)
+ score += 3;
+ else */if (CanMoveFaintBattler(gLastMoves[battlerDef], battlerDef, battlerAtk, 1))
+ score += 2; //Disable move that can kill attacker
+ }
+ }
+ else if (predictedMove != MOVE_NONE && IS_MOVE_STATUS(predictedMove))
+ {
+ score++; // Disable annoying status moves
+ }
+ }
+ break;
+ case EFFECT_ENCORE:
+ if (gDisableStructs[battlerDef].encoreTimer == 0
+ && (B_MENTAL_HERB >= GEN_5 && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)) // mental herb
+ {
+ if (IsEncoreEncouragedEffect(gBattleMoves[gLastMoves[battlerDef]].effect))
+ score += 3;
+ }
+ break;
+ case EFFECT_PAIN_SPLIT:
+ {
+ u16 newHp = (gBattleMons[battlerAtk].hp + gBattleMons[battlerDef].hp) / 2;
+ u16 healthBenchmark = (gBattleMons[battlerAtk].hp * 12) / 10;
+ if (newHp > healthBenchmark && ShouldAbsorb(battlerAtk, battlerDef, move, AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]))
+ score += 2;
+ }
+ break;
+ case EFFECT_SLEEP_TALK:
+ case EFFECT_SNORE:
+ if (!IsWakeupTurn(battlerAtk) && gBattleMons[battlerAtk].status1 & STATUS1_SLEEP)
+ score += 10;
+ break;
+ case EFFECT_LOCK_ON:
+ if (HasMoveEffect(battlerAtk, EFFECT_OHKO))
+ score += 3;
+ else if (AI_DATA->abilities[battlerAtk] == ABILITY_COMPOUND_EYES && HasMoveWithLowAccuracy(battlerAtk, battlerDef, 80, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]))
+ score += 3;
+ else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 85, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]))
+ score += 3;
+ else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]))
+ score++;
+ break;
+ case EFFECT_SPEED_UP_HIT:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY && !WillAIStrikeFirst())
+ score += 3;
+ break;
+ case EFFECT_DESTINY_BOND:
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && CanTargetFaintAi(battlerDef, battlerAtk))
+ score += 3;
+ break;
+ case EFFECT_SPITE:
+ //TODO - predicted move
+ break;
+ case EFFECT_WISH:
+ case EFFECT_HEAL_BELL:
+ if (ShouldUseWishAromatherapy(battlerAtk, battlerDef, move))
+ score += 7;
+ break;
+ case EFFECT_THIEF:
+ {
+ bool32 canSteal = FALSE;
+
+ #if defined B_TRAINERS_KNOCK_OFF_ITEMS && B_TRAINERS_KNOCK_OFF_ITEMS == TRUE
+ canSteal = TRUE;
+ #endif
+ if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER || GetBattlerSide(battlerAtk) == B_SIDE_PLAYER)
+ canSteal = TRUE;
+
+ if (canSteal && AI_DATA->items[battlerAtk] == ITEM_NONE
+ && AI_DATA->items[battlerDef] != ITEM_NONE
+ && CanBattlerGetOrLoseItem(battlerDef, AI_DATA->items[battlerDef])
+ && CanBattlerGetOrLoseItem(battlerAtk, AI_DATA->items[battlerDef])
+ && !HasMoveEffect(battlerAtk, EFFECT_ACROBATICS)
+ && AI_DATA->abilities[battlerDef] != ABILITY_STICKY_HOLD)
+ {
+ switch (AI_DATA->holdEffects[battlerDef])
+ {
+ case HOLD_EFFECT_NONE:
+ break;
+ case HOLD_EFFECT_CHOICE_BAND:
+ case HOLD_EFFECT_CHOICE_SCARF:
+ case HOLD_EFFECT_CHOICE_SPECS:
+ score += 2;
+ break;
+ case HOLD_EFFECT_TOXIC_ORB:
+ if (ShouldPoisonSelf(battlerAtk, AI_DATA->abilities[battlerAtk]))
+ score += 2;
+ break;
+ case HOLD_EFFECT_FLAME_ORB:
+ if (ShouldBurnSelf(battlerAtk, AI_DATA->abilities[battlerAtk]))
+ score += 2;
+ break;
+ case HOLD_EFFECT_BLACK_SLUDGE:
+ if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON))
+ score += 2;
+ break;
+ case HOLD_EFFECT_IRON_BALL:
+ if (HasMoveEffect(battlerAtk, EFFECT_FLING))
+ score += 2;
+ break;
+ case HOLD_EFFECT_LAGGING_TAIL:
+ case HOLD_EFFECT_STICKY_BARB:
+ break;
+ default:
+ score++;
+ break;
+ }
+ }
+ break;
+ }
+ break;
+ case EFFECT_NIGHTMARE:
+ if (AI_DATA->abilities[battlerDef] != ABILITY_MAGIC_GUARD
+ && !(gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE)
+ && (AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE || gBattleMons[battlerDef].status1 & STATUS1_SLEEP))
+ {
+ score += 5;
+ if (IsBattlerTrapped(battlerDef, TRUE))
+ score += 3;
+ }
+ break;
+ case EFFECT_CURSE:
+ if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST))
+ {
+ if (IsBattlerTrapped(battlerDef, TRUE))
+ score += 3;
+ else
+ score++;
+ break;
+ }
+ else
+ {
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY || AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_GUARD)
+ break;
+ else if (gBattleMons[battlerAtk].statStages[STAT_ATK] < 8)
+ score += (8 - gBattleMons[battlerAtk].statStages[STAT_ATK]);
+ else if (gBattleMons[battlerAtk].statStages[STAT_SPEED] < 3)
+ break;
+ else if (gBattleMons[battlerAtk].statStages[STAT_DEF] < 8)
+ score += (8 - gBattleMons[battlerAtk].statStages[STAT_DEF]);
+ }
+ break;
+ case EFFECT_PROTECT:
+ if (predictedMove == 0xFFFF)
+ predictedMove = MOVE_NONE;
+ switch (move)
+ {
+ case MOVE_QUICK_GUARD:
+ if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].priority > 0)
+ ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score);
+ break;
+ case MOVE_WIDE_GUARD:
+ if (predictedMove != MOVE_NONE && AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_BOTH))
+ {
+ ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score);
+ }
+ else if (isDoubleBattle && AI_GetBattlerMoveTargetType(BATTLE_PARTNER(battlerAtk), AI_DATA->partnerMove) & MOVE_TARGET_FOES_AND_ALLY)
+ {
+ if (AI_DATA->abilities[battlerAtk] != ABILITY_TELEPATHY)
+ ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score);
+ }
+ break;
+ case MOVE_CRAFTY_SHIELD:
+ if (predictedMove != MOVE_NONE && IS_MOVE_STATUS(predictedMove) && !(AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER))
+ ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score);
+ break;
+
+ case MOVE_MAT_BLOCK:
+ if (gDisableStructs[battlerAtk].isFirstTurn && predictedMove != MOVE_NONE
+ && !IS_MOVE_STATUS(predictedMove) && !(AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER))
+ ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score);
+ break;
+ case MOVE_KINGS_SHIELD:
+ #if (defined SPECIES_AEGISLASH && defined SPECIES_AEGISLASH_BLADE)
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_STANCE_CHANGE //Special logic for Aegislash
+ && gBattleMons[battlerAtk].species == SPECIES_AEGISLASH_BLADE
+ && !IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]))
+ {
+ score += 3;
+ break;
+ }
+ #endif
+ //fallthrough
+ default: // protect
+ ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score);
+ break;
+ }
+ break;
+ case EFFECT_ENDURE:
+ if (CanTargetFaintAi(battlerDef, battlerAtk))
+ {
+ if (gBattleMons[battlerAtk].hp > gBattleMons[battlerAtk].maxHP / 4 // Pinch berry couldn't have activated yet
+ && IsPinchBerryItemEffect(AI_DATA->holdEffects[battlerAtk]))
+ {
+ score += 3;
+ }
+ else if (gBattleMons[battlerAtk].hp > 1) // Only spam endure for Flail/Reversal if you're not at Min Health
+ {
+ if (HasMoveEffect(battlerAtk, EFFECT_FLAIL) || HasMoveEffect(battlerAtk, EFFECT_ENDEAVOR))
+ score += 3;
+ }
+ }
+ break;
+
+ case EFFECT_SPIKES:
+ case EFFECT_STEALTH_ROCK:
+ case EFFECT_STICKY_WEB:
+ case EFFECT_TOXIC_SPIKES:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0)
+ break;
+ if (gDisableStructs[battlerAtk].isFirstTurn)
+ score += 2;
+ //TODO - track entire opponent party data to determine hazard effectiveness
+ break;
+ case EFFECT_FORESIGHT:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_SCRAPPY)
+ break;
+ else if (gBattleMons[battlerDef].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE
+ || (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)
+ && (HasMoveWithType(battlerAtk, TYPE_NORMAL)
+ || HasMoveWithType(battlerAtk, TYPE_FIGHTING))))
+ score += 2;
+ break;
+ case EFFECT_MIRACLE_EYE:
+ if (gBattleMons[battlerDef].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE
+ || (IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) && (HasMoveWithType(battlerAtk, TYPE_PSYCHIC))))
+ score += 2;
+ break;
+ case EFFECT_PERISH_SONG:
+ if (IsBattlerTrapped(battlerDef, TRUE))
+ score += 3;
+ break;
+ case EFFECT_SANDSTORM:
+ if (ShouldSetSandstorm(battlerAtk, AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerAtk]))
+ {
+ score++;
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_SMOOTH_ROCK)
+ score++;
+ if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN)
+ || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS)
+ || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT))
+ score += 2;
+ }
+ break;
+ case EFFECT_HAIL:
+ if (ShouldSetHail(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk]))
+ {
+ if ((HasMoveEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL))
+ && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL))
+ score += 3;
+
+ score++;
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_ICY_ROCK)
+ score++;
+ if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN)
+ || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS)
+ || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT))
+ score += 2;
+ }
+ break;
+ case EFFECT_RAIN_DANCE:
+ if (ShouldSetRain(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk]))
+ {
+ score++;
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_DAMP_ROCK)
+ score++;
+ if (HasMoveEffect(battlerDef, EFFECT_MORNING_SUN)
+ || HasMoveEffect(battlerDef, EFFECT_SYNTHESIS)
+ || HasMoveEffect(battlerDef, EFFECT_MOONLIGHT))
+ score += 2;
+ if (HasMoveWithType(battlerDef, TYPE_FIRE) || HasMoveWithType(BATTLE_PARTNER(battlerDef), TYPE_FIRE))
+ score++;
+ }
+ break;
+ case EFFECT_SUNNY_DAY:
+ if (ShouldSetSun(battlerAtk, AI_DATA->abilities[battlerAtk], AI_DATA->holdEffects[battlerAtk]))
+ {
+ score++;
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_HEAT_ROCK)
+ score++;
+ if (HasMoveWithType(battlerDef, TYPE_WATER) || HasMoveWithType(BATTLE_PARTNER(battlerDef), TYPE_WATER))
+ score++;
+ if (HasMoveEffect(battlerDef, EFFECT_THUNDER) || HasMoveEffect(BATTLE_PARTNER(battlerDef), EFFECT_THUNDER))
+ score++;
+ }
+ break;
+ case EFFECT_ATTACK_UP_HIT:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE)
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score);
+ break;
+ case EFFECT_FELL_STINGER:
+ if (gBattleMons[battlerAtk].statStages[STAT_ATK] < MAX_STAT_STAGE
+ && AI_DATA->abilities[battlerAtk] != ABILITY_CONTRARY
+ && CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0))
+ {
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first
+ score += 9;
+ else
+ score += 3;
+ }
+ break;
+ case EFFECT_BELLY_DRUM:
+ if (!CanTargetFaintAi(battlerDef, battlerAtk) && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && AI_DATA->abilities[battlerAtk] != ABILITY_CONTRARY)
+ score += (MAX_STAT_STAGE - gBattleMons[battlerAtk].statStages[STAT_ATK]);
+ break;
+ case EFFECT_PSYCH_UP:
+ case EFFECT_SPECTRAL_THIEF:
+ // Want to copy positive stat changes
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerDef].statStages[i] > gBattleMons[battlerAtk].statStages[i])
+ {
+ switch (i)
+ {
+ case STAT_ATK:
+ if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score++;
+ break;
+ case STAT_SPATK:
+ if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))
+ score++;
+ break;
+ case STAT_ACC:
+ case STAT_EVASION:
+ case STAT_SPEED:
+ score++;
+ break;
+ case STAT_DEF:
+ case STAT_SPDEF:
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL)
+ score++;
+ break;
+ }
+ }
+ }
+ break;
+ case EFFECT_SEMI_INVULNERABLE:
+ score++;
+ if (predictedMove != MOVE_NONE && !isDoubleBattle)
+ {
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first
+ {
+ if (gBattleMoves[predictedMove].effect == EFFECT_EXPLOSION
+ || gBattleMoves[predictedMove].effect == EFFECT_PROTECT)
+ score += 3;
+ }
+ else if (gBattleMoves[predictedMove].effect == EFFECT_SEMI_INVULNERABLE && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE))
+ {
+ score += 3;
+ }
+ }
+ break;
+ case EFFECT_DEFENSE_CURL:
+ if (HasMoveEffect(battlerAtk, EFFECT_ROLLOUT) && !(gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL))
+ score++;
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score);
+ break;
+ case EFFECT_FAKE_OUT:
+ if (move == MOVE_FAKE_OUT // filter out first impression
+ && ShouldFakeOut(battlerAtk, battlerDef, move))
+ score += 8;
+ break;
+ case EFFECT_STOCKPILE:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY)
+ break;
+ if (HasMoveEffect(battlerAtk, EFFECT_SWALLOW)
+ || HasMoveEffect(battlerAtk, EFFECT_SPIT_UP))
+ score += 2;
+
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score);
+ break;
+ case EFFECT_SPIT_UP:
+ if (gDisableStructs[battlerAtk].stockpileCounter >= 2)
+ score++;
+ break;
+ case EFFECT_ROLLOUT:
+ if (gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL)
+ score += 8;
+ break;
+ case EFFECT_SWAGGER:
+ if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY)
+ || HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP)
+ || HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF))
+ score++;
+
+ if (AI_DATA->abilities[battlerDef] == ABILITY_CONTRARY)
+ score += 2;
+
+ IncreaseConfusionScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case EFFECT_FLATTER:
+ if (HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP)
+ || HasMoveEffect(battlerAtk, EFFECT_SPECTRAL_THIEF))
+ score += 2;
+
+ if (AI_DATA->abilities[battlerDef] == ABILITY_CONTRARY)
+ score += 2;
+
+ IncreaseConfusionScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case EFFECT_FURY_CUTTER:
+ if (!isDoubleBattle && AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_METRONOME)
+ score += 3;
+ break;
+ case EFFECT_ATTRACT:
+ if (!isDoubleBattle && BattlerWillFaintFromSecondaryDamage(battlerDef, AI_DATA->abilities[battlerDef])
+ && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Target goes first
+ break; // Don't use if the attract won't have a change to activate
+
+ if (gBattleMons[battlerDef].status1 & STATUS1_ANY
+ || (gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
+ || IsBattlerTrapped(battlerDef, TRUE))
+ score += 2;
+ else
+ score++;
+ break;
+ case EFFECT_SAFEGUARD:
+ if (!AI_IsTerrainAffected(battlerAtk, STATUS_FIELD_MISTY_TERRAIN) || !IsBattlerGrounded(battlerAtk))
+ score++;
+ //if (CountUsablePartyMons(battlerDef) != 0)
+ //score += 8;
+ break;
+ case EFFECT_PURSUIT:
+ /*TODO
+ if (IsPredictedToSwitch(battlerDef, battlerAtk))
+ score += 3;
+ else if (IsPredictedToUsePursuitableMove(battlerDef, battlerAtk) && !MoveWouldHitFirst(move, battlerAtk, battlerDef)) //Pursuit against fast U-Turn
+ score += 3;*/
+ break;
+ case EFFECT_RAPID_SPIN:
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score); // Gen 8 increases speed
+ //fallthrough
+ case EFFECT_DEFOG:
+ if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0)
+ {
+ score += 3;
+ break;
+ }
+
+ switch (move)
+ {
+ case MOVE_DEFOG:
+ if (gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST))
+ {
+ score += 3;
+ }
+ else if (!(gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SPIKES)) //Don't blow away hazards if you set them up
+ {
+ if (isDoubleBattle)
+ {
+ if (IsHazardMoveEffect(gBattleMoves[AI_DATA->partnerMove].effect) // Partner is going to set up hazards
+ && AI_WhoStrikesFirst(battlerAtk, BATTLE_PARTNER(battlerAtk), move) == AI_IS_SLOWER) // Partner going first
+ break; // Don't use Defog if partner is going to set up hazards
+ }
+
+ // check defog lowering evasion
+ if (ShouldLowerEvasion(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ {
+ if (gBattleMons[battlerDef].statStages[STAT_EVASION] > 7
+ || HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]))
+ score += 2; // encourage lowering evasion if they are evasive or we have a move with low accuracy
+ else
+ score++;
+ }
+ }
+ break;
+ case MOVE_RAPID_SPIN:
+ if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED || gBattleMons[battlerAtk].status2 & STATUS2_WRAPPED)
+ score += 3;
+ break;
+ }
+ break;
+ case EFFECT_TORMENT:
+ break;
+ case EFFECT_WILL_O_WISP:
+ IncreaseBurnScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case EFFECT_FOLLOW_ME:
+ if (isDoubleBattle
+ && move != MOVE_SPOTLIGHT
+ && !IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef])
+ && (move != MOVE_RAGE_POWDER || IsAffectedByPowder(battlerDef, AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerDef])) // Rage Powder doesn't affect powder immunities
+ && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)))
+ {
+ u16 predictedMoveOnPartner = gLastMoves[BATTLE_PARTNER(battlerAtk)];
+ if (predictedMoveOnPartner != MOVE_NONE && !IS_MOVE_STATUS(predictedMoveOnPartner))
+ score += 3;
+ }
+ break;
+ case EFFECT_NATURE_POWER:
+ return AI_CheckViability(battlerAtk, battlerDef, GetNaturePowerMove(), score);
+ case EFFECT_CHARGE:
+ if (HasDamagingMoveOfType(battlerAtk, TYPE_ELECTRIC))
+ score += 2;
+ #if B_CHARGE_SPDEF_RAISE >= GEN_5
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score);
+ #endif
+ break;
+ case EFFECT_TAUNT:
+ if (IS_MOVE_STATUS(predictedMove))
+ score += 3;
+ else if (HasMoveWithSplit(battlerDef, SPLIT_STATUS))
+ score += 2;
+ break;
+ case EFFECT_TRICK:
+ case EFFECT_BESTOW:
+ switch (AI_DATA->holdEffects[battlerAtk])
+ {
+ case HOLD_EFFECT_CHOICE_SCARF:
+ score += 2; // assume its beneficial
+ break;
+ case HOLD_EFFECT_CHOICE_BAND:
+ if (!HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL))
+ score += 2;
+ break;
+ case HOLD_EFFECT_CHOICE_SPECS:
+ if (!HasMoveWithSplit(battlerDef, SPLIT_SPECIAL))
+ score += 2;
+ break;
+ case HOLD_EFFECT_TOXIC_ORB:
+ if (!ShouldPoisonSelf(battlerAtk, AI_DATA->abilities[battlerAtk]))
+ score += 2;
+ break;
+ case HOLD_EFFECT_FLAME_ORB:
+ if (!ShouldBurnSelf(battlerAtk, AI_DATA->abilities[battlerAtk]) && AI_CanBeBurned(battlerAtk, AI_DATA->abilities[battlerDef]))
+ score += 2;
+ break;
+ case HOLD_EFFECT_BLACK_SLUDGE:
+ if (!IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON) && AI_DATA->abilities[battlerDef] != ABILITY_MAGIC_GUARD)
+ score += 3;
+ break;
+ case HOLD_EFFECT_IRON_BALL:
+ if (!HasMoveEffect(battlerDef, EFFECT_FLING) || !IsBattlerGrounded(battlerDef))
+ score += 2;
+ break;
+ case HOLD_EFFECT_LAGGING_TAIL:
+ case HOLD_EFFECT_STICKY_BARB:
+ score += 3;
+ break;
+ case HOLD_EFFECT_UTILITY_UMBRELLA:
+ if (AI_DATA->abilities[battlerAtk] != ABILITY_SOLAR_POWER && AI_DATA->abilities[battlerAtk] != ABILITY_DRY_SKIN && AI_WeatherHasEffect())
+ {
+ switch (AI_DATA->abilities[battlerDef])
+ {
+ case ABILITY_SWIFT_SWIM:
+ if (gBattleWeather & B_WEATHER_RAIN)
+ score += 3; // Slow 'em down
+ break;
+ case ABILITY_CHLOROPHYLL:
+ case ABILITY_FLOWER_GIFT:
+ if (gBattleWeather & B_WEATHER_SUN)
+ score += 3; // Slow 'em down
+ break;
+ }
+ }
+ break;
+ case HOLD_EFFECT_EJECT_BUTTON:
+ //if (!IsRaidBattle() && IsDynamaxed(battlerDef) && gNewBS->dynamaxData.timer[battlerDef] > 1 &&
+ if (HasDamagingMove(battlerAtk)
+ || (isDoubleBattle && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && HasDamagingMove(BATTLE_PARTNER(battlerAtk))))
+ score += 2; // Force 'em out next turn
+ break;
+ default:
+ if (move != MOVE_BESTOW && AI_DATA->items[battlerAtk] == ITEM_NONE)
+ {
+ switch (AI_DATA->holdEffects[battlerDef])
+ {
+ case HOLD_EFFECT_CHOICE_BAND:
+ break;
+ case HOLD_EFFECT_TOXIC_ORB:
+ if (ShouldPoisonSelf(battlerAtk, AI_DATA->abilities[battlerAtk]))
+ score += 2;
+ break;
+ case HOLD_EFFECT_FLAME_ORB:
+ if (ShouldBurnSelf(battlerAtk, AI_DATA->abilities[battlerAtk]))
+ score += 2;
+ break;
+ case HOLD_EFFECT_BLACK_SLUDGE:
+ if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON) || AI_DATA->abilities[battlerAtk] == ABILITY_MAGIC_GUARD)
+ score += 3;
+ break;
+ case HOLD_EFFECT_IRON_BALL:
+ if (HasMoveEffect(battlerAtk, EFFECT_FLING))
+ score += 2;
+ break;
+ case HOLD_EFFECT_LAGGING_TAIL:
+ case HOLD_EFFECT_STICKY_BARB:
+ break;
+ default:
+ score++; //other hold effects generally universally good
+ break;
+ }
+ }
+ }
+ break;
+ case EFFECT_ROLE_PLAY:
+ if (!IsRolePlayBannedAbilityAtk(AI_DATA->abilities[battlerAtk])
+ && !IsRolePlayBannedAbility(AI_DATA->abilities[battlerDef])
+ && !IsAbilityOfRating(AI_DATA->abilities[battlerAtk], 5)
+ && IsAbilityOfRating(AI_DATA->abilities[battlerDef], 5))
+ score += 2;
+ break;
+ case EFFECT_INGRAIN:
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT)
+ score += 3;
+ else
+ score++;
+ break;
+ case EFFECT_SUPERPOWER:
+ case EFFECT_OVERHEAT:
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY)
+ score += 10;
+ break;
+ case EFFECT_MAGIC_COAT:
+ if (IS_MOVE_STATUS(predictedMove) && AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_SELECTED | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH))
+ score += 3;
+ break;
+ case EFFECT_RECYCLE:
+ if (GetUsedHeldItem(battlerAtk) != ITEM_NONE)
+ score++;
+ if (IsRecycleEncouragedItem(GetUsedHeldItem(battlerAtk)))
+ score++;
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_RIPEN)
+ {
+ u16 item = GetUsedHeldItem(battlerAtk);
+ u16 toHeal = (ItemId_GetHoldEffectParam(item) == 10) ? 10 : gBattleMons[battlerAtk].maxHP / ItemId_GetHoldEffectParam(item);
+
+ if (IsStatBoostingBerry(item) && AI_DATA->hpPercents[battlerAtk] > 60)
+ score++;
+ else if (ShouldRestoreHpBerry(battlerAtk, item) && !CanAIFaintTarget(battlerAtk, battlerDef, 0)
+ && ((GetWhoStrikesFirst(battlerAtk, battlerDef, TRUE) == 0 && CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 0))
+ || !CanTargetFaintAiWithMod(battlerDef, battlerAtk, toHeal, 0)))
+ score++; // Recycle healing berry if we can't otherwise faint the target and the target wont kill us after we activate the berry
+ }
+ break;
+ case EFFECT_BRICK_BREAK:
+ if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_REFLECT)
+ score++;
+ if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_LIGHTSCREEN)
+ score++;
+ if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_AURORA_VEIL)
+ score++;
+ break;
+ case EFFECT_KNOCK_OFF:
+ if (CanKnockOffItem(battlerDef, AI_DATA->items[battlerDef]))
+ {
+ switch (AI_DATA->holdEffects[battlerDef])
+ {
+ case HOLD_EFFECT_IRON_BALL:
+ if (HasMoveEffect(battlerDef, EFFECT_FLING))
+ score += 4;
+ break;
+ case HOLD_EFFECT_LAGGING_TAIL:
+ case HOLD_EFFECT_STICKY_BARB:
+ break;
+ default:
+ score += 3;
+ break;
+ }
+ }
+ break;
+ case EFFECT_SKILL_SWAP:
+ if (GetAbilityRating(AI_DATA->abilities[battlerDef]) > GetAbilityRating(AI_DATA->abilities[battlerAtk]))
+ score++;
+ break;
+ case EFFECT_WORRY_SEED:
+ case EFFECT_GASTRO_ACID:
+ case EFFECT_SIMPLE_BEAM:
+ if (IsAbilityOfRating(AI_DATA->abilities[battlerDef], 5))
+ score += 2;
+ break;
+ case EFFECT_ENTRAINMENT:
+ if (IsAbilityOfRating(AI_DATA->abilities[battlerDef], 5) || GetAbilityRating(AI_DATA->abilities[battlerAtk]) <= 0)
+ {
+ if (AI_DATA->abilities[battlerDef] != AI_DATA->abilities[battlerAtk] && !(gStatuses3[battlerDef] & STATUS3_GASTRO_ACID))
+ score += 2;
+ }
+ break;
+ case EFFECT_IMPRISON:
+ if (predictedMove != MOVE_NONE && HasMove(battlerAtk, predictedMove))
+ score += 3;
+ else if (gDisableStructs[battlerAtk].isFirstTurn == 0)
+ score++;
+ break;
+ case EFFECT_REFRESH:
+ if (gBattleMons[battlerAtk].status1 & STATUS1_ANY)
+ score += 2;
+ break;
+ case EFFECT_PSYCHO_SHIFT:
+ if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY)
+ IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
+ else if (gBattleMons[battlerAtk].status1 & STATUS1_BURN)
+ IncreaseBurnScore(battlerAtk, battlerDef, move, &score);
+ else if (gBattleMons[battlerAtk].status1 & STATUS1_PARALYSIS)
+ IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score);
+ else if (gBattleMons[battlerAtk].status1 & STATUS1_SLEEP)
+ IncreaseSleepScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case EFFECT_GRUDGE:
+ break;
+ case EFFECT_SNATCH:
+ if (predictedMove != MOVE_NONE && TestMoveFlags(predictedMove, FLAG_SNATCH_AFFECTED))
+ score += 3; // Steal move
+ break;
+ case EFFECT_MUD_SPORT:
+ if (!HasMoveWithType(battlerAtk, TYPE_ELECTRIC) && HasMoveWithType(battlerDef, TYPE_ELECTRIC))
+ score++;
+ break;
+ case EFFECT_WATER_SPORT:
+ if (!HasMoveWithType(battlerAtk, TYPE_FIRE) && (HasMoveWithType(battlerDef, TYPE_FIRE)))
+ score++;
+ break;
+ case EFFECT_TICKLE:
+ if (gBattleMons[battlerDef].statStages[STAT_DEF] > 4 && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)
+ && AI_DATA->abilities[battlerDef] != ABILITY_CONTRARY && ShouldLowerDefense(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ {
+ score += 2;
+ }
+ else if (ShouldLowerAttack(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef]))
+ {
+ score += 2;
+ }
+ break;
+ case EFFECT_COSMIC_POWER:
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score);
+ break;
+ case EFFECT_BULK_UP:
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score);
+ break;
+ case EFFECT_CALM_MIND:
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score);
+ break;
+ case EFFECT_GEOMANCY:
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB)
+ score += 3;
+ //fallthrough
+ case EFFECT_QUIVER_DANCE:
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score);
+ break;
+ case EFFECT_SHELL_SMASH:
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_RESTORE_STATS)
+ score += 1;
+
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPATK, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score);
+ break;
+ case EFFECT_DRAGON_DANCE:
+ case EFFECT_SHIFT_GEAR:
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_ATK, &score);
+ break;
+ case EFFECT_GUARD_SWAP:
+ if (gBattleMons[battlerDef].statStages[STAT_DEF] > gBattleMons[battlerAtk].statStages[STAT_DEF]
+ && gBattleMons[battlerDef].statStages[STAT_SPDEF] >= gBattleMons[battlerAtk].statStages[STAT_SPDEF])
+ score++;
+ else if (gBattleMons[battlerDef].statStages[STAT_SPDEF] > gBattleMons[battlerAtk].statStages[STAT_SPDEF]
+ && gBattleMons[battlerDef].statStages[STAT_DEF] >= gBattleMons[battlerAtk].statStages[STAT_DEF])
+ score++;
+ break;
+ case EFFECT_POWER_SWAP:
+ if (gBattleMons[battlerDef].statStages[STAT_ATK] > gBattleMons[battlerAtk].statStages[STAT_ATK]
+ && gBattleMons[battlerDef].statStages[STAT_SPATK] >= gBattleMons[battlerAtk].statStages[STAT_SPATK])
+ score++;
+ else if (gBattleMons[battlerDef].statStages[STAT_SPATK] > gBattleMons[battlerAtk].statStages[STAT_SPATK]
+ && gBattleMons[battlerDef].statStages[STAT_ATK] >= gBattleMons[battlerAtk].statStages[STAT_ATK])
+ score++;
+ break;
+ case EFFECT_POWER_TRICK:
+ if (!(gStatuses3[battlerAtk] & STATUS3_POWER_TRICK))
+ {
+ if (gBattleMons[battlerAtk].defense > gBattleMons[battlerAtk].attack && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL))
+ score += 2;
+ break;
+ }
+ break;
+ case EFFECT_HEART_SWAP:
+ {
+ bool32 hasHigherStat = FALSE;
+ //Only use if all target stats are >= attacker stats to prevent infinite loop
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerDef].statStages[i] < gBattleMons[battlerAtk].statStages[i])
+ break;
+ if (gBattleMons[battlerDef].statStages[i] > gBattleMons[battlerAtk].statStages[i])
+ hasHigherStat = TRUE;
+ }
+ if (hasHigherStat && i == NUM_BATTLE_STATS)
+ score++;
+ }
+ break;
+ case EFFECT_SPEED_SWAP:
+ // TODO this is cheating a bit...
+ if (gBattleMons[battlerDef].speed > gBattleMons[battlerAtk].speed)
+ score += 3;
+ break;
+ case EFFECT_GUARD_SPLIT:
+ {
+ // TODO also kind of cheating...
+ u16 newDefense = (gBattleMons[battlerAtk].defense + gBattleMons[battlerDef].defense) / 2;
+ u16 newSpDef = (gBattleMons[battlerAtk].spDefense + gBattleMons[battlerDef].spDefense) / 2;
+
+ if ((newDefense > gBattleMons[battlerAtk].defense && newSpDef >= gBattleMons[battlerAtk].spDefense)
+ || (newSpDef > gBattleMons[battlerAtk].spDefense && newDefense >= gBattleMons[battlerAtk].defense))
+ score++;
+ }
+ break;
+ case EFFECT_POWER_SPLIT:
+ {
+ u16 newAttack = (gBattleMons[battlerAtk].attack + gBattleMons[battlerDef].attack) / 2;
+ u16 newSpAtk = (gBattleMons[battlerAtk].spAttack + gBattleMons[battlerDef].spAttack) / 2;
+
+ if ((newAttack > gBattleMons[battlerAtk].attack && newSpAtk >= gBattleMons[battlerAtk].spAttack)
+ || (newSpAtk > gBattleMons[battlerAtk].spAttack && newAttack >= gBattleMons[battlerAtk].attack))
+ score++;
+ }
+ break;
+ case EFFECT_BUG_BITE: // And pluck
+ if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || AI_DATA->abilities[battlerDef] == ABILITY_STICKY_HOLD)
+ break;
+ else if (ItemId_GetPocket(AI_DATA->items[battlerDef]) == POCKET_BERRIES)
+ score += 3;
+ break;
+ case EFFECT_INCINERATE:
+ if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || AI_DATA->abilities[battlerDef] == ABILITY_STICKY_HOLD)
+ break;
+ else if (ItemId_GetPocket(AI_DATA->items[battlerDef]) == POCKET_BERRIES || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_GEMS)
+ score += 3;
+ break;
+ case EFFECT_SMACK_DOWN:
+ if (!IsBattlerGrounded(battlerDef))
+ score += 3;
+ break;
+ case EFFECT_RELIC_SONG:
+ #if (defined SPECIES_MELOETTA && defined SPECIES_MELOETTA_PIROUETTE)
+ if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) // Don't try to change form if it's transformed.
+ {
+ if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA && gBattleMons[battlerDef].defense < gBattleMons[battlerDef].spDefense)
+ score += 3; // Change to Pirouette if can do more damage
+ else if (gBattleMons[battlerAtk].species == SPECIES_MELOETTA_PIROUETTE && gBattleMons[battlerDef].spDefense < gBattleMons[battlerDef].defense)
+ score += 3; // Change to Aria if can do more damage
+ }
+ #endif
+ break;
+ case EFFECT_ELECTRIC_TERRAIN:
+ case EFFECT_MISTY_TERRAIN:
+ if (gStatuses3[battlerAtk] & STATUS3_YAWN && IsBattlerGrounded(battlerAtk))
+ score += 10;
+ //fallthrough
+ case EFFECT_GRASSY_TERRAIN:
+ case EFFECT_PSYCHIC_TERRAIN:
+ score += 2;
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER)
+ score += 2;
+ break;
+ case EFFECT_PLEDGE:
+ if (isDoubleBattle)
+ {
+ if (HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_PLEDGE))
+ score += 3; // Partner might use pledge move
+ }
+ break;
+ case EFFECT_TRICK_ROOM:
+ if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef))
+ score += 3;
+ else if ((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && GetBattlerSideSpeedAverage(battlerAtk) >= GetBattlerSideSpeedAverage(battlerDef))
+ score += 3;
+ break;
+ case EFFECT_MAGIC_ROOM:
+ score++;
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_NONE && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_NONE)
+ score++;
+ if (isDoubleBattle && AI_DATA->holdEffects[BATTLE_PARTNER(battlerAtk)] == HOLD_EFFECT_NONE && AI_DATA->holdEffects[BATTLE_PARTNER(battlerDef)] != HOLD_EFFECT_NONE)
+ score++;
+ break;
+ case EFFECT_WONDER_ROOM:
+ if ((HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL) && gBattleMons[battlerAtk].defense < gBattleMons[battlerAtk].spDefense)
+ || (HasMoveWithSplit(battlerDef, SPLIT_SPECIAL) && gBattleMons[battlerAtk].spDefense < gBattleMons[battlerAtk].defense))
+ score += 2;
+ break;
+ case EFFECT_GRAVITY:
+ if (!(gFieldStatuses & STATUS_FIELD_GRAVITY))
+ {
+ if (HasSleepMoveWithLowAccuracy(battlerAtk, battlerDef)) // Has Gravity for a move like Hypnosis
+ IncreaseSleepScore(battlerAtk, battlerDef, move, &score);
+ else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, FALSE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]))
+ score += 2;
+ else
+ score++;
+ }
+ break;
+ case EFFECT_ION_DELUGE:
+ if ((AI_DATA->abilities[battlerAtk] == ABILITY_VOLT_ABSORB
+ || AI_DATA->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE
+ || AI_DATA->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)
+ && gBattleMoves[predictedMove].type == TYPE_NORMAL)
+ score += 2;
+ break;
+ case EFFECT_FLING:
+ /* TODO
+ switch (gFlingTable[AI_DATA->items[battlerAtk]].effect)
+ {
+ case MOVE_EFFECT_BURN:
+ IncreaseBurnScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case MOVE_EFFECT_FLINCH:
+ score += ShouldTryToFlinch(battlerAtk, battlerDef, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], move);
+ break;
+ case MOVE_EFFECT_PARALYSIS:
+ IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case MOVE_EFFECT_POISON:
+ case MOVE_EFFECT_TOXIC:
+ IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
+ break;
+ case MOVE_EFFECT_FREEZE:
+ if (AI_CanFreeze(battlerAtk, battlerDef))
+ score += 3;
+ break;
+ }*/
+ break;
+ case EFFECT_FEINT:
+ if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT)
+ score += 3;
+ break;
+ case EFFECT_EMBARGO:
+ if (AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_NONE)
+ score++;
+ break;
+ case EFFECT_POWDER:
+ if (predictedMove != MOVE_NONE && !IS_MOVE_STATUS(predictedMove) && gBattleMoves[predictedMove].type == TYPE_FIRE)
+ score += 3;
+ break;
+ case EFFECT_TELEKINESIS:
+ if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, FALSE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef])
+ || !IsBattlerGrounded(battlerDef))
+ score++;
+ break;
+ case EFFECT_THROAT_CHOP:
+ if (predictedMove != MOVE_NONE && TestMoveFlags(predictedMove, FLAG_SOUND) && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ score += 3; // Ai goes first and predicts the target will use a sound move
+ else if (TestMoveFlagsInMoveset(battlerDef, FLAG_SOUND))
+ score += 3;
+ break;
+ case EFFECT_HEAL_BLOCK:
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && predictedMove != MOVE_NONE && IsHealingMoveEffect(gBattleMoves[predictedMove].effect))
+ score += 3; // Try to cancel healing move
+ else if (HasHealingEffect(battlerDef) || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_LEFTOVERS
+ || (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_BLACK_SLUDGE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON)))
+ score += 2;
+ break;
+ case EFFECT_SOAK:
+ if (HasMoveWithType(battlerAtk, TYPE_ELECTRIC) || HasMoveWithType(battlerAtk, TYPE_GRASS) || HasMoveEffect(battlerAtk, EFFECT_FREEZE_DRY))
+ score += 2; // Get some super effective moves
+ break;
+ case EFFECT_THIRD_TYPE:
+ if (AI_DATA->abilities[battlerDef] == ABILITY_WONDER_GUARD)
+ score += 2; // Give target more weaknesses
+ break;
+ case EFFECT_ELECTRIFY:
+ if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].type == TYPE_NORMAL
+ && (AI_DATA->abilities[battlerAtk] == ABILITY_VOLT_ABSORB
+ || AI_DATA->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE
+ || AI_DATA->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD))
+ {
+ score += 3;
+ }
+ break;
+ case EFFECT_TOPSY_TURVY:
+ if (CountPositiveStatStages(battlerDef) > CountNegativeStatStages(battlerDef))
+ score++;
+ break;
+ case EFFECT_FAIRY_LOCK:
+ if (!IsBattlerTrapped(battlerDef, TRUE))
+ {
+ if (ShouldTrap(battlerAtk, battlerDef, move))
+ score += 8;
+ }
+ break;
+ case EFFECT_QUASH:
+ if (isDoubleBattle
+ && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerDef, AI_DATA->partnerMove) == AI_IS_SLOWER) // Attacker partner wouldn't go before target
+ score++;
+ break;
+ case EFFECT_TAILWIND:
+ if (GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef))
+ score += 2;
+ break;
+ case EFFECT_LUCKY_CHANT:
+ if (!isDoubleBattle)
+ {
+ score++;
+ }
+ else
+ {
+ if (CountUsablePartyMons(battlerDef) > 0)
+ score += 8;
+ }
+ break;
+ case EFFECT_MAGNET_RISE:
+ if (IsBattlerGrounded(battlerAtk) && HasDamagingMoveOfType(battlerDef, TYPE_ELECTRIC)
+ && !(AI_GetTypeEffectiveness(MOVE_EARTHQUAKE, battlerDef, battlerAtk) == AI_EFFECTIVENESS_x0)) // Doesn't resist ground move
+ {
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first
+ {
+ if (gBattleMoves[predictedMove].type == TYPE_GROUND)
+ score += 3; // Cause the enemy's move to fail
+ break;
+ }
+ else // Opponent Goes First
+ {
+ if (HasDamagingMoveOfType(battlerDef, TYPE_GROUND))
+ score += 2;
+ break;
+ }
+ }
+ break;
+ case EFFECT_CAMOUFLAGE:
+ if (predictedMove != MOVE_NONE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER // Attacker goes first
+ && !IS_MOVE_STATUS(move) && AI_GetTypeEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0)
+ score++;
+ break;
+ case EFFECT_FLAME_BURST:
+ if (isDoubleBattle)
+ {
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerDef))
+ && AI_DATA->hpPercents[BATTLE_PARTNER(battlerDef)] < 12
+ && AI_DATA->abilities[BATTLE_PARTNER(battlerDef)] != ABILITY_MAGIC_GUARD
+ && !IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerDef), TYPE_FIRE))
+ score++;
+ }
+ break;
+ case EFFECT_TOXIC_THREAD:
+ IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
+ IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score);
+ break;
+ case EFFECT_TWO_TURNS_ATTACK:
+ case EFFECT_SKULL_BASH:
+ case EFFECT_SOLAR_BEAM:
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB)
+ score += 2;
+ break;
+ case EFFECT_COUNTER:
+ if (!IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]) && predictedMove != MOVE_NONE)
+ {
+ if (gDisableStructs[battlerDef].tauntTimer != 0)
+ score++; // target must use damaging move
+ if (GetMoveDamageResult(predictedMove) >= MOVE_POWER_GOOD && GetBattleMoveSplit(predictedMove) == SPLIT_PHYSICAL)
+ score += 3;
+ }
+ break;
+ case EFFECT_MIRROR_COAT:
+ if (!IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]) && predictedMove != MOVE_NONE)
+ {
+ if (gDisableStructs[battlerDef].tauntTimer != 0)
+ score++; // target must use damaging move
+ if (GetMoveDamageResult(predictedMove) >= MOVE_POWER_GOOD && GetBattleMoveSplit(predictedMove) == SPLIT_SPECIAL)
+ score += 3;
+ }
+ break;
+ case EFFECT_FLAIL:
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Ai goes first
+ {
+ if (AI_DATA->hpPercents[battlerAtk] < 20)
+ score++;
+ else if (AI_DATA->hpPercents[battlerAtk] < 8)
+ score += 2;
+ }
+ break;
+ case EFFECT_SHORE_UP:
+ if (AI_WeatherHasEffect() && (gBattleWeather & B_WEATHER_SANDSTORM)
+ && ShouldRecover(battlerAtk, battlerDef, move, 67))
+ score += 3;
+ else if (ShouldRecover(battlerAtk, battlerDef, move, 50))
+ score += 2;
+ break;
+ case EFFECT_FACADE:
+ if (gBattleMons[battlerAtk].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON))
+ score++;
+ break;
+ case EFFECT_FOCUS_PUNCH:
+ if (!isDoubleBattle && effectiveness > AI_EFFECTIVENESS_x0_5)
+ {
+ if (IsBattlerIncapacitated(battlerDef, AI_DATA->abilities[battlerDef]))
+ score += 2;
+ else if (gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))
+ score++;
+ }
+ break;
+ case EFFECT_SMELLINGSALT:
+ if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS)
+ score += 2;
+ break;
+ case EFFECT_WAKE_UP_SLAP:
+ if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP)
+ score += 2;
+ break;
+ case EFFECT_REVENGE:
+ if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP)
+ && !(gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)))
+ score += 2;
+ break;
+ case EFFECT_ENDEAVOR:
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent faster
+ {
+ if (AI_DATA->hpPercents[battlerAtk] < 40)
+ score++;
+ }
+ else if (AI_DATA->hpPercents[battlerAtk] < 50)
+ {
+ score++;
+ }
+ break;
+ //case EFFECT_EXTREME_EVOBOOST: // TODO
+ //break;
+ //case EFFECT_CLANGOROUS_SOUL: // TODO
+ //break;
+ //case EFFECT_NO_RETREAT: // TODO
+ //break;
+ //case EFFECT_SKY_DROP
+ //break;
+ } // move effect checks
+
+ return score;
+}
+
+// Effects that are encouraged on the first turn of battle
+static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ if (IsTargetingPartner(battlerAtk, battlerDef)
+ || gBattleResults.battleTurnCounter != 0)
+ return score;
+
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING
+ && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
+ && CanTargetFaintAi(battlerDef, battlerAtk)
+ && GetMovePriority(battlerAtk, move) == 0)
+ {
+ RETURN_SCORE_MINUS(20); // No point in setting up if you will faint. Should just switch if possible..
+ }
+
+ // check effects to prioritize first turn
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_ATTACK_UP:
+ case EFFECT_DEFENSE_UP:
+ case EFFECT_SPEED_UP:
+ case EFFECT_SPECIAL_ATTACK_UP:
+ case EFFECT_SPECIAL_DEFENSE_UP:
+ case EFFECT_ACCURACY_UP:
+ case EFFECT_EVASION_UP:
+ case EFFECT_ATTACK_DOWN:
+ case EFFECT_DEFENSE_DOWN:
+ case EFFECT_SPEED_DOWN:
+ case EFFECT_SPECIAL_ATTACK_DOWN:
+ case EFFECT_SPECIAL_DEFENSE_DOWN:
+ case EFFECT_ACCURACY_DOWN:
+ case EFFECT_EVASION_DOWN:
+ case EFFECT_CONVERSION:
+ case EFFECT_LIGHT_SCREEN:
+ case EFFECT_FOCUS_ENERGY:
+ case EFFECT_CONFUSE:
+ case EFFECT_ATTACK_UP_2:
+ case EFFECT_DEFENSE_UP_2:
+ case EFFECT_DEFENSE_UP_3:
+ case EFFECT_SPEED_UP_2:
+ case EFFECT_SPECIAL_ATTACK_UP_2:
+ case EFFECT_SPECIAL_ATTACK_UP_3:
+ case EFFECT_SPECIAL_DEFENSE_UP_2:
+ case EFFECT_ACCURACY_UP_2:
+ case EFFECT_EVASION_UP_2:
+ case EFFECT_ATTACK_DOWN_2:
+ case EFFECT_DEFENSE_DOWN_2:
+ case EFFECT_SPEED_DOWN_2:
+ case EFFECT_SPECIAL_ATTACK_DOWN_2:
+ case EFFECT_SPECIAL_DEFENSE_DOWN_2:
+ case EFFECT_ACCURACY_DOWN_2:
+ case EFFECT_EVASION_DOWN_2:
+ case EFFECT_REFLECT:
+ case EFFECT_POISON:
+ case EFFECT_PARALYZE:
+ case EFFECT_SUBSTITUTE:
+ case EFFECT_LEECH_SEED:
+ case EFFECT_MINIMIZE:
+ case EFFECT_CURSE:
+ case EFFECT_SWAGGER:
+ case EFFECT_CAMOUFLAGE:
+ case EFFECT_YAWN:
+ case EFFECT_DEFENSE_CURL:
+ case EFFECT_TORMENT:
+ case EFFECT_FLATTER:
+ case EFFECT_WILL_O_WISP:
+ case EFFECT_INGRAIN:
+ case EFFECT_IMPRISON:
+ case EFFECT_TEETER_DANCE:
+ case EFFECT_TICKLE:
+ case EFFECT_COSMIC_POWER:
+ case EFFECT_BULK_UP:
+ case EFFECT_CALM_MIND:
+ case EFFECT_ACUPRESSURE:
+ case EFFECT_AUTOTOMIZE:
+ case EFFECT_SHIFT_GEAR:
+ case EFFECT_SHELL_SMASH:
+ case EFFECT_GROWTH:
+ case EFFECT_QUIVER_DANCE:
+ case EFFECT_ATTACK_SPATK_UP:
+ case EFFECT_ATTACK_ACCURACY_UP:
+ case EFFECT_PSYCHIC_TERRAIN:
+ case EFFECT_GRASSY_TERRAIN:
+ case EFFECT_ELECTRIC_TERRAIN:
+ case EFFECT_MISTY_TERRAIN:
+ case EFFECT_STEALTH_ROCK:
+ case EFFECT_TOXIC_SPIKES:
+ case EFFECT_TRICK_ROOM:
+ case EFFECT_WONDER_ROOM:
+ case EFFECT_MAGIC_ROOM:
+ case EFFECT_TAILWIND:
+ case EFFECT_DRAGON_DANCE:
+ case EFFECT_STICKY_WEB:
+ case EFFECT_RAIN_DANCE:
+ case EFFECT_SUNNY_DAY:
+ case EFFECT_SANDSTORM:
+ case EFFECT_HAIL:
+ case EFFECT_GEOMANCY:
+ score += 2;
+ break;
+ default:
+ break;
+ }
+
+ return score;
+}
+
+// Adds score bonus to 'riskier' move effects and high crit moves
+static s16 AI_Risky(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ return score;
+
+ if (TestMoveFlags(move, FLAG_HIGH_CRIT))
+ score += 2;
+
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_SLEEP:
+ case EFFECT_EXPLOSION:
+ case EFFECT_MIRROR_MOVE:
+ case EFFECT_OHKO:
+ case EFFECT_CONFUSE:
+ case EFFECT_METRONOME:
+ case EFFECT_PSYWAVE:
+ case EFFECT_COUNTER:
+ case EFFECT_DESTINY_BOND:
+ case EFFECT_SWAGGER:
+ case EFFECT_ATTRACT:
+ case EFFECT_PRESENT:
+ case EFFECT_ALL_STATS_UP_HIT:
+ case EFFECT_BELLY_DRUM:
+ case EFFECT_MIRROR_COAT:
+ case EFFECT_FOCUS_PUNCH:
+ case EFFECT_REVENGE:
+ case EFFECT_TEETER_DANCE:
+ if (Random() & 1)
+ score += 2;
+ break;
+ default:
+ break;
+ }
+
+ return score;
+}
+
+// Adds score bonus to best powered move
+static s16 AI_PreferStrongestMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ return score;
+
+ if (GetMoveDamageResult(move) == MOVE_POWER_BEST)
+ score += 2;
+
+ return score;
+}
+
+// Prefers moves that are good for baton pass
+static s16 AI_PreferBatonPass(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ u32 i;
+
+ if (IsTargetingPartner(battlerAtk, battlerDef)
+ || CountUsablePartyMons(battlerAtk) == 0
+ || GetMoveDamageResult(move) != MOVE_POWER_OTHER
+ || !HasMoveEffect(battlerAtk, EFFECT_BATON_PASS)
+ || IsBattlerTrapped(battlerAtk, TRUE))
+ return score;
+
+ if (IsStatRaisingEffect(gBattleMoves[move].effect))
+ {
+ if (gBattleResults.battleTurnCounter == 0)
+ score += 5;
+ else if (AI_DATA->hpPercents[battlerAtk] < 60)
+ score -= 10;
+ else
+ score++;
+ }
+
+ // other specific checks
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_INGRAIN:
+ if (!(gStatuses3[battlerAtk] & STATUS3_ROOTED))
+ score += 2;
+ break;
+ case EFFECT_AQUA_RING:
+ if (!(gStatuses3[battlerAtk] & STATUS3_AQUA_RING))
+ score += 2;
+ break;
+ case EFFECT_PROTECT:
+ if (gLastMoves[battlerAtk] == MOVE_PROTECT || gLastMoves[battlerAtk] == MOVE_DETECT)
+ score -= 2;
+ else
+ score += 2;
+ break;
+ case EFFECT_BATON_PASS:
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ IncreaseStatUpScore(battlerAtk, battlerDef, i, &score);
+ }
+ if (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING))
+ score += 2;
+ if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED)
+ score -= 3;
+ break;
+ default:
+ break;
+ }
+
+ return score;
+}
+
+static s16 AI_HPAware(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ u16 effect = gBattleMoves[move].effect;
+ u8 moveType = gBattleMoves[move].type;
+
+ SetTypeBeforeUsingMove(move, battlerAtk);
+ GET_MOVE_TYPE(move, moveType);
+
+ if (IsTargetingPartner(battlerAtk, battlerDef))
+ {
+ if ((effect == EFFECT_HEAL_PULSE || effect == EFFECT_HIT_ENEMY_HEAL_ALLY)
+ || (moveType == TYPE_ELECTRIC && AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_VOLT_ABSORB)
+ || (moveType == TYPE_WATER && (AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_DRY_SKIN || AI_DATA->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_WATER_ABSORB)))
+ {
+ if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK)
+ return 0;
+
+ if (CanTargetFaintAi(FOE(battlerAtk), BATTLE_PARTNER(battlerAtk))
+ || (CanTargetFaintAi(BATTLE_PARTNER(FOE(battlerAtk)), BATTLE_PARTNER(battlerAtk))))
+ score--;
+
+ if (AI_DATA->hpPercents[battlerDef] <= 50)
+ score++;
+ }
+ }
+ else
+ {
+ // Consider AI HP
+ if (AI_DATA->hpPercents[battlerAtk] > 70)
+ {
+ // high hp
+ switch (effect)
+ {
+ case EFFECT_EXPLOSION:
+ case EFFECT_RESTORE_HP:
+ case EFFECT_REST:
+ case EFFECT_DESTINY_BOND:
+ case EFFECT_FLAIL:
+ case EFFECT_ENDURE:
+ case EFFECT_MORNING_SUN:
+ case EFFECT_SYNTHESIS:
+ case EFFECT_MOONLIGHT:
+ case EFFECT_SHORE_UP:
+ case EFFECT_SOFTBOILED:
+ case EFFECT_ROOST:
+ case EFFECT_MEMENTO:
+ case EFFECT_GRUDGE:
+ case EFFECT_OVERHEAT:
+ score -= 2;
+ break;
+ default:
+ break;
+ }
+ }
+ else if (AI_DATA->hpPercents[battlerAtk] > 30)
+ {
+ // med hp
+ if (IsStatRaisingEffect(effect) || IsStatLoweringEffect(effect))
+ score -= 2;
+
+ switch (effect)
+ {
+ case EFFECT_EXPLOSION:
+ case EFFECT_BIDE:
+ case EFFECT_CONVERSION:
+ case EFFECT_LIGHT_SCREEN:
+ case EFFECT_MIST:
+ case EFFECT_FOCUS_ENERGY:
+ case EFFECT_CONVERSION_2:
+ case EFFECT_SAFEGUARD:
+ case EFFECT_BELLY_DRUM:
+ score -= 2;
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ // low hp
+ if (IsStatRaisingEffect(effect) || IsStatLoweringEffect(effect))
+ score -= 2;
+
+ // check other discouraged low hp effects
+ switch (effect)
+ {
+ case EFFECT_BIDE:
+ case EFFECT_CONVERSION:
+ case EFFECT_REFLECT:
+ case EFFECT_LIGHT_SCREEN:
+ case EFFECT_AURORA_VEIL:
+ case EFFECT_MIST:
+ case EFFECT_FOCUS_ENERGY:
+ case EFFECT_RAGE:
+ case EFFECT_CONVERSION_2:
+ case EFFECT_LOCK_ON:
+ case EFFECT_SAFEGUARD:
+ case EFFECT_BELLY_DRUM:
+ case EFFECT_PSYCH_UP:
+ case EFFECT_MIRROR_COAT:
+ case EFFECT_SOLAR_BEAM:
+ case EFFECT_TWO_TURNS_ATTACK:
+ case EFFECT_ERUPTION:
+ case EFFECT_TICKLE:
+ case EFFECT_SUNNY_DAY:
+ case EFFECT_SANDSTORM:
+ case EFFECT_HAIL:
+ case EFFECT_RAIN_DANCE:
+ score -= 2;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ // consider target HP
+ if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0))
+ {
+ score += 2;
+ }
+ else
+ {
+ if (AI_DATA->hpPercents[battlerDef] > 70)
+ {
+ // high HP
+ ; // nothing yet
+ }
+ else if (AI_DATA->hpPercents[battlerDef] > 30)
+ {
+ // med HP - check discouraged effects
+ switch (effect)
+ {
+ case EFFECT_ATTACK_UP:
+ case EFFECT_DEFENSE_UP:
+ case EFFECT_SPEED_UP:
+ case EFFECT_SPECIAL_ATTACK_UP:
+ case EFFECT_SPECIAL_DEFENSE_UP:
+ case EFFECT_ACCURACY_UP:
+ case EFFECT_EVASION_UP:
+ case EFFECT_ATTACK_DOWN:
+ case EFFECT_DEFENSE_DOWN:
+ case EFFECT_SPEED_DOWN:
+ case EFFECT_SPECIAL_ATTACK_DOWN:
+ case EFFECT_SPECIAL_DEFENSE_DOWN:
+ case EFFECT_ACCURACY_DOWN:
+ case EFFECT_EVASION_DOWN:
+ case EFFECT_MIST:
+ case EFFECT_FOCUS_ENERGY:
+ case EFFECT_ATTACK_UP_2:
+ case EFFECT_DEFENSE_UP_2:
+ case EFFECT_SPEED_UP_2:
+ case EFFECT_SPECIAL_ATTACK_UP_2:
+ case EFFECT_SPECIAL_DEFENSE_UP_2:
+ case EFFECT_ACCURACY_UP_2:
+ case EFFECT_EVASION_UP_2:
+ case EFFECT_ATTACK_DOWN_2:
+ case EFFECT_DEFENSE_DOWN_2:
+ case EFFECT_SPEED_DOWN_2:
+ case EFFECT_SPECIAL_ATTACK_DOWN_2:
+ case EFFECT_SPECIAL_DEFENSE_DOWN_2:
+ case EFFECT_ACCURACY_DOWN_2:
+ case EFFECT_EVASION_DOWN_2:
+ case EFFECT_POISON:
+ case EFFECT_PAIN_SPLIT:
+ case EFFECT_PERISH_SONG:
+ case EFFECT_SAFEGUARD:
+ case EFFECT_TICKLE:
+ case EFFECT_COSMIC_POWER:
+ case EFFECT_BULK_UP:
+ case EFFECT_CALM_MIND:
+ case EFFECT_DRAGON_DANCE:
+ case EFFECT_DEFENSE_UP_3:
+ case EFFECT_SPECIAL_ATTACK_UP_3:
+ score -= 2;
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ // low HP
+ if (IS_MOVE_STATUS(move))
+ score -= 2; // don't use status moves if target is at low health
+ }
+ }
+
+ return score;
+}
+
+static void AI_Flee(void)
+{
+ AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_FLEE | AI_ACTION_DO_NOT_ATTACK);
+}
+
+static void AI_Watch(void)
+{
+ AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK);
+}
+
+// Roaming pokemon logic
+static s16 AI_Roaming(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ if (IsBattlerTrapped(battlerAtk, FALSE))
+ return score;
+
+ AI_Flee();
+ return score;
+}
+
+// Safari pokemon logic
+static s16 AI_Safari(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ u8 safariFleeRate = gBattleStruct->safariEscapeFactor * 5; // Safari flee rate, from 0-20.
+
+ if ((Random() % 100) < safariFleeRate)
+ AI_Flee();
+ else
+ AI_Watch();
+
+ return score;
+}
+
+// First battle logic
+static s16 AI_FirstBattle(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
+{
+ if (AI_DATA->hpPercents[battlerDef] <= 20)
+ AI_Flee();
+
+ return score;
+}
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
deleted file mode 100644
index e9f55bd8bc..0000000000
--- a/src/battle_ai_script_commands.c
+++ /dev/null
@@ -1,2276 +0,0 @@
-#include "global.h"
-#include "battle.h"
-#include "battle_anim.h"
-#include "battle_ai_script_commands.h"
-#include "battle_factory.h"
-#include "battle_setup.h"
-#include "data.h"
-#include "item.h"
-#include "pokemon.h"
-#include "random.h"
-#include "recorded_battle.h"
-#include "util.h"
-#include "constants/abilities.h"
-#include "constants/battle_ai.h"
-#include "constants/battle_move_effects.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_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai))
-#define BATTLE_HISTORY ((struct BattleHistory *)(gBattleResources->battleHistory))
-
-// AI states
-enum
-{
- AIState_SettingUp,
- AIState_Processing,
- AIState_FinishedProcessing,
- AIState_DoNotProcess
-};
-
-/*
-gAIScriptPtr is a pointer to the next battle AI cmd command to read.
-when a command finishes processing, gAIScriptPtr is incremented by
-the number of bytes that the current command had reserved for arguments
-in order to read the next command correctly. refer to battle_ai_scripts.s for the
-AI scripts.
-*/
-
-extern const u8 *const gBattleAI_ScriptsTable[];
-
-static u8 ChooseMoveOrAction_Singles(void);
-static u8 ChooseMoveOrAction_Doubles(void);
-static void RecordLastUsedMoveByTarget(void);
-static void BattleAI_DoAIProcessing(void);
-static void AIStackPushVar(const u8 *);
-static bool8 AIStackPop(void);
-
-static void Cmd_if_random_less_than(void);
-static void Cmd_if_random_greater_than(void);
-static void Cmd_if_random_equal(void);
-static void Cmd_if_random_not_equal(void);
-static void Cmd_score(void);
-static void Cmd_if_hp_less_than(void);
-static void Cmd_if_hp_more_than(void);
-static void Cmd_if_hp_equal(void);
-static void Cmd_if_hp_not_equal(void);
-static void Cmd_if_status(void);
-static void Cmd_if_not_status(void);
-static void Cmd_if_status2(void);
-static void Cmd_if_not_status2(void);
-static void Cmd_if_status3(void);
-static void Cmd_if_not_status3(void);
-static void Cmd_if_side_affecting(void);
-static void Cmd_if_not_side_affecting(void);
-static void Cmd_if_less_than(void);
-static void Cmd_if_more_than(void);
-static void Cmd_if_equal(void);
-static void Cmd_if_not_equal(void);
-static void Cmd_if_less_than_ptr(void);
-static void Cmd_if_more_than_ptr(void);
-static void Cmd_if_equal_ptr(void);
-static void Cmd_if_not_equal_ptr(void);
-static void Cmd_if_move(void);
-static void Cmd_if_not_move(void);
-static void Cmd_if_in_bytes(void);
-static void Cmd_if_not_in_bytes(void);
-static void Cmd_if_in_hwords(void);
-static void Cmd_if_not_in_hwords(void);
-static void Cmd_if_user_has_attacking_move(void);
-static void Cmd_if_user_has_no_attacking_moves(void);
-static void Cmd_get_turn_count(void);
-static void Cmd_get_type(void);
-static void Cmd_get_considered_move_power(void);
-static void Cmd_get_how_powerful_move_is(void);
-static void Cmd_get_last_used_battler_move(void);
-static void Cmd_if_equal_(void);
-static void Cmd_if_not_equal_(void);
-static void Cmd_if_user_goes(void);
-static void Cmd_if_user_doesnt_go(void);
-static void Cmd_nop_2A(void);
-static void Cmd_nop_2B(void);
-static void Cmd_count_usable_party_mons(void);
-static void Cmd_get_considered_move(void);
-static void Cmd_get_considered_move_effect(void);
-static void Cmd_get_ability(void);
-static void Cmd_get_highest_type_effectiveness(void);
-static void Cmd_if_type_effectiveness(void);
-static void Cmd_nop_32(void);
-static void Cmd_nop_33(void);
-static void Cmd_if_status_in_party(void);
-static void Cmd_if_status_not_in_party(void);
-static void Cmd_get_weather(void);
-static void Cmd_if_effect(void);
-static void Cmd_if_not_effect(void);
-static void Cmd_if_stat_level_less_than(void);
-static void Cmd_if_stat_level_more_than(void);
-static void Cmd_if_stat_level_equal(void);
-static void Cmd_if_stat_level_not_equal(void);
-static void Cmd_if_can_faint(void);
-static void Cmd_if_cant_faint(void);
-static void Cmd_if_has_move(void);
-static void Cmd_if_doesnt_have_move(void);
-static void Cmd_if_has_move_with_effect(void);
-static void Cmd_if_doesnt_have_move_with_effect(void);
-static void Cmd_if_any_move_disabled_or_encored(void);
-static void Cmd_if_curr_move_disabled_or_encored(void);
-static void Cmd_flee(void);
-static void Cmd_if_random_safari_flee(void);
-static void Cmd_watch(void);
-static void Cmd_get_hold_effect(void);
-static void Cmd_get_gender(void);
-static void Cmd_is_first_turn_for(void);
-static void Cmd_get_stockpile_count(void);
-static void Cmd_is_double_battle(void);
-static void Cmd_get_used_held_item(void);
-static void Cmd_get_move_type_from_result(void);
-static void Cmd_get_move_power_from_result(void);
-static void Cmd_get_move_effect_from_result(void);
-static void Cmd_get_protect_count(void);
-static void Cmd_nop_52(void);
-static void Cmd_nop_53(void);
-static void Cmd_nop_54(void);
-static void Cmd_nop_55(void);
-static void Cmd_nop_56(void);
-static void Cmd_nop_57(void);
-static void Cmd_call(void);
-static void Cmd_goto(void);
-static void Cmd_end(void);
-static void Cmd_if_level_cond(void);
-static void Cmd_if_target_taunted(void);
-static void Cmd_if_target_not_taunted(void);
-static void Cmd_check_ability(void);
-static void Cmd_is_of_type(void);
-static void Cmd_if_target_is_ally(void);
-static void Cmd_if_flash_fired(void);
-static void Cmd_if_holds_item(void);
-
-// ewram
-EWRAM_DATA const u8 *gAIScriptPtr = NULL;
-EWRAM_DATA static u8 sBattler_AI = 0;
-
-// const rom data
-typedef void (*BattleAICmdFunc)(void);
-
-static const BattleAICmdFunc sBattleAICmdTable[] =
-{
- Cmd_if_random_less_than, // 0x0
- Cmd_if_random_greater_than, // 0x1
- Cmd_if_random_equal, // 0x2
- Cmd_if_random_not_equal, // 0x3
- Cmd_score, // 0x4
- Cmd_if_hp_less_than, // 0x5
- Cmd_if_hp_more_than, // 0x6
- Cmd_if_hp_equal, // 0x7
- Cmd_if_hp_not_equal, // 0x8
- Cmd_if_status, // 0x9
- Cmd_if_not_status, // 0xA
- Cmd_if_status2, // 0xB
- Cmd_if_not_status2, // 0xC
- Cmd_if_status3, // 0xD
- Cmd_if_not_status3, // 0xE
- Cmd_if_side_affecting, // 0xF
- Cmd_if_not_side_affecting, // 0x10
- Cmd_if_less_than, // 0x11
- Cmd_if_more_than, // 0x12
- Cmd_if_equal, // 0x13
- Cmd_if_not_equal, // 0x14
- Cmd_if_less_than_ptr, // 0x15
- Cmd_if_more_than_ptr, // 0x16
- Cmd_if_equal_ptr, // 0x17
- Cmd_if_not_equal_ptr, // 0x18
- Cmd_if_move, // 0x19
- Cmd_if_not_move, // 0x1A
- Cmd_if_in_bytes, // 0x1B
- Cmd_if_not_in_bytes, // 0x1C
- Cmd_if_in_hwords, // 0x1D
- Cmd_if_not_in_hwords, // 0x1E
- Cmd_if_user_has_attacking_move, // 0x1F
- Cmd_if_user_has_no_attacking_moves, // 0x20
- Cmd_get_turn_count, // 0x21
- Cmd_get_type, // 0x22
- Cmd_get_considered_move_power, // 0x23
- Cmd_get_how_powerful_move_is, // 0x24
- Cmd_get_last_used_battler_move, // 0x25
- Cmd_if_equal_, // 0x26
- Cmd_if_not_equal_, // 0x27
- Cmd_if_user_goes, // 0x28
- Cmd_if_user_doesnt_go, // 0x29
- Cmd_nop_2A, // 0x2A
- Cmd_nop_2B, // 0x2B
- Cmd_count_usable_party_mons, // 0x2C
- Cmd_get_considered_move, // 0x2D
- Cmd_get_considered_move_effect, // 0x2E
- Cmd_get_ability, // 0x2F
- Cmd_get_highest_type_effectiveness, // 0x30
- Cmd_if_type_effectiveness, // 0x31
- Cmd_nop_32, // 0x32
- Cmd_nop_33, // 0x33
- Cmd_if_status_in_party, // 0x34
- Cmd_if_status_not_in_party, // 0x35
- Cmd_get_weather, // 0x36
- Cmd_if_effect, // 0x37
- Cmd_if_not_effect, // 0x38
- Cmd_if_stat_level_less_than, // 0x39
- Cmd_if_stat_level_more_than, // 0x3A
- Cmd_if_stat_level_equal, // 0x3B
- Cmd_if_stat_level_not_equal, // 0x3C
- Cmd_if_can_faint, // 0x3D
- Cmd_if_cant_faint, // 0x3E
- Cmd_if_has_move, // 0x3F
- Cmd_if_doesnt_have_move, // 0x40
- Cmd_if_has_move_with_effect, // 0x41
- Cmd_if_doesnt_have_move_with_effect, // 0x42
- Cmd_if_any_move_disabled_or_encored, // 0x43
- Cmd_if_curr_move_disabled_or_encored, // 0x44
- Cmd_flee, // 0x45
- Cmd_if_random_safari_flee, // 0x46
- Cmd_watch, // 0x47
- Cmd_get_hold_effect, // 0x48
- Cmd_get_gender, // 0x49
- Cmd_is_first_turn_for, // 0x4A
- Cmd_get_stockpile_count, // 0x4B
- Cmd_is_double_battle, // 0x4C
- Cmd_get_used_held_item, // 0x4D
- Cmd_get_move_type_from_result, // 0x4E
- Cmd_get_move_power_from_result, // 0x4F
- Cmd_get_move_effect_from_result, // 0x50
- Cmd_get_protect_count, // 0x51
- Cmd_nop_52, // 0x52
- Cmd_nop_53, // 0x53
- Cmd_nop_54, // 0x54
- Cmd_nop_55, // 0x55
- Cmd_nop_56, // 0x56
- Cmd_nop_57, // 0x57
- Cmd_call, // 0x58
- Cmd_goto, // 0x59
- Cmd_end, // 0x5A
- Cmd_if_level_cond, // 0x5B
- Cmd_if_target_taunted, // 0x5C
- Cmd_if_target_not_taunted, // 0x5D
- Cmd_if_target_is_ally, // 0x5E
- Cmd_is_of_type, // 0x5F
- Cmd_check_ability, // 0x60
- Cmd_if_flash_fired, // 0x61
- Cmd_if_holds_item, // 0x62
-};
-
-// For the purposes of determining the most powerful move in a moveset, these
-// moves are treated the same as having a power of 0 or 1
-#define IGNORED_MOVES_END 0xFFFF
-static const u16 sIgnoredPowerfulMoveEffects[] =
-{
- EFFECT_EXPLOSION,
- EFFECT_DREAM_EATER,
- EFFECT_RAZOR_WIND,
- EFFECT_SKY_ATTACK,
- EFFECT_RECHARGE,
- EFFECT_SKULL_BASH,
- EFFECT_SOLAR_BEAM,
- EFFECT_SPIT_UP,
- EFFECT_FOCUS_PUNCH,
- EFFECT_SUPERPOWER,
- EFFECT_ERUPTION,
- EFFECT_OVERHEAT,
- IGNORED_MOVES_END
-};
-
-// code
-void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves)
-{
- s32 i;
- u8 *data = (u8 *)BATTLE_HISTORY;
-
- for (i = 0; i < sizeof(struct BattleHistory); i++)
- data[i] = 0;
-
- // Items are allowed to use in ONLY trainer battles.
- if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER
- | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_SECRET_BASE | BATTLE_TYPE_FRONTIER
- | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_RECORDED_LINK)
- )
- )
- {
- for (i = 0; i < MAX_TRAINER_ITEMS; i++)
- {
- if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0)
- {
- BATTLE_HISTORY->trainerItems[BATTLE_HISTORY->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i];
- BATTLE_HISTORY->itemsNo++;
- }
- }
- }
-
- BattleAI_SetupAIData(defaultScoreMoves);
-}
-
-void BattleAI_SetupAIData(u8 defaultScoreMoves)
-{
- s32 i;
- u8 *data = (u8 *)AI_THINKING_STRUCT;
- u8 moveLimitations;
-
- // Clear AI data.
- for (i = 0; i < sizeof(struct AI_ThinkingStruct); i++)
- data[i] = 0;
-
- // Conditional score reset, unlike Ruby.
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (defaultScoreMoves & 1)
- AI_THINKING_STRUCT->score[i] = 100;
- else
- AI_THINKING_STRUCT->score[i] = 0;
-
- defaultScoreMoves >>= 1;
- }
-
- moveLimitations = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL);
-
- // Ignore moves that aren't possible to use.
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (gBitTable[i] & moveLimitations)
- AI_THINKING_STRUCT->score[i] = 0;
-
- AI_THINKING_STRUCT->simulatedRNG[i] = 100 - (Random() % 16);
- }
-
- gBattleResources->AI_ScriptsStack->size = 0;
- sBattler_AI = gActiveBattler;
-
- // Decide a random target battlerId in doubles.
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- {
- gBattlerTarget = (Random() & BIT_FLANK) + (GetBattlerSide(gActiveBattler) ^ BIT_SIDE);
- if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
- gBattlerTarget ^= BIT_FLANK;
- }
- // There's only one choice in single battles.
- else
- {
- gBattlerTarget = sBattler_AI ^ BIT_SIDE;
- }
-
- // Choose proper trainer ai scripts.
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
- AI_THINKING_STRUCT->aiFlags = GetAiScriptsInRecordedBattle();
- else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
- AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_SAFARI;
- else if (gBattleTypeFlags & BATTLE_TYPE_ROAMER)
- AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_ROAMING;
- else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
- AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_FIRST_BATTLE;
- else if (gBattleTypeFlags & BATTLE_TYPE_FACTORY)
- AI_THINKING_STRUCT->aiFlags = GetAiScriptsInBattleFactory();
- else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE))
- AI_THINKING_STRUCT->aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_TRY_TO_FAINT;
- else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
- AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags | gTrainers[gTrainerBattleOpponent_B].aiFlags;
- else
- AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags;
-
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- AI_THINKING_STRUCT->aiFlags |= AI_SCRIPT_DOUBLE_BATTLE; // act smart in doubles and don't attack your partner
-}
-
-u8 BattleAI_ChooseMoveOrAction(void)
-{
- u16 savedCurrentMove = gCurrentMove;
- u8 ret;
-
- if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
- ret = ChooseMoveOrAction_Singles();
- else
- ret = ChooseMoveOrAction_Doubles();
-
- gCurrentMove = savedCurrentMove;
- return ret;
-}
-
-static u8 ChooseMoveOrAction_Singles(void)
-{
- u8 currentMoveArray[MAX_MON_MOVES];
- u8 consideredMoveArray[MAX_MON_MOVES];
- u8 numOfBestMoves;
- s32 i;
-
- RecordLastUsedMoveByTarget();
-
- while (AI_THINKING_STRUCT->aiFlags != 0)
- {
- if (AI_THINKING_STRUCT->aiFlags & 1)
- {
- AI_THINKING_STRUCT->aiState = AIState_SettingUp;
- BattleAI_DoAIProcessing();
- }
- AI_THINKING_STRUCT->aiFlags >>= 1;
- AI_THINKING_STRUCT->aiLogicId++;
- AI_THINKING_STRUCT->movesetIndex = 0;
- }
-
- // Check special AI actions.
- if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE)
- return AI_CHOICE_FLEE;
- if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH)
- return AI_CHOICE_WATCH;
-
- numOfBestMoves = 1;
- currentMoveArray[0] = AI_THINKING_STRUCT->score[0];
- consideredMoveArray[0] = 0;
-
- for (i = 1; i < MAX_MON_MOVES; i++)
- {
- if (gBattleMons[sBattler_AI].moves[i] != MOVE_NONE)
- {
- // In ruby, the order of these if statements is reversed.
- if (currentMoveArray[0] == AI_THINKING_STRUCT->score[i])
- {
- currentMoveArray[numOfBestMoves] = AI_THINKING_STRUCT->score[i];
- consideredMoveArray[numOfBestMoves++] = i;
- }
- if (currentMoveArray[0] < AI_THINKING_STRUCT->score[i])
- {
- numOfBestMoves = 1;
- currentMoveArray[0] = AI_THINKING_STRUCT->score[i];
- consideredMoveArray[0] = i;
- }
- }
- }
- return consideredMoveArray[Random() % numOfBestMoves];
-}
-
-static u8 ChooseMoveOrAction_Doubles(void)
-{
- s32 i;
- s32 j;
-#ifndef BUGFIX
- s32 scriptsToRun;
-#else
- // the value assigned to this is a u32 (aiFlags)
- // this becomes relevant because aiFlags can have bit 31 set
- // and scriptsToRun is shifted
- // this never happens in the vanilla game because bit 31 is
- // only set when it's the first battle
- u32 scriptsToRun;
-#endif
- s16 bestMovePointsForTarget[MAX_BATTLERS_COUNT];
- s8 mostViableTargetsArray[MAX_BATTLERS_COUNT];
- u8 actionOrMoveIndex[MAX_BATTLERS_COUNT];
- u8 mostViableMovesScores[MAX_MON_MOVES];
- u8 mostViableMovesIndices[MAX_MON_MOVES];
- s32 mostViableTargetsNo;
- s32 mostViableMovesNo;
- s16 mostMovePoints;
-
- for (i = 0; i < MAX_BATTLERS_COUNT; i++)
- {
- if (i == sBattler_AI || gBattleMons[i].hp == 0)
- {
- actionOrMoveIndex[i] = 0xFF;
- bestMovePointsForTarget[i] = -1;
- }
- else
- {
- if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
- BattleAI_SetupAIData(gBattleStruct->palaceFlags >> 4);
- else
- BattleAI_SetupAIData((1 << MAX_MON_MOVES) - 1);
-
- gBattlerTarget = i;
-
- if ((i & BIT_SIDE) != (sBattler_AI & BIT_SIDE))
- RecordLastUsedMoveByTarget();
-
- AI_THINKING_STRUCT->aiLogicId = 0;
- AI_THINKING_STRUCT->movesetIndex = 0;
- scriptsToRun = AI_THINKING_STRUCT->aiFlags;
- while (scriptsToRun != 0)
- {
- if (scriptsToRun & 1)
- {
- AI_THINKING_STRUCT->aiState = AIState_SettingUp;
- BattleAI_DoAIProcessing();
- }
- scriptsToRun >>= 1;
- AI_THINKING_STRUCT->aiLogicId++;
- AI_THINKING_STRUCT->movesetIndex = 0;
- }
-
- if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE)
- {
- actionOrMoveIndex[i] = AI_CHOICE_FLEE;
- }
- else if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH)
- {
- actionOrMoveIndex[i] = AI_CHOICE_WATCH;
- }
- else
- {
- mostViableMovesScores[0] = AI_THINKING_STRUCT->score[0];
- mostViableMovesIndices[0] = 0;
- mostViableMovesNo = 1;
- for (j = 1; j < MAX_MON_MOVES; j++)
- {
- if (gBattleMons[sBattler_AI].moves[j] != 0)
- {
- if (mostViableMovesScores[0] == AI_THINKING_STRUCT->score[j])
- {
- mostViableMovesScores[mostViableMovesNo] = AI_THINKING_STRUCT->score[j];
- mostViableMovesIndices[mostViableMovesNo] = j;
- mostViableMovesNo++;
- }
- if (mostViableMovesScores[0] < AI_THINKING_STRUCT->score[j])
- {
- mostViableMovesScores[0] = AI_THINKING_STRUCT->score[j];
- mostViableMovesIndices[0] = j;
- mostViableMovesNo = 1;
- }
- }
- }
- actionOrMoveIndex[i] = mostViableMovesIndices[Random() % mostViableMovesNo];
- bestMovePointsForTarget[i] = mostViableMovesScores[0];
-
- // Don't use a move against ally if it has less than 100 points.
- if (i == (sBattler_AI ^ BIT_FLANK) && bestMovePointsForTarget[i] < 100)
- {
- bestMovePointsForTarget[i] = -1;
- mostViableMovesScores[0] = mostViableMovesScores[0]; // Needed to match.
- }
- }
- }
- }
-
- mostMovePoints = bestMovePointsForTarget[0];
- mostViableTargetsArray[0] = 0;
- mostViableTargetsNo = 1;
-
- for (i = 1; i < MAX_BATTLERS_COUNT; i++)
- {
- if (mostMovePoints == bestMovePointsForTarget[i])
- {
- mostViableTargetsArray[mostViableTargetsNo] = i;
- mostViableTargetsNo++;
- }
- if (mostMovePoints < bestMovePointsForTarget[i])
- {
- mostMovePoints = bestMovePointsForTarget[i];
- mostViableTargetsArray[0] = i;
- mostViableTargetsNo = 1;
- }
- }
-
- gBattlerTarget = mostViableTargetsArray[Random() % mostViableTargetsNo];
- return actionOrMoveIndex[gBattlerTarget];
-}
-
-static void BattleAI_DoAIProcessing(void)
-{
- while (AI_THINKING_STRUCT->aiState != AIState_FinishedProcessing)
- {
- switch (AI_THINKING_STRUCT->aiState)
- {
- case AIState_DoNotProcess: // Needed to match.
- break;
- case AIState_SettingUp:
- gAIScriptPtr = gBattleAI_ScriptsTable[AI_THINKING_STRUCT->aiLogicId]; // set AI ptr to logic ID.
- if (gBattleMons[sBattler_AI].pp[AI_THINKING_STRUCT->movesetIndex] == 0)
- {
- AI_THINKING_STRUCT->moveConsidered = 0;
- }
- else
- {
- AI_THINKING_STRUCT->moveConsidered = gBattleMons[sBattler_AI].moves[AI_THINKING_STRUCT->movesetIndex];
- }
- AI_THINKING_STRUCT->aiState++;
- break;
- case AIState_Processing:
- if (AI_THINKING_STRUCT->moveConsidered != 0)
- {
- sBattleAICmdTable[*gAIScriptPtr](); // Run AI command.
- }
- else
- {
- AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0;
- AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE;
- }
- if (AI_THINKING_STRUCT->aiAction & AI_ACTION_DONE)
- {
- AI_THINKING_STRUCT->movesetIndex++;
-
- if (AI_THINKING_STRUCT->movesetIndex < MAX_MON_MOVES && !(AI_THINKING_STRUCT->aiAction & AI_ACTION_DO_NOT_ATTACK))
- AI_THINKING_STRUCT->aiState = AIState_SettingUp;
- else
- AI_THINKING_STRUCT->aiState++;
-
- AI_THINKING_STRUCT->aiAction &= ~(AI_ACTION_DONE);
- }
- break;
- }
- }
-}
-
-static void RecordLastUsedMoveByTarget(void)
-{
- s32 i;
-
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget])
- break;
-
- if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == MOVE_NONE)
- {
- BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] = gLastMoves[gBattlerTarget];
- break;
- }
- }
-}
-
-void ClearBattlerMoveHistory(u8 battlerId)
-{
- s32 i;
-
- for (i = 0; i < MAX_MON_MOVES; i++)
- BATTLE_HISTORY->usedMoves[battlerId].moves[i] = MOVE_NONE;
-}
-
-void RecordAbilityBattle(u8 battlerId, u8 abilityId)
-{
- BATTLE_HISTORY->abilities[battlerId] = abilityId;
-}
-
-void ClearBattlerAbilityHistory(u8 battlerId)
-{
- BATTLE_HISTORY->abilities[battlerId] = ABILITY_NONE;
-}
-
-void RecordItemEffectBattle(u8 battlerId, u8 itemEffect)
-{
- BATTLE_HISTORY->itemEffects[battlerId] = itemEffect;
-}
-
-void ClearBattlerItemEffectHistory(u8 battlerId)
-{
- BATTLE_HISTORY->itemEffects[battlerId] = 0;
-}
-
-static void Cmd_if_random_less_than(void)
-{
- u16 random = Random();
-
- if (random % 256 < gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_random_greater_than(void)
-{
- u16 random = Random();
-
- if (random % 256 > gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_random_equal(void)
-{
- u16 random = Random();
-
- if (random % 256 == gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_random_not_equal(void)
-{
- u16 random = Random();
-
- if (random % 256 != gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_score(void)
-{
- AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += gAIScriptPtr[1]; // Add the result to the array of the move consider's score.
-
- if (AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] < 0) // If the score is negative, flatten it to 0.
- AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0;
-
- gAIScriptPtr += 2; // AI return.
-}
-
-static void Cmd_if_hp_less_than(void)
-{
- u16 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) < gAIScriptPtr[2])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
-}
-
-static void Cmd_if_hp_more_than(void)
-{
- u16 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) > gAIScriptPtr[2])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
-}
-
-static void Cmd_if_hp_equal(void)
-{
- u16 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) == gAIScriptPtr[2])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
-}
-
-static void Cmd_if_hp_not_equal(void)
-{
- u16 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) != gAIScriptPtr[2])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
-}
-
-static void Cmd_if_status(void)
-{
- u16 battlerId;
- u32 status;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- status = T1_READ_32(gAIScriptPtr + 2);
-
- if (gBattleMons[battlerId].status1 & status)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
-}
-
-static void Cmd_if_not_status(void)
-{
- u16 battlerId;
- u32 status;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- status = T1_READ_32(gAIScriptPtr + 2);
-
- if (!(gBattleMons[battlerId].status1 & status))
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
-}
-
-static void Cmd_if_status2(void)
-{
- u16 battlerId;
- u32 status;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- status = T1_READ_32(gAIScriptPtr + 2);
-
- if ((gBattleMons[battlerId].status2 & status))
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
-}
-
-static void Cmd_if_not_status2(void)
-{
- u16 battlerId;
- u32 status;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- status = T1_READ_32(gAIScriptPtr + 2);
-
- if (!(gBattleMons[battlerId].status2 & status))
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
-}
-
-static void Cmd_if_status3(void)
-{
- u16 battlerId;
- u32 status;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- status = T1_READ_32(gAIScriptPtr + 2);
-
- if (gStatuses3[battlerId] & status)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
-}
-
-static void Cmd_if_not_status3(void)
-{
- u16 battlerId;
- u32 status;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- status = T1_READ_32(gAIScriptPtr + 2);
-
- if (!(gStatuses3[battlerId] & status))
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
-}
-
-static void Cmd_if_side_affecting(void)
-{
- u16 battlerId;
- u32 side, status;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- side = GET_BATTLER_SIDE(battlerId);
- status = T1_READ_32(gAIScriptPtr + 2);
-
- if (gSideStatuses[side] & status)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
-}
-
-static void Cmd_if_not_side_affecting(void)
-{
- u16 battlerId;
- u32 side, status;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- side = GET_BATTLER_SIDE(battlerId);
- status = T1_READ_32(gAIScriptPtr + 2);
-
- if (!(gSideStatuses[side] & status))
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
-}
-
-static void Cmd_if_less_than(void)
-{
- if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_more_than(void)
-{
- if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_equal(void)
-{
- if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_not_equal(void)
-{
- if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_less_than_ptr(void)
-{
- const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
-
- if (AI_THINKING_STRUCT->funcResult < *value)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
- else
- gAIScriptPtr += 9;
-}
-
-static void Cmd_if_more_than_ptr(void)
-{
- const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
-
- if (AI_THINKING_STRUCT->funcResult > *value)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
- else
- gAIScriptPtr += 9;
-}
-
-static void Cmd_if_equal_ptr(void)
-{
- const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
-
- if (AI_THINKING_STRUCT->funcResult == *value)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
- else
- gAIScriptPtr += 9;
-}
-
-static void Cmd_if_not_equal_ptr(void)
-{
- const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
-
- if (AI_THINKING_STRUCT->funcResult != *value)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
- else
- gAIScriptPtr += 9;
-}
-
-static void Cmd_if_move(void)
-{
- u16 move = T1_READ_16(gAIScriptPtr + 1);
-
- if (AI_THINKING_STRUCT->moveConsidered == move)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
-}
-
-static void Cmd_if_not_move(void)
-{
- u16 move = T1_READ_16(gAIScriptPtr + 1);
-
- if (AI_THINKING_STRUCT->moveConsidered != move)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
-}
-
-static void Cmd_if_in_bytes(void)
-{
- const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1);
-
- while (*ptr != 0xFF)
- {
- if (AI_THINKING_STRUCT->funcResult == *ptr)
- {
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
- return;
- }
- ptr++;
- }
- gAIScriptPtr += 9;
-}
-
-static void Cmd_if_not_in_bytes(void)
-{
- const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1);
-
- while (*ptr != 0xFF)
- {
- if (AI_THINKING_STRUCT->funcResult == *ptr)
- {
- gAIScriptPtr += 9;
- return;
- }
- ptr++;
- }
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
-}
-
-static void Cmd_if_in_hwords(void)
-{
- const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1);
-
- while (*ptr != 0xFFFF)
- {
- if (AI_THINKING_STRUCT->funcResult == *ptr)
- {
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
- return;
- }
- ptr++;
- }
- gAIScriptPtr += 9;
-}
-
-static void Cmd_if_not_in_hwords(void)
-{
- const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1);
-
- while (*ptr != 0xFFFF)
- {
- if (AI_THINKING_STRUCT->funcResult == *ptr)
- {
- gAIScriptPtr += 9;
- return;
- }
- ptr++;
- }
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
-}
-
-static void Cmd_if_user_has_attacking_move(void)
-{
- s32 i;
-
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (gBattleMons[sBattler_AI].moves[i] != 0
- && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].power != 0)
- break;
- }
-
- if (i == MAX_MON_MOVES)
- gAIScriptPtr += 5;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
-}
-
-static void Cmd_if_user_has_no_attacking_moves(void)
-{
- s32 i;
-
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (gBattleMons[sBattler_AI].moves[i] != 0
- && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].power != 0)
- break;
- }
-
- if (i != MAX_MON_MOVES)
- gAIScriptPtr += 5;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
-}
-
-static void Cmd_get_turn_count(void)
-{
- AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter;
- gAIScriptPtr += 1;
-}
-
-static void Cmd_get_type(void)
-{
- u8 typeVar = gAIScriptPtr[1];
-
- switch (typeVar)
- {
- case AI_TYPE1_USER: // AI user primary type
- AI_THINKING_STRUCT->funcResult = gBattleMons[sBattler_AI].type1;
- break;
- case AI_TYPE1_TARGET: // target primary type
- AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type1;
- break;
- case AI_TYPE2_USER: // AI user secondary type
- AI_THINKING_STRUCT->funcResult = gBattleMons[sBattler_AI].type2;
- break;
- case AI_TYPE2_TARGET: // target secondary type
- AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerTarget].type2;
- break;
- case AI_TYPE_MOVE: // type of move being pointed to
- AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].type;
- break;
- }
- gAIScriptPtr += 2;
-}
-
-static u8 BattleAI_GetWantedBattler(u8 wantedBattler)
-{
- switch (wantedBattler)
- {
- case AI_USER:
- return sBattler_AI;
- case AI_TARGET:
- default:
- return gBattlerTarget;
- case AI_USER_PARTNER:
- return sBattler_AI ^ BIT_FLANK;
- case AI_TARGET_PARTNER:
- return gBattlerTarget ^ BIT_FLANK;
- }
-}
-
-static void Cmd_is_of_type(void)
-{
- u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
-
- if (IS_BATTLER_OF_TYPE(battlerId, gAIScriptPtr[2]))
- AI_THINKING_STRUCT->funcResult = TRUE;
- else
- AI_THINKING_STRUCT->funcResult = FALSE;
-
- gAIScriptPtr += 3;
-}
-
-static void Cmd_get_considered_move_power(void)
-{
- AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power;
- gAIScriptPtr += 1;
-}
-
-static void Cmd_get_how_powerful_move_is(void)
-{
- s32 i, checkedMove;
- s32 moveDmgs[MAX_MON_MOVES];
-
- for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++)
- {
- if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sIgnoredPowerfulMoveEffects[i])
- break;
- }
-
- if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1
- && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END)
- {
- gDynamicBasePower = 0;
- *(&gBattleStruct->dynamicMoveType) = 0;
- gBattleScripting.dmgMultiplier = 1;
- gMoveResultFlags = 0;
- gCritMultiplier = 1;
-
- // Considered move has power and is not in sIgnoredPowerfulMoveEffects
- // Check all other moves and calculate their power
- for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
- {
- for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++)
- {
- if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sIgnoredPowerfulMoveEffects[i])
- break;
- }
-
- if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE
- && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END
- && gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power > 1)
- {
- gCurrentMove = gBattleMons[sBattler_AI].moves[checkedMove];
- AI_CalcDmg(sBattler_AI, gBattlerTarget);
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
- moveDmgs[checkedMove] = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[checkedMove] / 100;
- if (moveDmgs[checkedMove] == 0)
- moveDmgs[checkedMove] = 1;
- }
- else
- {
- moveDmgs[checkedMove] = 0;
- }
- }
-
- // Is the considered move the most powerful move available?
- for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
- {
- if (moveDmgs[checkedMove] > moveDmgs[AI_THINKING_STRUCT->movesetIndex])
- break;
- }
-
- if (checkedMove == MAX_MON_MOVES)
- AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL;
- else
- AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL;
- }
- else
- {
- // Move has a power of 0/1, or is in the group sIgnoredPowerfulMoveEffects
- AI_THINKING_STRUCT->funcResult = MOVE_POWER_OTHER;
- }
-
- gAIScriptPtr++;
-}
-
-static void Cmd_get_last_used_battler_move(void)
-{
- if (gAIScriptPtr[1] == AI_USER)
- AI_THINKING_STRUCT->funcResult = gLastMoves[sBattler_AI];
- else
- AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerTarget];
-
- gAIScriptPtr += 2;
-}
-
-static void Cmd_if_equal_(void) // Same as if_equal.
-{
- if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_not_equal_(void) // Same as if_not_equal.
-{
- if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_user_goes(void)
-{
- if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) == gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_user_doesnt_go(void)
-{
- if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) != gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_nop_2A(void)
-{
-}
-
-static void Cmd_nop_2B(void)
-{
-}
-
-static void Cmd_count_usable_party_mons(void)
-{
- u8 battlerId;
- u8 battlerOnField1, battlerOnField2;
- struct Pokemon *party;
- s32 i;
-
- AI_THINKING_STRUCT->funcResult = 0;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
- party = gPlayerParty;
- else
- party = gEnemyParty;
-
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- {
- u32 position;
- battlerOnField1 = gBattlerPartyIndexes[battlerId];
- position = GetBattlerPosition(battlerId) ^ BIT_FLANK;
- battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)];
- }
- else // In singles there's only one battlerId by side.
- {
- battlerOnField1 = gBattlerPartyIndexes[battlerId];
- battlerOnField2 = gBattlerPartyIndexes[battlerId];
- }
-
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (i != battlerOnField1 && i != battlerOnField2
- && GetMonData(&party[i], MON_DATA_HP) != 0
- && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
- && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
- {
- AI_THINKING_STRUCT->funcResult++;
- }
- }
-
- gAIScriptPtr += 2;
-}
-
-static void Cmd_get_considered_move(void)
-{
- AI_THINKING_STRUCT->funcResult = AI_THINKING_STRUCT->moveConsidered;
- gAIScriptPtr += 1;
-}
-
-static void Cmd_get_considered_move_effect(void)
-{
- AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect;
- gAIScriptPtr += 1;
-}
-
-static void Cmd_get_ability(void)
-{
- u8 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if (gActiveBattler != battlerId)
- {
- if (BATTLE_HISTORY->abilities[battlerId] != 0)
- {
- AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[battlerId];
- gAIScriptPtr += 2;
- return;
- }
-
- // abilities that prevent fleeing.
- if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG
- || gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL
- || gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP)
- {
- AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability;
- gAIScriptPtr += 2;
- return;
- }
-
- if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE)
- {
- if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE)
- {
- // AI has no knowledge of opponent, so it guesses which ability.
- if (Random() & 1)
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0];
- else
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1];
- }
- else
- {
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; // It's definitely ability 1.
- }
- }
- else
- {
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1.
- }
- }
- else
- {
- // The AI knows its own ability.
- AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability;
- }
-
- gAIScriptPtr += 2;
-}
-
-static void Cmd_check_ability(void)
-{
- u32 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
- u32 ability = gAIScriptPtr[2];
-
- if (gAIScriptPtr[1] == AI_TARGET || gAIScriptPtr[1] == AI_TARGET_PARTNER)
- {
- if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE)
- {
- ability = BATTLE_HISTORY->abilities[battlerId];
- AI_THINKING_STRUCT->funcResult = ability;
- }
- // Abilities that prevent fleeing.
- else if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG
- || gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL
- || gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP)
- {
- ability = gBattleMons[battlerId].ability;
- }
- else if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE)
- {
- if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE)
- {
- u8 abilityDummyVariable = ability; // Needed to match.
- if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != abilityDummyVariable
- && gBaseStats[gBattleMons[battlerId].species].abilities[1] != abilityDummyVariable)
- {
- ability = gBaseStats[gBattleMons[battlerId].species].abilities[0];
- }
- else
- {
- ability = ABILITY_NONE;
- }
- }
- else
- {
- ability = gBaseStats[gBattleMons[battlerId].species].abilities[0];
- }
- }
- else
- {
- ability = gBaseStats[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1.
- }
- }
- else
- {
- // The AI knows its own or partner's ability.
- ability = gBattleMons[battlerId].ability;
- }
-
- if (ability == 0)
- AI_THINKING_STRUCT->funcResult = 2; // Unable to answer.
- else if (ability == gAIScriptPtr[2])
- AI_THINKING_STRUCT->funcResult = 1; // Pokemon has the ability we wanted to check.
- else
- AI_THINKING_STRUCT->funcResult = 0; // Pokemon doesn't have the ability we wanted to check.
-
- gAIScriptPtr += 3;
-}
-
-static void Cmd_get_highest_type_effectiveness(void)
-{
- s32 i;
- u8 *dynamicMoveType;
-
- gDynamicBasePower = 0;
- dynamicMoveType = &gBattleStruct->dynamicMoveType;
- *dynamicMoveType = 0;
- gBattleScripting.dmgMultiplier = 1;
- gMoveResultFlags = 0;
- gCritMultiplier = 1;
- AI_THINKING_STRUCT->funcResult = 0;
-
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- gBattleMoveDamage = 40;
- gCurrentMove = gBattleMons[sBattler_AI].moves[i];
-
- if (gCurrentMove != MOVE_NONE)
- {
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
-
- if (gBattleMoveDamage == 120) // Super effective STAB.
- gBattleMoveDamage = AI_EFFECTIVENESS_x2;
- if (gBattleMoveDamage == 240)
- gBattleMoveDamage = AI_EFFECTIVENESS_x4;
- if (gBattleMoveDamage == 30) // Not very effective STAB.
- gBattleMoveDamage = AI_EFFECTIVENESS_x0_5;
- if (gBattleMoveDamage == 15)
- gBattleMoveDamage = AI_EFFECTIVENESS_x0_25;
-
- if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
- gBattleMoveDamage = AI_EFFECTIVENESS_x0;
-
- if (AI_THINKING_STRUCT->funcResult < gBattleMoveDamage)
- AI_THINKING_STRUCT->funcResult = gBattleMoveDamage;
- }
- }
-
- gAIScriptPtr += 1;
-}
-
-static void Cmd_if_type_effectiveness(void)
-{
- u8 damageVar;
-
- gDynamicBasePower = 0;
- gBattleStruct->dynamicMoveType = 0;
- gBattleScripting.dmgMultiplier = 1;
- gMoveResultFlags = 0;
- gCritMultiplier = 1;
-
- gBattleMoveDamage = AI_EFFECTIVENESS_x1;
- gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
-
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
-
- if (gBattleMoveDamage == 120) // Super effective STAB.
- gBattleMoveDamage = AI_EFFECTIVENESS_x2;
- if (gBattleMoveDamage == 240)
- gBattleMoveDamage = AI_EFFECTIVENESS_x4;
- if (gBattleMoveDamage == 30) // Not very effective STAB.
- gBattleMoveDamage = AI_EFFECTIVENESS_x0_5;
- if (gBattleMoveDamage == 15)
- gBattleMoveDamage = AI_EFFECTIVENESS_x0_25;
-
- if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
- gBattleMoveDamage = AI_EFFECTIVENESS_x0;
-
- // Store gBattleMoveDamage in a u8 variable because gAIScriptPtr[1] is a u8.
- damageVar = gBattleMoveDamage;
-
- if (damageVar == gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_nop_32(void)
-{
-}
-
-static void Cmd_nop_33(void)
-{
-}
-
-static void Cmd_if_status_in_party(void)
-{
- struct Pokemon *party;
- s32 i;
- u32 statusToCompareTo;
- u8 battlerId;
-
- switch (gAIScriptPtr[1])
- {
- case AI_USER:
- battlerId = sBattler_AI;
- break;
- default:
- battlerId = gBattlerTarget;
- break;
- }
-
- party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
-
- statusToCompareTo = T1_READ_32(gAIScriptPtr + 2);
-
- for (i = 0; i < PARTY_SIZE; i++)
- {
- u16 species = GetMonData(&party[i], MON_DATA_SPECIES);
- u16 hp = GetMonData(&party[i], MON_DATA_HP);
- u32 status = GetMonData(&party[i], MON_DATA_STATUS);
-
- if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo)
- {
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
- return;
- }
- }
-
- gAIScriptPtr += 10;
-}
-
-static void Cmd_if_status_not_in_party(void)
-{
- struct Pokemon *party;
- s32 i;
- u32 statusToCompareTo;
- u8 battlerId;
-
- switch(gAIScriptPtr[1])
- {
- case 1:
- battlerId = sBattler_AI;
- break;
- default:
- battlerId = gBattlerTarget;
- break;
- }
-
- party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
-
- statusToCompareTo = T1_READ_32(gAIScriptPtr + 2);
-
- for (i = 0; i < PARTY_SIZE; i++)
- {
- u16 species = GetMonData(&party[i], MON_DATA_SPECIES);
- u16 hp = GetMonData(&party[i], MON_DATA_HP);
- u32 status = GetMonData(&party[i], MON_DATA_STATUS);
-
- if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo)
- {
- gAIScriptPtr += 10;
- #ifdef UBFIX
- return;
- #endif
- }
- }
-
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
-}
-
-static void Cmd_get_weather(void)
-{
- if (gBattleWeather & B_WEATHER_RAIN)
- AI_THINKING_STRUCT->funcResult = AI_WEATHER_RAIN;
- if (gBattleWeather & B_WEATHER_SANDSTORM)
- AI_THINKING_STRUCT->funcResult = AI_WEATHER_SANDSTORM;
- if (gBattleWeather & B_WEATHER_SUN)
- AI_THINKING_STRUCT->funcResult = AI_WEATHER_SUN;
- if (gBattleWeather & B_WEATHER_HAIL)
- AI_THINKING_STRUCT->funcResult = AI_WEATHER_HAIL;
-
- gAIScriptPtr += 1;
-}
-
-static void Cmd_if_effect(void)
-{
- if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_not_effect(void)
-{
- if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void Cmd_if_stat_level_less_than(void)
-{
- u32 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- else
- gAIScriptPtr += 8;
-}
-
-static void Cmd_if_stat_level_more_than(void)
-{
- u32 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- else
- gAIScriptPtr += 8;
-}
-
-static void Cmd_if_stat_level_equal(void)
-{
- u32 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- else
- gAIScriptPtr += 8;
-}
-
-static void Cmd_if_stat_level_not_equal(void)
-{
- u32 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- else
- gAIScriptPtr += 8;
-}
-
-static void Cmd_if_can_faint(void)
-{
- if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2)
- {
- gAIScriptPtr += 5;
- return;
- }
-
- gDynamicBasePower = 0;
- gBattleStruct->dynamicMoveType = 0;
- gBattleScripting.dmgMultiplier = 1;
- gMoveResultFlags = 0;
- gCritMultiplier = 1;
- gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
- AI_CalcDmg(sBattler_AI, gBattlerTarget);
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
-
- gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100;
-
- // Moves always do at least 1 damage.
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
-
- if (gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
- else
- gAIScriptPtr += 5;
-}
-
-static void Cmd_if_cant_faint(void)
-{
- if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2)
- {
- gAIScriptPtr += 5;
- return;
- }
-
- gDynamicBasePower = 0;
- gBattleStruct->dynamicMoveType = 0;
- gBattleScripting.dmgMultiplier = 1;
- gMoveResultFlags = 0;
- gCritMultiplier = 1;
- gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
- AI_CalcDmg(sBattler_AI, gBattlerTarget);
- TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
-
- gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100;
-
-#ifdef BUGFIX
- // Moves always do at least 1 damage.
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
-#endif
-
- if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
- else
- gAIScriptPtr += 5;
-}
-
-static void Cmd_if_has_move(void)
-{
- s32 i;
- const u16 *movePtr = (u16 *)(gAIScriptPtr + 2);
-
- switch (gAIScriptPtr[1])
- {
- case AI_USER:
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (gBattleMons[sBattler_AI].moves[i] == *movePtr)
- break;
- }
- if (i == MAX_MON_MOVES)
- gAIScriptPtr += 8;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- break;
- case AI_USER_PARTNER:
- if (gBattleMons[sBattler_AI ^ BIT_FLANK].hp == 0)
- {
- gAIScriptPtr += 8;
- break;
- }
- else
- {
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (gBattleMons[sBattler_AI ^ BIT_FLANK].moves[i] == *movePtr)
- break;
- }
- }
- if (i == MAX_MON_MOVES)
- gAIScriptPtr += 8;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- break;
- case AI_TARGET:
- case AI_TARGET_PARTNER:
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == *movePtr)
- break;
- }
- if (i == MAX_MON_MOVES)
- gAIScriptPtr += 8;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- break;
- }
-}
-
-static void Cmd_if_doesnt_have_move(void)
-{
- s32 i;
- const u16 *movePtr = (u16 *)(gAIScriptPtr + 2);
-
- switch(gAIScriptPtr[1])
- {
- case AI_USER:
- case AI_USER_PARTNER: // UB: no separate check for user partner.
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (gBattleMons[sBattler_AI].moves[i] == *movePtr)
- break;
- }
- if (i != MAX_MON_MOVES)
- gAIScriptPtr += 8;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- break;
- case AI_TARGET:
- case AI_TARGET_PARTNER:
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == *movePtr)
- break;
- }
- if (i != MAX_MON_MOVES)
- gAIScriptPtr += 8;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- break;
- }
-}
-
-static void Cmd_if_has_move_with_effect(void)
-{
- s32 i;
-
- switch (gAIScriptPtr[1])
- {
- case AI_USER:
- case AI_USER_PARTNER:
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].effect == gAIScriptPtr[2])
- break;
- }
- if (i == MAX_MON_MOVES)
- gAIScriptPtr += 7;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- break;
- case AI_TARGET:
- case AI_TARGET_PARTNER:
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- // BUG: checks sBattler_AI instead of gBattlerTarget.
- #ifndef BUGFIX
- if (gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i]].effect == gAIScriptPtr[2])
- break;
- #else
- if (gBattleMons[gBattlerTarget].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i]].effect == gAIScriptPtr[2])
- break;
- #endif
- }
- if (i == MAX_MON_MOVES)
- gAIScriptPtr += 7;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- break;
- }
-}
-
-static void Cmd_if_doesnt_have_move_with_effect(void)
-{
- s32 i;
-
- switch (gAIScriptPtr[1])
- {
- case AI_USER:
- case AI_USER_PARTNER:
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if(gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[gBattleMons[sBattler_AI].moves[i]].effect == gAIScriptPtr[2])
- break;
- }
- if (i != MAX_MON_MOVES)
- gAIScriptPtr += 7;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- break;
- case AI_TARGET:
- case AI_TARGET_PARTNER:
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i]].effect == gAIScriptPtr[2])
- break;
- }
- if (i != MAX_MON_MOVES)
- gAIScriptPtr += 7;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- break;
- }
-}
-
-static void Cmd_if_any_move_disabled_or_encored(void)
-{
- u8 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if (gAIScriptPtr[2] == 0)
- {
- if (gDisableStructs[battlerId].disabledMove == MOVE_NONE)
- gAIScriptPtr += 7;
- else
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- }
- else if (gAIScriptPtr[2] != 1)
- {
- gAIScriptPtr += 7;
- }
- else
- {
- if (gDisableStructs[battlerId].encoredMove != MOVE_NONE)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
- }
-}
-
-static void Cmd_if_curr_move_disabled_or_encored(void)
-{
- switch (gAIScriptPtr[1])
- {
- case 0:
- if (gDisableStructs[gActiveBattler].disabledMove == AI_THINKING_STRUCT->moveConsidered)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
- break;
- case 1:
- if (gDisableStructs[gActiveBattler].encoredMove == AI_THINKING_STRUCT->moveConsidered)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
- break;
- default:
- gAIScriptPtr += 6;
- break;
- }
-}
-
-static void Cmd_flee(void)
-{
- AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_FLEE | AI_ACTION_DO_NOT_ATTACK);
-}
-
-static void Cmd_if_random_safari_flee(void)
-{
- u8 safariFleeRate = gBattleStruct->safariEscapeFactor * 5; // Safari flee rate, from 0-20.
-
- if ((u8)(Random() % 100) < safariFleeRate)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
- else
- gAIScriptPtr += 5;
-}
-
-static void Cmd_watch(void)
-{
- AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK);
-}
-
-static void Cmd_get_hold_effect(void)
-{
- u8 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- if (gActiveBattler != battlerId)
- AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(BATTLE_HISTORY->itemEffects[battlerId]);
- else
- AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[battlerId].item);
-
- gAIScriptPtr += 2;
-}
-
-static void Cmd_if_holds_item(void)
-{
- u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
- u16 item;
- u8 itemLo, itemHi;
-
- if ((battlerId & BIT_SIDE) == (sBattler_AI & BIT_SIDE))
- item = gBattleMons[battlerId].item;
- else
- item = BATTLE_HISTORY->itemEffects[battlerId];
-
- itemHi = gAIScriptPtr[2];
- itemLo = gAIScriptPtr[3];
-
-#ifdef BUGFIX
- // This bug doesn't affect the vanilla game because this script command
- // is only used to check ITEM_PERSIM_BERRY, whose high byte happens to
- // be 0.
- if (((itemHi << 8) | itemLo) == item)
-#else
- if ((itemLo | itemHi) == item)
-#endif
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- else
- gAIScriptPtr += 8;
-}
-
-static void Cmd_get_gender(void)
-{
- u8 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerId].species, gBattleMons[battlerId].personality);
-
- gAIScriptPtr += 2;
-}
-
-static void Cmd_is_first_turn_for(void)
-{
- u8 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].isFirstTurn;
-
- gAIScriptPtr += 2;
-}
-
-static void Cmd_get_stockpile_count(void)
-{
- u8 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].stockpileCounter;
-
- gAIScriptPtr += 2;
-}
-
-static void Cmd_is_double_battle(void)
-{
- AI_THINKING_STRUCT->funcResult = gBattleTypeFlags & BATTLE_TYPE_DOUBLE;
-
- gAIScriptPtr += 1;
-}
-
-static void Cmd_get_used_held_item(void)
-{
- u8 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- AI_THINKING_STRUCT->funcResult = *(u8 *)&gBattleStruct->usedHeldItems[battlerId];
-
- gAIScriptPtr += 2;
-}
-
-static void Cmd_get_move_type_from_result(void)
-{
- AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].type;
-
- gAIScriptPtr += 1;
-}
-
-static void Cmd_get_move_power_from_result(void)
-{
- AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].power;
-
- gAIScriptPtr += 1;
-}
-
-static void Cmd_get_move_effect_from_result(void)
-{
- AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].effect;
-
- gAIScriptPtr += 1;
-}
-
-static void Cmd_get_protect_count(void)
-{
- u8 battlerId;
-
- if (gAIScriptPtr[1] == AI_USER)
- battlerId = sBattler_AI;
- else
- battlerId = gBattlerTarget;
-
- AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].protectUses;
-
- gAIScriptPtr += 2;
-}
-
-static void Cmd_nop_52(void)
-{
-}
-
-static void Cmd_nop_53(void)
-{
-}
-
-static void Cmd_nop_54(void)
-{
-}
-
-static void Cmd_nop_55(void)
-{
-}
-
-static void Cmd_nop_56(void)
-{
-}
-
-static void Cmd_nop_57(void)
-{
-}
-
-static void Cmd_call(void)
-{
- AIStackPushVar(gAIScriptPtr + 5);
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
-}
-
-static void Cmd_goto(void)
-{
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
-}
-
-static void Cmd_end(void)
-{
- if (AIStackPop() == 0)
- AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE;
-}
-
-static void Cmd_if_level_cond(void)
-{
- switch (gAIScriptPtr[1])
- {
- case 0: // greater than
- if (gBattleMons[sBattler_AI].level > gBattleMons[gBattlerTarget].level)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
- break;
- case 1: // less than
- if (gBattleMons[sBattler_AI].level < gBattleMons[gBattlerTarget].level)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
- break;
- case 2: // equal
- if (gBattleMons[sBattler_AI].level == gBattleMons[gBattlerTarget].level)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
- break;
- }
-}
-
-static void Cmd_if_target_taunted(void)
-{
- if (gDisableStructs[gBattlerTarget].tauntTimer != 0)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
- else
- gAIScriptPtr += 5;
-}
-
-static void Cmd_if_target_not_taunted(void)
-{
- if (gDisableStructs[gBattlerTarget].tauntTimer == 0)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
- else
- gAIScriptPtr += 5;
-}
-
-static void Cmd_if_target_is_ally(void)
-{
- if ((sBattler_AI & BIT_SIDE) == (gBattlerTarget & BIT_SIDE))
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
- else
- gAIScriptPtr += 5;
-}
-
-static void Cmd_if_flash_fired(void)
-{
- u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
-
- if (gBattleResources->flags->flags[battlerId] & RESOURCE_FLAG_FLASH_FIRE)
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
-}
-
-static void AIStackPushVar(const u8 *var)
-{
- gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = var;
-}
-
-static void AIStackPushVar_cursor(void)
-{
- gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = gAIScriptPtr;
-}
-
-static bool8 AIStackPop(void)
-{
- if (gBattleResources->AI_ScriptsStack->size != 0)
- {
- --gBattleResources->AI_ScriptsStack->size;
- gAIScriptPtr = gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size];
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index 169fa5f4f6..13cc828242 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -1,8 +1,11 @@
#include "global.h"
#include "battle.h"
+#include "battle_ai_main.h"
+#include "battle_ai_util.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_main.h"
+#include "battle_setup.h"
#include "data.h"
#include "pokemon.h"
#include "random.h"
@@ -14,8 +17,44 @@
// this file's functions
static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng);
-static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent);
+static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent);
static bool8 ShouldUseItem(void);
+static bool32 AI_ShouldHeal(u32 healAmount);
+static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount);
+
+void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId)
+{
+ if (BATTLE_TWO_VS_ONE_OPPONENT && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT)
+ {
+ *firstId = 0, *lastId = PARTY_SIZE;
+ }
+ else if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_TOWER_LINK_MULTI))
+ {
+ if ((battlerId & BIT_FLANK) == B_FLANK_LEFT)
+ *firstId = 0, *lastId = PARTY_SIZE / 2;
+ else
+ *firstId = PARTY_SIZE / 2, *lastId = PARTY_SIZE;
+ }
+ else
+ {
+ *firstId = 0, *lastId = PARTY_SIZE;
+ }
+}
+
+static bool8 ShouldSwitchIfAllBadMoves(void)
+{
+ if (gBattleResources->ai->switchMon)
+ {
+ gBattleResources->ai->switchMon = 0;
+ *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
+ BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
static bool8 ShouldSwitchIfPerishSong(void)
{
@@ -36,7 +75,6 @@ static bool8 ShouldSwitchIfWonderGuard(void)
{
u8 opposingPosition;
u8 opposingBattler;
- u8 moveFlags;
s32 i, j;
s32 firstId;
s32 lastId; // + 1
@@ -48,33 +86,22 @@ static bool8 ShouldSwitchIfWonderGuard(void)
opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(gActiveBattler));
- if (gBattleMons[GetBattlerAtPosition(opposingPosition)].ability != ABILITY_WONDER_GUARD)
+ if (GetBattlerAbility(GetBattlerAtPosition(opposingPosition)) != ABILITY_WONDER_GUARD)
return FALSE;
// Check if Pokemon has a super effective move.
for (opposingBattler = GetBattlerAtPosition(opposingPosition), i = 0; i < MAX_MON_MOVES; i++)
{
move = gBattleMons[gActiveBattler].moves[i];
- if (move == MOVE_NONE)
- continue;
-
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
- if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
- return FALSE;
+ if (move != MOVE_NONE)
+ {
+ if (AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0))
+ return FALSE;
+ }
}
// Get party information.
- if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
- {
- if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
- firstId = 0, lastId = PARTY_SIZE / 2;
- else
- firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
- }
- else
- {
- firstId = 0, lastId = PARTY_SIZE;
- }
+ GetAIPartyIndexes(gActiveBattler, &firstId, &lastId);
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
party = gPlayerParty;
@@ -93,22 +120,18 @@ static bool8 ShouldSwitchIfWonderGuard(void)
if (i == gBattlerPartyIndexes[gActiveBattler])
continue;
- GetMonData(&party[i], MON_DATA_SPECIES); // Unused return value.
- GetMonData(&party[i], MON_DATA_ABILITY_NUM); // Unused return value.
-
for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < MAX_MON_MOVES; j++)
{
move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
- if (move == MOVE_NONE)
- continue;
-
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
- if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % 3 < 2)
+ if (move != MOVE_NONE)
{
- // We found a mon.
- *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i;
- BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0);
- return TRUE;
+ if (AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0) && Random() % 3 < 2)
+ {
+ // We found a mon.
+ *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i;
+ BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
}
}
}
@@ -119,7 +142,7 @@ static bool8 ShouldSwitchIfWonderGuard(void)
static bool8 FindMonThatAbsorbsOpponentsMove(void)
{
u8 battlerIn1, battlerIn2;
- u8 absorbingTypeAbility;
+ u16 absorbingTypeAbility;
s32 firstId;
s32 lastId; // + 1
struct Pokemon *party;
@@ -157,20 +180,10 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
else
return FALSE;
- if (gBattleMons[gActiveBattler].ability == absorbingTypeAbility)
+ if (AI_GetAbility(gActiveBattler) == absorbingTypeAbility)
return FALSE;
- if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
- {
- if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
- firstId = 0, lastId = PARTY_SIZE / 2;
- else
- firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
- }
- else
- {
- firstId = 0, lastId = PARTY_SIZE;
- }
+ GetAIPartyIndexes(gActiveBattler, &firstId, &lastId);
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
party = gPlayerParty;
@@ -180,7 +193,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
for (i = firstId; i < lastId; i++)
{
u16 species;
- u8 monAbility;
+ u16 monAbility;
if (GetMonData(&party[i], MON_DATA_HP) == 0)
continue;
@@ -219,7 +232,7 @@ static bool8 ShouldSwitchIfNaturalCure(void)
{
if (!(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP))
return FALSE;
- if (gBattleMons[gActiveBattler].ability != ABILITY_NATURAL_CURE)
+ if (AI_GetAbility(gActiveBattler) != ABILITY_NATURAL_CURE)
return FALSE;
if (gBattleMons[gActiveBattler].hp < gBattleMons[gActiveBattler].maxHP / 2)
return FALSE;
@@ -260,7 +273,6 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
u8 opposingPosition;
u8 opposingBattler;
s32 i;
- u8 moveFlags;
u16 move;
opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(gActiveBattler));
@@ -274,8 +286,7 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
if (move == MOVE_NONE)
continue;
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
- if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ if (AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0))
{
if (noRng)
return TRUE;
@@ -297,8 +308,7 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
if (move == MOVE_NONE)
continue;
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
- if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ if (AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0))
{
if (noRng)
return TRUE;
@@ -325,7 +335,7 @@ static bool8 AreStatsRaised(void)
return (buffedStatsValue > 3);
}
-static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
+static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent)
{
u8 battlerIn1, battlerIn2;
s32 firstId;
@@ -333,7 +343,6 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
struct Pokemon *party;
s32 i, j;
u16 move;
- u8 moveFlags;
if (gLastLandedMoves[gActiveBattler] == MOVE_NONE)
return FALSE;
@@ -358,17 +367,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
battlerIn2 = gActiveBattler;
}
- if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
- {
- if ((gActiveBattler & BIT_FLANK) == 0)
- firstId = 0, lastId = PARTY_SIZE / 2;
- else
- firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
- }
- else
- {
- firstId = 0, lastId = PARTY_SIZE;
- }
+ GetAIPartyIndexes(gActiveBattler, &firstId, &lastId);
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
party = gPlayerParty;
@@ -378,7 +377,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
for (i = firstId; i < lastId; i++)
{
u16 species;
- u8 monAbility;
+ u16 monAbility;
if (GetMonData(&party[i], MON_DATA_HP) == 0)
continue;
@@ -401,8 +400,8 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
else
monAbility = gBaseStats[species].abilities[0];
- moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBattler], species, monAbility);
- if (moveFlags & flags)
+ CalcPartyMonTypeEffectivenessMultiplier(gLastLandedMoves[gActiveBattler], species, monAbility);
+ if (gMoveResultFlags & flags)
{
battlerIn1 = gLastHitBy[gActiveBattler];
@@ -412,8 +411,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
if (move == 0)
continue;
- moveFlags = AI_TypeCalc(move, gBattleMons[battlerIn1].species, gBattleMons[battlerIn1].ability);
- if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % moduloPercent == 0)
+ if (AI_GetTypeEffectiveness(move, gActiveBattler, battlerIn1) >= UQ_4_12(2.0) && Random() % moduloPercent == 0)
{
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i;
BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_SWITCH, 0);
@@ -426,60 +424,41 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
return FALSE;
}
-static bool8 ShouldSwitch(void)
+bool32 ShouldSwitch(void)
{
u8 battlerIn1, battlerIn2;
- u8 *activeBattlerPtr; // Needed to match.
s32 firstId;
s32 lastId; // + 1
struct Pokemon *party;
s32 i;
s32 availableToSwitch;
- if (gBattleMons[*(activeBattlerPtr = &gActiveBattler)].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
+ if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
return FALSE;
if (gStatuses3[gActiveBattler] & STATUS3_ROOTED)
return FALSE;
- if (ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG))
+ if (IsAbilityPreventingEscape(gActiveBattler))
return FALSE;
- if (ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) // Misses the flying type and Levitate check.
- return FALSE;
- if (ABILITY_ON_FIELD2(ABILITY_MAGNET_PULL))
- {
- if (gBattleMons[gActiveBattler].type1 == TYPE_STEEL)
- return FALSE;
- if (gBattleMons[gActiveBattler].type2 == TYPE_STEEL)
- return FALSE;
- }
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
return FALSE;
availableToSwitch = 0;
+
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- battlerIn1 = *activeBattlerPtr;
- if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(*activeBattlerPtr) ^ BIT_FLANK)])
- battlerIn2 = *activeBattlerPtr;
+ battlerIn1 = gActiveBattler;
+ if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)])
+ battlerIn2 = gActiveBattler;
else
- battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(*activeBattlerPtr) ^ BIT_FLANK);
+ battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK);
}
else
{
- battlerIn1 = *activeBattlerPtr;
- battlerIn2 = *activeBattlerPtr;
+ battlerIn1 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
}
- if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
- {
- if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
- firstId = 0, lastId = PARTY_SIZE / 2;
- else
- firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
- }
- else
- {
- firstId = 0, lastId = PARTY_SIZE;
- }
+ GetAIPartyIndexes(gActiveBattler, &firstId, &lastId);
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
party = gPlayerParty;
@@ -508,6 +487,8 @@ static bool8 ShouldSwitch(void)
if (availableToSwitch == 0)
return FALSE;
+ if (ShouldSwitchIfAllBadMoves())
+ return TRUE;
if (ShouldSwitchIfPerishSong())
return TRUE;
if (ShouldSwitchIfWonderGuard())
@@ -560,17 +541,7 @@ void AI_TrySwitchOrUseItem(void)
battlerIn2 = GetBattlerAtPosition(battlerIdentity ^ BIT_FLANK);
}
- if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
- {
- if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
- firstId = 0, lastId = PARTY_SIZE / 2;
- else
- firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
- }
- else
- {
- firstId = 0, lastId = PARTY_SIZE;
- }
+ GetAIPartyIndexes(gActiveBattler, &firstId, &lastId);
for (monToSwitchId = firstId; monToSwitchId < lastId; monToSwitchId++)
{
@@ -604,46 +575,142 @@ void AI_TrySwitchOrUseItem(void)
BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_USE_MOVE, (gActiveBattler ^ BIT_SIDE) << 8);
}
-static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8 *var)
+// If there are two(or more) mons to choose from, always choose one that has baton pass
+// as most often it can't do much on its own.
+static u32 GetBestMonBatonPass(struct Pokemon *party, int firstId, int lastId, u8 invalidMons, int aliveCount)
{
- s32 i = 0;
+ int i, j, bits = 0;
- while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ for (i = firstId; i < lastId; i++)
{
- if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
- {
- i += 3;
+ if (invalidMons & gBitTable[i])
continue;
- }
- else if (TYPE_EFFECT_ATK_TYPE(i) == atkType)
+
+ for (j = 0; j < MAX_MON_MOVES; j++)
{
- // Check type1.
- if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
- *var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / TYPE_MUL_NORMAL;
- // Check type2.
- if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
- *var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / TYPE_MUL_NORMAL;
+ if (GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL) == MOVE_BATON_PASS)
+ {
+ bits |= gBitTable[i];
+ break;
+ }
}
- i += 3;
}
+
+ if ((aliveCount == 2 || (aliveCount > 2 && Random() % 3 == 0)) && bits)
+ {
+ do
+ {
+ i = (Random() % (lastId - firstId)) + firstId;
+ } while (!(bits & gBitTable[i]));
+ return i;
+ }
+
+ return PARTY_SIZE;
+}
+
+static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, u8 invalidMons, u32 opposingBattler)
+{
+ int i, bits = 0;
+
+ while (bits != 0x3F) // All mons were checked.
+ {
+ u32 bestResist = UQ_4_12(1.0);
+ int bestMonId = PARTY_SIZE;
+ // Find the mon whose type is the most suitable defensively.
+ for (i = firstId; i < lastId; i++)
+ {
+ if (!(gBitTable[i] & invalidMons) && !(gBitTable[i] & bits))
+ {
+ u16 species = GetMonData(&party[i], MON_DATA_SPECIES);
+ u32 typeEffectiveness = UQ_4_12(1.0);
+
+ u8 atkType1 = gBattleMons[opposingBattler].type1;
+ u8 atkType2 = gBattleMons[opposingBattler].type2;
+ u8 defType1 = gBaseStats[species].type1;
+ u8 defType2 = gBaseStats[species].type2;
+
+ typeEffectiveness *= GetTypeModifier(atkType1, defType1);
+ if (atkType2 != atkType1)
+ typeEffectiveness *= GetTypeModifier(atkType2, defType1);
+ if (defType2 != defType1)
+ {
+ typeEffectiveness *= GetTypeModifier(atkType1, defType2);
+ if (atkType2 != atkType1)
+ typeEffectiveness *= GetTypeModifier(atkType2, defType2);
+ }
+ if (typeEffectiveness < bestResist)
+ {
+ bestResist = typeEffectiveness;
+ bestMonId = i;
+ }
+ }
+ }
+
+ // Ok, we know the mon has the right typing but does it have at least one super effective move?
+ if (bestMonId != PARTY_SIZE)
+ {
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ u32 move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i);
+ if (move != MOVE_NONE && AI_GetTypeEffectiveness(move, gActiveBattler, opposingBattler) >= UQ_4_12(2.0))
+ break;
+ }
+
+ if (i != MAX_MON_MOVES)
+ return bestMonId; // Has both the typing and at least one super effective move.
+
+ bits |= gBitTable[bestMonId]; // Sorry buddy, we want something better.
+ }
+ else
+ {
+ bits = 0x3F; // No viable mon to switch.
+ }
+ }
+
+ return PARTY_SIZE;
+}
+
+static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 invalidMons, u32 opposingBattler)
+{
+ int i, j;
+ int bestDmg = 0;
+ int bestMonId = PARTY_SIZE;
+
+ gMoveResultFlags = 0;
+ // If we couldn't find the best mon in terms of typing, find the one that deals most damage.
+ for (i = firstId; i < lastId; i++)
+ {
+ if (gBitTable[i] & invalidMons)
+ continue;
+
+ for (j = 0; j < MAX_MON_MOVES; j++)
+ {
+ u32 move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
+ if (move != MOVE_NONE && gBattleMoves[move].power != 0)
+ {
+ s32 dmg = AI_CalcPartyMonDamage(move, gActiveBattler, opposingBattler, &party[i]);
+ if (bestDmg < dmg)
+ {
+ bestDmg = dmg;
+ bestMonId = i;
+ }
+ }
+ }
+ }
+
+ return bestMonId;
}
u8 GetMostSuitableMonToSwitchInto(void)
{
- u8 opposingBattler;
-#ifdef BUGFIX
- s32 bestDmg;
-#else
- u8 bestDmg; // Note: should be changed to s32 since it is also used for the actual damage done later
-#endif
- u8 bestMonId;
- u8 battlerIn1, battlerIn2;
- s32 firstId;
- s32 lastId; // + 1
+ u32 opposingBattler = 0;
+ u32 bestMonId = 0;
+ u8 battlerIn1 = 0, battlerIn2 = 0;
+ s32 firstId = 0;
+ s32 lastId = 0; // + 1
struct Pokemon *party;
- s32 i, j;
- u8 invalidMons;
- u16 move;
+ s32 i, j, aliveCount = 0;
+ u8 invalidMons = 0;
if (*(gBattleStruct->monToSwitchIntoId + gActiveBattler) != PARTY_SIZE)
return *(gBattleStruct->monToSwitchIntoId + gActiveBattler);
@@ -658,8 +725,7 @@ u8 GetMostSuitableMonToSwitchInto(void)
else
battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK);
- // UB: It considers the opponent only player's side even though it can battle alongside player.
- opposingBattler = Random() & BIT_FLANK;
+ opposingBattler = BATTLE_OPPOSITE(battlerIn1);
if (gAbsentBattlerFlags & gBitTable[opposingBattler])
opposingBattler ^= BIT_FLANK;
}
@@ -670,128 +736,44 @@ u8 GetMostSuitableMonToSwitchInto(void)
battlerIn2 = gActiveBattler;
}
- if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
- {
- if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
- firstId = 0, lastId = PARTY_SIZE / 2;
- else
- firstId = PARTY_SIZE / 2, lastId = PARTY_SIZE;
- }
- else
- {
- firstId = 0, lastId = PARTY_SIZE;
- }
+ GetAIPartyIndexes(gActiveBattler, &firstId, &lastId);
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
- invalidMons = 0;
-
- while (invalidMons != 0x3F) // All mons are invalid.
- {
- bestDmg = TYPE_MUL_NO_EFFECT;
- bestMonId = PARTY_SIZE;
- // Find the mon whose type is the most suitable offensively.
- for (i = firstId; i < lastId; i++)
- {
- u16 species = GetMonData(&party[i], MON_DATA_SPECIES);
- if (species != SPECIES_NONE
- && GetMonData(&party[i], MON_DATA_HP) != 0
- && !(gBitTable[i] & invalidMons)
- && gBattlerPartyIndexes[battlerIn1] != i
- && gBattlerPartyIndexes[battlerIn2] != i
- && i != *(gBattleStruct->monToSwitchIntoId + battlerIn1)
- && i != *(gBattleStruct->monToSwitchIntoId + battlerIn2))
- {
- u8 type1 = gBaseStats[species].type1;
- u8 type2 = gBaseStats[species].type2;
- u8 typeDmg = TYPE_MUL_NORMAL;
- ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type1, type1, type2, &typeDmg);
- ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type2, type1, type2, &typeDmg);
-
- /* Possible bug: this comparison gives the type that takes the most damage, when
- a "good" AI would want to select the type that takes the least damage. Unknown if this
- is a legitimate mistake or if it's an intentional, if weird, design choice */
- if (bestDmg < typeDmg)
- {
- bestDmg = typeDmg;
- bestMonId = i;
- }
- }
- else
- {
- invalidMons |= gBitTable[i];
- }
- }
-
- // Ok, we know the mon has the right typing but does it have at least one super effective move?
- if (bestMonId != PARTY_SIZE)
- {
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i);
- if (move != MOVE_NONE && TypeCalc(move, gActiveBattler, opposingBattler) & MOVE_RESULT_SUPER_EFFECTIVE)
- break;
- }
-
- if (i != MAX_MON_MOVES)
- return bestMonId; // Has both the typing and at least one super effective move.
-
- invalidMons |= gBitTable[bestMonId]; // Sorry buddy, we want something better.
- }
- else
- {
- invalidMons = 0x3F; // No viable mon to switch.
- }
- }
-
- gDynamicBasePower = 0;
- gBattleStruct->dynamicMoveType = 0;
- gBattleScripting.dmgMultiplier = 1;
- gMoveResultFlags = 0;
- gCritMultiplier = 1;
- bestDmg = 0;
- bestMonId = 6;
-
- // If we couldn't find the best mon in terms of typing, find the one that deals most damage.
+ // Get invalid slots ids.
for (i = firstId; i < lastId; i++)
{
- if ((u16)(GetMonData(&party[i], MON_DATA_SPECIES)) == SPECIES_NONE)
- continue;
- if (GetMonData(&party[i], MON_DATA_HP) == 0)
- continue;
- if (gBattlerPartyIndexes[battlerIn1] == i)
- continue;
- if (gBattlerPartyIndexes[battlerIn2] == i)
- continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
- continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
- continue;
-
- for (j = 0; j < MAX_MON_MOVES; j++)
- {
- move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
- gBattleMoveDamage = 0;
- if (move != MOVE_NONE && gBattleMoves[move].power != 1)
- {
- AI_CalcDmg(gActiveBattler, opposingBattler);
- TypeCalc(move, gActiveBattler, opposingBattler);
- }
- if (bestDmg < gBattleMoveDamage)
- {
- bestDmg = gBattleMoveDamage;
- bestMonId = i;
- }
- }
+ if (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE
+ || GetMonData(&party[i], MON_DATA_HP) == 0
+ || gBattlerPartyIndexes[battlerIn1] == i
+ || gBattlerPartyIndexes[battlerIn2] == i
+ || i == *(gBattleStruct->monToSwitchIntoId + battlerIn1)
+ || i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)
+ || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(gActiveBattler, opposingBattler))) // While not really invalid per say, not really wise to switch into this mon.
+ invalidMons |= gBitTable[i];
+ else
+ aliveCount++;
}
- return bestMonId;
+ bestMonId = GetBestMonBatonPass(party, firstId, lastId, invalidMons, aliveCount);
+ if (bestMonId != PARTY_SIZE)
+ return bestMonId;
+
+ bestMonId = GetBestMonTypeMatchup(party, firstId, lastId, invalidMons, opposingBattler);
+ if (bestMonId != PARTY_SIZE)
+ return bestMonId;
+
+ bestMonId = GetBestMonDmg(party, firstId, lastId, invalidMons, opposingBattler);
+ if (bestMonId != PARTY_SIZE)
+ return bestMonId;
+
+ return PARTY_SIZE;
}
-static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u16 as item Id argument
+static u8 GetAI_ItemType(u16 itemId, const u8 *itemEffect)
{
if (itemId == ITEM_FULL_RESTORE)
return AI_ITEM_FULL_RESTORE;
@@ -799,7 +781,7 @@ static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u
return AI_ITEM_HEAL_HP;
else if (itemEffect[3] & ITEM3_STATUS_ALL)
return AI_ITEM_CURE_CONDITION;
- else if (itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK) || itemEffect[1] != 0 || itemEffect[2] != 0)
+ else if ((itemEffect[0] & ITEM0_DIRE_HIT) || itemEffect[1])
return AI_ITEM_X_STAT;
else if (itemEffect[3] & ITEM3_GUARD_SPEC)
return AI_ITEM_GUARD_SPEC;
@@ -807,6 +789,25 @@ static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u
return AI_ITEM_NOT_RECOGNIZABLE;
}
+static bool32 AiExpectsToFaintPlayer(void)
+{
+ bool32 canFaintPlayer;
+ u32 i;
+ u8 target = gBattleStruct->aiChosenTarget[gActiveBattler];
+
+ if (gBattleStruct->aiMoveOrAction[gActiveBattler] > 3)
+ return FALSE; // AI not planning to use move
+
+ if (GetBattlerSide(target) != GetBattlerSide(gActiveBattler)
+ && CanIndexMoveFaintTarget(gActiveBattler, target, gBattleStruct->aiMoveOrAction[gActiveBattler], 0)
+ && AI_WhoStrikesFirst(gActiveBattler, target, GetAIChosenMove(gActiveBattler)) == AI_IS_FASTER) {
+ // We expect to faint the target and move first -> dont use an item
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static bool8 ShouldUseItem(void)
{
struct Pokemon *party;
@@ -814,7 +815,15 @@ static bool8 ShouldUseItem(void)
u8 validMons = 0;
bool8 shouldUse = FALSE;
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT)
+ // If teaming up with player and Pokemon is on the right, or Pokemon is currently held by Sky Drop
+ if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT)
+ || gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED)
+ return FALSE;
+
+ if (gStatuses3[gActiveBattler] & STATUS3_EMBARGO)
+ return FALSE;
+
+ if (AiExpectsToFaintPlayer())
return FALSE;
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
@@ -847,7 +856,7 @@ static bool8 ShouldUseItem(void)
if (gItemEffectTable[item - ITEM_POTION] == NULL)
continue;
- if (item == ITEM_ENIGMA_BERRY)
+ if (item == ITEM_ENIGMA_BERRY_E_READER)
itemEffects = gSaveBlock1Ptr->enigmaBerry.itemEffect;
else
itemEffects = gItemEffectTable[item - ITEM_POTION];
@@ -857,20 +866,10 @@ static bool8 ShouldUseItem(void)
switch (*(gBattleStruct->AI_itemType + gActiveBattler / 2))
{
case AI_ITEM_FULL_RESTORE:
- if (gBattleMons[gActiveBattler].hp >= gBattleMons[gActiveBattler].maxHP / 4)
- break;
- if (gBattleMons[gActiveBattler].hp == 0)
- break;
- shouldUse = TRUE;
+ shouldUse = AI_ShouldHeal(0);
break;
case AI_ITEM_HEAL_HP:
- paramOffset = GetItemEffectParamOffset(item, 4, 4);
- if (paramOffset == 0)
- break;
- if (gBattleMons[gActiveBattler].hp == 0)
- break;
- if (gBattleMons[gActiveBattler].hp < gBattleMons[gActiveBattler].maxHP / 4 || gBattleMons[gActiveBattler].maxHP - gBattleMons[gActiveBattler].hp > itemEffects[paramOffset])
- shouldUse = TRUE;
+ shouldUse = AI_ShouldHeal(itemEffects[GetItemEffectParamOffset(item, 4, 4)]);
break;
case AI_ITEM_CURE_CONDITION:
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0;
@@ -910,15 +909,17 @@ static bool8 ShouldUseItem(void)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) = 0;
if (gDisableStructs[gActiveBattler].isFirstTurn == 0)
break;
- if (itemEffects[0] & ITEM0_X_ATTACK)
+ if (itemEffects[1] & ITEM1_X_ATTACK)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_ATTACK);
- if (itemEffects[1] & ITEM1_X_DEFEND)
+ if (itemEffects[1] & ITEM1_X_DEFENSE)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_DEFEND);
if (itemEffects[1] & ITEM1_X_SPEED)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPEED);
- if (itemEffects[2] & ITEM2_X_SPATK)
+ if (itemEffects[1] & ITEM1_X_SPATK)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPATK);
- if (itemEffects[2] & ITEM2_X_ACCURACY)
+ if (itemEffects[1] & ITEM1_X_SPDEF)
+ *(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_SPDEF);
+ if (itemEffects[1] & ITEM1_X_ACCURACY)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_X_ACCURACY);
if (itemEffects[0] & ITEM0_DIRE_HIT)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= (1 << AI_DIRE_HIT);
@@ -944,3 +945,32 @@ static bool8 ShouldUseItem(void)
return FALSE;
}
+
+static bool32 AI_ShouldHeal(u32 healAmount)
+{
+ bool32 shouldHeal = FALSE;
+
+ if (gBattleMons[gActiveBattler].hp < gBattleMons[gActiveBattler].maxHP / 4
+ || gBattleMons[gActiveBattler].hp == 0
+ || (healAmount != 0 && gBattleMons[gActiveBattler].maxHP - gBattleMons[gActiveBattler].hp > healAmount)) {
+ // We have low enough HP to consider healing
+ shouldHeal = !AI_OpponentCanFaintAiWithMod(healAmount); // if target can kill us even after we heal, why bother
+ }
+
+ return shouldHeal;
+}
+
+static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount)
+{
+ u32 i;
+ // Check special cases to NOT heal
+ for (i = 0; i < gBattlersCount; i++) {
+ if (GetBattlerSide(i) == B_SIDE_PLAYER) {
+ if (CanTargetFaintAiWithMod(i, gActiveBattler, healAmount, 0)) {
+ // Target is expected to faint us
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c
new file mode 100644
index 0000000000..25c7f3b9d5
--- /dev/null
+++ b/src/battle_ai_util.c
@@ -0,0 +1,3635 @@
+#include "global.h"
+#include "battle_z_move.h"
+#include "malloc.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_ai_util.h"
+#include "battle_ai_main.h"
+#include "battle_ai_switch_items.h"
+#include "battle_factory.h"
+#include "battle_setup.h"
+#include "data.h"
+#include "item.h"
+#include "pokemon.h"
+#include "random.h"
+#include "recorded_battle.h"
+#include "util.h"
+#include "constants/abilities.h"
+#include "constants/battle_ai.h"
+#include "constants/battle_move_effects.h"
+#include "constants/hold_effects.h"
+#include "constants/moves.h"
+#include "constants/items.h"
+
+static u32 AI_GetEffectiveness(u16 multiplier);
+
+// Const Data
+static const s8 sAiAbilityRatings[ABILITIES_COUNT] =
+{
+ [ABILITY_ADAPTABILITY] = 8,
+ [ABILITY_AFTERMATH] = 5,
+ [ABILITY_AERILATE] = 8,
+ [ABILITY_AIR_LOCK] = 5,
+ [ABILITY_ANALYTIC] = 5,
+ [ABILITY_ANGER_POINT] = 4,
+ [ABILITY_ANTICIPATION] = 2,
+ [ABILITY_ARENA_TRAP] = 9,
+ [ABILITY_AROMA_VEIL] = 3,
+ [ABILITY_AURA_BREAK] = 3,
+ [ABILITY_BAD_DREAMS] = 4,
+ [ABILITY_BATTERY] = 0,
+ [ABILITY_BATTLE_ARMOR] = 2,
+ [ABILITY_BATTLE_BOND] = 6,
+ [ABILITY_BEAST_BOOST] = 7,
+ [ABILITY_BERSERK] = 5,
+ [ABILITY_BIG_PECKS] = 1,
+ [ABILITY_BLAZE] = 5,
+ [ABILITY_BULLETPROOF] = 7,
+ [ABILITY_CHEEK_POUCH] = 4,
+ [ABILITY_CHLOROPHYLL] = 6,
+ [ABILITY_CLEAR_BODY] = 4,
+ [ABILITY_CLOUD_NINE] = 5,
+ [ABILITY_COLOR_CHANGE] = 2,
+ [ABILITY_COMATOSE] = 6,
+ [ABILITY_COMPETITIVE] = 5,
+ [ABILITY_COMPOUND_EYES] = 7,
+ [ABILITY_CONTRARY] = 8,
+ [ABILITY_CORROSION] = 5,
+ [ABILITY_CURSED_BODY] = 4,
+ [ABILITY_CUTE_CHARM] = 2,
+ [ABILITY_DAMP] = 2,
+ [ABILITY_DANCER] = 5,
+ [ABILITY_DARK_AURA] = 6,
+ [ABILITY_DAZZLING] = 5,
+ [ABILITY_DEFEATIST] = -1,
+ [ABILITY_DEFIANT] = 5,
+ [ABILITY_DELTA_STREAM] = 10,
+ [ABILITY_DESOLATE_LAND] = 10,
+ [ABILITY_DISGUISE] = 8,
+ [ABILITY_DOWNLOAD] = 7,
+ [ABILITY_DRIZZLE] = 9,
+ [ABILITY_DROUGHT] = 9,
+ [ABILITY_DRY_SKIN] = 6,
+ [ABILITY_EARLY_BIRD] = 4,
+ [ABILITY_EFFECT_SPORE] = 4,
+ [ABILITY_ELECTRIC_SURGE] = 8,
+ [ABILITY_EMERGENCY_EXIT] = 3,
+ [ABILITY_FAIRY_AURA] = 6,
+ [ABILITY_FILTER] = 6,
+ [ABILITY_FLAME_BODY] = 4,
+ [ABILITY_FLARE_BOOST] = 5,
+ [ABILITY_FLASH_FIRE] = 6,
+ [ABILITY_FLOWER_GIFT] = 4,
+ [ABILITY_FLOWER_VEIL] = 0,
+ [ABILITY_FLUFFY] = 5,
+ [ABILITY_FORECAST] = 6,
+ [ABILITY_FOREWARN] = 2,
+ [ABILITY_FRIEND_GUARD] = 0,
+ [ABILITY_FRISK] = 3,
+ [ABILITY_FULL_METAL_BODY] = 4,
+ [ABILITY_FUR_COAT] = 7,
+ [ABILITY_GALE_WINGS] = 6,
+ [ABILITY_GALVANIZE] = 8,
+ [ABILITY_GLUTTONY] = 3,
+ [ABILITY_GOOEY] = 5,
+ [ABILITY_GRASS_PELT] = 2,
+ [ABILITY_GRASSY_SURGE] = 8,
+ [ABILITY_GUTS] = 6,
+ [ABILITY_HARVEST] = 5,
+ [ABILITY_HEALER] = 0,
+ [ABILITY_HEATPROOF] = 5,
+ [ABILITY_HEAVY_METAL] = -1,
+ [ABILITY_HONEY_GATHER] = 0,
+ [ABILITY_HUGE_POWER] = 10,
+ [ABILITY_HUSTLE] = 7,
+ [ABILITY_HYDRATION] = 4,
+ [ABILITY_HYPER_CUTTER] = 3,
+ [ABILITY_ICE_BODY] = 3,
+ [ABILITY_ILLUMINATE] = 0,
+ [ABILITY_ILLUSION] = 8,
+ [ABILITY_IMMUNITY] = 4,
+ [ABILITY_IMPOSTER] = 9,
+ [ABILITY_INFILTRATOR] = 6,
+ [ABILITY_INNARDS_OUT] = 5,
+ [ABILITY_INNER_FOCUS] = 2,
+ [ABILITY_INSOMNIA] = 4,
+ [ABILITY_INTIMIDATE] = 7,
+ [ABILITY_IRON_BARBS] = 6,
+ [ABILITY_IRON_FIST] = 6,
+ [ABILITY_JUSTIFIED] = 4,
+ [ABILITY_KEEN_EYE] = 1,
+ [ABILITY_KLUTZ] = -1,
+ [ABILITY_LEAF_GUARD] = 2,
+ [ABILITY_LEVITATE] = 7,
+ [ABILITY_LIGHT_METAL] = 2,
+ [ABILITY_LIGHTNING_ROD] = 7,
+ [ABILITY_LIMBER] = 3,
+ [ABILITY_LIQUID_OOZE] = 3,
+ [ABILITY_LIQUID_VOICE] = 5,
+ [ABILITY_LONG_REACH] = 3,
+ [ABILITY_MAGIC_BOUNCE] = 9,
+ [ABILITY_MAGIC_GUARD] = 9,
+ [ABILITY_MAGICIAN] = 3,
+ [ABILITY_MAGMA_ARMOR] = 1,
+ [ABILITY_MAGNET_PULL] = 9,
+ [ABILITY_MARVEL_SCALE] = 5,
+ [ABILITY_MEGA_LAUNCHER] = 7,
+ [ABILITY_MERCILESS] = 4,
+ [ABILITY_MINUS] = 0,
+ [ABILITY_MISTY_SURGE] = 8,
+ [ABILITY_MOLD_BREAKER] = 7,
+ [ABILITY_MOODY] = 10,
+ [ABILITY_MOTOR_DRIVE] = 6,
+ [ABILITY_MOXIE] = 7,
+ [ABILITY_MULTISCALE] = 8,
+ [ABILITY_MULTITYPE] = 8,
+ [ABILITY_MUMMY] = 5,
+ [ABILITY_NATURAL_CURE] = 7,
+ [ABILITY_NEUROFORCE] = 6,
+ [ABILITY_NO_GUARD] = 8,
+ [ABILITY_NORMALIZE] = -1,
+ [ABILITY_OBLIVIOUS] = 2,
+ [ABILITY_OVERCOAT] = 5,
+ [ABILITY_OVERGROW] = 5,
+ [ABILITY_OWN_TEMPO] = 3,
+ [ABILITY_PARENTAL_BOND] = 10,
+ [ABILITY_PICKUP] = 1,
+ [ABILITY_PICKPOCKET] = 3,
+ [ABILITY_PIXILATE] = 8,
+ [ABILITY_PLUS] = 0,
+ [ABILITY_POISON_HEAL] = 8,
+ [ABILITY_POISON_POINT] = 4,
+ [ABILITY_POISON_TOUCH] = 4,
+ [ABILITY_POWER_CONSTRUCT] = 10,
+ [ABILITY_POWER_OF_ALCHEMY] = 0,
+ [ABILITY_PRANKSTER] = 8,
+ [ABILITY_PRESSURE] = 5,
+ [ABILITY_PRIMORDIAL_SEA] = 10,
+ [ABILITY_PRISM_ARMOR] = 6,
+ [ABILITY_PROTEAN] = 8,
+ [ABILITY_PSYCHIC_SURGE] = 8,
+ [ABILITY_PURE_POWER] = 10,
+ [ABILITY_QUEENLY_MAJESTY] = 6,
+ [ABILITY_QUICK_FEET] = 5,
+ [ABILITY_RAIN_DISH] = 3,
+ [ABILITY_RATTLED] = 3,
+ [ABILITY_RECEIVER] = 0,
+ [ABILITY_RECKLESS] = 6,
+ [ABILITY_REFRIGERATE] = 8,
+ [ABILITY_REGENERATOR] = 8,
+ [ABILITY_RIVALRY] = 1,
+ [ABILITY_RKS_SYSTEM] = 8,
+ [ABILITY_ROCK_HEAD] = 5,
+ [ABILITY_ROUGH_SKIN] = 6,
+ [ABILITY_RUN_AWAY] = 0,
+ [ABILITY_SAND_FORCE] = 4,
+ [ABILITY_SAND_RUSH] = 6,
+ [ABILITY_SAND_STREAM] = 9,
+ [ABILITY_SAND_VEIL] = 3,
+ [ABILITY_SAP_SIPPER] = 7,
+ [ABILITY_SCHOOLING] = 6,
+ [ABILITY_SCRAPPY] = 6,
+ [ABILITY_SERENE_GRACE] = 8,
+ [ABILITY_SHADOW_SHIELD] = 8,
+ [ABILITY_SHADOW_TAG] = 10,
+ [ABILITY_SHED_SKIN] = 7,
+ [ABILITY_SHEER_FORCE] = 8,
+ [ABILITY_SHELL_ARMOR] = 2,
+ [ABILITY_SHIELD_DUST] = 5,
+ [ABILITY_SHIELDS_DOWN] = 6,
+ [ABILITY_SIMPLE] = 8,
+ [ABILITY_SKILL_LINK] = 7,
+ [ABILITY_SLOW_START] = -2,
+ [ABILITY_SLUSH_RUSH] = 5,
+ [ABILITY_SNIPER] = 3,
+ [ABILITY_SNOW_CLOAK] = 3,
+ [ABILITY_SNOW_WARNING] = 8,
+ [ABILITY_SOLAR_POWER] = 3,
+ [ABILITY_SOLID_ROCK] = 6,
+ [ABILITY_SOUL_HEART] = 7,
+ [ABILITY_SOUNDPROOF] = 4,
+ [ABILITY_SPEED_BOOST] = 9,
+ [ABILITY_STAKEOUT] = 6,
+ [ABILITY_STALL] = -1,
+ [ABILITY_STAMINA] = 6,
+ [ABILITY_STANCE_CHANGE] = 10,
+ [ABILITY_STATIC] = 4,
+ [ABILITY_STEADFAST] = 2,
+ [ABILITY_STEELWORKER] = 6,
+ [ABILITY_STENCH] = 1,
+ [ABILITY_STICKY_HOLD] = 3,
+ [ABILITY_STORM_DRAIN] = 7,
+ [ABILITY_STRONG_JAW] = 6,
+ [ABILITY_STURDY] = 6,
+ [ABILITY_SUCTION_CUPS] = 2,
+ [ABILITY_SUPER_LUCK] = 3,
+ [ABILITY_SURGE_SURFER] = 4,
+ [ABILITY_SWARM] = 5,
+ [ABILITY_SWEET_VEIL] = 4,
+ [ABILITY_SWIFT_SWIM] = 6,
+ [ABILITY_SYMBIOSIS] = 0,
+ [ABILITY_SYNCHRONIZE] = 4,
+ [ABILITY_TANGLED_FEET] = 2,
+ [ABILITY_TANGLING_HAIR] = 5,
+ [ABILITY_TECHNICIAN] = 8,
+ [ABILITY_TELEPATHY] = 0,
+ [ABILITY_TERAVOLT] = 7,
+ [ABILITY_THICK_FAT] = 7,
+ [ABILITY_TINTED_LENS] = 7,
+ [ABILITY_TORRENT] = 5,
+ [ABILITY_TOXIC_BOOST] = 6,
+ [ABILITY_TOUGH_CLAWS] = 7,
+ [ABILITY_TRACE] = 6,
+ [ABILITY_TRIAGE] = 7,
+ [ABILITY_TRUANT] = -2,
+ [ABILITY_TURBOBLAZE] = 7,
+ [ABILITY_UNAWARE] = 6,
+ [ABILITY_UNBURDEN] = 7,
+ [ABILITY_UNNERVE] = 3,
+ [ABILITY_VICTORY_STAR] = 6,
+ [ABILITY_VITAL_SPIRIT] = 4,
+ [ABILITY_VOLT_ABSORB] = 7,
+ [ABILITY_WATER_ABSORB] = 7,
+ [ABILITY_WATER_BUBBLE] = 8,
+ [ABILITY_WATER_COMPACTION] = 4,
+ [ABILITY_WATER_VEIL] = 4,
+ [ABILITY_WEAK_ARMOR] = 2,
+ [ABILITY_WHITE_SMOKE] = 4,
+ [ABILITY_WIMP_OUT] = 3,
+ [ABILITY_WONDER_GUARD] = 10,
+ [ABILITY_WONDER_SKIN] = 4,
+ [ABILITY_ZEN_MODE] = -1,
+ [ABILITY_INTREPID_SWORD] = 3,
+ [ABILITY_DAUNTLESS_SHIELD] = 3,
+ [ABILITY_BALL_FETCH] = 0,
+ [ABILITY_COTTON_DOWN] = 3,
+ [ABILITY_MIRROR_ARMOR] = 6,
+ [ABILITY_GULP_MISSILE] = 3,
+ [ABILITY_STALWART] = 2,
+ [ABILITY_PROPELLER_TAIL] = 2,
+ [ABILITY_STEAM_ENGINE] = 3,
+ [ABILITY_PUNK_ROCK] = 2,
+ [ABILITY_SAND_SPIT] = 5,
+ [ABILITY_ICE_SCALES] = 7,
+ [ABILITY_RIPEN] = 4,
+ [ABILITY_ICE_FACE] = 4,
+ [ABILITY_POWER_SPOT] = 2,
+ [ABILITY_MIMICRY] = 2,
+ [ABILITY_SCREEN_CLEANER] = 3,
+ [ABILITY_NEUTRALIZING_GAS] = 5,
+ [ABILITY_HUNGER_SWITCH] = 2,
+ [ABILITY_PASTEL_VEIL] = 4,
+ [ABILITY_STEELY_SPIRIT] = 2,
+ [ABILITY_PERISH_BODY] = -1,
+ [ABILITY_WANDERING_SPIRIT] = 2,
+ [ABILITY_GORILLA_TACTICS] = 4,
+};
+
+static const u16 sEncouragedEncoreEffects[] =
+{
+ EFFECT_DREAM_EATER,
+ EFFECT_ATTACK_UP,
+ EFFECT_DEFENSE_UP,
+ EFFECT_SPEED_UP,
+ EFFECT_SPECIAL_ATTACK_UP,
+ EFFECT_HAZE,
+ EFFECT_ROAR,
+ EFFECT_CONVERSION,
+ EFFECT_TOXIC,
+ EFFECT_LIGHT_SCREEN,
+ EFFECT_REST,
+ EFFECT_SUPER_FANG,
+ EFFECT_SPECIAL_DEFENSE_UP_2,
+ EFFECT_CONFUSE,
+ EFFECT_POISON,
+ EFFECT_PARALYZE,
+ EFFECT_LEECH_SEED,
+ EFFECT_DO_NOTHING,
+ EFFECT_ATTACK_UP_2,
+ EFFECT_ENCORE,
+ EFFECT_CONVERSION_2,
+ EFFECT_LOCK_ON,
+ EFFECT_HEAL_BELL,
+ EFFECT_MEAN_LOOK,
+ EFFECT_NIGHTMARE,
+ EFFECT_PROTECT,
+ EFFECT_SKILL_SWAP,
+ EFFECT_FORESIGHT,
+ EFFECT_PERISH_SONG,
+ EFFECT_SANDSTORM,
+ EFFECT_ENDURE,
+ EFFECT_SWAGGER,
+ EFFECT_ATTRACT,
+ EFFECT_SAFEGUARD,
+ EFFECT_RAIN_DANCE,
+ EFFECT_SUNNY_DAY,
+ EFFECT_BELLY_DRUM,
+ EFFECT_PSYCH_UP,
+ EFFECT_FUTURE_SIGHT,
+ EFFECT_FAKE_OUT,
+ EFFECT_STOCKPILE,
+ EFFECT_SPIT_UP,
+ EFFECT_SWALLOW,
+ EFFECT_HAIL,
+ EFFECT_TORMENT,
+ EFFECT_WILL_O_WISP,
+ EFFECT_FOLLOW_ME,
+ EFFECT_CHARGE,
+ EFFECT_TRICK,
+ EFFECT_ROLE_PLAY,
+ EFFECT_INGRAIN,
+ EFFECT_RECYCLE,
+ EFFECT_KNOCK_OFF,
+ EFFECT_SKILL_SWAP,
+ EFFECT_IMPRISON,
+ EFFECT_REFRESH,
+ EFFECT_GRUDGE,
+ EFFECT_TEETER_DANCE,
+ EFFECT_MUD_SPORT,
+ EFFECT_WATER_SPORT,
+ EFFECT_DRAGON_DANCE,
+ EFFECT_CAMOUFLAGE,
+};
+
+// For the purposes of determining the most powerful move in a moveset, these
+// moves are treated the same as having a power of 0 or 1
+#define IGNORED_MOVES_END 0xFFFF
+static const u16 sIgnoredPowerfulMoveEffects[] =
+{
+ EFFECT_EXPLOSION,
+ EFFECT_DREAM_EATER,
+ EFFECT_RECHARGE,
+ EFFECT_SKULL_BASH,
+ EFFECT_SOLAR_BEAM,
+ EFFECT_SPIT_UP,
+ EFFECT_FOCUS_PUNCH,
+ EFFECT_SUPERPOWER,
+ EFFECT_ERUPTION,
+ EFFECT_OVERHEAT,
+ EFFECT_MIND_BLOWN,
+ IGNORED_MOVES_END
+};
+
+static const u16 sIgnoreMoldBreakerMoves[] =
+{
+ MOVE_MOONGEIST_BEAM,
+ MOVE_SUNSTEEL_STRIKE,
+ MOVE_PHOTON_GEYSER,
+ MOVE_LIGHT_THAT_BURNS_THE_SKY,
+ MOVE_MENACING_MOONRAZE_MAELSTROM,
+ MOVE_SEARING_SUNRAZE_SMASH,
+};
+
+static const u16 sInstructBannedMoves[] =
+{
+ MOVE_INSTRUCT,
+ MOVE_BIDE,
+ MOVE_FOCUS_PUNCH,
+ MOVE_BEAK_BLAST,
+ MOVE_SHELL_TRAP,
+ MOVE_SKETCH,
+ MOVE_TRANSFORM,
+ MOVE_MIMIC,
+ MOVE_KINGS_SHIELD,
+ MOVE_STRUGGLE,
+ MOVE_BOUNCE,
+ MOVE_DIG,
+ MOVE_DIVE,
+ MOVE_FLY,
+ MOVE_FREEZE_SHOCK,
+ MOVE_GEOMANCY,
+ MOVE_ICE_BURN,
+ MOVE_PHANTOM_FORCE,
+ MOVE_RAZOR_WIND,
+ MOVE_SHADOW_FORCE,
+ MOVE_SKULL_BASH,
+ MOVE_SKY_ATTACK,
+ MOVE_SKY_DROP,
+ MOVE_SOLAR_BEAM,
+ MOVE_SOLAR_BLADE,
+};
+
+static const u16 sRechargeMoves[] =
+{
+ MOVE_HYPER_BEAM,
+ MOVE_BLAST_BURN,
+ MOVE_HYDRO_CANNON,
+ MOVE_FRENZY_PLANT,
+ MOVE_GIGA_IMPACT,
+ MOVE_ROCK_WRECKER,
+ MOVE_ROAR_OF_TIME,
+ MOVE_PRISMATIC_LASER,
+ MOVE_METEOR_ASSAULT,
+ MOVE_ETERNABEAM,
+};
+
+static const u16 sOtherMoveCallingMoves[] =
+{
+ MOVE_ASSIST,
+ MOVE_COPYCAT,
+ MOVE_ME_FIRST,
+ MOVE_METRONOME,
+ MOVE_MIRROR_MOVE,
+ MOVE_NATURE_POWER,
+ MOVE_SLEEP_TALK,
+};
+
+// Functions
+u16 GetAIChosenMove(u8 battlerId)
+{
+ return (gBattleMons[battlerId].moves[gBattleStruct->aiMoveOrAction[battlerId]]);
+}
+
+bool32 WillAIStrikeFirst(void)
+{
+ return (AI_WhoStrikesFirst(sBattler_AI, gBattlerTarget, AI_THINKING_STRUCT->moveConsidered) == AI_IS_FASTER);
+}
+
+bool32 AI_RandLessThan(u8 val)
+{
+ if ((Random() % 0xFF) < val)
+ return TRUE;
+ return FALSE;
+}
+
+void RecordLastUsedMoveByTarget(void)
+{
+ RecordKnownMove(gBattlerTarget, gLastMoves[gBattlerTarget]);
+}
+
+bool32 IsBattlerAIControlled(u32 battlerId)
+{
+ switch (GetBattlerPosition(battlerId))
+ {
+ case B_POSITION_PLAYER_LEFT:
+ default:
+ return FALSE;
+ case B_POSITION_OPPONENT_LEFT:
+ return TRUE;
+ case B_POSITION_PLAYER_RIGHT:
+ return ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) != 0);
+ case B_POSITION_OPPONENT_RIGHT:
+ return TRUE;
+ }
+}
+
+void ClearBattlerMoveHistory(u8 battlerId)
+{
+ memset(BATTLE_HISTORY->usedMoves[battlerId], 0, sizeof(BATTLE_HISTORY->usedMoves[battlerId]));
+ memset(BATTLE_HISTORY->moveHistory[battlerId], 0, sizeof(BATTLE_HISTORY->moveHistory[battlerId]));
+ BATTLE_HISTORY->moveHistoryIndex[battlerId] = 0;
+}
+
+void RecordLastUsedMoveBy(u32 battlerId, u32 move)
+{
+ u8 *index = &BATTLE_HISTORY->moveHistoryIndex[battlerId];
+
+ if (++(*index) >= AI_MOVE_HISTORY_COUNT)
+ *index = 0;
+ BATTLE_HISTORY->moveHistory[battlerId][*index] = move;
+}
+
+void RecordKnownMove(u8 battlerId, u32 move)
+{
+ s32 i;
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (BATTLE_HISTORY->usedMoves[battlerId][i] == move)
+ break;
+ if (BATTLE_HISTORY->usedMoves[battlerId][i] == MOVE_NONE)
+ {
+ BATTLE_HISTORY->usedMoves[battlerId][i] = move;
+ break;
+ }
+ }
+}
+
+void RecordAbilityBattle(u8 battlerId, u16 abilityId)
+{
+ BATTLE_HISTORY->abilities[battlerId] = abilityId;
+}
+
+void ClearBattlerAbilityHistory(u8 battlerId)
+{
+ BATTLE_HISTORY->abilities[battlerId] = ABILITY_NONE;
+}
+
+void RecordItemEffectBattle(u8 battlerId, u8 itemEffect)
+{
+ BATTLE_HISTORY->itemEffects[battlerId] = itemEffect;
+}
+
+void ClearBattlerItemEffectHistory(u8 battlerId)
+{
+ BATTLE_HISTORY->itemEffects[battlerId] = 0;
+}
+
+void SaveBattlerData(u8 battlerId)
+{
+ if (!IsBattlerAIControlled(battlerId))
+ {
+ u32 i;
+
+ AI_THINKING_STRUCT->saved[battlerId].ability = gBattleMons[battlerId].ability;
+ AI_THINKING_STRUCT->saved[battlerId].heldItem = gBattleMons[battlerId].item;
+ AI_THINKING_STRUCT->saved[battlerId].species = gBattleMons[battlerId].species;
+ for (i = 0; i < 4; i++)
+ AI_THINKING_STRUCT->saved[battlerId].moves[i] = gBattleMons[battlerId].moves[i];
+ }
+}
+
+void SetBattlerData(u8 battlerId)
+{
+ if (!IsBattlerAIControlled(battlerId))
+ {
+ struct Pokemon *illusionMon;
+ u32 i;
+
+ // Use the known battler's ability.
+ if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE)
+ gBattleMons[battlerId].ability = BATTLE_HISTORY->abilities[battlerId];
+ // Check if mon can only have one ability.
+ else if (gBaseStats[gBattleMons[battlerId].species].abilities[1] == ABILITY_NONE
+ || gBaseStats[gBattleMons[battlerId].species].abilities[1] == gBaseStats[gBattleMons[battlerId].species].abilities[0])
+ gBattleMons[battlerId].ability = gBaseStats[gBattleMons[battlerId].species].abilities[0];
+ // The ability is unknown.
+ else
+ gBattleMons[battlerId].ability = ABILITY_NONE;
+
+ if (BATTLE_HISTORY->itemEffects[battlerId] == 0)
+ gBattleMons[battlerId].item = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (BATTLE_HISTORY->usedMoves[battlerId][i] == 0)
+ gBattleMons[battlerId].moves[i] = 0;
+ }
+
+ // Simulate Illusion
+ if ((illusionMon = GetIllusionMonPtr(battlerId)) != NULL)
+ gBattleMons[battlerId].species = GetMonData(illusionMon, MON_DATA_SPECIES2);
+ }
+}
+
+void RestoreBattlerData(u8 battlerId)
+{
+ if (!IsBattlerAIControlled(battlerId))
+ {
+ u32 i;
+
+ gBattleMons[battlerId].ability = AI_THINKING_STRUCT->saved[battlerId].ability;
+ gBattleMons[battlerId].item = AI_THINKING_STRUCT->saved[battlerId].heldItem;
+ gBattleMons[battlerId].species = AI_THINKING_STRUCT->saved[battlerId].species;
+ for (i = 0; i < 4; i++)
+ gBattleMons[battlerId].moves[i] = AI_THINKING_STRUCT->saved[battlerId].moves[i];
+ }
+}
+
+u32 GetHealthPercentage(u8 battlerId)
+{
+ return (u32)((100 * gBattleMons[battlerId].hp) / gBattleMons[battlerId].maxHP);
+}
+
+bool32 AtMaxHp(u8 battlerId)
+{
+ if (AI_DATA->hpPercents[battlerId] == 100)
+ return TRUE;
+ return FALSE;
+}
+
+bool32 IsBattlerTrapped(u8 battler, bool8 checkSwitch)
+{
+ u8 holdEffect = AI_DATA->holdEffects[battler];
+ if ((B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
+ || (checkSwitch && holdEffect == HOLD_EFFECT_SHED_SHELL)
+ || (!checkSwitch && GetBattlerAbility(battler) == ABILITY_RUN_AWAY)
+ || (!checkSwitch && holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN))
+ {
+ return FALSE;
+ }
+ else
+ {
+ if (gBattleMons[battler].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)
+ || IsAbilityPreventingEscape(battler)
+ || gStatuses3[battler] & (STATUS3_ROOTED | STATUS3_SKY_DROPPED)
+ || (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+u32 GetTotalBaseStat(u32 species)
+{
+ return gBaseStats[species].baseHP
+ + gBaseStats[species].baseAttack
+ + gBaseStats[species].baseDefense
+ + gBaseStats[species].baseSpeed
+ + gBaseStats[species].baseSpAttack
+ + gBaseStats[species].baseSpDefense;
+}
+
+bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler)
+{
+ int i;
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ u32 move = gBattleResources->battleHistory->usedMoves[opposingBattler][i];
+ if (gBattleMoves[move].effect == EFFECT_PROTECT && move != MOVE_ENDURE)
+ return TRUE;
+ if (gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAI, opposingBattler, GetAIChosenMove(battlerAI)) == AI_IS_SLOWER)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+// move checks
+bool32 IsAffectedByPowder(u8 battler, u16 ability, u16 holdEffect)
+{
+ if ((B_POWDER_GRASS >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GRASS))
+ || ability == ABILITY_OVERCOAT
+ || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES)
+ return FALSE;
+ return TRUE;
+}
+
+// This function checks if all physical/special moves are either unusable or unreasonable to use.
+// Consider a pokemon boosting their attack against a ghost pokemon having only normal-type physical attacks.
+bool32 MovesWithSplitUnusable(u32 attacker, u32 target, u32 split)
+{
+ s32 i, moveType;
+ u32 usable = 0;
+ u32 unusable = AI_DATA->moveLimitations[attacker];
+ u16 *moves = GetMovesArray(attacker);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE
+ && moves[i] != 0xFFFF
+ && GetBattleMoveSplit(moves[i]) == split
+ && !(unusable & gBitTable[i]))
+ {
+ SetTypeBeforeUsingMove(moves[i], attacker);
+ GET_MOVE_TYPE(moves[i], moveType);
+ if (CalcTypeEffectivenessMultiplier(moves[i], moveType, attacker, target, FALSE) != 0)
+ usable |= gBitTable[i];
+ }
+ }
+
+ return (usable == 0);
+}
+
+static bool32 AI_GetIfCrit(u32 move, u8 battlerAtk, u8 battlerDef)
+{
+ bool32 isCrit;
+
+ switch (CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE))
+ {
+ case -1:
+ case 0:
+ default:
+ isCrit = FALSE;
+ break;
+ case 1:
+ if (gBattleMoves[move].flags & FLAG_HIGH_CRIT && (Random() % 5 == 0))
+ isCrit = TRUE;
+ else
+ isCrit = FALSE;
+ break;
+ case 2:
+ if (gBattleMoves[move].flags & FLAG_HIGH_CRIT && (Random() % 2 == 0))
+ isCrit = TRUE;
+ else if (!(gBattleMoves[move].flags & FLAG_HIGH_CRIT) && (Random() % 4) == 0)
+ isCrit = TRUE;
+ else
+ isCrit = FALSE;
+ break;
+ case -2:
+ case 3:
+ case 4:
+ isCrit = TRUE;
+ break;
+ }
+
+ return isCrit;
+}
+
+s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, bool32 considerZPower)
+{
+ s32 dmg, moveType, critDmg, normalDmg;
+ s8 critChance;
+ u16 effectivenessMultiplier;
+
+ if (considerZPower && IsViableZMove(battlerAtk, move))
+ {
+ //temporarily enable z moves for damage calcs
+ gBattleStruct->zmove.baseMoves[battlerAtk] = move;
+ gBattleStruct->zmove.active = TRUE;
+ }
+
+ SaveBattlerData(battlerAtk);
+ SaveBattlerData(battlerDef);
+
+ SetBattlerData(battlerAtk);
+ SetBattlerData(battlerDef);
+
+ gBattleStruct->dynamicMoveType = 0;
+ SetTypeBeforeUsingMove(move, battlerAtk);
+ GET_MOVE_TYPE(move, moveType);
+
+ if (gBattleMoves[move].power)
+ {
+ critChance = GetInverseCritChance(battlerAtk, battlerDef, move);
+ normalDmg = CalculateMoveDamageAndEffectiveness(move, battlerAtk, battlerDef, moveType, &effectivenessMultiplier);
+ critDmg = CalculateMoveDamage(move, battlerAtk, battlerDef, moveType, 0, TRUE, FALSE, FALSE);
+
+ if (critChance == -1)
+ dmg = normalDmg;
+ else
+ dmg = (critDmg + normalDmg * (critChance - 1)) / critChance;
+
+ // Handle dynamic move damage
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_LEVEL_DAMAGE:
+ case EFFECT_PSYWAVE:
+ dmg = gBattleMons[battlerAtk].level * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
+ break;
+ case EFFECT_DRAGON_RAGE:
+ dmg = 40 * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
+ break;
+ case EFFECT_SONICBOOM:
+ dmg = 20 * (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
+ break;
+ case EFFECT_MULTI_HIT:
+ dmg *= (AI_DATA->abilities[battlerAtk] == ABILITY_SKILL_LINK ? 5 : 3);
+ break;
+ case EFFECT_TRIPLE_KICK:
+ dmg *= (AI_DATA->abilities[battlerAtk] == ABILITY_SKILL_LINK ? 6 : 5);
+ break;
+ case EFFECT_ENDEAVOR:
+ // If target has less HP than user, Endeavor does no damage
+ dmg = max(0, gBattleMons[battlerDef].hp - gBattleMons[battlerAtk].hp);
+ break;
+ case EFFECT_SUPER_FANG:
+ dmg = (AI_DATA->abilities[battlerAtk] == ABILITY_PARENTAL_BOND
+ ? max(2, gBattleMons[battlerDef].hp * 3 / 4)
+ : max(1, gBattleMons[battlerDef].hp / 2));
+ break;
+ case EFFECT_FINAL_GAMBIT:
+ dmg = gBattleMons[battlerAtk].hp;
+ break;
+ }
+
+ // Handle other multi-strike moves
+ if (gBattleMoves[move].flags & FLAG_TWO_STRIKES)
+ dmg *= 2;
+ else if (move == MOVE_SURGING_STRIKES || (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH))
+ dmg *= 3;
+
+ if (dmg == 0)
+ dmg = 1;
+ }
+ else
+ {
+ dmg = 0;
+ }
+
+ RestoreBattlerData(battlerAtk);
+ RestoreBattlerData(battlerDef);
+
+ // convert multiper to AI_EFFECTIVENESS_xX
+ *typeEffectiveness = AI_GetEffectiveness(effectivenessMultiplier);
+
+ gBattleStruct->zmove.active = FALSE;
+ gBattleStruct->zmove.baseMoves[battlerAtk] = MOVE_NONE;
+ return dmg;
+}
+
+// Checks if one of the moves has side effects or perks
+static u32 WhichMoveBetter(u32 move1, u32 move2)
+{
+ s32 defAbility = AI_DATA->abilities[gBattlerTarget];
+
+ // Check if physical moves hurt.
+ if (AI_DATA->holdEffects[sBattler_AI] != HOLD_EFFECT_PROTECTIVE_PADS
+ && (BATTLE_HISTORY->itemEffects[gBattlerTarget] == HOLD_EFFECT_ROCKY_HELMET
+ || defAbility == ABILITY_IRON_BARBS || defAbility == ABILITY_ROUGH_SKIN))
+ {
+ if (IS_MOVE_PHYSICAL(move1) && !IS_MOVE_PHYSICAL(move2))
+ return 1;
+ if (IS_MOVE_PHYSICAL(move2) && !IS_MOVE_PHYSICAL(move1))
+ return 0;
+ }
+ // Check recoil
+ if (GetBattlerAbility(sBattler_AI) != ABILITY_ROCK_HEAD)
+ {
+ if (((gBattleMoves[move1].effect == EFFECT_RECOIL_25
+ || gBattleMoves[move1].effect == EFFECT_RECOIL_IF_MISS
+ || gBattleMoves[move1].effect == EFFECT_RECOIL_50
+ || gBattleMoves[move1].effect == EFFECT_RECOIL_33
+ || gBattleMoves[move1].effect == EFFECT_RECOIL_33_STATUS)
+ && (gBattleMoves[move2].effect != EFFECT_RECOIL_25
+ && gBattleMoves[move2].effect != EFFECT_RECOIL_IF_MISS
+ && gBattleMoves[move2].effect != EFFECT_RECOIL_50
+ && gBattleMoves[move2].effect != EFFECT_RECOIL_33
+ && gBattleMoves[move2].effect != EFFECT_RECOIL_33_STATUS
+ && gBattleMoves[move2].effect != EFFECT_RECHARGE)))
+ return 1;
+
+ if (((gBattleMoves[move2].effect == EFFECT_RECOIL_25
+ || gBattleMoves[move2].effect == EFFECT_RECOIL_IF_MISS
+ || gBattleMoves[move2].effect == EFFECT_RECOIL_50
+ || gBattleMoves[move2].effect == EFFECT_RECOIL_33
+ || gBattleMoves[move2].effect == EFFECT_RECOIL_33_STATUS)
+ && (gBattleMoves[move1].effect != EFFECT_RECOIL_25
+ && gBattleMoves[move1].effect != EFFECT_RECOIL_IF_MISS
+ && gBattleMoves[move1].effect != EFFECT_RECOIL_50
+ && gBattleMoves[move1].effect != EFFECT_RECOIL_33
+ && gBattleMoves[move1].effect != EFFECT_RECOIL_33_STATUS
+ && gBattleMoves[move1].effect != EFFECT_RECHARGE)))
+ return 0;
+ }
+ // Check recharge
+ if (gBattleMoves[move1].effect == EFFECT_RECHARGE && gBattleMoves[move2].effect != EFFECT_RECHARGE)
+ return 1;
+ if (gBattleMoves[move2].effect == EFFECT_RECHARGE && gBattleMoves[move1].effect != EFFECT_RECHARGE)
+ return 0;
+ // Check additional effect.
+ if (gBattleMoves[move1].effect == 0 && gBattleMoves[move2].effect != 0)
+ return 1;
+ if (gBattleMoves[move2].effect == 0 && gBattleMoves[move1].effect != 0)
+ return 0;
+
+ return 2;
+}
+
+u8 GetMoveDamageResult(u16 move)
+{
+ s32 i, checkedMove, bestId, currId, hp;
+ s32 moveDmgs[MAX_MON_MOVES];
+ u8 result;
+
+ for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++)
+ {
+ if (gBattleMoves[move].effect == sIgnoredPowerfulMoveEffects[i])
+ break;
+ }
+
+ if (gBattleMoves[move].power != 0 && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END)
+ {
+ // Considered move has power and is not in sIgnoredPowerfulMoveEffects
+ // Check all other moves and calculate their power
+ for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
+ {
+ for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++)
+ {
+ if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sIgnoredPowerfulMoveEffects[i])
+ break;
+ }
+
+ if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE
+ && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END
+ && gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power != 0)
+ {
+ moveDmgs[checkedMove] = AI_DATA->simulatedDmg[sBattler_AI][gBattlerTarget][checkedMove];
+ }
+ else
+ {
+ moveDmgs[checkedMove] = 0;
+ }
+ }
+
+ hp = gBattleMons[gBattlerTarget].hp + (20 * gBattleMons[gBattlerTarget].hp / 100); // 20 % add to make sure the battler is always fainted
+ // If a move can faint battler, it doesn't matter how much damage it does
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moveDmgs[i] > hp)
+ moveDmgs[i] = hp;
+ }
+
+ for (bestId = 0, i = 1; i < MAX_MON_MOVES; i++)
+ {
+ if (moveDmgs[i] > moveDmgs[bestId])
+ bestId = i;
+ if (moveDmgs[i] == moveDmgs[bestId])
+ {
+ switch (WhichMoveBetter(gBattleMons[sBattler_AI].moves[bestId], gBattleMons[sBattler_AI].moves[i]))
+ {
+ case 2:
+ if (Random() & 1)
+ break;
+ case 1:
+ bestId = i;
+ break;
+ }
+ }
+ }
+
+ currId = AI_THINKING_STRUCT->movesetIndex;
+ if (currId == bestId)
+ AI_THINKING_STRUCT->funcResult = MOVE_POWER_BEST;
+ // Compare percentage difference.
+ else if ((moveDmgs[currId] >= hp || moveDmgs[bestId] < hp) // If current move can faint as well, or if neither can
+ && (moveDmgs[bestId] * 100 / hp) - (moveDmgs[currId] * 100 / hp) <= 30
+ && WhichMoveBetter(gBattleMons[sBattler_AI].moves[bestId], gBattleMons[sBattler_AI].moves[currId]) != 0)
+ AI_THINKING_STRUCT->funcResult = MOVE_POWER_GOOD;
+ else
+ AI_THINKING_STRUCT->funcResult = MOVE_POWER_WEAK;
+ }
+ else
+ {
+ // Move has a power of 0/1, or is in the group sIgnoredPowerfulMoveEffects
+ AI_THINKING_STRUCT->funcResult = MOVE_POWER_OTHER;
+ }
+
+ return AI_THINKING_STRUCT->funcResult;
+}
+
+u32 GetCurrDamageHpPercent(u8 battlerAtk, u8 battlerDef)
+{
+ int bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex];
+
+ return (bestDmg * 100) / gBattleMons[battlerDef].maxHP;
+}
+
+u16 AI_GetTypeEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef)
+{
+ u16 typeEffectiveness, moveType;
+
+ SaveBattlerData(battlerAtk);
+ SaveBattlerData(battlerDef);
+
+ SetBattlerData(battlerAtk);
+ SetBattlerData(battlerDef);
+
+ gBattleStruct->dynamicMoveType = 0;
+ SetTypeBeforeUsingMove(move, battlerAtk);
+ GET_MOVE_TYPE(move, moveType);
+ typeEffectiveness = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE);
+
+ RestoreBattlerData(battlerAtk);
+ RestoreBattlerData(battlerDef);
+
+ return typeEffectiveness;
+}
+
+u32 AI_GetMoveEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef)
+{
+ gMoveResultFlags = 0;
+ return AI_GetEffectiveness(AI_GetTypeEffectiveness(move, battlerAtk, battlerDef));
+}
+
+static u32 AI_GetEffectiveness(u16 multiplier)
+{
+ switch (multiplier)
+ {
+ case UQ_4_12(0.0):
+ return AI_EFFECTIVENESS_x0;
+ case UQ_4_12(0.125):
+ return AI_EFFECTIVENESS_x0_125;
+ case UQ_4_12(0.25):
+ return AI_EFFECTIVENESS_x0_25;
+ case UQ_4_12(0.5):
+ return AI_EFFECTIVENESS_x0_5;
+ case UQ_4_12(1.0):
+ default:
+ return AI_EFFECTIVENESS_x1;
+ case UQ_4_12(2.0):
+ return AI_EFFECTIVENESS_x2;
+ case UQ_4_12(4.0):
+ return AI_EFFECTIVENESS_x4;
+ case UQ_4_12(8.0):
+ return AI_EFFECTIVENESS_x8;
+ }
+}
+
+/* Checks to see if AI will move ahead of another battler
+ * Output:
+ * AI_IS_FASTER: is user(ai) faster
+ * AI_IS_SLOWER: is target faster
+*/
+u8 AI_WhoStrikesFirst(u8 battlerAI, u8 battler2, u16 moveConsidered)
+{
+ u32 fasterAI = 0, fasterPlayer = 0, i;
+ s8 prioAI = 0;
+ s8 prioPlayer = 0;
+ s8 prioBattler2 = 0;
+ u16 *battler2Moves = GetMovesArray(battler2);
+
+ // Check move priorities first.
+ prioAI = GetMovePriority(battlerAI, moveConsidered);
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (battler2Moves[i] == 0 || battler2Moves[i] == 0xFFFF)
+ continue;
+
+ prioBattler2 = GetMovePriority(battler2, battler2Moves[i]);
+ if (prioAI > prioBattler2)
+ fasterAI++;
+ else if (prioBattler2 > prioAI)
+ fasterPlayer++;
+ }
+
+ if (fasterAI > fasterPlayer)
+ {
+ return AI_IS_FASTER;
+ }
+ else if (fasterAI < fasterPlayer)
+ {
+ return AI_IS_SLOWER;
+ }
+ else
+ {
+ if (prioAI > prioBattler2)
+ return AI_IS_FASTER; // if we didn't know any of battler 2's moves to compare priorities, assume they don't have a prio+ move
+ // Priorities are the same(at least comparing to moves the AI is aware of), decide by speed.
+ if (GetWhoStrikesFirst(battlerAI, battler2, TRUE) == 0)
+ return AI_IS_FASTER;
+ else
+ return AI_IS_SLOWER;
+ }
+}
+
+// Check if target has means to faint ai mon.
+bool32 CanTargetFaintAi(u8 battlerDef, u8 battlerAtk)
+{
+ s32 i, dmg;
+ u32 unusable = AI_DATA->moveLimitations[battlerDef];
+ u16 *moves = gBattleResources->battleHistory->usedMoves[battlerDef];
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && !(unusable & gBitTable[i])
+ && AI_DATA->simulatedDmg[battlerDef][battlerAtk][moves[i]] >= gBattleMons[battlerAtk].hp)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+// Check if AI mon has the means to faint the target with any of its moves.
+// If numHits > 1, check if the target will be KO'ed by that number of hits (ignoring healing effects)
+bool32 CanAIFaintTarget(u8 battlerAtk, u8 battlerDef, u8 numHits)
+{
+ s32 i, dmg;
+ u32 moveLimitations = AI_DATA->moveLimitations[battlerAtk];
+ u16 *moves = gBattleMons[battlerAtk].moves;
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && !(moveLimitations & gBitTable[i]))
+ {
+ // Use the pre-calculated value in simulatedDmg instead of re-calculating it
+ dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i];
+
+ if (numHits)
+ dmg *= numHits;
+
+ if (gBattleMons[battlerDef].hp <= dmg)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool32 CanMoveFaintBattler(u16 move, u8 battlerDef, u8 battlerAtk, u8 nHits)
+{
+ s32 i, dmg;
+ u8 effectiveness;
+ u32 unusable = AI_DATA->moveLimitations[battlerDef];
+
+ if (move != MOVE_NONE
+ && move != 0xFFFF
+ && !(unusable & gBitTable[i])
+ && AI_CalcDamage(move, battlerDef, battlerAtk, &effectiveness, FALSE) >= gBattleMons[battlerAtk].hp)
+ return TRUE;
+
+ return FALSE;
+}
+
+// Check if target has means to faint ai mon after modding hp/dmg
+bool32 CanTargetFaintAiWithMod(u8 battlerDef, u8 battlerAtk, s32 hpMod, s32 dmgMod)
+{
+ u32 i;
+ u32 unusable = AI_DATA->moveLimitations[battlerDef];
+ s32 dmg;
+ u16 *moves = gBattleResources->battleHistory->usedMoves[battlerDef];
+ u32 hpCheck = gBattleMons[battlerAtk].hp + hpMod;
+
+ if (hpCheck > gBattleMons[battlerAtk].maxHP)
+ hpCheck = gBattleMons[battlerAtk].maxHP;
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i];
+ if (dmgMod)
+ dmg *= dmgMod;
+
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && !(unusable & gBitTable[i]) && dmg >= hpCheck)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability)
+{
+ if (IsBattlerAlive(battlerId) && AI_DATA->abilities[battlerId] == ability)
+ return TRUE;
+ else if (IsBattlerAlive(BATTLE_PARTNER(battlerId)) && AI_DATA->abilities[BATTLE_PARTNER(battlerId)] == ability)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+// does NOT include ability suppression checks
+s32 AI_GetAbility(u32 battlerId)
+{
+ u32 knownAbility = GetBattlerAbility(battlerId);
+
+ // The AI knows its own ability.
+ if (IsBattlerAIControlled(battlerId))
+ return knownAbility;
+
+ // Check neutralizing gas, gastro acid
+ if (knownAbility == ABILITY_NONE)
+ return knownAbility;
+
+ if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE)
+ return BATTLE_HISTORY->abilities[battlerId];
+
+ // Abilities that prevent fleeing - treat as always known
+ if (knownAbility == ABILITY_SHADOW_TAG || knownAbility == ABILITY_MAGNET_PULL || knownAbility == ABILITY_ARENA_TRAP)
+ return knownAbility;
+
+ // Else, guess the ability
+ if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE)
+ {
+ u16 abilityGuess = ABILITY_NONE;
+ while (abilityGuess == ABILITY_NONE)
+ {
+ abilityGuess = gBaseStats[gBattleMons[battlerId].species].abilities[Random() % NUM_ABILITY_SLOTS];
+ }
+
+ return abilityGuess;
+ }
+
+ return ABILITY_NONE; // Unknown.
+}
+
+u16 AI_GetHoldEffect(u32 battlerId)
+{
+ u32 holdEffect;
+
+ if (!IsBattlerAIControlled(battlerId))
+ holdEffect = BATTLE_HISTORY->itemEffects[battlerId];
+ else
+ holdEffect = GetBattlerHoldEffect(battlerId, FALSE);
+
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE)
+ return holdEffect;
+
+ if (gStatuses3[battlerId] & STATUS3_EMBARGO)
+ return HOLD_EFFECT_NONE;
+ if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM)
+ return HOLD_EFFECT_NONE;
+ if (AI_DATA->abilities[battlerId] == ABILITY_KLUTZ && !(gStatuses3[battlerId] & STATUS3_GASTRO_ACID))
+ return HOLD_EFFECT_NONE;
+
+ return holdEffect;
+}
+
+bool32 AI_IsTerrainAffected(u8 battlerId, u32 flags)
+{
+ if (gStatuses3[battlerId] & STATUS3_SEMI_INVULNERABLE)
+ return FALSE;
+ else if (!(gFieldStatuses & flags))
+ return FALSE;
+ return AI_IsBattlerGrounded(battlerId);
+}
+
+// different from IsBattlerGrounded in that we don't always know battler's hold effect or ability
+bool32 AI_IsBattlerGrounded(u8 battlerId)
+{
+ u32 holdEffect = AI_DATA->holdEffects[battlerId];
+
+ if (holdEffect == HOLD_EFFECT_IRON_BALL)
+ return TRUE;
+ else if (gFieldStatuses & STATUS_FIELD_GRAVITY)
+ return TRUE;
+ else if (gStatuses3[battlerId] & STATUS3_ROOTED)
+ return TRUE;
+ else if (gStatuses3[battlerId] & STATUS3_SMACKED_DOWN)
+ return TRUE;
+ else if (gStatuses3[battlerId] & STATUS3_TELEKINESIS)
+ return FALSE;
+ else if (gStatuses3[battlerId] & STATUS3_MAGNET_RISE)
+ return FALSE;
+ else if (holdEffect == HOLD_EFFECT_AIR_BALLOON)
+ return FALSE;
+ else if (AI_DATA->abilities[battlerId] == ABILITY_LEVITATE)
+ return FALSE;
+ else if (IS_BATTLER_OF_TYPE(battlerId, TYPE_FLYING))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+bool32 DoesBattlerIgnoreAbilityChecks(u16 atkAbility, u16 move)
+{
+ u32 i;
+
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE)
+ return FALSE; // AI handicap flag: doesn't understand ability suppression concept
+
+ for (i = 0; i < ARRAY_COUNT(sIgnoreMoldBreakerMoves); i++)
+ {
+ if (move == sIgnoreMoldBreakerMoves[i])
+ return TRUE;
+ }
+
+ if (atkAbility == ABILITY_MOLD_BREAKER
+ || atkAbility == ABILITY_TERAVOLT
+ || atkAbility == ABILITY_TURBOBLAZE)
+ return TRUE;
+
+ return FALSE;
+}
+
+bool32 AI_WeatherHasEffect(void)
+{
+ u32 i;
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE)
+ return TRUE; // AI doesn't understand weather supression (handicap)
+
+ return WEATHER_HAS_EFFECT; // weather damping abilities are announced
+}
+
+u32 AI_GetBattlerMoveTargetType(u8 battlerId, u16 move)
+{
+ u32 target;
+
+ if (gBattleMoves[move].effect == EFFECT_EXPANDING_FORCE && AI_IsTerrainAffected(battlerId, STATUS_FIELD_PSYCHIC_TERRAIN))
+ return MOVE_TARGET_BOTH;
+ else
+ return gBattleMoves[move].target;
+}
+
+bool32 IsAromaVeilProtectedMove(u16 move)
+{
+ u32 i;
+
+ switch (move)
+ {
+ case MOVE_DISABLE:
+ case MOVE_ATTRACT:
+ case MOVE_ENCORE:
+ case MOVE_TORMENT:
+ case MOVE_TAUNT:
+ case MOVE_HEAL_BLOCK:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsNonVolatileStatusMoveEffect(u16 moveEffect)
+{
+ switch (moveEffect)
+ {
+ case EFFECT_SLEEP:
+ case EFFECT_TOXIC:
+ case EFFECT_POISON:
+ case EFFECT_PARALYZE:
+ case EFFECT_WILL_O_WISP:
+ case EFFECT_YAWN:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsConfusionMoveEffect(u16 moveEffect)
+{
+ switch (moveEffect)
+ {
+ case EFFECT_CONFUSE_HIT:
+ case EFFECT_SWAGGER:
+ case EFFECT_FLATTER:
+ case EFFECT_TEETER_DANCE:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsStatLoweringMoveEffect(u16 moveEffect)
+{
+ switch (moveEffect)
+ {
+ case EFFECT_ATTACK_DOWN:
+ case EFFECT_DEFENSE_DOWN:
+ case EFFECT_SPEED_DOWN:
+ case EFFECT_SPECIAL_ATTACK_DOWN:
+ case EFFECT_SPECIAL_DEFENSE_DOWN:
+ case EFFECT_ACCURACY_DOWN:
+ case EFFECT_EVASION_DOWN:
+ case EFFECT_ATTACK_DOWN_2:
+ case EFFECT_DEFENSE_DOWN_2:
+ case EFFECT_SPEED_DOWN_2:
+ case EFFECT_SPECIAL_ATTACK_DOWN_2:
+ case EFFECT_SPECIAL_DEFENSE_DOWN_2:
+ case EFFECT_ACCURACY_DOWN_2:
+ case EFFECT_EVASION_DOWN_2:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsHazardMoveEffect(u16 moveEffect)
+{
+ switch (moveEffect)
+ {
+ case EFFECT_SPIKES:
+ case EFFECT_TOXIC_SPIKES:
+ case EFFECT_STICKY_WEB:
+ case EFFECT_STEALTH_ROCK:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsMoveRedirectionPrevented(u16 move, u16 atkAbility)
+{
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE)
+ return FALSE;
+
+ if (move == MOVE_SKY_DROP
+ || move == MOVE_SNIPE_SHOT
+ || atkAbility == ABILITY_PROPELLER_TAIL
+ || atkAbility == ABILITY_STALWART)
+ return TRUE;
+ return FALSE;
+}
+
+u32 AI_GetMoveAccuracy(u8 battlerAtk, u8 battlerDef, u16 move)
+{
+ return GetTotalAccuracy(battlerAtk, battlerDef, move, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef],
+ AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]);
+}
+
+bool32 IsSemiInvulnerable(u8 battlerDef, u16 move)
+{
+ if (gStatuses3[battlerDef] & STATUS3_PHANTOM_FORCE)
+ return TRUE;
+ else if (!TestMoveFlags(move, FLAG_DMG_IN_AIR) && gStatuses3[battlerDef] & STATUS3_ON_AIR)
+ return TRUE;
+ else if (!TestMoveFlags(move, FLAG_DMG_UNDERWATER) && gStatuses3[battlerDef] & STATUS3_UNDERWATER)
+ return TRUE;
+ else if (!TestMoveFlags(move, FLAG_DMG_UNDERGROUND) && gStatuses3[battlerDef] & STATUS3_UNDERGROUND)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 IsMoveEncouragedToHit(u8 battlerAtk, u8 battlerDef, u16 move)
+{
+ if (IsSemiInvulnerable(battlerDef, move))
+ return FALSE;
+
+ //TODO - anticipate protect move?
+
+ // always hits
+ if (gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS || gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk)
+ return TRUE;
+
+ if (AI_DATA->abilities[battlerDef] == ABILITY_NO_GUARD || AI_DATA->abilities[battlerAtk] == ABILITY_NO_GUARD)
+ return TRUE;
+
+ if (B_TOXIC_NEVER_MISS >= GEN_6 && gBattleMoves[move].effect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON))
+ return TRUE;
+
+ // discouraged from hitting
+ if (AI_WeatherHasEffect() && (gBattleWeather & B_WEATHER_SUN)
+ && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE))
+ return FALSE;
+
+ // increased accuracy but don't always hit
+ if ((AI_WeatherHasEffect() &&
+ (((gBattleWeather & B_WEATHER_RAIN) && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE))
+ || (((gBattleWeather & B_WEATHER_HAIL) && move == MOVE_BLIZZARD))))
+ || (gBattleMoves[move].effect == EFFECT_VITAL_THROW)
+ || (gBattleMoves[move].accuracy == 0)
+ || ((B_MINIMIZE_DMG_ACC >= GEN_6) && (gStatuses3[battlerDef] & STATUS3_MINIMIZED) && (gBattleMoves[move].flags & FLAG_DMG_MINIMIZE)))
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 ShouldTryOHKO(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move)
+{
+ u32 holdEffect = AI_DATA->holdEffects[battlerDef];
+ u32 accuracy = AI_GetMoveAccuracy(battlerAtk, battlerDef, move);
+
+ gPotentialItemEffectBattler = battlerDef;
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < AI_DATA->holdEffectParams[battlerDef])
+ return FALSE; //probabilistically speaking, focus band should activate so dont OHKO
+ else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && AtMaxHp(battlerDef))
+ return FALSE;
+
+ if (!DoesBattlerIgnoreAbilityChecks(atkAbility, move) && defAbility == ABILITY_STURDY)
+ return FALSE;
+
+ if ((((gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS)
+ && gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk)
+ || atkAbility == ABILITY_NO_GUARD || defAbility == ABILITY_NO_GUARD)
+ && gBattleMons[battlerAtk].level >= gBattleMons[battlerDef].level)
+ {
+ return TRUE;
+ }
+ else // test the odds
+ {
+ u16 odds = accuracy + (gBattleMons[battlerAtk].level - gBattleMons[battlerDef].level);
+ #if B_SHEER_COLD_ACC >= GEN_7
+ if (gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE))
+ odds -= 10;
+ #endif
+ if (Random() % 100 + 1 < odds && gBattleMons[battlerAtk].level >= gBattleMons[battlerDef].level)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 ShouldSetSandstorm(u8 battler, u16 ability, u16 holdEffect)
+{
+ if (!AI_WeatherHasEffect())
+ return FALSE;
+ else if (gBattleWeather & B_WEATHER_SANDSTORM)
+ return FALSE;
+
+ if (ability == ABILITY_SAND_VEIL
+ || ability == ABILITY_SAND_RUSH
+ || ability == ABILITY_SAND_FORCE
+ || ability == ABILITY_OVERCOAT
+ || ability == ABILITY_MAGIC_GUARD
+ || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES
+ || IS_BATTLER_OF_TYPE(battler, TYPE_ROCK)
+ || IS_BATTLER_OF_TYPE(battler, TYPE_STEEL)
+ || IS_BATTLER_OF_TYPE(battler, TYPE_GROUND)
+ || HasMoveEffect(battler, EFFECT_SHORE_UP)
+ || HasMoveEffect(battler, EFFECT_WEATHER_BALL))
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect)
+{
+ if (!AI_WeatherHasEffect())
+ return FALSE;
+ else if (gBattleWeather & B_WEATHER_HAIL)
+ return FALSE;
+
+ if (ability == ABILITY_SNOW_CLOAK
+ || ability == ABILITY_ICE_BODY
+ || ability == ABILITY_FORECAST
+ || ability == ABILITY_SLUSH_RUSH
+ || ability == ABILITY_MAGIC_GUARD
+ || ability == ABILITY_OVERCOAT
+ || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES
+ || IS_BATTLER_OF_TYPE(battler, TYPE_ICE)
+ || HasMove(battler, MOVE_BLIZZARD)
+ || HasMoveEffect(battler, EFFECT_AURORA_VEIL)
+ || HasMoveEffect(battler, EFFECT_WEATHER_BALL))
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 ShouldSetRain(u8 battlerAtk, u16 atkAbility, u16 holdEffect)
+{
+ if (!AI_WeatherHasEffect())
+ return FALSE;
+ else if (gBattleWeather & B_WEATHER_RAIN)
+ return FALSE;
+
+ if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA
+ && (atkAbility == ABILITY_SWIFT_SWIM
+ || atkAbility == ABILITY_FORECAST
+ || atkAbility == ABILITY_HYDRATION
+ || atkAbility == ABILITY_RAIN_DISH
+ || atkAbility == ABILITY_DRY_SKIN
+ || HasMoveEffect(battlerAtk, EFFECT_THUNDER)
+ || HasMoveEffect(battlerAtk, EFFECT_HURRICANE)
+ || HasMoveEffect(battlerAtk, EFFECT_WEATHER_BALL)
+ || HasMoveWithType(battlerAtk, TYPE_WATER)))
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect)
+{
+ if (!AI_WeatherHasEffect())
+ return FALSE;
+ else if (gBattleWeather & B_WEATHER_SUN)
+ return FALSE;
+
+ if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA
+ && (atkAbility == ABILITY_CHLOROPHYLL
+ || atkAbility == ABILITY_FLOWER_GIFT
+ || atkAbility == ABILITY_FORECAST
+ || atkAbility == ABILITY_LEAF_GUARD
+ || atkAbility == ABILITY_SOLAR_POWER
+ || atkAbility == ABILITY_HARVEST
+ || HasMoveEffect(battlerAtk, EFFECT_SOLAR_BEAM)
+ || HasMoveEffect(battlerAtk, EFFECT_MORNING_SUN)
+ || HasMoveEffect(battlerAtk, EFFECT_SYNTHESIS)
+ || HasMoveEffect(battlerAtk, EFFECT_MOONLIGHT)
+ || HasMoveEffect(battlerAtk, EFFECT_WEATHER_BALL)
+ || HasMoveEffect(battlerAtk, EFFECT_GROWTH)
+ || HasMoveWithType(battlerAtk, TYPE_FIRE)))
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score)
+{
+ // TODO more sophisticated logic
+ u16 predictedEffect = gBattleMoves[predictedMove].effect;
+ u8 defAbility = AI_DATA->abilities[battlerDef];
+ u32 uses = gDisableStructs[battlerAtk].protectUses;
+
+ /*if (GetMoveResultFlags(predictedMove) & (MOVE_RESULT_NO_EFFECT | MOVE_RESULT_MISSED))
+ {
+ (*score) -= 5;
+ return;
+ }*/
+
+ if (uses == 0)
+ {
+ if (predictedMove != MOVE_NONE && predictedMove != 0xFFFF && !IS_MOVE_STATUS(predictedMove))
+ (*score) += 2;
+ else if (Random() % 256 < 100)
+ (*score)++;
+ }
+ else
+ {
+ if (IsDoubleBattle())
+ (*score) -= 2 * min(uses, 3);
+ else
+ (*score) -= min(uses, 3);
+ }
+
+ if (gBattleMons[battlerAtk].status1 & (STATUS1_PSN_ANY | STATUS1_BURN)
+ || gBattleMons[battlerAtk].status2 & (STATUS2_CURSED | STATUS2_INFATUATION)
+ || gStatuses3[battlerAtk] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED | STATUS3_YAWN))
+ {
+ (*score)--;
+ }
+
+ if (gBattleMons[battlerDef].status1 & STATUS1_TOXIC_POISON
+ || gBattleMons[battlerDef].status2 & (STATUS2_CURSED | STATUS2_INFATUATION)
+ || gStatuses3[battlerDef] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED | STATUS3_YAWN))
+ (*score) += 2;
+}
+
+// stat stages
+bool32 ShouldLowerStat(u8 battler, u16 battlerAbility, u8 stat)
+{
+ if ((gBattleMons[battler].statStages[stat] > MIN_STAT_STAGE && battlerAbility != ABILITY_CONTRARY)
+ || (battlerAbility == ABILITY_CONTRARY && gBattleMons[battler].statStages[stat] < MAX_STAT_STAGE))
+ {
+ if (battlerAbility == ABILITY_CLEAR_BODY
+ || battlerAbility == ABILITY_WHITE_SMOKE
+ || battlerAbility == ABILITY_FULL_METAL_BODY)
+ return FALSE;
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 BattlerStatCanRise(u8 battler, u16 battlerAbility, u8 stat)
+{
+ if ((gBattleMons[battler].statStages[stat] < MAX_STAT_STAGE && battlerAbility != ABILITY_CONTRARY)
+ || (battlerAbility == ABILITY_CONTRARY && gBattleMons[battler].statStages[stat] > MIN_STAT_STAGE))
+ return TRUE;
+ return FALSE;
+}
+
+bool32 AreBattlersStatsMaxed(u8 battlerId)
+{
+ u32 i;
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerId].statStages[i] < MAX_STAT_STAGE)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool32 AnyStatIsRaised(u8 battlerId)
+{
+ u32 i;
+
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerId].statStages[i] > DEFAULT_STAT_STAGE)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u32 CountPositiveStatStages(u8 battlerId)
+{
+ u32 count = 0;
+ u32 i;
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerId].statStages[i] > DEFAULT_STAT_STAGE)
+ count++;
+ }
+ return count;
+}
+
+u32 CountNegativeStatStages(u8 battlerId)
+{
+ u32 count = 0;
+ u32 i;
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)
+ count++;
+ }
+ return count;
+}
+
+bool32 ShouldLowerAttack(u8 battlerAtk, u8 battlerDef, u16 defAbility)
+{
+ if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return FALSE; // Don't bother lowering stats if can kill enemy.
+
+ if (gBattleMons[battlerDef].statStages[STAT_ATK] > 4
+ && HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)
+ && defAbility != ABILITY_CONTRARY
+ && defAbility != ABILITY_CLEAR_BODY
+ && defAbility != ABILITY_WHITE_SMOKE
+ && defAbility != ABILITY_FULL_METAL_BODY
+ && defAbility != ABILITY_HYPER_CUTTER)
+ return TRUE;
+ return FALSE;
+}
+
+bool32 ShouldLowerDefense(u8 battlerAtk, u8 battlerDef, u16 defAbility)
+{
+ if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return FALSE; // Don't bother lowering stats if can kill enemy.
+
+ if (gBattleMons[battlerDef].statStages[STAT_DEF] > 4
+ && HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)
+ && defAbility != ABILITY_CONTRARY
+ && defAbility != ABILITY_CLEAR_BODY
+ && defAbility != ABILITY_WHITE_SMOKE
+ && defAbility != ABILITY_FULL_METAL_BODY
+ && defAbility != ABILITY_BIG_PECKS)
+ return TRUE;
+ return FALSE;
+}
+
+bool32 ShouldLowerSpeed(u8 battlerAtk, u8 battlerDef, u16 defAbility)
+{
+ if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return FALSE; // Don't bother lowering stats if can kill enemy.
+
+ if (!WillAIStrikeFirst()
+ && defAbility != ABILITY_CONTRARY
+ && defAbility != ABILITY_CLEAR_BODY
+ && defAbility != ABILITY_FULL_METAL_BODY
+ && defAbility != ABILITY_WHITE_SMOKE)
+ return TRUE;
+ return FALSE;
+}
+
+bool32 ShouldLowerSpAtk(u8 battlerAtk, u8 battlerDef, u16 defAbility)
+{
+ if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return FALSE; // Don't bother lowering stats if can kill enemy.
+
+ if (gBattleMons[battlerDef].statStages[STAT_SPATK] > 4
+ && HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)
+ && defAbility != ABILITY_CONTRARY
+ && defAbility != ABILITY_CLEAR_BODY
+ && defAbility != ABILITY_FULL_METAL_BODY
+ && defAbility != ABILITY_WHITE_SMOKE)
+ return TRUE;
+ return FALSE;
+}
+
+bool32 ShouldLowerSpDef(u8 battlerAtk, u8 battlerDef, u16 defAbility)
+{
+ if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return FALSE; // Don't bother lowering stats if can kill enemy.
+
+ if (gBattleMons[battlerDef].statStages[STAT_SPDEF] > 4
+ && HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)
+ && defAbility != ABILITY_CONTRARY
+ && defAbility != ABILITY_CLEAR_BODY
+ && defAbility != ABILITY_FULL_METAL_BODY
+ && defAbility != ABILITY_WHITE_SMOKE)
+ return TRUE;
+ return FALSE;
+}
+
+bool32 ShouldLowerAccuracy(u8 battlerAtk, u8 battlerDef, u16 defAbility)
+{
+ if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return FALSE; // Don't bother lowering stats if can kill enemy.
+
+ if (defAbility != ABILITY_CONTRARY
+ && defAbility != ABILITY_CLEAR_BODY
+ && defAbility != ABILITY_WHITE_SMOKE
+ && defAbility != ABILITY_FULL_METAL_BODY
+ && defAbility != ABILITY_KEEN_EYE)
+ return TRUE;
+ return FALSE;
+}
+
+bool32 ShouldLowerEvasion(u8 battlerAtk, u8 battlerDef, u16 defAbility)
+{
+ if (WillAIStrikeFirst() && (AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return FALSE; // Don't bother lowering stats if can kill enemy.
+
+ if (gBattleMons[battlerDef].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE
+ && defAbility != ABILITY_CONTRARY
+ && defAbility != ABILITY_CLEAR_BODY
+ && defAbility != ABILITY_FULL_METAL_BODY
+ && defAbility != ABILITY_WHITE_SMOKE)
+ return TRUE;
+ return FALSE;
+}
+
+bool32 CanIndexMoveFaintTarget(u8 battlerAtk, u8 battlerDef, u8 index, u8 numHits)
+{
+ s32 dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index];
+
+ if (numHits)
+ dmg *= numHits;
+
+ if (gBattleMons[battlerDef].hp <= dmg)
+ return TRUE;
+ return FALSE;
+}
+
+u16 *GetMovesArray(u32 battler)
+{
+ if (IsBattlerAIControlled(battler) || IsBattlerAIControlled(BATTLE_PARTNER(battler)))
+ return gBattleMons[battler].moves;
+ else
+ return gBattleResources->battleHistory->usedMoves[battler];
+}
+
+bool32 HasOnlyMovesWithSplit(u32 battlerId, u32 split, bool32 onlyOffensive)
+{
+ u32 i;
+ u16 *moves = GetMovesArray(battlerId);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (onlyOffensive && IS_MOVE_STATUS(moves[i]))
+ continue;
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && GetBattleMoveSplit(moves[i]) != split)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool32 HasMoveWithSplit(u32 battler, u32 split)
+{
+ u32 i;
+ u16 *moves = GetMovesArray(battler);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && GetBattleMoveSplit(moves[i]) == split)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 HasMoveWithType(u32 battler, u8 type)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battler);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && gBattleMoves[moves[i]].type == type)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 HasMoveEffect(u32 battlerId, u16 moveEffect)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battlerId);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && gBattleMoves[moves[i]].effect == moveEffect)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 HasMove(u32 battlerId, u32 move)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battlerId);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && moves[i] == move)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 HasMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef, u8 accCheck, bool32 ignoreStatus, u16 atkAbility, u16 defAbility, u16 atkHoldEffect, u16 defHoldEffect)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battlerAtk);
+ u8 moveLimitations = AI_DATA->moveLimitations[battlerAtk];
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] == MOVE_NONE || moves[i] == 0xFFFF)
+ continue;
+
+ if (!(gBitTable[i] & moveLimitations))
+ {
+ if (ignoreStatus && IS_MOVE_STATUS(moves[i]))
+ continue;
+ else if ((!IS_MOVE_STATUS(moves[i]) && gBattleMoves[moves[i]].accuracy == 0)
+ || AI_GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD))
+ continue;
+
+ if (AI_GetMoveAccuracy(battlerAtk, battlerDef, moves[i]) <= accCheck)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool32 HasSleepMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef)
+{
+ u8 moveLimitations = AI_DATA->moveLimitations[battlerAtk];
+ u32 i;
+ u16 *moves = GetMovesArray(battlerAtk);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] == MOVE_NONE)
+ break;
+ if (!(gBitTable[i] & moveLimitations))
+ {
+ if (gBattleMoves[moves[i]].effect == EFFECT_SLEEP
+ && AI_GetMoveAccuracy(battlerAtk, battlerDef, moves[i]) < 85)
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool32 IsHealingMoveEffect(u16 effect)
+{
+ switch (effect)
+ {
+ case EFFECT_RESTORE_HP:
+ case EFFECT_MORNING_SUN:
+ case EFFECT_SYNTHESIS:
+ case EFFECT_MOONLIGHT:
+ case EFFECT_SOFTBOILED:
+ case EFFECT_ROOST:
+ case EFFECT_SWALLOW:
+ case EFFECT_WISH:
+ case EFFECT_HEALING_WISH:
+ case EFFECT_HEAL_PULSE:
+ case EFFECT_REST:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 HasHealingEffect(u32 battlerId)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battlerId);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && IsHealingMoveEffect(gBattleMoves[moves[i]].effect))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 IsTrappingMoveEffect(u16 effect)
+{
+ switch (effect)
+ {
+ case EFFECT_MEAN_LOOK:
+ case EFFECT_TRAP:
+ case EFFECT_HIT_PREVENT_ESCAPE:
+ case EFFECT_FAIRY_LOCK:
+ //case EFFECT_NO_RETREAT: // TODO
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 HasTrappingMoveEffect(u8 battler)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battler);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && IsTrappingMoveEffect(gBattleMoves[moves[i]].effect))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 HasThawingMove(u8 battlerId)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battlerId);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && TestMoveFlags(moves[i], FLAG_THAW_USER))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 IsUngroundingEffect(u16 effect)
+{
+ switch (effect)
+ {
+ case EFFECT_MAGNET_RISE:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+// for anger point
+bool32 IsAttackBoostMoveEffect(u16 effect)
+{
+ switch (effect)
+ {
+ case EFFECT_ATTACK_UP:
+ case EFFECT_ATTACK_UP_2:
+ case EFFECT_ATTACK_ACCURACY_UP:
+ case EFFECT_ATTACK_SPATK_UP:
+ case EFFECT_DRAGON_DANCE:
+ case EFFECT_COIL:
+ case EFFECT_BELLY_DRUM:
+ case EFFECT_BULK_UP:
+ case EFFECT_GROWTH:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsStatRaisingEffect(u16 effect)
+{
+ switch (effect)
+ {
+ case EFFECT_ATTACK_UP:
+ case EFFECT_ATTACK_UP_2:
+ case EFFECT_DEFENSE_UP:
+ case EFFECT_DEFENSE_UP_2:
+ case EFFECT_DEFENSE_UP_3:
+ case EFFECT_SPEED_UP:
+ case EFFECT_SPEED_UP_2:
+ case EFFECT_SPECIAL_ATTACK_UP:
+ case EFFECT_SPECIAL_ATTACK_UP_2:
+ case EFFECT_SPECIAL_ATTACK_UP_3:
+ case EFFECT_SPECIAL_DEFENSE_UP:
+ case EFFECT_SPECIAL_DEFENSE_UP_2:
+ case EFFECT_ACCURACY_UP:
+ case EFFECT_ACCURACY_UP_2:
+ case EFFECT_EVASION_UP:
+ case EFFECT_EVASION_UP_2:
+ case EFFECT_MINIMIZE:
+ case EFFECT_DEFENSE_CURL:
+ #if B_CHARGE_SPDEF_RAISE >= GEN_5
+ case EFFECT_CHARGE:
+ #endif
+ case EFFECT_CALM_MIND:
+ case EFFECT_COSMIC_POWER:
+ case EFFECT_DRAGON_DANCE:
+ case EFFECT_ACUPRESSURE:
+ case EFFECT_SHELL_SMASH:
+ case EFFECT_SHIFT_GEAR:
+ case EFFECT_ATTACK_ACCURACY_UP:
+ case EFFECT_ATTACK_SPATK_UP:
+ case EFFECT_GROWTH:
+ case EFFECT_COIL:
+ case EFFECT_QUIVER_DANCE:
+ case EFFECT_BULK_UP:
+ case EFFECT_GEOMANCY:
+ case EFFECT_STOCKPILE:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsStatLoweringEffect(u16 effect)
+{
+ // ignore other potentially-beneficial effects like defog, gravity
+ switch (effect)
+ {
+ case EFFECT_ATTACK_DOWN:
+ case EFFECT_DEFENSE_DOWN:
+ case EFFECT_SPEED_DOWN:
+ case EFFECT_SPECIAL_ATTACK_DOWN:
+ case EFFECT_SPECIAL_DEFENSE_DOWN:
+ case EFFECT_ACCURACY_DOWN:
+ case EFFECT_EVASION_DOWN:
+ case EFFECT_ATTACK_DOWN_2:
+ case EFFECT_DEFENSE_DOWN_2:
+ case EFFECT_SPEED_DOWN_2:
+ case EFFECT_SPECIAL_ATTACK_DOWN_2:
+ case EFFECT_SPECIAL_DEFENSE_DOWN_2:
+ case EFFECT_ACCURACY_DOWN_2:
+ case EFFECT_EVASION_DOWN_2:
+ case EFFECT_TICKLE:
+ case EFFECT_CAPTIVATE:
+ case EFFECT_NOBLE_ROAR:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 HasDamagingMove(u8 battlerId)
+{
+ u32 i;
+ u16 *moves = GetMovesArray(battlerId);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && gBattleMoves[moves[i]].power != 0)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 HasDamagingMoveOfType(u8 battlerId, u8 type)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battlerId);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF
+ && gBattleMoves[moves[i]].type == type && gBattleMoves[moves[i]].power != 0)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 IsInstructBannedMove(u16 move)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sInstructBannedMoves); i++)
+ {
+ if (move == sInstructBannedMoves[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 IsEncoreEncouragedEffect(u16 moveEffect)
+{
+ u32 i;
+
+ for (i = 0; i < ARRAY_COUNT(sEncouragedEncoreEffects); i++)
+ {
+ if (moveEffect == sEncouragedEncoreEffects[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 MoveRequiresRecharging(u16 move)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sRechargeMoves); i++)
+ {
+ if (move == sRechargeMoves[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 MoveCallsOtherMove(u16 move)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sOtherMoveCallingMoves); i++)
+ {
+ if (move == sOtherMoveCallingMoves[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 TestMoveFlagsInMoveset(u8 battler, u32 flags)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battler);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && moves[i] != 0xFFFF && TestMoveFlags(moves[i], flags))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static u32 GetLeechSeedDamage(u8 battlerId)
+{
+ u32 damage = 0;
+ if ((gStatuses3[battlerId] & STATUS3_LEECHSEED)
+ && gBattleMons[gStatuses3[battlerId] & STATUS3_LEECHSEED_BATTLER].hp != 0)
+ {
+ damage = gBattleMons[battlerId].maxHP / 8;
+ if (damage == 0)
+ damage = 1;
+ }
+ return damage;
+}
+
+static u32 GetNightmareDamage(u8 battlerId)
+{
+ u32 damage = 0;
+ if ((gBattleMons[battlerId].status2 & STATUS2_NIGHTMARE) && gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ {
+ damage = gBattleMons[battlerId].maxHP / 4;
+ if (damage == 0)
+ damage = 1;
+ }
+ return damage;
+}
+
+static u32 GetCurseDamage(u8 battlerId)
+{
+ u32 damage = 0;
+ if (gBattleMons[battlerId].status2 & STATUS2_CURSED)
+ {
+ damage = gBattleMons[battlerId].maxHP / 4;
+ if (damage == 0)
+ damage = 1;
+ }
+ return damage;
+}
+
+static u32 GetTrapDamage(u8 battlerId)
+{
+ // ai has no knowledge about turns remaining
+ u32 damage = 0;
+ u32 holdEffect = AI_DATA->holdEffects[gBattleStruct->wrappedBy[battlerId]];
+ if (gBattleMons[battlerId].status2 & STATUS2_WRAPPED)
+ {
+ if (holdEffect == HOLD_EFFECT_BINDING_BAND)
+ damage = gBattleMons[battlerId].maxHP / (B_BINDING_DAMAGE >= GEN_6) ? 6 : 8;
+ else
+ damage = gBattleMons[battlerId].maxHP / (B_BINDING_DAMAGE >= GEN_6) ? 8 : 16;
+
+ if (damage == 0)
+ damage = 1;
+ }
+ return damage;
+}
+
+static u32 GetPoisonDamage(u8 battlerId)
+{
+ u32 damage = 0;
+
+ if (AI_DATA->abilities[battlerId] == ABILITY_POISON_HEAL)
+ return damage;
+
+ if (gBattleMons[battlerId].status1 & STATUS1_POISON)
+ {
+ damage = gBattleMons[battlerId].maxHP / 8;
+ if (damage == 0)
+ damage = 1;
+ }
+ else if (gBattleMons[battlerId].status1 & STATUS1_TOXIC_POISON)
+ {
+ damage = gBattleMons[battlerId].maxHP / 16;
+ if (damage == 0)
+ damage = 1;
+ if ((gBattleMons[battlerId].status1 & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns
+ gBattleMons[battlerId].status1 += STATUS1_TOXIC_TURN(1);
+ damage *= (gBattleMons[battlerId].status1 & STATUS1_TOXIC_COUNTER) >> 8;
+ }
+ return damage;
+}
+
+static bool32 BattlerAffectedBySandstorm(u8 battlerId, u16 ability)
+{
+ if (!IS_BATTLER_OF_TYPE(battlerId, TYPE_ROCK)
+ && !IS_BATTLER_OF_TYPE(battlerId, TYPE_GROUND)
+ && !IS_BATTLER_OF_TYPE(battlerId, TYPE_STEEL)
+ && ability != ABILITY_SAND_VEIL
+ && ability != ABILITY_SAND_FORCE
+ && ability != ABILITY_SAND_RUSH
+ && ability != ABILITY_OVERCOAT)
+ return TRUE;
+ return FALSE;
+}
+
+static bool32 BattlerAffectedByHail(u8 battlerId, u16 ability)
+{
+ if (!IS_BATTLER_OF_TYPE(battlerId, TYPE_ICE)
+ && ability != ABILITY_SNOW_CLOAK
+ && ability != ABILITY_OVERCOAT
+ && ability != ABILITY_ICE_BODY)
+ return TRUE;
+ return FALSE;
+}
+
+static u32 GetWeatherDamage(u8 battlerId)
+{
+ u32 ability = AI_DATA->abilities[battlerId];
+ u32 holdEffect = AI_DATA->holdEffects[battlerId];
+ u32 damage = 0;
+ if (!AI_WeatherHasEffect())
+ return 0;
+
+ if (gBattleWeather & B_WEATHER_SANDSTORM)
+ {
+ if (BattlerAffectedBySandstorm(battlerId, ability)
+ && !(gStatuses3[battlerId] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ && holdEffect != HOLD_EFFECT_SAFETY_GOGGLES)
+ {
+ damage = gBattleMons[battlerId].maxHP / 16;
+ if (damage == 0)
+ damage = 1;
+ }
+ }
+ if ((gBattleWeather & B_WEATHER_HAIL) && ability != ABILITY_ICE_BODY)
+ {
+ if (BattlerAffectedByHail(battlerId, ability)
+ && !(gStatuses3[battlerId] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ && holdEffect != HOLD_EFFECT_SAFETY_GOGGLES)
+ {
+ damage = gBattleMons[battlerId].maxHP / 16;
+ if (damage == 0)
+ damage = 1;
+ }
+ }
+ return damage;
+}
+
+u32 GetBattlerSecondaryDamage(u8 battlerId)
+{
+ u32 secondaryDamage;
+
+ if (AI_DATA->abilities[battlerId] == ABILITY_MAGIC_GUARD)
+ return FALSE;
+
+ secondaryDamage = GetLeechSeedDamage(battlerId)
+ + GetNightmareDamage(battlerId)
+ + GetCurseDamage(battlerId)
+ + GetTrapDamage(battlerId)
+ + GetPoisonDamage(battlerId)
+ + GetWeatherDamage(battlerId);
+
+ return secondaryDamage;
+}
+
+bool32 BattlerWillFaintFromWeather(u8 battler, u16 ability)
+{
+ if ((BattlerAffectedBySandstorm(battler, ability) || BattlerAffectedByHail(battler, ability))
+ && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 16)
+ return TRUE;
+
+ return FALSE;
+}
+
+bool32 BattlerWillFaintFromSecondaryDamage(u8 battler, u16 ability)
+{
+ if (GetBattlerSecondaryDamage(battler) != 0
+ && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 16)
+ return TRUE;
+ return FALSE;
+}
+
+static bool32 AnyUsefulStatIsRaised(u8 battler)
+{
+ u8 statId;
+
+ for (statId = STAT_ATK; statId < NUM_BATTLE_STATS; statId++)
+ {
+ if (gBattleMons[battler].statStages[statId] > DEFAULT_STAT_STAGE)
+ {
+ switch (statId)
+ {
+ case STAT_ATK:
+ if (HasMoveWithSplit(battler, SPLIT_PHYSICAL))
+ return TRUE;
+ break;
+ case STAT_SPATK:
+ if (HasMoveWithSplit(battler, SPLIT_SPECIAL))
+ return TRUE;
+ break;
+ case STAT_SPEED:
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+struct Pokemon *GetPartyBattlerPartyData(u8 battlerId, u8 switchBattler)
+{
+ struct Pokemon *mon;
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[switchBattler];
+ else
+ mon = &gEnemyParty[switchBattler];
+ return mon;
+}
+
+static bool32 PartyBattlerShouldAvoidHazards(u8 currBattler, u8 switchBattler)
+{
+ struct Pokemon *mon = GetPartyBattlerPartyData(currBattler, switchBattler);
+ u16 ability = GetMonAbility(mon); // we know our own party data
+ u16 holdEffect = GetBattlerHoldEffect(GetMonData(mon, MON_DATA_HELD_ITEM), TRUE);
+ u32 flags = gSideStatuses[GetBattlerSide(currBattler)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES);
+
+ if (flags == 0)
+ return FALSE;
+
+ if (ability == ABILITY_MAGIC_GUARD || ability == ABILITY_LEVITATE
+ || holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS)
+ return FALSE;
+
+ if (flags & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK) && GetMonData(mon, MON_DATA_HP) < (GetMonData(mon, MON_DATA_MAX_HP) / 8))
+ return TRUE;
+
+ return FALSE;
+}
+
+enum {
+ DONT_PIVOT,
+ CAN_TRY_PIVOT,
+ PIVOT,
+};
+bool32 ShouldPivot(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u8 moveIndex)
+{
+ bool8 hasStatBoost = AnyUsefulStatIsRaised(battlerAtk) || gBattleMons[battlerDef].statStages[STAT_EVASION] >= 9; //Significant boost in evasion for any class
+ u8 backupBattler = gActiveBattler;
+ bool32 shouldSwitch;
+ u8 battlerToSwitch;
+
+ gActiveBattler = battlerAtk;
+ shouldSwitch = ShouldSwitch();
+ battlerToSwitch = *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler);
+ gActiveBattler = backupBattler;
+
+ if (PartyBattlerShouldAvoidHazards(battlerAtk, battlerToSwitch))
+ return DONT_PIVOT;
+
+ if (!IsDoubleBattle())
+ {
+ if (CountUsablePartyMons(battlerAtk) == 0)
+ return CAN_TRY_PIVOT; // can't switch, but attack might still be useful
+
+ //TODO - predict opponent switching
+ /*if (IsPredictedToSwitch(battlerDef, battlerAtk) && !hasStatBoost)
+ return PIVOT; // Try pivoting so you can switch to a better matchup to counter your new opponent*/
+
+ if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first
+ {
+ if (!CanAIFaintTarget(battlerAtk, battlerDef, 0)) // Can't KO foe otherwise
+ {
+ if (CanAIFaintTarget(battlerAtk, battlerDef, 2))
+ {
+ // attacker can kill target in two hits (theoretically)
+ if (CanTargetFaintAi(battlerDef, battlerAtk))
+ return PIVOT; // Won't get the two turns, pivot
+
+ if (!IS_MOVE_STATUS(move) && (shouldSwitch
+ || (AtMaxHp(battlerDef) && (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH
+ || (defAbility == ABILITY_STURDY && B_STURDY >= GEN_5) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD))))
+ return PIVOT; // pivot to break sash/sturdy/multiscale
+ }
+ else if (!hasStatBoost)
+ {
+ if (!IS_MOVE_STATUS(move) && (AtMaxHp(battlerDef) && (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH
+ || (defAbility == ABILITY_STURDY && B_STURDY >= GEN_5) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD)))
+ return PIVOT; // pivot to break sash/sturdy/multiscale
+
+ if (shouldSwitch)
+ return PIVOT;
+
+ /* TODO - check if switchable mon unafffected by/will remove hazards
+ if (gSideStatuses[battlerAtk] & SIDE_STATUS_SPIKES && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS)
+ return PIVOT;*/
+
+ /*if (BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk]) && switchScore >= SWITCHING_INCREASE_WALLS_FOE)
+ return PIVOT;*/
+
+ /*if (IsClassDamager(class) && switchScore >= SWITCHING_INCREASE_HAS_SUPER_EFFECTIVE_MOVE)
+ {
+ bool8 physMoveInMoveset = PhysicalMoveInMoveset(battlerAtk);
+ bool8 specMoveInMoveset = SpecialMoveInMoveset(battlerAtk);
+
+ //Pivot if attacking stats are bad
+ if (physMoveInMoveset && !specMoveInMoveset)
+ {
+ if (STAT_STAGE_ATK < 6)
+ return PIVOT;
+ }
+ else if (!physMoveInMoveset && specMoveInMoveset)
+ {
+ if (STAT_STAGE_SPATK < 6)
+ return PIVOT;
+ }
+ else if (physMoveInMoveset && specMoveInMoveset)
+ {
+ if (STAT_STAGE_ATK < 6 && STAT_STAGE_SPATK < 6)
+ return PIVOT;
+ }
+
+ return CAN_TRY_PIVOT;
+ }*/
+ }
+ }
+ }
+ else // Opponent Goes First
+ {
+ if (CanTargetFaintAi(battlerDef, battlerAtk))
+ {
+ if (gBattleMoves[move].effect == EFFECT_TELEPORT)
+ return DONT_PIVOT; // If you're going to faint because you'll go second, use a different move
+ else
+ return CAN_TRY_PIVOT; // You're probably going to faint anyways so if for some reason you don't, better switch
+ }
+ else if (CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 2)) // Foe can 2HKO AI
+ {
+ if (CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ {
+ if (!BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk]))
+ return CAN_TRY_PIVOT; // Use this move to KO if you must
+ }
+ else // Can't KO the foe
+ {
+ return PIVOT;
+ }
+ }
+ else // Foe can 3HKO+ AI
+ {
+ if (CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ {
+ if (!BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk]) // This is the only move that can KO
+ && !hasStatBoost) //You're not wasting a valuable stat boost
+ {
+ return CAN_TRY_PIVOT;
+ }
+ }
+ else if (CanAIFaintTarget(battlerAtk, battlerDef, 2))
+ {
+ // can knock out foe in 2 hits
+ if (IS_MOVE_STATUS(move) && (shouldSwitch //Damaging move
+ //&& (switchScore >= SWITCHING_INCREASE_RESIST_ALL_MOVES + SWITCHING_INCREASE_KO_FOE //remove hazards
+ || (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH && AtMaxHp(battlerDef))))
+ return DONT_PIVOT; // Pivot to break the sash
+ else
+ return CAN_TRY_PIVOT;
+ }
+ else
+ {
+ //if (IsClassDamager(class) && switchScore >= SWITCHING_INCREASE_KO_FOE)
+ //return PIVOT; //Only switch if way better matchup
+
+ if (!hasStatBoost)
+ {
+ // TODO - check if switching prevents/removes hazards
+ //if (gSideStatuses[battlerAtk] & SIDE_STATUS_SPIKES && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS)
+ //return PIVOT;
+
+ // TODO - not always a good idea
+ //if (BattlerWillFaintFromSecondaryDamage(battlerAtk) && switchScore >= SWITCHING_INCREASE_HAS_SUPER_EFFECTIVE_MOVE)
+ //return PIVOT;
+
+ /*if (IsClassDamager(class) && switchScore >= SWITCHING_INCREASE_HAS_SUPER_EFFECTIVE_MOVE)
+ {
+ bool8 physMoveInMoveset = PhysicalMoveInMoveset(battlerAtk);
+ bool8 specMoveInMoveset = SpecialMoveInMoveset(battlerAtk);
+
+ //Pivot if attacking stats are bad
+ if (physMoveInMoveset && !specMoveInMoveset)
+ {
+ if (STAT_STAGE_ATK < 6)
+ return PIVOT;
+ }
+ else if (!physMoveInMoveset && specMoveInMoveset)
+ {
+ if (STAT_STAGE_SPATK < 6)
+ return PIVOT;
+ }
+ else if (physMoveInMoveset && specMoveInMoveset)
+ {
+ if (STAT_STAGE_ATK < 6 && STAT_STAGE_SPATK < 6)
+ return PIVOT;
+ }
+ }*/
+
+ return CAN_TRY_PIVOT;
+ }
+ }
+ }
+ }
+ }
+
+ return DONT_PIVOT;
+}
+
+bool32 CanKnockOffItem(u8 battler, u16 item)
+{
+ if (item == ITEM_NONE)
+ return FALSE;
+
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_FRONTIER
+ | BATTLE_TYPE_LINK
+ | BATTLE_TYPE_RECORDED_LINK
+ | BATTLE_TYPE_SECRET_BASE
+ #if defined B_TRAINERS_KNOCK_OFF_ITEMS
+ | BATTLE_TYPE_TRAINER
+ #endif
+ )) && GetBattlerSide(battler) == B_SIDE_PLAYER)
+ return FALSE;
+
+ if (AI_DATA->abilities[battler] == ABILITY_STICKY_HOLD)
+ return FALSE;
+
+ if (!CanBattlerGetOrLoseItem(battler, item))
+ return FALSE;
+
+ return TRUE;
+}
+
+// status checks
+bool32 IsBattlerIncapacitated(u8 battler, u16 ability)
+{
+ if ((gBattleMons[battler].status1 & STATUS1_FREEZE) && !HasThawingMove(battler))
+ return TRUE; // if battler has thawing move we assume they will definitely use it, and thus being frozen should be neglected
+
+ if (gBattleMons[battler].status1 & STATUS1_SLEEP)
+ return TRUE;
+
+ if (gBattleMons[battler].status2 & STATUS2_RECHARGE || (ability == ABILITY_TRUANT && gDisableStructs[battler].truantCounter != 0))
+ return TRUE;
+
+ return FALSE;
+}
+
+bool32 AI_CanSleep(u8 battler, u16 ability)
+{
+ if (ability == ABILITY_INSOMNIA
+ || ability == ABILITY_VITAL_SPIRIT
+ || gBattleMons[battler].status1 & STATUS1_ANY
+ || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD
+ || (gFieldStatuses & (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN))
+ || IsAbilityStatusProtected(battler))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove)
+{
+ if (!AI_CanSleep(battlerDef, defAbility)
+ || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
+ || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove)) // shouldn't try to sleep mon that partner is trying to make sleep
+ return FALSE;
+ return TRUE;
+}
+
+static bool32 AI_CanPoisonType(u8 battlerAttacker, u8 battlerTarget)
+{
+ return ((AI_DATA->abilities[battlerAttacker] == ABILITY_CORROSION && gBattleMoves[gCurrentMove].split == SPLIT_STATUS)
+ || !(IS_BATTLER_OF_TYPE(battlerTarget, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerTarget, TYPE_STEEL)));
+}
+
+static bool32 AI_CanBePoisoned(u8 battlerAtk, u8 battlerDef)
+{
+ u16 ability = AI_DATA->abilities[battlerDef];
+
+ if (!(AI_CanPoisonType(battlerAtk, battlerDef))
+ || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD
+ || gBattleMons[battlerDef].status1 & STATUS1_ANY
+ || ability == ABILITY_IMMUNITY
+ || ability == ABILITY_COMATOSE
+ || AI_IsAbilityOnSide(battlerDef, ABILITY_PASTEL_VEIL)
+ || gBattleMons[battlerDef].status1 & STATUS1_ANY
+ || IsAbilityStatusProtected(battlerDef)
+ || AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 ShouldPoisonSelf(u8 battler, u16 ability)
+{
+ if (AI_CanBePoisoned(battler, battler) && (
+ ability == ABILITY_MARVEL_SCALE
+ || ability == ABILITY_POISON_HEAL
+ || ability == ABILITY_QUICK_FEET
+ || ability == ABILITY_MAGIC_GUARD
+ || (ability == ABILITY_TOXIC_BOOST && HasMoveWithSplit(battler, SPLIT_PHYSICAL))
+ || (ability == ABILITY_GUTS && HasMoveWithSplit(battler, SPLIT_PHYSICAL))
+ || HasMoveEffect(battler, EFFECT_FACADE)
+ || HasMoveEffect(battler, EFFECT_PSYCHO_SHIFT)))
+ return TRUE; // battler can be poisoned and has move/ability that synergizes with being poisoned
+ return FALSE;
+}
+
+bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove)
+{
+ if (!AI_CanBePoisoned(battlerAtk, battlerDef)
+ || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
+ || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
+ || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove))
+ return FALSE;
+ else if (defAbility != ABILITY_CORROSION && (IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerDef, TYPE_STEEL)))
+ return FALSE;
+ else if (IsValidDoubleBattle(battlerAtk) && AI_DATA->abilities[BATTLE_PARTNER(battlerDef)] == ABILITY_PASTEL_VEIL)
+ return FALSE;
+
+ return TRUE;
+}
+
+static bool32 AI_CanBeParalyzed(u8 battler, u16 ability)
+{
+ if (ability == ABILITY_LIMBER
+ || IS_BATTLER_OF_TYPE(battler, TYPE_ELECTRIC)
+ || gBattleMons[battler].status1 & STATUS1_ANY
+ || IsAbilityStatusProtected(battler))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 AI_CanParalyze(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove)
+{
+ if (!AI_CanBeParalyzed(battlerDef, defAbility)
+ || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
+ || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD
+ || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
+ || PartnerMoveEffectIsStatusSameTarget(BATTLE_PARTNER(battlerAtk), battlerDef, partnerMove))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 AI_CanBeConfused(u8 battler, u16 ability)
+{
+ if ((gBattleMons[battler].status2 & STATUS2_CONFUSION)
+ || (ability == ABILITY_OWN_TEMPO)
+ || (IsBattlerGrounded(battler) && (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 AI_CanConfuse(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove)
+{
+ if (!AI_CanBeConfused(battlerDef, defAbility)
+ || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
+ || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD
+ || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
+ || DoesPartnerHaveSameMoveEffect(battlerAtkPartner, battlerDef, move, partnerMove))
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool32 AI_CanBeBurned(u8 battler, u16 ability)
+{
+ if (ability == ABILITY_WATER_VEIL
+ || ability == ABILITY_WATER_BUBBLE
+ || IS_BATTLER_OF_TYPE(battler, TYPE_FIRE)
+ || gBattleMons[battler].status1 & STATUS1_ANY
+ || IsAbilityStatusProtected(battler)
+ || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD)
+ return FALSE;
+ return TRUE;
+}
+
+bool32 ShouldBurnSelf(u8 battler, u16 ability)
+{
+ if (AI_CanBeBurned(battler, ability) && (
+ ability == ABILITY_QUICK_FEET
+ || ability == ABILITY_HEATPROOF
+ || ability == ABILITY_MAGIC_GUARD
+ || (ability == ABILITY_FLARE_BOOST && HasMoveWithSplit(battler, SPLIT_SPECIAL))
+ || (ability == ABILITY_GUTS && HasMoveWithSplit(battler, SPLIT_PHYSICAL))
+ || HasMoveEffect(battler, EFFECT_FACADE)
+ || HasMoveEffect(battler, EFFECT_PSYCHO_SHIFT)))
+ return TRUE;
+ return FALSE;
+}
+
+bool32 AI_CanBurn(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove)
+{
+ if (!AI_CanBeBurned(battlerDef, defAbility)
+ || AI_GetMoveEffectiveness(move, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
+ || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
+ || PartnerMoveEffectIsStatusSameTarget(battlerAtkPartner, battlerDef, partnerMove))
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender)
+{
+ if ((gBattleMons[battlerDef].status2 & STATUS2_INFATUATION)
+ || AI_GetMoveEffectiveness(AI_THINKING_STRUCT->moveConsidered, battlerAtk, battlerDef) == AI_EFFECTIVENESS_x0
+ || defAbility == ABILITY_OBLIVIOUS
+ || atkGender == defGender
+ || atkGender == MON_GENDERLESS
+ || defGender == MON_GENDERLESS
+ || AI_IsAbilityOnSide(battlerDef, ABILITY_AROMA_VEIL))
+ return FALSE;
+ return TRUE;
+}
+
+u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move)
+{
+ if (defAbility == ABILITY_INNER_FOCUS
+ || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
+ || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent goes first
+ {
+ return 0; // don't try to flinch
+ }
+ else if ((gBattleMons[battlerDef].status1 & STATUS1_SLEEP) && !HasMoveEffect(battlerDef, EFFECT_SLEEP_TALK) && !HasMoveEffect(battlerDef, EFFECT_SNORE))
+ {
+ return 0; // don't try to flinch sleeping pokemon
+ }
+ else if (atkAbility == ABILITY_SERENE_GRACE
+ || gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS
+ || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION
+ || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
+ {
+ return 2; // good idea to flinch
+ }
+ return 1; // decent idea to flinch
+}
+
+bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move)
+{
+ if (BattlerWillFaintFromSecondaryDamage(battlerDef, AI_DATA->abilities[battlerDef]))
+ return TRUE; // battler is taking secondary damage with low HP
+
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL)
+ {
+ if (!CanTargetFaintAi(battlerDef, battlerAtk))
+ return TRUE; // attacker goes first and opponent can't kill us
+ }
+
+ return FALSE;
+}
+
+bool32 ShouldFakeOut(u8 battlerAtk, u8 battlerDef, u16 move)
+{
+ if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND && CountUsablePartyMons(battlerAtk) == 0)
+ return FALSE; // don't lock attacker into fake out if can't switch out
+
+ if (gDisableStructs[battlerAtk].isFirstTurn
+ && ShouldTryToFlinch(battlerAtk, battlerDef, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], move)
+ && !DoesSubstituteBlockMove(battlerAtk, battlerDef, move))
+ return TRUE;
+
+ return FALSE;
+}
+
+static u32 FindMoveUsedXTurnsAgo(u32 battlerId, u32 x)
+{
+ s32 i, index = BATTLE_HISTORY->moveHistoryIndex[battlerId];
+ for (i = 0; i < x; i++)
+ {
+ if (--index < 0)
+ index = AI_MOVE_HISTORY_COUNT - 1;
+ }
+ return BATTLE_HISTORY->moveHistory[battlerId][index];
+}
+
+bool32 IsWakeupTurn(u8 battler)
+{
+ // Check if rest was used 2 turns ago
+ if ((gBattleMons[battler].status1 & STATUS1_SLEEP) == 1 && FindMoveUsedXTurnsAgo(battler, 2) == MOVE_REST)
+ return TRUE;
+ else // no way to know
+ return FALSE;
+}
+
+bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof)
+{
+ struct Pokemon *party;
+ u32 i;
+
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (checkSoundproof && GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF)
+ continue;
+
+ if (GetMonData(&party[i], MON_DATA_STATUS) != STATUS1_NONE)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+u16 GetBattlerSideSpeedAverage(u8 battler)
+{
+ u16 speed1 = 0;
+ u16 speed2 = 0;
+ u8 numBattlersAlive = 0;
+
+ if (IsBattlerAlive(battler))
+ {
+ speed1 = GetBattlerTotalSpeedStat(battler);
+ numBattlersAlive++;
+ }
+
+ if (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battler)))
+ {
+ speed2 = GetBattlerTotalSpeedStat(BATTLE_PARTNER(battler));
+ numBattlersAlive++;
+ }
+
+ return (speed1 + speed2) / numBattlersAlive;
+}
+
+bool32 ShouldUseRecoilMove(u8 battlerAtk, u8 battlerDef, u32 recoilDmg, u8 moveIndex)
+{
+ if (recoilDmg >= gBattleMons[battlerAtk].hp //Recoil kills attacker
+ && CountUsablePartyMons(battlerDef) != 0) //Foe has more than 1 target left
+ {
+ if (recoilDmg >= gBattleMons[battlerDef].hp && !CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return TRUE; //If it's the only KO move then just use it
+ else
+ return FALSE; //Not as good to use move if you'll faint and not win
+ }
+
+ return TRUE;
+}
+
+bool32 ShouldAbsorb(u8 battlerAtk, u8 battlerDef, u16 move, s32 damage)
+{
+ if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ {
+ // using item or user goes first
+ u8 healPercent = (gBattleMoves[move].argument == 0) ? 50 : gBattleMoves[move].argument;
+ s32 healDmg = (healPercent * damage) / 100;
+
+ if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK)
+ healDmg = 0;
+
+ if (CanTargetFaintAi(battlerDef, battlerAtk)
+ && !CanTargetFaintAiWithMod(battlerDef, battlerAtk, healDmg, 0))
+ return TRUE; // target can faint attacker unless they heal
+ else if (!CanTargetFaintAi(battlerDef, battlerAtk) && AI_DATA->hpPercents[battlerAtk] < 60 && (Random() % 3))
+ return TRUE; // target can't faint attacker at all, attacker health is about half, 2/3rds rate of encouraging healing
+ }
+ else
+ {
+ // opponent goes first
+ if (!CanTargetFaintAi(battlerDef, battlerAtk))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 ShouldRecover(u8 battlerAtk, u8 battlerDef, u16 move, u8 healPercent)
+{
+ if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ {
+ // using item or user going first
+ s32 damage = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex];
+ s32 healAmount = (healPercent * damage) / 100;
+ if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK)
+ healAmount = 0;
+
+ if (CanTargetFaintAi(battlerDef, battlerAtk)
+ && !CanTargetFaintAiWithMod(battlerDef, battlerAtk, healAmount, 0))
+ return TRUE; // target can faint attacker unless they heal
+ else if (!CanTargetFaintAi(battlerDef, battlerAtk) && AI_DATA->hpPercents[battlerAtk] < 60 && (Random() % 3))
+ return TRUE; // target can't faint attacker at all, attacker health is about half, 2/3rds rate of encouraging healing
+ }
+ return FALSE;
+}
+
+bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect)
+{
+ u8 atkSide = GetBattlerSide(battlerAtk);
+ switch (moveEffect)
+ {
+ case EFFECT_AURORA_VEIL:
+ // Use only in Hail and only if AI doesn't already have Reflect, Light Screen or Aurora Veil itself active.
+ if (gBattleWeather & B_WEATHER_HAIL
+ && !(gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL)))
+ return TRUE;
+ break;
+ case EFFECT_REFLECT:
+ // Use only if the player has a physical move and AI doesn't already have Reflect itself active.
+ if (HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)
+ && !(gSideStatuses[atkSide] & SIDE_STATUS_REFLECT))
+ return TRUE;
+ break;
+ case EFFECT_LIGHT_SCREEN:
+ // Use only if the player has a special move and AI doesn't already have Light Screen itself active.
+ if (HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)
+ && !(gSideStatuses[atkSide] & SIDE_STATUS_LIGHTSCREEN))
+ return TRUE;
+ break;
+ }
+
+ return FALSE;
+}
+
+// Partner Logic
+bool32 IsValidDoubleBattle(u8 battlerAtk)
+{
+ if (IsDoubleBattle()
+ && ((IsBattlerAlive(BATTLE_OPPOSITE(battlerAtk)) && IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerAtk)))) || IsBattlerAlive(BATTLE_PARTNER(battlerAtk))))
+ return TRUE;
+ return FALSE;
+}
+
+u16 GetAllyChosenMove(u8 battlerId)
+{
+ u8 partnerBattler = BATTLE_PARTNER(battlerId);
+
+ if (!IsBattlerAlive(partnerBattler) || !IsBattlerAIControlled(partnerBattler))
+ return MOVE_NONE;
+ else if (partnerBattler > battlerId) // Battler with the lower id chooses the move first.
+ return gLastMoves[partnerBattler];
+ else
+ return gBattleMons[partnerBattler].moves[gBattleStruct->chosenMovePositions[partnerBattler]];
+}
+
+bool32 IsTargetingPartner(u8 battlerAtk, u8 battlerDef)
+{
+ if ((battlerAtk & BIT_SIDE) == (battlerDef & BIT_SIDE))
+ return TRUE;
+
+ return FALSE;
+}
+
+//PARTNER_MOVE_EFFECT_IS_SAME
+bool32 DoesPartnerHaveSameMoveEffect(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove)
+{
+ if (!IsDoubleBattle())
+ return FALSE;
+
+ if (gBattleMoves[move].effect == gBattleMoves[partnerMove].effect
+ && gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE
+ && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+//PARTNER_MOVE_EFFECT_IS_SAME_NO_TARGET
+bool32 PartnerHasSameMoveEffectWithoutTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove)
+{
+ if (!IsDoubleBattle())
+ return FALSE;
+
+ if (gBattleMoves[move].effect == gBattleMoves[partnerMove].effect
+ && gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE)
+ return TRUE;
+ return FALSE;
+}
+
+//PARTNER_MOVE_EFFECT_IS_STATUS_SAME_TARGET
+bool32 PartnerMoveEffectIsStatusSameTarget(u8 battlerAtkPartner, u8 battlerDef, u16 partnerMove)
+{
+ if (!IsDoubleBattle())
+ return FALSE;
+
+ if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE
+ && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef
+ && (gBattleMoves[partnerMove].effect == EFFECT_SLEEP
+ || gBattleMoves[partnerMove].effect == EFFECT_POISON
+ || gBattleMoves[partnerMove].effect == EFFECT_TOXIC
+ || gBattleMoves[partnerMove].effect == EFFECT_PARALYZE
+ || gBattleMoves[partnerMove].effect == EFFECT_WILL_O_WISP
+ || gBattleMoves[partnerMove].effect == EFFECT_YAWN))
+ return TRUE;
+ return FALSE;
+}
+
+//PARTNER_MOVE_EFFECT_IS_WEATHER
+bool32 PartnerMoveEffectIsWeather(u8 battlerAtkPartner, u16 partnerMove)
+{
+ if (!IsDoubleBattle())
+ return FALSE;
+
+ if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE
+ && (gBattleMoves[partnerMove].effect == EFFECT_SUNNY_DAY
+ || gBattleMoves[partnerMove].effect == EFFECT_RAIN_DANCE
+ || gBattleMoves[partnerMove].effect == EFFECT_SANDSTORM
+ || gBattleMoves[partnerMove].effect == EFFECT_HAIL))
+ return TRUE;
+
+ return FALSE;
+}
+
+//PARTNER_MOVE_EFFECT_IS_TERRAIN
+bool32 PartnerMoveEffectIsTerrain(u8 battlerAtkPartner, u16 partnerMove)
+{
+ if (!IsDoubleBattle())
+ return FALSE;
+
+ if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE
+ && (gBattleMoves[partnerMove].effect == EFFECT_GRASSY_TERRAIN
+ || gBattleMoves[partnerMove].effect == EFFECT_MISTY_TERRAIN
+ || gBattleMoves[partnerMove].effect == EFFECT_ELECTRIC_TERRAIN
+ || gBattleMoves[partnerMove].effect == EFFECT_PSYCHIC_TERRAIN))
+ return TRUE;
+
+ return FALSE;
+}
+
+//PARTNER_MOVE_IS_TAILWIND_TRICKROOM
+bool32 PartnerMoveIs(u8 battlerAtkPartner, u16 partnerMove, u16 moveCheck)
+{
+ if (!IsDoubleBattle())
+ return FALSE;
+
+ if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE && partnerMove == moveCheck)
+ return TRUE;
+ return FALSE;
+}
+
+//PARTNER_MOVE_IS_SAME
+bool32 PartnerMoveIsSameAsAttacker(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove)
+{
+ if (!IsDoubleBattle())
+ return FALSE;
+
+ if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE && move == partnerMove && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef)
+ return TRUE;
+ return FALSE;
+}
+
+//PARTNER_MOVE_IS_SAME_NO_TARGET
+bool32 PartnerMoveIsSameNoTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove)
+{
+ if (!IsDoubleBattle())
+ return FALSE;
+ if (gChosenMoveByBattler[battlerAtkPartner] != MOVE_NONE && move == partnerMove)
+ return TRUE;
+ return FALSE;
+}
+
+bool32 ShouldUseWishAromatherapy(u8 battlerAtk, u8 battlerDef, u16 move)
+{
+ u32 i;
+ u32 firstId, lastId;
+ struct Pokemon* party;
+ bool32 hasStatus = FALSE;
+ bool32 needHealing = FALSE;
+
+ GetAIPartyIndexes(battlerAtk, &firstId, &lastId);
+
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ if (CountUsablePartyMons(battlerAtk) == 0
+ && (CanTargetFaintAi(battlerDef, battlerAtk) || BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk])))
+ return FALSE; // Don't heal if last mon and will faint
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ u16 currHp = GetMonData(&party[i], MON_DATA_HP);
+ u16 maxHp = GetMonData(&party[i], MON_DATA_MAX_HP);
+
+ if (!GetMonData(&party[i], MON_DATA_IS_EGG, NULL) && currHp > 0)
+ {
+ if ((currHp * 100) / maxHp < 65 // Less than 65% health remaining
+ && i >= firstId && i < lastId) // Can only switch to mon on your team
+ {
+ needHealing = TRUE;
+ }
+
+ if (GetMonData(&party[i], MON_DATA_STATUS, NULL) != STATUS1_NONE)
+ {
+ if (move != MOVE_HEAL_BELL || GetMonAbility(&party[i]) != ABILITY_SOUNDPROOF)
+ hasStatus = TRUE;
+ }
+ }
+ }
+
+ if (!IsDoubleBattle())
+ {
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_WISH:
+ if (needHealing)
+ return TRUE;
+ break;
+ case EFFECT_HEAL_BELL:
+ if (hasStatus)
+ return TRUE;
+ }
+ }
+ else
+ {
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_WISH:
+ return ShouldRecover(battlerAtk, battlerDef, move, 50); // Switch recovery isn't good idea in doubles
+ case EFFECT_HEAL_BELL:
+ if (hasStatus)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+// party logic
+s32 AI_CalcPartyMonDamage(u16 move, u8 battlerAtk, u8 battlerDef, struct Pokemon *mon)
+{
+ s32 dmg;
+ u32 i;
+ u8 effectiveness;
+ struct BattlePokemon *battleMons = Alloc(sizeof(struct BattlePokemon) * MAX_BATTLERS_COUNT);
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ battleMons[i] = gBattleMons[i];
+
+ PokemonToBattleMon(mon, &gBattleMons[battlerAtk]);
+ dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE);
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ gBattleMons[i] = battleMons[i];
+
+ Free(battleMons);
+
+ return dmg;
+}
+
+s32 CountUsablePartyMons(u8 battlerId)
+{
+ s32 battlerOnField1, battlerOnField2, i, ret;
+ struct Pokemon *party;
+
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ battlerOnField1 = gBattlerPartyIndexes[battlerId];
+ battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(GetBattlerPosition(battlerId) ^ BIT_FLANK)];
+ }
+ else // In singles there's only one battlerId by side.
+ {
+ battlerOnField1 = gBattlerPartyIndexes[battlerId];
+ battlerOnField2 = gBattlerPartyIndexes[battlerId];
+ }
+
+ ret = 0;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (i != battlerOnField1 && i != battlerOnField2
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
+ {
+ ret++;
+ }
+ }
+
+ return ret;
+}
+
+bool32 IsPartyFullyHealedExceptBattler(u8 battlerId)
+{
+ struct Pokemon *party;
+ u32 i;
+
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (i != gBattlerPartyIndexes[battlerId]
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG
+ && GetMonData(&party[i], MON_DATA_HP) < GetMonData(&party[i], MON_DATA_MAX_HP))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool32 PartyHasMoveSplit(u8 battlerId, u8 split)
+{
+ u8 firstId, lastId;
+ struct Pokemon* party = GetBattlerPartyData(battlerId);
+ u32 i, j;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP, NULL) == 0)
+ continue;
+
+ for (j = 0; j < MAX_MON_MOVES; j++)
+ {
+ u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL);
+ u16 pp = GetMonData(&party[i], MON_DATA_PP1 + j, NULL);
+
+ if (pp > 0 && move != MOVE_NONE)
+ {
+ //TODO - handle photon geyser, light that burns the sky
+ if (gBattleMoves[move].split == split)
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+bool32 SideHasMoveSplit(u8 battlerId, u8 split)
+{
+ if (IsDoubleBattle())
+ {
+ if (HasMoveWithSplit(battlerId, split) || HasMoveWithSplit(BATTLE_PARTNER(battlerId), split))
+ return TRUE;
+ }
+ else
+ {
+ if (HasMoveWithSplit(battlerId, split))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 IsAbilityOfRating(u16 ability, s8 rating)
+{
+ if (sAiAbilityRatings[ability] >= rating)
+ return TRUE;
+ return FALSE;
+}
+
+s8 GetAbilityRating(u16 ability)
+{
+ return sAiAbilityRatings[ability];
+}
+
+static const u16 sRecycleEncouragedItems[] =
+{
+ ITEM_CHESTO_BERRY,
+ ITEM_LUM_BERRY,
+ ITEM_STARF_BERRY,
+ ITEM_SITRUS_BERRY,
+ ITEM_MICLE_BERRY,
+ ITEM_CUSTAP_BERRY,
+ ITEM_MENTAL_HERB,
+ ITEM_FOCUS_SASH,
+ // TODO expand this
+};
+
+// Its assumed that the berry is strategically given, so no need to check benefits of the berry
+bool32 IsStatBoostingBerry(u16 item)
+{
+ switch (item)
+ {
+ case ITEM_LIECHI_BERRY:
+ case ITEM_GANLON_BERRY:
+ case ITEM_SALAC_BERRY:
+ case ITEM_PETAYA_BERRY:
+ case ITEM_APICOT_BERRY:
+ //case ITEM_LANSAT_BERRY:
+ case ITEM_STARF_BERRY:
+ case ITEM_MICLE_BERRY:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 ShouldRestoreHpBerry(u8 battlerAtk, u16 item)
+{
+ switch (item)
+ {
+ case ITEM_ORAN_BERRY:
+ if (gBattleMons[battlerAtk].maxHP <= 50)
+ return TRUE; // Only worth it in the early game
+ return FALSE;
+ case ITEM_SITRUS_BERRY:
+ case ITEM_FIGY_BERRY:
+ case ITEM_WIKI_BERRY:
+ case ITEM_MAGO_BERRY:
+ case ITEM_AGUAV_BERRY:
+ case ITEM_IAPAPA_BERRY:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsRecycleEncouragedItem(u16 item)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sRecycleEncouragedItems); i++)
+ {
+ if (item == sRecycleEncouragedItems[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+// score increases
+#define STAT_UP_2_STAGE 8
+#define STAT_UP_STAGE 10
+void IncreaseStatUpScore(u8 battlerAtk, u8 battlerDef, u8 statId, s16 *score)
+{
+ if (AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY)
+ return;
+
+ if (AI_DATA->hpPercents[battlerAtk] < 80 && AI_RandLessThan(128))
+ return;
+
+ if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return; // Damaging moves would get a score boost from AI_TryToFaint or PreferStrongestMove so we don't consider them here
+
+ switch (statId)
+ {
+ case STAT_ATK:
+ if (HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && AI_DATA->hpPercents[battlerAtk] > 40)
+ {
+ if (gBattleMons[battlerAtk].statStages[STAT_ATK] < STAT_UP_2_STAGE)
+ *score += 2;
+ else if (gBattleMons[battlerAtk].statStages[STAT_ATK] < STAT_UP_STAGE)
+ *(score)++;
+ }
+ if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY))
+ *(score)++;
+ break;
+ case STAT_DEF:
+ if ((HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)|| IS_MOVE_PHYSICAL(gLastMoves[battlerDef]))
+ && AI_DATA->hpPercents[battlerAtk] > 70)
+ {
+ if (gBattleMons[battlerAtk].statStages[STAT_DEF] < STAT_UP_2_STAGE)
+ *score += 2; // seems better to raise def at higher HP
+ else if (gBattleMons[battlerAtk].statStages[STAT_DEF] < STAT_UP_STAGE)
+ *(score)++;
+ }
+ break;
+ case STAT_SPEED:
+ if (!WillAIStrikeFirst())
+ {
+ if (gBattleMons[battlerAtk].statStages[STAT_SPEED] < STAT_UP_2_STAGE)
+ *score += 2;
+ else if (gBattleMons[battlerAtk].statStages[STAT_SPEED] < STAT_UP_STAGE)
+ *(score)++;
+ }
+ break;
+ case STAT_SPATK:
+ if (HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL) && AI_DATA->hpPercents[battlerAtk] > 40)
+ {
+ if (gBattleMons[battlerAtk].statStages[STAT_SPATK] < STAT_UP_2_STAGE)
+ *score += 2;
+ else if (gBattleMons[battlerAtk].statStages[STAT_SPATK] < STAT_UP_STAGE)
+ *(score)++;
+ }
+ break;
+ case STAT_SPDEF:
+ if ((HasMoveWithSplit(battlerDef, SPLIT_SPECIAL) || IS_MOVE_SPECIAL(gLastMoves[battlerDef]))
+ && AI_DATA->hpPercents[battlerAtk] > 70)
+ {
+ if (gBattleMons[battlerAtk].statStages[STAT_SPDEF] < STAT_UP_2_STAGE)
+ *score += 2; // seems better to raise spdef at higher HP
+ else if (gBattleMons[battlerAtk].statStages[STAT_SPDEF] < STAT_UP_STAGE)
+ *(score)++;
+ }
+ break;
+ case STAT_ACC:
+ if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 80, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]))
+ *score += 2; // has moves with less than 80% accuracy
+ else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE, AI_DATA->abilities[battlerAtk], AI_DATA->abilities[battlerDef], AI_DATA->holdEffects[battlerAtk], AI_DATA->holdEffects[battlerDef]))
+ *(score)++;
+ break;
+ case STAT_EVASION:
+ if (!BattlerWillFaintFromWeather(battlerAtk, AI_DATA->abilities[battlerAtk]))
+ {
+ if (!GetBattlerSecondaryDamage(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_ROOTED))
+ *score += 2;
+ else
+ *(score)++;
+ }
+ break;
+ }
+}
+
+void IncreasePoisonScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score)
+{
+ if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return;
+
+ if (AI_CanPoison(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove) && AI_DATA->hpPercents[battlerDef] > 20)
+ {
+ if (!HasDamagingMove(battlerDef))
+ *score += 2;
+
+ if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL && HasMoveEffect(battlerAtk, EFFECT_PROTECT))
+ (*score)++; // stall tactic
+
+ if (HasMoveEffect(battlerAtk, EFFECT_VENOSHOCK)
+ || HasMoveEffect(battlerAtk, EFFECT_HEX)
+ || HasMoveEffect(battlerAtk, EFFECT_VENOM_DRENCH)
+ || AI_DATA->abilities[battlerAtk] == ABILITY_MERCILESS)
+ *(score) += 2;
+ else
+ *(score)++;
+ }
+}
+
+void IncreaseBurnScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score)
+{
+ if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return;
+
+ if (AI_CanBurn(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove))
+ {
+ (*score)++; // burning is good
+ if (HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL))
+ {
+ if (CanTargetFaintAi(battlerDef, battlerAtk))
+ *score += 2; // burning the target to stay alive is cool
+ }
+
+ if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX))
+ (*score)++;
+ }
+}
+
+void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score)
+{
+ if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return;
+
+ if (AI_CanParalyze(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ {
+ u8 atkSpeed = GetBattlerTotalSpeedStat(battlerAtk);
+ u8 defSpeed = GetBattlerTotalSpeedStat(battlerDef);
+
+ if ((defSpeed >= atkSpeed && defSpeed / 2 < atkSpeed) // You'll go first after paralyzing foe
+ || HasMoveEffect(battlerAtk, EFFECT_HEX)
+ || HasMoveEffect(battlerAtk, EFFECT_FLINCH_HIT)
+ || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION
+ || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
+ *score += 4;
+ else
+ *score += 2;
+ }
+}
+
+void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score)
+{
+ if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return;
+
+ if (AI_CanPutToSleep(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_DATA->partnerMove))
+ *score += 2;
+ else
+ return;
+
+ if ((HasMoveEffect(battlerAtk, EFFECT_DREAM_EATER) || HasMoveEffect(battlerAtk, EFFECT_NIGHTMARE))
+ && !(HasMoveEffect(battlerDef, EFFECT_SNORE) || HasMoveEffect(battlerDef, EFFECT_SLEEP_TALK)))
+ (*score)++;
+
+ if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX))
+ (*score)++;
+}
+
+void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score)
+{
+ if ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0))
+ return;
+
+ if (AI_CanConfuse(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)
+ && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CURE_CONFUSION
+ && AI_DATA->holdEffects[battlerDef] != HOLD_EFFECT_CURE_STATUS)
+ {
+ if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS
+ || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION
+ || (AI_DATA->abilities[battlerAtk] == ABILITY_SERENE_GRACE && HasMoveEffect(battlerAtk, EFFECT_FLINCH_HIT)))
+ *score += 3;
+ else
+ *score += 2;
+ }
+}
+
+bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u16 move)
+{
+ if (TestMoveFlags(move, FLAG_MAKES_CONTACT)
+ && ability != ABILITY_LONG_REACH
+ && holdEffect != HOLD_EFFECT_PROTECTIVE_PADS)
+ return TRUE;
+ return FALSE;
+}
+
+//TODO - this could use some more sophisticated logic
+bool32 ShouldUseZMove(u8 battlerAtk, u8 battlerDef, u16 chosenMove)
+{
+ // simple logic. just upgrades chosen move to z move if possible, unless regular move would kill opponent
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && battlerDef == BATTLE_PARTNER(battlerAtk))
+ return FALSE; //don't use z move on partner
+ if (gBattleStruct->zmove.used[battlerAtk])
+ return FALSE; //cant use z move twice
+
+ if (IsViableZMove(battlerAtk, chosenMove))
+ {
+ u8 effectiveness;
+
+ if (gBattleMons[battlerDef].ability == ABILITY_DISGUISE && gBattleMons[battlerDef].species == SPECIES_MIMIKYU)
+ return FALSE; // Don't waste a Z-Move busting disguise
+ if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE && gBattleMons[battlerDef].species == SPECIES_EISCUE && IS_MOVE_PHYSICAL(chosenMove))
+ return FALSE; // Don't waste a Z-Move busting Ice Face
+
+ if (IS_MOVE_STATUS(chosenMove) && !IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove))
+ return FALSE;
+ else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove))
+ return FALSE;
+
+ if (!IS_MOVE_STATUS(chosenMove) && AI_CalcDamage(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE) >= gBattleMons[battlerDef].hp)
+ return FALSE; // don't waste damaging z move if can otherwise faint target
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 4273ac607e..e3885ec4eb 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -17,6 +17,8 @@
#include "sprite.h"
#include "task.h"
#include "constants/battle_anim.h"
+#include "constants/battle_config.h"
+#include "constants/moves.h"
/*
This file handles the commands for the macros defined in
@@ -87,7 +89,6 @@ static void Task_PanFromInitialToTarget(u8 taskId);
static void Task_LoopAndPlaySE(u8 taskId);
static void Task_WaitAndPlaySE(u8 taskId);
static void LoadDefaultBg(void);
-static void LoadMoveBg(u16 bgId);
EWRAM_DATA static const u8 *sBattleAnimScriptPtr = NULL;
EWRAM_DATA static const u8 *sBattleAnimScriptRetAddr = NULL;
@@ -107,7 +108,7 @@ EWRAM_DATA static u16 sSoundAnimFramesToWait = 0;
EWRAM_DATA static u8 sMonAnimTaskIdArray[2] = {0};
EWRAM_DATA u8 gAnimMoveTurn = 0;
EWRAM_DATA static u8 sAnimBackgroundFadeState = 0;
-EWRAM_DATA static u16 sAnimMoveIndex = 0; // Set but unused.
+EWRAM_DATA u16 gAnimMoveIndex = 0; // Set but unused.
EWRAM_DATA u8 gBattleAnimAttacker = 0;
EWRAM_DATA u8 gBattleAnimTarget = 0;
EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0};
@@ -192,7 +193,7 @@ void ClearBattleAnimationVars(void)
sMonAnimTaskIdArray[1] = TASK_NONE;
gAnimMoveTurn = 0;
sAnimBackgroundFadeState = 0;
- sAnimMoveIndex = 0;
+ gAnimMoveIndex = 0;
gBattleAnimAttacker = 0;
gBattleAnimTarget = 0;
gAnimCustomPanning = 0;
@@ -202,17 +203,48 @@ void DoMoveAnim(u16 move)
{
gBattleAnimAttacker = gBattlerAttacker;
gBattleAnimTarget = gBattlerTarget;
+ // Make sure the anim target of moves hitting everyone is at the opposite side.
+ if (GetBattlerMoveTargetType(gBattlerAttacker, move) & MOVE_TARGET_FOES_AND_ALLY && IsDoubleBattle())
+ {
+ while (GET_BATTLER_SIDE(gBattleAnimAttacker) == GET_BATTLER_SIDE(gBattleAnimTarget))
+ {
+ if (++gBattleAnimTarget >= MAX_BATTLERS_COUNT)
+ gBattleAnimTarget = 0;
+ }
+ }
LaunchBattleAnimation(gBattleAnims_Moves, move, TRUE);
}
void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim)
{
s32 i;
+ bool32 hideHpBoxes = (tableId == MOVE_TRANSFORM) ? FALSE : TRUE;
+
+ if (!isMoveAnim)
+ {
+ switch (tableId)
+ {
+ case B_ANIM_TURN_TRAP:
+ case B_ANIM_LEECH_SEED_DRAIN:
+ case B_ANIM_MON_HIT:
+ case B_ANIM_SNATCH_MOVE:
+ case B_ANIM_FUTURE_SIGHT_HIT:
+ case B_ANIM_DOOM_DESIRE_HIT:
+ case B_ANIM_WISH_HEAL:
+ case B_ANIM_MEGA_EVOLUTION:
+ case B_ANIM_GULP_MISSILE:
+ hideHpBoxes = TRUE;
+ break;
+ default:
+ hideHpBoxes = FALSE;
+ break;
+ }
+ }
if (!IsContest())
{
InitPrioritiesForVisibleBattlers();
- UpdateOamPriorityInAllHealthboxes(0);
+ UpdateOamPriorityInAllHealthboxes(0, hideHpBoxes);
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (GetBattlerSide(i) != B_SIDE_PLAYER)
@@ -228,9 +260,9 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
}
if (!isMoveAnim)
- sAnimMoveIndex = 0;
+ gAnimMoveIndex = 0;
else
- sAnimMoveIndex = tableId;
+ gAnimMoveIndex = tableId;
for (i = 0; i < ANIM_ARGS_COUNT; i++)
gBattleAnimArgs[i] = 0;
@@ -521,7 +553,7 @@ static void Cmd_end(void)
if (!IsContest())
{
InitPrioritiesForVisibleBattlers();
- UpdateOamPriorityInAllHealthboxes(1);
+ UpdateOamPriorityInAllHealthboxes(1, TRUE);
}
gAnimScriptActive = FALSE;
}
@@ -646,6 +678,18 @@ static void Cmd_monbg(void)
gAnimScriptCallback = WaitAnimFrameCount;
}
+u8 GetAnimBattlerId(u8 wantedBattler)
+{
+ if (wantedBattler == ANIM_ATTACKER)
+ return gBattleAnimAttacker;
+ else if (wantedBattler == ANIM_TARGET)
+ return gBattleAnimTarget;
+ else if (wantedBattler == ANIM_ATK_PARTNER)
+ return BATTLE_PARTNER(gBattleAnimAttacker);
+ else
+ return BATTLE_PARTNER(gBattleAnimTarget);
+}
+
bool8 IsBattlerSpriteVisible(u8 battlerId)
{
if (IsContest())
@@ -676,13 +720,13 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
if (IsContest() == TRUE)
{
- RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(16)), 0x2000, 1);
- RequestDma3Fill(0xFF, (void*)(BG_SCREEN_ADDR(30)), 0x1000, 0);
+ RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(16)), 0x2000, 1);
+ RequestDma3Fill(0xFF, (void *)(BG_SCREEN_ADDR(30)), 0x1000, 0);
}
else
{
- RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(8)), 0x2000, 1);
- RequestDma3Fill(0xFF, (void*)(BG_SCREEN_ADDR(28)), 0x1000, 0);
+ RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(8)), 0x2000, 1);
+ RequestDma3Fill(0xFF, (void *)(BG_SCREEN_ADDR(28)), 0x1000, 0);
}
GetBattleAnimBg1Data(&animBg);
@@ -707,7 +751,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], animBg.paletteId * 16, 0x20);
- CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + animBg.paletteId * 32), 0x20);
+ CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void *)(BG_PLTT + animBg.paletteId * 32), 0x20);
if (IsContest())
battlerPosition = 0;
@@ -721,8 +765,8 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
}
else
{
- RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(12)), 0x2000, 1);
- RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(30)), 0x1000, 1);
+ RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(12)), 0x2000, 1);
+ RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(30)), 0x1000, 1);
GetBattleAnimBgData(&animBg, 2);
CpuFill16(0, animBg.bgTiles + 0x1000, 0x1000);
CpuFill16(0, animBg.bgTilemap + 0x400, 0x800);
@@ -742,7 +786,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20);
- CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + 0x120), 0x20);
+ CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void *)(BG_PLTT + 0x120), 0x20);
DrawBattlerOnBg(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset);
}
@@ -1194,7 +1238,7 @@ static void Task_FadeToBg(u8 taskId)
}
}
-static void LoadMoveBg(u16 bgId)
+void LoadMoveBg(u16 bgId)
{
if (IsContest())
{
@@ -1203,7 +1247,7 @@ static void LoadMoveBg(u16 bgId)
void *dmaDest;
LZDecompressWram(tilemap, gDecompressionBuffer);
- RelocateBattleBgPal(GetBattleBgPaletteNum(), (void*)gDecompressionBuffer, 0x100, FALSE);
+ RelocateBattleBgPal(GetBattleBgPaletteNum(), (void *)gDecompressionBuffer, 0x100, FALSE);
dmaSrc = gDecompressionBuffer;
dmaDest = (void *)BG_SCREEN_ADDR(26);
DmaCopy32(3, dmaSrc, dmaDest, 0x800);
@@ -1222,6 +1266,10 @@ static void LoadDefaultBg(void)
{
if (IsContest())
LoadContestBgAfterMoveAnim();
+ #if B_TERRAIN_BG_CHANGE == TRUE
+ else if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
+ DrawTerrainTypeBattleBackground();
+ #endif
else
DrawMainBattleBackground();
}
diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c
index 14b98fcb21..894fd866e0 100644
--- a/src/battle_anim_bug.c
+++ b/src/battle_anim_bug.c
@@ -9,13 +9,9 @@ static void AnimLeechLifeNeedle(struct Sprite *);
static void AnimTranslateWebThread(struct Sprite *);
static void AnimTranslateWebThread_Step(struct Sprite *);
static void AnimStringWrap(struct Sprite *);
-static void AnimStringWrap_Step(struct Sprite *);
-static void AnimSpiderWeb(struct Sprite *);
static void AnimSpiderWeb_Step(struct Sprite *);
static void AnimSpiderWeb_End(struct Sprite *);
static void AnimTranslateStinger(struct Sprite *);
-static void AnimMissileArc(struct Sprite *);
-static void AnimMissileArc_Step(struct Sprite *);
static void AnimTailGlowOrb(struct Sprite *);
static const union AffineAnimCmd sAffineAnim_MegahornHorn_0[] =
@@ -271,7 +267,7 @@ static void AnimTranslateWebThread(struct Sprite *sprite)
}
else
{
- SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]);
}
InitAnimLinearTranslationWithSpeed(sprite);
@@ -294,7 +290,7 @@ static void AnimTranslateWebThread_Step(struct Sprite *sprite)
// Second stage of String Shot
static void AnimStringWrap(struct Sprite *sprite)
{
- SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y);
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y);
if (GetBattlerSide(gBattleAnimAttacker))
sprite->x -= gBattleAnimArgs[0];
else
@@ -307,7 +303,7 @@ static void AnimStringWrap(struct Sprite *sprite)
sprite->callback = AnimStringWrap_Step;
}
-static void AnimStringWrap_Step(struct Sprite *sprite)
+void AnimStringWrap_Step(struct Sprite *sprite)
{
if (++sprite->data[0] == 3)
{
@@ -321,11 +317,23 @@ static void AnimStringWrap_Step(struct Sprite *sprite)
}
}
-static void AnimSpiderWeb(struct Sprite *sprite)
+// arg0: x
+// arg1: y
+// arg2: targets both
+void AnimSpiderWeb(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
+ if (gBattleAnimArgs[2])
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y);
+
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ sprite->x -= gBattleAnimArgs[0];
+ else
+ sprite->x += gBattleAnimArgs[0];
+
+ sprite->y += gBattleAnimArgs[1];
sprite->data[0] = 16;
sprite->callback = AnimSpiderWeb_Step;
}
@@ -392,7 +400,7 @@ static void AnimTranslateStinger(struct Sprite *sprite)
}
}
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
@@ -415,9 +423,9 @@ static void AnimTranslateStinger(struct Sprite *sprite)
// arg 3: target y pixel offset
// arg 4: duration
// arg 5: wave amplitude
-static void AnimMissileArc(struct Sprite *sprite)
+void AnimMissileArc(struct Sprite *sprite)
{
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
@@ -432,7 +440,7 @@ static void AnimMissileArc(struct Sprite *sprite)
sprite->invisible = TRUE;
}
-static void AnimMissileArc_Step(struct Sprite *sprite)
+void AnimMissileArc_Step(struct Sprite *sprite)
{
sprite->invisible = FALSE;
diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c
index fe8b181052..becbc8fcf9 100644
--- a/src/battle_anim_dark.c
+++ b/src/battle_anim_dark.c
@@ -11,9 +11,6 @@
static void AnimUnusedBagSteal(struct Sprite *);
static void AnimUnusedBagSteal_Step(struct Sprite *);
-static void AnimBite(struct Sprite *);
-static void AnimTearDrop(struct Sprite *);
-static void AnimClawSlash(struct Sprite *);
static void AnimTask_AttackerFadeToInvisible_Step(u8);
static void AnimTask_AttackerFadeFromInvisible_Step(u8);
static void AnimBite_Step1(struct Sprite *);
@@ -23,6 +20,7 @@ static void AnimTask_MoveAttackerMementoShadow_Step(u8);
static void AnimTask_MoveTargetMementoShadow_Step(u8);
static void DoMementoShadowEffect(struct Task *);
static void SetAllBattlersSpritePriority(u8);
+static void AnimPunishment(struct Sprite *sprite);
static void AnimTask_MetallicShine_Step(u8);
// Unused
@@ -133,7 +131,7 @@ static const union AffineAnimCmd sAffineAnim_TearDrop_1[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_TearDrop[] =
+const union AffineAnimCmd *const gAffineAnims_TearDrop[] =
{
sAffineAnim_TearDrop_0,
sAffineAnim_TearDrop_1,
@@ -146,7 +144,7 @@ const struct SpriteTemplate gTearDropSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_TearDrop,
+ .affineAnims = gAffineAnims_TearDrop,
.callback = AnimTearDrop,
};
@@ -170,7 +168,7 @@ static const union AnimCmd sAnim_ClawSlash_1[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_ClawSlash[] =
+const union AnimCmd *const gAnims_ClawSlash[] =
{
sAnim_ClawSlash_0,
sAnim_ClawSlash_1,
@@ -181,12 +179,96 @@ const struct SpriteTemplate gClawSlashSpriteTemplate =
.tileTag = ANIM_TAG_CLAW_SLASH,
.paletteTag = ANIM_TAG_CLAW_SLASH,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_ClawSlash,
+ .anims = gAnims_ClawSlash,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimClawSlash,
};
+const union AffineAnimCmd gPunishmentImpactAffineAnimCmd_1[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gPunishmentImpactAffineAnimCmd_2[] =
+{
+ AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gPunishmentImpactAffineAnimCmd_3[] =
+{
+ AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gPunishmentImpactAffineAnimCmd_4[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gPunishmentImpactAffineAnim[] =
+{
+ gPunishmentImpactAffineAnimCmd_1,
+ gPunishmentImpactAffineAnimCmd_2,
+ gPunishmentImpactAffineAnimCmd_3,
+ gPunishmentImpactAffineAnimCmd_4,
+};
+
+const union AnimCmd gPunishmentAnimCmd[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gPunishmentAnim[] =
+{
+ gPunishmentAnimCmd,
+};
+
+const struct SpriteTemplate gPunishmentSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SCRATCH,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gPunishmentAnim,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos,
+};
+
+const struct SpriteTemplate gPunishmentImpactSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gPunishmentImpactAffineAnim,
+ .callback = AnimPunishment,
+};
+
+static void AnimPunishment(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
+ if (gBattleAnimArgs[2] == 0)
+ InitSpritePosToAnimAttacker(sprite, 1);
+ else
+ InitSpritePosToAnimTarget(sprite, TRUE);
+
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
void AnimTask_AttackerFadeToInvisible(u8 taskId)
{
int battler;
@@ -312,7 +394,7 @@ static void AnimUnusedBagSteal_Step(struct Sprite *sprite)
}
// Move sprite inward for Bite/Crunch and Clamp
-static void AnimBite(struct Sprite *sprite)
+void AnimBite(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
@@ -344,7 +426,7 @@ static void AnimBite_Step2(struct Sprite *sprite)
}
// Launches a tear drop away from the battler. Used by Fake Tears
-static void AnimTearDrop(struct Sprite *sprite)
+void AnimTearDrop(struct Sprite *sprite)
{
u8 battler;
s8 xOffset;
@@ -426,7 +508,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
GetBattleAnimBg1Data(&animBg);
task->data[10] = gBattle_BG1_Y;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
- FillPalette(0, animBg.paletteId * 16, 32);
+ FillPalette(RGB_BLACK, animBg.paletteId * 16, 32);
scanlineParams.dmaDest = ®_BG1VOFS;
var0 = WINOUT_WIN01_BG1;
if (!IsContest())
@@ -436,7 +518,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId)
{
task->data[10] = gBattle_BG2_Y;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
- FillPalette(0, 144, 32);
+ FillPalette(RGB_BLACK, 144, 32);
scanlineParams.dmaDest = ®_BG2VOFS;
var0 = WINOUT_WIN01_BG2;
if (!IsContest())
@@ -566,12 +648,12 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId)
{
GetBattleAnimBg1Data(&animBg);
task->data[10] = gBattle_BG1_Y;
- FillPalette(0, animBg.paletteId * 16, 32);
+ FillPalette(RGB_BLACK, animBg.paletteId * 16, 32);
}
else
{
task->data[10] = gBattle_BG2_Y;
- FillPalette(0, 9 * 16, 32);
+ FillPalette(RGB_BLACK, 9 * 16, 32);
}
SetAllBattlersSpritePriority(3);
@@ -786,7 +868,7 @@ void AnimTask_InitMementoShadow(u8 taskId)
void AnimTask_MementoHandleBg(u8 taskId)
{
- u8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? 1 : 0;
+ bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE;
ResetBattleAnimBg(toBG2);
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
@@ -796,7 +878,7 @@ void AnimTask_MementoHandleBg(u8 taskId)
}
// Animates a deep slash from a claw. Used by Metal Claw, Dragon Claw, and Crush Claw
-static void AnimClawSlash(struct Sprite *sprite)
+void AnimClawSlash(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
diff --git a/src/battle_anim_dragon.c b/src/battle_anim_dragon.c
index 4badd53627..54304732e6 100644
--- a/src/battle_anim_dragon.c
+++ b/src/battle_anim_dragon.c
@@ -6,14 +6,13 @@
#include "constants/rgb.h"
static void AnimOutrageFlame(struct Sprite *);
-static void AnimDragonRageFirePlume(struct Sprite *);
-static void AnimDragonFireToTarget(struct Sprite *);
-static void AnimDragonDanceOrb(struct Sprite *);
static void AnimDragonDanceOrb_Step(struct Sprite *);
-static void AnimOverheatFlame(struct Sprite *);
static void AnimOverheatFlame_Step(struct Sprite *);
static void AnimTask_DragonDanceWaver_Step(u8);
static void UpdateDragonDanceScanlineEffect(struct Task *);
+static void AnimDragonRushStep(struct Sprite *sprite);
+static void AnimSpinningDracoMeteor(struct Sprite *sprite);
+static void AnimSpinningDracoMeteorFinish(struct Sprite *sprite);
EWRAM_DATA static u16 sUnusedOverheatData[7] = {0};
@@ -59,7 +58,7 @@ static const union AnimCmd sAnim_DragonBreathFire_1[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sAnims_DragonBreathFire[] =
+const union AnimCmd *const gAnims_DragonBreathFire[] =
{
sAnim_DragonBreathFire_0,
sAnim_DragonBreathFire_1,
@@ -79,7 +78,7 @@ static const union AffineAnimCmd sAffineAnim_DragonBreathFire_1[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_DragonBreathFire[] =
+const union AffineAnimCmd *const gAffineAnims_DragonBreathFire[] =
{
sAffineAnim_DragonBreathFire_0,
sAffineAnim_DragonBreathFire_1,
@@ -90,9 +89,9 @@ const struct SpriteTemplate gDragonBreathFireSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
- .anims = sAnims_DragonBreathFire,
+ .anims = gAnims_DragonBreathFire,
.images = NULL,
- .affineAnims = sAffineAnims_DragonBreathFire,
+ .affineAnims = gAffineAnims_DragonBreathFire,
.callback = AnimDragonFireToTarget,
};
@@ -106,7 +105,7 @@ static const union AnimCmd sAnim_DragonRageFirePlume[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_DragonRageFirePlume[] =
+const union AnimCmd *const gAnims_DragonRageFirePlume[] =
{
sAnim_DragonRageFirePlume,
};
@@ -116,7 +115,7 @@ const struct SpriteTemplate gDragonRageFirePlumeSpriteTemplate =
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_FIRE_PLUME,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_DragonRageFirePlume,
+ .anims = gAnims_DragonRageFirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDragonRageFirePlume,
@@ -130,7 +129,7 @@ static const union AnimCmd sAnim_DragonRageFire[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sAnims_DragonRageFire[] =
+const union AnimCmd *const gAnims_DragonRageFire[] =
{
sAnim_DragonRageFire,
sAnim_DragonRageFire,
@@ -148,7 +147,7 @@ static const union AffineAnimCmd sAffineAnim_DragonRageFire_1[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_DragonRageFire[] =
+const union AffineAnimCmd *const gAffineAnims_DragonRageFire[] =
{
sAffineAnim_DragonRageFire_0,
sAffineAnim_DragonRageFire_1,
@@ -159,9 +158,9 @@ const struct SpriteTemplate gDragonRageFireSpitSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
- .anims = sAnims_DragonRageFire,
+ .anims = gAnims_DragonRageFire,
.images = NULL,
- .affineAnims = sAffineAnims_DragonRageFire,
+ .affineAnims = gAffineAnims_DragonRageFire,
.callback = AnimDragonFireToTarget,
};
@@ -187,6 +186,136 @@ const struct SpriteTemplate gOverheatFlameSpriteTemplate =
.callback = AnimOverheatFlame,
};
+const union AnimCmd gDragonRushAnimCmds[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gDragonRushAnimTable[] =
+{
+ gDragonRushAnimCmds,
+};
+
+const union AffineAnimCmd gDragonRushAffineanimCmds1[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gDragonRushAffineanimCmds2[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gDragonRushAffineAnimTable[] =
+{
+ gDragonRushAffineanimCmds1,
+ gDragonRushAffineanimCmds2,
+};
+
+const union AnimCmd gDracoMeteorAnimTable[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gDracoMeteorAnimCmd[] =
+{
+ gDracoMeteorAnimTable,
+};
+
+const union AffineAnimCmd gDracoMeteorAffineAnimCmd[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 20, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gDracoMeteorAffineAnims[] =
+{
+ gDracoMeteorAffineAnimCmd,
+};
+
+const struct SpriteTemplate gDragonRushSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SLAM_HIT_2,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDragonRushAnimTable,
+ .images = NULL,
+ .affineAnims = gDragonRushAffineAnimTable,
+ .callback = AnimDragonRushStep,
+};
+
+const struct SpriteTemplate gDracoMetorSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_IMPACT,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gDracoMeteorAnimCmd,
+ .images = NULL,
+ .affineAnims = gDracoMeteorAffineAnims,
+ .callback = AnimSpinningDracoMeteor,
+};
+
+const struct SpriteTemplate gDragonPulseSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_DRAGON_PULSE,
+ .paletteTag = ANIM_TAG_DRAGON_PULSE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+static void AnimDragonRushStep(struct Sprite *sprite)
+{
+ // These two cases are identical.
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ sprite->data[1] += sprite->data[0];
+ sprite->data[1] &= 0xFF;
+ }
+ else
+ {
+ sprite->data[1] += sprite->data[0];
+ sprite->data[1] &= 0xFF;
+ }
+
+ sprite->x2 = Cos(sprite->data[1], 20);
+ sprite->y2 = Sin(sprite->data[1], 20);
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+
+ sprite->data[2]++;
+}
+
+static void AnimSpinningDracoMeteorFinish(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->affineAnimPaused = 1;
+ sprite->data[0] = 20;
+
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void AnimSpinningDracoMeteor(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[0] = gBattleAnimArgs[3];
+
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, AnimSpinningDracoMeteorFinish);
+}
+
static void AnimOutrageFlame(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
@@ -238,7 +367,7 @@ static void StartDragonFireTranslation(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
-static void AnimDragonRageFirePlume(struct Sprite *sprite)
+void AnimDragonRageFirePlume(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
@@ -258,7 +387,7 @@ static void AnimDragonRageFirePlume(struct Sprite *sprite)
}
// For Dragon Breath and Dragon Rage
-static void AnimDragonFireToTarget(struct Sprite *sprite)
+void AnimDragonFireToTarget(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
StartSpriteAffineAnim(sprite, 1);
@@ -266,7 +395,7 @@ static void AnimDragonFireToTarget(struct Sprite *sprite)
StartDragonFireTranslation(sprite);
}
-static void AnimDragonDanceOrb(struct Sprite *sprite)
+void AnimDragonDanceOrb(struct Sprite *sprite)
{
u16 r5;
u16 r0;
@@ -413,7 +542,7 @@ static void UpdateDragonDanceScanlineEffect(struct Task *task)
task->data[5] = (task->data[5] + 9) & 0xFF;
}
-static void AnimOverheatFlame(struct Sprite *sprite)
+void AnimOverheatFlame(struct Sprite *sprite)
{
int i;
int yAmplitude = (gBattleAnimArgs[2] * 3) / 5;
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index c590572b92..7348edaf5e 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -15,6 +15,7 @@
#include "util.h"
#include "constants/rgb.h"
#include "constants/songs.h"
+#include "constants/moves.h"
struct {
s16 startX;
@@ -23,21 +24,13 @@ struct {
s16 targetY;
} static EWRAM_DATA sFrenzyPlantRootData = {0}; // Debug? Written to but never read.
-static void AnimMovePowderParticle(struct Sprite *);
static void AnimMovePowderParticle_Step(struct Sprite *);
-static void AnimPowerAbsorptionOrb(struct Sprite *);
-static void AnimSolarBeamBigOrb(struct Sprite *);
static void AnimSolarBeamSmallOrb(struct Sprite *);
static void AnimSolarBeamSmallOrb_Step(struct Sprite *);
-static void AnimAbsorptionOrb(struct Sprite *);
static void AnimAbsorptionOrb_Step(struct Sprite *);
-static void AnimHyperBeamOrb(struct Sprite *);
static void AnimHyperBeamOrb_Step(struct Sprite *);
-static void AnimSporeParticle(struct Sprite *);
static void AnimSporeParticle_Step(struct Sprite *);
-static void AnimPetalDanceBigFlower(struct Sprite *);
static void AnimPetalDanceBigFlower_Step(struct Sprite *);
-static void AnimPetalDanceSmallFlower(struct Sprite *);
static void AnimPetalDanceSmallFlower_Step(struct Sprite *);
static void AnimRazorLeafParticle(struct Sprite *);
static void AnimRazorLeafParticle_Step1(struct Sprite *);
@@ -45,12 +38,10 @@ static void AnimRazorLeafParticle_Step2(struct Sprite *);
static void AnimLeechSeed(struct Sprite *);
static void AnimLeechSeed_Step(struct Sprite *);
static void AnimLeechSeedSprouts(struct Sprite *);
-static void AnimTranslateLinearSingleSineWave(struct Sprite *);
static void AnimTranslateLinearSingleSineWave_Step(struct Sprite *);
static void AnimConstrictBinding(struct Sprite *);
static void AnimConstrictBinding_Step1(struct Sprite *);
static void AnimConstrictBinding_Step2(struct Sprite *);
-static void AnimMimicOrb(struct Sprite *);
static void AnimIngrainRoot(struct Sprite *);
static void AnimFrenzyPlantRoot(struct Sprite *);
static void AnimRootFlickerOut(struct Sprite *);
@@ -68,12 +59,9 @@ static void AnimTrickBag_Step2(struct Sprite *);
static void AnimTrickBag_Step3(struct Sprite *);
static void AnimFlyingParticle(struct Sprite *);
static void AnimFlyingParticle_Step(struct Sprite *);
-static void AnimNeedleArmSpike(struct Sprite *);
-static void AnimNeedleArmSpike_Step(struct Sprite *);
static void AnimSlidingHit(struct Sprite *);
static void AnimWhipHit(struct Sprite *);
static void AnimFlickeringPunch(struct Sprite *);
-static void AnimCuttingSlice(struct Sprite *);
static void AnimAirCutterSlice(struct Sprite *);
static void AnimSlice_Step(struct Sprite *);
static void AnimCirclingMusicNote(struct Sprite *);
@@ -83,7 +71,6 @@ static void AnimProtect_Step(struct Sprite *);
static void AnimMilkBottle(struct Sprite *);
static void AnimMilkBottle_Step1(struct Sprite *);
static void AnimMilkBottle_Step2(struct Sprite *, int, int);
-static void AnimGrantingStars(struct Sprite *);
static void AnimSparkingStars(struct Sprite *);
static void AnimBubbleBurst(struct Sprite *);
static void AnimBubbleBurst_Step(struct Sprite *);
@@ -112,11 +99,9 @@ static void AnimFalseSwipeSlice_Step1(struct Sprite *);
static void AnimFalseSwipeSlice_Step2(struct Sprite *);
static void AnimFalseSwipeSlice_Step3(struct Sprite *);
static void AnimFalseSwipePositionedSlice(struct Sprite *);
-static void AnimEndureEnergy(struct Sprite *);
static void AnimEndureEnergy_Step(struct Sprite *);
static void AnimSharpenSphere(struct Sprite *);
static void AnimSharpenSphere_Step(struct Sprite *);
-static void AnimConversion(struct Sprite *);
static void AnimConversion2(struct Sprite *);
static void AnimConversion2_Step(struct Sprite *);
static void AnimMoon(struct Sprite *);
@@ -134,11 +119,8 @@ static void AnimFlyingMusicNotes_Step(struct Sprite *);
static void AnimBellyDrumHand(struct Sprite *);
static void AnimSlowFlyingMusicNotes(struct Sprite *);
static void AnimSlowFlyingMusicNotes_Step(struct Sprite *);
-static void AnimThoughtBubble(struct Sprite *);
static void AnimThoughtBubble_Step(struct Sprite *);
-static void AnimMetronomeFinger(struct Sprite *);
static void AnimMetronomeFinger_Step(struct Sprite *);
-static void AnimFollowMeFinger(struct Sprite *);
static void AnimFollowMeFinger_Step1(struct Sprite *);
static void AnimFollowMeFinger_Step2(struct Sprite *);
static void AnimTauntFinger(struct Sprite *);
@@ -154,8 +136,26 @@ static void AnimTask_LeafBlade_Step2(struct Task *, u8);
static void AnimTask_LeafBlade_Step2_Callback(struct Sprite *);
static void AnimTask_SkullBashPositionSet(u8);
static void AnimTask_SkullBashPositionReset(u8);
+static void AnimMoveFeintSwipe(struct Sprite *);
+static void AnimMoveFeintZoom(struct Sprite *);
+static void AnimMoveTrumpCard(struct Sprite *);
+static void AnimMoveTrumpCardParticle(struct Sprite *);
+static void AnimMoveAccupressure(struct Sprite *);
+static void AnimMoveWringOut(struct Sprite *);
+static void AnimMoveWorrySeed(struct Sprite *);
+static void AnimMoveSmallCloud(struct Sprite *);
+static void AnimGrassKnotStep(struct Sprite *);
+static void AnimGrassKnot(struct Sprite *);
+static void AnimWoodHammerSmall(struct Sprite *);
+static void AnimWoodHammerBig(struct Sprite *);
static void AnimTask_DoubleTeam_Step(u8);
static void AnimDoubleTeam(struct Sprite *);
+static void AnimNightSlash(struct Sprite *);
+static void AnimRockPolishStreak(struct Sprite *);
+static void AnimRockPolishSparkle(struct Sprite *);
+static void AnimPoisonJabProjectile(struct Sprite *);
+static void AnimNightSlash(struct Sprite *);
+static void AnimPluck(struct Sprite *);
const union AnimCmd gPowderParticlesAnimCmds[] =
{
@@ -175,6 +175,251 @@ const union AnimCmd *const gPowderParticlesAnimTable[] =
gPowderParticlesAnimCmds,
};
+static const union AffineAnimCmd sFeintAffineSwipe[] = { AFFINEANIMCMD_END };
+static const union AffineAnimCmd sFeintAffineZoom[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(-30, -30, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sTrumpCardAffine0[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 30, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sTrumpCardAffine1[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0xA0, 40, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sTrumpCardAffine2[] =
+{
+ AFFINEANIMCMD_FRAME(0xD0, 0xD0, -20, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sTrumpCardAffine3[] =
+{
+ AFFINEANIMCMD_FRAME(0xE0, 0xE0, 40, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sTrumpCardAffine4[] =
+{
+ AFFINEANIMCMD_FRAME(0xF0, 0xF0, 60, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd * const sTrumpCardAffineAnims[] =
+{
+ sTrumpCardAffine0,
+ sTrumpCardAffine1,
+ sTrumpCardAffine2,
+ sTrumpCardAffine3,
+ sTrumpCardAffine4
+};
+
+static const union AffineAnimCmd * const sFeintAffineAnims[] =
+{
+ sFeintAffineZoom,
+};
+
+static const union AnimCmd sTrumpCardFrame0[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sTrumpCardFrame1[] =
+{
+ ANIMCMD_FRAME(4, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sTrumpCardFrame2[] =
+{
+ ANIMCMD_FRAME(8, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sTrumpCardParticleFrame0[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sTrumpCardParticleFrame1[] =
+{
+ ANIMCMD_FRAME(1, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sTrumpCardParticleFrame2[] =
+{
+ ANIMCMD_FRAME(2, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd * const sTrumpCardAnims[] =
+{
+ sTrumpCardFrame0,
+ sTrumpCardFrame1,
+ sTrumpCardFrame2
+};
+
+static const union AnimCmd * const sTrumpCardParticleAnims[] =
+{
+ sTrumpCardParticleFrame0,
+ sTrumpCardParticleFrame1,
+ sTrumpCardParticleFrame2,
+};
+
+static const union AffineAnimCmd sAccupressureTurn[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 1, 20),
+ AFFINEANIMCMD_FRAME(0, 0, -1, 40),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sAccupressureStill[] =
+{
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd * const sAccupressureAffineAnims[] =
+{
+ sAccupressureStill,
+ sAccupressureTurn
+};
+
+static const union AffineAnimCmd sSmallCloundsInit[] =
+{
+ AFFINEANIMCMD_FRAME(0x100,0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSmallCloudsVariant0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100,0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 15),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSmallCloudsVariant1[] =
+{
+ AFFINEANIMCMD_FRAME(0x180,0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(-18, -18, 0, 21),
+ AFFINEANIMCMD_END
+};
+
+
+static const union AffineAnimCmd sSmallCloudsVariant2[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
+ AFFINEANIMCMD_FRAME(-6, -6, 0, 15),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd * const sSmallCloudSpriteAffineAnimTable[] =
+{
+ sSmallCloundsInit,
+ sSmallCloudsVariant0,
+ sSmallCloudsVariant1,
+ sSmallCloudsVariant2,
+};
+
+const struct SpriteTemplate gWorrySeedSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WORRY_SEED,
+ .paletteTag = ANIM_TAG_WORRY_SEED,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveWorrySeed
+};
+
+const struct SpriteTemplate gSmallCloudTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_CLOUD,
+ .paletteTag = ANIM_TAG_SMALL_CLOUD,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSmallCloudSpriteAffineAnimTable,
+ .callback = AnimMoveSmallCloud
+};
+
+const struct SpriteTemplate gAccupressureSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ACCUPRESSURE,
+ .paletteTag = ANIM_TAG_ACCUPRESSURE,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sAccupressureAffineAnims,
+ .callback = AnimMoveAccupressure,
+};
+
+const struct SpriteTemplate gWringOutHandSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WRING_OUT,
+ .paletteTag = ANIM_TAG_WRING_OUT,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveWringOut,
+};
+
+const struct SpriteTemplate gTrumpCardParticleSpriteTempalte =
+{
+ .tileTag = ANIM_TAG_TRUMP_CARD_PARTICLES,
+ .paletteTag = ANIM_TAG_TRUMP_CARD_PARTICLES,
+ .oam = &gOamData_AffineDouble_ObjNormal_8x8,
+ .anims = sTrumpCardParticleAnims,
+ .images = NULL,
+ .affineAnims = sTrumpCardAffineAnims,
+ .callback = AnimMoveTrumpCardParticle
+};
+
+const struct SpriteTemplate gTrumpCardSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_TRUMP_CARD,
+ .paletteTag = ANIM_TAG_TRUMP_CARD,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = sTrumpCardAnims,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveTrumpCard
+};
+
+const struct SpriteTemplate gFeintSwipeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FEINT,
+ .paletteTag = ANIM_TAG_FEINT,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveFeintSwipe,
+};
+
+const struct SpriteTemplate gFeintZoomSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FEINT,
+ .paletteTag = ANIM_TAG_FEINT,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sFeintAffineAnims,
+ .callback = AnimMoveFeintZoom,
+};
+
const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_SLEEP_POWDER,
@@ -407,6 +652,17 @@ const struct SpriteTemplate gLeechSeedSpriteTemplate =
.callback = AnimLeechSeed,
};
+const struct SpriteTemplate gPluckParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SEED_BROWN,
+ .paletteTag = ANIM_TAG_SEED_BROWN,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPluck,
+};
+
const union AnimCmd gSporeParticleAnimCmds1[] =
{
ANIMCMD_FRAME(0, 1),
@@ -509,6 +765,8 @@ const union AnimCmd *const gRazorLeafParticleAnimTable[] =
gRazorLeafParticleAnimCmds2,
};
+void AnimFlyUpTarget(struct Sprite *sprite);
+
const struct SpriteTemplate gRazorLeafParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_LEAF,
@@ -520,6 +778,17 @@ const struct SpriteTemplate gRazorLeafParticleSpriteTemplate =
.callback = AnimRazorLeafParticle,
};
+const struct SpriteTemplate gGrassPledgeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFlyUpTarget,
+};
+
const struct SpriteTemplate gTwisterLeafSpriteTemplate =
{
.tileTag = ANIM_TAG_LEAF,
@@ -531,6 +800,17 @@ const struct SpriteTemplate gTwisterLeafSpriteTemplate =
.callback = AnimMoveTwisterParticle,
};
+const struct SpriteTemplate gAttackOrderParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ATTACK_ORDER,
+ .paletteTag = ANIM_TAG_ATTACK_ORDER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveTwisterParticle,
+};
+
const union AnimCmd gRazorLeafCutterAnimCmds[] =
{
ANIMCMD_FRAME(0, 3),
@@ -1652,6 +1932,39 @@ const struct SpriteTemplate gEndureEnergySpriteTemplate =
.callback = AnimEndureEnergy,
};
+const struct SpriteTemplate gBlueEndureEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_SWEAT_BEAD,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy,
+};
+
+const struct SpriteTemplate gGreenEndureEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_WHIP_HIT,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy,
+};
+
+const struct SpriteTemplate gYellowEndureEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_PAW_PRINT,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy,
+};
+
const union AnimCmd gSharpenSphereAnimCmds[] =
{
ANIMCMD_FRAME(0, 18),
@@ -2189,6 +2502,494 @@ const struct SpriteTemplate gTauntFingerSpriteTemplate =
.callback = AnimTauntFinger,
};
+const struct SpriteTemplate gPowerOrbs_Float =
+{
+ .tileTag = ANIM_TAG_RED_ORB,
+ .paletteTag = ANIM_TAG_RED_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gSporeParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSporeParticle,
+};
+
+const union AnimCmd gRockPolishStreak_AnimCmd[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(4, 2),
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(12, 15),
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(4, 2),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gRockPolishStreak_AnimCmds[] =
+{
+ gRockPolishStreak_AnimCmd,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd1[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x10, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd2[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x20, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd3[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x30, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd4[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x40, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd5[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x50, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd6[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x60, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd7[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x70, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd8[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x80, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmd9[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0x90, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdA[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0xA0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdB[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0xB0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdC[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0xC0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdD[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0xD0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdE[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0xE0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gRockPolishStreak_AffineAnimCmdF[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0xF0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gRockPolishStreak_AffineAnimCmds[] =
+{
+ gRockPolishStreak_AffineAnimCmd0,
+ gRockPolishStreak_AffineAnimCmd1,
+ gRockPolishStreak_AffineAnimCmd2,
+ gRockPolishStreak_AffineAnimCmd3,
+ gRockPolishStreak_AffineAnimCmd4,
+ gRockPolishStreak_AffineAnimCmd5,
+ gRockPolishStreak_AffineAnimCmd6,
+ gRockPolishStreak_AffineAnimCmd7,
+ gRockPolishStreak_AffineAnimCmd8,
+ gRockPolishStreak_AffineAnimCmd9,
+ gRockPolishStreak_AffineAnimCmdA,
+ gRockPolishStreak_AffineAnimCmdB,
+ gRockPolishStreak_AffineAnimCmdC,
+ gRockPolishStreak_AffineAnimCmdD,
+ gRockPolishStreak_AffineAnimCmdE,
+ gRockPolishStreak_AffineAnimCmdF,
+};
+
+const struct SpriteTemplate gRockPolishStreakSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WHITE_STREAK,
+ .paletteTag = ANIM_TAG_WHITE_STREAK,
+ .oam = &gOamData_AffineDouble_ObjBlend_32x8,
+ .anims = gRockPolishStreak_AnimCmds,
+ .images = NULL,
+ .affineAnims = gRockPolishStreak_AffineAnimCmds,
+ .callback = AnimRockPolishStreak,
+};
+
+const union AnimCmd gRockPolishSparkle_AnimCmd1[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_FRAME(8, 7),
+ ANIMCMD_FRAME(12, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gRockPolishSparkle_AnimCmds[] =
+{
+ gRockPolishSparkle_AnimCmd1,
+};
+
+const struct SpriteTemplate gRockPolishSparkleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_3,
+ .paletteTag = ANIM_TAG_SPARKLE_3,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRockPolishSparkle_AnimCmds,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimRockPolishSparkle,
+};
+
+const struct SpriteTemplate gPoisonJabProjectileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_JAB,
+ .paletteTag = ANIM_TAG_PURPLE_JAB,
+ .oam = &gOamData_AffineDouble_ObjBlend_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPoisonJabProjectile,
+};
+
+const union AnimCmd gNightSlashLeftAnimCmd0[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gNightSlashLeftAnimCmd1[] =
+{
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gNightSlashLeftAnimTable[] =
+{
+ gNightSlashLeftAnimCmd0,
+ gNightSlashLeftAnimCmd1,
+};
+
+const struct SpriteTemplate gNightSlashLeftSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SLASH,
+ .paletteTag = ANIM_TAG_SLASH,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gNightSlashLeftAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNightSlash,
+};
+
+const union AnimCmd gNightSlashRightAnimCmd0[] =
+{
+ ANIMCMD_FRAME(0, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gNightSlashRightAnimCmd1[] =
+{
+ ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gNightSlashRightAnimTable[] =
+{
+ gNightSlashRightAnimCmd0,
+ gNightSlashRightAnimCmd1,
+};
+
+const struct SpriteTemplate gNightSlashRightSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SLASH,
+ .paletteTag = ANIM_TAG_SLASH,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gNightSlashRightAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNightSlash,
+};
+
+const struct SpriteTemplate gLuckyChantBigStarsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gPetalDanceBigFlowerAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPetalDanceBigFlower,
+};
+
+const struct SpriteTemplate gLuckyChantSmallStarsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gPetalDanceSmallFlowerAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPetalDanceSmallFlower,
+};
+
+const union AnimCmd gWoodHammerBigAnimCmd_1[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gWoodHammerBigAnimCmd_2[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gWoodHammerBigAnims[] =
+{
+ gWoodHammerBigAnimCmd_1,
+ gWoodHammerBigAnimCmd_2,
+};
+
+const union AffineAnimCmd gWoodHammerBigAffineAnimCmd_1[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -5, 5),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gWoodHammerBigAffineAnimCmd_2[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 5),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gWoodHammerBigAffineAnims[] =
+{
+ gWoodHammerBigAffineAnimCmd_1,
+ gWoodHammerBigAffineAnimCmd_2,
+};
+
+const union AnimCmd gWoodHammerSmallAnimCmd_1[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gWoodHammerSmallAnimCmd_2[] =
+{
+ ANIMCMD_FRAME(48, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gWoodHammerSmallAnimCmd_3[] =
+{
+ ANIMCMD_FRAME(64, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gWoodHammerSmallAnims[] =
+{
+ gWoodHammerSmallAnimCmd_1,
+ gWoodHammerSmallAnimCmd_2,
+ gWoodHammerSmallAnimCmd_3,
+};
+
+const struct SpriteTemplate gGrassKnotSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_RAZOR_LEAF,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gRazorLeafCutterAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGrassKnot,
+};
+
+const struct SpriteTemplate gWoodHammerBigSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WOOD_HAMMER,
+ .paletteTag = ANIM_TAG_WOOD_HAMMER,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gWoodHammerBigAnims,
+ .images = NULL,
+ .affineAnims = gWoodHammerBigAffineAnims,
+ .callback = AnimWoodHammerBig,
+};
+
+const struct SpriteTemplate gWoodHammerSmallSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WOOD_HAMMER,
+ .paletteTag = ANIM_TAG_WOOD_HAMMER,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gWoodHammerSmallAnims,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimWoodHammerSmall,
+};
+
+const struct SpriteTemplate gJudgmentGrayOutwardSpikesTemplate =
+{
+ .tileTag = ANIM_TAG_GREEN_SPIKE,
+ .paletteTag = ANIM_TAG_GUST,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gJudgmentGrayInwardOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gDarkVoidPurpleStarsTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGrantingStars
+};
+
+const struct SpriteTemplate gSeedFlareGreenCirclesTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+
+// functions
+static void AnimGrassKnot(struct Sprite *sprite)
+{
+ if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT)
+ gBattleAnimArgs[0] *= -1;
+
+ InitSpritePosToAnimTarget(sprite, TRUE);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = sprite->x + gBattleAnimArgs[2];
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = sprite->y;
+
+ InitAnimLinearTranslation(sprite);
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ sprite->data[6] = gBattleAnimArgs[4];
+ sprite->data[7] = 0;
+
+ sprite->callback = AnimGrassKnotStep;
+}
+
+static void AnimGrassKnotStep(struct Sprite *sprite)
+{
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->y2 += Sin(sprite->data[7] >> 8, sprite->data[5]);
+ sprite->data[7] += sprite->data[6];
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+static void AnimWoodHammerBig(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ StartSpriteAffineAnim(sprite, 1);
+
+ TranslateAnimSpriteToTargetMonLocation(sprite);
+}
+
+static void AnimWoodHammerSmall(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gBattleAnimArgs[5]);
+ AnimateSprite(sprite);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->x -= gBattleAnimArgs[0];
+ else
+ sprite->x += gBattleAnimArgs[0];
+
+ sprite->y += gBattleAnimArgs[1];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = sprite->x + gBattleAnimArgs[2];
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = sprite->y + gBattleAnimArgs[3];
+
+ InitSpriteDataForLinearTranslation(sprite);
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+
+ sprite->callback = TranslateSpriteLinearFixedPoint;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+}
+
// Animates the falling particles that horizontally wave back and forth.
// Used by Sleep Powder, Stun Spore, and Poison Powder.
// arg 0: initial x pixel offset
@@ -2197,7 +2998,7 @@ const struct SpriteTemplate gTauntFingerSpriteTemplate =
// arg 3: vertical movement speed (sub-pixel value)
// arg 4: wave amplitude
// arg 5: wave speed
-static void AnimMovePowderParticle(struct Sprite* sprite)
+void AnimMovePowderParticle(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
@@ -2217,7 +3018,7 @@ static void AnimMovePowderParticle(struct Sprite* sprite)
sprite->callback = AnimMovePowderParticle_Step;
}
-static void AnimMovePowderParticle_Step(struct Sprite* sprite)
+static void AnimMovePowderParticle_Step(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -2237,7 +3038,7 @@ static void AnimMovePowderParticle_Step(struct Sprite* sprite)
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: duration
-static void AnimPowerAbsorptionOrb(struct Sprite* sprite)
+void AnimPowerAbsorptionOrb(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
@@ -2252,7 +3053,7 @@ static void AnimPowerAbsorptionOrb(struct Sprite* sprite)
// arg 1: initial y pixel offset
// arg 2: duration
// arg 3: sprite anim number
-static void AnimSolarBeamBigOrb(struct Sprite* sprite)
+void AnimSolarBeamBigOrb(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
StartSpriteAnim(sprite, gBattleAnimArgs[3]);
@@ -2269,21 +3070,30 @@ static void AnimSolarBeamBigOrb(struct Sprite* sprite)
// arg 1: initial y pixel offset
// arg 2: duration
// arg 3: initial wave offset
-static void AnimSolarBeamSmallOrb(struct Sprite* sprite)
+static void AnimSolarBeamSmallOrb(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
- sprite->data[0] = gBattleAnimArgs[2];
- sprite->data[1] = sprite->x;
- sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
- sprite->data[3] = sprite->y;
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gAnimMoveIndex == MOVE_CORE_ENFORCER)
+ {
+ CoreEnforcerLoadBeamTarget(sprite);
+ }
+ else
+ {
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+
InitAnimLinearTranslation(sprite);
sprite->data[5] = gBattleAnimArgs[3];
sprite->callback = AnimSolarBeamSmallOrb_Step;
sprite->callback(sprite);
}
-static void AnimSolarBeamSmallOrb_Step(struct Sprite* sprite)
+static void AnimSolarBeamSmallOrb_Step(struct Sprite *sprite)
{
if (AnimTranslateLinear(sprite))
{
@@ -2327,7 +3137,7 @@ void AnimTask_CreateSmallSolarBeamOrbs(u8 taskId)
// arg 1: initial y pixel offset
// arg 2: wave amplitude
// arg 3: wave period (lower means faster wave)
-static void AnimAbsorptionOrb(struct Sprite* sprite)
+void AnimAbsorptionOrb(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
@@ -2338,7 +3148,7 @@ static void AnimAbsorptionOrb(struct Sprite* sprite)
sprite->callback = AnimAbsorptionOrb_Step;
}
-static void AnimAbsorptionOrb_Step(struct Sprite* sprite)
+static void AnimAbsorptionOrb_Step(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroyAnimSprite(sprite);
@@ -2346,7 +3156,7 @@ static void AnimAbsorptionOrb_Step(struct Sprite* sprite)
// Moves an orb in a wave-like fashion towards the target mon. The wave's
// properties and the sprite anim are randomly determined.
-static void AnimHyperBeamOrb(struct Sprite* sprite)
+void AnimHyperBeamOrb(struct Sprite *sprite)
{
u16 speed;
u16 animNum = Random2();
@@ -2372,7 +3182,7 @@ static void AnimHyperBeamOrb(struct Sprite* sprite)
sprite->callback(sprite);
}
-static void AnimHyperBeamOrb_Step(struct Sprite* sprite)
+static void AnimHyperBeamOrb_Step(struct Sprite *sprite)
{
if (AnimFastTranslateLinear(sprite))
{
@@ -2391,6 +3201,302 @@ static void AnimHyperBeamOrb_Step(struct Sprite* sprite)
}
}
+static void AnimMoveWorrySeedWait(struct Sprite *sprite)
+{
+ if (TranslateAnimHorizontalArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: wave period
+// arg 3: wave amplitude
+static void AnimMoveWorrySeed(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[5] = gBattleAnimArgs[3];
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimMoveWorrySeedWait;
+}
+
+static void AnimMoveSmallCloudAnimate(struct Sprite *sprite)
+{
+ sprite->x2 += sprite->data[0];
+ sprite->y2 += sprite->data[1];
+
+ if(sprite->affineAnimEnded)
+ {
+ DestroyAnimSprite(sprite);
+ }
+
+}
+#define ONE_IF_ZERO(x) ((x) > 0 ? (x) : 1)
+
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: cloud type animation [0..2]
+// arg 3: horizontal velocity
+// arg 4: vertical velocity
+// arg 5: duration
+static void AnimMoveSmallCloud(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = gBattleAnimArgs[4];
+ sprite->callback = AnimMoveSmallCloudAnimate;
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]+1);
+}
+
+static void AnimPluckParticle(struct Sprite *sprite)
+{
+ if(sprite->data[0] > 0)
+ {
+ s16 yVelocity = sprite->data[5];
+ s16 xVelocity = sprite->data[2];
+ sprite->y -= yVelocity;
+ sprite->x += xVelocity;
+ if((sprite->data[0] % 7) == 0)
+ {
+ sprite->data[5] = yVelocity-1;
+ }
+ sprite->data[0]--;
+ }
+ else
+ {
+ sprite->callback = DestroyAnimSprite;
+ }
+}
+
+// brown seed particle (jumps up, falls down.)
+// used by Pluck.
+// arg 0: initial x offset from target
+// arg 1: initial y offset from target
+// arg 2: lifetime of the particle
+// arg 3: upward velocity initial (decreases over time)
+// arg 4: horizontal velocity (stays the same)
+static void AnimPluck(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+
+ sprite->data[0] = gBattleAnimArgs[2]; //lifetime of the particle
+ sprite->data[5] = gBattleAnimArgs[3]; //upward velocity
+ sprite->data[2] = gBattleAnimArgs[4]; //horizontal velocity
+ sprite->x += gBattleAnimArgs[0];
+ sprite->y += gBattleAnimArgs[1];
+ sprite->callback = AnimPluckParticle;
+}
+
+static void AnimMoveFeintSwipeStep(struct Sprite *sprite)
+{
+ switch(sprite->data[5])
+ {
+ case 0:
+ if(AnimTranslateLinear(sprite))
+ {
+ //Not the most elegant solution here, but it works without messing up the sprites coordinates
+ sprite->x2 = 0;
+ sprite->x += 64;
+ sprite->data[5]++;
+ sprite->data[0] = sprite->data[6];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = sprite->x - 64;
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = sprite->y;
+ InitAnimLinearTranslation(sprite);
+ }
+ break;
+ case 1:
+ if(AnimTranslateLinear(sprite))
+ {
+ sprite->callback = DestroyAnimSprite;
+ }
+ break;
+ }
+
+}
+
+static void AnimMoveFeintSwipe(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ }
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = sprite->x + 64;
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = sprite->y;
+ sprite->data[5] = 0;
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = AnimMoveFeintSwipeStep;
+}
+
+static void AnimMoveFeintZoom(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
+static void AnimMoveTrumpCardArc(struct Sprite *sprite)
+{
+ if(AnimTranslateLinear(sprite))
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ sprite->y2 = Sin(sprite->data[5], -20);
+ sprite->data[5] -= sprite->data[6];
+ }
+
+}
+
+static void AnimMoveTrumpCard(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ }
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = sprite->x - 80;
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = sprite->y;
+ sprite->data[5] = 128;
+ sprite->data[6] = 128 / sprite->data[0];
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = AnimMoveTrumpCardArc;
+}
+
+static void AnimMoveTrumpCardParticleAlive(struct Sprite *sprite)
+{
+ if(sprite->data[0] > 0)
+ {
+ s16 yVelocity = sprite->data[2];
+ s16 xVelocity = sprite->data[1];
+ sprite->y -= yVelocity;
+ sprite->x += xVelocity;
+ if((sprite->data[0] % 2) == 0)
+ {
+ if(xVelocity > 0)
+ xVelocity--;
+ else if(xVelocity < 0)
+ xVelocity++;
+
+ if(yVelocity > 0)
+ yVelocity--;
+ else if(yVelocity < 0)
+ yVelocity++;
+ sprite->data[1] = xVelocity;
+ sprite->data[2] = yVelocity;
+ }
+ sprite->data[0]--;
+ }
+ else
+ {
+ sprite->callback = DestroyAnimSprite;
+ }
+}
+
+static void AnimMoveTrumpCardParticle(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ }
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]);
+ sprite->data[0] = gBattleAnimArgs[3]; //lifespan
+ sprite->data[1] = gBattleAnimArgs[4]; //horizontal velocity, decaying
+ sprite->data[2] = gBattleAnimArgs[5]; //vertical velocity, decaying
+ sprite->callback = AnimMoveTrumpCardParticleAlive;
+}
+
+static void AnimMoveAccupressureTransition(struct Sprite *sprite)
+{
+ switch(sprite->data[5])
+ {
+ case 0:
+ if(AnimTranslateLinear(sprite))
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->data[5]++;
+ }
+ break;
+ case 1:
+ if(sprite->affineAnimEnded)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+static void AnimMoveAccupressure(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
+ sprite->data[5] = 0;
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = AnimMoveAccupressureTransition;
+}
+
+static void AnimMoveWringOutCircle(struct Sprite *sprite)
+{
+ sprite->x2 = Cos(sprite->data[3], sprite->data[2]);
+ sprite->y2 = Sin(sprite->data[3], sprite->data[2]);
+ if(sprite->data[1] > 0)
+ {
+ if(sprite->data[3] + sprite->data[0] >= 256)
+ {
+ sprite->data[3] = (sprite->data[0] + sprite->data[3]) % 256;
+ sprite->data[1]--;
+ }
+ else
+ {
+ sprite->data[3] += sprite->data[0];
+ }
+
+ }
+ else if(sprite->data[3] < 64)
+ {
+ //We need to go for an extra 90°
+ sprite->data[3] += sprite->data[0];
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+static void AnimMoveWringOut(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ if(gBattleAnimArgs[5] == TRUE)
+ {
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+ }
+ sprite->data[0] = 256 / gBattleAnimArgs[2]; //step size
+ sprite->data[1] = gBattleAnimArgs[3]; //Number of circle spins
+ sprite->data[2] = gBattleAnimArgs[4]; //radius
+ sprite->data[3] = 64; //current angle 90°
+ sprite->callback = AnimMoveWringOutCircle;
+}
+
// seed (sprouts a sapling from a seed.)
// Used by Leech Seed.
// arg 0: initial x pixel offset
@@ -2399,7 +3505,7 @@ static void AnimHyperBeamOrb_Step(struct Sprite* sprite)
// arg 3: target y pixel offset
// arg 4: duration
// arg 5: wave amplitude
-static void AnimLeechSeed(struct Sprite* sprite)
+static void AnimLeechSeed(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -2413,7 +3519,7 @@ static void AnimLeechSeed(struct Sprite* sprite)
sprite->callback = AnimLeechSeed_Step;
}
-static void AnimLeechSeed_Step(struct Sprite* sprite)
+static void AnimLeechSeed_Step(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
{
@@ -2424,7 +3530,7 @@ static void AnimLeechSeed_Step(struct Sprite* sprite)
}
}
-static void AnimLeechSeedSprouts(struct Sprite* sprite)
+static void AnimLeechSeedSprouts(struct Sprite *sprite)
{
sprite->invisible = FALSE;
StartSpriteAnim(sprite, 1);
@@ -2441,7 +3547,7 @@ static void AnimLeechSeedSprouts(struct Sprite* sprite)
// arg 2: initial wave offset
// arg 3: duration
// arg 4: blend (0 = off, 1 = on)
-static void AnimSporeParticle(struct Sprite* sprite)
+void AnimSporeParticle(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, TRUE);
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
@@ -2454,7 +3560,7 @@ static void AnimSporeParticle(struct Sprite* sprite)
sprite->callback(sprite);
}
-static void AnimSporeParticle_Step(struct Sprite* sprite)
+static void AnimSporeParticle_Step(struct Sprite *sprite)
{
sprite->x2 = Sin(sprite->data[1], 32);
sprite->y2 = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8);
@@ -2503,7 +3609,7 @@ void AnimTask_SporeDoubleBattle(u8 taskId)
// arg 1: initial y pixel offset
// arg 2: target y pixel offset
// arg 3: duration
-static void AnimPetalDanceBigFlower(struct Sprite* sprite)
+void AnimPetalDanceBigFlower(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->data[0] = gBattleAnimArgs[3];
@@ -2517,7 +3623,7 @@ static void AnimPetalDanceBigFlower(struct Sprite* sprite)
sprite->callback(sprite);
}
-static void AnimPetalDanceBigFlower_Step(struct Sprite* sprite)
+static void AnimPetalDanceBigFlower_Step(struct Sprite *sprite)
{
if (!AnimTranslateLinear(sprite))
{
@@ -2541,7 +3647,7 @@ static void AnimPetalDanceBigFlower_Step(struct Sprite* sprite)
// arg 1: initial y pixel offset
// arg 2: target y pixel offset
// arg 3: duration
-static void AnimPetalDanceSmallFlower(struct Sprite* sprite)
+void AnimPetalDanceSmallFlower(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
@@ -2555,7 +3661,7 @@ static void AnimPetalDanceSmallFlower(struct Sprite* sprite)
sprite->callback(sprite);
}
-static void AnimPetalDanceSmallFlower_Step(struct Sprite* sprite)
+static void AnimPetalDanceSmallFlower_Step(struct Sprite *sprite)
{
if (!AnimTranslateLinear(sprite))
{
@@ -2576,7 +3682,7 @@ static void AnimPetalDanceSmallFlower_Step(struct Sprite* sprite)
// arg 0: upward x delta per frame
// arg 1: upward y delta per frame
// arg 2: upward duration
-static void AnimRazorLeafParticle(struct Sprite* sprite)
+static void AnimRazorLeafParticle(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -2586,7 +3692,7 @@ static void AnimRazorLeafParticle(struct Sprite* sprite)
sprite->callback = AnimRazorLeafParticle_Step1;
}
-static void AnimRazorLeafParticle_Step1(struct Sprite* sprite)
+static void AnimRazorLeafParticle_Step1(struct Sprite *sprite)
{
if (!sprite->data[2])
{
@@ -2612,7 +3718,7 @@ static void AnimRazorLeafParticle_Step1(struct Sprite* sprite)
}
}
-static void AnimRazorLeafParticle_Step2(struct Sprite* sprite)
+static void AnimRazorLeafParticle_Step2(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker))
sprite->x2 = -Sin(sprite->data[0], 25);
@@ -2639,7 +3745,7 @@ static void AnimRazorLeafParticle_Step2(struct Sprite* sprite)
// arg 4: translation duration
// arg 5: wave amplitude
// arg 6: target between double battle opponents (boolean)
-static void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
+void AnimTranslateLinearSingleSineWave(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -2668,7 +3774,7 @@ static void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
sprite->callback = AnimTranslateLinearSingleSineWave_Step;
}
-static void AnimTranslateLinearSingleSineWave_Step(struct Sprite* sprite)
+static void AnimTranslateLinearSingleSineWave_Step(struct Sprite *sprite)
{
bool8 destroy = FALSE;
s16 a = sprite->data[0];
@@ -2706,10 +3812,10 @@ static void AnimTranslateLinearSingleSineWave_Step(struct Sprite* sprite)
// arg 2: wave period (higher means faster wave)
// arg 3: wave amplitude
// arg 4: speedup frame (particles move faster at the end of the animation)
-void AnimMoveTwisterParticle(struct Sprite* sprite)
+void AnimMoveTwisterParticle(struct Sprite *sprite)
{
if (IsDoubleBattle() == TRUE)
- SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->x, &sprite->y);
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y);
sprite->y += 32;
sprite->data[0] = gBattleAnimArgs[0];
@@ -2720,7 +3826,7 @@ void AnimMoveTwisterParticle(struct Sprite* sprite)
sprite->callback = AnimMoveTwisterParticle_Step;
}
-static void AnimMoveTwisterParticle_Step(struct Sprite* sprite)
+static void AnimMoveTwisterParticle_Step(struct Sprite *sprite)
{
if (sprite->data[1] == 0xFF)
{
@@ -2753,7 +3859,7 @@ static void AnimMoveTwisterParticle_Step(struct Sprite* sprite)
// arg 1: initial y pixel offset
// arg 2: affine anim num
// arg 3: num squeezes
-static void AnimConstrictBinding(struct Sprite* sprite)
+static void AnimConstrictBinding(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->affineAnimPaused = 1;
@@ -2763,7 +3869,7 @@ static void AnimConstrictBinding(struct Sprite* sprite)
sprite->callback = AnimConstrictBinding_Step1;
}
-static void AnimConstrictBinding_Step1(struct Sprite* sprite)
+static void AnimConstrictBinding_Step1(struct Sprite *sprite)
{
u8 spriteId;
@@ -2776,7 +3882,7 @@ static void AnimConstrictBinding_Step1(struct Sprite* sprite)
}
}
-static void AnimConstrictBinding_Step2(struct Sprite* sprite)
+static void AnimConstrictBinding_Step2(struct Sprite *sprite)
{
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
if (!sprite->data[2])
@@ -2870,7 +3976,7 @@ static void AnimTask_DuplicateAndShrinkToPos_Step2(u8 taskId)
// Moves an orb from the target mon to the attacking mon.
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
-static void AnimMimicOrb(struct Sprite* sprite)
+void AnimMimicOrb(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -2904,7 +4010,7 @@ static void AnimMimicOrb(struct Sprite* sprite)
// arg 2: sprite subpriority offset
// arg 3: sprite anim num
// arg 4: duration
-static void AnimIngrainRoot(struct Sprite* sprite)
+static void AnimIngrainRoot(struct Sprite *sprite)
{
if (!sprite->data[0])
{
@@ -2952,7 +4058,7 @@ static void AnimFrenzyPlantRoot(struct Sprite *sprite)
sFrenzyPlantRootData.targetY = targetY;
}
-static void AnimRootFlickerOut(struct Sprite* sprite)
+static void AnimRootFlickerOut(struct Sprite *sprite)
{
if (++sprite->data[0] > (sprite->data[2] - 10))
sprite->invisible = sprite->data[0] % 2;
@@ -2967,7 +4073,7 @@ static void AnimRootFlickerOut(struct Sprite* sprite)
// arg 2: horizontal velocity
// arg 3: wave amplitude
// arg 4: duration
-static void AnimIngrainOrb(struct Sprite* sprite)
+static void AnimIngrainOrb(struct Sprite *sprite)
{
if (!sprite->data[0])
{
@@ -2985,7 +4091,7 @@ static void AnimIngrainOrb(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-static void InitItemBagData(struct Sprite* sprite, s16 c)
+static void InitItemBagData(struct Sprite *sprite, s16 c)
{
int a = (sprite->x << 8) | sprite->y;
int b = (sprite->data[6] << 8) | sprite->data[7];
@@ -2995,7 +4101,7 @@ static void InitItemBagData(struct Sprite* sprite, s16 c)
sprite->data[7] = c;
}
-bool8 moveAlongLinearPath(struct Sprite* sprite)
+bool8 moveAlongLinearPath(struct Sprite *sprite)
{
u16 xStartPos = (u8)(sprite->data[5] >> 8);
u16 yStartPos = (u8)sprite->data[5];
@@ -3026,7 +4132,7 @@ bool8 moveAlongLinearPath(struct Sprite* sprite)
return FALSE;
}
-static void AnimItemSteal_Step2(struct Sprite* sprite)
+static void AnimItemSteal_Step2(struct Sprite *sprite)
{
if (sprite->data[0] == 10)
StartSpriteAffineAnim(sprite, 1);
@@ -3036,7 +4142,7 @@ static void AnimItemSteal_Step2(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-static void AnimItemSteal_Step1(struct Sprite* sprite)
+static void AnimItemSteal_Step1(struct Sprite *sprite)
{
sprite->data[0] += sprite->data[3] * 128 / sprite->data[4];
if (sprite->data[0] >= 128)
@@ -3054,7 +4160,7 @@ static void AnimItemSteal_Step1(struct Sprite* sprite)
}
}
-static void AnimPresent(struct Sprite* sprite)
+static void AnimPresent(struct Sprite *sprite)
{
s16 targetX;
s16 targetY;
@@ -3080,7 +4186,7 @@ static void AnimPresent(struct Sprite* sprite)
sprite->callback = AnimItemSteal_Step1;
}
-static void AnimKnockOffOpponentsItem(struct Sprite* sprite)
+static void AnimKnockOffOpponentsItem(struct Sprite *sprite)
{
int zero;
sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
@@ -3100,7 +4206,7 @@ static void AnimKnockOffOpponentsItem(struct Sprite* sprite)
}
}
-static void AnimKnockOffItem(struct Sprite* sprite)
+static void AnimKnockOffItem(struct Sprite *sprite)
{
s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
@@ -3131,7 +4237,7 @@ static void AnimKnockOffItem(struct Sprite* sprite)
// arg 1: initial y pixel offset
// arg 2: vertical velocity
// arg 3: unused
-static void AnimPresentHealParticle(struct Sprite* sprite)
+static void AnimPresentHealParticle(struct Sprite *sprite)
{
if (!sprite->data[0])
{
@@ -3145,7 +4251,7 @@ static void AnimPresentHealParticle(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-static void AnimItemSteal(struct Sprite* sprite)
+static void AnimItemSteal(struct Sprite *sprite)
{
s16 attackerX;
s16 attackerY;
@@ -3171,7 +4277,7 @@ static void AnimItemSteal(struct Sprite* sprite)
sprite->callback = AnimItemSteal_Step3;
}
-static void AnimItemSteal_Step3(struct Sprite* sprite)
+static void AnimItemSteal_Step3(struct Sprite *sprite)
{
int zero;
sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
@@ -3198,7 +4304,7 @@ static void AnimItemSteal_Step3(struct Sprite* sprite)
// Moves a bag in a circular motion.
// arg 0: y position
// arg 1: initial wave offset
-static void AnimTrickBag(struct Sprite* sprite)
+static void AnimTrickBag(struct Sprite *sprite)
{
int a;
int b;
@@ -3235,7 +4341,7 @@ static void AnimTrickBag(struct Sprite* sprite)
}
}
-static void AnimTrickBag_Step1(struct Sprite* sprite)
+static void AnimTrickBag_Step1(struct Sprite *sprite)
{
switch (sprite->data[3])
{
@@ -3265,7 +4371,7 @@ static void AnimTrickBag_Step1(struct Sprite* sprite)
}
}
-static void AnimTrickBag_Step2(struct Sprite* sprite)
+static void AnimTrickBag_Step2(struct Sprite *sprite)
{
if (sprite->data[2] == gTrickBagCoordinates[sprite->data[0]][1])
{
@@ -3295,7 +4401,7 @@ static void AnimTrickBag_Step2(struct Sprite* sprite)
}
}
-static void AnimTrickBag_Step3(struct Sprite* sprite)
+static void AnimTrickBag_Step3(struct Sprite *sprite)
{
if (sprite->data[0] > 20)
DestroyAnimSprite(sprite);
@@ -3332,8 +4438,8 @@ void AnimTask_LeafBlade(u8 taskId)
static void AnimTask_LeafBlade_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
- struct Sprite* sprite = &gSprites[task->data[2]];
+ struct Task *task = &gTasks[taskId];
+ struct Sprite *sprite = &gSprites[task->data[2]];
int a = task->data[0];
switch (a)
{
@@ -3515,7 +4621,7 @@ static void AnimTask_LeafBlade_Step(u8 taskId)
}
}
-static s16 LeafBladeGetPosFactor(struct Sprite* sprite)
+static s16 LeafBladeGetPosFactor(struct Sprite *sprite)
{
s16 var = 8;
if (sprite->data[4] < sprite->y)
@@ -3524,7 +4630,7 @@ static s16 LeafBladeGetPosFactor(struct Sprite* sprite)
return var;
}
-static void AnimTask_LeafBlade_Step2(struct Task* task, u8 taskId)
+static void AnimTask_LeafBlade_Step2(struct Task *task, u8 taskId)
{
task->data[14]++;
if (task->data[14] > 0)
@@ -3550,7 +4656,7 @@ static void AnimTask_LeafBlade_Step2(struct Task* task, u8 taskId)
}
}
-static void AnimTask_LeafBlade_Step2_Callback(struct Sprite* sprite)
+static void AnimTask_LeafBlade_Step2_Callback(struct Sprite *sprite)
{
sprite->data[0]++;
if (sprite->data[0] > 1)
@@ -3566,7 +4672,7 @@ static void AnimTask_LeafBlade_Step2_Callback(struct Sprite* sprite)
}
}
-static void AnimFlyingParticle(struct Sprite* sprite)
+static void AnimFlyingParticle(struct Sprite *sprite)
{
u8 battler;
if (!gBattleAnimArgs[6])
@@ -3614,7 +4720,7 @@ static void AnimFlyingParticle(struct Sprite* sprite)
sprite->callback = AnimFlyingParticle_Step;
}
-static void AnimFlyingParticle_Step(struct Sprite* sprite)
+static void AnimFlyingParticle_Step(struct Sprite *sprite)
{
int a = sprite->data[7];
sprite->data[7]++;
@@ -3637,7 +4743,7 @@ static void AnimFlyingParticle_Step(struct Sprite* sprite)
void AnimTask_CycleMagicalLeafPal(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
@@ -3665,7 +4771,7 @@ void AnimTask_CycleMagicalLeafPal(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-static void AnimNeedleArmSpike(struct Sprite* sprite)
+void AnimNeedleArmSpike(struct Sprite *sprite)
{
u8 a;
u8 b;
@@ -3716,12 +4822,12 @@ static void AnimNeedleArmSpike(struct Sprite* sprite)
if (IsContest())
c -= 0x8000;
- TrySetSpriteRotScale(sprite, 0, 0x100, 0x100, c);
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, c);
sprite->callback = AnimNeedleArmSpike_Step;
}
}
-static void AnimNeedleArmSpike_Step(struct Sprite* sprite)
+void AnimNeedleArmSpike_Step(struct Sprite *sprite)
{
if (sprite->data[0])
{
@@ -3737,13 +4843,13 @@ static void AnimNeedleArmSpike_Step(struct Sprite* sprite)
}
}
-static void AnimWhipHit_WaitEnd(struct Sprite* sprite)
+static void AnimWhipHit_WaitEnd(struct Sprite *sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
}
-static void AnimSlidingHit(struct Sprite* sprite)
+static void AnimSlidingHit(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
@@ -3760,7 +4866,7 @@ static void AnimSlidingHit(struct Sprite* sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-static void AnimWhipHit(struct Sprite* sprite)
+static void AnimWhipHit(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
StartSpriteAnim(sprite, 1);
@@ -3770,7 +4876,7 @@ static void AnimWhipHit(struct Sprite* sprite)
sprite->y += gBattleAnimArgs[1];
}
-static void AnimFlickeringPunch(struct Sprite* sprite)
+static void AnimFlickeringPunch(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
@@ -3788,7 +4894,7 @@ static void AnimFlickeringPunch(struct Sprite* sprite)
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: slice direction; 0 = right-to-left, 1 = left-to-right
-static void AnimCuttingSlice(struct Sprite* sprite)
+void AnimCuttingSlice(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
@@ -3814,7 +4920,7 @@ static void AnimCuttingSlice(struct Sprite* sprite)
sprite->data[1] = -sprite->data[1];
}
-static void AnimAirCutterSlice(struct Sprite* sprite)
+static void AnimAirCutterSlice(struct Sprite *sprite)
{
u8 x, y;
switch (gBattleAnimArgs[3])
@@ -3863,7 +4969,7 @@ static void AnimAirCutterSlice(struct Sprite* sprite)
sprite->data[1] = -sprite->data[1];
}
-static void AnimSlice_Step(struct Sprite* sprite)
+static void AnimSlice_Step(struct Sprite *sprite)
{
sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2];
@@ -3884,7 +4990,7 @@ static void AnimSlice_Step(struct Sprite* sprite)
}
}
-static void UnusedFlickerAnim(struct Sprite* sprite)
+static void UnusedFlickerAnim(struct Sprite *sprite)
{
if (sprite->data[2] > 1)
{
@@ -3917,7 +5023,7 @@ static void UnusedFlickerAnim(struct Sprite* sprite)
}
}
-static void AnimCirclingMusicNote(struct Sprite* sprite)
+static void AnimCirclingMusicNote(struct Sprite *sprite)
{
sprite->data[0] = gBattleAnimArgs[2];
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -3933,7 +5039,7 @@ static void AnimCirclingMusicNote(struct Sprite* sprite)
sprite->callback(sprite);
}
-static void AnimCirclingMusicNote_Step(struct Sprite* sprite)
+static void AnimCirclingMusicNote_Step(struct Sprite *sprite)
{
sprite->x2 = Cos(sprite->data[0], 100);
sprite->y2 = Sin(sprite->data[0], 20);
@@ -3950,7 +5056,7 @@ static void AnimCirclingMusicNote_Step(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-static void AnimProtect(struct Sprite* sprite)
+static void AnimProtect(struct Sprite *sprite)
{
if (IsContest())
gBattleAnimArgs[1] += 8;
@@ -4013,7 +5119,7 @@ static void AnimProtect_Step(struct Sprite *sprite)
}
}
-static void AnimMilkBottle(struct Sprite* sprite)
+static void AnimMilkBottle(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 0xFFE8;
@@ -4029,7 +5135,7 @@ static void AnimMilkBottle(struct Sprite* sprite)
sprite->callback = AnimMilkBottle_Step1;
}
-static void AnimMilkBottle_Step1(struct Sprite* sprite)
+static void AnimMilkBottle_Step1(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -4102,7 +5208,7 @@ static void AnimMilkBottle_Step1(struct Sprite* sprite)
}
}
-static void AnimMilkBottle_Step2(struct Sprite* sprite, int unk1, int unk2)
+static void AnimMilkBottle_Step2(struct Sprite *sprite, int unk1, int unk2)
{
if (sprite->data[3] <= 11)
sprite->data[4] += 2;
@@ -4123,7 +5229,7 @@ static void AnimMilkBottle_Step2(struct Sprite* sprite, int unk1, int unk2)
sprite->data[3] = 0;
}
-static void AnimGrantingStars(struct Sprite* sprite)
+void AnimGrantingStars(struct Sprite *sprite)
{
if (!gBattleAnimArgs[2])
SetSpriteCoordsToAnimAttackerCoords(sprite);
@@ -4137,7 +5243,7 @@ static void AnimGrantingStars(struct Sprite* sprite)
sprite->callback = TranslateSpriteLinearFixedPoint;
}
-static void AnimSparkingStars(struct Sprite* sprite)
+static void AnimSparkingStars(struct Sprite *sprite)
{
u8 battler;
if (!gBattleAnimArgs[2])
@@ -4174,7 +5280,7 @@ static void AnimSparkingStars(struct Sprite* sprite)
sprite->callback = TranslateSpriteLinearFixedPoint;
}
-static void AnimBubbleBurst(struct Sprite* sprite)
+static void AnimBubbleBurst(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
@@ -4192,7 +5298,7 @@ static void AnimBubbleBurst(struct Sprite* sprite)
sprite->callback = AnimBubbleBurst_Step;
}
-static void AnimBubbleBurst_Step(struct Sprite* sprite)
+static void AnimBubbleBurst_Step(struct Sprite *sprite)
{
if (++sprite->data[0] > 30)
{
@@ -4205,7 +5311,7 @@ static void AnimBubbleBurst_Step(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-static void AnimSleepLetterZ(struct Sprite* sprite)
+static void AnimSleepLetterZ(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
@@ -4225,7 +5331,7 @@ static void AnimSleepLetterZ(struct Sprite* sprite)
sprite->callback = AnimSleepLetterZ_Step;
}
-static void AnimSleepLetterZ_Step(struct Sprite* sprite)
+static void AnimSleepLetterZ_Step(struct Sprite *sprite)
{
sprite->y2 = -(sprite->data[0] / 0x28);
sprite->x2 = sprite->data[4] / 10;
@@ -4235,7 +5341,7 @@ static void AnimSleepLetterZ_Step(struct Sprite* sprite)
DestroySpriteAndMatrix(sprite);
}
-static void AnimLockOnTarget(struct Sprite* sprite)
+static void AnimLockOnTarget(struct Sprite *sprite)
{
sprite->x -= 32;
sprite->y -= 32;
@@ -4244,7 +5350,7 @@ static void AnimLockOnTarget(struct Sprite* sprite)
StoreSpriteCallbackInData6(sprite, AnimLockOnTarget_Step1);
}
-static void AnimLockOnTarget_Step1(struct Sprite* sprite)
+static void AnimLockOnTarget_Step1(struct Sprite *sprite)
{
switch (sprite->data[5] & 1)
{
@@ -4271,7 +5377,7 @@ static void AnimLockOnTarget_Step1(struct Sprite* sprite)
sprite->data[5] ^= 1;
}
-static void AnimLockOnTarget_Step2(struct Sprite* sprite)
+static void AnimLockOnTarget_Step2(struct Sprite *sprite)
{
if ((sprite->data[5] >> 8) == 4)
{
@@ -4285,7 +5391,7 @@ static void AnimLockOnTarget_Step2(struct Sprite* sprite)
}
}
-static void AnimLockOnTarget_Step3(struct Sprite* sprite)
+static void AnimLockOnTarget_Step3(struct Sprite *sprite)
{
s16 a;
s16 b;
@@ -4331,7 +5437,7 @@ static void AnimLockOnTarget_Step3(struct Sprite* sprite)
}
}
-static void AnimLockOnTarget_Step4(struct Sprite* sprite)
+static void AnimLockOnTarget_Step4(struct Sprite *sprite)
{
if (sprite->data[2] == 0)
{
@@ -4358,7 +5464,7 @@ static void AnimLockOnTarget_Step4(struct Sprite* sprite)
}
}
-static void AnimLockOnTarget_Step5(struct Sprite* sprite)
+static void AnimLockOnTarget_Step5(struct Sprite *sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
@@ -4368,7 +5474,7 @@ static void AnimLockOnTarget_Step5(struct Sprite* sprite)
}
}
-static void AnimLockOnTarget_Step6(struct Sprite* sprite)
+static void AnimLockOnTarget_Step6(struct Sprite *sprite)
{
if (sprite->data[0] % 3 == 0)
{
@@ -4381,7 +5487,7 @@ static void AnimLockOnTarget_Step6(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-static void AnimLockOnMoveTarget(struct Sprite* sprite)
+static void AnimLockOnMoveTarget(struct Sprite *sprite)
{
sprite->oam.affineParam = gBattleAnimArgs[0];
if ((s16)sprite->oam.affineParam == 1)
@@ -4413,7 +5519,7 @@ static void AnimLockOnMoveTarget(struct Sprite* sprite)
sprite->callback(sprite);
}
-static void AnimBowMon(struct Sprite* sprite)
+static void AnimBowMon(struct Sprite *sprite)
{
sprite->invisible = TRUE;
sprite->data[0] = 0;
@@ -4434,7 +5540,7 @@ static void AnimBowMon(struct Sprite* sprite)
}
}
-static void AnimBowMon_Step1(struct Sprite* sprite)
+static void AnimBowMon_Step1(struct Sprite *sprite)
{
sprite->data[0] = 6;
sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? 2 : -2;
@@ -4444,7 +5550,7 @@ static void AnimBowMon_Step1(struct Sprite* sprite)
sprite->callback = TranslateSpriteLinearById;
}
-static void AnimBowMon_Step1_Callback(struct Sprite* sprite)
+static void AnimBowMon_Step1_Callback(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -4464,7 +5570,7 @@ static void AnimBowMon_Step1_Callback(struct Sprite* sprite)
}
}
-static void AnimBowMon_Step2(struct Sprite* sprite)
+static void AnimBowMon_Step2(struct Sprite *sprite)
{
sprite->data[0] = 4;
sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? -3 : 3;
@@ -4474,7 +5580,7 @@ static void AnimBowMon_Step2(struct Sprite* sprite)
sprite->callback = TranslateSpriteLinearById;
}
-static void AnimBowMon_Step3(struct Sprite* sprite)
+static void AnimBowMon_Step3(struct Sprite *sprite)
{
if (++sprite->data[0] > 8)
{
@@ -4483,7 +5589,7 @@ static void AnimBowMon_Step3(struct Sprite* sprite)
}
}
-static void AnimBowMon_Step3_Callback(struct Sprite* sprite)
+static void AnimBowMon_Step3_Callback(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -4511,7 +5617,7 @@ static void AnimBowMon_Step3_Callback(struct Sprite* sprite)
}
}
-static void AnimBowMon_Step4(struct Sprite* sprite)
+static void AnimBowMon_Step4(struct Sprite *sprite)
{
DestroyAnimSprite(sprite);
}
@@ -4690,7 +5796,7 @@ static void AnimTask_SkullBashPositionSet(u8 taskId)
static void AnimTask_SkullBashPositionReset(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
if (task->data[3])
{
task->data[4] -= task->data[5];
@@ -4705,7 +5811,7 @@ static void AnimTask_SkullBashPositionReset(u8 taskId)
}
}
-static void AnimSlashSlice(struct Sprite* sprite)
+static void AnimSlashSlice(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
@@ -4724,7 +5830,7 @@ static void AnimSlashSlice(struct Sprite* sprite)
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
-static void AnimFalseSwipeSlice(struct Sprite* sprite)
+static void AnimFalseSwipeSlice(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0;
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
@@ -4732,7 +5838,7 @@ static void AnimFalseSwipeSlice(struct Sprite* sprite)
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
-static void AnimFalseSwipePositionedSlice(struct Sprite* sprite)
+static void AnimFalseSwipePositionedSlice(struct Sprite *sprite)
{
sprite->x = sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 0xFFD0 + gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
@@ -4742,7 +5848,7 @@ static void AnimFalseSwipePositionedSlice(struct Sprite* sprite)
sprite->callback = AnimFalseSwipeSlice_Step3;
}
-static void AnimFalseSwipeSlice_Step1(struct Sprite* sprite)
+static void AnimFalseSwipeSlice_Step1(struct Sprite *sprite)
{
if (++sprite->data[0] > 8)
{
@@ -4754,14 +5860,14 @@ static void AnimFalseSwipeSlice_Step1(struct Sprite* sprite)
}
}
-static void AnimFalseSwipeSlice_Step2(struct Sprite* sprite)
+static void AnimFalseSwipeSlice_Step2(struct Sprite *sprite)
{
sprite->data[0] = 0;
sprite->data[1] = 0;
sprite->callback = AnimFalseSwipeSlice_Step3;
}
-static void AnimFalseSwipeSlice_Step3(struct Sprite* sprite)
+static void AnimFalseSwipeSlice_Step3(struct Sprite *sprite)
{
if (++sprite->data[0] > 1)
{
@@ -4772,7 +5878,7 @@ static void AnimFalseSwipeSlice_Step3(struct Sprite* sprite)
}
}
-static void AnimEndureEnergy(struct Sprite* sprite)
+void AnimEndureEnergy(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
@@ -4790,7 +5896,7 @@ static void AnimEndureEnergy(struct Sprite* sprite)
sprite->callback = AnimEndureEnergy_Step;
}
-static void AnimEndureEnergy_Step(struct Sprite* sprite)
+static void AnimEndureEnergy_Step(struct Sprite *sprite)
{
if (++sprite->data[0] > sprite->data[1])
{
@@ -4803,7 +5909,7 @@ static void AnimEndureEnergy_Step(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-static void AnimSharpenSphere(struct Sprite* sprite)
+static void AnimSharpenSphere(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - 12;
@@ -4816,7 +5922,7 @@ static void AnimSharpenSphere(struct Sprite* sprite)
sprite->callback = AnimSharpenSphere_Step;
}
-static void AnimSharpenSphere_Step(struct Sprite* sprite)
+static void AnimSharpenSphere_Step(struct Sprite *sprite)
{
if (++sprite->data[0] >= sprite->data[1])
{
@@ -4840,7 +5946,7 @@ static void AnimSharpenSphere_Step(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-static void AnimConversion(struct Sprite* sprite)
+void AnimConversion(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -4880,7 +5986,7 @@ void AnimTask_ConversionAlphaBlend(u8 taskId)
}
}
-static void AnimConversion2(struct Sprite* sprite)
+static void AnimConversion2(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->animPaused = 1;
@@ -4888,7 +5994,7 @@ static void AnimConversion2(struct Sprite* sprite)
sprite->callback = AnimConversion2_Step;
}
-static void AnimConversion2_Step(struct Sprite* sprite)
+static void AnimConversion2_Step(struct Sprite *sprite)
{
if (sprite->data[0])
{
@@ -4943,7 +6049,7 @@ static void AnimTask_ShowBattlersHealthbox(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-static void AnimMoon(struct Sprite* sprite)
+static void AnimMoon(struct Sprite *sprite)
{
if (IsContest())
{
@@ -4962,13 +6068,13 @@ static void AnimMoon(struct Sprite* sprite)
sprite->callback = AnimMoon_Step;
}
-static void AnimMoon_Step(struct Sprite* sprite)
+static void AnimMoon_Step(struct Sprite *sprite)
{
if (sprite->data[0])
DestroyAnimSprite(sprite);
}
-static void AnimMoonlightSparkle(struct Sprite* sprite)
+static void AnimMoonlightSparkle(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
sprite->y = gBattleAnimArgs[1];
@@ -4980,7 +6086,7 @@ static void AnimMoonlightSparkle(struct Sprite* sprite)
sprite->callback = AnimMoonlightSparkle_Step;
}
-static void AnimMoonlightSparkle_Step(struct Sprite* sprite)
+static void AnimMoonlightSparkle_Step(struct Sprite *sprite)
{
if (++sprite->data[1] > 1)
{
@@ -5015,7 +6121,7 @@ void AnimTask_MoonlightEndFade(u8 taskId)
gTasks[taskId].data[9] = 15;
b = GetBattleMonSpritePalettesMask(1, 1, 1, 1);
c = a | b;
- StorePointerInVars(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c);
+ StorePointerInVars(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void *)c);
b = b | (0x10000 << IndexOfSpritePaletteTag(ANIM_TAG_MOON));
d = IndexOfSpritePaletteTag(ANIM_TAG_GREEN_SPARKLE);
BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 16, RGB(27, 29, 31));
@@ -5025,7 +6131,7 @@ void AnimTask_MoonlightEndFade(u8 taskId)
static void AnimTask_MoonlightEndFade_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
@@ -5101,7 +6207,7 @@ static void AnimTask_MoonlightEndFade_Step(u8 taskId)
}
}
-static void AnimHornHit(struct Sprite* sprite)
+static void AnimHornHit(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] < 2)
gBattleAnimArgs[2] = 2;
@@ -5148,7 +6254,7 @@ static void AnimHornHit(struct Sprite* sprite)
sprite->callback = AnimHornHit_Step;
}
-static void AnimHornHit_Step(struct Sprite* sprite)
+static void AnimHornHit_Step(struct Sprite *sprite)
{
sprite->data[2] += sprite->data[3];
sprite->data[4] += sprite->data[5];
@@ -5170,7 +6276,7 @@ void AnimTask_DoubleTeam(u8 taskId)
int obj;
u16 r3;
u16 r4;
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[1] = AllocSpritePalette(ANIM_TAG_BENT_SPOON);
r3 = (task->data[1] * 16) + 0x100;
@@ -5201,7 +6307,7 @@ void AnimTask_DoubleTeam(u8 taskId)
static void AnimTask_DoubleTeam_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
if (!task->data[3])
{
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
@@ -5214,7 +6320,7 @@ static void AnimTask_DoubleTeam_Step(u8 taskId)
}
}
-static void AnimDoubleTeam(struct Sprite* sprite)
+static void AnimDoubleTeam(struct Sprite *sprite)
{
if (++sprite->data[3] > 1)
{
@@ -5236,7 +6342,7 @@ static void AnimDoubleTeam(struct Sprite* sprite)
}
}
-static void AnimSuperFang(struct Sprite* sprite)
+static void AnimSuperFang(struct Sprite *sprite)
{
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = RunStoredCallbackWhenAnimEnds;
@@ -5288,7 +6394,7 @@ void AnimTask_MusicNotesClearRainbowBlend(u8 taskId)
#define sVelocX data[6]
#define sVelocY data[7]
-static void AnimWavyMusicNotes(struct Sprite* sprite)
+static void AnimWavyMusicNotes(struct Sprite *sprite)
{
u8 index;
u8 x, y;
@@ -5317,7 +6423,7 @@ static void AnimWavyMusicNotes(struct Sprite* sprite)
sprite->callback = AnimWavyMusicNotes_Step;
}
-static void AnimWavyMusicNotes_CalcVelocity(s16 x, s16 y, s16* velocX, s16* velocY, s8 xSpeedFactor)
+static void AnimWavyMusicNotes_CalcVelocity(s16 x, s16 y, s16 *velocX, s16 *velocY, s8 xSpeedFactor)
{
int x2;
int time;
@@ -5333,7 +6439,7 @@ static void AnimWavyMusicNotes_CalcVelocity(s16 x, s16 y, s16* velocX, s16* velo
*velocY = (y * 256) / time;
}
-static void AnimWavyMusicNotes_Step(struct Sprite* sprite)
+static void AnimWavyMusicNotes_Step(struct Sprite *sprite)
{
s16 y, trigIdx;
u8 index;
@@ -5366,7 +6472,7 @@ static void AnimWavyMusicNotes_Step(struct Sprite* sprite)
}
}
-static void AnimFlyingMusicNotes(struct Sprite* sprite)
+static void AnimFlyingMusicNotes(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
gBattleAnimArgs[1] *= -1;
@@ -5383,7 +6489,7 @@ static void AnimFlyingMusicNotes(struct Sprite* sprite)
sprite->callback = AnimFlyingMusicNotes_Step;
}
-static void AnimFlyingMusicNotes_Step(struct Sprite* sprite)
+static void AnimFlyingMusicNotes_Step(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[6];
sprite->data[5] += sprite->data[7];
@@ -5402,7 +6508,7 @@ static void AnimFlyingMusicNotes_Step(struct Sprite* sprite)
DestroySpriteAndMatrix(sprite);
}
-static void AnimBellyDrumHand(struct Sprite* sprite)
+static void AnimBellyDrumHand(struct Sprite *sprite)
{
s16 a;
if (gBattleAnimArgs[0] == 1)
@@ -5422,7 +6528,7 @@ static void AnimBellyDrumHand(struct Sprite* sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void AnimSlowFlyingMusicNotes(struct Sprite* sprite)
+void AnimSlowFlyingMusicNotes(struct Sprite *sprite)
{
s16 xDiff;
u8 index;
@@ -5444,7 +6550,7 @@ void AnimSlowFlyingMusicNotes(struct Sprite* sprite)
sprite->callback = AnimSlowFlyingMusicNotes_Step;
}
-static void AnimSlowFlyingMusicNotes_Step(struct Sprite* sprite)
+static void AnimSlowFlyingMusicNotes_Step(struct Sprite *sprite)
{
if (AnimTranslateLinear(sprite) == 0)
{
@@ -5463,7 +6569,7 @@ static void AnimSlowFlyingMusicNotes_Step(struct Sprite* sprite)
}
}
-void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite)
+void SetSpriteNextToMonHead(u8 battler, struct Sprite *sprite)
{
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
sprite->x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) + 8;
@@ -5473,7 +6579,7 @@ void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite)
sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
}
-static void AnimThoughtBubble(struct Sprite* sprite)
+void AnimThoughtBubble(struct Sprite *sprite)
{
u8 animNum;
u8 battler;
@@ -5491,7 +6597,7 @@ static void AnimThoughtBubble(struct Sprite* sprite)
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
-static void AnimThoughtBubble_Step(struct Sprite* sprite)
+static void AnimThoughtBubble_Step(struct Sprite *sprite)
{
if (--sprite->data[0] == 0)
{
@@ -5501,7 +6607,7 @@ static void AnimThoughtBubble_Step(struct Sprite* sprite)
}
}
-static void AnimMetronomeFinger(struct Sprite* sprite)
+void AnimMetronomeFinger(struct Sprite *sprite)
{
u8 battler;
if (gBattleAnimArgs[0] == 0)
@@ -5515,7 +6621,7 @@ static void AnimMetronomeFinger(struct Sprite* sprite)
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
-static void AnimMetronomeFinger_Step(struct Sprite* sprite)
+static void AnimMetronomeFinger_Step(struct Sprite *sprite)
{
if (++sprite->data[0] > 16)
{
@@ -5525,7 +6631,7 @@ static void AnimMetronomeFinger_Step(struct Sprite* sprite)
}
}
-static void AnimFollowMeFinger(struct Sprite* sprite)
+void AnimFollowMeFinger(struct Sprite *sprite)
{
u8 battler;
if (gBattleAnimArgs[0] == 0)
@@ -5547,13 +6653,13 @@ static void AnimFollowMeFinger(struct Sprite* sprite)
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
-static void AnimFollowMeFinger_Step1(struct Sprite* sprite)
+static void AnimFollowMeFinger_Step1(struct Sprite *sprite)
{
if (++sprite->data[4] > 12)
sprite->callback = AnimFollowMeFinger_Step2;
}
-static void AnimFollowMeFinger_Step2(struct Sprite* sprite)
+static void AnimFollowMeFinger_Step2(struct Sprite *sprite)
{
s16 x1, x2;
@@ -5583,7 +6689,7 @@ static void AnimFollowMeFinger_Step2(struct Sprite* sprite)
sprite->x2 = (x1 >> 3) + (x2 >> 1);
}
-static void AnimTauntFinger(struct Sprite* sprite)
+static void AnimTauntFinger(struct Sprite *sprite)
{
u8 battler;
if (gBattleAnimArgs[0] == 0)
@@ -5606,7 +6712,7 @@ static void AnimTauntFinger(struct Sprite* sprite)
sprite->callback = AnimTauntFinger_Step1;
}
-static void AnimTauntFinger_Step1(struct Sprite* sprite)
+static void AnimTauntFinger_Step1(struct Sprite *sprite)
{
if (++sprite->data[1] > 10)
{
@@ -5617,8 +6723,129 @@ static void AnimTauntFinger_Step1(struct Sprite* sprite)
}
}
-static void AnimTauntFinger_Step2(struct Sprite* sprite)
+static void AnimTauntFinger_Step2(struct Sprite *sprite)
{
if (++sprite->data[1] > 5)
DestroyAnimSprite(sprite);
}
+
+// Animates a white streak by giving it a random rotation.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+static void AnimRockPolishStreak(struct Sprite *sprite)
+{
+ int affineAnimNum = Random2() % ARRAY_COUNT(gRockPolishStreak_AffineAnimCmds);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ StartSpriteAffineAnim(sprite, affineAnimNum);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+}
+
+// Places a blue sparkle that plays its default animation.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+static void AnimRockPolishSparkle(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+}
+
+// Moves a projectile towards the center of the target mon. The sprite is rotated to look
+// like it's traveling along that path.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+static void AnimPoisonJabProjectile(struct Sprite *sprite)
+{
+ s16 targetXPos;
+ s16 targetYPos;
+ u16 rotation;
+
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ rotation = ArcTan2Neg(targetXPos - sprite->x, targetYPos - sprite->y);
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = targetXPos;
+ sprite->data[4] = targetYPos;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void AnimTask_BlendNightSlash(u8 taskId)
+{
+ int paletteOffset = IndexOfSpritePaletteTag(ANIM_TAG_SLASH) * 16 + 256;
+ BlendPalette(paletteOffset, 16, 6, RGB_RED);
+ DestroyAnimVisualTask(taskId);
+}
+
+static void AnimNightSlash(struct Sprite *sprite)
+{
+ sprite->callback = AnimSlashSlice;
+ sprite->callback(sprite);
+}
+
+static const union AffineAnimCmd sCompressTargetHorizontallyAffineAnimCmds[] =
+{
+ AFFINEANIMCMD_FRAME(64, 0, 0, 16), //Compress
+ AFFINEANIMCMD_FRAME(0, 0, 0, 64),
+ AFFINEANIMCMD_FRAME(-64, 0, 0, 16),
+ AFFINEANIMCMD_END,
+};
+
+static void AnimTask_CompressTargetStep(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+
+ if (!RunAffineAnimFromTaskData(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_CompressTargetHorizontally(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ PrepareAffineAnimInTaskData(task, spriteId, sCompressTargetHorizontallyAffineAnimCmds);
+ task->func = AnimTask_CompressTargetStep;
+}
+
+const struct SpriteTemplate gSteelBeamBigOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_STEEL_BEAM,
+ .paletteTag = ANIM_TAG_STEEL_BEAM,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSolarBeamBigOrb,
+};
+
+const struct SpriteTemplate gSteelBeamSmallOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_STEEL_BEAM,
+ .paletteTag = ANIM_TAG_STEEL_BEAM,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamSmallOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSolarBeamSmallOrb,
+};
+
+void AnimTask_CreateSmallSteelBeamOrbs(u8 taskId)
+{
+ if (--gTasks[taskId].data[0] == -1)
+ {
+ gTasks[taskId].data[1]++;
+ gTasks[taskId].data[0] = 6;
+ gBattleAnimArgs[0] = 15;
+ gBattleAnimArgs[1] = 0;
+ gBattleAnimArgs[2] = 80;
+ gBattleAnimArgs[3] = 0;
+ CreateSpriteAndAnimate(&gSteelBeamSmallOrbSpriteTemplate, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1);
+ }
+
+ if (gTasks[taskId].data[1] == 15)
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c
index 9764d5522a..b919a54c45 100755
--- a/src/battle_anim_effects_2.c
+++ b/src/battle_anim_effects_2.c
@@ -26,7 +26,6 @@ static void AnimMovingClamp_End(struct Sprite *);
static void AnimKinesisZapEnergy(struct Sprite *);
static void AnimSwordsDanceBlade(struct Sprite *);
static void AnimSwordsDanceBlade_Step(struct Sprite *);
-static void AnimSonicBoomProjectile(struct Sprite *);
static void AnimAirWaveProjectile(struct Sprite *);
static void AnimAirWaveProjectile_Step1(struct Sprite *sprite);
static void AnimAirWaveProjectile_Step2(struct Sprite *sprite);
@@ -46,12 +45,9 @@ static void AnimGuillotinePincer_Step1(struct Sprite *);
static void AnimGuillotinePincer_Step2(struct Sprite *);
static void AnimGuillotinePincer_Step3(struct Sprite *);
static void AnimBreathPuff(struct Sprite *);
-static void AnimAngerMark(struct Sprite *);
static void AnimPencil(struct Sprite *);
static void AnimPencil_Step(struct Sprite *);
static void AnimBlendThinRing(struct Sprite *);
-static void AnimHyperVoiceRing(struct Sprite *);
-static void AnimUproarRing(struct Sprite *);
static void AnimSoftBoiledEgg(struct Sprite *);
static void AnimSoftBoiledEgg_Step1(struct Sprite *);
static void AnimSoftBoiledEgg_Step2(struct Sprite *);
@@ -62,14 +58,11 @@ static void AnimSoftBoiledEgg_Step4(struct Sprite *);
static void AnimSoftBoiledEgg_Step4_Callback(struct Sprite *);
static void AnimSpeedDust(struct Sprite *);
static void AnimHealBellMusicNote(struct Sprite *);
-static void AnimMagentaHeart(struct Sprite *);
static void AnimRedHeartProjectile(struct Sprite *);
static void AnimRedHeartProjectile_Step(struct Sprite *);
static void AnimRedHeartRising(struct Sprite *);
static void AnimRedHeartRising_Step(struct Sprite *);
-static void AnimOrbitFast(struct Sprite *);
static void AnimOrbitFast_Step(struct Sprite *);
-static void AnimOrbitScatter(struct Sprite *);
static void AnimOrbitScatter_Step(struct Sprite *);
static void AnimSpitUpOrb(struct Sprite *);
static void AnimSpitUpOrb_Step(struct Sprite *sprite);
@@ -985,6 +978,28 @@ const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate =
.callback = AnimOrbitScatter,
};
+const struct SpriteTemplate gPowerGemOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POWER_GEM,
+ .paletteTag = ANIM_TAG_POWER_GEM,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gHiddenPowerOrbAffineAnimTable,
+ .callback = AnimOrbitFast,
+};
+
+const struct SpriteTemplate gPowerGemOrbScatterSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POWER_GEM,
+ .paletteTag = ANIM_TAG_POWER_GEM,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gHiddenPowerOrbAffineAnimTable,
+ .callback = AnimOrbitScatter,
+};
+
const union AffineAnimCmd gSpitUpOrbAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
@@ -1210,7 +1225,6 @@ const union AffineAnimCmd *const gPerishSongMusicNoteAffineAnimTable[] =
gPerishSongMusicNoteAffineAnimCmds3,
};
-extern const union AnimCmd *const gMusicNotesAnimTable[];
const struct SpriteTemplate gPerishSongMusicNoteSpriteTemplate =
{
.tileTag = ANIM_TAG_MUSIC_NOTES_2,
@@ -1262,6 +1276,28 @@ const struct SpriteTemplate gGuardRingSpriteTemplate =
.callback = AnimGuardRing,
};
+const struct SpriteTemplate gCrushGripExplosionTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_EXPLOSION,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gRoarOfTimeBombTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_WATER_GUN,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
#define sAmplitudeX data[1]
#define sCircleSpeed data[2]
#define sMoveSteps data[3]
@@ -1490,7 +1526,7 @@ static void AnimSwordsDanceBlade_Step(struct Sprite *sprite)
// arg 2: target x pixel offset
// arg 3: target y pixel offset
// arg 4: duration
-static void AnimSonicBoomProjectile(struct Sprite *sprite)
+void AnimSonicBoomProjectile(struct Sprite *sprite)
{
s16 targetXPos;
s16 targetYPos;
@@ -1534,7 +1570,7 @@ static void AnimAirWaveProjectile_Step2(struct Sprite *sprite)
static void AnimAirWaveProjectile_Step1(struct Sprite *sprite)
{
- struct Task* task = &gTasks[sprite->data[7]];
+ struct Task *task = &gTasks[sprite->data[7]];
if (sprite->data[0] > task->data[5])
{
sprite->data[5] += sprite->data[3];
@@ -1571,7 +1607,7 @@ static void AnimAirWaveProjectile(struct Sprite *sprite)
s16 b;
s16 c;
- struct Task* task = &gTasks[sprite->data[7]];
+ struct Task *task = &gTasks[sprite->data[7]];
sprite->data[1] += (-2 & task->data[7]);
sprite->data[2] += (-2 & task->data[8]);
if (1 & task->data[7])
@@ -1684,7 +1720,7 @@ void AnimTask_AirCutterProjectile(u8 taskId)
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
&& IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget)))
{
- SetAverageBattlerPositions(gBattleAnimTarget, 0, &targetX, &targetY);
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &targetX, &targetY);
}
else
{
@@ -1838,7 +1874,7 @@ static void AnimBulletSeed_Step1(struct Sprite *sprite)
{
int i;
u16 rand;
- s16* ptr;
+ s16 *ptr;
PlaySE12WithPanning(SE_M_HORN_ATTACK, BattleAnimAdjustPanning(63));
sprite->x += sprite->x2;
sprite->y += sprite->y2;
@@ -2035,7 +2071,7 @@ static void AnimTask_GrowAndGrayscale_Step(u8 taskId)
// No args.
void AnimTask_Minimize(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[0] = spriteId;
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
@@ -2051,7 +2087,7 @@ void AnimTask_Minimize(u8 taskId)
static void AnimTask_Minimize_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch (task->data[1])
{
case 0:
@@ -2115,7 +2151,7 @@ static void AnimTask_Minimize_Step(u8 taskId)
}
}
-static void CreateMinimizeSprite(struct Task* task, u8 taskId)
+static void CreateMinimizeSprite(struct Task *task, u8 taskId)
{
u16 matrixNum;
s16 spriteId = CloneBattlerSpriteWithBlend(ANIM_ATTACKER);
@@ -2160,7 +2196,7 @@ static void ClonedMinizeSprite_Step(struct Sprite *sprite)
// arg 1: num hops
void AnimTask_Splash(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
if (gBattleAnimArgs[1] == 0)
{
DestroyAnimVisualTask(taskId);
@@ -2180,7 +2216,7 @@ void AnimTask_Splash(u8 taskId)
static void AnimTask_Splash_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch (task->data[1])
{
case 0:
@@ -2234,7 +2270,7 @@ static void AnimTask_Splash_Step(u8 taskId)
// No args.
void AnimTask_GrowAndShrink(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
PrepareAffineAnimInTaskData(task, spriteId, gGrowAndShrinkAffineAnimCmds);
task->func = AnimTask_GrowAndShrink_Step;
@@ -2242,7 +2278,7 @@ void AnimTask_GrowAndShrink(u8 taskId)
static void AnimTask_GrowAndShrink_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
if (!RunAffineAnimFromTaskData(task))
DestroyAnimVisualTask(taskId);
}
@@ -2278,7 +2314,7 @@ static void AnimBreathPuff(struct Sprite *sprite)
// arg 0: target mon (0 = attacker, 1 = target)
// arg 1: x pixel offset
// arg 2: y pixel offset
-static void AnimAngerMark(struct Sprite *sprite)
+void AnimAngerMark(struct Sprite *sprite)
{
u8 battler;
if (!gBattleAnimArgs[0])
@@ -2301,7 +2337,7 @@ static void AnimAngerMark(struct Sprite *sprite)
// left/right movements
void AnimTask_ThrashMoveMonHorizontal(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[0] = spriteId;
task->data[1] = 0;
@@ -2311,7 +2347,7 @@ void AnimTask_ThrashMoveMonHorizontal(u8 taskId)
static void AnimTask_ThrashMoveMonHorizontal_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
if (!RunAffineAnimFromTaskData(task))
DestroyAnimVisualTask(taskId);
}
@@ -2319,7 +2355,7 @@ static void AnimTask_ThrashMoveMonHorizontal_Step(u8 taskId)
// up/down movements
void AnimTask_ThrashMoveMonVertical(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[1] = 0;
task->data[2] = 4;
@@ -2338,7 +2374,7 @@ void AnimTask_ThrashMoveMonVertical(u8 taskId)
static void AnimTask_ThrashMoveMonVertical_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
if (++task->data[7] > 2)
{
task->data[7] = 0;
@@ -2389,7 +2425,7 @@ static void AnimTask_ThrashMoveMonVertical_Step(u8 taskId)
void AnimTask_SketchDrawMon(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
struct ScanlineEffectParams params;
s16 i;
@@ -2430,7 +2466,7 @@ void AnimTask_SketchDrawMon(u8 taskId)
static void AnimTask_SketchDrawMon_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch (task->data[4])
{
@@ -2588,7 +2624,7 @@ static void AnimHyperVoiceRing_WaitEnd(struct Sprite *sprite)
}
}
-static void AnimHyperVoiceRing(struct Sprite *sprite)
+void AnimHyperVoiceRing(struct Sprite *sprite)
{
u16 startX = 0;
u16 startY = 0;
@@ -2673,7 +2709,7 @@ static void AnimHyperVoiceRing(struct Sprite *sprite)
sprite->callback(sprite);
}
-static void AnimUproarRing(struct Sprite *sprite)
+void AnimUproarRing(struct Sprite *sprite)
{
u8 index = IndexOfSpritePaletteTag(ANIM_TAG_THIN_RING);
if (index != 0xFF)
@@ -2791,7 +2827,7 @@ static void AnimSoftBoiledEgg_Step4_Callback(struct Sprite *sprite)
// Used by Extremespeed
void AnimTask_AttackerStretchAndDisappear(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[0] = spriteId;
PrepareAffineAnimInTaskData(task, spriteId, gStretchAttackerAffineAnimCmds);
@@ -2800,7 +2836,7 @@ void AnimTask_AttackerStretchAndDisappear(u8 taskId)
static void AnimTask_AttackerStretchAndDisappear_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
if (!RunAffineAnimFromTaskData(task))
{
gSprites[task->data[0]].y2 = 0;
@@ -2811,7 +2847,7 @@ static void AnimTask_AttackerStretchAndDisappear_Step(u8 taskId)
void AnimTask_ExtremeSpeedImpact(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
task->data[0] = 0;
task->data[1] = 0;
task->data[2] = 0;
@@ -2834,7 +2870,7 @@ void AnimTask_ExtremeSpeedImpact(u8 taskId)
static void AnimTask_ExtremeSpeedImpact_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
@@ -2880,7 +2916,7 @@ static void AnimTask_ExtremeSpeedImpact_Step(u8 taskId)
void AnimTask_ExtremeSpeedMonReappear(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
task->data[0] = 0;
task->data[1] = 0;
task->data[2] = 0;
@@ -2894,7 +2930,7 @@ void AnimTask_ExtremeSpeedMonReappear(u8 taskId)
static void AnimTask_ExtremeSpeedMonReappear_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
if (task->data[0] == 0 && ++task->data[1] > task->data[4])
{
task->data[1] = 0;
@@ -2922,7 +2958,7 @@ static void AnimTask_ExtremeSpeedMonReappear_Step(u8 taskId)
void AnimTask_SpeedDust(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
task->data[0] = 0;
task->data[1] = 4;
task->data[2] = 0;
@@ -2940,7 +2976,7 @@ void AnimTask_SpeedDust(u8 taskId)
static void AnimTask_SpeedDust_Step(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch (task->data[8])
{
case 0:
@@ -3064,7 +3100,7 @@ static void AnimHealBellMusicNote(struct Sprite *sprite)
SetMusicNotePalette(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
}
-static void AnimMagentaHeart(struct Sprite *sprite)
+void AnimMagentaHeart(struct Sprite *sprite)
{
if (++sprite->data[0] == 1)
InitSpritePosToAnimAttacker(sprite, FALSE);
@@ -3410,7 +3446,7 @@ static void AnimTask_ScaryFace_Step(u8 taskId)
// Used by MOVE_HIDDEN_POWER
// arg 0: duration
// arg 1: initial wave offset
-static void AnimOrbitFast(struct Sprite *sprite)
+void AnimOrbitFast(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -3461,7 +3497,7 @@ static void AnimOrbitFast_Step(struct Sprite *sprite)
// Moves orbs away from the mon, based on where they are in their orbit.
// Used in MOVE_HIDDEN_POWER.
// arg 0: initial wave offset
-static void AnimOrbitScatter(struct Sprite *sprite)
+void AnimOrbitScatter(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -3720,7 +3756,7 @@ static void AnimPerishSongMusicNote2(struct Sprite *sprite)
}
if (++sprite->data[0] == sprite->data[1])
- SetGrayscaleOrOriginalPalette(sprite->oam.paletteNum + 16, 0);
+ SetGrayscaleOrOriginalPalette(sprite->oam.paletteNum + 16, FALSE);
if (sprite->data[0] == sprite->data[1] + 80)
DestroyAnimSprite(sprite);
@@ -3807,7 +3843,7 @@ static void AnimGuardRing(struct Sprite *sprite)
{
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
{
- SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->x, &sprite->y);
+ SetAverageBattlerPositions(gBattleAnimAttacker, FALSE, &sprite->x, &sprite->y);
sprite->y += 40;
StartSpriteAffineAnim(sprite, 1);
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index 37a970018e..0274c588ee 100755
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -22,15 +22,14 @@
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/weather.h"
+#include "constants/hold_effects.h"
extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate;
-static void AnimBlackSmoke(struct Sprite *);
static void AnimBlackSmoke_Step(struct Sprite *);
static void AnimWhiteHalo(struct Sprite *);
static void AnimWhiteHalo_Step1(struct Sprite *);
static void AnimWhiteHalo_Step2(struct Sprite *);
-static void AnimTealAlert(struct Sprite *);
static void AnimMeanLookEye(struct Sprite *);
static void AnimMeanLookEye_Step1(struct Sprite *);
static void AnimMeanLookEye_Step2(struct Sprite *);
@@ -62,14 +61,11 @@ static void AnimGreenStar_Step1(struct Sprite *);
static void AnimGreenStar_Step2(struct Sprite *);
static void AnimGreenStar_Callback(struct Sprite *);
static void AnimWeakFrustrationAngerMark(struct Sprite *);
-static void AnimSweetScentPetal(struct Sprite *);
static void AnimSweetScentPetal_Step(struct Sprite *);
static void AnimPainSplitProjectile(struct Sprite *);
static void AnimFlatterConfetti(struct Sprite *);
static void AnimFlatterConfetti_Step(struct Sprite *);
static void AnimFlatterSpotlight(struct Sprite *);
-static void AnimFlatterSpotlight_Step(struct Sprite *);
-static void AnimReversalOrb(struct Sprite *);
static void AnimReversalOrb_Step(struct Sprite *);
static void AnimYawnCloud(struct Sprite *);
static void AnimYawnCloud_Step(struct Sprite *);
@@ -78,7 +74,6 @@ static void AnimFacadeSweatDrop(struct Sprite *);
static void AnimRoarNoiseLine(struct Sprite *);
static void AnimRoarNoiseLine_Step(struct Sprite *);
static void AnimGlareEyeDot(struct Sprite *);
-static void AnimAssistPawprint(struct Sprite *);
static void AnimSmellingSaltsHand(struct Sprite *);
static void AnimSmellingSaltsHand_Step(struct Sprite *);
static void AnimSmellingSaltExclamation(struct Sprite *);
@@ -89,7 +84,6 @@ static void AnimForesightMagnifyingGlass(struct Sprite *);
static void AnimForesightMagnifyingGlass_Step(struct Sprite *);
static void AnimMeteorMashStar(struct Sprite *);
static void AnimMeteorMashStar_Step(struct Sprite *sprite);
-static void AnimBlockX(struct Sprite *);
static void AnimBlockX_Step(struct Sprite *);
static void AnimUnusedItemBagSteal(struct Sprite *);
static void AnimKnockOffStrike(struct Sprite *);
@@ -258,6 +252,17 @@ const struct SpriteTemplate gSpikesSpriteTemplate =
.callback = AnimSpikes,
};
+const struct SpriteTemplate gToxicSpikesSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_TOXIC_SPIKES,
+ .paletteTag = ANIM_TAG_TOXIC_SPIKES,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpikes,
+};
+
const union AnimCmd gLeerAnimCmds[] =
{
ANIMCMD_FRAME(0, 3),
@@ -1179,7 +1184,95 @@ const union AffineAnimCmd gSlackOffSquishAffineAnimCmds[] =
AFFINEANIMCMD_END,
};
-static void AnimBlackSmoke(struct Sprite *sprite)
+const struct SpriteTemplate gMegaStoneSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_MEGA_STONE,
+ .paletteTag = ANIM_TAG_MEGA_STONE,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_LusterPurgeCircle,
+ .callback = AnimSpriteOnMonPos,
+};
+
+const struct SpriteTemplate gMegaParticlesSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_MEGA_PARTICLES,
+ .paletteTag = ANIM_TAG_MEGA_PARTICLES,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb,
+};
+
+const struct SpriteTemplate gMegaSymbolSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_MEGA_SYMBOL,
+ .paletteTag = ANIM_TAG_MEGA_SYMBOL,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGhostStatusSprite,
+};
+
+const struct SpriteTemplate gAlphaStoneSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ALPHA_STONE,
+ .paletteTag = ANIM_TAG_ALPHA_STONE,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_LusterPurgeCircle,
+ .callback = AnimSpriteOnMonPos,
+};
+
+const struct SpriteTemplate gOmegaStoneSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_OMEGA_STONE,
+ .paletteTag = ANIM_TAG_OMEGA_STONE,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_LusterPurgeCircle,
+ .callback = AnimSpriteOnMonPos,
+};
+
+const struct SpriteTemplate gPrimalParticlesSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PRIMAL_PARTICLES,
+ .paletteTag = ANIM_TAG_PRIMAL_PARTICLES,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb,
+};
+
+const struct SpriteTemplate gAlphaSymbolSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ALPHA_SYMBOL,
+ .paletteTag = ANIM_TAG_ALPHA_SYMBOL,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGhostStatusSprite,
+};
+
+const struct SpriteTemplate gOmegaSymbolSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_OMEGA_SYMBOL,
+ .paletteTag = ANIM_TAG_OMEGA_SYMBOL,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGhostStatusSprite,
+};
+
+void AnimBlackSmoke(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
@@ -1244,7 +1337,7 @@ static void AnimWhiteHalo_Step2(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-static void AnimTealAlert(struct Sprite *sprite)
+void AnimTealAlert(struct Sprite *sprite)
{
u16 rotation;
u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
@@ -2282,7 +2375,7 @@ void AnimTask_TransformMon(u8 taskId)
}
break;
case 2:
- HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]);
+ HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1]);
GetBgDataForTransform(&animBg, gBattleAnimAttacker);
if (IsContest())
@@ -2369,7 +2462,7 @@ void AnimTask_IsMonInvisible(u8 taskId)
void AnimTask_CastformGfxDataChange(u8 taskId)
{
- HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE);
+ HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE, FALSE);
DestroyAnimVisualTask(taskId);
}
@@ -2677,7 +2770,7 @@ static void AnimWeakFrustrationAngerMark(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
- InitSpritePosToAnimAttacker(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->data[0]++;
}
else if (sprite->data[0]++ > 20)
@@ -2798,7 +2891,7 @@ static void AnimTask_RockMonBackAndForth_Step(u8 taskId)
// arg 0: initial y pixel offset
// arg 1: sprite anim num
// arg 2: unused
-static void AnimSweetScentPetal(struct Sprite *sprite)
+void AnimSweetScentPetal(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
{
@@ -3104,7 +3197,7 @@ static void AnimFlatterSpotlight(struct Sprite *sprite)
sprite->callback = AnimFlatterSpotlight_Step;
}
-static void AnimFlatterSpotlight_Step(struct Sprite *sprite)
+void AnimFlatterSpotlight_Step(struct Sprite *sprite)
{
switch (sprite->data[1])
{
@@ -3138,7 +3231,7 @@ static void AnimFlatterSpotlight_Step(struct Sprite *sprite)
// Spins an orb around the attacking mon, while its path radius grows and shrinks.
// arg 0: duration
// arg 1: initial wave offset
-static void AnimReversalOrb(struct Sprite *sprite)
+void AnimReversalOrb(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -4143,7 +4236,7 @@ static void AnimGlareEyeDot(struct Sprite *sprite)
// arg 2: destination x position
// arg 3: destination y position
// arg 4: duration
-static void AnimAssistPawprint(struct Sprite *sprite)
+void AnimAssistPawprint(struct Sprite *sprite)
{
sprite->x = gBattleAnimArgs[0];
sprite->y = gBattleAnimArgs[1];
@@ -4732,6 +4825,17 @@ static void AnimForesightMagnifyingGlass_Step(struct Sprite *sprite)
}
}
+const struct SpriteTemplate gDracoMeteorSmashSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WARM_ROCK,
+ .paletteTag = ANIM_TAG_WARM_ROCK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMeteorMashStar,
+};
+
static void AnimMeteorMashStar_Step(struct Sprite *sprite)
{
sprite->x2 = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4];
@@ -4807,7 +4911,7 @@ void AnimTask_MonToSubstitute(u8 taskId)
}
else
{
- LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, 0, spriteId);
+ LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, FALSE, spriteId);
if (IsContest())
{
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteContest;
@@ -4876,7 +4980,7 @@ static void AnimTask_MonToSubstituteDoll(u8 taskId)
// Moves down an X that flickers and disappears.
// No args.
-static void AnimBlockX(struct Sprite *sprite)
+void AnimBlockX(struct Sprite *sprite)
{
s16 y;
@@ -5497,10 +5601,12 @@ static void AnimRecycle_Step(struct Sprite *sprite)
void AnimTask_GetWeather(u8 taskId)
{
+ bool32 utilityUmbrellaAffected = GetBattlerHoldEffect(gBattleAnimAttacker, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA;
+
gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_NONE;
- if (gWeatherMoveAnim & B_WEATHER_SUN)
+ if (gWeatherMoveAnim & B_WEATHER_SUN && !utilityUmbrellaAffected)
gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SUN;
- else if (gWeatherMoveAnim & B_WEATHER_RAIN)
+ else if (gWeatherMoveAnim & B_WEATHER_RAIN && !utilityUmbrellaAffected)
gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_RAIN;
else if (gWeatherMoveAnim & B_WEATHER_SANDSTORM)
gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SANDSTORM;
diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c
index 635aa550e7..b4a950310f 100644
--- a/src/battle_anim_electric.c
+++ b/src/battle_anim_electric.c
@@ -4,34 +4,27 @@
#include "trig.h"
#include "constants/songs.h"
#include "sound.h"
+#include "constants/moves.h"
static void AnimLightning(struct Sprite *);
static void AnimLightning_Step(struct Sprite *);
static void AnimUnusedSpinningFist(struct Sprite *);
static void AnimUnusedSpinningFist_Step(struct Sprite *);
static void AnimUnusedCirclingShock(struct Sprite *);
-static void AnimSparkElectricity(struct Sprite *);
-static void AnimZapCannonSpark(struct Sprite *);
static void AnimZapCannonSpark_Step(struct Sprite *);
static void AnimThunderboltOrb(struct Sprite *);
static void AnimThunderboltOrb_Step(struct Sprite *);
-static void AnimSparkElectricityFlashing(struct Sprite *);
static void AnimSparkElectricityFlashing_Step(struct Sprite *);
-static void AnimElectricity(struct Sprite *);
static void AnimTask_ElectricBolt_Step(u8 taskId);
static void AnimElectricBoltSegment(struct Sprite *);
-static void AnimThunderWave(struct Sprite *);
static void AnimThunderWave_Step(struct Sprite *);
static void AnimTask_ElectricChargingParticles_Step(u8 taskId);
static void AnimElectricChargingParticles(struct Sprite *);
static void AnimElectricChargingParticles_Step(struct Sprite *);
-static void AnimGrowingChargeOrb(struct Sprite *);
-static void AnimElectricPuff(struct Sprite *);
static void AnimVoltTackleOrbSlide(struct Sprite *);
static void AnimVoltTackleOrbSlide_Step(struct Sprite *);
static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId);
static void AnimVoltTackleBolt(struct Sprite *);
-static void AnimGrowingShockWaveOrb(struct Sprite *);
static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId);
static void AnimShockWaveProgressingBolt(struct Sprite *);
static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId);
@@ -144,7 +137,7 @@ static const union AffineAnimCmd sAffineAnim_FlashingSpark[] =
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd *const sAffineAnims_FlashingSpark[] =
+const union AffineAnimCmd *const gAffineAnims_FlashingSpark[] =
{
sAffineAnim_FlashingSpark,
};
@@ -156,7 +149,7 @@ const struct SpriteTemplate gZapCannonSparkSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_FlashingSpark,
+ .affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimZapCannonSpark,
};
@@ -168,7 +161,7 @@ static const union AnimCmd sAnim_ThunderboltOrb[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sAnims_ThunderboltOrb[] =
+const union AnimCmd *const gAnims_ThunderboltOrb[] =
{
sAnim_ThunderboltOrb,
};
@@ -191,7 +184,7 @@ const struct SpriteTemplate gThunderboltOrbSpriteTemplate =
.tileTag = ANIM_TAG_SHOCK_3,
.paletteTag = ANIM_TAG_SHOCK_3,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
- .anims = sAnims_ThunderboltOrb,
+ .anims = gAnims_ThunderboltOrb,
.images = NULL,
.affineAnims = sAffineAnims_ThunderboltOrb,
.callback = AnimThunderboltOrb,
@@ -204,7 +197,7 @@ const struct SpriteTemplate gSparkElectricityFlashingSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_FlashingSpark,
+ .affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimSparkElectricityFlashing,
};
@@ -241,6 +234,17 @@ const struct SpriteTemplate gThunderWaveSpriteTemplate =
.callback = AnimThunderWave,
};
+const struct SpriteTemplate gAnchorShotChainTemplate =
+{
+ .tileTag = ANIM_TAG_CHAIN_LINK,
+ .paletteTag = ANIM_TAG_CHAIN_LINK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThunderWave
+};
+
static const s8 sElectricChargingParticleCoordOffsets[][2] =
{
{ 58, -60},
@@ -279,7 +283,7 @@ static const union AnimCmd sAnim_ElectricChargingParticles_1[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_ElectricChargingParticles[] =
+const union AnimCmd *const gAnims_ElectricChargingParticles[] =
{
sAnim_ElectricChargingParticles_0,
sAnim_ElectricChargingParticles_1,
@@ -290,12 +294,23 @@ const struct SpriteTemplate gElectricChargingParticlesSpriteTemplate =
.tileTag = ANIM_TAG_ELECTRIC_ORBS,
.paletteTag = ANIM_TAG_ELECTRIC_ORBS,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = sAnims_ElectricChargingParticles,
+ .anims = gAnims_ElectricChargingParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
+const struct SpriteTemplate gLightOfRuinGrayChargeTemplate =
+{
+ .tileTag = ANIM_TAG_ELECTRIC_ORBS,
+ .paletteTag = ANIM_TAG_GUST,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_ElectricChargingParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_0[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
@@ -326,13 +341,31 @@ static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_2[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_GrowingElectricOrb[] =
+static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_4[] =
+{
+ AFFINEANIMCMD_FRAME(5, 5, 0, 0),
+ AFFINEANIMCMD_FRAME(0x2, 0x2, 0, 20),
+ AFFINEANIMCMD_FRAME(0x3, 0x3, 0, 15),
+ AFFINEANIMCMD_FRAME(0x1, 0x1, 0, 25),
+ AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5),
+ AFFINEANIMCMD_FRAME(0x3, 0x3, 0, 5),
+ AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 5),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb[] =
{
sAffineAnim_GrowingElectricOrb_0,
sAffineAnim_GrowingElectricOrb_1,
sAffineAnim_GrowingElectricOrb_2,
};
+const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb2[] =
+{
+ sAffineAnim_GrowingElectricOrb_4,
+};
+
const struct SpriteTemplate gGrowingChargeOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
@@ -340,7 +373,19 @@ const struct SpriteTemplate gGrowingChargeOrbSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_GrowingElectricOrb,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb,
+};
+
+// For Electro Ball - smaller orb.
+const struct SpriteTemplate gGrowingChargeOrb2SpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb2,
.callback = AnimGrowingChargeOrb,
};
@@ -353,7 +398,7 @@ static const union AnimCmd sAnim_ElectricPuff[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_ElectricPuff[] =
+const union AnimCmd *const gAnims_ElectricPuff[] =
{
sAnim_ElectricPuff,
};
@@ -363,7 +408,7 @@ const struct SpriteTemplate gElectricPuffSpriteTemplate =
.tileTag = ANIM_TAG_ELECTRICITY,
.paletteTag = ANIM_TAG_ELECTRICITY,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_ElectricPuff,
+ .anims = gAnims_ElectricPuff,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimElectricPuff,
@@ -376,7 +421,7 @@ const struct SpriteTemplate gVoltTackleOrbSlideSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_GrowingElectricOrb,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimVoltTackleOrbSlide,
};
@@ -441,7 +486,7 @@ const struct SpriteTemplate gGrowingShockWaveOrbSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_GrowingElectricOrb,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingShockWaveOrb,
};
@@ -456,6 +501,54 @@ const struct SpriteTemplate gShockWaveProgressingBoltSpriteTemplate =
.callback = AnimShockWaveProgressingBolt,
};
+const struct SpriteTemplate gFlashCannonGrayChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_JudgmentBall[] =
+{
+ AFFINEANIMCMD_FRAME(16, 16, 0, 0),
+ AFFINEANIMCMD_FRAME(8, 8, 0, 15), //Half size
+ AFFINEANIMCMD_FRAME(0, 0, 0, 120), //Delay
+ AFFINEANIMCMD_FRAME(24, 24, 0, 5), //Normal size
+ AFFINEANIMCMD_FRAME(0, 0, 0, 10), //Delay
+ AFFINEANIMCMD_FRAME(-16, -16, 0, 15), //Revert to 1 px
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_JudgmentBall[] =
+{
+ sSpriteAffineAnim_JudgmentBall,
+};
+const struct SpriteTemplate gJudgmentBlackChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_JudgmentBall,
+ .callback = AnimGrowingChargeOrb
+};
+
+const struct SpriteTemplate gSeedFlareGreenChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+
+// functions
static void AnimLightning(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -512,7 +605,7 @@ static void AnimUnusedCirclingShock(struct Sprite *sprite)
sprite->callback = TranslateSpriteInCircle;
}
-static void AnimSparkElectricity(struct Sprite *sprite)
+void AnimSparkElectricity(struct Sprite *sprite)
{
u8 battler;
u32 matrixNum;
@@ -569,9 +662,9 @@ static void AnimSparkElectricity(struct Sprite *sprite)
sprite->callback = DestroyAnimSpriteAfterTimer;
}
-static void AnimZapCannonSpark(struct Sprite *sprite)
+void AnimZapCannonSpark(struct Sprite *sprite)
{
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
@@ -624,7 +717,7 @@ static void AnimThunderboltOrb(struct Sprite *sprite)
sprite->callback = AnimThunderboltOrb_Step;
}
-static void AnimSparkElectricityFlashing(struct Sprite *sprite)
+void AnimSparkElectricityFlashing(struct Sprite *sprite)
{
u8 battler;
@@ -664,9 +757,10 @@ static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite)
}
// Electricity arcs around the target. Used for Paralysis and various electric move hits
-static void AnimElectricity(struct Sprite *sprite)
+void AnimElectricity(struct Sprite *sprite)
{
- InitSpritePosToAnimTarget(sprite, FALSE);
+ if (!InitSpritePosToAnimBattler(gBattleAnimArgs[4], sprite, FALSE))
+ return;
sprite->oam.tileNum += gBattleAnimArgs[3] * 4;
if (gBattleAnimArgs[3] == 1)
@@ -774,13 +868,17 @@ static void AnimElectricBoltSegment(struct Sprite *sprite)
}
// The horizontal bands of electricity used in Thunder Wave
-static void AnimThunderWave(struct Sprite *sprite)
+void AnimThunderWave(struct Sprite *sprite)
{
u8 spriteId;
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
- spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority);
+ if (gAnimMoveIndex == MOVE_THUNDER_WAVE)
+ spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority);
+ else
+ spriteId = CreateSprite(&gAnchorShotChainTemplate, sprite->x + 32, sprite->y, sprite->subpriority);
+
gSprites[spriteId].oam.tileNum += 8;
gAnimVisualTaskCount++;
gSprites[spriteId].callback = AnimThunderWave_Step;
@@ -836,7 +934,11 @@ static void AnimTask_ElectricChargingParticles_Step(u8 taskId)
{
u8 spriteId;
task->data[12] = 0;
- spriteId = CreateSprite(&gElectricChargingParticlesSpriteTemplate, task->data[14], task->data[15], 2);
+ if (gAnimMoveIndex == MOVE_FLASH_CANNON || gAnimMoveIndex == MOVE_STEEL_BEAM)
+ spriteId = CreateSprite(&gLightOfRuinGrayChargeTemplate, task->data[14], task->data[15], 2);
+ else
+ spriteId = CreateSprite(&gElectricChargingParticlesSpriteTemplate, task->data[14], task->data[15], 2);
+
if (spriteId != MAX_SPRITES)
{
struct Sprite *sprite = &gSprites[spriteId];
@@ -888,7 +990,7 @@ static void AnimElectricChargingParticles(struct Sprite *sprite)
sprite->callback = AnimElectricChargingParticles_Step;
}
-static void AnimGrowingChargeOrb(struct Sprite *sprite)
+void AnimGrowingChargeOrb(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
@@ -906,7 +1008,7 @@ static void AnimGrowingChargeOrb(struct Sprite *sprite)
}
// The quick electric burst at the end of Charge / during the Volt Tackle hit
-static void AnimElectricPuff(struct Sprite *sprite)
+void AnimElectricPuff(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
{
@@ -1126,7 +1228,7 @@ static void AnimVoltTackleBolt(struct Sprite *sprite)
}
}
-static void AnimGrowingShockWaveOrb(struct Sprite *sprite)
+void AnimGrowingShockWaveOrb(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -1147,6 +1249,7 @@ static void AnimGrowingShockWaveOrb(struct Sprite *sprite)
void AnimTask_ShockWaveProgressingBolt(u8 taskId)
{
struct Task *task = &gTasks[taskId];
+ u8 target = GetAnimBattlerId(gBattleAnimArgs[0]);
switch (task->data[0])
{
@@ -1154,7 +1257,7 @@ void AnimTask_ShockWaveProgressingBolt(u8 taskId)
task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
task->data[8] = 4;
- task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[10] = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2);
task->data[9] = (task->data[10] - task->data[6]) / 5;
task->data[4] = 7;
task->data[5] = -1;
@@ -1272,19 +1375,20 @@ static void AnimShockWaveProgressingBolt(struct Sprite *sprite)
void AnimTask_ShockWaveLightning(u8 taskId)
{
struct Task *task = &gTasks[taskId];
+ u8 target = GetAnimBattlerId(gBattleAnimArgs[0]);
switch (task->data[0])
{
case 0:
- task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32;
+ task->data[15] = GetBattlerSpriteCoord(target, BATTLER_COORD_Y) + 32;
task->data[14] = task->data[15];
while (task->data[14] > 16)
{
task->data[14] -= 32;
}
- task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
- task->data[12] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
+ task->data[13] = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2);
+ task->data[12] = GetBattlerSpriteSubpriority(target) - 2;
task->data[0]++;
break;
case 1:
diff --git a/src/battle_anim_fight.c b/src/battle_anim_fight.c
index ca4668e023..ca1a04402c 100644
--- a/src/battle_anim_fight.c
+++ b/src/battle_anim_fight.c
@@ -8,21 +8,15 @@
static void AnimUnusedHumanoidFoot(struct Sprite *);
static void AnimSlideHandOrFootToTarget(struct Sprite *);
-static void AnimJumpKick(struct Sprite *);
-static void AnimBasicFistOrFoot(struct Sprite *);
static void AnimFistOrFootRandomPos(struct Sprite *);
static void AnimFistOrFootRandomPos_Step(struct Sprite *);
static void AnimCrossChopHand(struct Sprite *);
static void AnimCrossChopHand_Step(struct Sprite *);
static void AnimSlidingKick(struct Sprite *);
static void AnimSlidingKick_Step(struct Sprite *);
-static void AnimSpinningKickOrPunch(struct Sprite *);
-static void AnimStompFoot(struct Sprite *);
static void AnimStompFoot_Step(struct Sprite *);
static void AnimStompFoot_End(struct Sprite *);
-static void AnimDizzyPunchDuck(struct Sprite *);
static void AnimBrickBreakWall(struct Sprite *);
-static void AnimBrickBreakWall_Step(struct Sprite *);
static void AnimBrickBreakWallShard(struct Sprite *);
static void AnimBrickBreakWallShard_Step(struct Sprite *);
static void AnimSuperpowerOrb(struct Sprite *);
@@ -30,12 +24,10 @@ static void AnimSuperpowerOrb_Step(struct Sprite *);
static void AnimSuperpowerRock(struct Sprite *);
static void AnimSuperpowerRock_Step1(struct Sprite *);
static void AnimSuperpowerRock_Step2(struct Sprite *);
-static void AnimSuperpowerFireball(struct Sprite *);
static void AnimArmThrustHit(struct Sprite *);
static void AnimArmThrustHit_Step(struct Sprite *sprite);
-static void AnimRevengeScratch(struct Sprite *);
static void AnimFocusPunchFist(struct Sprite *);
-static void AnimSpinningKickOrPunchFinish(struct Sprite *);
+static void AnimForcePalm(struct Sprite *sprite);
extern struct SpriteTemplate gBasicHitSplatSpriteTemplate;
@@ -81,7 +73,7 @@ static const union AnimCmd sAnim_HandRight[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_HandsAndFeet[] =
+const union AnimCmd *const gAnims_HandsAndFeet[] =
{
sAnim_Fist,
sAnim_FootWide,
@@ -95,7 +87,7 @@ const struct SpriteTemplate gKarateChopSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_HandsAndFeet,
+ .anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSlideHandOrFootToTarget,
@@ -106,7 +98,7 @@ const struct SpriteTemplate gJumpKickSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_HandsAndFeet,
+ .anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimJumpKick,
@@ -117,7 +109,7 @@ const struct SpriteTemplate gFistFootSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_HandsAndFeet,
+ .anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBasicFistOrFoot,
@@ -128,7 +120,7 @@ const struct SpriteTemplate gFistFootRandomPosSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_HandsAndFeet,
+ .anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFistOrFootRandomPos,
@@ -139,7 +131,7 @@ const struct SpriteTemplate gCrossChopHandSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = &sAnims_HandsAndFeet[3],
+ .anims = &gAnims_HandsAndFeet[3],
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCrossChopHand,
@@ -150,7 +142,7 @@ const struct SpriteTemplate gSlidingKickSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = &sAnims_HandsAndFeet[1],
+ .anims = &gAnims_HandsAndFeet[1],
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSlidingKick,
@@ -163,7 +155,7 @@ static const union AffineAnimCmd sAffineAnim_SpinningHandOrFoot[] =
AFFINEANIMCMD_JUMP(1),
};
-static const union AffineAnimCmd *const sAffineAnims_SpinningHandOrFoot[] =
+const union AffineAnimCmd *const gAffineAnims_SpinningHandOrFoot[] =
{
sAffineAnim_SpinningHandOrFoot,
};
@@ -174,9 +166,9 @@ const struct SpriteTemplate gSpinningHandOrFootSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
- .anims = sAnims_HandsAndFeet,
+ .anims = gAnims_HandsAndFeet,
.images = NULL,
- .affineAnims = sAffineAnims_SpinningHandOrFoot,
+ .affineAnims = gAffineAnims_SpinningHandOrFoot,
.callback = AnimSpinningKickOrPunch,
};
@@ -187,7 +179,7 @@ static const union AffineAnimCmd sAffineAnim_MegaPunchKick[] =
AFFINEANIMCMD_JUMP(1),
};
-static const union AffineAnimCmd *const sAffineAnims_MegaPunchKick[] =
+const union AffineAnimCmd *const gAffineAnims_MegaPunchKick[] =
{
sAffineAnim_MegaPunchKick,
};
@@ -197,9 +189,9 @@ const struct SpriteTemplate gMegaPunchKickSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
- .anims = sAnims_HandsAndFeet,
+ .anims = gAnims_HandsAndFeet,
.images = NULL,
- .affineAnims = sAffineAnims_MegaPunchKick,
+ .affineAnims = gAffineAnims_MegaPunchKick,
.callback = AnimSpinningKickOrPunch,
};
@@ -208,7 +200,7 @@ const struct SpriteTemplate gStompFootSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = &sAnims_HandsAndFeet[1],
+ .anims = &gAnims_HandsAndFeet[1],
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimStompFoot,
@@ -299,7 +291,7 @@ const struct SpriteTemplate gArmThrustHandSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_HandsAndFeet,
+ .anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimArmThrustHit,
@@ -368,7 +360,7 @@ static const union AnimCmd sAnim_RevengeBigScratch_2[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_RevengeBigScratch[] =
+const union AnimCmd *const gAnims_RevengeBigScratch[] =
{
sAnim_RevengeBigScratch_0,
sAnim_RevengeBigScratch_1,
@@ -380,7 +372,7 @@ const struct SpriteTemplate gRevengeBigScratchSpriteTemplate =
.tileTag = ANIM_TAG_PURPLE_SWIPE,
.paletteTag = ANIM_TAG_PURPLE_SWIPE,
.oam = &gOamData_AffineOff_ObjNormal_64x64,
- .anims = sAnims_RevengeBigScratch,
+ .anims = gAnims_RevengeBigScratch,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimRevengeScratch,
@@ -403,12 +395,92 @@ const struct SpriteTemplate gFocusPunchFistSpriteTemplate =
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
- .anims = sAnims_HandsAndFeet,
+ .anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = sAffineAnims_FocusPunchFist,
.callback = AnimFocusPunchFist,
};
+const struct SpriteTemplate gPalmSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
+ .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBasicFistOrFoot,
+};
+
+const struct SpriteTemplate gAuraSphereBlast =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineOff_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSuperpowerFireball,
+};
+
+const union AffineAnimCmd gForcePalmAffineAnimCmd_1[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gForcePalmAffineAnimCmd_2[] =
+{
+ AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gForcePalmAffineAnimCmd_3[] =
+{
+ AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gForcePalmAffineAnimCmd_4[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gForcePalmAffineAnims[] =
+{
+ gForcePalmAffineAnimCmd_1,
+ gForcePalmAffineAnimCmd_2,
+ gForcePalmAffineAnimCmd_3,
+ gForcePalmAffineAnimCmd_4,
+};
+
+const struct SpriteTemplate gForcePalmSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_SHADOW_BALL,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gForcePalmAffineAnims,
+ .callback = AnimForcePalm,
+};
+
+static void AnimForcePalm(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
+ if (gBattleAnimArgs[2] == 0)
+ InitSpritePosToAnimAttacker(sprite, 1);
+ else
+ InitSpritePosToAnimTarget(sprite, TRUE);
+
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
static void AnimUnusedHumanoidFoot(struct Sprite *sprite)
{
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
@@ -431,7 +503,7 @@ static void AnimSlideHandOrFootToTarget(struct Sprite *sprite)
AnimTravelDiagonally(sprite);
}
-static void AnimJumpKick(struct Sprite *sprite)
+void AnimJumpKick(struct Sprite *sprite)
{
if (IsContest())
{
@@ -449,12 +521,12 @@ static void AnimJumpKick(struct Sprite *sprite)
// arg 2: duration
// arg 3: ? (todo: related to initial pixel offsets)
// arg 4: anim num
-static void AnimBasicFistOrFoot(struct Sprite *sprite)
+void AnimBasicFistOrFoot(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
if (gBattleAnimArgs[3] == 0)
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
@@ -609,7 +681,7 @@ static void AnimSlidingKick_Step(struct Sprite *sprite)
// arg 1: initial y pixel offset
// arg 2: anim num
// arg 3: spin duration
-static void AnimSpinningKickOrPunch(struct Sprite *sprite)
+void AnimSpinningKickOrPunch(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, TRUE);
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
@@ -619,7 +691,7 @@ static void AnimSpinningKickOrPunch(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, AnimSpinningKickOrPunchFinish);
}
-static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite)
+void AnimSpinningKickOrPunchFinish(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, 0);
sprite->affineAnimPaused = 1;
@@ -633,7 +705,7 @@ static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite)
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: initial wait duration
-static void AnimStompFoot(struct Sprite *sprite)
+void AnimStompFoot(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
@@ -662,7 +734,7 @@ static void AnimStompFoot_End(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-static void AnimDizzyPunchDuck(struct Sprite *sprite)
+void AnimDizzyPunchDuck(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -710,7 +782,7 @@ static void AnimBrickBreakWall(struct Sprite *sprite)
sprite->callback = AnimBrickBreakWall_Step;
}
-static void AnimBrickBreakWall_Step(struct Sprite *sprite)
+void AnimBrickBreakWall_Step(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -893,7 +965,7 @@ static void AnimSuperpowerRock_Step2(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-static void AnimSuperpowerFireball(struct Sprite *sprite)
+void AnimSuperpowerFireball(struct Sprite *sprite)
{
u8 battler;
@@ -961,10 +1033,10 @@ static void AnimArmThrustHit(struct Sprite *sprite)
sprite->callback = AnimArmThrustHit_Step;
}
-static void AnimRevengeScratch(struct Sprite *sprite)
+void AnimRevengeScratch(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
- InitSpritePosToAnimAttacker(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, FALSE);
else
InitSpritePosToAnimTarget(sprite, FALSE);
diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c
index b523a3771b..bfbc0a697b 100644
--- a/src/battle_anim_fire.c
+++ b/src/battle_anim_fire.c
@@ -8,8 +8,6 @@
#include "trig.h"
static void AnimFireSpiralInward(struct Sprite *);
-static void AnimFireSpread(struct Sprite *);
-static void AnimFirePlume(struct Sprite *);
static void AnimLargeFlame(struct Sprite *);
static void AnimLargeFlame_Step(struct Sprite *);
static void AnimUnusedSmallEmber(struct Sprite *);
@@ -22,8 +20,6 @@ static void AnimFireRing_Step1(struct Sprite *);
static void AnimFireRing_Step2(struct Sprite *);
static void AnimFireRing_Step3(struct Sprite *);
static void UpdateFireRingCircleOffset(struct Sprite *);
-static void AnimFireCross(struct Sprite *);
-static void AnimFireSpiralOutward(struct Sprite *);
static void AnimFireSpiralOutward_Step1(struct Sprite *);
static void AnimFireSpiralOutward_Step2(struct Sprite *);
static void AnimTask_EruptionLaunchRocks_Step(u8);
@@ -32,12 +28,12 @@ static void AnimEruptionLaunchRock(struct Sprite *);
static u16 GetEruptionLaunchRockInitialYPos(u8);
static void InitEruptionLaunchRockCoordData(struct Sprite *, s16, s16);
static void UpdateEruptionLaunchRockPos(struct Sprite *);
-static void AnimEruptionFallingRock(struct Sprite *);
static void AnimEruptionFallingRock_Step(struct Sprite *);
-static void AnimWillOWispOrb(struct Sprite *);
static void AnimWillOWispOrb_Step(struct Sprite *);
static void AnimWillOWispFire(struct Sprite *);
static void AnimTask_MoveHeatWaveTargets_Step(u8);
+static void AnimLavaPlumeOrbitScatter(struct Sprite *);
+static void AnimLavaPlumeOrbitScatterStep(struct Sprite *);
static const union AnimCmd sAnim_FireSpiralSpread_0[] =
{
@@ -111,7 +107,7 @@ static const union AnimCmd sAnim_FirePlume[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sAnims_FirePlume[] =
+const union AnimCmd *const gAnims_FirePlume[] =
{
sAnim_FirePlume,
};
@@ -155,7 +151,7 @@ const struct SpriteTemplate gFirePlumeSpriteTemplate =
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_FIRE_PLUME,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_FirePlume,
+ .anims = gAnims_FirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFirePlume,
@@ -167,7 +163,7 @@ static const struct SpriteTemplate sUnusedEmberFirePlumeSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_FirePlume,
+ .anims = gAnims_FirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFirePlume,
@@ -258,6 +254,30 @@ const struct SpriteTemplate gEmberFlareSpriteTemplate =
.callback = AnimEmberFlare,
};
+const union AnimCmd gIncinerateAnim1[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gIncinerateAnims[] =
+{
+ gIncinerateAnim1,
+};
+
+const struct SpriteTemplate gIncinerateSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gIncinerateAnims,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
const struct SpriteTemplate gBurnFlameSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
@@ -287,7 +307,7 @@ static const union AnimCmd sAnim_FireBlastCross[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sAnims_FireBlastCross[] =
+const union AnimCmd *const gAnims_FireBlastCross[] =
{
sAnim_FireBlastCross,
};
@@ -316,7 +336,7 @@ const struct SpriteTemplate gFireBlastCrossSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_FireBlastCross,
+ .anims = gAnims_FireBlastCross,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireCross,
@@ -404,7 +424,7 @@ static const union AnimCmd sAnim_WillOWispOrb_3[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_WillOWispOrb[] =
+const union AnimCmd *const gAnims_WillOWispOrb[] =
{
sAnim_WillOWispOrb_0,
sAnim_WillOWispOrb_1,
@@ -417,7 +437,7 @@ const struct SpriteTemplate gWillOWispOrbSpriteTemplate =
.tileTag = ANIM_TAG_WISP_ORB,
.paletteTag = ANIM_TAG_WISP_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
- .anims = sAnims_WillOWispOrb,
+ .anims = gAnims_WillOWispOrb,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimWillOWispOrb,
@@ -461,6 +481,68 @@ static const s8 sShakeDirsPattern1[16] =
-1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1,
};
+const union AffineAnimCmd gLavaPlumeAffineAnimCmd[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gLavaPlumeAffineAnims[] =
+{
+ gLavaPlumeAffineAnimCmd,
+};
+
+const struct SpriteTemplate gLavaPlumeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_FIRE_PLUME,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FirePlume,
+ .images = NULL,
+ .affineAnims = gLavaPlumeAffineAnims,
+ .callback = AnimLavaPlumeOrbitScatter,
+};
+
+const struct SpriteTemplate gSpacialRendBladesTemplate =
+{
+ .tileTag = ANIM_TAG_PUNISHMENT_BLADES,
+ .paletteTag = ANIM_TAG_PINK_HEART_2, //ANIM_TAG_BERRY_EATEN,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_BasicFire,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpiralOutward
+};
+
+const struct SpriteTemplate gSpacialRendBladesTemplate2 =
+{
+ .tileTag = ANIM_TAG_PUNISHMENT_BLADES,
+ .paletteTag = ANIM_TAG_PINK_HEART_2, //ANIM_TAG_BERRY_EATEN,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = sAnims_FireSpiralSpread,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpread
+};
+
+static void AnimLavaPlumeOrbitScatter(struct Sprite *sprite)
+{
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
+ sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
+ sprite->callback = AnimLavaPlumeOrbitScatterStep;
+}
+
+static void AnimLavaPlumeOrbitScatterStep(struct Sprite *sprite)
+{
+ sprite->x2 += sprite->data[0];
+ sprite->y2 += sprite->data[1];
+ if (sprite->x + sprite->x2 + 16 > 272u || sprite->y + sprite->y2 > 160 || sprite->y + sprite->y2 < -16)
+ DestroyAnimSprite(sprite);
+}
+
// For the first stage of Fire Punch
static void AnimFireSpiralInward(struct Sprite *sprite)
{
@@ -477,7 +559,7 @@ static void AnimFireSpiralInward(struct Sprite *sprite)
}
// For the impact spread of fire sprites for moves like Blaze Kick or Fire Punch
-static void AnimFireSpread(struct Sprite *sprite)
+void AnimFireSpread(struct Sprite *sprite)
{
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
@@ -490,7 +572,7 @@ static void AnimFireSpread(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-static void AnimFirePlume(struct Sprite *sprite)
+void AnimFirePlume(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
@@ -649,7 +731,7 @@ static void AnimBurnFlame(struct Sprite *sprite)
//void AnimFireRing(struct Sprite *sprite)
void AnimFireRing(struct Sprite *sprite)
{
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[7] = gBattleAnimArgs[2];
sprite->data[0] = 0;
@@ -720,7 +802,7 @@ static void UpdateFireRingCircleOffset(struct Sprite *sprite)
// arg 3: x delta
// arg 4: y delta
// AnimFireCross(struct Sprite *sprite)
-static void AnimFireCross(struct Sprite *sprite)
+void AnimFireCross(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
@@ -734,9 +816,9 @@ static void AnimFireCross(struct Sprite *sprite)
sprite->callback = TranslateSpriteLinear;
}
-static void AnimFireSpiralOutward(struct Sprite *sprite)
+void AnimFireSpiralOutward(struct Sprite *sprite)
{
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[3];
@@ -1035,7 +1117,7 @@ static void UpdateEruptionLaunchRockPos(struct Sprite *sprite)
#define sFallDelay data[6]
#define sTargetY data[7]
-static void AnimEruptionFallingRock(struct Sprite *sprite)
+void AnimEruptionFallingRock(struct Sprite *sprite)
{
sprite->x = gBattleAnimArgs[0];
sprite->y = gBattleAnimArgs[1];
@@ -1097,12 +1179,12 @@ static void AnimEruptionFallingRock_Step(struct Sprite *sprite)
#undef sFallDelay
#undef sTargetY
-static void AnimWillOWispOrb(struct Sprite *sprite)
+void AnimWillOWispOrb(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
- InitSpritePosToAnimAttacker(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, FALSE);
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->data[7] = gBattleAnimArgs[2];
diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c
index 3c6341faa2..fb5f2a1bf9 100644
--- a/src/battle_anim_flying.c
+++ b/src/battle_anim_flying.c
@@ -5,25 +5,20 @@
#include "constants/battle_anim.h"
#include "constants/rgb.h"
#include "random.h"
+#include "gpu_regs.h"
+#include "graphics.h"
extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate;
-static void AnimEllipticalGust(struct Sprite *);
static void AnimEllipticalGust_Step(struct Sprite *);
static void AnimGustToTarget(struct Sprite *);
static void AnimGustToTarget_Step(struct Sprite *);
-static void AnimAirWaveCrescent(struct Sprite *);
-static void AnimFlyBallUp(struct Sprite *);
-static void AnimFlyBallUp_Step(struct Sprite *);
-static void AnimFlyBallAttack(struct Sprite *);
-static void AnimFlyBallAttack_Step(struct Sprite *);
static void AnimFallingFeather(struct Sprite *);
static void AnimFallingFeather_Step(struct Sprite *);
static void AnimWhirlwindLine_Step(struct Sprite *);
static void AnimUnusedBubbleThrow(struct Sprite *);
static void AnimWhirlwindLine(struct Sprite *);
static void AnimBounceBallShrink(struct Sprite *);
-static void AnimBounceBallLand(struct Sprite *);
static void AnimDiveBall(struct Sprite *);
static void AnimDiveBall_Step1(struct Sprite *);
static void AnimDiveBall_Step2(struct Sprite *);
@@ -35,7 +30,7 @@ static void AnimUnusedFlashingLight_Step(struct Sprite *);
static void AnimSkyAttackBird(struct Sprite *);
static void AnimSkyAttackBird_Step(struct Sprite *);
static void AnimTask_AnimateGustTornadoPalette_Step(u8);
-
+static void AnimTask_LoadWindstormBackground_Step(u8 taskId);
const struct SpriteTemplate gEllipticalGustSpriteTemplate =
{
@@ -80,7 +75,7 @@ static const union AnimCmd sAffineAnim_AirWaveCrescent[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sAffineAnims_AirWaveCrescent[] =
+const union AnimCmd *const gAffineAnims_AirWaveCrescent[] =
{
sAffineAnim_AirWaveCrescent,
};
@@ -90,7 +85,7 @@ const struct SpriteTemplate gAirWaveCrescentSpriteTemplate =
.tileTag = ANIM_TAG_AIR_WAVE_2,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineOff_ObjNormal_32x16,
- .anims = sAffineAnims_AirWaveCrescent,
+ .anims = gAffineAnims_AirWaveCrescent,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimAirWaveCrescent,
@@ -105,7 +100,7 @@ static const union AffineAnimCmd sAffineAnim_FlyBallUp[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_FlyBallUp[] =
+const union AffineAnimCmd *const gAffineAnims_FlyBallUp[] =
{
sAffineAnim_FlyBallUp,
};
@@ -122,7 +117,7 @@ static const union AffineAnimCmd sAffineAnim_FlyBallAttack_1[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_FlyBallAttack[] =
+const union AffineAnimCmd *const gAffineAnims_FlyBallAttack[] =
{
sAffineAnim_FlyBallAttack_0,
sAffineAnim_FlyBallAttack_1,
@@ -135,7 +130,7 @@ const struct SpriteTemplate gFlyBallUpSpriteTemplate =
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_FlyBallUp,
+ .affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp,
};
@@ -146,7 +141,7 @@ const struct SpriteTemplate gFlyBallAttackSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_FlyBallAttack,
+ .affineAnims = gAffineAnims_FlyBallAttack,
.callback = AnimFlyBallAttack,
};
@@ -249,7 +244,7 @@ static const union AffineAnimCmd sAffineAnim_BounceBallLand[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_BounceBallLand[] =
+const union AffineAnimCmd *const gAffineAnims_BounceBallLand[] =
{
sAffineAnim_BounceBallLand,
};
@@ -261,7 +256,7 @@ const struct SpriteTemplate gBounceBallLandSpriteTemplate =
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_BounceBallLand,
+ .affineAnims = gAffineAnims_BounceBallLand,
.callback = AnimBounceBallLand,
};
@@ -350,7 +345,7 @@ const struct SpriteTemplate gSkyAttackBirdSpriteTemplate =
};
-static void AnimEllipticalGust(struct Sprite *sprite)
+void AnimEllipticalGust(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->y += 20;
@@ -427,7 +422,7 @@ static void AnimGustToTarget_Step(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-static void AnimAirWaveCrescent(struct Sprite *sprite)
+void AnimAirWaveCrescent(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
@@ -456,7 +451,7 @@ static void AnimAirWaveCrescent(struct Sprite *sprite)
}
else
{
- SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]);
}
sprite->data[2] = sprite->data[2] + gBattleAnimArgs[2];
@@ -467,7 +462,7 @@ static void AnimAirWaveCrescent(struct Sprite *sprite)
SeekSpriteAnim(sprite, gBattleAnimArgs[5]);
}
-static void AnimFlyBallUp(struct Sprite *sprite)
+void AnimFlyBallUp(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
@@ -476,7 +471,7 @@ static void AnimFlyBallUp(struct Sprite *sprite)
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
}
-static void AnimFlyBallUp_Step(struct Sprite *sprite)
+void AnimFlyBallUp_Step(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -492,7 +487,7 @@ static void AnimFlyBallUp_Step(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-static void AnimFlyBallAttack(struct Sprite *sprite)
+void AnimFlyBallAttack(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
@@ -511,12 +506,13 @@ static void AnimFlyBallAttack(struct Sprite *sprite)
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[5] = gBattleAnimArgs[1]; // if sprite is to remain invisible
InitAnimLinearTranslation(sprite);
sprite->callback = AnimFlyBallAttack_Step;
}
-static void AnimFlyBallAttack_Step(struct Sprite *sprite)
+void AnimFlyBallAttack_Step(struct Sprite *sprite)
{
sprite->data[0] = 1;
AnimTranslateLinear(sprite);
@@ -531,7 +527,7 @@ static void AnimFlyBallAttack_Step(struct Sprite *sprite)
|| sprite->x + sprite->x2 > DISPLAY_WIDTH + 32
|| sprite->y + sprite->y2 > DISPLAY_HEIGHT)
{
- gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = FALSE;
+ gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = sprite->data[5];
DestroyAnimSprite(sprite);
}
}
@@ -595,7 +591,7 @@ static void AnimFallingFeather(struct Sprite *sprite)
data->unkA = (gBattleAnimArgs[2] >> 8) & 0xFF;
data->unk4 = gBattleAnimArgs[3];
data->unk6 = gBattleAnimArgs[4];
- *(u16*)(data->unkC) = gBattleAnimArgs[5];
+ *(u16 *)(data->unkC) = gBattleAnimArgs[5];
if (data->unk2 >= 64 && data->unk2 <= 191)
{
@@ -906,7 +902,7 @@ static void AnimWhirlwindLine(struct Sprite * sprite)
u8 mult;
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
- InitSpritePosToAnimAttacker(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, FALSE);
else
InitSpritePosToAnimTarget(sprite, FALSE);
@@ -971,7 +967,7 @@ static void AnimBounceBallShrink(struct Sprite *sprite)
switch (sprite->data[0])
{
case 0:
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
++sprite->data[0];
break;
@@ -982,7 +978,7 @@ static void AnimBounceBallShrink(struct Sprite *sprite)
}
}
-static void AnimBounceBallLand(struct Sprite *sprite)
+void AnimBounceBallLand(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -1009,7 +1005,7 @@ static void AnimBounceBallLand(struct Sprite *sprite)
static void AnimDiveBall(struct Sprite *sprite)
{
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->callback = AnimDiveBall_Step1;
@@ -1067,7 +1063,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
sprite->data[1] = 0x200;
- TrySetSpriteRotScale(sprite, 0, 0x100, sprite->data[1], 0);
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, sprite->data[1], 0);
sprite->data[0]++;
break;
case 1:
@@ -1078,7 +1074,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite)
sprite->data[2]++;
- TrySetSpriteRotScale(sprite, 0, 0x100, sprite->data[1], 0);
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, sprite->data[1], 0);
matrixNum = sprite->oam.matrixNum;
@@ -1202,7 +1198,7 @@ static void AnimSkyAttackBird(struct Sprite *sprite)
rotation = ArcTan2Neg(posx - sprite->x, posy - sprite->y);
rotation -= 16384;
- TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation);
+ TrySetSpriteRotScale(sprite, TRUE, 0x100, 0x100, rotation);
sprite->callback = AnimSkyAttackBird_Step;
}
@@ -1235,3 +1231,99 @@ static void AnimTask_SetAttackerVisibility(u8 taskId)
}
DestroyAnimVisualTask(taskId);
}
+
+void AnimTask_LoadWindstormBackground(u8 taskId)
+{
+ int var0;
+ struct BattleAnimBgData animBg;
+
+ var0 = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+
+ GetBattleAnimBg1Data(&animBg);
+ AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Windstorm, animBg.tilesOffset);
+ AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Windstorm, 0);
+ LoadCompressedPalette(gBattleAnimSpritePal_Windstorm, animBg.paletteId * 16, 32);
+
+ if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ var0 = 1;
+
+ gTasks[taskId].data[0] = var0;
+ gTasks[taskId].func = AnimTask_LoadWindstormBackground_Step;
+}
+
+static void AnimTask_LoadWindstormBackground_Step(u8 taskId)
+{
+ struct BattleAnimBgData animBg;
+
+ if (gTasks[taskId].data[0] == 0)
+ gBattle_BG1_X += -6;
+ else
+ gBattle_BG1_X += 6;
+
+ gBattle_BG1_Y += -1;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 7)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 101)
+ {
+ gTasks[taskId].data[11] = 7;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ GetBattleAnimBg1Data(&animBg);
+ ClearBattleAnimBg(animBg.bgId);
+ gTasks[taskId].data[12]++;
+ break;
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c
index a59e549001..f14b35ccb2 100644
--- a/src/battle_anim_ghost.c
+++ b/src/battle_anim_ghost.c
@@ -2,6 +2,7 @@
#include "battle.h"
#include "battle_anim.h"
#include "gpu_regs.h"
+#include "item_icon.h"
#include "palette.h"
#include "constants/rgb.h"
#include "scanline_effect.h"
@@ -9,6 +10,7 @@
#include "sound.h"
#include "trig.h"
#include "util.h"
+#include "constants/moves.h"
static void AnimConfuseRayBallBounce(struct Sprite *);
static void AnimConfuseRayBallBounce_Step1(struct Sprite *);
@@ -18,7 +20,6 @@ static void AnimConfuseRayBallSpiral(struct Sprite *);
static void AnimConfuseRayBallSpiral_Step(struct Sprite *);
static void AnimTask_NightShadeClone_Step1(u8 taskId);
static void AnimTask_NightShadeClone_Step2(u8 taskId);
-static void AnimShadowBall(struct Sprite *);
static void AnimShadowBall_Step(struct Sprite *);
static void AnimLick(struct Sprite *);
static void AnimLick_Step(struct Sprite *);
@@ -35,12 +36,11 @@ static void AnimCurseNail(struct Sprite *);
static void AnimCurseNail_Step1(struct Sprite *);
static void AnimCurseNail_Step2(struct Sprite *);
static void AnimCurseNail_End(struct Sprite *);
-static void AnimGhostStatusSprite(struct Sprite *);
static void AnimGhostStatusSprite_Step(struct Sprite *);
-static void AnimTask_GrudgeFlames_Step(u8 taskId);
static void AnimGrudgeFlame(struct Sprite *);
static void AnimMonMoveCircular(struct Sprite *);
static void AnimMonMoveCircular_Step(struct Sprite *);
+static void AnimPoltergeistItem(struct Sprite *);
static const union AffineAnimCmd sAffineAnim_ConfuseRayBallBounce[] =
{
@@ -82,7 +82,7 @@ static const union AffineAnimCmd sAffineAnim_ShadowBall[] =
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd *const sAffineAnims_ShadowBall[] =
+const union AffineAnimCmd *const gAffineAnims_ShadowBall[] =
{
sAffineAnim_ShadowBall,
};
@@ -94,10 +94,43 @@ const struct SpriteTemplate gShadowBallSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_ShadowBall,
+ .affineAnims = gAffineAnims_ShadowBall,
.callback = AnimShadowBall,
};
+const struct SpriteTemplate gEnergyBallSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ENERGY_BALL,
+ .paletteTag = ANIM_TAG_ENERGY_BALL,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimShadowBall,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_LeafStorm =
+{
+ .tileTag = ANIM_TAG_RAZOR_LEAF,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gAffineAnims_AirWaveCrescent,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimAirWaveCrescent,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_LeafStorm2 =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_PoisonProjectile,
+ .callback = AnimNeedleArmSpike,
+};
+
static const union AnimCmd sAnim_Lick[] =
{
ANIMCMD_FRAME(0, 2),
@@ -147,6 +180,17 @@ const struct SpriteTemplate gDestinyBondWhiteShadowSpriteTemplate =
.callback = AnimDestinyBondWhiteShadow,
};
+const struct SpriteTemplate gDarkVoidBlackHoleTemplate =
+{
+ .tileTag = ANIM_TAG_WHITE_SHADOW,
+ .paletteTag = ANIM_TAG_QUICK_GUARD_HAND,
+ .oam = &gOamData_AffineOff_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDestinyBondWhiteShadow
+};
+
const struct SpriteTemplate gCurseNailSpriteTemplate =
{
.tileTag = ANIM_TAG_NAIL,
@@ -217,6 +261,28 @@ static const struct SpriteTemplate sMonMoveCircularSpriteTemplate =
.callback = AnimMonMoveCircular,
};
+const struct SpriteTemplate gFlashCannonBallMovementTemplate =
+{
+ .tileTag = ANIM_TAG_FLASH_CANNON_BALL,
+ .paletteTag = ANIM_TAG_FLASH_CANNON_BALL,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimShadowBall
+};
+
+const struct SpriteTemplate gPoltergeistEffectTemplate =
+{
+ .tileTag = ANIM_TAG_POLTERGEIST,
+ .paletteTag = ANIM_TAG_POLTERGEIST,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimPoltergeistItem,
+};
+
static void AnimConfuseRayBallBounce(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
@@ -395,7 +461,7 @@ static void AnimTask_NightShadeClone_Step2(u8 taskId)
// arg 0: duration step 1 (attacker -> center)
// arg 1: duration step 2 (spin center)
// arg 2: duration step 3 (center -> target)
-static void AnimShadowBall(struct Sprite *sprite)
+void AnimShadowBall(struct Sprite *sprite)
{
s16 oldPosX = sprite->x;
s16 oldPosY = sprite->y;
@@ -817,7 +883,12 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
&& battler != (gBattleAnimAttacker ^ 2)
&& IsBattlerSpriteVisible(battler))
{
- spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55);
+ if (gAnimMoveIndex == MOVE_DARK_VOID
+ || gAnimMoveIndex == MOVE_POLTERGEIST)
+ spriteId = CreateSprite(&gDarkVoidBlackHoleTemplate, baseX, baseY, 55); //dark void
+ else
+ spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); //destiny bond
+
if (spriteId != MAX_SPRITES)
{
x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
@@ -839,7 +910,11 @@ void AnimTask_DestinyBondWhiteShadow(u8 taskId)
}
else
{
- spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55);
+ if (gAnimMoveIndex == MOVE_DARK_VOID)
+ spriteId = CreateSprite(&gDarkVoidBlackHoleTemplate, baseX, baseY, 55); //dark void
+ else
+ spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55); //destiny bond
+
if (spriteId != MAX_SPRITES)
{
x = 48;
@@ -1034,7 +1109,7 @@ static void AnimCurseNail(struct Sprite *sprite)
s16 xDelta;
s16 xDelta2;
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
{
xDelta = 24;
@@ -1120,7 +1195,7 @@ static void AnimCurseNail_End(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-static void AnimGhostStatusSprite(struct Sprite *sprite)
+void AnimGhostStatusSprite(struct Sprite *sprite)
{
u16 coeffB;
u16 coeffA;
@@ -1189,7 +1264,7 @@ void AnimTask_GrudgeFlames(u8 taskId)
task->func = AnimTask_GrudgeFlames_Step;
}
-static void AnimTask_GrudgeFlames_Step(u8 taskId)
+void AnimTask_GrudgeFlames_Step(u8 taskId)
{
u16 i;
u8 spriteId;
@@ -1334,3 +1409,101 @@ static void AnimMonMoveCircular_Step(struct Sprite *sprite)
sprite->callback = DestroySpriteAndMatrix;
}
}
+
+void AnimTask_PoltergeistItem(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + (GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT) / 2);
+
+ task->data[0] = AddItemIconSprite(ANIM_TAG_ITEM_BAG, ANIM_TAG_ITEM_BAG, gLastUsedItem);
+ gSprites[task->data[0]].x = x + 4;
+ gSprites[task->data[0]].y = y + 4;
+ gSprites[task->data[0]].data[0] = x + 4;
+ gSprites[task->data[0]].data[1] = y + 4;
+ gSprites[task->data[0]].callback = AnimPoltergeistItem;
+
+ task->data[1] = CreateSprite(&gPoltergeistEffectTemplate, x, y, 1);
+ gSprites[task->data[1]].data[0] = x;
+ gSprites[task->data[1]].data[1] = y;
+
+ gAnimVisualTaskCount += 2;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+static void AnimPoltergeistItem(struct Sprite *sprite)
+{
+ sprite->data[2] += 4;
+
+ sprite->x = sprite->data[0] + Sin(sprite->data[2], 24);
+ sprite->y = sprite->data[1] + (Cos(sprite->data[2], 24) - 24);
+
+ if (sprite->data[2] == 256)
+ DestroyAnimSprite(sprite);
+}
+
+//pulverizing pancake - destiny bond shadow from attacker to target
+void AnimTask_PulverizingPancakeWhiteShadow(u8 taskId)
+{
+ struct Task *task;
+ s16 battler;
+ u8 spriteId;
+ s16 baseX, baseY;
+ s16 x, y;
+
+ task = &gTasks[taskId];
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
+ task->data[5] = 0;
+ task->data[6] = 0;
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[9] = 16;
+ task->data[10] = gBattleAnimArgs[0];
+
+ baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM);
+ if (!IsContest())
+ {
+ spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55);
+ if (spriteId != MAX_SPRITES)
+ {
+ x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ y = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM);
+ gSprites[spriteId].data[0] = baseX << 4;
+ gSprites[spriteId].data[1] = baseY << 4;
+ gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1];
+ gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1];
+ gSprites[spriteId].data[4] = gBattleAnimArgs[1];
+ gSprites[spriteId].data[5] = x;
+ gSprites[spriteId].data[6] = y;
+ gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step;
+
+ task->data[task->data[12] + 13] = spriteId;
+ task->data[12]++;
+ }
+ }
+ else
+ {
+ spriteId = CreateSprite(&gDestinyBondWhiteShadowSpriteTemplate, baseX, baseY, 55);
+ if (spriteId != MAX_SPRITES)
+ {
+ x = 48;
+ y = 40;
+ gSprites[spriteId].data[0] = baseX << 4;
+ gSprites[spriteId].data[1] = baseY << 4;
+ gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1];
+ gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1];
+ gSprites[spriteId].data[4] = gBattleAnimArgs[1];
+ gSprites[spriteId].data[5] = x;
+ gSprites[spriteId].data[6] = y;
+ gSprites[spriteId].callback = AnimDestinyBondWhiteShadow_Step;
+
+ task->data[13] = spriteId;
+ task->data[12] = 1;
+ }
+ }
+
+ task->func = AnimTask_DestinyBondWhiteShadow_Step;
+}
diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c
index 0e581035e8..184107d488 100644
--- a/src/battle_anim_ground.c
+++ b/src/battle_anim_ground.c
@@ -8,14 +8,10 @@
static void AnimBonemerangProjectile(struct Sprite *);
static void AnimBoneHitProjectile(struct Sprite *);
-static void AnimDirtScatter(struct Sprite *);
-static void AnimMudSportDirt(struct Sprite *);
-static void AnimDirtPlumeParticle(struct Sprite *);
static void AnimDirtPlumeParticle_Step(struct Sprite *);
static void AnimDigDirtMound(struct Sprite *);
static void AnimBonemerangProjectile_Step(struct Sprite *);
static void AnimBonemerangProjectile_End(struct Sprite *);
-static void AnimMudSportDirtRising(struct Sprite *);
static void AnimMudSportDirtFalling(struct Sprite *);
static void AnimTask_DigBounceMovement(u8);
static void AnimTask_DigEndBounceMovementSetInvisible(u8);
@@ -44,7 +40,7 @@ static const union AffineAnimCmd *const sAffineAnims_Bonemerang[] =
sAffineAnim_Bonemerang,
};
-static const union AffineAnimCmd *const sAffineAnims_SpinningBone[] =
+const union AffineAnimCmd *const gAffineAnims_SpinningBone[] =
{
sAffineAnim_SpinningBone,
};
@@ -67,7 +63,7 @@ const struct SpriteTemplate gSpinningBoneSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_SpinningBone,
+ .affineAnims = gAffineAnims_SpinningBone,
.callback = AnimBoneHitProjectile,
};
@@ -137,6 +133,28 @@ const struct SpriteTemplate gDirtMoundSpriteTemplate =
.callback = AnimDigDirtMound,
};
+const struct SpriteTemplate gMudBombSplash =
+{
+ .tileTag = ANIM_TAG_MUD_SAND,
+ .paletteTag = ANIM_TAG_MUD_SAND,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSludgeBombHitParticle,
+};
+
+const struct SpriteTemplate gMudBombToss =
+{
+ .tileTag = ANIM_TAG_MUD_SAND,
+ .paletteTag = ANIM_TAG_MUD_SAND,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = sAnims_MudSlapMud,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThrowProjectile,
+};
+
// Moves a bone projectile towards the target mon, which moves like
// a boomerang. After hitting the target mon, it comes back to the user.
static void AnimBonemerangProjectile(struct Sprite *sprite)
@@ -200,12 +218,12 @@ static void AnimBoneHitProjectile(struct Sprite *sprite)
// arg 2: duration
// arg 3: target x pixel offset
// arg 4: target y pixel offset
-static void AnimDirtScatter(struct Sprite *sprite)
+void AnimDirtScatter(struct Sprite *sprite)
{
u8 targetXPos, targetYPos;
s16 xOffset, yOffset;
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2);
targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
@@ -229,7 +247,7 @@ static void AnimDirtScatter(struct Sprite *sprite)
// arg 0: 0 = dirt is rising into the air, 1 = dirt is falling down
// arg 1: initial x pixel offset
// arg 2: initial y pixel offset
-static void AnimMudSportDirt(struct Sprite *sprite)
+void AnimMudSportDirt(struct Sprite *sprite)
{
sprite->oam.tileNum++;
if (gBattleAnimArgs[0] == 0)
@@ -248,7 +266,7 @@ static void AnimMudSportDirt(struct Sprite *sprite)
}
}
-static void AnimMudSportDirtRising(struct Sprite *sprite)
+void AnimMudSportDirtRising(struct Sprite *sprite)
{
if (++sprite->data[1] > 1)
{
@@ -557,7 +575,6 @@ static void AnimDigDirtMound(struct Sprite *sprite)
sprite->callback = WaitAnimForDuration;
}
-
#define tState data[0]
#define tDelay data[1]
#define tTimer data[2]
diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c
index 0b89c1f593..e4a7805a85 100644
--- a/src/battle_anim_ice.c
+++ b/src/battle_anim_ice.c
@@ -24,18 +24,14 @@ static void AnimUnusedIceCrystalThrow(struct Sprite *);
static void AnimUnusedIceCrystalThrow_Step(struct Sprite *);
static void AnimIcePunchSwirlingParticle(struct Sprite *);
static void AnimIceBeamParticle(struct Sprite *);
-static void AnimIceEffectParticle(struct Sprite *);
static void AnimFlickerIceEffectParticle(struct Sprite *);
static void AnimSwirlingSnowball(struct Sprite *);
-static void AnimSwirlingSnowball_Step1(struct Sprite *);
static void AnimSwirlingSnowball_Step2(struct Sprite *);
static void AnimSwirlingSnowball_End(struct Sprite *);
-static void AnimMoveParticleBeyondTarget(struct Sprite *);
static void AnimWiggleParticleTowardsTarget(struct Sprite *);
static void AnimWaveFromCenterOfTarget(struct Sprite *);
static void InitSwirlingFogAnim(struct Sprite *);
static void AnimSwirlingFogAnim(struct Sprite *);
-static void AnimThrowMistBall(struct Sprite *);
static void InitPoisonGasCloudAnim(struct Sprite *);
static void MovePoisonGasCloud(struct Sprite *);
static void AnimHailBegin(struct Sprite *);
@@ -48,6 +44,8 @@ static void AnimTask_HazeScrollingFog_Step(u8);
static void AnimTask_LoadMistTiles_Step(u8);
static void AnimTask_Hail2(u8);
static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c);
+static void AvalancheAnim_Step(struct Sprite *sprite);
+static void AvalancheAnim_Step2(struct Sprite *sprite);
static const union AnimCmd sAnim_Unused[] =
{
@@ -116,7 +114,7 @@ static const union AnimCmd *const sAnims_IceCrystalLargeChunk[] =
sAnim_IceCrystalLargeChunk,
};
-static const union AnimCmd *const sAnims_IceCrystalLarge[] =
+const union AnimCmd *const gAnims_IceCrystalLarge[] =
{
sAnim_IceCrystalLarge,
};
@@ -126,12 +124,12 @@ static const union AnimCmd *const sAnims_IceCrystalSmall[] =
sAnim_IceCrystalSmall,
};
-static const union AnimCmd *const sAnims_Snowball[] =
+const union AnimCmd *const gAnims_Snowball[] =
{
sAnim_Snowball,
};
-static const union AnimCmd *const sAnims_BlizzardIceCrystal[] =
+const union AnimCmd *const gAnims_BlizzardIceCrystal[] =
{
sAnim_BlizzardIceCrystal,
};
@@ -157,7 +155,7 @@ const struct SpriteTemplate gIceCrystalSpiralInwardLarge =
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineDouble_ObjBlend_8x16,
- .anims = sAnims_IceCrystalLarge,
+ .anims = gAnims_IceCrystalLarge,
.images = NULL,
.affineAnims = sAffineAnims_IceCrystalSpiralInwardLarge,
.callback = AnimIcePunchSwirlingParticle,
@@ -190,7 +188,7 @@ const struct SpriteTemplate gIceBeamInnerCrystalSpriteTemplate =
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineNormal_ObjBlend_8x16,
- .anims = sAnims_IceCrystalLarge,
+ .anims = gAnims_IceCrystalLarge,
.images = NULL,
.affineAnims = sAffineAnims_IceBeamInnerCrystal,
.callback = AnimIceBeamParticle,
@@ -215,7 +213,7 @@ static const union AffineAnimCmd sAffineAnim_IceCrystalHit[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_IceCrystalHit[] =
+const union AffineAnimCmd *const gAffineAnims_IceCrystalHit[] =
{
sAffineAnim_IceCrystalHit,
};
@@ -225,9 +223,9 @@ const struct SpriteTemplate gIceCrystalHitLargeSpriteTemplate =
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineNormal_ObjBlend_8x16,
- .anims = sAnims_IceCrystalLarge,
+ .anims = gAnims_IceCrystalLarge,
.images = NULL,
- .affineAnims = sAffineAnims_IceCrystalHit,
+ .affineAnims = gAffineAnims_IceCrystalHit,
.callback = AnimIceEffectParticle,
};
@@ -238,7 +236,7 @@ const struct SpriteTemplate gIceCrystalHitSmallSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_8x8,
.anims = sAnims_IceCrystalSmall,
.images = NULL,
- .affineAnims = sAffineAnims_IceCrystalHit,
+ .affineAnims = gAffineAnims_IceCrystalHit,
.callback = AnimIceEffectParticle,
};
@@ -247,7 +245,7 @@ const struct SpriteTemplate gSwirlingSnowballSpriteTemplate =
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = sAnims_Snowball,
+ .anims = gAnims_Snowball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSwirlingSnowball,
@@ -258,7 +256,7 @@ const struct SpriteTemplate gBlizzardIceCrystalSpriteTemplate =
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
- .anims = sAnims_BlizzardIceCrystal,
+ .anims = gAnims_BlizzardIceCrystal,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMoveParticleBeyondTarget,
@@ -269,7 +267,7 @@ const struct SpriteTemplate gPowderSnowSnowballSpriteTemplate =
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = sAnims_Snowball,
+ .anims = gAnims_Snowball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMoveParticleBeyondTarget,
@@ -456,7 +454,7 @@ static const union AnimCmd sAnim_IceBallChunk_1[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_IceBallChunk[] =
+const union AnimCmd *const gAnims_IceBallChunk[] =
{
sAnim_IceBallChunk_0,
sAnim_IceBallChunk_1,
@@ -506,7 +504,7 @@ const struct SpriteTemplate gIceBallChunkSpriteTemplate =
.tileTag = ANIM_TAG_ICE_CHUNK,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
- .anims = sAnims_IceBallChunk,
+ .anims = gAnims_IceBallChunk,
.images = NULL,
.affineAnims = sAffineAnims_IceBallChunk,
.callback = InitIceBallAnim,
@@ -523,6 +521,91 @@ const struct SpriteTemplate gIceBallImpactShardSpriteTemplate =
.callback = InitIceBallParticle,
};
+const union AnimCmd gAvalancheAnimTable_1[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gAvalancheAnimTable_2[] =
+{
+ ANIMCMD_FRAME(48, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gAvalancheAnimTable_3[] =
+{
+ ANIMCMD_FRAME(64, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gAvalancheAnimCmd[] =
+{
+ gAvalancheAnimTable_1,
+ gAvalancheAnimTable_2,
+ gAvalancheAnimTable_3,
+};
+
+const struct SpriteTemplate gAvalancheSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROCKS,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAvalancheAnimCmd,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AvalancheAnim_Step,
+};
+
+const struct SpriteTemplate gChatterSingNotesTemplate =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gMusicNotesAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_IceCrystalHit,
+ .callback = AnimIceEffectParticle
+};
+
+static void AvalancheAnim_Step(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[3] != 0)
+ SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y);
+
+ sprite->x += gBattleAnimArgs[0];
+ sprite->y += 14;
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ AnimateSprite(sprite);
+
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 4;
+ sprite->data[3] = 16;
+ sprite->data[4] = -70;
+ sprite->data[5] = gBattleAnimArgs[2];
+
+ StoreSpriteCallbackInData6(sprite, AvalancheAnim_Step2);
+ sprite->callback = TranslateSpriteInEllipse;
+ sprite->callback(sprite);
+}
+
+static void AvalancheAnim_Step2(struct Sprite *sprite)
+{
+ sprite->x += sprite->data[5];
+
+ sprite->data[0] = 192;
+ sprite->data[1] = sprite->data[5];
+ sprite->data[2] = 4;
+ sprite->data[3] = 32;
+ sprite->data[4] = -24;
+
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = TranslateSpriteInEllipse;
+ sprite->callback(sprite);
+}
+
// Unused
static void AnimUnusedIceCrystalThrow(struct Sprite *sprite)
{
@@ -623,7 +706,7 @@ static void AnimIceBeamParticle(struct Sprite *sprite)
// arg 0: target x offset
// arg 1: target y offset
// arg 2: ??? unknown boolean
-static void AnimIceEffectParticle(struct Sprite *sprite)
+void AnimIceEffectParticle(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == 0)
{
@@ -631,7 +714,7 @@ static void AnimIceEffectParticle(struct Sprite *sprite)
}
else
{
- SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->x, &sprite->y);
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
@@ -676,7 +759,7 @@ static void AnimSwirlingSnowball(struct Sprite *sprite)
}
else
{
- SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]);
}
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -714,7 +797,7 @@ static void AnimSwirlingSnowball(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step1);
}
-static void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
+void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
{
s16 tempVar;
@@ -778,7 +861,7 @@ static void AnimSwirlingSnowball_End(struct Sprite *sprite)
// arg 5: wave amplitude
// arg 6: wave frequency
// arg 7: multiple targets? (boolean)
-static void AnimMoveParticleBeyondTarget(struct Sprite *sprite)
+void AnimMoveParticleBeyondTarget(struct Sprite *sprite)
{
int i;
s16 tempDataHolder[8];
@@ -796,7 +879,7 @@ static void AnimMoveParticleBeyondTarget(struct Sprite *sprite)
}
else
{
- SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]);
}
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -867,7 +950,7 @@ static void AnimWaveFromCenterOfTarget(struct Sprite *sprite)
}
else
{
- SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y);
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
@@ -905,7 +988,7 @@ static void InitSwirlingFogAnim(struct Sprite *sprite)
}
else
{
- SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->x, &sprite->y);
+ SetAverageBattlerPositions(gBattleAnimAttacker, FALSE, &sprite->x, &sprite->y);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->x -= gBattleAnimArgs[0];
else
@@ -924,7 +1007,7 @@ static void InitSwirlingFogAnim(struct Sprite *sprite)
}
else
{
- SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y);
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y);
if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
sprite->x -= gBattleAnimArgs[0];
else
@@ -1078,7 +1161,7 @@ static void AnimTask_HazeScrollingFog_Step(u8 taskId)
// arg 3: target y offset
// arg 4: duration
// arg 5: ??? unknown (seems to vibrate target mon somehow)
-static void AnimThrowMistBall(struct Sprite *sprite)
+void AnimThrowMistBall(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
@@ -1497,7 +1580,7 @@ static void InitIceBallAnim(struct Sprite *sprite)
animNum = 4;
StartSpriteAffineAnim(sprite, animNum);
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[4];
diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c
index ba2cbe29ac..ba4ede0171 100644
--- a/src/battle_anim_mon_movement.c
+++ b/src/battle_anim_mon_movement.c
@@ -14,7 +14,7 @@ static void AnimTask_TranslateMonElliptical_Step(u8 taskId);
static void DoHorizontalLunge(struct Sprite *sprite);
static void ReverseHorizontalLungeDirection(struct Sprite *sprite);
static void DoVerticalDip(struct Sprite *sprite);
-static void ReverseVerticalDipDirection(struct Sprite* sprite);
+static void ReverseVerticalDipDirection(struct Sprite *sprite);
static void SlideMonToOriginalPos(struct Sprite *sprite);
static void SlideMonToOriginalPos_Step(struct Sprite *sprite);
static void SlideMonToOffset(struct Sprite *sprite);
@@ -27,6 +27,7 @@ static void AnimTask_ScaleMonAndRestore_Step(u8 taskId);
static void AnimTask_RotateMonSpriteToSide_Step(u8 taskId);
static void AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step(u8 taskId);
static void AnimTask_SlideOffScreen_Step(u8 taskId);
+static void AnimTask_RotateVerticallyStep(u8 taskId);
const struct SpriteTemplate gHorizontalLungeSpriteTemplate =
{
@@ -320,6 +321,13 @@ static void AnimTask_ShakeMonInPlace_Step(u8 taskId)
void AnimTask_ShakeAndSinkMon(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+
+ if (spriteId == SPRITE_NONE)
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
gSprites[spriteId].x2 = gBattleAnimArgs[1];
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[1] = gBattleAnimArgs[1];
@@ -764,6 +772,11 @@ void AnimTask_SwayMon(u8 taskId)
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[4]);
+ if (spriteId == 0xff)
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
@@ -979,7 +992,7 @@ static void AnimTask_RotateMonSpriteToSide_Step(u8 taskId)
}
}
-void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId)
+void SetupShakeBattlerBasedOnMovePowerOrDmg(u8 taskId, u8 animBattlerId)
{
if (!gBattleAnimArgs[0])
{
@@ -1010,12 +1023,23 @@ void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId)
gTasks[taskId].data[12] = 0;
gTasks[taskId].data[10] = gBattleAnimArgs[3];
gTasks[taskId].data[11] = gBattleAnimArgs[4];
- gTasks[taskId].data[7] = GetAnimBattlerSpriteId(ANIM_TARGET);
+ gTasks[taskId].data[7] = GetAnimBattlerSpriteId(animBattlerId);
gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].x2;
gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].y2;
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
+}
+
+void AnimTask_ShakeTargetPartnerBasedOnMovePowerOrDmg(u8 taskId)
+{
+ SetupShakeBattlerBasedOnMovePowerOrDmg(taskId, ANIM_DEF_PARTNER);
+ gTasks[taskId].func = AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step;
+}
+
+void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId)
+{
+ SetupShakeBattlerBasedOnMovePowerOrDmg(taskId, ANIM_TARGET);
gTasks[taskId].func = AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step;
}
@@ -1057,3 +1081,68 @@ static void AnimTask_ShakeTargetBasedOnMovePowerOrDmg_Step(u8 taskId)
}
}
}
+
+#define tSpriteId data[0]
+#define tRotSpeed data[1]
+#define tRotCurr data[2]
+#define tPhase data[3]
+#define tFrames data[4]
+#define tPlayerSide data[5]
+#define tRotMax data[6] // Can't fully flip back sprites
+
+void AnimTask_RotateVertically(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
+ gTasks[taskId].tSpriteId = spriteId;
+ gTasks[taskId].tRotCurr = 0;
+ gTasks[taskId].tPlayerSide = ((GetBattlerSide(GetAnimBattlerId(gBattleAnimArgs[0]))) == B_SIDE_PLAYER);
+ gTasks[taskId].tRotMax = gTasks[taskId].tPlayerSide ? 0x1FFF : 0x7FFE;
+ gTasks[taskId].tRotSpeed = gBattleAnimArgs[1];
+ gTasks[taskId].func = AnimTask_RotateVerticallyStep;
+}
+
+static void AnimTask_RotateVerticallyStep(u8 taskId)
+{
+ switch (gTasks[taskId].tPhase)
+ {
+ case 0: // flip upside-down
+ gTasks[taskId].tRotCurr = min(abs(gTasks[taskId].tRotCurr + gTasks[taskId].tRotSpeed), gTasks[taskId].tRotMax);
+ SetSpriteRotScale(gTasks[taskId].tSpriteId, 0x100, 0x100, gTasks[taskId].tRotCurr);
+ if (gTasks[taskId].tPlayerSide)
+ SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].tSpriteId);
+
+ if (gTasks[taskId].tRotCurr == gTasks[taskId].tRotMax)
+ gTasks[taskId].tPhase++;
+ break;
+ case 1: // Wait a bit
+ if (++gTasks[taskId].tFrames >= 75)
+ gTasks[taskId].tPhase++;
+ break;
+ case 2: // rotate back
+ if (gTasks[taskId].tRotCurr < gTasks[taskId].tRotSpeed)
+ gTasks[taskId].tRotCurr = 0;
+ else
+ gTasks[taskId].tRotCurr = gTasks[taskId].tRotCurr - gTasks[taskId].tRotSpeed;
+ SetSpriteRotScale(gTasks[taskId].tSpriteId, 0x100, 0x100, gTasks[taskId].tRotCurr);
+ if (gTasks[taskId].tPlayerSide)
+ SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].tSpriteId);
+
+ if (gTasks[taskId].tRotCurr == 0)
+ gTasks[taskId].tPhase++;
+ break;
+ case 3: // end
+ ResetSpriteRotScale(gTasks[taskId].tSpriteId);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+#undef tSpriteId
+#undef tRotSpeed
+#undef tRotCurr
+#undef tPhase
+#undef tFrames
+#undef tPlayerSide
+#undef tRotMax
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index 7eb34f6512..21a3ed9027 100644
--- a/src/battle_anim_mons.c
+++ b/src/battle_anim_mons.c
@@ -121,6 +121,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
{
u8 retVal;
u16 species;
+ struct Pokemon *mon, *illusionMon;
struct BattleSpriteInfo *spriteInfo;
if (IsContest())
@@ -151,21 +152,18 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
else
{
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
- {
- spriteInfo = gBattleSpritesDataPtr->battlerData;
- if (!spriteInfo[battlerId].transformSpecies)
- species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
- else
- species = spriteInfo[battlerId].transformSpecies;
- }
+ mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
else
- {
- spriteInfo = gBattleSpritesDataPtr->battlerData;
- if (!spriteInfo[battlerId].transformSpecies)
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
- else
- species = spriteInfo[battlerId].transformSpecies;
- }
+ mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
+
+ illusionMon = GetIllusionMonPtr(battlerId);
+ if (illusionMon != NULL)
+ mon = illusionMon;
+ spriteInfo = gBattleSpritesDataPtr->battlerData;
+ if (!spriteInfo[battlerId].transformSpecies)
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ else
+ species = spriteInfo[battlerId].transformSpecies;
}
if (coordType == BATTLER_COORD_Y_PIC_OFFSET)
retVal = GetBattlerSpriteFinal_Y(battlerId, species, TRUE);
@@ -414,7 +412,7 @@ u8 GetAnimBattlerSpriteId(u8 animBattler)
}
}
-void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite*))
+void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite *))
{
sprite->data[6] = (u32)(callback) & 0xffff;
sprite->data[7] = (u32)(callback) >> 16;
@@ -850,6 +848,46 @@ void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffse
sprite->y += gBattleAnimArgs[1];
}
+void InitSpritePosToAnimAttackerPartner(struct Sprite *sprite, bool8 respectMonPicOffsets)
+{
+ if (!respectMonPicOffsets)
+ {
+ sprite->x = GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y);
+ }
+ else
+ {
+ sprite->x = GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->y += gBattleAnimArgs[1];
+}
+
+bool32 InitSpritePosToAnimBattler(u32 animBattlerId, struct Sprite *sprite, bool8 respectMonPicOffsets)
+{
+ u32 battlerId = GetAnimBattlerId(animBattlerId);
+ if (GetAnimBattlerSpriteId(animBattlerId) == 0xFF || !IsBattlerSpriteVisible(battlerId))
+ {
+ DestroyAnimSprite(sprite);
+ return FALSE;
+ }
+
+ if (!respectMonPicOffsets)
+ {
+ sprite->x = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_Y);
+ }
+ else if (animBattlerId != ANIM_TARGET)
+ {
+ sprite->x = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord2(battlerId, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->y += gBattleAnimArgs[1];
+ return TRUE;
+}
+
u8 GetBattlerSide(u8 battlerId)
{
return GET_BATTLER_SIDE2(battlerId);
@@ -886,21 +924,23 @@ bool8 IsBattlerSpritePresent(u8 battlerId)
else
{
if (gBattlerPositions[battlerId] == 0xff)
- {
return FALSE;
- }
- else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+
+ if (!gBattleStruct->spriteIgnore0Hp)
{
- if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0)
- return TRUE;
- }
- else
- {
- if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0)
- return TRUE;
+ if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
+ {
+ if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) == 0)
+ return FALSE;
+ }
+ else
+ {
+ if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) == 0)
+ return FALSE;
+ }
}
+ return TRUE;
}
- return FALSE;
}
bool8 IsDoubleBattle(void)
@@ -1529,10 +1569,14 @@ void AnimSpriteOnMonPos(struct Sprite *sprite)
var = TRUE;
else
var = FALSE;
- if (!gBattleAnimArgs[2])
+
+ if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, var);
- else
+ else if (gBattleAnimArgs[2] == 1)
InitSpritePosToAnimTarget(sprite, var);
+ else if (gBattleAnimArgs[2] == 2)
+ InitSpritePosToAnimAttackerPartner(sprite, var);
+
sprite->data[0]++;
}
@@ -1578,7 +1622,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
void AnimThrowProjectile(struct Sprite *sprite)
{
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c
new file mode 100644
index 0000000000..b8304f124f
--- /dev/null
+++ b/src/battle_anim_new.c
@@ -0,0 +1,7894 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "item_menu_icons.h"
+#include "sprite.h"
+#include "random.h"
+#include "gpu_regs.h"
+#include "item.h"
+#include "rtc.h"
+#include "item_icon.h"
+#include "sound.h"
+#include "menu.h"
+#include "malloc.h"
+#include "util.h"
+#include "trig.h"
+#include "graphics.h"
+#include "battle_scripts.h"
+#include "battle_controllers.h"
+#include "constants/moves.h"
+#include "constants/hold_effects.h"
+#include "constants/items.h"
+
+// function declarations
+static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite);
+static void SpriteCB_SpriteOnMonForDuration(struct Sprite *sprite);
+static void SpriteCB_ToxicThreadWrap(struct Sprite *sprite);
+static void SpriteCB_GrowingSuperpower(struct Sprite *sprite);
+static void SpriteCB_CentredSpiderWeb(struct Sprite *sprite);
+static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite);
+static void SpriteCB_CoreEnforcerBeam(struct Sprite *sprite);
+static void SpriteCB_TranslateAnimSpriteToTargetMonLocationDoubles(struct Sprite *sprite);
+static void SpriteCB_FallingObject(struct Sprite *sprite);
+static void SpriteCB_FallingObjectStep(struct Sprite *sprite);
+static void SpriteCB_SunsteelStrikeRings(struct Sprite *sprite);
+static void SpriteCB_MoongeistCharge(struct Sprite *sprite);
+static void SpriteCB_MindBlownBall(struct Sprite *sprite);
+static void AnimMindBlownBallStep(struct Sprite *sprite);
+static void SpriteCB_MindBlownExplosion(struct Sprite *sprite);
+static void SpriteCB_LockingJaw(struct Sprite *sprite);
+static void SpriteCB_LockingJawStep(struct Sprite *sprite);
+static void SpriteCB_LockingJawFinish(struct Sprite *sprite);
+static void SpriteCB_LeftRightSlice(struct Sprite *sprite);
+static void SpriteCB_LeftRightSliceStep1(struct Sprite *sprite);
+static void SpriteCB_LeftRightSliceStep0(struct Sprite *sprite);
+static void SpriteCB_PyroBallRockBounce(struct Sprite *sprite);
+static void SpriteCB_PyroBallLaunch(struct Sprite *sprite);
+static void SpriteCB_AcidLaunchSingleTarget(struct Sprite *sprite);
+static void SpriteCB_AcidDripSingleTarget(struct Sprite *sprite);
+static void SpriteCB_WaterDroplet(struct Sprite *sprite);
+static void SpriteCB_WaterDropletDrip(struct Sprite *sprite);
+static void SpriteCB_WaterDropletDrop(struct Sprite *sprite);
+static void SpriteCB_AnimSpriteOnSelectedMonPos(struct Sprite *sprite);
+static void SpriteCB_SurroundingRing(struct Sprite *sprite);
+static void SpriteCB_PhotonGeyserBeam(struct Sprite *sprite);
+static void SpriteCB_BeamUpStep(struct Sprite *sprite);
+static void SpriteCB_CentredElectricity(struct Sprite *sprite);
+static void AnimSkyDropBallUp(struct Sprite *sprite);
+static void SpriteCB_SearingShotRock(struct Sprite *sprite);
+static void AnimHappyHourCoinShower(struct Sprite *sprite);
+static void SpriteCB_Geyser(struct Sprite *sprite);
+static void SpriteCB_GeyserTarget(struct Sprite *sprite);
+static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite);
+static void AnimBlastBurnTargetPlume_Step1(struct Sprite *sprite);
+static void AnimBlastBurnTargetPlume(struct Sprite *sprite);
+static void AnimEllipticalGustAttacker(struct Sprite *sprite);
+static void AnimEllipticalGustAttacker_Step(struct Sprite *sprite);
+static void AnimGrowingShockWaveOrbOnTarget(struct Sprite *sprite);
+static void AnimTask_GrowStep(u8 taskId);
+static void AnimExtremeEvoboostCircle(struct Sprite *sprite);
+static void AnimExtremeEvoboostCircle_Step(struct Sprite *sprite);
+static void AnimOceanicOperettaSpotlight(struct Sprite *sprite);
+static void AnimSoulStealingStar(struct Sprite *sprite);
+static void AnimSoulStealingStar_Step1(struct Sprite *sprite);
+static void AnimSoulStealingStar_Step2(struct Sprite *sprite);
+
+// const data
+// general
+static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] =
+{
+ AFFINEANIMCMD_FRAME(0, 64, 0, 16), //Flatten
+ AFFINEANIMCMD_FRAME(0, 0, 0, 64),
+ AFFINEANIMCMD_FRAME(0, -64, 0, 16),
+ AFFINEANIMCMD_END,
+};
+
+// GEN 4
+// shadow sneak
+const struct SpriteTemplate gShadowSneakImpactSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_IceCrystalHit,
+ .callback = AnimIceEffectParticle
+};
+
+// power trick
+const struct SpriteTemplate gPowerTrickSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POWER_TRICK,
+ .paletteTag = ANIM_TAG_POWER_TRICK,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_SpinningBone,
+ .callback = SpriteCB_SpriteOnMonForDuration
+};
+
+
+//// GEN 5
+//shell smash
+const struct SpriteTemplate gShellSmashLeftShellSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SHELL_RIGHT,
+ .paletteTag = ANIM_TAG_SHELL_RIGHT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Bite,
+ .callback = AnimBite
+};
+
+const struct SpriteTemplate gShellSmashRightShellSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SHELL_LEFT,
+ .paletteTag = ANIM_TAG_SHELL_LEFT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Bite,
+ .callback = AnimBite
+};
+
+const struct SpriteTemplate gShellSmashPurpleRocksSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROCKS,
+ .paletteTag = ANIM_TAG_SHELL_RIGHT,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FlyingRock,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimRockFragment
+};
+
+//wide guard
+const struct SpriteTemplate gWideGuardBlueConversionTemplate =
+{
+ .tileTag = ANIM_TAG_CONVERSION,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_8x8,
+ .anims = gConversionAnimTable,
+ .images = NULL,
+ .affineAnims = gConversionAffineAnimTable,
+ .callback = AnimConversion
+};
+
+//guard split
+const struct SpriteTemplate gGuardSwapOrbs1Template =
+{
+ .tileTag = ANIM_TAG_BLUEGREEN_ORB,
+ .paletteTag = ANIM_TAG_BLUEGREEN_ORB,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimMimicOrb
+};
+
+const struct SpriteTemplate gGuardSwapOrbs2Template =
+{
+ .tileTag = ANIM_TAG_BLUEGREEN_ORB,
+ .paletteTag = ANIM_TAG_BLUEGREEN_ORB,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimMissileArc
+};
+
+// power split
+const struct SpriteTemplate gPowerSplitOrbs1Template =
+{
+ .tileTag = ANIM_TAG_BLUEGREEN_ORB,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimMimicOrb
+};
+
+const struct SpriteTemplate gPowerSplitOrbs2Template =
+{
+ .tileTag = ANIM_TAG_BLUEGREEN_ORB,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimMissileArc
+};
+
+// automotize
+const struct SpriteTemplate gAutotomizeMetalShardsTemplate =
+{
+ .tileTag = ANIM_TAG_METAL_BITS,
+ .paletteTag = ANIM_TAG_METAL_BITS,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_TearDrop,
+ .callback = AnimTearDrop
+};
+
+//rage powder
+const struct SpriteTemplate gRagePowderRedPowderTemplate =
+{
+ .tileTag = ANIM_TAG_SPORE,
+ .paletteTag = ANIM_TAG_HEART_STAMP,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gSporeParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSporeParticle
+};
+
+//flame charge
+const struct SpriteTemplate gFlameChargeEmberTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FlamethrowerFlame,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPetalDanceBigFlower
+};
+
+//final gambit
+const struct SpriteTemplate gFinalGambitBlueYawnTemplate =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_WATER_IMPACT,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimShadowBall
+};
+
+const struct SpriteTemplate gFinalGambitExplosionTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_WATER_IMPACT,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//synchronoise
+const struct SpriteTemplate gSynchronoiseVioletRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gHyperVoiceRingAffineAnimTable,
+ .callback = AnimHyperVoiceRing
+};
+
+const struct SpriteTemplate gSynchronoiseYellowRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gHyperVoiceRingAffineAnimTable,
+ .callback = AnimHyperVoiceRing
+};
+
+const struct SpriteTemplate gSynchronoiseBlueRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gHyperVoiceRingAffineAnimTable,
+ .callback = AnimHyperVoiceRing
+};
+
+const struct SpriteTemplate gSynchronoiseAeroWheelTemplate =
+{
+ .tileTag = ANIM_TAG_AIR_WAVE_2,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gAffineAnims_AirWaveCrescent,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpread
+};
+
+//electro ball
+const struct SpriteTemplate gElectroBallCannonBallTemplate =
+{
+ .tileTag = ANIM_TAG_FLASH_CANNON_BALL,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimShadowBall
+};
+
+//foul play
+const struct SpriteTemplate gFoulPlayImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+const struct SpriteTemplate gFoulPlayRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//simple beam
+const struct SpriteTemplate gSimpleBeamBrownTemplate =
+{
+ .tileTag = ANIM_TAG_GOLD_RING,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+
+const struct SpriteTemplate gSimpleBeamPinkTemplate =
+{
+ .tileTag = ANIM_TAG_GOLD_RING,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+
+const struct SpriteTemplate gSimpleBeamBrownRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+const struct SpriteTemplate gSimpleBeamPinkRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+// after you
+const struct SpriteTemplate gAfterYouGreenRageTemplate =
+{
+ .tileTag = ANIM_TAG_ANGER,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAngerMarkAffineAnimTable,
+ .callback = AnimAngerMark
+};
+
+//quick guard
+const struct SpriteTemplate gQuickGuardArmImpactTemplate =
+{
+ .tileTag = ANIM_TAG_QUICK_GUARD_HAND,
+ .paletteTag = ANIM_TAG_QUICK_GUARD_HAND,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBasicFistOrFoot
+};
+
+//sky drop
+static const union AffineAnimCmd sSkyDropFlyBallAffineAnimCmd_0[] =
+{
+ AFFINEANIMCMD_FRAME(0xa0, 0x100, 0x50, 0x0),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sSkyDropFlyBallAffineAnimCmds[] =
+{
+ sSkyDropFlyBallAffineAnimCmd_0
+};
+const struct SpriteTemplate gSkyDropFlyBallTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_ROUND_SHADOW,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSkyDropFlyBallAffineAnimCmds,
+ .callback = AnimThrowMistBall
+};
+
+const struct SpriteTemplate gSkyDropTargetFlyingTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_ROUND_SHADOW,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimSkyDropBallUp
+};
+
+//shift gear
+const struct SpriteTemplate gShiftGearGearsTemplate =
+{
+ .tileTag = ANIM_TAG_GEAR,
+ .paletteTag = ANIM_TAG_GEAR,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_SpinningBone,
+ .callback = SpriteCB_SpriteOnMonForDuration
+};
+
+//circle throw
+const struct SpriteTemplate gCircleThrowRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//quash
+const struct SpriteTemplate gQuashArmHitTemplate =
+{
+ .tileTag = ANIM_TAG_ASSURANCE_HAND,
+ .paletteTag = ANIM_TAG_ASSURANCE_HAND,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimStompFoot
+};
+
+//reflect type
+const struct SpriteTemplate gReflectTypeBlueStringTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_ToxicThreadWrap
+};
+
+const struct SpriteTemplate gReflectTypeVioletStringTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_PURPLE_FLAME,
+ .oam = &gOamData_AffineOff_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_ToxicThreadWrap
+};
+
+const struct SpriteTemplate gReflectTypeWhiteStringTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_GUARD_RING,
+ .oam = &gOamData_AffineOff_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_ToxicThreadWrap
+};
+
+const struct SpriteTemplate gReflectTypeWhiteRingTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_GUARD_RING,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGuardRingAffineAnimTable,
+ .callback = SpriteCB_SurroundingRing
+};
+
+const struct SpriteTemplate gReflectTypePinkRingTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGuardRingAffineAnimTable,
+ .callback = SpriteCB_SurroundingRing
+};
+
+const struct SpriteTemplate gReflectTypeVioletRingTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_PURPLE_FLAME,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGuardRingAffineAnimTable,
+ .callback = SpriteCB_SurroundingRing
+};
+
+const struct SpriteTemplate gReflectTypeBlueRingTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGuardRingAffineAnimTable,
+ .callback = SpriteCB_SurroundingRing
+};
+
+//frost breath
+const struct SpriteTemplate gFrostBreathBlueRageTemplate =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_DragonRageFirePlume,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDragonRageFirePlume
+};
+
+const struct SpriteTemplate gFrostBreathBlueBreathTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gAnims_DragonRageFire,
+ .images = NULL,
+ .affineAnims = gAffineAnims_DragonRageFire,
+ .callback = AnimDragonFireToTarget
+};
+
+//heart stamp
+const struct SpriteTemplate gHeartStampSpinningHeartTemplate =
+{
+ .tileTag = ANIM_TAG_HEART_STAMP,
+ .paletteTag = ANIM_TAG_HEART_STAMP,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gAffineAnims_SpinningHandOrFoot,
+ .callback = AnimSpinningKickOrPunch
+};
+
+//horn leech
+const struct SpriteTemplate gHornLeechHornTemplate =
+{
+ .tileTag = ANIM_TAG_HORN_LEECH,
+ .paletteTag = ANIM_TAG_HORN_LEECH,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimShadowBall
+};
+
+//dual chop
+const struct SpriteTemplate gDualChopImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//sacred sword
+const struct SpriteTemplate gSacredSwordBladesTemplate =
+{
+ .tileTag = ANIM_TAG_PUNISHMENT_BLADES,
+ .paletteTag = ANIM_TAG_HYDRO_PUMP,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gAnims_DragonBreathFire,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpread
+};
+
+const struct SpriteTemplate gSacredSwordCutTemplate =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_HYDRO_PUMP,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gCuttingSliceAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCuttingSlice
+};
+
+//razor shell
+const struct SpriteTemplate gRazorShellTemplate =
+{
+ .tileTag = ANIM_TAG_RAZOR_SHELL,
+ .paletteTag = ANIM_TAG_RAZOR_SHELL,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = SpriteCB_SpriteOnMonForDuration
+};
+
+//heat crash
+const struct SpriteTemplate gHeatCrashEruptionRockTemplate =
+{
+ .tileTag = ANIM_TAG_WARM_ROCK,
+ .paletteTag = ANIM_TAG_WARM_ROCK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimStompFoot
+};
+
+//leaf tornado
+const struct SpriteTemplate gLeafTornadoVortexTemplate =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+
+//cotton guard
+const struct SpriteTemplate gCottonGuardSporeTemplate =
+{
+ .tileTag = ANIM_TAG_SPORE,
+ .paletteTag = ANIM_TAG_SPORE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gSporeParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+
+//night daze
+const struct SpriteTemplate gNightDazeVioletRingsTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_PURPLE_FLAME,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+const struct SpriteTemplate gNightDazeVioletCirclesTemplate =
+{
+ .tileTag = ANIM_TAG_RED_ORB,
+ .paletteTag = ANIM_TAG_PURPLE_FLAME,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gHiddenPowerOrbAffineAnimTable,
+ .callback = AnimOrbitScatter
+};
+
+//tail slap
+const struct SpriteTemplate gTailSlapTemplate =
+{
+ .tileTag = ANIM_TAG_PUNISHMENT_BLADES,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gScratchAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//gear grind
+const struct SpriteTemplate gGearGrindTemplate =
+{
+ .tileTag = ANIM_TAG_GEAR,
+ .paletteTag = ANIM_TAG_GEAR,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimBite
+};
+
+//searing shot
+const struct SpriteTemplate gSearingShotRedChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+
+const struct SpriteTemplate gSearingShotEruptionRockTemplate =
+{
+ .tileTag = ANIM_TAG_WARM_ROCK,
+ .paletteTag = ANIM_TAG_WARM_ROCK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimOverheatFlame
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_SearingShotRock[] =
+{
+ AFFINEANIMCMD_FRAME(8, 8, 9, 15),
+ AFFINEANIMCMD_FRAME(-8, -8, 9, 15),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_SearingShotRock[] =
+{
+ sSpriteAffineAnim_SearingShotRock,
+};
+const struct SpriteTemplate gSearingShotEruptionImpactTemplate =
+{
+ .tileTag = ANIM_TAG_WARM_ROCK,
+ .paletteTag = ANIM_TAG_WARM_ROCK,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_SearingShotRock,
+ .callback = SpriteCB_SearingShotRock
+};
+
+//techno blast
+const struct SpriteTemplate gTechnoBlastWhiteChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gTechnoBlastWhiteCircleTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+const struct SpriteTemplate gTechnoBlastWhiteBlastTemplate =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL_2,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+const struct SpriteTemplate gTechnoBlastWhiteSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimZapCannonSpark
+};
+const struct SpriteTemplate gTechnoBlastWhiteSmokeTemplate =
+{
+ .tileTag = ANIM_TAG_GRAY_SMOKE,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOctazookaAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gTechnoBlastYellowBlastTemplate =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL_2,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+const struct SpriteTemplate gTechnoBlastYellowSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimZapCannonSpark
+};
+const struct SpriteTemplate gTechnoBlastYellowSmokeTemplate =
+{
+ .tileTag = ANIM_TAG_GRAY_SMOKE,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOctazookaAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gTechnoBlastBlueChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gTechnoBlastBlueBubbleTemplate =
+{
+ .tileTag = ANIM_TAG_BUBBLE,
+ .paletteTag = ANIM_TAG_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gAnims_WaterBubbleProjectile,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSmallBubblePair
+};
+const struct SpriteTemplate gTechnoBlastBlueBlastTemplate =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL_2,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+const struct SpriteTemplate gTechnoBlastBlueSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimZapCannonSpark
+};
+const struct SpriteTemplate gTechnoBlastBlueSmokeTemplate =
+{
+ .tileTag = ANIM_TAG_GRAY_SMOKE,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOctazookaAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gTechnoBlastRedChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gTechnoBlastRedBlastTemplate =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL_2,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+const struct SpriteTemplate gTechnoBlastRedSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimZapCannonSpark
+};
+const struct SpriteTemplate gTechnoBlastRedSmokeTemplate =
+{
+ .tileTag = ANIM_TAG_GRAY_SMOKE,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOctazookaAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gTechnoBlastIceChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gTechnoBlastIceBlastTemplate =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL_2,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+const struct SpriteTemplate gTechnoBlastIceSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimZapCannonSpark
+};
+const struct SpriteTemplate gTechnoBlastIceSmokeTemplate =
+{
+ .tileTag = ANIM_TAG_GRAY_SMOKE,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOctazookaAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gTechnoBlastIceCrystalsTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineNormal_ObjBlend_8x16,
+ .anims = gAnims_IceCrystalLarge,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//secret sword
+const struct SpriteTemplate gSecretSwordBladesTemplate =
+{
+ .tileTag = ANIM_TAG_PUNISHMENT_BLADES,
+ .paletteTag = ANIM_TAG_HYDRO_PUMP,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gAnims_DragonBreathFire,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpread
+};
+
+//glaciate
+const struct SpriteTemplate gGlaciateSmokeTemplate =
+{
+ .tileTag = ANIM_TAG_BLACK_SMOKE,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBlackSmoke
+};
+
+//blue flare
+const struct SpriteTemplate gBlueFlareFlameJabTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_METAL_BITS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FlamethrowerFlame,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gBlueFlareFlameSwirlTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_METAL_BITS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FlamethrowerFlame,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+
+const struct SpriteTemplate gBlueFlareBurnTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_METAL_BITS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FlamethrowerFlame,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpread
+};
+
+//freeze shock
+const struct SpriteTemplate gFreezeShockCircleTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingShockWaveOrb
+};
+
+const struct SpriteTemplate gFreezeShockIceBallTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CHUNK,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gAnims_IceBallChunk,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+
+//ice burn
+const struct SpriteTemplate gIceBurnSmokeTemplate =
+{
+ .tileTag = ANIM_TAG_BLACK_SMOKE,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBlackSmoke
+};
+
+//icicle crash
+static const union AffineAnimCmd sSpriteAffineAnim_IcicleCrash[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 128, 1), //180 degree turn
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_IcicleCrash[] =
+{
+ sSpriteAffineAnim_IcicleCrash,
+};
+const struct SpriteTemplate gIcicleCrashSpearTemplate =
+{
+ .tileTag = ANIM_TAG_ICICLE_SPEAR,
+ .paletteTag = ANIM_TAG_ICICLE_SPEAR,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_IcicleCrash,
+ .callback = AnimFallingRock
+};
+
+//v create
+const struct SpriteTemplate gVCreateFlameTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FireBlastCross,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gVCreateRedRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gVCreateRedOrbTemplate =
+{
+ .tileTag = ANIM_TAG_ECLIPSING_ORB,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gEclipsingOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//fusion flare
+const struct SpriteTemplate gFusionFlareRedBallUpTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimWeatherBallUp
+};
+
+const struct SpriteTemplate gFusionFlareRedBallTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimStompFoot
+};
+
+const struct SpriteTemplate gFusionFlareRedBubblesTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_WaterPulseBubble,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimWaterPulseBubble
+};
+
+const struct SpriteTemplate gFusionFlareRedRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+//fusion bolt
+static const union AffineAnimCmd sSpriteAffineAnim_DrakeStrikePlayer[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd sSpriteAffineAnim_DrakeStrikeOpponent[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd* const sAffineAnimCmdTable_DrakeStriking[] = //devestating drake, fusion bolt
+{
+ sSpriteAffineAnim_DrakeStrikePlayer,
+ sSpriteAffineAnim_DrakeStrikeOpponent,
+};
+const struct SpriteTemplate gFusionBoltBallTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sAffineAnimCmdTable_DrakeStriking,
+ .callback = AnimFlyBallAttack
+};
+
+// GEN 6
+//mat block
+const struct SpriteTemplate gMatBlockGreenConversionTemplate =
+{
+ .tileTag = ANIM_TAG_CONVERSION,
+ .paletteTag = ANIM_TAG_GREEN_LIGHT_WALL,
+ .oam = &gOamData_AffineDouble_ObjBlend_8x8,
+ .anims = gConversionAnimTable,
+ .images = NULL,
+ .affineAnims = gConversionAffineAnimTable,
+ .callback = AnimConversion
+};
+
+//belch
+static const union AnimCmd sAnimCmdBerryEaten[] =
+{
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const sAnimCmdFramesBerryEaten[] =
+{
+ sAnimCmdBerryEaten,
+};
+const struct SpriteTemplate gBelchBerryTemplate =
+{
+ .tileTag = ANIM_TAG_BERRY_NORMAL,
+ .paletteTag = ANIM_TAG_BERRY_NORMAL,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = sAnimCmdFramesBerryEaten,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMissileArc
+};
+
+//forest's curse
+const struct SpriteTemplate gForestsCurseIngrainTemplate =
+{
+ .tileTag = ANIM_TAG_ROOTS,
+ .paletteTag = ANIM_TAG_ROOTS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gIngrainRootAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimWaterPulseBubble
+};
+
+//petal blizzard
+static const union AnimCmd sAnimCmd_PetalBlizzard1_0[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_JUMP(0),
+};
+static const union AnimCmd *const sAnimCmdTable_PetalBlizzard1[] =
+{
+ sAnimCmd_PetalBlizzard1_0,
+};
+const struct SpriteTemplate gPetalBlizzardTwister1Template =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = sAnimCmdTable_PetalBlizzard1,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveTwisterParticle
+};
+static const u16 sPetalBlizzardFlowerOam[] = {0x0, 0x2000,0x0800,0x0}; //todo: convert to oam data
+static const union AnimCmd sAnimCmd_PetalBlizzard2_0[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 0),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const sAnimCmdTable_PetalBlizzard2[] =
+{
+ sAnimCmd_PetalBlizzard2_0,
+};
+const struct SpriteTemplate gPetalBlizzardTwister2Template =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = (const struct OamData *) &sPetalBlizzardFlowerOam,
+ .anims = sAnimCmdTable_PetalBlizzard2,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveTwisterParticle
+};
+
+//crafty shield
+const struct SpriteTemplate gCraftyShieldPinkConversionTemplate =
+{
+ .tileTag = ANIM_TAG_CRAFTY_SHIELD,
+ .paletteTag = ANIM_TAG_CRAFTY_SHIELD,
+ .oam = &gOamData_AffineDouble_ObjBlend_8x8,
+ .anims = gConversionAnimTable,
+ .images = NULL,
+ .affineAnims = gConversionAffineAnimTable,
+ .callback = AnimConversion
+};
+
+//grassy terrain
+const struct SpriteTemplate gGrassyTerrainOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
+ .callback = AnimOrbitFast
+};
+
+const struct SpriteTemplate gGrassyTerrainStarTemplate =
+{
+ .tileTag = ANIM_TAG_GREEN_SPARKLE,
+ .paletteTag = ANIM_TAG_GREEN_SPARKLE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gMoonlightSparkleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimOrbitScatter
+};
+
+//misty terrain
+const struct SpriteTemplate gMistyTerrainOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_WATER_GUN,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
+ .callback = AnimOrbitFast
+};
+
+const struct SpriteTemplate gMistyTerrainStarTemplate =
+{
+ .tileTag = ANIM_TAG_GREEN_SPARKLE,
+ .paletteTag = ANIM_TAG_WATER_GUN,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gMoonlightSparkleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimOrbitScatter
+};
+
+//electrify
+const struct SpriteTemplate gElectrifyRingTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGuardRingAffineAnimTable,
+ .callback = SpriteCB_SurroundingRing
+};
+
+const struct SpriteTemplate gElectrifyYellowRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+//fairy wind
+const struct SpriteTemplate gFairyWindCloudTemplate =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_PINK_CLOUD,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSwiftStarAffineAnimTable,
+ .callback = AnimTranslateLinearSingleSineWave
+};
+
+//confide
+const struct SpriteTemplate gConfideBubbleTemplate =
+{
+ .tileTag = ANIM_TAG_CONFIDE,
+ .paletteTag = ANIM_TAG_CONFIDE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gMetronomeThroughtBubbleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThoughtBubble
+};
+
+//diamond storm
+const struct SpriteTemplate gDiamondStormSwirlingIceTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_Snowball,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSwirlingSnowball_Step1
+};
+
+const struct SpriteTemplate gDiamondStormBlizzardTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gAnims_BlizzardIceCrystal,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveParticleBeyondTarget
+};
+
+const struct SpriteTemplate gDiamondStormDiamondsTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineNormal_ObjBlend_8x16,
+ .anims = gAnims_IceCrystalLarge,
+ .images = NULL,
+ .affineAnims = gAffineAnims_BasicRock,
+ .callback = AnimMoveTwisterParticle
+};
+
+//steam eruption
+const struct SpriteTemplate gSteamEruptionBreathTemplate =
+{
+ .tileTag = ANIM_TAG_STEAM_ERUPTION,
+ .paletteTag = ANIM_TAG_STEAM_ERUPTION,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gAnims_DragonBreathFire,
+ .images = NULL,
+ .affineAnims = gAffineAnims_DragonBreathFire,
+ .callback = AnimDragonFireToTarget
+};
+
+//hyperspace hole
+const struct SpriteTemplate gHyperspaceHoleImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_IceCrystalHit,
+ .callback = AnimIceEffectParticle
+};
+
+//water shuriken
+const struct SpriteTemplate gWaterShurikenStarTemplate =
+{
+ .tileTag = ANIM_TAG_YELLOW_STAR,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimShadowBall
+};
+
+const struct SpriteTemplate gWaterShurikenRingTemplate =
+{
+ .tileTag = ANIM_TAG_BLUE_RING_2,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gWaterPulseRingAffineAnimTable,
+ .callback = AnimWaterPulseRing
+};
+
+const struct SpriteTemplate gWaterShurikenImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//eerie impulse
+const struct SpriteTemplate gEerieImpulseRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gHyperVoiceRingAffineAnimTable,
+ .callback = AnimHyperVoiceRing
+};
+
+const struct SpriteTemplate gEerieImpulseImpactTemplate =
+{
+ .tileTag = ANIM_TAG_GOLD_RING,
+ .paletteTag = ANIM_TAG_SPARK_H,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGrantingStars
+};
+
+//venom drench
+const struct SpriteTemplate gVenomDrenchAcidTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gAnims_PoisonProjectile,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFallingRock
+};
+
+//powder
+const struct SpriteTemplate gPowderBlackSporeTemplate =
+{
+ .tileTag = ANIM_TAG_SPORE,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gSporeParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSporeParticle
+};
+
+//geomancy
+const struct SpriteTemplate gGeomancyRingTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_GUARD_RING,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGuardRingAffineAnimTable,
+ .callback = SpriteCB_SurroundingRing
+};
+
+const struct SpriteTemplate gGeomancyYellowRageTemplate =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_PAW_PRINT,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_DragonRageFirePlume,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDragonRageFirePlume
+};
+
+const struct SpriteTemplate gGeomancyRedCellVortexTemplate =
+{
+ .tileTag = ANIM_TAG_ZYGARDE_HEXES,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+
+const struct SpriteTemplate gGeomancyGreenCellVortexTemplate =
+{
+ .tileTag = ANIM_TAG_ZYGARDE_HEXES,
+ .paletteTag = ANIM_TAG_WHIP_HIT,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+
+const struct SpriteTemplate gGeomancyBlueCellVortexTemplate =
+{
+ .tileTag = ANIM_TAG_ZYGARDE_HEXES,
+ .paletteTag = ANIM_TAG_SWEAT_BEAD,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+
+const struct SpriteTemplate gGeomancyRedCellRaiseTemplate =
+{
+ .tileTag = ANIM_TAG_ZYGARDE_HEXES,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimRaiseSprite
+};
+
+const struct SpriteTemplate gGeomancyGreenCellRaiseTemplate =
+{
+ .tileTag = ANIM_TAG_ZYGARDE_HEXES,
+ .paletteTag = ANIM_TAG_WHIP_HIT,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimRaiseSprite
+};
+
+const struct SpriteTemplate gGeomancyBlueCellRaiseTemplate =
+{
+ .tileTag = ANIM_TAG_ZYGARDE_HEXES,
+ .paletteTag = ANIM_TAG_SWEAT_BEAD,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimRaiseSprite
+};
+
+//magnetic flux
+const struct SpriteTemplate gMagneticFluxUproarTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+//happy hour
+const struct SpriteTemplate gHappyHourCoinShowerTemplate =
+{
+ .tileTag = ANIM_TAG_COIN,
+ .paletteTag = ANIM_TAG_COIN,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gCoinAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHappyHourCoinShower
+};
+
+//electric terrain
+const struct SpriteTemplate gElectricTerrainOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ELECTRIC_ORBS,
+ .paletteTag = ANIM_TAG_ELECTRIC_ORBS,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_ElectricChargingParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimOrbitFast
+};
+
+const struct SpriteTemplate gElectricTerrainFlyingBallTemplate =
+{
+ .tileTag = ANIM_TAG_ELECTRIC_ORBS,
+ .paletteTag = ANIM_TAG_ELECTRIC_ORBS,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_ElectricChargingParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimOrbitScatter
+};
+
+//celebrate
+const struct SpriteTemplate gCelebrateBagTemplate =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gMetronomeFingerAffineAnimTable,
+ .callback = AnimFollowMeFinger
+};
+
+//hold hands
+const struct SpriteTemplate gHoldHandsHeartTemplate =
+{
+ .tileTag = ANIM_TAG_MAGENTA_HEART,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPetalDanceBigFlower
+};
+
+//hold back
+const struct SpriteTemplate gHoldBackSwipeTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_SWIPE,
+ .paletteTag = ANIM_TAG_PAW_PRINT,
+ .oam = &gOamData_AffineOff_ObjNormal_64x64,
+ .anims = gAnims_RevengeBigScratch,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimRevengeScratch
+};
+
+const struct SpriteTemplate gHoldBackRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_PAW_PRINT,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gHoldBackStarsTemplate =
+{
+ .tileTag = ANIM_TAG_PAIN_SPLIT,
+ .paletteTag = ANIM_TAG_DUCK,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDizzyPunchDuck
+};
+
+//infestation
+const struct SpriteTemplate gInfestationBubbleTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_WaterPulseBubble,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+
+//oblivion wing
+static const union AffineAnimCmd sSpriteAffineAnim_GrowingRing[] =
+{
+ AFFINEANIMCMD_FRAME(8, 8, 0, 16), //Double in size
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_GrowingRing[] =
+{
+ sSpriteAffineAnim_GrowingRing,
+};
+const struct SpriteTemplate gOblivionWingBeamTemplate =
+{
+ .tileTag = ANIM_TAG_HYDRO_PUMP,
+ .paletteTag = ANIM_TAG_HYDRO_PUMP,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_GrowingRing,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+
+//thousand arrows
+const struct SpriteTemplate gThousandArrowsGreenChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+
+const struct SpriteTemplate gThousandArrowsGreenHexTemplate =
+{
+ .tileTag = ANIM_TAG_VERTICAL_HEX,
+ .paletteTag = ANIM_TAG_ZYGARDE_HEXES,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_Geyser
+};
+
+const struct SpriteTemplate gThousandArrowsGreenArrowTemplate =
+{
+ .tileTag = ANIM_TAG_NEEDLE,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMudSportDirt
+};
+
+const struct SpriteTemplate gThousandArrowsGreenDischargeTemplate =
+{
+ .tileTag = ANIM_TAG_ELECTRICITY,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_ElectricPuff,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimElectricPuff
+};
+
+//thousand waves
+const struct SpriteTemplate gThousandWavesGreenWaveTemplate =
+{
+ .tileTag = ANIM_TAG_FLYING_DIRT,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFlyingSandCrescent
+};
+
+const struct SpriteTemplate gThousandWavesGreenRecoverTemplate =
+{
+ .tileTag = ANIM_TAG_ZYGARDE_HEXES,
+ .paletteTag = ANIM_TAG_ZYGARDE_HEXES,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+
+const struct SpriteTemplate gThousandWavesGreenWheelTemplate =
+{
+ .tileTag = ANIM_TAG_ZYGARDE_HEXES,
+ .paletteTag = ANIM_TAG_ZYGARDE_HEXES,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDragonDanceOrb
+};
+
+const struct SpriteTemplate gThousandWavesRotatingImpactTemplate =
+{
+ .tileTag = ANIM_TAG_ZYGARDE_HEXES,
+ .paletteTag = ANIM_TAG_ZYGARDE_HEXES,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Whirlpool,
+ .callback = AnimParticleInVortex
+};
+
+const struct SpriteTemplate gThousandWavesPoundImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatOnMonEdge
+};
+
+//lands wrath
+const struct SpriteTemplate gLandsWrathVortexTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gAnims_WaterMudOrb,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Whirlpool,
+ .callback = AnimParticleInVortex
+};
+
+//light of ruin
+const struct SpriteTemplate gLightOfRuinPinkOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+const struct SpriteTemplate gLightOfRuinPinkDischargeTemplate =
+{
+ .tileTag = ANIM_TAG_ELECTRICITY,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_ElectricPuff,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimElectricPuff
+};
+
+const struct SpriteTemplate gLightOfRuinPinkExplosionTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//origin pulse
+const struct SpriteTemplate gOriginPulseRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+const struct SpriteTemplate gOriginPulseOrbTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDragonDanceOrb
+};
+
+const struct SpriteTemplate gOriginPulseOrbInwardTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gOriginPulseBlueImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatRandom
+};
+
+const struct SpriteTemplate gOriginPulseBasicSplatTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//precipice blades
+static const union AnimCmd sAnimCmdLargeSpike[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const sAnimCmdTable_LargeSpike[] =
+{
+ sAnimCmdLargeSpike,
+};
+const struct SpriteTemplate gPrecipiceBladesSpikeTemplate =
+{
+ .tileTag = ANIM_TAG_LARGE_SPIKE,
+ .paletteTag = ANIM_TAG_LARGE_SPIKE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x64,
+ .anims = sAnimCmdTable_LargeSpike,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_SpriteOnMonForDuration
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_LargeHailRock[] =
+{
+ AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_LargeHailRock[] =
+{
+ sSpriteAffineAnim_LargeHailRock,
+};
+const struct SpriteTemplate gPrecipiceBladesLargeSpikeTemplate =
+{
+ .tileTag = ANIM_TAG_LARGE_SPIKE,
+ .paletteTag = ANIM_TAG_LARGE_SPIKE,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x64,
+ .anims = sAnimCmdTable_LargeSpike,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_LargeHailRock,
+ .callback = SpriteCB_SpriteOnMonForDuration
+};
+
+const struct SpriteTemplate gPrecipiceBladesPlumeTemplate =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_FIRE_PLUME,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_DragonRageFirePlume,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_AnimSpriteOnSelectedMonPos
+};
+
+//dragon ascent
+static const union AffineAnimCmd sAffineAnimCmd_Drake[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1), //drake faces up
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd* const sAffineAnimCmdTable_DrakeFaceNorth[] =
+{
+ sAffineAnimCmd_Drake,
+ sAffineAnimCmd_Drake,
+};
+const struct SpriteTemplate gDragonAscentFlyUpTemplate =
+{
+ .tileTag = ANIM_TAG_DRAGON_ASCENT,
+ .paletteTag = ANIM_TAG_DRAGON_ASCENT,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sAffineAnimCmdTable_DrakeFaceNorth,
+ .callback = AnimParticleInVortex
+};
+
+const struct SpriteTemplate gDragonAscentDrakeTemplate =
+{
+ .tileTag = ANIM_TAG_DRAGON_ASCENT,
+ .paletteTag = ANIM_TAG_DRAGON_ASCENT,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sAffineAnimCmdTable_DrakeStriking,
+ .callback = AnimFlyBallAttack
+};
+
+//hyperspace fury
+const struct SpriteTemplate gHyperspaceFuryRingTemplate =
+{
+ .tileTag = ANIM_TAG_HOOPA_RING,
+ .paletteTag = ANIM_TAG_HOOPA_RING,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimFireSpiralOutward
+};
+
+const struct SpriteTemplate gHyperspaceFuryHandTemplate =
+{
+ .tileTag = ANIM_TAG_HOOPA_HAND,
+ .paletteTag = ANIM_TAG_HOOPA_HAND,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gHyperspaceFuryImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatRandom
+};
+
+// GEN 7
+//first impression
+const struct SpriteTemplate gFirstImpressionPoundTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//baneful bunker
+const struct SpriteTemplate gBanefulBunkerPoisonBubbleTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gAnims_PoisonProjectile,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSmallBubblePair
+};
+
+//spirit shackle
+const struct SpriteTemplate gSpiritShackleArrowTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRIT_ARROW,
+ .paletteTag = ANIM_TAG_SPIRIT_ARROW,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSonicBoomProjectile
+};
+
+const struct SpriteTemplate gSpiritShackleChainTemplate =
+{
+ .tileTag = ANIM_TAG_CHAIN_LINK,
+ .paletteTag = ANIM_TAG_CHAIN_LINK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThunderWave
+};
+
+//darkest lariat
+const struct SpriteTemplate gDarkestLariatImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//sparklig aria
+const struct SpriteTemplate gSparklingAriaBlueChargeTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_16x16,
+ .anims = gAnims_WaterMudOrb,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+
+const struct SpriteTemplate gSparklingAriaRainTemplate =
+{
+ .tileTag = ANIM_TAG_HYDRO_PUMP,
+ .paletteTag = ANIM_TAG_HYDRO_PUMP,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
+ .anims = gAnims_WaterBubbleProjectile,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMudSportDirt
+};
+
+const struct SpriteTemplate gSparklingAriaBubbleRainTemplate =
+{
+ .tileTag = ANIM_TAG_BUBBLE,
+ .paletteTag = ANIM_TAG_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
+ .anims = gAnims_WaterBubbleProjectile,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMudSportDirt
+};
+
+const struct SpriteTemplate gSparklingAriaBubblesTemplate =
+{
+ .tileTag = ANIM_TAG_BUBBLE,
+ .paletteTag = ANIM_TAG_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
+ .anims = gAnims_WaterBubbleProjectile,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSmallBubblePair
+};
+
+//ice hammer
+const struct SpriteTemplate gIceHammerPunchStompTemplate =
+{
+ .tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
+ .paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimStompFoot
+};
+
+const struct SpriteTemplate gIceHammerSmokesTemplate =
+{
+ .tileTag = ANIM_TAG_BLACK_SMOKE,
+ .paletteTag = ANIM_TAG_ECLIPSING_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBlackSmoke
+};
+
+//floral healing
+const struct SpriteTemplate gFloralHealingFlowerTemplate =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gPetalDanceBigFlowerAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSporeParticle
+};
+
+const struct SpriteTemplate gFloralHealingOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Whirlpool,
+ .callback = AnimParticleInVortex
+};
+
+const struct SpriteTemplate gFloralHealingLeavesTemplate =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Whirlpool,
+ .callback = AnimParticleInVortex
+};
+
+const struct SpriteTemplate gFloralHealingWindLeavesTemplate =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSweetScentPetal
+};
+
+//high horsepower
+const struct SpriteTemplate gHighHorsepowerHorseshoeTemplate =
+{
+ .tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
+ .paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gAffineAnims_MegaPunchKick,
+ .callback = AnimSpinningKickOrPunch
+};
+
+//strength sap
+const struct SpriteTemplate gStrengthSapRedSmokeTemplate =
+{
+ .tileTag = ANIM_TAG_GRAY_SMOKE,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOctazookaAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gStrengthSapRedInwardTemplate =
+{
+ .tileTag = ANIM_TAG_TEAL_ALERT,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimTealAlert
+};
+
+const struct SpriteTemplate gStrengthSapAbsorbTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gAbsorptionOrbAffineAnimTable,
+ .callback = AnimAbsorptionOrb
+};
+
+//solar blade
+const struct SpriteTemplate gSolarBladeImpactTemplate =
+{
+ .tileTag = ANIM_TAG_CLAW_SLASH,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_ClawSlash,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimClawSlash
+};
+
+//leafage
+const struct SpriteTemplate gLeafageImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//toxic thread
+const struct SpriteTemplate gToxicThreadString =
+{
+ .tileTag = ANIM_TAG_STRING,
+ .paletteTag = ANIM_TAG_STRING,
+ .oam = &gOamData_AffineOff_ObjNormal_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_ToxicThreadWrap
+};
+
+//laser focus
+const struct SpriteTemplate gLaserFocusRedEyesTemplate =
+{
+ .tileTag = ANIM_TAG_OPENING_EYE,
+ .paletteTag = ANIM_TAG_EYE_SPARKLE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOpeningEyeAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//gear up
+const struct SpriteTemplate gGearUpGearsTemplate =
+{
+ .tileTag = ANIM_TAG_GEAR,
+ .paletteTag = ANIM_TAG_GEAR,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPetalDanceBigFlower
+};
+
+//throat chop
+const struct SpriteTemplate gThroatChopRedImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//pollen puff
+const struct SpriteTemplate gPollenPuffPinkStarTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSmallBubblePair
+};
+
+const struct SpriteTemplate gPollenPuffPinkSparkleTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimZapCannonSpark
+};
+
+const struct SpriteTemplate gPollenPuffYellowSparkleTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimZapCannonSpark
+};
+
+const struct SpriteTemplate gPollenPuffSporeTemplate =
+{
+ .tileTag = ANIM_TAG_SPORE,
+ .paletteTag = ANIM_TAG_SPORE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gSporeParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThrowProjectile
+};
+
+const struct SpriteTemplate gPollenPuffImpactTemplates =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_FLAT_ROCK,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gPollenPuffHealTemplate =
+{
+ .tileTag = ANIM_TAG_BLUE_STAR,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gHealingBlueStarAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//anchor shot
+const struct SpriteTemplate gAnchorShotAnchorTemplate =
+{
+ .tileTag = ANIM_TAG_ANCHOR,
+ .paletteTag = ANIM_TAG_CHAIN_LINK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBlockX
+};
+
+const struct SpriteTemplate gAnchorShotAngledAnchorTemplate =
+{
+ .tileTag = ANIM_TAG_ANCHOR,
+ .paletteTag = ANIM_TAG_CHAIN_LINK,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimShadowBall
+};
+
+//psychic terrain
+const struct SpriteTemplate gPsychicTerrainOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
+ .callback = AnimOrbitFast
+};
+
+const struct SpriteTemplate gPsychicTerrainStarTemplate =
+{
+ .tileTag = ANIM_TAG_GREEN_SPARKLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gMoonlightSparkleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimOrbitScatter
+};
+
+//lunge
+const struct SpriteTemplate gLungeGreenChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_PsychoBoostOrb,
+ .callback = AnimPsychoBoost
+};
+
+const struct SpriteTemplate gLungeGreenBubbleTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_BUBBLES,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThrowProjectile
+};
+
+const struct SpriteTemplate gLungeGreenImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//power trip
+const struct SpriteTemplate gPowerTripFocusEnergyTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+
+const struct SpriteTemplate gPowerTripImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_PURPLE_FLAME,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//burn up
+const struct SpriteTemplate gBurnUpRedYawnTemplate =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThrowMistBall
+};
+
+//speed swap
+const struct SpriteTemplate gSpeedSwapRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gSpeedSwapCircleTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gMimicOrbAffineAnimTable,
+ .callback = AnimMimicOrb
+};
+
+const struct SpriteTemplate gSpeedSwapOrbMissileTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gMimicOrbAffineAnimTable,
+ .callback = AnimMissileArc
+};
+
+const struct SpriteTemplate gSpeedSwapOrbTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+//smart strike
+const struct SpriteTemplate gSmartStrikeGemTemplate =
+{
+ .tileTag = ANIM_TAG_POWER_GEM,
+ .paletteTag = ANIM_TAG_POWER_GEM,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gSmartStrikeImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_FLASH_CANNON_BALL,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//purify
+const struct SpriteTemplate gPurifyWhiteBallTemplate =
+{
+ .tileTag = ANIM_TAG_FLASH_CANNON_BALL,
+ .paletteTag = ANIM_TAG_FLASH_CANNON_BALL,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMissileArc
+};
+
+const struct SpriteTemplate gPurifySmokeTemplate =
+{
+ .tileTag = ANIM_TAG_BLACK_SMOKE,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBlackSmoke
+};
+
+//revelation dance
+const struct SpriteTemplate gRevelationDanceYellowOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPetalDanceBigFlower
+};
+
+const struct SpriteTemplate gRevelationDanceYellowFlowerTemplate =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gPetalDanceSmallFlowerAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPetalDanceSmallFlower
+};
+
+const struct SpriteTemplate gRevelationDanceYellowAirWaveTemplate =
+{
+ .tileTag = ANIM_TAG_AIR_WAVE,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineDouble_ObjBlend_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSonicBoomProjectile
+};
+
+const struct SpriteTemplate gRevelationDanceYellowImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+const struct SpriteTemplate gRevelationDanceYellowRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+const struct SpriteTemplate gRevelationDanceYellowDispersalTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpread
+};
+
+//core enforcer
+const struct SpriteTemplate gCoreEnforcerBlueRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gCoreEnforcerYellowRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gCoreEnforcerGreenRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gCoreEnforcerCircleChargeTemplate =
+{
+ .tileTag = ANIM_TAG_SHOCK_3,
+ .paletteTag = ANIM_TAG_SHOCK_3,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gAnims_ThunderboltOrb,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimFlashingHitSplat
+};
+
+const struct SpriteTemplate gCoreEnforcerBlueSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSparkElectricity
+};
+
+const struct SpriteTemplate gCoreEnforcerGreenChargeTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSparkElectricity
+};
+
+const struct SpriteTemplate gCoreEnforcerSnoreTemplate =
+{
+ .tileTag = ANIM_TAG_SNORE_Z,
+ .paletteTag = ANIM_TAG_SNORE_Z,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_CentredSpiderWeb
+};
+
+const struct SpriteTemplate gCoreEnforcerImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_IMPACT,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = SpriteCB_CoreEnforcerHits
+};
+
+const struct SpriteTemplate gCoreEnforcerBeamTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_CoreEnforcerBeam
+};
+
+const struct SpriteTemplate gCoreEnforcerExplosionTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_EXPLOSION,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_SpriteToCentreOfSide
+};
+
+//trop kick
+const struct SpriteTemplate gTropKickGreenFootTemplate =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimJumpKick
+};
+
+const struct SpriteTemplate gTropKickFlowerTemplate =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gPetalDanceBigFlowerAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpread
+};
+
+const struct SpriteTemplate gTropKickLeavesTemplate =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpread
+};
+
+//clanging scales
+const struct SpriteTemplate gClangingScalesPurpleMetalSoundTemplate =
+{
+ .tileTag = ANIM_TAG_METAL_SOUND_WAVES,
+ .paletteTag = ANIM_TAG_METAL_SOUND_WAVES,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGrowingRingAffineAnimTable,
+ .callback = SpriteCB_TranslateAnimSpriteToTargetMonLocationDoubles
+};
+
+//brutal swing
+const struct SpriteTemplate gBrutalSwingRandomImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatRandom
+};
+
+const struct SpriteTemplate gBrutalSwingBasicImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+//aurora veil
+const struct SpriteTemplate gAuroraVeilRingTemplate =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_GUARD_RING,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGuardRingAffineAnimTable,
+ .callback = SpriteCB_SurroundingRing
+};
+
+//shell trap
+const struct SpriteTemplate gShellTrapYellowImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+const struct SpriteTemplate gShellTrapRedImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+const struct SpriteTemplate gShellTrapFireHitsTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_Snowball,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveParticleBeyondTarget
+};
+
+//fleur cannon
+const struct SpriteTemplate gFleurCannonOrbTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+
+const struct SpriteTemplate gFleurCannonDischargeTemplate =
+{
+ .tileTag = ANIM_TAG_ELECTRICITY,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_ElectricPuff,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimElectricPuff
+};
+
+//stomping tantrum
+const struct SpriteTemplate gStompingTantrumRockTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_ROCK,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_TearDrop,
+ .callback = AnimTearDrop
+};
+
+//prismatic laser
+const struct SpriteTemplate gPrismaticLaserChargeTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+
+const struct SpriteTemplate gPrismaticLaserYellowOutwardTemplate =
+{
+ .tileTag = ANIM_TAG_GREEN_SPIKE,
+ .paletteTag = ANIM_TAG_SPARK_H,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gPrismaticLaserGreenOutwardTemplate =
+{
+ .tileTag = ANIM_TAG_GREEN_SPIKE,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gPrismaticLaserRedOutwardTemplate =
+{
+ .tileTag = ANIM_TAG_GREEN_SPIKE,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gPrismaticLaserVioletOutwardTemplate =
+{
+ .tileTag = ANIM_TAG_GREEN_SPIKE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gPrismaticLaserYellowInwardTemplate =
+{
+ .tileTag = ANIM_TAG_TEAL_ALERT,
+ .paletteTag = ANIM_TAG_SPARK_H,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gPrismaticLaserGreenInwardTemplate =
+{
+ .tileTag = ANIM_TAG_TEAL_ALERT,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gPrismaticLaserRedInwardTemplate =
+{
+ .tileTag = ANIM_TAG_TEAL_ALERT,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gPrismaticLaserVioletInwardTemplate =
+{
+ .tileTag = ANIM_TAG_TEAL_ALERT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+
+const struct SpriteTemplate gPrismaticLaserYellowRainTemplate =
+{
+ .tileTag = ANIM_TAG_NEEDLE,
+ .paletteTag = ANIM_TAG_SPARK_H,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_FallingObject
+};
+
+const struct SpriteTemplate gPrismaticLaserGreenRainTemplate =
+{
+ .tileTag = ANIM_TAG_NEEDLE,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_FallingObject
+};
+
+const struct SpriteTemplate gPrismaticLaserRedRainTemplate =
+{
+ .tileTag = ANIM_TAG_NEEDLE,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_FallingObject
+};
+
+const struct SpriteTemplate gPrismaticLaserVioletRainTemplate =
+{
+ .tileTag = ANIM_TAG_NEEDLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_FallingObject
+};
+
+//spectral thief
+const struct SpriteTemplate gSpectralThiefBlackSmokeTemplate =
+{
+ .tileTag = ANIM_TAG_GRAY_SMOKE,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOctazookaAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+const struct SpriteTemplate gSpectralThiefThiefImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_IceCrystalHit,
+ .callback = AnimIceEffectParticle
+};
+
+const struct SpriteTemplate gSpectralThiefBlackOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gMimicOrbAffineAnimTable,
+ .callback = AnimMimicOrb
+};
+
+const struct SpriteTemplate gSpectralThiefBlackBuffTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+
+//sunsteeel strike
+const struct SpriteTemplate gSunsteelStrikeBlackFlyBallTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimFlyBallUp
+};
+
+static const struct OamData sSunsteelStrikeBlastOAM =
+{
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .priority = 1, //Above sprites
+};
+static const union AffineAnimCmd sSpriteAffineAnim_SunsteelStrikeBlastEnemySide[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -64, 1), //90 degree turn
+ AFFINEANIMCMD_FRAME(0, 0, 0, 7), //Pause
+ AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd sSpriteAffineAnim_SunsteelStrikeBlastPlayerSide[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 128, 1), //180 degree turn
+ AFFINEANIMCMD_FRAME(0, 0, 0, 7), //Pause
+ AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_SunsteelStrikeBlast[] =
+{
+ sSpriteAffineAnim_SunsteelStrikeBlastEnemySide,
+ sSpriteAffineAnim_SunsteelStrikeBlastPlayerSide,
+};
+const struct SpriteTemplate gSunsteelStrikeSuperpowerTemplate =
+{
+ .tileTag = ANIM_TAG_METEOR,
+ .paletteTag = ANIM_TAG_METEOR,
+ .oam = &sSunsteelStrikeBlastOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_SunsteelStrikeBlast,
+ .callback = AnimFlyBallAttack
+};
+
+const struct SpriteTemplate gSunsteelStrikeRedBeamTemplate =
+{
+ .tileTag = ANIM_TAG_GOLD_RING,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallAttack,
+ .callback = SpriteCB_SunsteelStrikeRings
+};
+
+const struct SpriteTemplate gSunsteelStrikeYellowBeamTemplate =
+{
+ .tileTag = ANIM_TAG_GOLD_RING,
+ .paletteTag = ANIM_TAG_GOLD_RING,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallAttack,
+ .callback = SpriteCB_SunsteelStrikeRings
+};
+
+const struct SpriteTemplate gSunsteelStrikeRedImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+const struct SpriteTemplate gSunsteelStrikeRocksTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_ROCK,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_TearDrop,
+ .callback = AnimTearDrop
+};
+
+//moongeist beam
+const struct SpriteTemplate gMoongeistBeamBlueOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_WATER_GUN,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+
+const struct SpriteTemplate gMoongeistBeamPurpleOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ASSURANCE_HAND,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+
+const struct SpriteTemplate gMoongeistBeamChargeTemplate =
+{
+ .tileTag = ANIM_TAG_ELECTRIC_ORBS,
+ .paletteTag = ANIM_TAG_ELECTRIC_ORBS,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_ElectricChargingParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_MoongeistCharge
+};
+
+//zing zap
+const struct SpriteTemplate gZingZapYellowBallTemplate =
+{
+ .tileTag = ANIM_TAG_YELLOW_BALL,
+ .paletteTag = ANIM_TAG_SPARK_H,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimShadowBall
+};
+
+const struct SpriteTemplate gZingZapRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+//nature's madness
+const struct SpriteTemplate gNaturesMadnessPinkStarsTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSmallBubblePair
+};
+
+const struct SpriteTemplate gNaturesMadnessCrystalsTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gAnims_SmallBubblePair,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSmallBubblePair
+};
+
+const struct SpriteTemplate gNaturesMadnessPinkRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+const struct SpriteTemplate gNaturesMadnessGrayRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_ECLIPSING_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//mind blown
+const struct SpriteTemplate gMindBlownHeadTemplate =
+{
+ .tileTag = ANIM_TAG_BLACEPHALON_HEAD,
+ .paletteTag = ANIM_TAG_BLACEPHALON_HEAD,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = SpriteCB_MindBlownBall
+};
+
+const struct SpriteTemplate gMindBlownBlueOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_MindBlownExplosion
+};
+
+const struct SpriteTemplate gMindBlownPinkOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_PINK_HEART,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_MindBlownExplosion
+};
+
+const struct SpriteTemplate gMindBlownBlueImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_SMALL_BUBBLES,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = SpriteCB_RandomCentredHits
+};
+
+const struct SpriteTemplate gMindBlownPinkImpactTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_PINK_HEART,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = SpriteCB_RandomCentredHits
+};
+
+//plasma fists
+const struct SpriteTemplate gPlasmaFistsChargeTemplate =
+{
+ .tileTag = ANIM_TAG_SHOCK_3,
+ .paletteTag = ANIM_TAG_SHOCK_3,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gAnims_ThunderboltOrb,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+
+//photon geyser
+static const union AnimCmd sAnimCmdPhotonGeyserBeam1[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+static const union AnimCmd sAnimCmdSmiteBeam[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END
+};
+static const union AnimCmd sAnimCmdPhotonGeyserBeam2[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END
+};
+static const union AnimCmd *const sAnimCmdTable_PhotonGeyserBeam[] =
+{
+ sAnimCmdPhotonGeyserBeam1,
+ sAnimCmdSmiteBeam,
+ sAnimCmdPhotonGeyserBeam2,
+};
+static const union AffineAnimCmd sSpriteAffineAnim_DoNothing[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1), //Do nothing
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd sSpriteAffineAnim_PhotonGeyserBeam[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16), //Delay
+ AFFINEANIMCMD_FRAME(64, 64, 0, 4), //Double in size
+ //Pulsate
+ AFFINEANIMCMD_FRAME(-128, -128, 0, 1),
+ AFFINEANIMCMD_FRAME(128, 128, 0, 1),
+ AFFINEANIMCMD_JUMP(2),
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_PhotonGeyserBeam[] =
+{
+ sSpriteAffineAnim_DoNothing,
+ sSpriteAffineAnim_PhotonGeyserBeam,
+};
+const struct SpriteTemplate gPhotonGeyserBeam =
+{
+ .tileTag = ANIM_TAG_STRAIGHT_BEAM,
+ .paletteTag = ANIM_TAG_STRAIGHT_BEAM,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = sAnimCmdTable_PhotonGeyserBeam,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_PhotonGeyserBeam,
+ .callback = SpriteCB_PhotonGeyserBeam
+};
+
+const struct SpriteTemplate gPhotonGeyserChargeTemplate =
+{
+ .tileTag = ANIM_TAG_SHOCK_3,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gAnims_ThunderboltOrb,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+
+const struct SpriteTemplate gPhotonGeyserSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSparkElectricity
+};
+
+const struct SpriteTemplate gPhotonGeyserZapCannonSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimZapCannonSpark
+};
+
+const struct SpriteTemplate gPhotonGeyserWhiteRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+const struct SpriteTemplate gPhotonGeyserYellowRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing
+};
+
+const struct SpriteTemplate gPhotonGeyserZapBallTemplate =
+{
+ .tileTag = ANIM_TAG_YELLOW_BALL,
+ .paletteTag = ANIM_TAG_YELLOW_BALL,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+
+
+// GEN 8
+//snipe shot
+static const union AffineAnimCmd sSpriteAffineAnim_LargeSpikePointedLeft[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 32, 1), //45 degree turn
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_LargeSpikePointedRight[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -32, 1), //45 degree turn
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_LargeSpike[] =
+{
+ sSpriteAffineAnim_LargeSpikePointedLeft,
+ sSpriteAffineAnim_LargeSpikePointedRight,
+};
+
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_SnipeShot[] =
+{
+ sSpriteAffineAnim_LargeSpikePointedRight,
+};
+static const union AnimCmd sAnimCmdSnipeShot[] =
+{
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const sAnimCmdTable_SnipeShot[] =
+{
+ sAnimCmdSnipeShot,
+};
+const struct SpriteTemplate gSnipeShotBallTemplate = //used in aura sphere
+{
+ .tileTag = ANIM_TAG_IMPACT_2,
+ .paletteTag = ANIM_TAG_IMPACT_2,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = sAnimCmdTable_SnipeShot,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_SnipeShot,
+ .callback = AnimShadowBall
+};
+
+//jaw lock
+const struct SpriteTemplate gJawLockTeethTemplate =
+{
+ .tileTag = ANIM_TAG_SHARP_TEETH,
+ .paletteTag = ANIM_TAG_SHARP_TEETH,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Bite,
+ .callback = SpriteCB_LockingJaw
+};
+
+//stuff cheeks
+static const union AnimCmd sAnimCmdBerryChomp[] =
+{
+ ANIMCMD_FRAME(0, 0x30),
+ ANIMCMD_FRAME(0, 0x25),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const sAnimCmdTable_BerryChomp[] =
+{
+ sAnimCmdBerryChomp,
+};
+const struct SpriteTemplate gFloatingBerryTemplate =
+{
+ .tileTag = ANIM_TAG_BERRY_NORMAL,
+ .paletteTag = ANIM_TAG_BERRY_NORMAL,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = sAnimCmdTable_BerryChomp,
+ .images = NULL,
+ .affineAnims = gMetronomeFingerAffineAnimTable,
+ .callback = AnimMetronomeFinger
+};
+
+//no retreat
+static const struct OamData sPyroBallFlamesOAM =
+{
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .priority = 1, //Above sprites
+};
+const struct SpriteTemplate gNoRetreatFlameTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &sPyroBallFlamesOAM,
+ .anims = gAnims_DragonBreathFire,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_SpriteOnMonForDuration
+};
+
+//magic powder
+const struct SpriteTemplate gMagicPowderBluePowderTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_POWDER,
+ .paletteTag = ANIM_TAG_WATER_GUN,
+ .oam = &gOamData_AffineOff_ObjNormal_8x16,
+ .anims = gPowderParticlesAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle
+};
+
+//dreepy missile
+const struct SpriteTemplate gDreepyMissileTemplate =
+{
+ .tileTag = ANIM_TAG_DREEPY,
+ .paletteTag = ANIM_TAG_DREEPY,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimShadowBall
+};
+
+//bolt beak
+const struct SpriteTemplate gBoltBeakBlueSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_ELECTRICITY,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSparkElectricity
+};
+
+const struct SpriteTemplate gBoltBeakBlueFlashingSparkTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_ELECTRICITY,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimSparkElectricityFlashing
+};
+
+//fishious rend
+static const struct OamData sFishiousRendTeethOam =
+{
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .priority = 1, //Above sprites
+};
+const struct SpriteTemplate gFishiousRendTeethTemplate =
+{
+ .tileTag = ANIM_TAG_SHARP_TEETH,
+ .paletteTag = ANIM_TAG_SHARP_TEETH,
+ .oam = &sFishiousRendTeethOam,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_LeftRightSlice
+};
+
+//clangorous soul
+const struct SpriteTemplate gClangorousSoulBlueBuffTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+
+const struct SpriteTemplate gClangorousSoulPurpleBuffTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+
+const struct SpriteTemplate gClangorousSoulWhiteBuffTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+
+const struct SpriteTemplate gClangorousSoulRedFistTemplate =
+{
+ .tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimJumpKick
+};
+
+const struct SpriteTemplate gClangorousSoulRedRingTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+//pyro ball
+static const struct OamData sPyroBallRockOAM =
+{
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .priority = 1, //Above sprites
+};
+const struct SpriteTemplate gPyroBallRockTemplate =
+{
+ .tileTag = ANIM_TAG_FLAT_ROCK,
+ .paletteTag = ANIM_TAG_FLAT_ROCK,
+ .oam = &sPyroBallRockOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PyroBallRockBounce
+};
+
+const struct SpriteTemplate gPyroBallBurningRockTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &sPyroBallFlamesOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PyroBallRockBounce
+};
+
+const struct SpriteTemplate gPyroBallFlamesUpTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &sPyroBallFlamesOAM,
+ .anims = gAnims_DragonBreathFire,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PyroBallRockBounce
+};
+
+const struct SpriteTemplate gPyroBallEmberBallTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &sPyroBallFlamesOAM,
+ .anims = gAnims_DragonBreathFire,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PyroBallLaunch
+};
+
+//aura wheel
+const struct SpriteTemplate gAuraWheelBlueElectricityTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimFireSpiralOutward
+};
+
+const struct SpriteTemplate gAuraWheelRedElectricityTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_SPARK,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimFireSpiralOutward
+};
+
+//breaking swipe
+const struct SpriteTemplate gBreakingSwipeCenteredElectricity =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_CentredElectricity
+};
+
+//branch poke
+const struct SpriteTemplate gBranchPokeBranchTemplate =
+{
+ .tileTag = ANIM_TAG_BRANCH,
+ .paletteTag = ANIM_TAG_BRANCH,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimShadowBall
+};
+
+//apple acid
+const struct SpriteTemplate gAppleAcidFloatingAppleTemplate =
+{
+ .tileTag = ANIM_TAG_APPLE,
+ .paletteTag = ANIM_TAG_APPLE,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gMetronomeFingerAffineAnimTable,
+ .callback = AnimMetronomeFinger
+};
+
+const struct SpriteTemplate gAppleAcidLaunchTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gAnims_PoisonProjectile,
+ .images = NULL,
+ .affineAnims = gAffineAnims_PoisonProjectile,
+ .callback = SpriteCB_AcidLaunchSingleTarget
+};
+
+const struct SpriteTemplate gAppleAcidDripTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gAnims_AcidPoisonDroplet,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Droplet,
+ .callback = SpriteCB_AcidDripSingleTarget
+};
+
+//grav apple
+static const struct OamData sAppleOAM =
+{
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .priority = 1, //Above sprites
+};
+const struct SpriteTemplate gGravAppleSmallApple =
+{
+ .tileTag = ANIM_TAG_APPLE,
+ .paletteTag = ANIM_TAG_APPLE,
+ .oam = &sAppleOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_FallingObject
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_ScaledApple[] =
+{
+ AFFINEANIMCMD_FRAME(64, 64, 0, 10), //Quadruple in size
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_ScaledApple[] =
+{
+ sSpriteAffineAnim_ScaledApple,
+};
+const struct SpriteTemplate gGravAppleLargeApple =
+{
+ .tileTag = ANIM_TAG_APPLE,
+ .paletteTag = ANIM_TAG_APPLE,
+ .oam = &sAppleOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_ScaledApple,
+ .callback = SpriteCB_FallingObject
+};
+
+//strange steam
+const struct SpriteTemplate gStrangeSteamPinkCloudTemplate =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_PINK_CLOUD,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimDirtScatter
+};
+
+const struct SpriteTemplate gStrangeSteamGreenCloudTemplate =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_FINGER,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimDirtScatter
+};
+
+const struct SpriteTemplate gStrangeSteamBlueCloudTemplate =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_WATER_GUN,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimDirtScatter
+};
+
+//life dew
+static const union AnimCmd sAnimCmdWaterDropletDrip[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_END,
+};
+static const union AnimCmd sAnimCmdWaterDropletSplash[] =
+{
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_FRAME(112, 10),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const sAnimCmdWaterDroplet[] =
+{
+ sAnimCmdWaterDropletDrip,
+ sAnimCmdWaterDropletSplash,
+};
+const struct SpriteTemplate gLifeDewDropletTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_DROPLET,
+ .paletteTag = ANIM_TAG_WATER_DROPLET,
+ .oam = &sAppleOAM,
+ .anims = sAnimCmdWaterDroplet,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_WaterDroplet
+};
+
+const struct SpriteTemplate gLifeDewSpecialOrbsTemplate =
+{
+ .tileTag = ANIM_TAG_BLUE_STAR,
+ .paletteTag = ANIM_TAG_BLUE_STAR,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gHealingBlueStarAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_AnimSpriteOnSelectedMonPos
+};
+
+//obstruct
+const struct SpriteTemplate gObstructCrossTemplate =
+{
+ .tileTag = ANIM_TAG_OBSTRUCT_CROSS,
+ .paletteTag = ANIM_TAG_OBSTRUCT_CROSS,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCrossImpact
+};
+
+//meteor assault
+static const struct OamData sGrowingSuperpowerOAM =
+{
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .priority = 2,
+};
+static const union AffineAnimCmd sSpriteAffineAnim_GrowingSuperpowerEnemyAttack[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 128, 1), //180 degree turn
+ AFFINEANIMCMD_FRAME(0, 0, 0, 2), //Pause
+ AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd sSpriteAffineAnim_GrowingSuperpowerPlayerAttack[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0, 2), //Pause
+ AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_GrowingSuperpower[] =
+{
+ sSpriteAffineAnim_GrowingSuperpowerPlayerAttack,
+ sSpriteAffineAnim_GrowingSuperpowerEnemyAttack,
+};
+const struct SpriteTemplate gGrowingSuperpowerTemplate = //used in breakneck blitz
+{
+ .tileTag = ANIM_TAG_METEOR,
+ .paletteTag = ANIM_TAG_METEOR,
+ .oam = &sGrowingSuperpowerOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
+ .callback = SpriteCB_GrowingSuperpower
+};
+
+//steel beam
+const struct SpriteTemplate gSteelBeamSpikeShardTemplate =
+{
+ .tileTag = ANIM_TAG_SPIKES,
+ .paletteTag = ANIM_TAG_SPIKES,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_ShadowBall,
+ .callback = AnimDirtScatter
+};
+
+// Z MOVES
+//activate
+const struct SpriteTemplate gZMoveSymbolSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_Z_MOVE_SYMBOL,
+ .paletteTag = ANIM_TAG_Z_MOVE_SYMBOL,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_LusterPurgeCircle,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gBlueZMoveEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_SWEAT_BEAD,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy,
+};
+const struct SpriteTemplate gGreenZMoveEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_WHIP_HIT,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy,
+};
+const struct SpriteTemplate gYellowZMoveEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_PAW_PRINT,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy,
+};
+// breakneck blitz
+const struct SpriteTemplate gBreakneckBlitzDanceSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_HOLLOW_ORB,
+ .paletteTag = ANIM_TAG_FLAT_ROCK,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDragonDanceOrb
+};
+const struct SpriteTemplate gBreakneckBlitzHitSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_FLAT_ROCK,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+// all out pummelling
+const struct SpriteTemplate gAllOutPummelingOnslaughtSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_IMPACT,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimJumpKick
+};
+// supersonic skystrike
+static const union AffineAnimCmd sSupersonicSkystrikeAffinePlayerSide[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd sSupersonicSkystrikeAffineOpponentSide[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd* const sSupersonicSkystrikeAffineAnimTable[] = {
+ sSupersonicSkystrikeAffinePlayerSide,
+ sSupersonicSkystrikeAffineOpponentSide,
+};
+const struct SpriteTemplate gSupersonicSkystrikeFlySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BIRD,
+ .paletteTag = ANIM_TAG_BIRD,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSupersonicSkystrikeAffineAnimTable,
+ .callback = AnimFlyBallAttack
+};
+//acid downpour
+const struct SpriteTemplate gAcidDownpourReversalSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimReversalOrb
+};
+const struct SpriteTemplate gAcidDownpourAuraSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+//tectonic rage
+const struct SpriteTemplate gTectonicRageBlastBurnSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_FIRE_PLUME,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FirePlume,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBlastBurnTargetPlume
+};
+const struct SpriteTemplate gTectonicRageExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_EXPLOSION_2,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// continental crush
+const struct SpriteTemplate gContinentalCrushNeedleArmSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROCKS,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FlyingRock,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+const struct SpriteTemplate gContinentalCrushBigRockStompSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_REALLY_BIG_ROCK,
+ .paletteTag = ANIM_TAG_REALLY_BIG_ROCK,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_LargeHailRock,
+ .callback = SpriteCB_FallingObject
+};
+const struct SpriteTemplate gContinentalCrushFocusEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+const struct SpriteTemplate gContinentalCrushGrowingRockSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_REALLY_BIG_ROCK,
+ .paletteTag = ANIM_TAG_REALLY_BIG_ROCK,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gContinentalCrushEruptionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROCKS,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEruptionFallingRock
+};
+
+// savage spin out
+const struct SpriteTemplate gSavageSpinOutStringBlastSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_STRING,
+ .paletteTag = ANIM_TAG_STRING,
+ .oam = &gOamData_AffineOff_ObjNormal_64x32,
+ .anims = gAffineAnims_AirWaveCrescent,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimAirWaveCrescent
+};
+const struct SpriteTemplate gSavageSpinOutCacoonSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_COCOON,
+ .paletteTag = ANIM_TAG_COCOON,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Bite,
+ .callback = AnimBite
+};
+const struct SpriteTemplate gSavageSpinOutGreenChargeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gSavageSpinOutGreenCutSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gCuttingSliceAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCuttingSlice
+};
+const struct SpriteTemplate gSavageSpinOutWhiteExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// never ending nightmare
+const struct SpriteTemplate gNeverEndingNightmareRingAttackerSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gNeverEndingNightmareRingTargetSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gNeverEndingNightmareFocusEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+const struct SpriteTemplate gNeverEndingNightmareHandSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ASSURANCE_HAND,
+ .paletteTag = ANIM_TAG_ASSURANCE_HAND,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+const struct SpriteTemplate gNeverEndingNightmareBlastBurnSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FirePlume,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBlastBurnTargetPlume
+};
+const struct SpriteTemplate gNeverEndingNightmareGeyserHexSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_VERTICAL_HEX,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_GeyserTarget
+};
+const struct SpriteTemplate gNeverEndingNightmareExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// corkscrew crash
+const struct SpriteTemplate gCorkscrewCrashMetalBitSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIKES,
+ .paletteTag = ANIM_TAG_SPIKES,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_TearDrop,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gCorkscrewCrashChargeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CORKSCREW,
+ .paletteTag = ANIM_TAG_CORKSCREW,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gCorkscrewCrashCorkscrewFlyUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CORKSCREW,
+ .paletteTag = ANIM_TAG_CORKSCREW,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimParticleInVortex
+};
+static const union AffineAnimCmd sCorkscrewCrashFlyDownAffineOpponentSide[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x80, 1),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd* const sCorkscrewCrashFlyDownAffineAnimTable[] = {
+ sCorkscrewCrashFlyDownAffineOpponentSide,
+};
+const struct SpriteTemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CORKSCREW,
+ .paletteTag = ANIM_TAG_CORKSCREW,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sCorkscrewCrashFlyDownAffineAnimTable,
+ .callback = AnimStompFoot
+};
+static const union AffineAnimCmd sCorkscrewCrashStrikePlayerAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd sCorkscrewCrashStrikeTargetAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sCorkscrewCrashStrikeAffineAnimTable[] = {
+ sCorkscrewCrashStrikePlayerAffineAnims,
+ sCorkscrewCrashStrikeTargetAffineAnims,
+};
+const struct SpriteTemplate gCorkscrewCrashStrikeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CORKSCREW,
+ .paletteTag = ANIM_TAG_CORKSCREW,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sCorkscrewCrashStrikeAffineAnimTable,
+ .callback = AnimFlyBallAttack
+};
+static const union AffineAnimCmd sCorkscrewCrashLeftAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x40, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sCorkscrewCrashLeftAffineAnimTable[] = {
+ sCorkscrewCrashLeftAffineAnims,
+};
+const struct SpriteTemplate gCorkscrewCrashLeftUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CORKSCREW,
+ .paletteTag = ANIM_TAG_CORKSCREW,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sCorkscrewCrashLeftAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+const struct SpriteTemplate gCorkscrewCrashLeftDownSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CORKSCREW,
+ .paletteTag = ANIM_TAG_CORKSCREW,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sCorkscrewCrashLeftAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+static const union AffineAnimCmd sCorkscrewCrashRightUpAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sCorkscrewCrashRightUpAffineAnimTable[] = {
+ sCorkscrewCrashRightUpAffineAnims,
+};
+const struct SpriteTemplate gCorkscrewCrashRightUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CORKSCREW,
+ .paletteTag = ANIM_TAG_CORKSCREW,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sCorkscrewCrashRightUpAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+static const union AffineAnimCmd sCorkscrewCrashRightDownAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xba, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sCorkscrewCrashRightDownAffineAnimTable[] = {
+ sCorkscrewCrashRightDownAffineAnims,
+};
+const struct SpriteTemplate gCorkscrewCrashRightDownSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CORKSCREW,
+ .paletteTag = ANIM_TAG_CORKSCREW,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sCorkscrewCrashRightDownAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+
+// inferno overdrive
+const struct SpriteTemplate gInfernoOverdriveSuperpowerSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_METEOR,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &sGrowingSuperpowerOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
+ .callback = SpriteCB_GrowingSuperpower
+};
+const struct SpriteTemplate gInfernoOverdriveChargeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gInfernoOverdriveExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_EXPLOSION_2,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// hydro vortex
+const struct SpriteTemplate gHydroVortexSuperpowerSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_METEOR,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &sGrowingSuperpowerOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
+ .callback = SpriteCB_GrowingSuperpower
+};
+const struct SpriteTemplate gHydroVortexHurricaneSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GUST,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_32x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEllipticalGust
+};
+const struct SpriteTemplate gHydroVortexImpactSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+
+// bloom doom
+const struct SpriteTemplate gBloomDoomPetalSpinSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gPetalDanceBigFlowerAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireSpiralOutward
+};
+const struct SpriteTemplate gBloomDoomGreenChargeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gBloomDoomHurricaneSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GUST,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_32x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEllipticalGustAttacker,
+};
+const struct SpriteTemplate gBloomDoomFlowerGeyserSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gPetalDanceBigFlowerAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_Geyser
+};
+const struct SpriteTemplate gBloomDoomGreenBeamSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+const struct SpriteTemplate gBloomDoomPetalStarSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gPetalDanceBigFlowerAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimNeedleArmSpike
+};
+const struct SpriteTemplate gBloomDoomExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// gigavolt havoc
+const struct SpriteTemplate gGigavoltHavocChargingSpearSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_HAVOC_SPEAR,
+ .paletteTag = ANIM_TAG_HAVOC_SPEAR,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gGigavoltHavocLaunchSpearSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_HAVOC_SPEAR,
+ .paletteTag = ANIM_TAG_HAVOC_SPEAR,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSuperpowerFireball
+};
+const struct SpriteTemplate gGigavoltHavocRingsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gGigavoltHavocGeyserSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_VERTICAL_HEX,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_GeyserTarget
+};
+
+// shattered psyche
+const struct SpriteTemplate gShatteredPsycheReflectHitSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BLUE_LIGHT_WALL,
+ .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+const struct SpriteTemplate gShatteredPsychePinkChargeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gShatteredPsycheRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// subzero slammer
+const struct SpriteTemplate gSubzeroSlammerIceSpinSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineNormal_ObjBlend_8x16,
+ .anims = gAnims_IceCrystalLarge,
+ .images = NULL,
+ .affineAnims = gAffineAnims_IceCrystalHit,
+ .callback = AnimFireSpiralOutward
+};
+const struct SpriteTemplate gSubzeroSlammerExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_EXPLOSION_2,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gSubzeroSlammerIceSwirlSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ICE_CRYSTALS,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineNormal_ObjBlend_8x16,
+ .anims = gAnims_IceCrystalLarge,
+ .images = NULL,
+ .affineAnims = gAffineAnims_IceCrystalHit,
+ .callback = AnimParticleInVortex
+};
+
+// devastating drake
+static const union AffineAnimCmd sDevastatingDrakeStrikePlayer[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd sDevastatingDrakeStrikeOpponent[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sDevastatingDrakeStrikeAffineAnimTable[] = {
+ sDevastatingDrakeStrikePlayer,
+ sDevastatingDrakeStrikeOpponent,
+};
+static const union AffineAnimCmd sDevastatingDrakeFlyUpAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sDevastatingDrakeFlyUpAffineAnimTable[] = {
+ sDevastatingDrakeFlyUpAffineAnims,
+ sDevastatingDrakeFlyUpAffineAnims
+};
+static const union AffineAnimCmd sDevastatingDrakeRightAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sDevastatingDrakeRightAffineAnimTable[] = {
+ sDevastatingDrakeRightAffineAnims,
+ sDevastatingDrakeRightAffineAnims
+};
+static const union AffineAnimCmd sDevastatingDrakeLeftAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x40, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sDevastatingDrakeLeftAffineAnimTable[] = {
+ sDevastatingDrakeLeftAffineAnims,
+ sDevastatingDrakeLeftAffineAnims,
+};
+const struct SpriteTemplate gDevastatingDrakePurpleEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+const struct SpriteTemplate gDevastatingDrakeShockwaveSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingShockWaveOrb
+};
+const struct SpriteTemplate gDevastatingDrakeDrakeUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_DRAKE,
+ .paletteTag = ANIM_TAG_PURPLE_DRAKE,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sDevastatingDrakeFlyUpAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gDevastatingDrakeRightSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_DRAKE,
+ .paletteTag = ANIM_TAG_PURPLE_DRAKE,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sDevastatingDrakeRightAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+const struct SpriteTemplate gDevastatingDrakeLeftSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_DRAKE,
+ .paletteTag = ANIM_TAG_PURPLE_DRAKE,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sDevastatingDrakeLeftAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+const struct SpriteTemplate gDevastatingDrakeStrikeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_DRAKE,
+ .paletteTag = ANIM_TAG_PURPLE_DRAKE,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sDevastatingDrakeStrikeAffineAnimTable,
+ .callback = AnimFlyBallAttack
+};
+const struct SpriteTemplate gDevastatingDrakePurpleBlastSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_FIRE_PLUME,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FirePlume,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBlastBurnTargetPlume
+};
+const struct SpriteTemplate gDevastatingDrakeHexSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_VERTICAL_HEX,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_Geyser
+};
+const struct SpriteTemplate gDevastatingDrakeExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_EXPLOSION,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gDevastatingDrakeExplosion2SpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_EXPLOSION_2,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// black hole eclipse
+const struct SpriteTemplate gBlackHoleEclipseShockwaveSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_BLACK_BALL_2,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingShockWaveOrb
+};
+const struct SpriteTemplate gBlackHoleEclipseBlueRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gBlackHoleEclipseBlackRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gBlackHoleEclipseRedExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gBlackHoleEclipseWispSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WISP_ORB,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gAnims_WillOWispOrb,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimWillOWispOrb
+};
+const struct SpriteTemplate gBlackHoleEclipseRedRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+static const union AffineAnimCmd gGrowingBackHoleTargetAffineCmds[] = {
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -10, 0x88),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd *const gGrowingBlackHoleTargetAffineAnimTable[] = {
+ gGrowingBackHoleTargetAffineCmds,
+};
+const struct SpriteTemplate gBlackHoleEclipseHoleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SHADOW_BALL,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGrowingBlackHoleTargetAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+static const union AffineAnimCmd gShrinkingBlackHoleAffineCmds[] = {
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x10, -0x10, 0xf6, 8),
+ AFFINEANIMCMD_END_ALT(1),
+};
+static const union AffineAnimCmd *const gShrinkingBlackHoleAffineAnimTable[] = {
+ gShrinkingBlackHoleAffineCmds,
+};
+const struct SpriteTemplate gBlackHoleEclipseHoleShrinkSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SHADOW_BALL,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gShrinkingBlackHoleAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+static const union AffineAnimCmd gGrowingBackHoleAffineCmds[] = {
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -10, 0x48),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd *const gGrowingBlackHoleAffineAnimTable[] = {
+ gGrowingBackHoleAffineCmds,
+};
+const struct SpriteTemplate gBlackHoleEclipseHoleUserSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SHADOW_BALL,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gGrowingBlackHoleAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gTargetTwinkleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_4,
+ .paletteTag = ANIM_TAG_SPARKLE_4,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = sAnims_SpinningSparkle,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_TwinkleOnBattler
+};
+
+// twinkle tackle
+static const union AffineAnimCmd sTwinkleTackleStarPlayerAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(8, 8, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0x0, 0x1e),
+ AFFINEANIMCMD_END_ALT(1),
+};
+static const union AffineAnimCmd sTwinkleTackleStarOpponentAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(8, 8, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0xf),
+ AFFINEANIMCMD_END_ALT(1),
+};
+static const union AffineAnimCmd *const sTwinkleTackleStarAffineAnimTable[] = {
+ sTwinkleTackleStarPlayerAffineAnims,
+ sTwinkleTackleStarOpponentAffineAnims
+};
+const struct SpriteTemplate gTwinkleTacklePinkStarSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGrantingStars
+};
+const struct SpriteTemplate gTwinkleTacklePinkRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gTwinkleTackleStarGrowSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_YELLOW_STAR,
+ .paletteTag = ANIM_TAG_YELLOW_STAR,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sTwinkleTackleStarAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gTwinkleTackleTwinkleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_4,
+ .paletteTag = ANIM_TAG_SPARKLE_4,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = sAnims_SpinningSparkle,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_TwinkleOnBattler
+};
+const struct SpriteTemplate gTwinkleTackleDigStarSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_YELLOW_STAR,
+ .paletteTag = ANIM_TAG_YELLOW_STAR,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDirtPlumeParticle
+};
+const struct SpriteTemplate gTwinkleTackleYellowImpactSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_YELLOW_STAR,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+const struct SpriteTemplate gTwinkleTackleImpactStarsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PAIN_SPLIT,
+ .paletteTag = ANIM_TAG_YELLOW_STAR,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDizzyPunchDuck
+};
+
+// catastrokpika
+const struct SpriteTemplate gCatastrokpikaSuperpowerSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_METEOR,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &sGrowingSuperpowerOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
+ .callback = SpriteCB_GrowingSuperpower
+};
+
+// 10e6 volt thunderbolt
+const struct SpriteTemplate g10MillionVoltBoltYellowFlySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimFlyBallUp
+};
+const struct SpriteTemplate g10MillionVoltBoltShockwaveSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingShockWaveOrbOnTarget,
+};
+const struct SpriteTemplate g10MillionVoltBoltRedBeamSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+const struct SpriteTemplate g10MillionVoltBoltBlueBeamSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+const struct SpriteTemplate g10MillionVoltBoltPinkBeamSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_BERRY_EATEN,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+const struct SpriteTemplate g10MillionVoltBoltYellowBeamSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ELECTRIC_ORBS,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+const struct SpriteTemplate g10MillionVoltBoltGreenBeamSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+const struct SpriteTemplate g10MillionVoltBoltPurpleBeamSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+
+// stoked sparksurfer
+const struct SpriteTemplate gStokedSparksurferFlySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_SPARK_2,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimFlyBallUp
+};
+
+// extreme evoboost
+const struct SpriteTemplate gExtremeEvoboostRedChargeUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gExtremeEvoboostPinkChargeUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_BERRY_EATEN,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gExtremeEvoboostIceChargeUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gExtremeEvoboostBlackChargeUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_WISP_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gExtremeEvoboostBlueChargeUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gExtremeEvoboostPurpleChargeUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gExtremeEvoboostYellowChargeUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gExtremeEvoboostGreenChargeUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gExtremeEvoboostRedChargeCircleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimExtremeEvoboostCircle
+};
+const struct SpriteTemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_BERRY_EATEN,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimExtremeEvoboostCircle
+};
+const struct SpriteTemplate gExtremeEvoboostIceChargeCircleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimExtremeEvoboostCircle
+};
+const struct SpriteTemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_WISP_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimExtremeEvoboostCircle
+};
+const struct SpriteTemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimExtremeEvoboostCircle
+};
+const struct SpriteTemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimExtremeEvoboostCircle
+};
+const struct SpriteTemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimExtremeEvoboostCircle
+};
+const struct SpriteTemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimExtremeEvoboostCircle
+};
+const struct SpriteTemplate gExtremeEvoboostRedStockpileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+const struct SpriteTemplate gExtremeEvoboostPinkStockpileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_BERRY_EATEN,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+const struct SpriteTemplate gExtremeEvoboostIceStockpileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_ICE_CHUNK,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+const struct SpriteTemplate gExtremeEvoboostBlackStockpileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_WISP_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+const struct SpriteTemplate gExtremeEvoboostBlueStockpileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+const struct SpriteTemplate gExtremeEvoboostPurpleStockpileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+const struct SpriteTemplate gExtremeEvoboostYellowStockpileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+const struct SpriteTemplate gExtremeEvoboostGreenStockpileSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
+ .callback = AnimPowerAbsorptionOrb
+};
+
+// pulverizing pancake
+const struct SpriteTemplate gPulverizingPancakeRedDetectSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_4,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = sAnims_SpinningSparkle,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpinningSparkle
+};
+const struct SpriteTemplate gPulverizingPancakeExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_ELECTRIC_ORBS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gPulverizingPancakeYellowRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_ELECTRIC_ORBS,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// genesis supernova
+const struct SpriteTemplate gGenesisSupernovaOrbRiseSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_JAB,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gAnims_PoisonProjectile,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Bubble,
+ .callback = AnimAssistPawprint
+};
+const struct SpriteTemplate gGenesisSupernovaReversalSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_JAB,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimReversalOrb
+};
+const struct SpriteTemplate gGenesisSupernovaSpinUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_JAB,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gGenesisSupernovaChargeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_POISON_JAB,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gGenesisSupernovaSuperpowerSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_METEOR,
+ .paletteTag = ANIM_TAG_WISP_ORB,
+ .oam = &sGrowingSuperpowerOAM,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
+ .callback = SpriteCB_GrowingSuperpower
+};
+const struct SpriteTemplate gGenesisSupernovaBubbleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_POISON_JAB,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gAnims_PoisonProjectile,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Bubble,
+ .callback = AnimBubbleEffect
+};
+const struct SpriteTemplate gGenesisSupernovaExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_WISP_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// sinister arrow raid
+static const union AffineAnimCmd sArrowRaidFlyStrikePlayerAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd sArrowRaidFlyStrikeOpponentAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidFlyStrikeAffineAnimTable[] = {
+ sArrowRaidFlyStrikePlayerAffineAnims,
+ sArrowRaidFlyStrikeOpponentAffineAnims
+};
+static const union AffineAnimCmd sArrowRaidFlyRightAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidFlyRightAffineAnimTable[] = {
+ sArrowRaidFlyRightAffineAnims,
+ sArrowRaidFlyRightAffineAnims
+};
+static const union AffineAnimCmd sArrowRaidFlyLeftAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x40, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidFlyLeftAffineAnimTable[] = {
+ sArrowRaidFlyLeftAffineAnims,
+ sArrowRaidFlyLeftAffineAnims
+};
+const struct SpriteTemplate gArrowRaidExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gArrowRaidFlyUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimFlyBallUp
+};
+const struct SpriteTemplate gArrowRaidFlyRightSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BIRD,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidFlyRightAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+const struct SpriteTemplate gArrowRaidFlyLeftSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BIRD,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidFlyLeftAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+const struct SpriteTemplate gArrowRaidFlyStrikeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BIRD,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidFlyStrikeAffineAnimTable,
+ .callback = AnimFlyBallAttack
+};
+static const union AffineAnimCmd sArrowRaidArrowUpAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xa0, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidArrowUpAffineAnimTable[] = {
+ sArrowRaidArrowUpAffineAnims,
+};
+const struct SpriteTemplate gArrowRaidArrowUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRIT_ARROW,
+ .paletteTag = ANIM_TAG_SPIRIT_ARROW,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidArrowUpAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+static const union AffineAnimCmd sArrowRaidArrowRightUpAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x75, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidArrowRightUpAffineAnimTable[] = {
+ sArrowRaidArrowRightUpAffineAnims,
+};
+const struct SpriteTemplate gArrowRaidRightUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRIT_ARROW,
+ .paletteTag = ANIM_TAG_SPIRIT_ARROW,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidArrowRightUpAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+static const union AffineAnimCmd sArrowRaidRightDownAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x60, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidRightDownAffineAnimTable[] = {
+ sArrowRaidRightDownAffineAnims,
+};
+const struct SpriteTemplate gArrowRaidRightDownSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRIT_ARROW,
+ .paletteTag = ANIM_TAG_SPIRIT_ARROW,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidRightDownAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+static const union AffineAnimCmd sArrowRaidArrowLeftUpAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xe0, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidLeftUpAffineAnimTable[] = {
+ sArrowRaidArrowLeftUpAffineAnims,
+};
+const struct SpriteTemplate gArrowRaidLeftUpSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRIT_ARROW,
+ .paletteTag = ANIM_TAG_SPIRIT_ARROW,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidLeftUpAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+static const union AffineAnimCmd sArrowRaidFaceUpLeftAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xe0, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidFaceUpLeftAffineAnimTable[] = {
+ sArrowRaidFaceUpLeftAffineAnims,
+};
+const struct SpriteTemplate gArrowRaidFaceUpLeftSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRIT_ARROW,
+ .paletteTag = ANIM_TAG_SPIRIT_ARROW,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidFaceUpLeftAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+static const union AffineAnimCmd sArrowRaidArrowFaceRightAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x60, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidArrowFaceRightAffineAnimTable[] = {
+ sArrowRaidArrowFaceRightAffineAnims
+};
+const struct SpriteTemplate gArrowRaidRightSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRIT_ARROW,
+ .paletteTag = ANIM_TAG_SPIRIT_ARROW,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidArrowFaceRightAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+static const union AffineAnimCmd sArrowRaidLeftDownAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xd0, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidLeftDownAffineAnimTable[] = {
+ sArrowRaidLeftDownAffineAnims
+};
+const struct SpriteTemplate gArrowRaidLeftDownSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRIT_ARROW,
+ .paletteTag = ANIM_TAG_SPIRIT_ARROW,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidLeftDownAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+static const union AffineAnimCmd sArrowRaidOnslaughtAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x30, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sArrowRaidOnslaughtAffineAnimTable[] = {
+ sArrowRaidOnslaughtAffineAnims
+};
+const struct SpriteTemplate gArrowRaidArrowOnslaughtSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRIT_ARROW,
+ .paletteTag = ANIM_TAG_SPIRIT_ARROW,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sArrowRaidOnslaughtAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+
+// malicious moonsault
+const struct SpriteTemplate gMaliciousMoonsaultRedFlySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimFlyBallUp
+};
+const struct SpriteTemplate gMaliciousMoonsaultRedBounceSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_BounceBallLand,
+ .callback = AnimBounceBallLand
+};
+const struct SpriteTemplate gMaliciousMoonsaultRedImpactSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = AnimHitSplatBasic
+};
+const struct SpriteTemplate gMaliciousMoonsaultFireblastSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FireBlastCross,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFireCross
+};
+const struct SpriteTemplate gMaliciousMoonsaultExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_EXPLOSION_2,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// oceanic operetta
+const struct SpriteTemplate gOceanOperaSpotlightSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPOTLIGHT,
+ .paletteTag = ANIM_TAG_SPOTLIGHT,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSpotlightAffineAnimTable,
+ .callback = AnimOceanicOperettaSpotlight,
+};
+const struct SpriteTemplate gOceanOperaBlueFlareSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+const struct SpriteTemplate gOceanOperaBlueChargeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gOceanOperaBlueRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gOceanOperaMovingOrbsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimThrowMistBall
+};
+const struct SpriteTemplate gOceanOperaBlueOrbsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBite
+};
+const struct SpriteTemplate gOceanOperaExpandingRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gOceanOperaExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gOceanOperaSparkleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGrantingStars
+};
+
+// splintered stormshards
+const struct SpriteTemplate gSplinteredShardsFlySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimFlyBallUp
+};
+const struct SpriteTemplate gSplinteredShardsExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gSplinteredShardsRisingSpearSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ICICLE_SPEAR,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimAssistPawprint
+};
+static const union AffineAnimCmd sSplinteredShardsOpponentSteepAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xca, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sSplinteredShardsOpponentSteepAffineAnimTable[] = {
+ sSplinteredShardsOpponentSteepAffineAnims,
+};
+const struct SpriteTemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ICICLE_SPEAR,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSplinteredShardsOpponentSteepAffineAnimTable,
+ .callback = AnimJumpKick
+};
+static const union AffineAnimCmd sSplinteredShardsOpponentShallowAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sSplinteredShardsOpponentShallowAffineAnimTable[] = {
+ sSplinteredShardsOpponentShallowAffineAnims
+};
+const struct SpriteTemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ICICLE_SPEAR,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSplinteredShardsOpponentShallowAffineAnimTable,
+ .callback = AnimJumpKick
+};
+static const union AffineAnimCmd sSplinteredShardsPlayerSteepAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x60, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sSplinteredShardsPlayerSteepAffineAnimTable[] = {
+ sSplinteredShardsPlayerSteepAffineAnims
+};
+const struct SpriteTemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ICICLE_SPEAR,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSplinteredShardsPlayerSteepAffineAnimTable,
+ .callback = AnimJumpKick
+};
+static const union AffineAnimCmd sSplinteredShardsPlayerShallowAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sSplinteredShardsPlayerShallowAffineAnimTable[] = {
+ sSplinteredShardsPlayerShallowAffineAnims
+};
+const struct SpriteTemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ICICLE_SPEAR,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSplinteredShardsPlayerShallowAffineAnimTable,
+ .callback = AnimJumpKick
+};
+
+// lets snuggle forever
+const struct SpriteTemplate gSnuggleForeverEyesSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_4,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = sAnims_SpinningSparkle,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpinningSparkle
+};
+const struct SpriteTemplate gSnuggleForeverStarSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PAIN_SPLIT,
+ .paletteTag = ANIM_TAG_DUCK,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimDizzyPunchDuck
+};
+const struct SpriteTemplate gSnuggleForeverHeartSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_MAGENTA_HEART,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMagentaHeart
+};
+
+// clangorous soulblaze
+const struct SpriteTemplate gClangoorousSoulblazeWhiteFlySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimFlyBallUp
+};
+const struct SpriteTemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gAnims_WaterMudOrb,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Whirlpool,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gClangoorousSoulblazePurpleChargeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gClangoorousSoulblazePulseSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation
+};
+
+// guardian of alola
+const struct SpriteTemplate gGuardianOfAlolaFistSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
+ .paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimStompFoot
+};
+const struct SpriteTemplate gGuardianOfAlolaDirtGeyserSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_MUD_SAND,
+ .paletteTag = ANIM_TAG_MUD_SAND,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMudSportDirt
+};
+
+// seering sunraze smash
+static const union AffineAnimCmd sSearingSunrazeSmashWormholeGrowingAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 0xf8, 0x88),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sSearingSunrazeSmashWormholeGrowingAffineAnimTable[] = {
+ sSearingSunrazeSmashWormholeGrowingAffineAnims
+};
+const struct SpriteTemplate gSearingSunrazeSmashGrowWormholeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SHADOW_BALL,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sSearingSunrazeSmashWormholeGrowingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gSearingSunrazeSmashCrossImpactSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CROSS_IMPACT,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCrossImpact
+};
+const struct SpriteTemplate gSearingSunrazeSmashWhiteCutSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gCuttingSliceAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCuttingSlice
+};
+const struct SpriteTemplate gSearingSunrazeSmashInfernoOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingChargeOrb
+};
+const struct SpriteTemplate gSearingSunrazeSmashShockwaveSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingShockWaveOrbOnTarget
+};
+const struct SpriteTemplate gSearingSunrazeSmashRedFlySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_VERTICAL_HEX,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimFlyBallUp
+};
+
+// menacing moonraze maelstrom
+const struct SpriteTemplate gMoonrazeMaelstromBlueBuffSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+const struct SpriteTemplate gMoonrazeMaelstromBlackBuffSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+const struct SpriteTemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+const struct SpriteTemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGrantingStars
+};
+const struct SpriteTemplate gMoonrazeMaelstromBlueRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gMoonrazeMaelstromWhiteRingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_AIR_WAVE_2,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gMoonrazeMaelstromSuperpowerSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_METEOR,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSuperpowerFireball
+};
+const struct SpriteTemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex
+};
+const struct SpriteTemplate gMoonrazeMaelstromBeamSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarBeamBigOrbAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb
+};
+const struct SpriteTemplate gMoonrazeMaelstromExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gMoonrazeMaelstromShockwaveSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_GrowingElectricOrb,
+ .callback = AnimGrowingShockWaveOrbOnTarget
+};
+static const union AffineAnimCmd sMoonrazeMaelstromWormholeAffineAnims[] = {
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 0xf6, 0x88),
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd *const sMoonrazeMaelstromWormholeAffineAnimTable[] = {
+ sMoonrazeMaelstromWormholeAffineAnims
+};
+const struct SpriteTemplate gMoonrazeMaelstromWormholeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SHADOW_BALL,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sMoonrazeMaelstromWormholeAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// light that burns the sky
+const struct SpriteTemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlashingSpark,
+ .callback = AnimSparkElectricityFlashing
+};
+const struct SpriteTemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FirePlume,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBlastBurnTargetPlume
+};
+static const struct OamData sGeyserOam =
+{
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .priority = 1, //Above sprites
+};
+const struct SpriteTemplate gLightThatBurnsTheSkyExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION_2,
+ .paletteTag = ANIM_TAG_EXPLOSION_2,
+ .oam = &sGeyserOam,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+
+// soul stealing 7star strike
+const struct SpriteTemplate gSoulStealBlackFlySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROUND_SHADOW,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_FlyBallUp,
+ .callback = AnimFlyBallUp
+};
+const struct SpriteTemplate gSoulStealIceBuffSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimEndureEnergy
+};
+const struct SpriteTemplate gSoulStealBlueFistSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_HandsAndFeet,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimJumpKick
+};
+const struct SpriteTemplate gSoulStealBlueStarSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PAIN_SPLIT,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Bite,
+ .callback = AnimSoulStealingStar
+};
+const struct SpriteTemplate gSoulStealBlueParalyzeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPARK_2,
+ .paletteTag = ANIM_TAG_ICE_CRYSTALS,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimElectricity
+};
+const struct SpriteTemplate gSoulStealBlastburnSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FIRE_PLUME,
+ .paletteTag = ANIM_TAG_WISP_FIRE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FirePlume,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFirePlume
+};
+const struct SpriteTemplate gSoulStealExplosionSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_WISP_FIRE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSpriteOnMonPos
+};
+const struct SpriteTemplate gSoulStealZStarSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SNORE_Z,
+ .paletteTag = ANIM_TAG_SNORE_Z,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCrossImpact
+};
+
+// functions
+//general
+void AnimTask_IsTargetPartner(u8 taskId)
+{
+ if (gBattleAnimTarget == (gBattleAnimAttacker ^ BIT_FLANK))
+ gBattleAnimArgs[0] = 1;
+ else
+ gBattleAnimArgs[0] = 0;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_AllBanksInvisible(u8 taskId)
+{
+ u32 i;
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ u8 spriteId = gBattlerSpriteIds[i];
+ if (spriteId != 0xFF)
+ gSprites[spriteId].invisible = TRUE;
+ }
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_AllBanksVisible(u8 taskId)
+{
+ u32 i;
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ u8 spriteId = gBattlerSpriteIds[i];
+ if (spriteId != 0xFF)
+ gSprites[spriteId].invisible = FALSE;
+ }
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_AllBanksInvisibleExceptAttackerAndTarget(u8 taskId)
+{
+ u32 i;
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ u8 spriteId = gBattlerSpriteIds[i];
+ if (spriteId == GetAnimBattlerSpriteId(ANIM_ATTACKER) || spriteId == GetAnimBattlerSpriteId(ANIM_TARGET))
+ continue;
+ if (spriteId != 0xFF || !IsBattlerSpriteVisible(i)) //Pokemon that are already hidden
+ gSprites[spriteId].invisible = TRUE;
+ }
+ DestroyAnimVisualTask(taskId);
+}
+
+static u8 LoadBattleAnimTarget(u8 arg)
+{
+ u8 battler;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ switch (gBattleAnimArgs[arg])
+ {
+ case 0:
+ battler = gBattleAnimAttacker;
+ break;
+ default:
+ battler = gBattleAnimTarget;
+ break;
+ case 2:
+ battler = BATTLE_PARTNER(gBattleAnimAttacker);
+ break;
+ case 3:
+ battler = BATTLE_PARTNER(gBattleAnimTarget);
+ break;
+ }
+ }
+ else
+ {
+ if (gBattleAnimArgs[arg] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+ }
+
+ return battler;
+}
+
+static u8 GetProperCentredCoord(u8 battler, u8 coordType)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ return (GetBattlerSpriteCoord2(battler, coordType) + GetBattlerSpriteCoord2(BATTLE_PARTNER(battler), coordType)) / 2;
+
+ return GetBattlerSpriteCoord(battler, coordType);
+}
+
+static void InitSpritePosToGivenTarget(struct Sprite *sprite, u8 target)
+{
+ sprite->x = GetBattlerSpriteCoord2(target, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord2(target, BATTLER_COORD_Y);
+
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->y2 = gBattleAnimArgs[1];
+}
+
+static void InitSpritePosToAnimTargetsCentre(struct Sprite *sprite, bool8 respectMonPicOffsets)
+{
+ if (!respectMonPicOffsets)
+ {
+ sprite->x = (GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X)
+ + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X)) / 2;
+ sprite->y = (GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y)
+ + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y)) / 2;
+ }
+
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->y += gBattleAnimArgs[1];
+}
+
+static void InitSpritePosToAnimAttackersCentre(struct Sprite *sprite, bool8 respectMonPicOffsets)
+{
+ if (!respectMonPicOffsets)
+ {
+ sprite->x = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X)
+ + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X)) / 2;
+ sprite->y = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y)
+ + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y)) / 2;
+ }
+ else
+ {
+ sprite->x = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2)
+ + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X_2)) / 2;
+ sprite->y = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET)
+ + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y_PIC_OFFSET)) / 2;
+ }
+
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->y += gBattleAnimArgs[1];
+}
+
+//sprite callbacks
+static void AnimSoulStealingStar(struct Sprite *sprite)
+{
+ sprite->x += gBattleAnimArgs[0];
+ sprite->y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = gBattleAnimArgs[4];
+ sprite->data[2] = gBattleAnimArgs[5];
+ sprite->callback = AnimSoulStealingStar_Step1;
+}
+
+static void AnimSoulStealingStar_Step1(struct Sprite *sprite)
+{
+ sprite->data[4] += sprite->data[0];
+ sprite->data[5] += sprite->data[1];
+ sprite->x2 = sprite->data[4] >> 8;
+ sprite->y2 = sprite->data[5] >> 8;
+ if (++sprite->data[3] == sprite->data[2])
+ sprite->callback = AnimSoulStealingStar_Step2;
+}
+
+static void AnimSoulStealingStar_Step2(struct Sprite *sprite)
+{
+ sprite->data[4] -= sprite->data[0];
+ sprite->data[5] -= sprite->data[1];
+ sprite->x2 = sprite->data[4] >> 8;
+ sprite->y2 = sprite->data[5] >> 8;
+ if (--sprite->data[3] == 0)
+ DestroySpriteAndMatrix(sprite);
+}
+
+//Creates The Extreme Evoboost Circles
+static void AnimExtremeEvoboostCircle(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ sprite->y += 20;
+ sprite->data[1] = 191;
+ sprite->callback = AnimExtremeEvoboostCircle_Step;
+ sprite->callback(sprite);
+}
+
+static void AnimExtremeEvoboostCircle_Step(struct Sprite *sprite)
+{
+ sprite->x2 = Sin(sprite->data[1], 32);
+ sprite->y2 = Cos(sprite->data[1], 8);
+ sprite->data[1] += 5;
+ sprite->data[1] &= 0xFF;
+ if (++sprite->data[0] == 71)
+ DestroyAnimSprite(sprite);
+}
+
+static void AnimGrowingShockWaveOrbOnTarget(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ StartSpriteAffineAnim(sprite, 2);
+ sprite->data[0]++;
+ break;
+ case 1:
+ if (sprite->affineAnimEnded)
+ DestroySpriteAndMatrix(sprite);
+ break;
+ }
+}
+
+static void AnimEllipticalGustAttacker(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ sprite->y += 20;
+ sprite->data[1] = 191;
+ sprite->callback = AnimEllipticalGustAttacker_Step;
+ sprite->callback(sprite);
+}
+
+static void AnimEllipticalGustAttacker_Step(struct Sprite *sprite)
+{
+ sprite->x2 = Sin(sprite->data[1], 32);
+ sprite->y2 = Cos(sprite->data[1], 8);
+ sprite->data[1] += 5;
+ sprite->data[1] &= 0xFF;
+ if (++sprite->data[0] == 71)
+ DestroyAnimSprite(sprite);
+}
+
+static void SetSpriteCoordsToAnimTargetCoords(struct Sprite *sprite)
+{
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+}
+
+static void AnimBlastBurnTargetPlume(struct Sprite *sprite)
+{
+ SetSpriteCoordsToAnimTargetCoords(sprite);
+ if (GetBattlerSide(gBattleAnimTarget))
+ {
+ sprite->x -= gBattleAnimArgs[0];
+ sprite->y += gBattleAnimArgs[1];
+ sprite->data[2] = -gBattleAnimArgs[4];
+ }
+ else
+ {
+ sprite->x += gBattleAnimArgs[0];
+ sprite->y += gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[4];
+ }
+
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[5];
+
+ sprite->callback = AnimBlastBurnTargetPlume_Step1;
+}
+static void AnimBlastBurnTargetPlume_Step1(struct Sprite *sprite)
+{
+ if (++sprite->data[0] < sprite->data[4])
+ {
+ sprite->x2 += sprite->data[2];
+ sprite->y2 += sprite->data[3];
+ }
+
+ if (sprite->data[0] == sprite->data[1])
+ DestroySpriteAndMatrix(sprite);
+}
+
+static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite)
+{
+ bool8 var;
+
+ if (!sprite->data[0])
+ {
+ if (!gBattleAnimArgs[3])
+ var = TRUE;
+ else
+ var = FALSE;
+
+ if (gBattleAnimArgs[2] == 0) //Attacker
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ InitSpritePosToAnimAttackersCentre(sprite, var);
+ else
+ InitSpritePosToAnimAttacker(sprite, var);
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ InitSpritePosToAnimTargetsCentre(sprite, var);
+ else
+ InitSpritePosToAnimTarget(sprite, var);
+ }
+
+ sprite->data[0]++;
+ }
+ else if (sprite->animEnded || sprite->affineAnimEnded)
+ {
+ DestroySpriteAndMatrix(sprite);
+ }
+}
+
+static void SpriteCB_SpriteOnMonForDuration(struct Sprite *sprite)
+{
+ u8 target = LoadBattleAnimTarget(0);
+
+ if (!IsBattlerSpriteVisible(target))
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ sprite->x = GetBattlerSpriteCoord(target, 0);
+ sprite->y = GetBattlerSpriteCoord(target, 1);
+ sprite->x += gBattleAnimArgs[1];
+ sprite->y += gBattleAnimArgs[2];
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = 0;
+ sprite->callback = AnimBrickBreakWall_Step;
+ }
+}
+
+static void SpriteCB_ToxicThreadWrap(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->x -= gBattleAnimArgs[0];
+ else
+ sprite->x += gBattleAnimArgs[0];
+
+ sprite->y += gBattleAnimArgs[1];
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ sprite->y += 8;
+
+ sprite->callback = AnimStringWrap_Step;
+}
+
+
+static void SpriteCB_GrowingSuperpower(struct Sprite *sprite)
+{
+ u8 battler;
+
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ battler = gBattleAnimTarget;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
+ }
+ else
+ {
+ battler = gBattleAnimAttacker;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
+ }
+
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ StartSpriteAffineAnim(sprite, 1);
+
+ sprite->data[0] = 16;
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = GetBattlerSpriteCoord(battler, 2);
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = GetBattlerSpriteCoord(battler, 3);
+
+ InitAnimLinearTranslation(sprite);
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = AnimTranslateLinear_WithFollowup;
+}
+
+static void SpriteCB_CentredSpiderWeb(struct Sprite *sprite)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ InitSpritePosToAnimTargetsCentre(sprite, FALSE);
+ else
+ InitSpritePosToAnimTarget(sprite, FALSE);
+
+ sprite->callback = AnimSpiderWeb;
+}
+
+static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
+
+ if (gBattleAnimArgs[2] == 0)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ InitSpritePosToAnimAttackersCentre(sprite, FALSE);
+ else
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ InitSpritePosToAnimTargetsCentre(sprite, FALSE);
+ else
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ }
+
+ sprite->y += 20;
+ sprite->callback = AnimFlashingHitSplat_Step;
+}
+
+static void SpriteCB_CoreEnforcerBeam(struct Sprite *sprite)
+{
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ {
+ AnimSolarBeamBigOrb(sprite);
+ }
+ else
+ {
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ StartSpriteAnim(sprite, gBattleAnimArgs[3]);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+
+ sprite->data[2] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2)
+ + GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X_2)) / 2;
+
+
+ sprite->data[4] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET)
+ + GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y_PIC_OFFSET)) / 2;
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ }
+}
+
+static void SpriteCB_TranslateAnimSpriteToTargetMonLocationDoubles(struct Sprite *sprite)
+{
+ bool8 v1;
+ u8 target;
+ u8 coordType;
+
+ if (!(gBattleAnimArgs[5] & 0xff00))
+ v1 = TRUE;
+ else
+ v1 = FALSE;
+
+ if (!(gBattleAnimArgs[5] & 0xff))
+ coordType = BATTLER_COORD_Y_PIC_OFFSET;
+ else
+ coordType = BATTLER_COORD_Y;
+
+ InitSpritePosToAnimAttacker(sprite, v1);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ target = LoadBattleAnimTarget(6);
+
+ if (!IsBattlerSpriteVisible(target))
+ DestroyAnimSprite(sprite);
+ else
+ {
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(target, coordType) + gBattleAnimArgs[3];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ }
+}
+
+//Causes an object to fall from the sky.
+//arg 0: initial x pixel offset
+//arg 1: initial y pixel offset
+//arg 2: speed
+//arg 3: anim battler
+static void SpriteCB_FallingObject(struct Sprite *sprite)
+{
+ u8 target = LoadBattleAnimTarget(3);
+
+ if (!IsBattlerSpriteVisible(target))
+ DestroyAnimSprite(sprite);
+ else
+ {
+ sprite->x = GetBattlerSpriteCoord2(target, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord2(target, BATTLER_COORD_Y);
+
+ sprite->x2 = gBattleAnimArgs[0];
+ sprite->y = gBattleAnimArgs[1];
+ sprite->y2 = -gBattleAnimArgs[1];
+
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ sprite->y += 45;
+ sprite->y2 -= 45;
+ }
+
+ sprite->data[3] = gBattleAnimArgs[2]; //Speed
+ sprite->callback = SpriteCB_FallingObjectStep;
+ }
+}
+static void SpriteCB_FallingObjectStep(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->y2 += sprite->data[3];
+ if (sprite->y2 >= 0)
+ {
+ sprite->y2 = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] > 0)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible ^= 1;
+ if (++sprite->data[2] == 10)
+ DestroySpriteAndMatrix(sprite);
+ }
+ break;
+ }
+}
+
+static void SpriteCB_SunsteelStrikeRings(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->x = 272;
+ sprite->y = -32;
+ }
+ else
+ {
+ sprite->x = -32;
+ sprite->y = -32;
+ }
+
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = AnimFlyBallAttack_Step;
+}
+
+//arg 0: initial x pixel offset
+//arg 1: initial y pixel offset
+//arg 2: target x pixel offset
+//arg 3: target y pixel offset
+//arg 4: duration
+//arg 5: wave amplitude
+static void SpriteCB_MoongeistCharge(struct Sprite *sprite)
+{
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y
+ sprite->data[5] = gBattleAnimArgs[5];
+
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimMissileArc_Step;
+}
+
+//Spins a sprite towards the target, pausing in the middle.
+//Used in Mind Blown.
+//arg 0: duration step 1 (attacker -> center)
+//arg 1: duration step 2 (spin center)
+//arg 2: duration step 3 (center -> target)
+static void SpriteCB_MindBlownBall(struct Sprite *sprite)
+{
+ s16 oldPosX = sprite->x;
+ s16 oldPosY = sprite->y;
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[3] = gBattleAnimArgs[2];
+ sprite->data[4] = sprite->x << 4;
+ sprite->data[5] = sprite->y << 4;
+ sprite->data[6] = ((oldPosX - sprite->x) << 4) / (gBattleAnimArgs[0] << 1);
+ sprite->data[7] = ((oldPosY - sprite->y) << 4) / (gBattleAnimArgs[0] << 1);
+ sprite->callback = AnimMindBlownBallStep;
+}
+static void AnimMindBlownBallStep(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->x = sprite->data[4] >> 4;
+ sprite->y = sprite->data[5] >> 4;
+ sprite->data[1] -= 1;
+ if (sprite->data[1] > 0)
+ break;
+ sprite->data[0] += 1;
+ break;
+ case 1:
+ sprite->data[2] -= 1;
+ if (sprite->data[2] > 0)
+ break;
+
+ sprite->data[1] = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[2] = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[4] = sprite->x << 4;
+ sprite->data[5] = sprite->y << 4;
+ sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3];
+ sprite->data[7] = ((sprite->data[2] - sprite->y) << 4) / sprite->data[3];
+ sprite->data[0] += 1;
+ break;
+ case 2:
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->x = sprite->data[4] >> 4;
+ sprite->y = sprite->data[5] >> 4;
+ sprite->data[3] -= 1;
+ if (sprite->data[3] > 0)
+ break;
+ sprite->x = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->y = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[0] += 1;
+ break;
+ case 3:
+ DestroySpriteAndMatrix(sprite);
+ break;
+ }
+}
+
+static void SpriteCB_MindBlownExplosion(struct Sprite *sprite)
+{
+ u8 a;
+ u8 b;
+ u16 x;
+ u16 y;
+
+ if (gBattleAnimArgs[4] == 0)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ a = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ b = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ if (gBattleAnimArgs[1] == 0)
+ {
+ sprite->x = gBattleAnimArgs[2] + a;
+ sprite->y = gBattleAnimArgs[3] + b;
+ sprite->data[5] = a;
+ sprite->data[6] = b;
+ }
+ else
+ {
+ sprite->x = a;
+ sprite->y = b;
+ sprite->data[5] = gBattleAnimArgs[2] + a;
+ sprite->data[6] = gBattleAnimArgs[3] + b;
+ }
+
+ x = sprite->x;
+ sprite->data[1] = x * 16;
+ y = sprite->y;
+ sprite->data[2] = y * 16;
+ sprite->data[3] = (sprite->data[5] - sprite->x) * 16 / gBattleAnimArgs[4];
+ sprite->data[4] = (sprite->data[6] - sprite->y) * 16 / gBattleAnimArgs[4];
+
+ sprite->callback = AnimNeedleArmSpike_Step;
+ }
+}
+
+void SpriteCB_RandomCentredHits(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[1] == -1)
+ gBattleAnimArgs[1] = Random() & 3;
+
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]);
+
+ if (gBattleAnimArgs[0] == 0)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ InitSpritePosToAnimAttackersCentre(sprite, FALSE);
+ else
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ InitSpritePosToAnimTargetsCentre(sprite, FALSE);
+ else
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ }
+
+ sprite->x2 += (Random() % 48) - 24;
+ sprite->y2 += (Random() % 24) - 12;
+
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
+//Creates a jaw that bites down and locks on the target.
+//args: Idk same as bite and crunch
+//arg 6: Time to hold bite for.
+static void SpriteCB_LockingJaw(struct Sprite *sprite)
+{
+ sprite->x += gBattleAnimArgs[0];
+ sprite->y += gBattleAnimArgs[1];
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = gBattleAnimArgs[4];
+ sprite->data[2] = gBattleAnimArgs[5];
+ sprite->data[6] = -gBattleAnimArgs[6];
+ sprite->callback = SpriteCB_LockingJawStep;
+}
+static void SpriteCB_LockingJawStep(struct Sprite *sprite)
+{
+ sprite->data[4] += sprite->data[0];
+ sprite->data[5] += sprite->data[1];
+ sprite->x2 = sprite->data[4] >> 8;
+ sprite->y2 = sprite->data[5] >> 8;
+ if (++sprite->data[3] == sprite->data[2])
+ sprite->callback = SpriteCB_LockingJawFinish;
+}
+static void SpriteCB_LockingJawFinish(struct Sprite *sprite)
+{
+ if (--sprite->data[3] <= sprite->data[6])
+ DestroySpriteAndMatrix(sprite);
+}
+
+//Creates a sprite that moves left then right along the target.
+//arg 0: Slice distance
+//arg 1: Speed
+static void SpriteCB_LeftRightSlice(struct Sprite *sprite)
+{
+ sprite->x2 = gBattleAnimArgs[0];
+ sprite->data[0] = -gBattleAnimArgs[0]; //Slice distance
+ sprite->data[1] = gBattleAnimArgs[1]; //Slice speed
+ sprite->callback = SpriteCB_LeftRightSliceStep0;
+}
+static void SpriteCB_LeftRightSliceStep1(struct Sprite *sprite)
+{
+ sprite->x2 += sprite->data[1];
+ if (sprite->x2 >= sprite->data[0])
+ DestroyAnimSprite(sprite);
+}
+static void SpriteCB_LeftRightSliceStep0(struct Sprite *sprite)
+{
+ sprite->x2 -= sprite->data[1];
+ if (sprite->x2 <= sprite->data[0])
+ {
+ sprite->data[0] = -sprite->data[0];
+ sprite->callback = SpriteCB_LeftRightSliceStep1;
+ }
+}
+
+//Creates a rock that bounces between the attacker's feet.
+//arg 0: initial x pixel offset
+//arg 1: initial y pixel offset
+//arg 2: Ignore horizontal motion if TRUE. Only bounce once.
+#define sVerticalTime sprite->data[0]
+#define sHorizontalTime sprite->data[1]
+#define sMovingBackHorizontally sprite->data[2]
+static void SpriteCB_PyroBallRockBounceStep(struct Sprite *sprite)
+{
+ s8 initialVerticalVelocity;
+ s8 initialHorizontalVelocity;
+
+ if (sprite->y2 > 0) //Rock returned back down
+ {
+ if (gBattleAnimArgs[2] || sMovingBackHorizontally) //Finished moving from left to right
+ DestroyAnimSprite(sprite);
+ else
+ {
+ sVerticalTime = 0;
+ sMovingBackHorizontally = TRUE;
+ }
+ }
+
+ initialVerticalVelocity = -6;
+ initialHorizontalVelocity = -1; //Starts by moving right to left
+
+ //vi = -6
+ //g = 0.25 (gravity not negative b/c go up to go closer to 0)
+ //h = vi*t + 0.5g*t^2
+ //t = sVerticalTime
+ sprite->y2 = (initialVerticalVelocity * sVerticalTime + (1 * sVerticalTime * sVerticalTime) / 4);
+
+ //x = vi*t
+ //vi = sprite->data[2]
+ //t = sHorizontalTime
+ if (!gBattleAnimArgs[2])
+ sprite->x2 = (initialHorizontalVelocity * sHorizontalTime);
+
+ sVerticalTime++;
+
+ if (sMovingBackHorizontally)
+ sHorizontalTime--; //Move left to right
+ else
+ sHorizontalTime++; //Move right to left
+}
+
+static void InitSpritePositionForPyroBall(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, 0);
+ sprite->y += 20; //Move closer to attacker's feet
+
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ sprite->y += 20; //Move below the text box
+
+}
+
+static void SpriteCB_PyroBallRockBounce(struct Sprite *sprite)
+{
+ InitSpritePositionForPyroBall(sprite);
+ sprite->callback = SpriteCB_PyroBallRockBounceStep;
+}
+#undef sVerticalTime
+#undef sHorizontalTime
+#undef sMovingBackHorizontally
+
+//Launches a projectile from the attacker's feet at the target.
+//arg 0: initial x pixel offset
+//arg 1: initial y pixel offset
+//arg 2: target x pixel offset
+//arg 3: target y pixel offset
+//arg 4: duration
+//arg 5: wave amplitude
+static void SpriteCB_PyroBallLaunch(struct Sprite *sprite)
+{
+ InitSpritePositionForPyroBall(sprite);
+
+ if (GetBattlerSide(gBattleAnimAttacker))
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimArcTranslation(sprite);
+
+ sprite->callback = AnimMissileArc_Step;
+}
+
+//Throws acid at a single target.
+static void SpriteCB_AcidLaunchSingleTarget(struct Sprite *sprite)
+{
+ s16 l1, l2;
+
+ if (!gBattleAnimArgs[3])
+ StartSpriteAnim(sprite, 2);
+
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ l1 = sprite->x; l2 = sprite->y;
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ if (GetBattlerSide(gBattleAnimAttacker))
+ gBattleAnimArgs[4] = -gBattleAnimArgs[4];
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = l1 + gBattleAnimArgs[4];
+ sprite->data[4] = l2 + gBattleAnimArgs[5];
+ sprite->data[5] = -30;
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimAcidPoisonBubble_Step;
+}
+
+//Causes acid to drip down a single target.
+static void SpriteCB_AcidDripSingleTarget(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->x += gBattleAnimArgs[0];
+ sprite->y += gBattleAnimArgs[1];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = sprite->x + gBattleAnimArgs[2];
+ sprite->data[4] = sprite->y + sprite->data[0];
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+//Causes an object to fall from the sky.
+//arg 0: initial x pixel offset
+//arg 1: initial y pixel offset
+//arg 2: anim battler
+static void SpriteCB_WaterDroplet(struct Sprite *sprite)
+{
+ u8 target = LoadBattleAnimTarget(2);
+
+ if (!IsBattlerSpriteVisible(target))
+ DestroyAnimSprite(sprite);
+ else
+ {
+ InitSpritePosToGivenTarget(sprite, target);
+ sprite->data[1] = sprite->y; //Target's y coord
+
+ sprite->x2 = gBattleAnimArgs[0];
+ sprite->y2 = 0;
+
+ //Put droplet at the top of the screen
+ sprite->y = 15;
+
+ sprite->callback = SpriteCB_WaterDropletDrip;
+ }
+}
+static void SpriteCB_WaterDropletDrip(struct Sprite *sprite)
+{
+ sprite->data[0] = 12;
+ StartSpriteAnim(sprite, 0);
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, SpriteCB_WaterDropletDrop);
+}
+static void SpriteCB_WaterDropletDrop(struct Sprite *sprite)
+{
+ sprite->y2 += 4;
+ if (sprite->y2 >= sprite->data[1])
+ {
+ sprite->data[0] = 19;
+ StartSpriteAnim(sprite, 1);
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ }
+}
+
+static void SpriteCB_AnimSpriteOnSelectedMonPos(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ u8 target = LoadBattleAnimTarget(2);
+
+ if (!IsBattlerSpriteVisible(target))
+ DestroyAnimSprite(sprite);
+ else
+ {
+ InitSpritePosToGivenTarget(sprite, target);
+ sprite->data[0]++;
+ }
+ }
+ else if (sprite->animEnded || sprite->affineAnimEnded)
+ {
+ DestroySpriteAndMatrix(sprite);
+ }
+}
+
+static void SpriteCB_SurroundingRing(struct Sprite *sprite)
+{
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 40;
+
+ sprite->data[0] = 13;
+ sprite->data[2] = sprite->x;
+ sprite->data[4] = sprite->y - 72;
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+//Imitates launching a beam of light towards the sky
+//arg 0: initial x pixel offset
+//arg 1: initial y pixel offset
+//arg 2: battler
+//arg 3: duration
+//arg 4: Anim num
+//arg 5: affine anim start delay
+static void SpriteCB_PhotonGeyserBeam(struct Sprite *sprite)
+{
+ u8 target = LoadBattleAnimTarget(2);
+
+ if (!IsBattlerSpriteVisible(target))
+ DestroyAnimSprite(sprite);
+ else
+ {
+ InitSpritePosToGivenTarget(sprite, target);
+ StartSpriteAnim(sprite, gBattleAnimArgs[4]);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = gBattleAnimArgs[5];
+ sprite->callback = SpriteCB_BeamUpStep;
+ }
+}
+//Animates the beam of light
+static void SpriteCB_BeamUpStep(struct Sprite *sprite)
+{
+ if (sprite->data[1]-- == 0)
+ StartSpriteAffineAnim(sprite, 1);
+
+ if (sprite->data[0]-- <= 0)
+ DestroySpriteAndMatrix(sprite);
+}
+
+static void SpriteCB_CentredElectricity(struct Sprite *sprite)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ InitSpritePosToAnimTargetsCentre(sprite, FALSE);
+ else
+ InitSpritePosToAnimTarget(sprite, FALSE);
+
+ sprite->oam.tileNum += gBattleAnimArgs[3] * 4;
+
+ if (gBattleAnimArgs[3] == 1)
+ sprite->oam.matrixNum = 8;
+ else if (gBattleAnimArgs[3] == 2)
+ sprite->oam.matrixNum = 16;
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void AnimSkyDropBallUp(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->callback = AnimFlyBallUp_Step;
+ gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
+}
+
+static void SpriteCB_SearingShotRock(struct Sprite *sprite)
+{
+ u8 target = LoadBattleAnimTarget(4);
+
+ if (!IsBattlerSpriteVisible(target))
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ InitSpritePosToGivenTarget(sprite, target);
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, AnimSpinningKickOrPunchFinish);
+ }
+}
+
+static void AnimHappyHourCoinShower(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[3] != 0)
+ SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->x, &sprite->y); //coin shower on attacker
+
+ sprite->x += gBattleAnimArgs[0];
+ sprite->y += 14;
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ AnimateSprite(sprite);
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 4;
+ sprite->data[3] = 16;
+ sprite->data[4] = -70;
+ sprite->data[5] = gBattleAnimArgs[2];
+ StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step);
+ sprite->callback = TranslateSpriteInEllipse;
+ sprite->callback(sprite);
+}
+
+//Launches an object upwards like they were being shot from a geyser
+//arg 0: null
+//arg 1: initial x pixel offset
+//arg 2: initial y pixel offset
+static void SpriteCB_Geyser(struct Sprite *sprite)
+{
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1;
+ sprite->callback = AnimMudSportDirtRising;
+}
+
+//Launches an object upwards like they were being shot from a geyser
+//arg 0: null
+//arg 1: initial x pixel offset
+//arg 2: initial y pixel offset
+static void SpriteCB_GeyserTarget(struct Sprite *sprite)
+{
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1];
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1;
+ sprite->callback = AnimMudSportDirtRising;
+}
+
+// Anim Tasks Functions
+#define tSpriteId data[0]
+#define tTimer data[1]
+#define tInitialXPos data[2]
+#define tInitialYPos data[3]
+#define tSide data[4]
+#define tAnimLengthTime data[5]
+static const s8 sHomerunEnemyHorizontalMovement[] =
+{
+ 3, 3, 3, 3,
+ 3, 3, 2, 2,
+ 1, 1, 1, 1,
+ 1, 1, 1, 1,
+ 0, 1, 0, 1,
+ 0, 1, 0, 0,
+ 1, 0, 0, 1,
+ 0, 0, 0, 1,
+ 0, 0, 0, 1,
+};
+
+static const s8 sHomerunEnemyVerticalMovement[] =
+{
+ -4, -4, -4, -4,
+ -4, -3, -3, -2,
+ -2, -1, -1, -1,
+ -1, -1, -1, -1,
+ 0, -1, 0, -1,
+ 0, -1, 0, 0,
+ 0, 0, -1, 0,
+ 0, -1, 0, 0,
+ -1, 0, 0, 0,
+};
+
+void AnimTask_TwinkleTackleLaunchStep(u8 taskId)
+{
+ u16 rotation;
+ s16 xScale, yScale;
+ struct Task* task = &gTasks[taskId];
+ struct Sprite *sprite = &gSprites[task->tSpriteId];
+
+ if (task->tTimer > task->tAnimLengthTime)
+ {
+ if (task->tTimer > task->tAnimLengthTime + 5) //Wait an extra few frames so the glint can be placed on the target
+ {
+ sprite->x = task->tInitialXPos;
+ sprite->y = task->tInitialYPos;
+ ResetSpriteRotScale(task->tSpriteId);
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ ++task->tTimer;
+ return;
+ }
+ else if ((u16) task->tTimer < NELEMS(sHomerunEnemyHorizontalMovement))
+ {
+ s8 movement = sHomerunEnemyHorizontalMovement[task->tTimer];
+ if (task->tSide == B_SIDE_PLAYER)
+ movement *= -1;
+ sprite->x += movement;
+
+ movement = sHomerunEnemyVerticalMovement[task->tTimer];
+ if (task->tSide == B_SIDE_PLAYER)
+ movement *= -1;
+ sprite->y += movement;
+ }
+
+ xScale = 0x180;
+ yScale = 0x180;
+ rotation = (task->tTimer << 4) + (task->tTimer << 3);
+
+ xScale += rotation;
+ yScale += rotation;
+ rotation <<= 7;
+
+ if (task->tSide == B_SIDE_OPPONENT)
+ rotation *= -1;
+
+ SetSpriteRotScale(task->tSpriteId, xScale, yScale, rotation);
+
+ if (++task->tTimer > task->tAnimLengthTime)
+ sprite->invisible = TRUE;
+}
+
+//Launches the target in Twinkle Tackle
+//arg 0: Anim time
+void AnimTask_TwinkleTackleLaunch(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+
+ task->tSpriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ task->tSide = GetBattlerSide(gBattleAnimTarget);
+ task->tAnimLengthTime = gBattleAnimArgs[0];
+ task->tInitialXPos = gSprites[task->tSpriteId].x;
+ task->tInitialYPos = gSprites[task->tSpriteId].y;
+ task->tTimer = 0;
+ task->func = AnimTask_TwinkleTackleLaunchStep;
+
+ PrepareBattlerSpriteForRotScale(task->tSpriteId, ST_OAM_OBJ_NORMAL);
+}
+#undef tSpriteId
+#undef tTimer
+#undef tInitialXPos
+#undef tInitialYPos
+#undef tSide
+#undef tAnimLengthTime
+
+void AnimTask_GetTimeOfDay(u8 taskId)
+{
+ gBattleAnimArgs[0] = 0; //Daytime is default
+
+ RtcCalcLocalTime();
+ if (gLocalTime.hours >= 20 || gLocalTime.hours < 4)
+ gBattleAnimArgs[0] = 1;
+ else if (gLocalTime.hours >= 17 && gLocalTime.hours < 20)
+ gBattleAnimArgs[0] = 2;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_GetLycanrocForm(u8 taskId)
+{
+ if (GetMonData(GetIllusionMonPtr(gBattleAnimAttacker), MON_DATA_SPECIES) == SPECIES_LYCANROC_MIDNIGHT)
+ gBattleAnimArgs[0] = 1;
+ else
+ gBattleAnimArgs[0] = 0;
+
+ gBattleAnimArgs[0] = 0;
+ DestroyAnimVisualTask(taskId);
+}
+
+// Scales up the target mon sprite
+// Used in Let's Snuggle Forever
+// No args.
+void AnimTask_GrowTarget(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
+ SetSpriteRotScale(spriteId, 208, 208, 0);
+ gTasks[taskId].data[0] = 120;
+ gTasks[taskId].func = AnimTask_GrowStep;
+}
+static void AnimTask_GrowStep(u8 taskId)
+{
+ if (--gTasks[taskId].data[0] == -1)
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ ResetSpriteRotScale(spriteId);
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+// Uses a spotlight sprite as a light mask to illuminate the attacker. The spotlight grows and shrinks.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration of fully-opened spotlight
+static void AnimOceanicOperettaSpotlight(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
+ sprite->invisible = TRUE;
+ sprite->callback = AnimFlatterSpotlight_Step;
+}
+
+static void AnimTask_WaitAffineAnim(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+
+ if (!RunAffineAnimFromTaskData(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_SquishTarget(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+
+ PrepareAffineAnimInTaskData(task, spriteId, sSquishTargetAffineAnimCmds);
+ task->func = AnimTask_WaitAffineAnim;
+}
+
+void CoreEnforcerLoadBeamTarget(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2)
+ + GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X_2)) / 2;
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET)
+ + GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y_PIC_OFFSET)) / 2;
+}
+
+void AnimTask_CreateBestowItem(u8 taskId)
+{
+ u8 iconSpriteId = AddItemIconSprite(ANIM_TAG_ITEM_BAG, ANIM_TAG_ITEM_BAG, gLastUsedItem);
+
+ if (iconSpriteId != MAX_SPRITES)
+ {
+ gSprites[iconSpriteId].oam.priority = 2;
+ gSprites[iconSpriteId].callback = AnimThrowProjectile;
+ ++gAnimVisualTaskCount;
+ }
+ DestroyAnimVisualTask(taskId);
+}
+
+//Creates purple flames that surround the target.
+//No args.
+void AnimTask_PurpleFlamesOnTarget(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0] = 0;
+ task->data[1] = 16;
+ task->data[9] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimTarget);
+ task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH) / 2) + 8;
+ task->data[7] = 0;
+ task->data[5] = GetBattlerSpriteBGPriority(gBattleAnimTarget);
+ task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
+ task->data[3] = 0;
+ task->data[4] = 16;
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
+ task->data[8] = 0;
+ task->func = AnimTask_GrudgeFlames_Step;
+}
+
+void AnimTask_TechnoBlast(u8 taskId)
+{
+ if (ItemId_GetHoldEffect(gBattleMons[gBattleAnimAttacker].item) == HOLD_EFFECT_DRIVE)
+ gBattleAnimArgs[0] = ItemId_GetSecondaryId(gBattleMons[gBattleAnimAttacker].item);
+ else
+ gBattleAnimArgs[0] = 0;
+ DestroyAnimVisualTask(taskId);
+}
+
+// Z MOVES
+//Creates a twinkle at the location the target was knocked too in Twinkle Tackle
+static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite)
+{
+ struct Sprite* monSprite;
+
+ if (gBattleAnimArgs[2] == ANIM_TARGET)
+ monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)];
+ else
+ monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)];
+
+ sprite->x = monSprite->x;
+ sprite->y = monSprite->y;
+ sprite->x2 = monSprite->x2;
+ sprite->y2 = monSprite->y2;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void AnimTask_PrimalReversion(u8 taskId)
+{
+ if (ItemId_GetId(gBattleMons[gBattleAnimAttacker].item) == ITEM_RED_ORB)
+ gBattleAnimArgs[0] = ItemId_GetId(gBattleMons[gBattleAnimAttacker].item);
+ else
+ gBattleAnimArgs[0] = 0;
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_ShellSideArm(u8 taskId)
+{
+ if (gBattleStruct->swapDamageCategory)
+ gBattleAnimArgs[0] = TRUE;
+ else
+ gBattleAnimArgs[0] = FALSE;
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_TerrainPulse(u8 taskId)
+{
+ if (IsBattlerTerrainAffected(gBattleAnimAttacker, STATUS_FIELD_TERRAIN_ANY))
+ {
+ if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
+ gBattleAnimArgs[0] = TYPE_ELECTRIC;
+ else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
+ gBattleAnimArgs[0] = TYPE_GRASS;
+ else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
+ gBattleAnimArgs[0] = TYPE_FAIRY;
+ else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
+ gBattleAnimArgs[0] = TYPE_PSYCHIC;
+ else //failsafe
+ gBattleAnimArgs[0] = 0;
+ }
+ else
+ {
+ gBattleAnimArgs[0] = 0;
+ }
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c
index a92428f83b..f43dd6e9b0 100644
--- a/src/battle_anim_normal.c
+++ b/src/battle_anim_normal.c
@@ -16,14 +16,8 @@ static void AnimCirclingSparkle(struct Sprite *);
static void AnimShakeMonOrBattleTerrain(struct Sprite *);
static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *);
static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void);
-static void AnimHitSplatBasic(struct Sprite *);
static void AnimHitSplatPersistent(struct Sprite *);
static void AnimHitSplatHandleInvert(struct Sprite *);
-static void AnimHitSplatRandom(struct Sprite *);
-static void AnimHitSplatOnMonEdge(struct Sprite *);
-static void AnimCrossImpact(struct Sprite *);
-static void AnimFlashingHitSplat(struct Sprite *);
-static void AnimFlashingHitSplat_Step(struct Sprite *);
static void AnimConfusionDuck_Step(struct Sprite *);
static void BlendColorCycle(u8, u8, u8);
static void AnimTask_BlendColorCycleLoop(u8);
@@ -34,6 +28,7 @@ static void AnimTask_BlendColorCycleByTagLoop(u8);
static void AnimTask_FlashAnimTagWithColor_Step1(u8);
static void AnimTask_FlashAnimTagWithColor_Step2(u8);
static void AnimTask_ShakeBattleTerrain_Step(u8);
+static void AnimMovePowerSwapGuardSwap(struct Sprite *);
static const union AnimCmd sAnim_ConfusionDuck_0[] =
{
@@ -92,6 +87,63 @@ const struct SpriteTemplate gComplexPaletteBlendSpriteTemplate =
.callback = AnimComplexPaletteBlend,
};
+static const union AnimCmd sPowerSwapGuardSwapFrame0[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sPowerSwapGuardSwapFrame1[] =
+{
+ ANIMCMD_FRAME(4, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sPowerSwapGuardSwapFrame2[] =
+{
+ ANIMCMD_FRAME(8, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sPowerSwapGuardSwapFrame3[] =
+{
+ ANIMCMD_FRAME(12, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sPowerSwapGuardSwapFrame4[] =
+{
+ ANIMCMD_FRAME(16, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sPowerSwapGuardSwapFrame5[] =
+{
+ ANIMCMD_FRAME(20, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd * const sPowerSwapGuardSwapAnimTable[] =
+{
+ sPowerSwapGuardSwapFrame0,
+ sPowerSwapGuardSwapFrame1,
+ sPowerSwapGuardSwapFrame2,
+ sPowerSwapGuardSwapFrame3,
+ sPowerSwapGuardSwapFrame4,
+ sPowerSwapGuardSwapFrame5
+};
+
+const struct SpriteTemplate gPowerSwapGuardSwapSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_COLORED_ORBS,
+ .paletteTag = ANIM_TAG_COLORED_ORBS,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = sPowerSwapGuardSwapAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowerSwapGuardSwap
+};
+
static const union AnimCmd sAnim_CirclingSparkle[] =
{
ANIMCMD_FRAME(0, 3),
@@ -157,7 +209,7 @@ static const union AffineAnimCmd sAffineAnim_HitSplat_3[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_HitSplat[] =
+const union AffineAnimCmd *const gAffineAnims_HitSplat[] =
{
sAffineAnim_HitSplat_0,
sAffineAnim_HitSplat_1,
@@ -172,7 +224,7 @@ const struct SpriteTemplate gBasicHitSplatSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_HitSplat,
+ .affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic,
};
@@ -183,7 +235,7 @@ const struct SpriteTemplate gHandleInvertHitSplatSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_HitSplat,
+ .affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatHandleInvert,
};
@@ -194,7 +246,7 @@ const struct SpriteTemplate gWaterHitSplatSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_HitSplat,
+ .affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic,
};
@@ -205,8 +257,8 @@ const struct SpriteTemplate gRandomPosHitSplatSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_HitSplat,
- .callback = AnimHitSplatRandom,
+ .affineAnims = gAffineAnims_HitSplat,
+ .callback = SpriteCB_RandomCentredHits,
};
const struct SpriteTemplate gMonEdgeHitSplatSpriteTemplate =
@@ -216,7 +268,7 @@ const struct SpriteTemplate gMonEdgeHitSplatSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_HitSplat,
+ .affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatOnMonEdge,
};
@@ -238,7 +290,7 @@ const struct SpriteTemplate gFlashingHitSplatSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_HitSplat,
+ .affineAnims = gAffineAnims_HitSplat,
.callback = AnimFlashingHitSplat,
};
@@ -249,10 +301,43 @@ const struct SpriteTemplate gPersistHitSplatSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_HitSplat,
+ .affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatPersistent,
};
+static void AnimMovePowerSwapGuardSwapWait(struct Sprite *sprite)
+{
+ if (TranslateAnimHorizontalArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: orb type (0..5) - color and size
+// arg 3: from user to target / target to user
+// arg 4: wave period
+// arg 5: wave amplitude
+static void AnimMovePowerSwapGuardSwap(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ if(gBattleAnimArgs[3] == 0)
+ {
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
+ }
+ else
+ {
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
+ }
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimMovePowerSwapGuardSwapWait;
+}
+
// Moves a spinning duck around the mon's head.
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
@@ -717,17 +802,17 @@ static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId)
void AnimTask_InvertScreenColor(u8 taskId)
{
u32 selectedPalettes = 0;
- u8 attackerBattler = gBattleAnimAttacker;
- u8 targetBattler = gBattleAnimTarget;
- if (gBattleAnimArgs[0] & 0x100)
+ if (gBattleAnimArgs[0] & 0x1)
selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
-
- if (gBattleAnimArgs[1] & 0x100)
- selectedPalettes |= (0x10000 << attackerBattler);
-
- if (gBattleAnimArgs[2] & 0x100)
- selectedPalettes |= (0x10000 << targetBattler);
+ if (gBattleAnimArgs[0] & 0x2)
+ selectedPalettes |= (0x10000 << gBattleAnimAttacker);
+ if (gBattleAnimArgs[0] & 0x4)
+ selectedPalettes |= (0x10000 << gBattleAnimTarget);
+ if (gBattleAnimArgs[0] & 0x8 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimTarget)))
+ selectedPalettes |= (0x10000 << BATTLE_PARTNER(gBattleAnimTarget));
+ if (gBattleAnimArgs[0] & 0x10 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimAttacker)))
+ selectedPalettes |= (0x10000 << BATTLE_PARTNER(gBattleAnimAttacker));
InvertPlttBuffer(selectedPalettes);
DestroyAnimVisualTask(taskId);
@@ -941,11 +1026,11 @@ static void AnimTask_ShakeBattleTerrain_Step(u8 taskId)
#undef tTimer
#undef tShakeDelay
-static void AnimHitSplatBasic(struct Sprite *sprite)
+void AnimHitSplatBasic(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
@@ -958,7 +1043,7 @@ static void AnimHitSplatPersistent(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
@@ -977,16 +1062,14 @@ static void AnimHitSplatHandleInvert(struct Sprite *sprite)
AnimHitSplatBasic(sprite);
}
-static void AnimHitSplatRandom(struct Sprite *sprite)
+void AnimHitSplatRandom(struct Sprite *sprite)
{
if (gBattleAnimArgs[1] == -1)
gBattleAnimArgs[1] = Random2() & 3;
+ if (!InitSpritePosToAnimBattler(gBattleAnimArgs[0], sprite, FALSE))
+ return;
StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]);
- if (gBattleAnimArgs[0] == ANIM_ATTACKER)
- InitSpritePosToAnimAttacker(sprite, 0);
- else
- InitSpritePosToAnimTarget(sprite, FALSE);
sprite->x2 += (Random2() % 48) - 24;
sprite->y2 += (Random2() % 24) - 12;
@@ -995,7 +1078,7 @@ static void AnimHitSplatRandom(struct Sprite *sprite)
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
-static void AnimHitSplatOnMonEdge(struct Sprite *sprite)
+void AnimHitSplatOnMonEdge(struct Sprite *sprite)
{
sprite->data[0] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
sprite->x = gSprites[sprite->data[0]].x + gSprites[sprite->data[0]].x2;
@@ -1007,10 +1090,10 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite)
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
-static void AnimCrossImpact(struct Sprite *sprite)
+void AnimCrossImpact(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
@@ -1019,18 +1102,18 @@ static void AnimCrossImpact(struct Sprite *sprite)
sprite->callback = WaitAnimForDuration;
}
-static void AnimFlashingHitSplat(struct Sprite *sprite)
+void AnimFlashingHitSplat(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == ANIM_ATTACKER)
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = AnimFlashingHitSplat_Step;
}
-static void AnimFlashingHitSplat_Step(struct Sprite *sprite)
+void AnimFlashingHitSplat_Step(struct Sprite *sprite)
{
sprite->invisible ^= 1;
if (sprite->data[0]++ > 12)
diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c
index 664df389d6..8905f5c475 100644
--- a/src/battle_anim_poison.c
+++ b/src/battle_anim_poison.c
@@ -6,12 +6,14 @@
static void AnimSludgeProjectile(struct Sprite *);
static void AnimSludgeProjectile_Step(struct Sprite *);
static void AnimAcidPoisonBubble(struct Sprite *);
-static void AnimAcidPoisonBubble_Step(struct Sprite *);
-static void AnimSludgeBombHitParticle(struct Sprite *);
static void AnimSludgeBombHitParticle_Step(struct Sprite *);
static void AnimAcidPoisonDroplet(struct Sprite *);
-static void AnimBubbleEffect(struct Sprite *);
static void AnimBubbleEffect_Step(struct Sprite *);
+static void AnimSuckerPunchStep(struct Sprite *sprite);
+static void AnimSuckerPunch(struct Sprite *sprite);
+static void AnimGunkShotParticlesStep(struct Sprite *sprite);
+static void AnimGunkShotParticles(struct Sprite *sprite);
+static void AnimGunkShotImpact(struct Sprite *sprite);
static const union AnimCmd sAnim_ToxicBubble[] =
{
@@ -56,12 +58,12 @@ static const union AnimCmd sAnim_SludgeBombHit[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_PoisonProjectile[] =
+const union AnimCmd *const gAnims_PoisonProjectile[] =
{
sAnim_PoisonProjectile,
};
-static const union AnimCmd *const sAnims_AcidPoisonDroplet[] =
+const union AnimCmd *const gAnims_AcidPoisonDroplet[] =
{
sAnim_AcidPoisonDroplet,
};
@@ -85,7 +87,7 @@ static const union AffineAnimCmd sAffineAnim_SludgeBombHit[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_PoisonProjectile[] =
+const union AffineAnimCmd *const gAffineAnims_PoisonProjectile[] =
{
sAffineAnim_PoisonProjectile,
};
@@ -100,9 +102,9 @@ const struct SpriteTemplate gSludgeProjectileSpriteTemplate =
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
- .anims = sAnims_PoisonProjectile,
+ .anims = gAnims_PoisonProjectile,
.images = NULL,
- .affineAnims = sAffineAnims_PoisonProjectile,
+ .affineAnims = gAffineAnims_PoisonProjectile,
.callback = AnimSludgeProjectile,
};
@@ -111,9 +113,9 @@ const struct SpriteTemplate gAcidPoisonBubbleSpriteTemplate =
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
- .anims = sAnims_PoisonProjectile,
+ .anims = gAnims_PoisonProjectile,
.images = NULL,
- .affineAnims = sAffineAnims_PoisonProjectile,
+ .affineAnims = gAffineAnims_PoisonProjectile,
.callback = AnimAcidPoisonBubble,
};
@@ -145,7 +147,7 @@ const struct SpriteTemplate gAcidPoisonDropletSpriteTemplate =
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
- .anims = sAnims_AcidPoisonDroplet,
+ .anims = gAnims_AcidPoisonDroplet,
.images = NULL,
.affineAnims = gAffineAnims_Droplet,
.callback = AnimAcidPoisonDroplet,
@@ -158,7 +160,7 @@ static const union AffineAnimCmd sAffineAnim_Bubble[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_Bubble[] =
+const union AffineAnimCmd *const gAffineAnims_Bubble[] =
{
sAffineAnim_Bubble,
};
@@ -168,9 +170,9 @@ const struct SpriteTemplate gPoisonBubbleSpriteTemplate =
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
- .anims = sAnims_PoisonProjectile,
+ .anims = gAnims_PoisonProjectile,
.images = NULL,
- .affineAnims = sAffineAnims_Bubble,
+ .affineAnims = gAffineAnims_Bubble,
.callback = AnimBubbleEffect,
};
@@ -181,16 +183,227 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gAnims_WaterBubble,
.images = NULL,
- .affineAnims = sAffineAnims_Bubble,
+ .affineAnims = gAffineAnims_Bubble,
.callback = AnimBubbleEffect,
};
+const struct SpriteTemplate gGreenPoisonDrip =
+{
+ .tileTag = ANIM_TAG_GREEN_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_GREEN_POISON_BUBBLE,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gAnims_AcidPoisonDroplet,
+ .images = NULL,
+ .affineAnims = gAffineAnims_Droplet,
+ .callback = AnimAcidPoisonDroplet,
+};
+
+const struct SpriteTemplate gGreenPoisonBubble =
+{
+ .tileTag = ANIM_TAG_GREEN_POISON_BUBBLE,
+ .paletteTag = ANIM_TAG_GREEN_POISON_BUBBLE,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gAnims_PoisonProjectile,
+ .images = NULL,
+ .affineAnims = gAffineAnims_PoisonProjectile,
+ .callback = AnimAcidPoisonBubble,
+};
+
+const union AnimCmd gSuckerPunchAnimCmd[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSuckerPunchAnim[] =
+{
+ gSuckerPunchAnimCmd,
+};
+
+const union AnimCmd gGunkShotParticlesAnimCmd[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gGunkShotParticlesAnims[] =
+{
+ gGunkShotParticlesAnimCmd,
+};
+
+const union AffineAnimCmd gSuckerPunchImpactAffineAnimCmd_1[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSuckerPunchImpactAffineAnimCmd_2[] =
+{
+ AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSuckerPunchImpactAffineAnimCmd_3[] =
+{
+ AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSuckerPunchImpactAffineAnimCmd_4[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSuckerPunchImpactAffineAnim[] =
+{
+ gSuckerPunchImpactAffineAnimCmd_1,
+ gSuckerPunchImpactAffineAnimCmd_2,
+ gSuckerPunchImpactAffineAnimCmd_3,
+ gSuckerPunchImpactAffineAnimCmd_4,
+};
+
+const struct SpriteTemplate gSuckerPunchSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_JAB,
+ .paletteTag = ANIM_TAG_POISON_JAB,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gSuckerPunchAnim,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSuckerPunch,
+};
+
+const struct SpriteTemplate gGunkShoParticlesSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
+ .anims = gGunkShotParticlesAnims,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimGunkShotParticles,
+};
+
+const struct SpriteTemplate gGunkShotImpactSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_IMPACT,
+ .paletteTag = ANIM_TAG_POISON_BUBBLE,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gSuckerPunchImpactAffineAnim,
+ .callback = AnimGunkShotImpact,
+};
+
+static void AnimGunkShotImpact(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
+ if (gBattleAnimArgs[2] == 0)
+ InitSpritePosToAnimAttacker(sprite, 1);
+ else
+ InitSpritePosToAnimTarget(sprite, TRUE);
+
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void AnimGunkShotParticles(struct Sprite *sprite)
+{
+ u16 retArg;
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = 30;
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = 0xD200 / sprite->data[0];
+ sprite->data[7] = gBattleAnimArgs[3];
+ retArg = gBattleAnimArgs[ARG_RET_ID];
+ if (gBattleAnimArgs[ARG_RET_ID] > 127)
+ {
+ sprite->data[6] = (retArg - 127) * 256;
+ sprite->data[7] = -sprite->data[7];
+ }
+ else
+ {
+ sprite->data[6] = retArg * 256;
+ }
+ sprite->callback = AnimGunkShotParticlesStep;
+ sprite->callback(sprite);
+}
+
+static void AnimGunkShotParticlesStep(struct Sprite *sprite)
+{
+ if (AnimTranslateLinear(sprite))
+ DestroyAnimSprite(sprite);
+ sprite->y2 += Sin(sprite->data[6] >> 8, sprite->data[7]);
+ if ((sprite->data[6] + sprite->data[5]) >> 8 > 127)
+ {
+ sprite->data[6] = 0;
+ sprite->data[7] = -sprite->data[7];
+ }
+ else
+ {
+ sprite->data[6] += sprite->data[5];
+ }
+}
+
+static void AnimSuckerPunch(struct Sprite *sprite)
+{
+ if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT)
+ gBattleAnimArgs[0] *= -1;
+
+ InitSpritePosToAnimTarget(sprite, TRUE);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->x;
+ sprite->data[2] = sprite->x + gBattleAnimArgs[2];
+ sprite->data[3] = sprite->y;
+ sprite->data[4] = sprite->y;
+
+ InitAnimLinearTranslation(sprite);
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ sprite->data[6] = gBattleAnimArgs[4];
+ sprite->data[7] = 0;
+
+ sprite->callback = AnimSuckerPunchStep;
+}
+
+static void AnimSuckerPunchStep(struct Sprite *sprite)
+{
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->y2 += Sin(sprite->data[7] >> 8, sprite->data[5]);
+ sprite->data[7] += sprite->data[6];
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
static void AnimSludgeProjectile(struct Sprite *sprite)
{
if (!gBattleAnimArgs[3])
StartSpriteAnim(sprite, 2);
- InitSpritePosToAnimAttacker(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
@@ -210,12 +423,15 @@ static void AnimSludgeProjectile_Step(struct Sprite *sprite)
static void AnimAcidPoisonBubble(struct Sprite *sprite)
{
- s16 l1, l2;
+ s16 l1 = 0, l2 = 0;
if (!gBattleAnimArgs[3])
StartSpriteAnim(sprite, 2);
- InitSpritePosToAnimAttacker(sprite, 1);
- SetAverageBattlerPositions(gBattleAnimTarget, 1, &l1, &l2);
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ if (gBattleAnimArgs[6])
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &l1, &l2);
+ else
+ l1 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2), l2 = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[4] = -gBattleAnimArgs[4];
@@ -230,13 +446,13 @@ static void AnimAcidPoisonBubble(struct Sprite *sprite)
sprite->callback = AnimAcidPoisonBubble_Step;
}
-static void AnimAcidPoisonBubble_Step(struct Sprite *sprite)
+void AnimAcidPoisonBubble_Step(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroyAnimSprite(sprite);
}
-static void AnimSludgeBombHitParticle(struct Sprite *sprite)
+void AnimSludgeBombHitParticle(struct Sprite *sprite)
{
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->x;
@@ -265,7 +481,8 @@ static void AnimSludgeBombHitParticle_Step(struct Sprite *sprite)
static void AnimAcidPoisonDroplet(struct Sprite *sprite)
{
- SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y);
+ if (gBattleAnimArgs[5])
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
@@ -287,7 +504,7 @@ static void AnimAcidPoisonDroplet(struct Sprite *sprite)
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: 0 = single-target, 1 = multi-target
-static void AnimBubbleEffect(struct Sprite *sprite)
+void AnimBubbleEffect(struct Sprite *sprite)
{
if (!gBattleAnimArgs[2])
{
diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c
index aebf76cc06..51b535af99 100644
--- a/src/battle_anim_psychic.c
+++ b/src/battle_anim_psychic.c
@@ -21,13 +21,14 @@ static void AnimQuestionMark_Step1(struct Sprite *);
static void AnimQuestionMark_Step2(struct Sprite *);
static void AnimRedX(struct Sprite *);
static void AnimSkillSwapOrb(struct Sprite *);
-static void AnimPsychoBoost(struct Sprite *);
static void AnimTask_MeditateStretchAttacker_Step(u8);
static void AnimTask_Teleport_Step(u8);
static void AnimTask_ImprisonOrbs_Step(u8);
static void AnimTask_SkillSwap_Step(u8);
static void AnimTask_ExtrasensoryDistortion_Step(u8);
static void AnimTask_TransparentCloneGrowAndShrink_Step(u8);
+static void AnimateZenHeadbutt(struct Sprite *sprite);
+static void AnimPsychoCut(struct Sprite *sprite);
static const union AffineAnimCmd sAffineAnim_PsychUpSpiral[] =
{
@@ -365,7 +366,7 @@ static const union AffineAnimCmd sAffineAnim_LusterPurgeCircle[] =
AFFINEANIMCMD_END_ALT(1),
};
-static const union AffineAnimCmd *const sAffineAnims_LusterPurgeCircle[] =
+const union AffineAnimCmd *const gAffineAnims_LusterPurgeCircle[] =
{
sAffineAnim_LusterPurgeCircle,
};
@@ -377,7 +378,7 @@ const struct SpriteTemplate gLusterPurgeCircleSpriteTemplate =
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_LusterPurgeCircle,
+ .affineAnims = gAffineAnims_LusterPurgeCircle,
.callback = AnimSpriteOnMonPos,
};
@@ -402,7 +403,7 @@ static const union AffineAnimCmd sAffineAnim_PsychoBoostOrb_1[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const sAffineAnims_PsychoBoostOrb[] =
+const union AffineAnimCmd *const gAffineAnims_PsychoBoostOrb[] =
{
sAffineAnim_PsychoBoostOrb_0,
sAffineAnim_PsychoBoostOrb_1,
@@ -415,10 +416,126 @@ const struct SpriteTemplate gPsychoBoostOrbSpriteTemplate =
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = sAffineAnims_PsychoBoostOrb,
+ .affineAnims = gAffineAnims_PsychoBoostOrb,
.callback = AnimPsychoBoost,
};
+const union AffineAnimCmd gZenHeadbuttAffineAnimCmd[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 18),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 8),
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 8),
+ AFFINEANIMCMD_LOOP(5),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gZenHeadbuttAffineAnims[] =
+{
+ gZenHeadbuttAffineAnimCmd,
+};
+
+const struct SpriteTemplate gZenHeadbuttSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
+ .paletteTag = ANIM_TAG_WATER_IMPACT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gZenHeadbuttAffineAnims,
+ .callback = AnimateZenHeadbutt,
+};
+
+const struct SpriteTemplate gPsychoCutSpiralSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPIRAL,
+ .paletteTag = ANIM_TAG_PSYCHO_CUT,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = sAffineAnims_PsychUpSpiral,
+ .callback = AnimSpriteOnMonPos,
+};
+
+const struct SpriteTemplate gPsychoCutSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PSYCHO_CUT,
+ .paletteTag = ANIM_TAG_PSYCHO_CUT,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPsychoCut,
+};
+
+static void AnimPsychoCut(struct Sprite *sprite)
+{
+ s16 lVarX, lVarY;
+ u16 rot;
+
+ if (IsContest())
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+ else
+ {
+ if (GetBattlerSide(gBattleAnimAttacker))
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+ }
+
+ if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
+ {
+ if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT
+ || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT)
+ {
+ s16 temp1, temp2;
+
+ temp1 = gBattleAnimArgs[2];
+ gBattleAnimArgs[2] = -temp1;
+
+ temp2 = gBattleAnimArgs[0];
+ gBattleAnimArgs[0] = -temp2;
+ }
+ }
+
+ InitSpritePosToAnimAttacker(sprite, 1);
+
+ lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ rot = ArcTan2Neg(lVarX - sprite->x, lVarY - sprite->y);
+ rot += 0xC000;
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = lVarX;
+ sprite->data[4] = lVarY;
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void AnimateZenHeadbutt(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18;
+ }
+ else
+ {
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18;
+ }
+
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
// For the rectangular wall sprite used by Reflect, Mirror Coat, etc
static void AnimDefensiveWall(struct Sprite *sprite)
{
@@ -1118,7 +1235,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId)
}
}
-static void AnimPsychoBoost(struct Sprite *sprite)
+void AnimPsychoBoost(struct Sprite *sprite)
{
switch (sprite->data[0])
{
diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c
index 5aa8f28c30..d3ae318df5 100644
--- a/src/battle_anim_rock.c
+++ b/src/battle_anim_rock.c
@@ -9,11 +9,6 @@
#include "constants/rgb.h"
#include "constants/songs.h"
-static void AnimFallingRock(struct Sprite *);
-static void AnimFallingRock_Step(struct Sprite *);
-static void AnimRockFragment(struct Sprite *);
-static void AnimFlyingSandCrescent(struct Sprite *);
-static void AnimRaiseSprite(struct Sprite *);
static void AnimTask_Rollout_Step(u8 taskId);
static void AnimRolloutParticle(struct Sprite *);
static void AnimRockTomb(struct Sprite *);
@@ -21,10 +16,12 @@ static void AnimRockTomb_Step(struct Sprite *sprite);
static void AnimRockBlastRock(struct Sprite *);
static void AnimRockScatter(struct Sprite *);
static void AnimRockScatter_Step(struct Sprite *sprite);
-static void AnimParticleInVortex(struct Sprite *);
static void AnimParticleInVortex_Step(struct Sprite *sprite);
static void AnimTask_LoadSandstormBackground_Step(u8 taskId);
static void CreateRolloutDirtSprite(struct Task *task);
+static void AnimStealthRockStep2(struct Sprite *sprite);
+static void AnimStealthRockStep(struct Sprite *sprite);
+static void AnimStealthRock(struct Sprite *sprite);
static u8 GetRolloutCounter(void);
static const union AnimCmd sAnim_FlyingRock_0[] =
@@ -45,7 +42,7 @@ static const union AnimCmd sAnim_FlyingRock_2[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_FlyingRock[] =
+const union AnimCmd *const gAnims_FlyingRock[] =
{
sAnim_FlyingRock_0,
sAnim_FlyingRock_1,
@@ -57,7 +54,7 @@ const struct SpriteTemplate gFallingRockSpriteTemplate =
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_FlyingRock,
+ .anims = gAnims_FlyingRock,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFallingRock,
@@ -68,7 +65,7 @@ const struct SpriteTemplate gRockFragmentSpriteTemplate =
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_FlyingRock,
+ .anims = gAnims_FlyingRock,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimRockFragment,
@@ -93,7 +90,7 @@ static const union AffineAnimCmd sAffineAnim_Whirlpool[] =
AFFINEANIMCMD_JUMP(1),
};
-static const union AffineAnimCmd *const sAffineAnims_Whirlpool[] =
+const union AffineAnimCmd *const gAffineAnims_Whirlpool[] =
{
sAffineAnim_Whirlpool,
};
@@ -105,7 +102,7 @@ const struct SpriteTemplate gWhirlpoolSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gAnims_WaterMudOrb,
.images = NULL,
- .affineAnims = sAffineAnims_Whirlpool,
+ .affineAnims = gAffineAnims_Whirlpool,
.callback = AnimParticleInVortex,
};
@@ -244,7 +241,7 @@ static const union AffineAnimCmd sAffineAnim_BasicRock_1[] =
AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd *const sAffineAnims_BasicRock[] =
+const union AffineAnimCmd *const gAffineAnims_BasicRock[] =
{
sAffineAnim_BasicRock_0,
sAffineAnim_BasicRock_1,
@@ -257,7 +254,7 @@ const struct SpriteTemplate gRockBlastRockSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = sAnims_BasicRock,
.images = NULL,
- .affineAnims = sAffineAnims_BasicRock,
+ .affineAnims = gAffineAnims_BasicRock,
.callback = AnimRockBlastRock,
};
@@ -268,7 +265,7 @@ const struct SpriteTemplate gRockScatterSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = sAnims_BasicRock,
.images = NULL,
- .affineAnims = sAffineAnims_BasicRock,
+ .affineAnims = gAffineAnims_BasicRock,
.callback = AnimRockScatter,
};
@@ -279,7 +276,7 @@ const struct SpriteTemplate gTwisterRockSpriteTemplate =
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = &sAnims_BasicRock[4],
.images = NULL,
- .affineAnims = sAffineAnims_BasicRock,
+ .affineAnims = gAffineAnims_BasicRock,
.callback = AnimMoveTwisterParticle,
};
@@ -290,14 +287,113 @@ const struct SpriteTemplate gWeatherBallRockDownSpriteTemplate =
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = &sAnims_BasicRock[2],
.images = NULL,
- .affineAnims = sAffineAnims_BasicRock,
+ .affineAnims = gAffineAnims_BasicRock,
.callback = AnimWeatherBallDown,
};
-static void AnimFallingRock(struct Sprite *sprite)
+const struct SpriteTemplate gStoneEdgeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_STONE_EDGE,
+ .paletteTag = ANIM_TAG_STONE_EDGE,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_BasicFire,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimParticleInVortex,
+};
+
+const struct SpriteTemplate gStealthRockSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_STEALTH_ROCK,
+ .paletteTag = ANIM_TAG_STEALTH_ROCK,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimStealthRock,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_CrushGripHandEnemyAttack[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 96, 1), //180 degree turn
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd sSpriteAffineAnim_DoNothing[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1), //Do nothing
+ AFFINEANIMCMD_END
+};
+static const union AffineAnimCmd* const sSpriteAffineAnimTable_CrushGripHand[] =
+{
+ sSpriteAffineAnim_DoNothing,
+ sSpriteAffineAnim_CrushGripHandEnemyAttack,
+};
+const struct SpriteTemplate gCrushGripHandTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
+ .paletteTag = ANIM_TAG_ACCUPRESSURE,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = sAnims_BasicRock,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_CrushGripHand,
+ .callback = AnimRockBlastRock
+};
+
+const struct SpriteTemplate gSeedFlareGreenWavesTemplate =
+{
+ .tileTag = ANIM_TAG_FLYING_DIRT,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFlyingSandCrescent
+};
+
+static void AnimStealthRock(struct Sprite *sprite)
+{
+ u16 x;
+ u16 y;
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &x, &y);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = x + gBattleAnimArgs[2];
+ sprite->data[4] = y + gBattleAnimArgs[3];
+ sprite->data[5] = -50;
+
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimStealthRockStep;
+}
+
+static void AnimStealthRockStep(struct Sprite *sprite)
+{
+ if (TranslateAnimHorizontalArc(sprite))
+ {
+ sprite->data[0] = 30;
+ sprite->data[1] = 0;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, AnimStealthRockStep2);
+ }
+}
+
+static void AnimStealthRockStep2(struct Sprite *sprite)
+{
+ if (sprite->data[1] & 1)
+ sprite->invisible ^= 1;
+
+ if (++sprite->data[1] == 16)
+ DestroyAnimSprite(sprite);
+}
+
+void AnimFallingRock(struct Sprite *sprite)
{
if (gBattleAnimArgs[3] != 0)
- SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->x, &sprite->y);
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y);
sprite->x += gBattleAnimArgs[0];
sprite->y += 14;
@@ -317,7 +413,7 @@ static void AnimFallingRock(struct Sprite *sprite)
sprite->callback(sprite);
}
-static void AnimFallingRock_Step(struct Sprite *sprite)
+void AnimFallingRock_Step(struct Sprite *sprite)
{
sprite->x += sprite->data[5];
@@ -333,7 +429,7 @@ static void AnimFallingRock_Step(struct Sprite *sprite)
}
// Animates the rock particles that are shown on the impact for Rock Blast / Rock Smash
-static void AnimRockFragment(struct Sprite *sprite)
+void AnimRockFragment(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[5]);
AnimateSprite(sprite);
@@ -360,10 +456,10 @@ static void AnimRockFragment(struct Sprite *sprite)
}
// Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb
-static void AnimParticleInVortex(struct Sprite *sprite)
+void AnimParticleInVortex(struct Sprite *sprite)
{
if (gBattleAnimArgs[6] == ANIM_ATTACKER)
- InitSpritePosToAnimAttacker(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, FALSE);
else
InitSpritePosToAnimTarget(sprite, FALSE);
@@ -490,7 +586,7 @@ static void AnimTask_LoadSandstormBackground_Step(u8 taskId)
// arg 1: projectile speed
// arg 2: y pixel drop
// arg 3: ??? unknown (possibly a color bit)
-static void AnimFlyingSandCrescent(struct Sprite *sprite)
+void AnimFlyingSandCrescent(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -541,10 +637,10 @@ static void AnimFlyingSandCrescent(struct Sprite *sprite)
// arg 2: terminal y offset
// arg 3: duration
// arg 4: sprite size [1,5]
-static void AnimRaiseSprite(struct Sprite *sprite)
+void AnimRaiseSprite(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
- InitSpritePosToAnimAttacker(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[2] = sprite->x;
@@ -607,6 +703,54 @@ void AnimTask_Rollout(u8 taskId)
task->func = AnimTask_Rollout_Step;
}
+void AnimTask_TectonicRageRollout(u8 taskId)
+{
+ u16 var0, var1, var2, var3;
+ int var5;
+ s16 pan1, pan2;
+ struct Task *task;
+ u8 rolloutCounter = 1;
+
+ task = &gTasks[taskId];
+
+ var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24;
+ var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24;
+
+ if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
+ var3 = var1;
+
+ task->data[8] = 48 - (rolloutCounter * 8); //rollout speed
+ task->data[0] = 0;
+ task->data[11] = 0;
+ task->data[9] = 0;
+ task->data[12] = 1;
+
+ var5 = task->data[8];
+ if (var5 < 0)
+ var5 += 7;
+
+ task->data[10] = (var5 >> 3) - 1;
+
+ task->data[2] = var0 * 8;
+ task->data[3] = var1 * 8;
+ task->data[4] = ((var2 - var0) * 8) / task->data[8];
+ task->data[5] = ((var3 - var1) * 8) / task->data[8];
+ task->data[6] = 0;
+ task->data[7] = 0;
+
+ pan1 = BattleAnimAdjustPanning(-64);
+ pan2 = BattleAnimAdjustPanning(63);
+
+ task->data[13] = pan1;
+ task->data[14] = (pan2 - pan1) / task->data[8];
+ task->data[1] = rolloutCounter;
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+
+ task->func = AnimTask_Rollout_Step;
+}
+
static void AnimTask_Rollout_Step(u8 taskId)
{
struct Task *task;
diff --git a/src/battle_anim_smokescreen.c b/src/battle_anim_smokescreen.c
index c7be8d41c4..e395be5f84 100644
--- a/src/battle_anim_smokescreen.c
+++ b/src/battle_anim_smokescreen.c
@@ -61,7 +61,7 @@ static const struct OamData sOamData_SmokescreenImpact =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -134,7 +134,7 @@ static const struct OamData sOamData_EnemyShadow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c
index f329ea2107..8f47864b18 100644
--- a/src/battle_anim_sound_tasks.c
+++ b/src/battle_anim_sound_tasks.c
@@ -2,16 +2,20 @@
#include "battle.h"
#include "battle_anim.h"
#include "contest.h"
+#include "m4a.h"
#include "sound.h"
#include "task.h"
#include "constants/battle_anim.h"
+extern struct MusicPlayerInfo gMPlayInfo_SE1;
+
static void SoundTask_FireBlast_Step1(u8 taskId);
static void SoundTask_FireBlast_Step2(u8 taskId);
static void SoundTask_LoopSEAdjustPanning_Step(u8 taskId);
static void SoundTask_PlayDoubleCry_Step(u8 taskId);
static void SoundTask_PlayCryWithEcho_Step(u8 taskId);
static void SoundTask_AdjustPanningVar_Step(u8 taskId);
+static void SoundTask_SeVolumeChange(u8 taskId);
// Loops the specified sound effect and pans from the
// attacker to the target. The second specified sound effect
@@ -405,3 +409,61 @@ static void SoundTask_AdjustPanningVar_Step(u8 taskId)
if (gTasks[taskId].data[11] == gTasks[taskId].data[2])
DestroyAnimVisualTask(taskId);
}
+
+#define tSongNum data[0]
+#define tPan data[1]
+#define tCurrentVolume data[2]
+#define tIncrementVal data[3]
+#define tTargetVolume data[4]
+#define tDelay data[5]
+#define tFrameCounter data[6]
+#define tInitialVolume data[7]
+
+void SoundTask_PlaySeChangingVolume(u8 taskId)
+{
+ gTasks[taskId].tSongNum = gBattleAnimArgs[0];
+ gTasks[taskId].tPan = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
+ gTasks[taskId].tCurrentVolume = gTasks[taskId].tInitialVolume = gBattleAnimArgs[2];
+ gTasks[taskId].tIncrementVal = gBattleAnimArgs[3];
+ gTasks[taskId].tTargetVolume = gBattleAnimArgs[4];
+ gTasks[taskId].tDelay = gBattleAnimArgs[5];
+
+ PlaySE1WithPanning(gTasks[taskId].tSongNum, gTasks[taskId].tPan);
+ m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, gTasks[taskId].tCurrentVolume);
+ if (gTasks[taskId].tIncrementVal == 0) // Either increase or decrease volume.
+ DestroyAnimSoundTask(taskId);
+ else
+ gTasks[taskId].func = SoundTask_SeVolumeChange;
+}
+
+static void SoundTask_SeVolumeChange(u8 taskId)
+{
+ bool32 destroyTask = FALSE;
+
+ if (gTasks[taskId].tFrameCounter++ >= gTasks[taskId].tDelay)
+ {
+ gTasks[taskId].tFrameCounter = 0;
+ gTasks[taskId].tCurrentVolume += gTasks[taskId].tIncrementVal;
+
+ if (gTasks[taskId].tCurrentVolume < 0)
+ gTasks[taskId].tCurrentVolume = 0;
+ if (gTasks[taskId].tCurrentVolume > 256)
+ gTasks[taskId].tCurrentVolume = 256;
+
+ if (gTasks[taskId].tInitialVolume < gTasks[taskId].tTargetVolume) // Volume increasing.
+ {
+ if (gTasks[taskId].tCurrentVolume >= gTasks[taskId].tTargetVolume) // Target reached.
+ destroyTask = TRUE;
+ }
+ else // Volume decreasing.
+ {
+ if (gTasks[taskId].tCurrentVolume <= gTasks[taskId].tTargetVolume) // Target reached.
+ destroyTask = TRUE;
+ }
+
+ if (destroyTask)
+ DestroyAnimSoundTask(taskId);
+
+ m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, gTasks[taskId].tCurrentVolume);
+ }
+}
diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c
index f56d04ccd1..fb2f979565 100644
--- a/src/battle_anim_status_effects.c
+++ b/src/battle_anim_status_effects.c
@@ -107,7 +107,7 @@ static const union AnimCmd sAnim_SpinningSparkle[] =
ANIMCMD_END
};
-static const union AnimCmd *const sAnims_SpinningSparkle[] =
+const union AnimCmd *const sAnims_SpinningSparkle[] =
{
sAnim_SpinningSparkle
};
@@ -379,6 +379,25 @@ static void AnimFlashingCircleImpact_Step(struct Sprite *sprite)
}
}
+void AnimTask_FrozenIceCubeAttacker(u8 taskId)
+{
+ s16 x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - 32;
+ s16 y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - 36;
+ u8 spriteId;
+
+ if (IsContest())
+ x -= 6;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4);
+ if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF)
+ gSprites[spriteId].invisible = TRUE;
+ SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable);
+ gTasks[taskId].data[15] = spriteId;
+ gTasks[taskId].func = AnimTask_FrozenIceCube_Step1;
+}
+
+
void AnimTask_FrozenIceCube(u8 taskId)
{
s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 32;
diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c
index 2f095a043a..9226a9dab8 100755
--- a/src/battle_anim_throw.c
+++ b/src/battle_anim_throw.c
@@ -99,6 +99,7 @@ static void DiveBallOpenParticleAnimation(u8);
static void RepeatBallOpenParticleAnimation(u8);
static void TimerBallOpenParticleAnimation(u8);
static void PremierBallOpenParticleAnimation(u8);
+static void CB_CriticalCaptureThrownBallMovement(struct Sprite *sprite);
static void SpriteCB_PokeBlock_Throw(struct Sprite *);
struct CaptureStar
@@ -127,49 +128,94 @@ static const struct CaptureStar sCaptureStars[] =
},
};
-#define TAG_PARTICLES_POKEBALL 55020
-#define TAG_PARTICLES_GREATBALL 55021
-#define TAG_PARTICLES_SAFARIBALL 55022
-#define TAG_PARTICLES_ULTRABALL 55023
-#define TAG_PARTICLES_MASTERBALL 55024
-#define TAG_PARTICLES_NETBALL 55025
-#define TAG_PARTICLES_DIVEBALL 55026
-#define TAG_PARTICLES_NESTBALL 55027
-#define TAG_PARTICLES_REPEATBALL 55028
-#define TAG_PARTICLES_TIMERBALL 55029
-#define TAG_PARTICLES_LUXURYBALL 55030
-#define TAG_PARTICLES_PREMIERBALL 55031
+#define TAG_PARTICLES_POKEBALL 65030
+#define TAG_PARTICLES_GREATBALL 65031
+#define TAG_PARTICLES_ULTRABALL 65032
+#define TAG_PARTICLES_MASTERBALL 65033
+#define TAG_PARTICLES_PREMIERBALL 65034
+#define TAG_PARTICLES_HEALBALL 65035
+#define TAG_PARTICLES_NETBALL 65036
+#define TAG_PARTICLES_NESTBALL 65037
+#define TAG_PARTICLES_DIVEBALL 65038
+#define TAG_PARTICLES_DUSKBALL 65039
+#define TAG_PARTICLES_TIMERBALL 65040
+#define TAG_PARTICLES_QUICKBALL 65041
+#define TAG_PARTICLES_REPEATBALL 65042
+#define TAG_PARTICLES_LUXURYBALL 65043
+#define TAG_PARTICLES_LEVELBALL 65044
+#define TAG_PARTICLES_LUREBALL 65045
+#define TAG_PARTICLES_MOONBALL 65046
+#define TAG_PARTICLES_FRIENDBALL 65047
+#define TAG_PARTICLES_LOVEBALL 65048
+#define TAG_PARTICLES_FASTBALL 65049
+#define TAG_PARTICLES_HEAVYBALL 65050
+#define TAG_PARTICLES_DREAMBALL 65051
+#define TAG_PARTICLES_SAFARIBALL 65052
+#define TAG_PARTICLES_SPORTBALL 65053
+#define TAG_PARTICLES_PARKBALL 65054
+#define TAG_PARTICLES_BEASTBALL 65055
+#define TAG_PARTICLES_CHERISHBALL 65056
-static const struct CompressedSpriteSheet sBallParticleSpriteSheets[POKEBALL_COUNT] =
+static const struct CompressedSpriteSheet sBallParticleSpriteSheets[] =
{
- [BALL_POKE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL},
- [BALL_GREAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL},
- [BALL_SAFARI] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL},
- [BALL_ULTRA] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL},
- [BALL_MASTER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL},
- [BALL_NET] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL},
- [BALL_DIVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL},
- [BALL_NEST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL},
- [BALL_REPEAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL},
- [BALL_TIMER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL},
- [BALL_LUXURY] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL},
- [BALL_PREMIER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL},
+ [BALL_POKE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL},
+ [BALL_GREAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL},
+ [BALL_ULTRA] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL},
+ [BALL_MASTER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL},
+ [BALL_PREMIER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL},
+ [BALL_HEAL] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_HEALBALL},
+ [BALL_NET] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL},
+ [BALL_NEST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL},
+ [BALL_DIVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL},
+ [BALL_DUSK] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_DUSKBALL},
+ [BALL_TIMER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL},
+ [BALL_QUICK] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_QUICKBALL},
+ [BALL_REPEAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL},
+ [BALL_LUXURY] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL},
+ [BALL_LEVEL] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_LEVELBALL},
+ [BALL_LURE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUREBALL},
+ [BALL_MOON] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_MOONBALL},
+ [BALL_FRIEND] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_FRIENDBALL},
+ [BALL_LOVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LOVEBALL},
+ [BALL_FAST] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_FASTBALL},
+ [BALL_HEAVY] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_HEAVYBALL},
+ [BALL_DREAM] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DREAMBALL},
+ [BALL_SAFARI] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL},
+ [BALL_SPORT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SPORTBALL},
+ [BALL_PARK] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PARKBALL},
+ [BALL_BEAST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_BEASTBALL},
+ [BALL_CHERISH] = {gBattleAnimSpriteGfx_Particles2, 0x100, TAG_PARTICLES_CHERISHBALL},
};
-static const struct CompressedSpritePalette sBallParticlePalettes[POKEBALL_COUNT] =
+static const struct CompressedSpritePalette sBallParticlePalettes[] =
{
- [BALL_POKE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL},
- [BALL_GREAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL},
- [BALL_SAFARI] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL},
- [BALL_ULTRA] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL},
- [BALL_MASTER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL},
- [BALL_NET] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL},
- [BALL_DIVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL},
- [BALL_NEST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL},
- [BALL_REPEAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL},
- [BALL_TIMER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL},
- [BALL_LUXURY] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL},
- [BALL_PREMIER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL},
+ [BALL_POKE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL},
+ [BALL_GREAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL},
+ [BALL_ULTRA] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL},
+ [BALL_MASTER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL},
+ [BALL_PREMIER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL},
+ [BALL_HEAL] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_HEALBALL},
+ [BALL_NET] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL},
+ [BALL_NEST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL},
+ [BALL_DIVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL},
+ [BALL_DUSK] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_DUSKBALL},
+ [BALL_TIMER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL},
+ [BALL_QUICK] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_QUICKBALL},
+ [BALL_REPEAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL},
+ [BALL_LUXURY] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL},
+ [BALL_LEVEL] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_LEVELBALL},
+ [BALL_LURE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUREBALL},
+ [BALL_MOON] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_MOONBALL},
+ [BALL_FRIEND] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_FRIENDBALL},
+ [BALL_LOVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LOVEBALL},
+ [BALL_FAST] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_FASTBALL},
+ [BALL_HEAVY] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_HEAVYBALL},
+ [BALL_DREAM] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DREAMBALL},
+ [BALL_SAFARI] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL},
+ [BALL_SPORT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SPORTBALL},
+ [BALL_PARK] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PARKBALL},
+ [BALL_BEAST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_BEASTBALL},
+ [BALL_CHERISH] = {gBattleAnimSpritePal_Particles2, TAG_PARTICLES_CHERISHBALL},
};
static const union AnimCmd sAnim_RegularBall[] =
@@ -228,32 +274,63 @@ static const u8 sBallParticleAnimNums[POKEBALL_COUNT] =
{
[BALL_POKE] = 0,
[BALL_GREAT] = 0,
- [BALL_SAFARI] = 0,
[BALL_ULTRA] = 5,
[BALL_MASTER] = 1,
- [BALL_NET] = 2,
- [BALL_DIVE] = 2,
- [BALL_NEST] = 3,
- [BALL_REPEAT] = 5,
- [BALL_TIMER] = 5,
- [BALL_LUXURY] = 4,
[BALL_PREMIER] = 4,
+ [BALL_HEAL] = 0,
+ [BALL_NET] = 2,
+ [BALL_NEST] = 3,
+ [BALL_DIVE] = 2,
+ [BALL_DUSK] = 2,
+ [BALL_TIMER] = 5,
+ [BALL_QUICK] = 4,
+ [BALL_REPEAT] = 5,
+ [BALL_LUXURY] = 4,
+ [BALL_LEVEL] = 5,
+ [BALL_LURE] = 2,
+ [BALL_MOON] = 4,
+ [BALL_FRIEND] = 3,
+ [BALL_LOVE] = 3,
+ [BALL_FAST] = 4,
+ [BALL_HEAVY] = 0,
+ [BALL_DREAM] = 5,
+ [BALL_SAFARI] = 0,
+ [BALL_SPORT] = 0,
+ [BALL_PARK] = 5,
+ [BALL_BEAST] = 5,
+ [BALL_CHERISH] = 0,
};
static const TaskFunc sBallParticleAnimationFuncs[POKEBALL_COUNT] =
{
+ // Todo: assign and possibly create different particles
[BALL_POKE] = PokeBallOpenParticleAnimation,
[BALL_GREAT] = GreatBallOpenParticleAnimation,
- [BALL_SAFARI] = SafariBallOpenParticleAnimation,
[BALL_ULTRA] = UltraBallOpenParticleAnimation,
[BALL_MASTER] = MasterBallOpenParticleAnimation,
- [BALL_NET] = SafariBallOpenParticleAnimation,
- [BALL_DIVE] = DiveBallOpenParticleAnimation,
- [BALL_NEST] = UltraBallOpenParticleAnimation,
- [BALL_REPEAT] = RepeatBallOpenParticleAnimation,
- [BALL_TIMER] = TimerBallOpenParticleAnimation,
- [BALL_LUXURY] = GreatBallOpenParticleAnimation,
[BALL_PREMIER] = PremierBallOpenParticleAnimation,
+ [BALL_HEAL] = PokeBallOpenParticleAnimation,
+ [BALL_NET] = SafariBallOpenParticleAnimation,
+ [BALL_NEST] = UltraBallOpenParticleAnimation,
+ [BALL_DIVE] = DiveBallOpenParticleAnimation,
+ [BALL_DUSK] = UltraBallOpenParticleAnimation,
+ [BALL_TIMER] = TimerBallOpenParticleAnimation,
+ [BALL_QUICK] = UltraBallOpenParticleAnimation,
+ [BALL_REPEAT] = RepeatBallOpenParticleAnimation,
+ [BALL_LUXURY] = GreatBallOpenParticleAnimation,
+ [BALL_LEVEL] = SafariBallOpenParticleAnimation,
+ [BALL_LURE] = GreatBallOpenParticleAnimation,
+ [BALL_MOON] = UltraBallOpenParticleAnimation,
+ [BALL_FRIEND] = UltraBallOpenParticleAnimation,
+ [BALL_LOVE] = GreatBallOpenParticleAnimation,
+ [BALL_FAST] = GreatBallOpenParticleAnimation,
+ [BALL_HEAVY] = GreatBallOpenParticleAnimation,
+ [BALL_DREAM] = UltraBallOpenParticleAnimation,
+ [BALL_SAFARI] = SafariBallOpenParticleAnimation,
+ [BALL_SPORT] = UltraBallOpenParticleAnimation,
+ [BALL_PARK] = UltraBallOpenParticleAnimation,
+ [BALL_BEAST] = UltraBallOpenParticleAnimation,
+ [BALL_CHERISH] = MasterBallOpenParticleAnimation,
};
static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT] =
@@ -276,15 +353,6 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT]
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- [BALL_SAFARI] = {
- .tileTag = TAG_PARTICLES_SAFARIBALL,
- .paletteTag = TAG_PARTICLES_SAFARIBALL,
- .oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = sAnims_BallParticles,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
- },
[BALL_ULTRA] = {
.tileTag = TAG_PARTICLES_ULTRABALL,
.paletteTag = TAG_PARTICLES_ULTRABALL,
@@ -303,18 +371,27 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT]
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- [BALL_NET] = {
- .tileTag = TAG_PARTICLES_NETBALL,
- .paletteTag = TAG_PARTICLES_NETBALL,
+ [BALL_PREMIER] = {
+ .tileTag = TAG_PARTICLES_PREMIERBALL,
+ .paletteTag = TAG_PARTICLES_PREMIERBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- [BALL_DIVE] = {
- .tileTag = TAG_PARTICLES_DIVEBALL,
- .paletteTag = TAG_PARTICLES_DIVEBALL,
+ [BALL_HEAL] = {
+ .tileTag = TAG_PARTICLES_HEALBALL,
+ .paletteTag = TAG_PARTICLES_HEALBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_NET] = {
+ .tileTag = TAG_PARTICLES_NETBALL,
+ .paletteTag = TAG_PARTICLES_NETBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
@@ -330,9 +407,18 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT]
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- [BALL_REPEAT] = {
- .tileTag = TAG_PARTICLES_REPEATBALL,
- .paletteTag = TAG_PARTICLES_REPEATBALL,
+ [BALL_DIVE] = {
+ .tileTag = TAG_PARTICLES_DIVEBALL,
+ .paletteTag = TAG_PARTICLES_DIVEBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_DUSK] = {
+ .tileTag = TAG_PARTICLES_DUSKBALL,
+ .paletteTag = TAG_PARTICLES_DUSKBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
@@ -348,6 +434,24 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT]
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
+ [BALL_QUICK] = {
+ .tileTag = TAG_PARTICLES_QUICKBALL,
+ .paletteTag = TAG_PARTICLES_QUICKBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_REPEAT] = {
+ .tileTag = TAG_PARTICLES_REPEATBALL,
+ .paletteTag = TAG_PARTICLES_REPEATBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
[BALL_LUXURY] = {
.tileTag = TAG_PARTICLES_LUXURYBALL,
.paletteTag = TAG_PARTICLES_LUXURYBALL,
@@ -357,9 +461,117 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT]
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
},
- [BALL_PREMIER] = {
- .tileTag = TAG_PARTICLES_PREMIERBALL,
- .paletteTag = TAG_PARTICLES_PREMIERBALL,
+ [BALL_LEVEL] = {
+ .tileTag = TAG_PARTICLES_LEVELBALL,
+ .paletteTag = TAG_PARTICLES_LEVELBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_LURE] = {
+ .tileTag = TAG_PARTICLES_LUREBALL,
+ .paletteTag = TAG_PARTICLES_LUREBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_MOON] = {
+ .tileTag = TAG_PARTICLES_MOONBALL,
+ .paletteTag = TAG_PARTICLES_MOONBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_FRIEND] = {
+ .tileTag = TAG_PARTICLES_FRIENDBALL,
+ .paletteTag = TAG_PARTICLES_FRIENDBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_LOVE] = {
+ .tileTag = TAG_PARTICLES_LOVEBALL,
+ .paletteTag = TAG_PARTICLES_LOVEBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_FAST] = {
+ .tileTag = TAG_PARTICLES_FASTBALL,
+ .paletteTag = TAG_PARTICLES_FASTBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_HEAVY] = {
+ .tileTag = TAG_PARTICLES_HEAVYBALL,
+ .paletteTag = TAG_PARTICLES_HEAVYBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_DREAM] = {
+ .tileTag = TAG_PARTICLES_DREAMBALL,
+ .paletteTag = TAG_PARTICLES_DREAMBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_SAFARI] = {
+ .tileTag = TAG_PARTICLES_SAFARIBALL,
+ .paletteTag = TAG_PARTICLES_SAFARIBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_SPORT] = {
+ .tileTag = TAG_PARTICLES_SPORTBALL,
+ .paletteTag = TAG_PARTICLES_SPORTBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_PARK] = {
+ .tileTag = TAG_PARTICLES_PARKBALL,
+ .paletteTag = TAG_PARTICLES_PARKBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_BEAST] = {
+ .tileTag = TAG_PARTICLES_BEASTBALL,
+ .paletteTag = TAG_PARTICLES_BEASTBALL,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = sAnims_BallParticles,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ [BALL_CHERISH] = {
+ .tileTag = TAG_PARTICLES_CHERISHBALL,
+ .paletteTag = TAG_PARTICLES_CHERISHBALL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sAnims_BallParticles,
.images = NULL,
@@ -370,28 +582,34 @@ static const struct SpriteTemplate sBallParticleSpriteTemplates[POKEBALL_COUNT]
const u16 gBallOpenFadeColors[] =
{
+ // Todo, assign different colors
[BALL_POKE] = RGB(31, 22, 30),
[BALL_GREAT] = RGB(16, 23, 30),
- [BALL_SAFARI] = RGB(23, 30, 20),
[BALL_ULTRA] = RGB(31, 31, 15),
[BALL_MASTER] = RGB(23, 20, 28),
- [BALL_NET] = RGB(21, 31, 25),
- [BALL_DIVE] = RGB(12, 25, 30),
- [BALL_NEST] = RGB(30, 27, 10),
- [BALL_REPEAT] = RGB(31, 24, 16),
- [BALL_TIMER] = RGB(29, 30, 30),
- [BALL_LUXURY] = RGB(31, 17, 10),
[BALL_PREMIER] = RGB(31, 9, 10),
-
- // Garbage data
- RGB(0, 0, 0),
- RGB(1, 16, 0),
- RGB(3, 0, 1),
- RGB(1, 8, 0),
- RGB(0, 8, 0),
- RGB(3, 8, 1),
- RGB(6, 8, 1),
- RGB(4, 0, 0),
+ [BALL_HEAL] = RGB(31, 23, 27),
+ [BALL_NET] = RGB(21, 31, 25),
+ [BALL_NEST] = RGB(30, 27, 10),
+ [BALL_DIVE] = RGB(12, 25, 30),
+ [BALL_DUSK] = RGB(7, 1, 13),
+ [BALL_TIMER] = RGB(29, 30, 30),
+ [BALL_QUICK] = RGB(16, 25, 30),
+ [BALL_REPEAT] = RGB(31, 24, 16),
+ [BALL_LUXURY] = RGB(31, 17, 10),
+ [BALL_LEVEL] = RGB(24, 4, 4),
+ [BALL_LURE] = RGB(9, 22, 27),
+ [BALL_MOON] = RGB(30, 25, 8),
+ [BALL_FRIEND] = RGB(17, 24, 7),
+ [BALL_LOVE] = RGB(31, 19, 26),
+ [BALL_FAST] = RGB(29, 17, 8),
+ [BALL_HEAVY] = RGB(7, 11, 20),
+ [BALL_DREAM] = RGB(31, 31, 15),
+ [BALL_SAFARI] = RGB(23, 30, 20),
+ [BALL_SPORT] = RGB(31, 31, 15),
+ [BALL_PARK] = RGB(31, 31, 15),
+ [BALL_BEAST] = RGB(31, 31, 15),
+ [BALL_CHERISH] = RGB(25, 4, 3),
};
const struct SpriteTemplate gPokeblockSpriteTemplate =
@@ -515,7 +733,7 @@ static void AnimTask_UnusedLevelUpHealthBox_Step(u8 taskId)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
if (gTasks[taskId].data[12] == 0)
{
- ResetBattleAnimBg(0);
+ ResetBattleAnimBg(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);
@@ -729,29 +947,60 @@ u8 ItemIdToBallId(u16 ballItem)
{
switch (ballItem)
{
- case ITEM_MASTER_BALL:
- return BALL_MASTER;
- case ITEM_ULTRA_BALL:
- return BALL_ULTRA;
+ case ITEM_POKE_BALL:
+ return BALL_POKE;
case ITEM_GREAT_BALL:
return BALL_GREAT;
- case ITEM_SAFARI_BALL:
- return BALL_SAFARI;
- case ITEM_NET_BALL:
- return BALL_NET;
- case ITEM_DIVE_BALL:
- return BALL_DIVE;
- case ITEM_NEST_BALL:
- return BALL_NEST;
- case ITEM_REPEAT_BALL:
- return BALL_REPEAT;
- case ITEM_TIMER_BALL:
- return BALL_TIMER;
- case ITEM_LUXURY_BALL:
- return BALL_LUXURY;
+ case ITEM_ULTRA_BALL:
+ return BALL_ULTRA;
+ case ITEM_MASTER_BALL:
+ return BALL_MASTER;
case ITEM_PREMIER_BALL:
return BALL_PREMIER;
- case ITEM_POKE_BALL:
+ case ITEM_HEAL_BALL:
+ return BALL_HEAL;
+ case ITEM_NET_BALL:
+ return BALL_NET;
+ case ITEM_NEST_BALL:
+ return BALL_NEST;
+ case ITEM_DIVE_BALL:
+ return BALL_DIVE;
+ case ITEM_DUSK_BALL:
+ return BALL_DUSK;
+ case ITEM_TIMER_BALL:
+ return BALL_TIMER;
+ case ITEM_QUICK_BALL:
+ return BALL_QUICK;
+ case ITEM_REPEAT_BALL:
+ return BALL_REPEAT;
+ case ITEM_LUXURY_BALL:
+ return BALL_LUXURY;
+ case ITEM_LEVEL_BALL:
+ return BALL_LEVEL;
+ case ITEM_LURE_BALL:
+ return BALL_LURE;
+ case ITEM_MOON_BALL:
+ return BALL_MOON;
+ case ITEM_FRIEND_BALL:
+ return BALL_FRIEND;
+ case ITEM_LOVE_BALL:
+ return BALL_LOVE;
+ case ITEM_FAST_BALL:
+ return BALL_FAST;
+ case ITEM_HEAVY_BALL:
+ return BALL_HEAVY;
+ case ITEM_DREAM_BALL:
+ return BALL_DREAM;
+ case ITEM_SAFARI_BALL:
+ return BALL_SAFARI;
+ case ITEM_SPORT_BALL:
+ return BALL_SPORT;
+ case ITEM_PARK_BALL:
+ return BALL_PARK;
+ case ITEM_BEAST_BALL:
+ return BALL_BEAST;
+ case ITEM_CHERISH_BALL:
+ return BALL_CHERISH;
default:
return BALL_POKE;
}
@@ -989,17 +1238,17 @@ static void SpriteCB_Ball_MonShrink_Step(struct Sprite *sprite)
static void SpriteCB_Ball_Bounce(struct Sprite *sprite)
{
- s16 phase;
-
if (sprite->animEnded)
{
sprite->sState = 0;
sprite->sAmplitude = 40;
sprite->sPhase = 0;
- phase = 0;
- sprite->y += Cos(phase, 40);
- sprite->y2 = -Cos(phase, sprite->sAmplitude);
- sprite->callback = SpriteCB_Ball_Bounce_Step;
+ sprite->y += Cos(0, 40);
+ sprite->y2 = -Cos(0, sprite->sAmplitude);
+ if (IsCriticalCapture())
+ sprite->callback = CB_CriticalCaptureThrownBallMovement;
+ else
+ sprite->callback = SpriteCB_Ball_Bounce_Step;
}
}
@@ -1232,22 +1481,38 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite)
case BALL_NEXT_MOVE:
SHAKE_INC(sprite->sState);
shakes = SHAKES(sprite->sState);
- if (shakes == gBattleSpritesDataPtr->animationData->ballThrowCaseId)
+ if (IsCriticalCapture())
{
- sprite->affineAnimPaused = TRUE;
- sprite->callback = SpriteCB_Ball_Release;
- }
- else
- {
- if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && shakes == 3)
+ if (gBattleSpritesDataPtr->animationData->criticalCaptureSuccess)
{
sprite->callback = SpriteCB_Ball_Capture;
sprite->affineAnimPaused = TRUE;
}
else
{
- sprite->sState++; // BALL_WAIT_NEXT_SHAKE
sprite->affineAnimPaused = TRUE;
+ sprite->callback = SpriteCB_Ball_Release;
+ }
+ }
+ else
+ {
+ if (shakes == gBattleSpritesDataPtr->animationData->ballThrowCaseId)
+ {
+ sprite->affineAnimPaused = TRUE;
+ sprite->callback = SpriteCB_Ball_Release;
+ }
+ else
+ {
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && shakes == 3)
+ {
+ sprite->callback = SpriteCB_Ball_Capture;
+ sprite->affineAnimPaused = TRUE;
+ }
+ else
+ {
+ sprite->sState++; // BALL_WAIT_NEXT_SHAKE
+ sprite->affineAnimPaused = TRUE;
+ }
}
}
break;
@@ -1319,7 +1584,7 @@ static void SpriteCB_Ball_Capture_Step(struct Sprite *sprite)
else if (sprite->sTimer == 95)
{
gDoingBattleAnim = FALSE;
- UpdateOamPriorityInAllHealthboxes(1);
+ UpdateOamPriorityInAllHealthboxes(1, FALSE);
m4aMPlayAllStop();
PlaySE(MUS_RG_CAUGHT_INTRO);
}
@@ -1502,7 +1767,7 @@ static void SpriteCB_Ball_Release_Wait(struct Sprite *sprite)
sprite->sFrame = 0;
sprite->callback = DestroySpriteAfterOneFrame;
gDoingBattleAnim = 0;
- UpdateOamPriorityInAllHealthboxes(1);
+ UpdateOamPriorityInAllHealthboxes(1, FALSE);
}
}
@@ -1544,7 +1809,7 @@ static void SpriteCB_Ball_Block_Step(struct Sprite *sprite)
sprite->sFrame = 0;
sprite->callback = DestroySpriteAfterOneFrame;
gDoingBattleAnim = 0;
- UpdateOamPriorityInAllHealthboxes(1);
+ UpdateOamPriorityInAllHealthboxes(1, FALSE);
}
}
@@ -2408,7 +2673,7 @@ void AnimTask_FreePokeblockGfx(u8 taskId)
static void SpriteCB_PokeBlock_Throw(struct Sprite *sprite)
{
- InitSpritePosToAnimAttacker(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->sDuration = 30;
sprite->sTargetX = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_X) + gBattleAnimArgs[2];
sprite->sTargetY = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_Y) + gBattleAnimArgs[3];
@@ -2479,6 +2744,12 @@ void AnimTask_GetTrappedMoveAnimId(u8 taskId)
gBattleAnimArgs[0] = TRAP_ANIM_CLAMP;
else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_SAND_TOMB)
gBattleAnimArgs[0] = TRAP_ANIM_SAND_TOMB;
+ else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_MAGMA_STORM)
+ gBattleAnimArgs[0] = TRAP_ANIM_MAGMA_STORM;
+ else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_INFESTATION)
+ gBattleAnimArgs[0] = TRAP_ANIM_INFESTATION;
+ else if (gBattleSpritesDataPtr->animationData->animArg == MOVE_SNAP_TRAP)
+ gBattleAnimArgs[0] = TRAP_ANIM_SNAP_TRAP;
else
gBattleAnimArgs[0] = TRAP_ANIM_BIND;
@@ -2491,3 +2762,53 @@ void AnimTask_GetBattlersFromArg(u8 taskId)
gBattleAnimTarget = gBattleSpritesDataPtr->animationData->animArg >> 8;
DestroyAnimVisualTask(taskId);
}
+
+bool32 IsCriticalCapture(void)
+{
+ return gBattleSpritesDataPtr->animationData->isCriticalCapture;
+}
+
+static void CB_CriticalCaptureThrownBallMovement(struct Sprite *sprite)
+{
+ bool8 lastBounce = FALSE;
+ u8 maxBounces = 6;
+ int bounceCount = sprite->data[3] >> 8;
+
+ if (bounceCount == 0)
+ PlaySE(SE_BALL);
+
+ switch (sprite->data[3] & 0xFF)
+ {
+ case 0:
+ if (bounceCount < 3)
+ sprite->x2++;
+
+ if (++sprite->data[5] >= 3)
+ sprite->data[3] += 257;
+
+ break;
+ case 1:
+ if (bounceCount < 3 || sprite->x2 != 0)
+ sprite->x2--;
+
+ if (--sprite->data[5] <= 0)
+ {
+ sprite->data[5] = 0;
+ sprite->data[3] &= -0x100;
+ }
+
+ if (bounceCount >= maxBounces)
+ lastBounce = TRUE;
+
+ break;
+ }
+
+ if (lastBounce)
+ {
+ sprite->data[3] = 0;
+ sprite->data[4] = 40; //starting max height
+ sprite->data[5] = 0;
+ sprite->callback = SpriteCB_Ball_Bounce_Step;
+ }
+}
+
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index b5455a19c9..1462807a3e 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -27,7 +27,7 @@ static void StartBlendAnimSpriteColor(u8, u32);
static void AnimTask_BlendSpriteColor_Step2(u8);
static void AnimTask_HardwarePaletteFade_Step(u8);
static void AnimTask_TraceMonBlended_Step(u8);
-static void AnimMonTrace(struct Sprite*);
+static void AnimMonTrace(struct Sprite *);
static void AnimTask_DrawFallingWhiteLinesOnAttacker_Step(u8);
static void StatsChangeAnimation_Step1(u8);
static void StatsChangeAnimation_Step2(u8);
@@ -136,6 +136,7 @@ void AnimTask_SetCamouflageBlend(u8 taskId)
gBattleAnimArgs[4] = RGB(31, 31, 31);
break;
case BATTLE_TERRAIN_PLAIN:
+ default:
gBattleAnimArgs[4] = RGB(31, 31, 31);
break;
}
@@ -356,7 +357,7 @@ static void AnimTask_DrawFallingWhiteLinesOnAttacker_Step(u8 taskId)
gBattle_BG1_Y += 64;
if (++gTasks[taskId].data[11] == 4)
{
- ResetBattleAnimBg(0);
+ ResetBattleAnimBg(FALSE);
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
@@ -568,7 +569,7 @@ static void StatsChangeAnimation_Step3(u8 taskId)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
if (gTasks[taskId].data[12] == 0)
{
- ResetBattleAnimBg(0);
+ ResetBattleAnimBg(FALSE);
gTasks[taskId].data[15]++;
}
}
@@ -869,7 +870,7 @@ static void UpdateMonScrollingBgMask(u8 taskId)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
if (gTasks[taskId].data[12] == 0)
{
- ResetBattleAnimBg(0);
+ ResetBattleAnimBg(FALSE);
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
@@ -903,6 +904,12 @@ void AnimTask_GetBattleTerrain(u8 taskId)
DestroyAnimVisualTask(taskId);
}
+void AnimTask_GetFieldTerrain(u8 taskId)
+{
+ gBattleAnimArgs[0] = gFieldStatuses & STATUS_FIELD_TERRAIN_ANY;
+ DestroyAnimVisualTask(taskId);
+}
+
void AnimTask_AllocBackupPalBuffer(u8 taskId)
{
gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000);
@@ -1059,3 +1066,33 @@ static void AnimTask_WaitAndRestoreVisibility(u8 taskId)
DestroyTask(taskId);
}
}
+
+void AnimTask_IsDoubleBattle(u8 taskId)
+{
+ gBattleAnimArgs[7] = (IsDoubleBattle() && !IsContest());
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_CanBattlerSwitch(u8 taskId)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
+ gBattleAnimArgs[ARG_RET_ID] = FALSE;
+ else
+ gBattleAnimArgs[ARG_RET_ID] = CanBattlerSwitch(GetAnimBattlerId(gBattleAnimArgs[0]));
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_SetInvisible(u8 taskId)
+{
+ u32 battlerId = GetAnimBattlerId(gBattleAnimArgs[0]);
+ u32 spriteId = gBattlerSpriteIds[battlerId];
+
+ gSprites[spriteId].invisible = gBattleSpritesDataPtr->battlerData[battlerId].invisible = gBattleAnimArgs[1];
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_SetAnimTargetToAttackerOpposite(u8 taskId)
+{
+ gBattleAnimTarget = BATTLE_OPPOSITE(gBattleAnimAttacker);
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c
index c0898ce811..48d1dc6d6a 100644
--- a/src/battle_anim_water.c
+++ b/src/battle_anim_water.c
@@ -21,13 +21,14 @@ static void AnimWaterBubbleProjectile_Step2(struct Sprite *);
static void AnimWaterBubbleProjectile_Step3(struct Sprite *);
static void AnimAuroraBeamRings(struct Sprite *);
static void AnimAuroraBeamRings_Step(struct Sprite *);
+void AnimFlyUpTarget(struct Sprite *);
+static void AnimFlyUpTarget_Step(struct Sprite *);
static void AnimToTargetInSinWave(struct Sprite *);
static void AnimToTargetInSinWave_Step(struct Sprite *);
static void AnimHydroCannonCharge(struct Sprite *);
static void AnimHydroCannonCharge_Step(struct Sprite *);
static void AnimHydroCannonBeam(struct Sprite *);
static void AnimWaterGunDroplet(struct Sprite *);
-static void AnimSmallBubblePair(struct Sprite *);
static void AnimSmallBubblePair_Step(struct Sprite *);
static void AnimSmallDriftingBubbles(struct Sprite *);
static void AnimSmallDriftingBubbles_Step(struct Sprite *);
@@ -36,7 +37,6 @@ static void AnimWaterSpoutRain(struct Sprite *);
static void AnimWaterSpoutRainHit(struct Sprite *);
static void AnimWaterSportDroplet(struct Sprite *);
static void AnimWaterSportDroplet_Step(struct Sprite *);
-static void AnimWaterPulseBubble(struct Sprite *);
static void AnimWaterPulseBubble_Step(struct Sprite *);
static void AnimWaterPulseRingBubble(struct Sprite *);
static void AnimWaterPulseRing_Step(struct Sprite *);
@@ -48,11 +48,14 @@ static void AnimTask_SurfWaveScanlineEffect(u8);
static void AnimTask_WaterSpoutLaunch_Step(u8);
static void AnimTask_WaterSpoutRain_Step(u8);
static u8 GetWaterSpoutPowerForAnim(void);
-static void CreateWaterSpoutLaunchDroplets(struct Task*, u8);
-static void CreateWaterSpoutRainDroplet(struct Task*, u8);
+static void CreateWaterSpoutLaunchDroplets(struct Task *, u8);
+static void CreateWaterSpoutRainDroplet(struct Task *, u8);
static void AnimTask_WaterSport_Step(u8);
-static void CreateWaterSportDroplet(struct Task*);
-static void CreateWaterPulseRingBubbles(struct Sprite*, int, int);
+static void CreateWaterSportDroplet(struct Task *);
+static void CreateWaterPulseRingBubbles(struct Sprite *, int, int);
+static void AnimAquaTail(struct Sprite *sprite);
+static void AnimKnockOffAquaTail(struct Sprite *sprite);
+static void AnimKnockOffAquaTailStep(struct Sprite *sprite);
static const u8 sUnusedWater_Gfx[] = INCBIN_U8("graphics/battle_anims/unused/water_gfx.4bpp");
static const u8 sUnusedWater[] = INCBIN_U8("graphics/battle_anims/unused/water.bin");
@@ -105,7 +108,7 @@ static const union AnimCmd sAnim_WaterBubbleProjectile[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_WaterBubbleProjectile[] =
+const union AnimCmd *const gAnims_WaterBubbleProjectile[] =
{
sAnim_WaterBubbleProjectile,
};
@@ -115,7 +118,7 @@ const struct SpriteTemplate gWaterBubbleProjectileSpriteTemplate =
.tileTag = ANIM_TAG_BUBBLE,
.paletteTag = ANIM_TAG_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
- .anims = sAnims_WaterBubbleProjectile,
+ .anims = gAnims_WaterBubbleProjectile,
.images = NULL,
.affineAnims = sAffineAnims_WaterBubbleProjectile,
.callback = AnimWaterBubbleProjectile,
@@ -187,6 +190,17 @@ const struct SpriteTemplate gHydroPumpOrbSpriteTemplate =
.callback = AnimToTargetInSinWave,
};
+const struct SpriteTemplate gWaterPledgeOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_WATER_ORB,
+ .paletteTag = ANIM_TAG_WATER_ORB,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
+ .anims = gAnims_WaterMudOrb,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFlyUpTarget,
+};
+
const struct SpriteTemplate gMudShotOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_BROWN_ORB,
@@ -228,7 +242,7 @@ static const union AnimCmd sAnim_FlamethrowerFlame[] =
ANIMCMD_JUMP(0),
};
-static const union AnimCmd *const sAnims_FlamethrowerFlame[] =
+const union AnimCmd *const gAnims_FlamethrowerFlame[] =
{
sAnim_FlamethrowerFlame,
};
@@ -238,12 +252,23 @@ const struct SpriteTemplate gFlamethrowerFlameSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_FlamethrowerFlame,
+ .anims = gAnims_FlamethrowerFlame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimToTargetInSinWave,
};
+const struct SpriteTemplate gFirePledgeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SMALL_EMBER,
+ .paletteTag = ANIM_TAG_SMALL_EMBER,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_FlamethrowerFlame,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFlyUpTarget,
+};
+
const struct SpriteTemplate gPsywaveRingSpriteTemplate =
{
.tileTag = ANIM_TAG_BLUE_RING,
@@ -397,7 +422,7 @@ static const union AnimCmd sAnim_WeatherBallWaterDown[] =
ANIMCMD_END,
};
-static const union AnimCmd *const sAnims_WaterPulseBubble[] =
+const union AnimCmd *const gAnims_WaterPulseBubble[] =
{
sAnim_WaterPulseBubble_0,
sAnim_WaterPulseBubble_1,
@@ -445,7 +470,7 @@ const struct SpriteTemplate gWaterPulseBubbleSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
- .anims = sAnims_WaterPulseBubble,
+ .anims = gAnims_WaterPulseBubble,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimWaterPulseBubble,
@@ -456,7 +481,7 @@ const struct SpriteTemplate gWaterPulseRingBubbleSpriteTemplate =
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
.oam = &gOamData_AffineNormal_ObjNormal_8x8,
- .anims = sAnims_WaterPulseBubble,
+ .anims = gAnims_WaterPulseBubble,
.images = NULL,
.affineAnims = sAffineAnims_WaterPulseRingBubble,
.callback = AnimWaterPulseRingBubble,
@@ -473,6 +498,140 @@ const struct SpriteTemplate gWeatherBallWaterDownSpriteTemplate =
.callback = AnimWeatherBallDown,
};
+const union AffineAnimCmd gAquaTailHitAffineAnimCmd_1[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gAquaTailHitAffineAnimCmd_2[] =
+{
+ AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gAquaTailHitAffineAnimCmd_3[] =
+{
+ AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gAquaTailHitAffineAnimCmd_4[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gAquaTailHitAffineAnims[] =
+{
+ gAquaTailHitAffineAnimCmd_1,
+ gAquaTailHitAffineAnimCmd_2,
+ gAquaTailHitAffineAnimCmd_3,
+ gAquaTailHitAffineAnimCmd_4,
+};
+
+const union AnimCmd gKnockOffAquaTailAnimCmd[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gKnockOffAquaTailAnim[] =
+{
+ gKnockOffAquaTailAnimCmd,
+};
+
+const union AffineAnimCmd gKnockOffAquaTailAffineanimCmd_1[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gKnockOffAquaTailAffineanimCmd_2[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gKnockOffAquaTailAffineAnim[] =
+{
+ gKnockOffAquaTailAffineanimCmd_1,
+ gKnockOffAquaTailAffineanimCmd_2,
+};
+
+const struct SpriteTemplate gAquaTailKnockOffSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SLAM_HIT_2,
+ .paletteTag = ANIM_TAG_WATER_IMPACT,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
+ .anims = gKnockOffAquaTailAnim,
+ .images = NULL,
+ .affineAnims = gKnockOffAquaTailAffineAnim,
+ .callback = AnimKnockOffAquaTail,
+};
+
+const struct SpriteTemplate gAquaTailHitSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IMPACT,
+ .paletteTag = ANIM_TAG_WATER_IMPACT,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAquaTailHitAffineAnims,
+ .callback = AnimAquaTail,
+};
+
+static void AnimAquaTail(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
+ if (gBattleAnimArgs[2] == 0)
+ InitSpritePosToAnimAttacker(sprite, 1);
+ else
+ InitSpritePosToAnimTarget(sprite, TRUE);
+
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void AnimKnockOffAquaTail(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ sprite->x -= gBattleAnimArgs[0];
+ sprite->y += gBattleAnimArgs[1];
+ sprite->data[0] = -11;
+ sprite->data[1] = 192;
+ StartSpriteAffineAnim(sprite, 1);
+ }
+ else
+ {
+ sprite->data[0] = 11;
+ sprite->data[1] = 192;
+ sprite->x += gBattleAnimArgs[0];
+ sprite->y += gBattleAnimArgs[1];
+ }
+
+ sprite->callback = AnimKnockOffAquaTailStep;
+}
+
+static void AnimKnockOffAquaTailStep(struct Sprite *sprite)
+{
+ sprite->data[1] += sprite->data[0];
+ sprite->data[1] &= 0xFF;
+ sprite->x2 = Cos(sprite->data[1], 20);
+ sprite->y2 = Sin(sprite->data[1], 20);
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+
+ sprite->data[2]++;
+}
+
void AnimTask_CreateRaindrops(u8 taskId)
{
u8 x, y;
@@ -642,6 +801,27 @@ static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
DestroyAnimVisualTask(taskId);
}
+void AnimFlyUpTarget(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->y2 += GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT) / 2;
+ sprite->y2 += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2]; //max y offset
+ sprite->data[1] = gBattleAnimArgs[3]; //speed
+ sprite->callback = AnimFlyUpTarget_Step;
+ sprite->callback(sprite);
+}
+
+static void AnimFlyUpTarget_Step(struct Sprite *sprite)
+{
+ if(sprite->y2 <= sprite->data[0])
+ {
+ DestroyAnimSprite(sprite);
+ return;
+ }
+ sprite->y2 -= sprite->data[1];
+}
+
// For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam)
static void AnimToTargetInSinWave(struct Sprite *sprite)
{
@@ -776,7 +956,7 @@ static void AnimWaterGunDroplet(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-static void AnimSmallBubblePair(struct Sprite *sprite)
+void AnimSmallBubblePair(struct Sprite *sprite)
{
if (gBattleAnimArgs[3] != ANIM_ATTACKER)
InitSpritePosToAnimTarget(sprite, TRUE);
@@ -824,10 +1004,23 @@ void AnimTask_CreateSurfWave(u8 taskId)
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_SurfContest, TRUE);
}
AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Surf, animBg.tilesOffset);
- if (gBattleAnimArgs[0] == 0)
- LoadCompressedPalette(gBattleAnimBgPalette_Surf, animBg.paletteId * 16, 32);
- else
+ switch (gBattleAnimArgs[0])
+ {
+ case ANIM_SURF_PAL_SURF:
+ default:
+ if (B_NEW_SURF_PARTICLE_PALETTE == TRUE)
+ LoadCompressedPalette(gBattleAnimSpritePal_NewSurf, animBg.paletteId * 16, 32);
+ else
+ LoadCompressedPalette(gBattleAnimBgPalette_Surf, animBg.paletteId * 16, 32);
+ break;
+ case ANIM_SURF_PAL_MUDDY_WATER:
LoadCompressedPalette(gBattleAnimBackgroundImageMuddyWater_Pal, animBg.paletteId * 16, 32);
+ break;
+ case ANIM_SURF_PAL_SLUDGE_WAVE:
+ LoadCompressedPalette(gBattleAnimBgPalette_SludgeWave, animBg.paletteId * 16, 32);
+ break;
+ }
+
taskId2 = CreateTask(AnimTask_SurfWaveScanlineEffect, gTasks[taskId].priority + 1);
gTasks[taskId].data[15] = taskId2;
gTasks[taskId2].data[0] = 0;
@@ -1477,7 +1670,7 @@ static void AnimWaterSportDroplet_Step(struct Sprite *sprite)
}
}
-static void AnimWaterPulseBubble(struct Sprite *sprite)
+void AnimWaterPulseBubble(struct Sprite *sprite)
{
sprite->x = gBattleAnimArgs[0];
sprite->y = gBattleAnimArgs[1];
diff --git a/src/battle_arena.c b/src/battle_arena.c
index e5f8161c4f..e0a2c5e748 100644
--- a/src/battle_arena.c
+++ b/src/battle_arena.c
@@ -35,12 +35,28 @@ static void SaveArenaChallenge(void);
static void SetArenaPrize(void);
static void GiveArenaPrize(void);
static void BufferArenaOpponentName(void);
-static void SpriteCb_JudgmentIcon(struct Sprite *sprite);
+static void SpriteCB_JudgmentIcon(struct Sprite *sprite);
static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler);
-static const s8 sMindRatings[] =
+#define JUDGEMENT_STATE_FINISHED 8
+
+#define TAG_JUDGEMENT_ICON 1000
+
+enum {
+ ANIM_ICON_X, // Player lost
+ ANIM_ICON_TRIANGLE, // Tie
+ ANIM_ICON_CIRCLE, // Player won
+ ANIM_ICON_LINE, // Line segment for separating the score total at the bottom
+};
+
+// This table holds the number of points to add to the 'mind' score for each move.
+// All moves with power != 0 give 1 point, with the following exceptions:
+// - Counter, Mirror Coat, and Bide give 0 points
+// - Fake Out subtracts 1 point
+// All moves with power == 0 give 0 points, with the following exceptions:
+// - Protect, Detect, and Endure subtract 1 point
+static const s8 sMindRatings[MOVES_COUNT] =
{
- [MOVE_NONE] = 0,
[MOVE_POUND] = 1,
[MOVE_KARATE_CHOP] = 1,
[MOVE_DOUBLE_SLAP] = 1,
@@ -54,11 +70,9 @@ static const s8 sMindRatings[] =
[MOVE_VISE_GRIP] = 1,
[MOVE_GUILLOTINE] = 1,
[MOVE_RAZOR_WIND] = 1,
- [MOVE_SWORDS_DANCE] = 0,
[MOVE_CUT] = 1,
[MOVE_GUST] = 1,
[MOVE_WING_ATTACK] = 1,
- [MOVE_WHIRLWIND] = 0,
[MOVE_FLY] = 1,
[MOVE_BIND] = 1,
[MOVE_SLAM] = 1,
@@ -68,7 +82,6 @@ static const s8 sMindRatings[] =
[MOVE_MEGA_KICK] = 1,
[MOVE_JUMP_KICK] = 1,
[MOVE_ROLLING_KICK] = 1,
- [MOVE_SAND_ATTACK] = 0,
[MOVE_HEADBUTT] = 1,
[MOVE_HORN_ATTACK] = 1,
[MOVE_FURY_ATTACK] = 1,
@@ -79,22 +92,14 @@ static const s8 sMindRatings[] =
[MOVE_TAKE_DOWN] = 1,
[MOVE_THRASH] = 1,
[MOVE_DOUBLE_EDGE] = 1,
- [MOVE_TAIL_WHIP] = 0,
[MOVE_POISON_STING] = 1,
[MOVE_TWINEEDLE] = 1,
[MOVE_PIN_MISSILE] = 1,
- [MOVE_LEER] = 0,
[MOVE_BITE] = 1,
- [MOVE_GROWL] = 0,
- [MOVE_ROAR] = 0,
- [MOVE_SING] = 0,
- [MOVE_SUPERSONIC] = 0,
[MOVE_SONIC_BOOM] = 1,
- [MOVE_DISABLE] = 0,
[MOVE_ACID] = 1,
[MOVE_EMBER] = 1,
[MOVE_FLAMETHROWER] = 1,
- [MOVE_MIST] = 0,
[MOVE_WATER_GUN] = 1,
[MOVE_HYDRO_PUMP] = 1,
[MOVE_SURF] = 1,
@@ -108,58 +113,27 @@ static const s8 sMindRatings[] =
[MOVE_DRILL_PECK] = 1,
[MOVE_SUBMISSION] = 1,
[MOVE_LOW_KICK] = 1,
- [MOVE_COUNTER] = 0,
[MOVE_SEISMIC_TOSS] = 1,
[MOVE_STRENGTH] = 1,
[MOVE_ABSORB] = 1,
[MOVE_MEGA_DRAIN] = 1,
- [MOVE_LEECH_SEED] = 0,
- [MOVE_GROWTH] = 0,
[MOVE_RAZOR_LEAF] = 1,
[MOVE_SOLAR_BEAM] = 1,
- [MOVE_POISON_POWDER] = 0,
- [MOVE_STUN_SPORE] = 0,
- [MOVE_SLEEP_POWDER] = 0,
[MOVE_PETAL_DANCE] = 1,
- [MOVE_STRING_SHOT] = 0,
[MOVE_DRAGON_RAGE] = 1,
[MOVE_FIRE_SPIN] = 1,
[MOVE_THUNDER_SHOCK] = 1,
[MOVE_THUNDERBOLT] = 1,
- [MOVE_THUNDER_WAVE] = 0,
[MOVE_THUNDER] = 1,
[MOVE_ROCK_THROW] = 1,
[MOVE_EARTHQUAKE] = 1,
[MOVE_FISSURE] = 1,
[MOVE_DIG] = 1,
- [MOVE_TOXIC] = 0,
[MOVE_CONFUSION] = 1,
[MOVE_PSYCHIC] = 1,
- [MOVE_HYPNOSIS] = 0,
- [MOVE_MEDITATE] = 0,
- [MOVE_AGILITY] = 0,
[MOVE_QUICK_ATTACK] = 1,
[MOVE_RAGE] = 1,
- [MOVE_TELEPORT] = 0,
[MOVE_NIGHT_SHADE] = 1,
- [MOVE_MIMIC] = 0,
- [MOVE_SCREECH] = 0,
- [MOVE_DOUBLE_TEAM] = 0,
- [MOVE_RECOVER] = 0,
- [MOVE_HARDEN] = 0,
- [MOVE_MINIMIZE] = 0,
- [MOVE_SMOKESCREEN] = 0,
- [MOVE_CONFUSE_RAY] = 0,
- [MOVE_WITHDRAW] = 0,
- [MOVE_DEFENSE_CURL] = 0,
- [MOVE_BARRIER] = 0,
- [MOVE_LIGHT_SCREEN] = 0,
- [MOVE_HAZE] = 0,
- [MOVE_REFLECT] = 0,
- [MOVE_FOCUS_ENERGY] = 0,
- [MOVE_BIDE] = 0,
- [MOVE_METRONOME] = 0,
- [MOVE_MIRROR_MOVE] = 0,
[MOVE_SELF_DESTRUCT] = 1,
[MOVE_EGG_BOMB] = 1,
[MOVE_LICK] = 1,
@@ -173,118 +147,67 @@ static const s8 sMindRatings[] =
[MOVE_SKULL_BASH] = 1,
[MOVE_SPIKE_CANNON] = 1,
[MOVE_CONSTRICT] = 1,
- [MOVE_AMNESIA] = 0,
- [MOVE_KINESIS] = 0,
- [MOVE_SOFT_BOILED] = 0,
[MOVE_HIGH_JUMP_KICK] = 1,
- [MOVE_GLARE] = 0,
[MOVE_DREAM_EATER] = 1,
- [MOVE_POISON_GAS] = 0,
[MOVE_BARRAGE] = 1,
[MOVE_LEECH_LIFE] = 1,
- [MOVE_LOVELY_KISS] = 0,
[MOVE_SKY_ATTACK] = 1,
- [MOVE_TRANSFORM] = 0,
[MOVE_BUBBLE] = 1,
[MOVE_DIZZY_PUNCH] = 1,
- [MOVE_SPORE] = 0,
- [MOVE_FLASH] = 0,
[MOVE_PSYWAVE] = 1,
- [MOVE_SPLASH] = 0,
- [MOVE_ACID_ARMOR] = 0,
[MOVE_CRABHAMMER] = 1,
[MOVE_EXPLOSION] = 1,
[MOVE_FURY_SWIPES] = 1,
[MOVE_BONEMERANG] = 1,
- [MOVE_REST] = 0,
[MOVE_ROCK_SLIDE] = 1,
[MOVE_HYPER_FANG] = 1,
- [MOVE_SHARPEN] = 0,
- [MOVE_CONVERSION] = 0,
[MOVE_TRI_ATTACK] = 1,
[MOVE_SUPER_FANG] = 1,
[MOVE_SLASH] = 1,
- [MOVE_SUBSTITUTE] = 0,
[MOVE_STRUGGLE] = 1,
- [MOVE_SKETCH] = 0,
[MOVE_TRIPLE_KICK] = 1,
[MOVE_THIEF] = 1,
- [MOVE_SPIDER_WEB] = 0,
- [MOVE_MIND_READER] = 0,
- [MOVE_NIGHTMARE] = 0,
[MOVE_FLAME_WHEEL] = 1,
[MOVE_SNORE] = 1,
- [MOVE_CURSE] = 0,
[MOVE_FLAIL] = 1,
- [MOVE_CONVERSION_2] = 0,
[MOVE_AEROBLAST] = 1,
- [MOVE_COTTON_SPORE] = 0,
[MOVE_REVERSAL] = 1,
- [MOVE_SPITE] = 0,
[MOVE_POWDER_SNOW] = 1,
[MOVE_PROTECT] = -1,
[MOVE_MACH_PUNCH] = 1,
- [MOVE_SCARY_FACE] = 0,
[MOVE_FEINT_ATTACK] = 1,
- [MOVE_SWEET_KISS] = 0,
- [MOVE_BELLY_DRUM] = 0,
[MOVE_SLUDGE_BOMB] = 1,
[MOVE_MUD_SLAP] = 1,
[MOVE_OCTAZOOKA] = 1,
- [MOVE_SPIKES] = 0,
[MOVE_ZAP_CANNON] = 1,
- [MOVE_FORESIGHT] = 0,
- [MOVE_DESTINY_BOND] = 0,
- [MOVE_PERISH_SONG] = 0,
[MOVE_ICY_WIND] = 1,
[MOVE_DETECT] = -1,
[MOVE_BONE_RUSH] = 1,
- [MOVE_LOCK_ON] = 0,
[MOVE_OUTRAGE] = 1,
- [MOVE_SANDSTORM] = 0,
[MOVE_GIGA_DRAIN] = 1,
[MOVE_ENDURE] = -1,
- [MOVE_CHARM] = 0,
[MOVE_ROLLOUT] = 1,
[MOVE_FALSE_SWIPE] = 1,
- [MOVE_SWAGGER] = 0,
- [MOVE_MILK_DRINK] = 0,
[MOVE_SPARK] = 1,
[MOVE_FURY_CUTTER] = 1,
[MOVE_STEEL_WING] = 1,
- [MOVE_MEAN_LOOK] = 0,
- [MOVE_ATTRACT] = 0,
- [MOVE_SLEEP_TALK] = 0,
- [MOVE_HEAL_BELL] = 0,
[MOVE_RETURN] = 1,
[MOVE_PRESENT] = 1,
[MOVE_FRUSTRATION] = 1,
- [MOVE_SAFEGUARD] = 0,
- [MOVE_PAIN_SPLIT] = 0,
[MOVE_SACRED_FIRE] = 1,
[MOVE_MAGNITUDE] = 1,
[MOVE_DYNAMIC_PUNCH] = 1,
[MOVE_MEGAHORN] = 1,
[MOVE_DRAGON_BREATH] = 1,
- [MOVE_BATON_PASS] = 0,
- [MOVE_ENCORE] = 0,
[MOVE_PURSUIT] = 1,
[MOVE_RAPID_SPIN] = 1,
- [MOVE_SWEET_SCENT] = 0,
[MOVE_IRON_TAIL] = 1,
[MOVE_METAL_CLAW] = 1,
[MOVE_VITAL_THROW] = 1,
- [MOVE_MORNING_SUN] = 0,
- [MOVE_SYNTHESIS] = 0,
- [MOVE_MOONLIGHT] = 0,
[MOVE_HIDDEN_POWER] = 1,
[MOVE_CROSS_CHOP] = 1,
[MOVE_TWISTER] = 1,
- [MOVE_RAIN_DANCE] = 0,
- [MOVE_SUNNY_DAY] = 0,
[MOVE_CRUNCH] = 1,
- [MOVE_MIRROR_COAT] = 0,
- [MOVE_PSYCH_UP] = 0,
[MOVE_EXTREME_SPEED] = 1,
[MOVE_ANCIENT_POWER] = 1,
[MOVE_SHADOW_BALL] = 1,
@@ -294,56 +217,25 @@ static const s8 sMindRatings[] =
[MOVE_BEAT_UP] = 1,
[MOVE_FAKE_OUT] = -1,
[MOVE_UPROAR] = 1,
- [MOVE_STOCKPILE] = 0,
[MOVE_SPIT_UP] = 1,
- [MOVE_SWALLOW] = 0,
[MOVE_HEAT_WAVE] = 1,
- [MOVE_HAIL] = 0,
- [MOVE_TORMENT] = 0,
- [MOVE_FLATTER] = 0,
- [MOVE_WILL_O_WISP] = 0,
- [MOVE_MEMENTO] = 0,
[MOVE_FACADE] = 1,
[MOVE_FOCUS_PUNCH] = 1,
[MOVE_SMELLING_SALTS] = 1,
- [MOVE_FOLLOW_ME] = 0,
- [MOVE_NATURE_POWER] = 0,
- [MOVE_CHARGE] = 0,
- [MOVE_TAUNT] = 0,
- [MOVE_HELPING_HAND] = 0,
- [MOVE_TRICK] = 0,
- [MOVE_ROLE_PLAY] = 0,
- [MOVE_WISH] = 0,
- [MOVE_ASSIST] = 0,
- [MOVE_INGRAIN] = 0,
[MOVE_SUPERPOWER] = 1,
- [MOVE_MAGIC_COAT] = 0,
- [MOVE_RECYCLE] = 0,
[MOVE_REVENGE] = 1,
[MOVE_BRICK_BREAK] = 1,
- [MOVE_YAWN] = 0,
[MOVE_KNOCK_OFF] = 1,
[MOVE_ENDEAVOR] = 1,
[MOVE_ERUPTION] = 1,
- [MOVE_SKILL_SWAP] = 0,
- [MOVE_IMPRISON] = 0,
- [MOVE_REFRESH] = 0,
- [MOVE_GRUDGE] = 0,
- [MOVE_SNATCH] = 0,
[MOVE_SECRET_POWER] = 1,
[MOVE_DIVE] = 1,
[MOVE_ARM_THRUST] = 1,
- [MOVE_CAMOUFLAGE] = 0,
- [MOVE_TAIL_GLOW] = 0,
[MOVE_LUSTER_PURGE] = 1,
[MOVE_MIST_BALL] = 1,
- [MOVE_FEATHER_DANCE] = 0,
- [MOVE_TEETER_DANCE] = 0,
[MOVE_BLAZE_KICK] = 1,
- [MOVE_MUD_SPORT] = 0,
[MOVE_ICE_BALL] = 1,
[MOVE_NEEDLE_ARM] = 1,
- [MOVE_SLACK_OFF] = 0,
[MOVE_HYPER_VOICE] = 1,
[MOVE_POISON_FANG] = 1,
[MOVE_CRUSH_CLAW] = 1,
@@ -352,17 +244,10 @@ static const s8 sMindRatings[] =
[MOVE_METEOR_MASH] = 1,
[MOVE_ASTONISH] = 1,
[MOVE_WEATHER_BALL] = 1,
- [MOVE_AROMATHERAPY] = 0,
- [MOVE_FAKE_TEARS] = 0,
[MOVE_AIR_CUTTER] = 1,
[MOVE_OVERHEAT] = 1,
- [MOVE_ODOR_SLEUTH] = 0,
[MOVE_ROCK_TOMB] = 1,
[MOVE_SILVER_WIND] = 1,
- [MOVE_METAL_SOUND] = 0,
- [MOVE_GRASS_WHISTLE] = 0,
- [MOVE_TICKLE] = 0,
- [MOVE_COSMIC_POWER] = 0,
[MOVE_WATER_SPOUT] = 1,
[MOVE_SIGNAL_BEAM] = 1,
[MOVE_SHADOW_PUNCH] = 1,
@@ -374,22 +259,15 @@ static const s8 sMindRatings[] =
[MOVE_BULLET_SEED] = 1,
[MOVE_AERIAL_ACE] = 1,
[MOVE_ICICLE_SPEAR] = 1,
- [MOVE_IRON_DEFENSE] = 0,
- [MOVE_BLOCK] = 0,
- [MOVE_HOWL] = 0,
[MOVE_DRAGON_CLAW] = 1,
[MOVE_FRENZY_PLANT] = 1,
- [MOVE_BULK_UP] = 0,
[MOVE_BOUNCE] = 1,
[MOVE_MUD_SHOT] = 1,
[MOVE_POISON_TAIL] = 1,
[MOVE_COVET] = 1,
[MOVE_VOLT_TACKLE] = 1,
[MOVE_MAGICAL_LEAF] = 1,
- [MOVE_WATER_SPORT] = 0,
- [MOVE_CALM_MIND] = 0,
[MOVE_LEAF_BLADE] = 1,
- [MOVE_DRAGON_DANCE] = 0,
[MOVE_ROCK_BLAST] = 1,
[MOVE_SHOCK_WAVE] = 1,
[MOVE_WATER_PULSE] = 1,
@@ -397,14 +275,12 @@ static const s8 sMindRatings[] =
[MOVE_PSYCHO_BOOST] = 1,
};
-#define TAG_JUDGEMENT_ICON 1000
-
-static const struct OamData sJudgementIconOamData =
+static const struct OamData sOam_JudgementIcon =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -416,47 +292,47 @@ static const struct OamData sJudgementIconOamData =
.affineParam = 0
};
-static const union AnimCmd sJudgementIconAnimCmd0[] =
+static const union AnimCmd sAnim_JudgementIcon_X[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
-static const union AnimCmd sJudgementIconAnimCmd1[] =
+static const union AnimCmd sAnim_JudgementIcon_Triangle[] =
{
ANIMCMD_FRAME(4, 1),
ANIMCMD_END
};
-static const union AnimCmd sJudgementIconAnimCmd2[] =
+static const union AnimCmd sAnim_JudgementIcon_Circle[] =
{
ANIMCMD_FRAME(8, 1),
ANIMCMD_END
};
-static const union AnimCmd sJudgementIconAnimCmd3[] =
+static const union AnimCmd sAnim_JudgementIcon_Line[] =
{
ANIMCMD_FRAME(12, 1),
ANIMCMD_END
};
-static const union AnimCmd *const sJudgementIconAnimCmds[] =
+static const union AnimCmd *const sAnims_JudgementIcon[] =
{
- sJudgementIconAnimCmd0,
- sJudgementIconAnimCmd1,
- sJudgementIconAnimCmd2,
- sJudgementIconAnimCmd3
+ [ANIM_ICON_X] = sAnim_JudgementIcon_X,
+ [ANIM_ICON_TRIANGLE] = sAnim_JudgementIcon_Triangle,
+ [ANIM_ICON_CIRCLE] = sAnim_JudgementIcon_Circle,
+ [ANIM_ICON_LINE] = sAnim_JudgementIcon_Line,
};
static const struct SpriteTemplate sSpriteTemplate_JudgmentIcon =
{
.tileTag = TAG_JUDGEMENT_ICON,
.paletteTag = TAG_NONE,
- .oam = &sJudgementIconOamData,
- .anims = sJudgementIconAnimCmds,
+ .oam = &sOam_JudgementIcon,
+ .anims = sAnims_JudgementIcon,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCb_JudgmentIcon,
+ .callback = SpriteCB_JudgmentIcon,
};
static const struct CompressedSpriteSheet sBattleArenaJudgementSymbolsSpriteSheet[] =
@@ -507,12 +383,12 @@ void CallBattleArenaFunction(void)
u8 BattleArena_ShowJudgmentWindow(u8 *state)
{
int i;
- u8 ret = 0;
+ u8 result = ARENA_RESULT_RUNNING;
switch (*state)
{
case 0:
BeginNormalPaletteFade(0x7FFFFF1C, 4, 0, 8, RGB_BLACK);
- SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WININ, (WININ_WIN0_ALL & ~WININ_WIN0_BG0) | WININ_WIN1_ALL);
LoadCompressedSpriteSheet(sBattleArenaJudgementSymbolsSpriteSheet);
LoadCompressedPalette(gBattleArenaJudgementSymbolsPalette, 0x1F0, 0x20);
gBattle_WIN0H = 0xFF;
@@ -549,13 +425,15 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
{
- 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_WININ, WININ_WIN0_ALL | WININ_WIN1_ALL);
+
+ // Create dividing line for the the score totals at the bottom
for (i = 0; i < 8; i++)
{
u8 spriteId = CreateSprite(&sSpriteTemplate_JudgmentIcon, 64 + i * 16, 84, 0);
- StartSpriteAnim(&gSprites[spriteId], 3);
+ StartSpriteAnim(&gSprites[spriteId], ANIM_ICON_LINE);
}
- ret = 1;
+ result = ARENA_RESULT_STEP_DONE;
(*state)++;
}
break;
@@ -566,7 +444,7 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGEMENT_TITLE);
(*state)++;
- ret = 1;
+ result = ARENA_RESULT_STEP_DONE;
break;
case 5:
PlaySE(SE_ARENA_TIMEUP1);
@@ -575,7 +453,7 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGEMENT_TITLE);
(*state)++;
- ret = 1;
+ result = ARENA_RESULT_STEP_DONE;
break;
case 6:
PlaySE(SE_ARENA_TIMEUP1);
@@ -584,49 +462,50 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGEMENT_TITLE);
(*state)++;
- ret = 1;
+ result = ARENA_RESULT_STEP_DONE;
break;
case 7:
PlaySE(SE_ARENA_TIMEUP2);
if (gBattleTextBuff1[0] > gBattleTextBuff2[0])
{
- ret = 2;
+ result = ARENA_RESULT_PLAYER_WON;
gBattleScripting.battler = 0;
}
else if (gBattleTextBuff1[0] < gBattleTextBuff2[0])
{
- ret = 3;
+ result = ARENA_RESULT_PLAYER_LOST;
gBattleScripting.battler = 1;
}
else
{
- ret = 4;
+ result = ARENA_RESULT_TIE;
}
(*state)++;
break;
- case 8:
+ case JUDGEMENT_STATE_FINISHED:
+ // Finishing this state is the indicator to SpriteCB_JudgmentIcon that its safe to destroy the judgement icon sprites
(*state)++;
break;
- case 9:
- SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ case JUDGEMENT_STATE_FINISHED + 1:
+ SetGpuReg(REG_OFFSET_WININ, (WININ_WIN0_ALL & ~WININ_WIN0_BG0) | WININ_WIN1_ALL);
HandleBattleWindow(5, 0, 24, 13, WINDOW_CLEAR);
CopyBgTilemapBufferToVram(0);
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 256);
BeginNormalPaletteFade(0x7FFFFF1C, 4, 8, 0, RGB_BLACK);
(*state)++;
break;
- case 10:
+ case JUDGEMENT_STATE_FINISHED + 2:
if (!gPaletteFade.active)
{
- 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_WININ, WININ_WIN0_ALL | WININ_WIN1_ALL);
FreeSpriteTilesByTag(TAG_JUDGEMENT_ICON);
- ret = 1;
+ result = ARENA_RESULT_STEP_DONE;
(*state)++;
}
break;
}
- return ret;
+ return result;
}
static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler)
@@ -656,7 +535,8 @@ static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler)
if (pointsPlayer > pointsOpponent)
{
- animNum = 2;
+ animNum = ANIM_ICON_CIRCLE;
+ // +2 to score total for winning
if (battler != 0)
gBattleTextBuff2[0] += 2;
else
@@ -664,7 +544,8 @@ static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler)
}
else if (pointsPlayer == pointsOpponent)
{
- animNum = 1;
+ animNum = ANIM_ICON_TRIANGLE;
+ // +1 to score total for a tie
if (battler != 0)
gBattleTextBuff2[0] += 1;
else
@@ -672,16 +553,16 @@ static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler)
}
else
{
- animNum = 0;
+ animNum = ANIM_ICON_X;
}
pointsPlayer = CreateSprite(&sSpriteTemplate_JudgmentIcon, x, y, 0);
StartSpriteAnim(&gSprites[pointsPlayer], animNum);
}
-static void SpriteCb_JudgmentIcon(struct Sprite *sprite)
+static void SpriteCB_JudgmentIcon(struct Sprite *sprite)
{
- if (gBattleCommunication[0] > 8)
+ if (gBattleCommunication[0] > JUDGEMENT_STATE_FINISHED)
DestroySprite(sprite);
}
@@ -701,8 +582,7 @@ void BattleArena_InitPoints(void)
void BattleArena_AddMindPoints(u8 battler)
{
- s8 *mindPoints = gBattleStruct->arenaMindPoints;
- mindPoints[battler] += sMindRatings[gCurrentMove];
+ gBattleStruct->arenaMindPoints[battler] += sMindRatings[gCurrentMove];
}
void BattleArena_AddSkillPoints(u8 battler)
@@ -719,7 +599,7 @@ void BattleArena_AddSkillPoints(u8 battler)
}
else if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
- if (!(gMoveResultFlags & MOVE_RESULT_MISSED) || gBattleCommunication[6] != 1)
+ if (!(gMoveResultFlags & MOVE_RESULT_MISSED) || gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED)
skillPoints[battler] -= 2;
}
else if ((gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) && (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE))
diff --git a/src/battle_bg.c b/src/battle_bg.c
index 59d3171688..3965be2eab 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "battle.h"
+#include "battle_anim.h"
#include "battle_bg.h"
#include "battle_main.h"
#include "battle_message.h"
@@ -23,6 +24,7 @@
#include "constants/map_types.h"
#include "constants/songs.h"
#include "constants/trainers.h"
+#include "constants/battle_anim.h"
#if !P_ENABLE_DEBUG
struct BattleBackground
@@ -43,7 +45,7 @@ static const struct OamData sVsLetter_V_OamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -60,7 +62,7 @@ static const struct OamData sVsLetter_S_OamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -194,7 +196,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] =
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 55,
- .width = 8,
+ .width = 12, //for z move names
.height = 2,
.paletteNum = 5,
.baseBlock = 0x0300,
@@ -206,7 +208,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] =
.width = 8,
.height = 2,
.paletteNum = 5,
- .baseBlock = 0x0310,
+ .baseBlock = 0x0318,
},
[B_WIN_MOVE_NAME_3] = {
.bg = 0,
@@ -215,7 +217,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] =
.width = 8,
.height = 2,
.paletteNum = 5,
- .baseBlock = 0x0320,
+ .baseBlock = 0x0328,
},
[B_WIN_MOVE_NAME_4] = {
.bg = 0,
@@ -224,7 +226,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] =
.width = 8,
.height = 2,
.paletteNum = 5,
- .baseBlock = 0x0330,
+ .baseBlock = 0x0338,
},
[B_WIN_PP] = {
.bg = 0,
@@ -766,26 +768,26 @@ void DrawMainBattleBackground(void)
{
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK))
{
- LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60);
}
else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON)
{
- LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Cave, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Groudon, 0x20, 0x60);
}
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE)
{
- LZDecompressVram(gBattleTerrainTiles_Water, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Water, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Kyogre, 0x20, 0x60);
}
else if (gBattleTypeFlags & BATTLE_TYPE_RAYQUAZA)
{
- LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Rayquaza, 0x20, 0x60);
}
else
@@ -795,15 +797,15 @@ void DrawMainBattleBackground(void)
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
if (trainerClass == TRAINER_CLASS_LEADER)
{
- LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, 0x20, 0x60);
return;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, 0x20, 0x60);
return;
}
@@ -813,48 +815,48 @@ void DrawMainBattleBackground(void)
{
default:
case MAP_BATTLE_SCENE_NORMAL:
- LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_GYM:
- LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_MAGMA:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_AQUA:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_SIDNEY:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_PHOEBE:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_GLACIA:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_DRAKE:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, 0x20, 0x60);
break;
case MAP_BATTLE_SCENE_FRONTIER:
- LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
- LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Frontier, 0x20, 0x60);
break;
}
@@ -863,12 +865,16 @@ void DrawMainBattleBackground(void)
void LoadBattleTextboxAndBackground(void)
{
- LZDecompressVram(gBattleTextboxTiles, (void*)(BG_CHAR_ADDR(0)));
+ LZDecompressVram(gBattleTextboxTiles, (void *)(BG_CHAR_ADDR(0)));
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
CopyBgTilemapBufferToVram(0);
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
LoadBattleMenuWindowGfx();
- DrawMainBattleBackground();
+ #if B_TERRAIN_BG_CHANGE == TRUE
+ DrawTerrainTypeBattleBackground();
+ #else
+ DrawMainBattleBackground();
+ #endif
}
static void DrawLinkBattleParticipantPokeballs(u8 taskId, u8 multiplayerId, u8 bgId, u8 destX, u8 destY)
@@ -1130,8 +1136,8 @@ void DrawBattleEntryBackground(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- LZDecompressVram(gBattleVSFrame_Gfx, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gVsLettersGfx, (void*)OBJ_VRAM0);
+ LZDecompressVram(gBattleVSFrame_Gfx, (void *)(BG_CHAR_ADDR(1)));
+ LZDecompressVram(gVsLettersGfx, (void *)OBJ_VRAM0);
LoadCompressedPalette(gBattleVSFrame_Pal, 0x60, 0x20);
SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1);
SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04);
@@ -1147,10 +1153,10 @@ void DrawBattleEntryBackground(void)
}
else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
{
- if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
+ if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER)
{
- LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(BG_SCREEN_ADDR(28)));
+ LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
+ LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
}
else
{
@@ -1166,18 +1172,18 @@ void DrawBattleEntryBackground(void)
}
else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON)
{
- LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void*)(BG_SCREEN_ADDR(28)));
+ LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void *)(BG_CHAR_ADDR(1)));
+ LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void *)(BG_SCREEN_ADDR(28)));
}
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE)
{
- LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void*)(BG_SCREEN_ADDR(28)));
+ LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void *)(BG_CHAR_ADDR(1)));
+ LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void *)(BG_SCREEN_ADDR(28)));
}
else if (gBattleTypeFlags & BATTLE_TYPE_RAYQUAZA)
{
- LZDecompressVram(gBattleTerrainAnimTiles_Rayquaza, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gBattleTerrainAnimTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(28)));
+ LZDecompressVram(gBattleTerrainAnimTiles_Rayquaza, (void *)(BG_CHAR_ADDR(1)));
+ LZDecompressVram(gBattleTerrainAnimTilemap_Rayquaza, (void *)(BG_SCREEN_ADDR(28)));
}
else
{
@@ -1186,27 +1192,27 @@ void DrawBattleEntryBackground(void)
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
if (trainerClass == TRAINER_CLASS_LEADER)
{
- LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(BG_SCREEN_ADDR(28)));
+ LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
+ LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
return;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
- LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(BG_SCREEN_ADDR(28)));
+ LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
+ LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
return;
}
}
if (GetCurrentMapBattleScene() == MAP_BATTLE_SCENE_NORMAL)
{
- LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTileset, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTilemap, (void*)(BG_SCREEN_ADDR(28)));
+ LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTileset, (void *)(BG_CHAR_ADDR(1)));
+ LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTilemap, (void *)(BG_SCREEN_ADDR(28)));
}
else
{
- LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(BG_SCREEN_ADDR(28)));
+ LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
+ LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
}
}
}
@@ -1218,7 +1224,7 @@ bool8 LoadChosenBattleElement(u8 caseId)
switch (caseId)
{
case 0:
- LZDecompressVram(gBattleTextboxTiles, (void*)(BG_CHAR_ADDR(0)));
+ LZDecompressVram(gBattleTextboxTiles, (void *)(BG_CHAR_ADDR(0)));
break;
case 1:
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
@@ -1230,11 +1236,11 @@ bool8 LoadChosenBattleElement(u8 caseId)
case 3:
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
{
- LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
}
else if (gBattleTypeFlags & BATTLE_TYPE_GROUDON)
{
- LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Cave, (void *)(BG_CHAR_ADDR(2)));
}
else
{
@@ -1243,12 +1249,12 @@ bool8 LoadChosenBattleElement(u8 caseId)
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
if (trainerClass == TRAINER_CLASS_LEADER)
{
- LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
break;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
}
}
@@ -1257,31 +1263,31 @@ bool8 LoadChosenBattleElement(u8 caseId)
{
default:
case MAP_BATTLE_SCENE_NORMAL:
- LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_GYM:
- LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_MAGMA:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_AQUA:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_SIDNEY:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_PHOEBE:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_GLACIA:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_DRAKE:
- LZDecompressVram(gBattleTerrainTiles_Stadium, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_FRONTIER:
- LZDecompressVram(gBattleTerrainTiles_Building, (void*)(BG_CHAR_ADDR(2)));
+ LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
break;
}
}
@@ -1289,14 +1295,14 @@ bool8 LoadChosenBattleElement(u8 caseId)
case 4:
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
{
- LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
}
else if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
{
if (gGameVersion == VERSION_RUBY)
- LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Cave, (void *)(BG_SCREEN_ADDR(26)));
else
- LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(BG_SCREEN_ADDR(26)));
}
else
{
@@ -1305,12 +1311,12 @@ bool8 LoadChosenBattleElement(u8 caseId)
u8 trainerClass = gTrainers[gTrainerBattleOpponent_A].trainerClass;
if (trainerClass == TRAINER_CLASS_LEADER)
{
- LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
break;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
}
}
@@ -1319,31 +1325,31 @@ bool8 LoadChosenBattleElement(u8 caseId)
{
default:
case MAP_BATTLE_SCENE_NORMAL:
- LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_GYM:
- LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_MAGMA:
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_AQUA:
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_SIDNEY:
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_PHOEBE:
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_GLACIA:
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_DRAKE:
- LZDecompressVram(gBattleTerrainTilemap_Stadium, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_FRONTIER:
- LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(BG_SCREEN_ADDR(26)));
+ LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
break;
}
}
@@ -1420,3 +1426,26 @@ bool8 LoadChosenBattleElement(u8 caseId)
return ret;
}
+
+void DrawTerrainTypeBattleBackground(void)
+{
+ switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
+ {
+ case STATUS_FIELD_GRASSY_TERRAIN:
+ LoadMoveBg(BG_GRASSY_TERRAIN);
+ break;
+ case STATUS_FIELD_MISTY_TERRAIN:
+ LoadMoveBg(BG_MISTY_TERRAIN);
+ break;
+ case STATUS_FIELD_ELECTRIC_TERRAIN:
+ LoadMoveBg(BG_ELECTRIC_TERRAIN);
+ break;
+ case STATUS_FIELD_PSYCHIC_TERRAIN:
+ LoadMoveBg(BG_PSYCHIC_TERRAIN);
+ break;
+ default:
+ DrawMainBattleBackground();
+ break;
+ }
+}
+
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 0053c52acf..833925550a 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_interface.h"
@@ -85,6 +85,7 @@ static void LinkOpponentHandleBattleAnimation(void);
static void LinkOpponentHandleLinkStandbyMsg(void);
static void LinkOpponentHandleResetActionMoveSelection(void);
static void LinkOpponentHandleEndLinkBattle(void);
+static void LinkOpponentHandleBattleDebug(void);
static void LinkOpponentCmdEnd(void);
static void LinkOpponentBufferRunCommand(void);
@@ -157,6 +158,7 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
[CONTROLLER_LINKSTANDBYMSG] = LinkOpponentHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = LinkOpponentHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = LinkOpponentHandleEndLinkBattle,
+ [CONTROLLER_DEBUGMENU] = LinkOpponentHandleBattleDebug,
[CONTROLLER_TERMINATOR_NOP] = LinkOpponentCmdEnd
};
@@ -173,8 +175,8 @@ static void LinkOpponentBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands))
- sLinkOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands))
+ sLinkOpponentBufferCommands[gBattleResources->bufferA[gActiveBattler][0]]();
else
LinkOpponentBufferExecCompleted();
}
@@ -526,7 +528,7 @@ static void LinkOpponentBufferExecCompleted(void)
u8 playerId = GetMultiplayerId();
PrepareBufferDataTransferLink(2, 4, &playerId);
- gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
}
else
{
@@ -541,13 +543,13 @@ static void LinkOpponentHandleGetMonData(void)
u8 monToCheck;
s32 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
size += CopyLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -569,7 +571,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
u32 data32;
s32 size = 0;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES);
@@ -626,7 +628,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES);
- src = (u8*)(&moveData);
+ src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
@@ -634,7 +636,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
dst[0] = data16;
dst[1] = data16 >> 8;
size = 2;
@@ -649,7 +651,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst)
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
size = 1;
break;
case REQUEST_OTID_BATTLE:
@@ -874,13 +876,13 @@ static void LinkOpponentHandleSetMonData(void)
u8 monToCheck;
u8 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
SetLinkOpponentMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -893,11 +895,11 @@ static void LinkOpponentHandleSetMonData(void)
static void SetLinkOpponentMonData(u8 monId)
{
- struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
- struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3];
s32 i;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
{
@@ -938,10 +940,10 @@ static void SetLinkOpponentMonData(u8 monId)
}
break;
case REQUEST_SPECIES_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HELDITEM_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -955,165 +957,165 @@ static void SetLinkOpponentMonData(u8 monId)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PP_DATA_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]);
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_OTID_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_EXP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_FRIENDSHIP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKERUS_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LOCATION_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LEVEL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_GAME_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKEBALL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ALL_IVS_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]);
break;
case REQUEST_HP_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PERSONALITY_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CHECKSUM_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_STATUS_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_LEVEL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MAX_HP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SHEEN_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
}
}
static void LinkOpponentHandleSetRawMonData(void)
{
- u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1];
u8 i;
- for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
- dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++)
+ dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i];
LinkOpponentBufferExecCompleted();
}
@@ -1142,8 +1144,8 @@ static void LinkOpponentHandleLoadMonSprite(void)
static void LinkOpponentHandleSwitchInAnim(void)
{
- gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
- StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1];
+ StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim;
}
@@ -1152,7 +1154,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
u16 species;
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
- gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
@@ -1181,7 +1183,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
static void LinkOpponentHandleReturnMonToBall(void)
{
- if (gBattleBufferA[gActiveBattler][1] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][1] == 0)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1388,32 +1390,25 @@ static void LinkOpponentHandleMoveAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
- gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
- gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
- gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
- gAnimFriendship = gBattleBufferA[gActiveBattler][10];
- gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
- gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
- if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
- {
- LinkOpponentBufferExecCompleted();
- }
- else
- {
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation;
- BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
- }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation;
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
static void LinkOpponentDoMoveAnimation(void)
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
- u8 multihit = gBattleBufferA[gActiveBattler][11];
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
+ u8 multihit = gBattleResources->bufferA[gActiveBattler][11];
switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
{
@@ -1451,7 +1446,7 @@ static void LinkOpponentDoMoveAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
CopyAllBattleSpritesInvisibilities();
- TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
LinkOpponentBufferExecCompleted();
}
@@ -1465,7 +1460,7 @@ static void LinkOpponentHandlePrintString(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
+ stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
@@ -1512,7 +1507,7 @@ static void LinkOpponentHandleHealthBarUpdate(void)
s16 hpVal;
LoadBattleBarGfx(0);
- hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP)
{
@@ -1553,8 +1548,8 @@ static void LinkOpponentHandleStatusAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
- gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
+ InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1],
+ gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24));
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1612,7 +1607,7 @@ static void LinkOpponentHandleClearUnkVar(void)
static void LinkOpponentHandleSetUnkVar(void)
{
- gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
+ gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1];
LinkOpponentBufferExecCompleted();
}
@@ -1657,20 +1652,20 @@ static void LinkOpponentHandlePlaySE(void)
else
pan = SOUND_PAN_TARGET;
- PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan);
LinkOpponentBufferExecCompleted();
}
static void LinkOpponentHandlePlayFanfareOrBGM(void)
{
- if (gBattleBufferA[gActiveBattler][3])
+ if (gBattleResources->bufferA[gActiveBattler][3])
{
BattleStopLowHpSound();
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
else
{
- PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
LinkOpponentBufferExecCompleted();
@@ -1686,7 +1681,7 @@ static void LinkOpponentHandleFaintingCry(void)
static void LinkOpponentHandleIntroSlide(void)
{
- HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]);
gIntroSlideFlags |= 1;
LinkOpponentBufferExecCompleted();
}
@@ -1721,15 +1716,15 @@ static void Task_StartSendOutAnim(u8 taskId)
gActiveBattler = gTasks[taskId].data[0];
if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
}
else
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler = BATTLE_PARTNER(gActiveBattler);
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler = BATTLE_PARTNER(gActiveBattler);
}
@@ -1747,7 +1742,7 @@ static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite)
static void LinkOpponentHandleDrawPartyStatusSummary(void)
{
- if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
LinkOpponentBufferExecCompleted();
}
@@ -1755,7 +1750,7 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E < 2)
{
@@ -1768,10 +1763,10 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
}
}
- gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -1803,7 +1798,7 @@ static void LinkOpponentHandleSpriteInvisibility(void)
{
if (IsBattlerSpritePresent(gActiveBattler))
{
- gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1];
CopyBattleSpriteInvisibility(gActiveBattler);
}
LinkOpponentBufferExecCompleted();
@@ -1813,8 +1808,8 @@ static void LinkOpponentHandleBattleAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u8 animationId = gBattleBufferA[gActiveBattler][1];
- u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u8 animationId = gBattleResources->bufferA[gActiveBattler][1];
+ u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
LinkOpponentBufferExecCompleted();
@@ -1827,7 +1822,7 @@ static void LinkOpponentHandleBattleAnimation(void)
static void LinkOpponentHandleLinkStandbyMsg(void)
{
- RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][2]);
+ RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][2]);
LinkOpponentBufferExecCompleted();
}
@@ -1838,20 +1833,25 @@ static void LinkOpponentHandleResetActionMoveSelection(void)
static void LinkOpponentHandleEndLinkBattle(void)
{
- RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][4]);
+ RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][4]);
- if (gBattleBufferA[gActiveBattler][1] == B_OUTCOME_DREW)
- gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ if (gBattleResources->bufferA[gActiveBattler][1] == B_OUTCOME_DREW)
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1];
else
- gBattleOutcome = gBattleBufferA[gActiveBattler][1] ^ B_OUTCOME_DREW;
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1] ^ B_OUTCOME_DREW;
- gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2];
+ gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[gActiveBattler][2];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
LinkOpponentBufferExecCompleted();
gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
}
+static void LinkOpponentHandleBattleDebug(void)
+{
+ LinkOpponentBufferExecCompleted();
+}
+
static void LinkOpponentCmdEnd(void)
{
}
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 9a2c13f767..6a0ecb2976 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_interface.h"
@@ -85,6 +85,7 @@ static void LinkPartnerHandleBattleAnimation(void);
static void LinkPartnerHandleLinkStandbyMsg(void);
static void LinkPartnerHandleResetActionMoveSelection(void);
static void LinkPartnerHandleEndLinkBattle(void);
+static void LinkPartnerHandleBattleDebug(void);
static void LinkPartnerCmdEnd(void);
static void LinkPartnerBufferRunCommand(void);
@@ -156,6 +157,7 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
[CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = LinkPartnerHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = LinkPartnerHandleEndLinkBattle,
+ [CONTROLLER_DEBUGMENU] = LinkPartnerHandleBattleDebug,
[CONTROLLER_TERMINATOR_NOP] = LinkPartnerCmdEnd
};
@@ -172,8 +174,8 @@ static void LinkPartnerBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands))
- sLinkPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands))
+ sLinkPartnerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]]();
else
LinkPartnerBufferExecCompleted();
}
@@ -401,7 +403,7 @@ static void LinkPartnerBufferExecCompleted(void)
u8 playerId = GetMultiplayerId();
PrepareBufferDataTransferLink(2, 4, &playerId);
- gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
}
else
{
@@ -428,13 +430,13 @@ static void LinkPartnerHandleGetMonData(void)
u8 monToCheck;
s32 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
size += CopyLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -456,7 +458,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
u32 data32;
s32 size = 0;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
@@ -513,7 +515,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
- src = (u8*)(&moveData);
+ src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
@@ -521,7 +523,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
dst[0] = data16;
dst[1] = data16 >> 8;
size = 2;
@@ -536,7 +538,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst)
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
size = 1;
break;
case REQUEST_OTID_BATTLE:
@@ -761,13 +763,13 @@ static void LinkPartnerHandleSetMonData(void)
u8 monToCheck;
u8 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
SetLinkPartnerMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -780,11 +782,11 @@ static void LinkPartnerHandleSetMonData(void)
static void SetLinkPartnerMonData(u8 monId)
{
- struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
- struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3];
s32 i;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
{
@@ -825,10 +827,10 @@ static void SetLinkPartnerMonData(u8 monId)
}
break;
case REQUEST_SPECIES_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HELDITEM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -842,154 +844,154 @@ static void SetLinkPartnerMonData(u8 monId)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PP_DATA_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]);
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_OTID_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_EXP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_FRIENDSHIP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKERUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LOCATION_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_GAME_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKEBALL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ALL_IVS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]);
break;
case REQUEST_HP_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PERSONALITY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CHECKSUM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_STATUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MAX_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SHEEN_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
}
@@ -998,11 +1000,11 @@ static void SetLinkPartnerMonData(u8 monId)
static void LinkPartnerHandleSetRawMonData(void)
{
- u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1];
u8 i;
- for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
- dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++)
+ dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i];
LinkPartnerBufferExecCompleted();
}
@@ -1028,10 +1030,10 @@ static void LinkPartnerHandleLoadMonSprite(void)
static void LinkPartnerHandleSwitchInAnim(void)
{
- ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
- gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1];
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim;
}
@@ -1040,7 +1042,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
u16 species;
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
- gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
@@ -1068,7 +1070,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
static void LinkPartnerHandleReturnMonToBall(void)
{
- if (gBattleBufferA[gActiveBattler][1] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][1] == 0)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1220,32 +1222,25 @@ static void LinkPartnerHandleMoveAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
- gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
- gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
- gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
- gAnimFriendship = gBattleBufferA[gActiveBattler][10];
- gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
- gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
- if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
- {
- LinkPartnerBufferExecCompleted();
- }
- else
- {
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation;
- BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
- }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation;
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
static void LinkPartnerDoMoveAnimation(void)
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
- u8 multihit = gBattleBufferA[gActiveBattler][11];
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
+ u8 multihit = gBattleResources->bufferA[gActiveBattler][11];
switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
{
@@ -1283,7 +1278,7 @@ static void LinkPartnerDoMoveAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
CopyAllBattleSpritesInvisibilities();
- TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
LinkPartnerBufferExecCompleted();
}
@@ -1297,7 +1292,7 @@ static void LinkPartnerHandlePrintString(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
+ stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
@@ -1344,7 +1339,7 @@ static void LinkPartnerHandleHealthBarUpdate(void)
s16 hpVal;
LoadBattleBarGfx(0);
- hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP)
{
@@ -1385,8 +1380,8 @@ static void LinkPartnerHandleStatusAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
- gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
+ InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1],
+ gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24));
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1444,7 +1439,7 @@ static void LinkPartnerHandleClearUnkVar(void)
static void LinkPartnerHandleSetUnkVar(void)
{
- gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
+ gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1];
LinkPartnerBufferExecCompleted();
}
@@ -1489,20 +1484,20 @@ static void LinkPartnerHandlePlaySE(void)
else
pan = SOUND_PAN_TARGET;
- PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan);
LinkPartnerBufferExecCompleted();
}
static void LinkPartnerHandlePlayFanfareOrBGM(void)
{
- if (gBattleBufferA[gActiveBattler][3])
+ if (gBattleResources->bufferA[gActiveBattler][3])
{
BattleStopLowHpSound();
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
else
{
- PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
LinkPartnerBufferExecCompleted();
@@ -1518,7 +1513,7 @@ static void LinkPartnerHandleFaintingCry(void)
static void LinkPartnerHandleIntroSlide(void)
{
- HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]);
gIntroSlideFlags |= 1;
LinkPartnerBufferExecCompleted();
}
@@ -1584,15 +1579,15 @@ static void Task_StartSendOutAnim(u8 taskId)
gActiveBattler = gTasks[taskId].data[0];
if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
}
else
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
@@ -1605,17 +1600,17 @@ static void Task_StartSendOutAnim(u8 taskId)
static void LinkPartnerHandleDrawPartyStatusSummary(void)
{
- if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
LinkPartnerBufferExecCompleted();
}
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
- gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -1647,7 +1642,7 @@ static void LinkPartnerHandleSpriteInvisibility(void)
{
if (IsBattlerSpritePresent(gActiveBattler))
{
- gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1];
CopyBattleSpriteInvisibility(gActiveBattler);
}
LinkPartnerBufferExecCompleted();
@@ -1657,8 +1652,8 @@ static void LinkPartnerHandleBattleAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u8 animationId = gBattleBufferA[gActiveBattler][1];
- u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u8 animationId = gBattleResources->bufferA[gActiveBattler][1];
+ u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
LinkPartnerBufferExecCompleted();
@@ -1671,7 +1666,7 @@ static void LinkPartnerHandleBattleAnimation(void)
static void LinkPartnerHandleLinkStandbyMsg(void)
{
- RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][2]);
+ RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][2]);
LinkPartnerBufferExecCompleted();
}
@@ -1682,15 +1677,20 @@ static void LinkPartnerHandleResetActionMoveSelection(void)
static void LinkPartnerHandleEndLinkBattle(void)
{
- RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][4]);
- gBattleOutcome = gBattleBufferA[gActiveBattler][1];
- gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2];
+ RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][4]);
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1];
+ gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[gActiveBattler][2];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
LinkPartnerBufferExecCompleted();
gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
}
+static void LinkPartnerHandleBattleDebug(void)
+{
+ LinkPartnerBufferExecCompleted();
+}
+
static void LinkPartnerCmdEnd(void)
{
}
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 557b610462..a503c1c7aa 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
+#include "battle_ai_util.h"
#include "battle_anim.h"
#include "battle_arena.h"
#include "battle_controllers.h"
@@ -9,6 +10,7 @@
#include "battle_setup.h"
#include "battle_tower.h"
#include "battle_tv.h"
+#include "battle_z_move.h"
#include "bg.h"
#include "data.h"
#include "frontier_util.h"
@@ -90,6 +92,7 @@ static void OpponentHandleBattleAnimation(void);
static void OpponentHandleLinkStandbyMsg(void);
static void OpponentHandleResetActionMoveSelection(void);
static void OpponentHandleEndLinkBattle(void);
+static void OpponentHandleDebugMenu(void);
static void OpponentCmdEnd(void);
static void OpponentBufferRunCommand(void);
@@ -162,6 +165,7 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
[CONTROLLER_LINKSTANDBYMSG] = OpponentHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = OpponentHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = OpponentHandleEndLinkBattle,
+ [CONTROLLER_DEBUGMENU] = OpponentHandleDebugMenu,
[CONTROLLER_TERMINATOR_NOP] = OpponentCmdEnd
};
@@ -181,8 +185,8 @@ static void OpponentBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sOpponentBufferCommands))
- sOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sOpponentBufferCommands))
+ sOpponentBufferCommands[gBattleResources->bufferA[gActiveBattler][0]]();
else
OpponentBufferExecCompleted();
}
@@ -220,12 +224,18 @@ static void Intro_DelayAndEnd(void)
}
}
+static bool32 TwoIntroMons(u32 battlerId) // Double battle with both player pokemon active.
+{
+ return (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[battlerId ^ BIT_FLANK]]));
+}
+
static void Intro_WaitForShinyAnimAndHealthbox(void)
{
bool8 healthboxAnimDone = FALSE;
bool8 twoMons;
- if (!IsDoubleBattle() || ((IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)) || (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)))
+ twoMons = TwoIntroMons(gActiveBattler);
+ if (!twoMons || ((twoMons && (gBattleTypeFlags & BATTLE_TYPE_MULTI) && !BATTLE_TWO_VS_ONE_OPPONENT) || (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)))
{
if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
healthboxAnimDone = TRUE;
@@ -287,15 +297,17 @@ static void Intro_TryShinyAnimShowHealthbox(void)
{
bool32 bgmRestored = FALSE;
bool32 battlerAnimsDone = FALSE;
+ bool32 twoMons;
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim)
TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]);
+ twoMons = TwoIntroMons(gActiveBattler);
if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
- && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)
- && IsDoubleBattle()
+ && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT)
+ && twoMons
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive
&& !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim)
@@ -305,7 +317,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted)
{
- if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ if (twoMons && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT))
{
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
@@ -337,7 +349,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
bgmRestored = TRUE;
}
- if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ if (!twoMons || (twoMons && gBattleTypeFlags & BATTLE_TYPE_MULTI && !BATTLE_TWO_VS_ONE_OPPONENT))
{
if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
@@ -358,7 +370,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
if (bgmRestored && battlerAnimsDone)
{
- if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ if (twoMons && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT))
{
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
SetBattlerShadowSpriteCallback(gActiveBattler ^ BIT_FLANK, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], MON_DATA_SPECIES));
@@ -526,7 +538,7 @@ static void OpponentBufferExecCompleted(void)
u8 playerId = GetMultiplayerId();
PrepareBufferDataTransferLink(2, 4, &playerId);
- gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
}
else
{
@@ -541,13 +553,13 @@ static void OpponentHandleGetMonData(void)
u8 monToCheck;
s32 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
size += GetOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -569,7 +581,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst)
u32 data32;
s32 size = 0;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES);
@@ -626,7 +638,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst)
moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES);
- src = (u8*)(&moveData);
+ src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
@@ -634,7 +646,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
dst[0] = data16;
dst[1] = data16 >> 8;
size = 2;
@@ -649,7 +661,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst)
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
size = 1;
break;
case REQUEST_OTID_BATTLE:
@@ -867,14 +879,14 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst)
static void OpponentHandleGetRawMonData(void)
{
struct BattlePokemon battleMon;
- u8 *src = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
- u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBattler][1];
+ u8 *src = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&battleMon + gBattleResources->bufferA[gActiveBattler][1];
u8 i;
- for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
+ for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++)
dst[i] = src[i];
- BtlController_EmitDataTransfer(BUFFER_B, gBattleBufferA[gActiveBattler][2], dst);
+ BtlController_EmitDataTransfer(BUFFER_B, gBattleResources->bufferA[gActiveBattler][2], dst);
OpponentBufferExecCompleted();
}
@@ -883,13 +895,13 @@ static void OpponentHandleSetMonData(void)
u8 monToCheck;
u8 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
SetOpponentMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -902,11 +914,11 @@ static void OpponentHandleSetMonData(void)
static void SetOpponentMonData(u8 monId)
{
- struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
- struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3];
s32 i;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
{
@@ -947,10 +959,10 @@ static void SetOpponentMonData(u8 monId)
}
break;
case REQUEST_SPECIES_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HELDITEM_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -964,165 +976,165 @@ static void SetOpponentMonData(u8 monId)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PP_DATA_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]);
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_OTID_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_EXP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_FRIENDSHIP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKERUS_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LOCATION_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LEVEL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_GAME_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKEBALL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ALL_IVS_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]);
break;
case REQUEST_HP_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PERSONALITY_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CHECKSUM_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_STATUS_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_LEVEL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MAX_HP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SHEEN_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
}
}
static void OpponentHandleSetRawMonData(void)
{
- u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1];
u8 i;
- for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
- dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++)
+ dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i];
OpponentBufferExecCompleted();
}
@@ -1153,8 +1165,8 @@ static void OpponentHandleLoadMonSprite(void)
static void OpponentHandleSwitchInAnim(void)
{
*(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6;
- gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
- StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1];
+ StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim;
}
@@ -1163,7 +1175,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
u16 species;
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
- gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
@@ -1192,7 +1204,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
static void OpponentHandleReturnMonToBall(void)
{
- if (gBattleBufferA[gActiveBattler][1] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][1] == 0)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1287,7 +1299,7 @@ static void OpponentHandleDrawTrainerPic(void)
trainerPicId = gTrainers[gTrainerBattleOpponent_A].trainerPic;
}
- if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS))
+ if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT)
{
if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon
xPos = 152;
@@ -1442,31 +1454,24 @@ static void OpponentHandleMoveAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
- gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
- gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
- gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
- gAnimFriendship = gBattleBufferA[gActiveBattler][10];
- gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
- gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
- if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
- {
- OpponentBufferExecCompleted();
- }
- else
- {
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- gBattlerControllerFuncs[gActiveBattler] = OpponentDoMoveAnimation;
- }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = OpponentDoMoveAnimation;
}
}
static void OpponentDoMoveAnimation(void)
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
- u8 multihit = gBattleBufferA[gActiveBattler][11];
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
+ u8 multihit = gBattleResources->bufferA[gActiveBattler][11];
switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
{
@@ -1504,7 +1509,7 @@ static void OpponentDoMoveAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
CopyAllBattleSpritesInvisibilities();
- TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
OpponentBufferExecCompleted();
}
@@ -1518,7 +1523,7 @@ static void OpponentHandlePrintString(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
+ stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
@@ -1551,14 +1556,13 @@ static void OpponentHandleChooseMove(void)
else
{
u8 chosenMoveId;
- struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
- if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER))
+ if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER)
+ || IsWildMonSmart())
{
-
- BattleAI_SetupAIData(0xF);
- chosenMoveId = BattleAI_ChooseMoveOrAction();
-
+ chosenMoveId = gBattleStruct->aiMoveOrAction[gActiveBattler];
+ gBattlerTarget = gBattleStruct->aiChosenTarget[gActiveBattler];
switch (chosenMoveId)
{
case AI_CHOICE_WATCH:
@@ -1567,36 +1571,88 @@ static void OpponentHandleChooseMove(void)
case AI_CHOICE_FLEE:
BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_RUN, 0);
break;
+ case AI_CHOICE_SWITCH:
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0xFFFF);
+ break;
case 6:
BtlController_EmitTwoReturnValues(BUFFER_B, 15, gBattlerTarget);
break;
default:
- if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
- gBattlerTarget = gActiveBattler;
- if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH)
{
- gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
- gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ u16 chosenMove = moveInfo->moves[chosenMoveId];
+
+ if (GetBattlerMoveTargetType(gActiveBattler, chosenMove) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
+ gBattlerTarget = gActiveBattler;
+ if (GetBattlerMoveTargetType(gActiveBattler, chosenMove) & MOVE_TARGET_BOTH)
+ {
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
+ gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ }
+ if (ShouldUseZMove(gActiveBattler, gBattlerTarget, chosenMove))
+ QueueZMove(gActiveBattler, chosenMove);
+ if (CanMegaEvolve(gActiveBattler)) // If opponent can mega evolve, do it.
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8));
+ else
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8));
}
- BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8));
break;
}
OpponentBufferExecCompleted();
}
- else
+ else // Wild pokemon - use random move
{
u16 move;
+ u8 target;
do
{
chosenMoveId = Random() & 3;
move = moveInfo->moves[chosenMoveId];
} while (move == MOVE_NONE);
- if (gBattleMoves[move].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
+ if (GetBattlerMoveTargetType(gActiveBattler, move) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gActiveBattler << 8));
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (GetBattlerAtPosition(Random() & 2) << 8));
+ {
+ do {
+ target = GetBattlerAtPosition(Random() & 2);
+ } while (!CanTargetBattler(gActiveBattler, target, move));
+
+ #if B_WILD_NATURAL_ENEMIES == TRUE
+ // Don't bother to loop through table if the move can't attack ally
+ if (!(gBattleMoves[move].target & MOVE_TARGET_BOTH))
+ {
+ u16 i, speciesAttacker, speciesTarget, isPartnerEnemy = FALSE;
+ static const u16 naturalEnemies[][2] =
+ {
+ // Attacker Target
+ {SPECIES_ZANGOOSE, SPECIES_SEVIPER},
+ {SPECIES_SEVIPER, SPECIES_ZANGOOSE},
+ {SPECIES_HEATMOR, SPECIES_DURANT},
+ {SPECIES_DURANT, SPECIES_HEATMOR},
+ {SPECIES_SABLEYE, SPECIES_CARBINK},
+ {SPECIES_MAREANIE, SPECIES_CORSOLA},
+ };
+ speciesAttacker = gBattleMons[gActiveBattler].species;
+ speciesTarget = gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(gActiveBattler))].species;
+
+ for (i = 0; i < ARRAY_COUNT(naturalEnemies); i++)
+ {
+ if (speciesAttacker == naturalEnemies[i][0] && speciesTarget == naturalEnemies[i][1])
+ {
+ isPartnerEnemy = TRUE;
+ break;
+ }
+ }
+ if (isPartnerEnemy && CanTargetBattler(gActiveBattler, target, move))
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (GetBattlerAtPosition(BATTLE_PARTNER(gActiveBattler)) << 8));
+ else
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (target << 8));
+ }
+ else
+ #endif
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (target << 8));
+ }
else
BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8));
@@ -1633,17 +1689,7 @@ static void OpponentHandleChoosePokemon(void)
battler2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
}
- if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_TOWER_LINK_MULTI))
- {
- if (gActiveBattler == 1)
- firstId = 0, lastId = 3;
- else
- firstId = 3, lastId = 6;
- }
- else
- {
- firstId = 0, lastId = 6;
- }
+ GetAIPartyIndexes(gActiveBattler, &firstId, &lastId);
for (chosenMonId = firstId; chosenMonId < lastId; chosenMonId++)
{
@@ -1678,7 +1724,7 @@ static void OpponentHandleHealthBarUpdate(void)
s16 hpVal;
LoadBattleBarGfx(0);
- hpVal = (gBattleBufferA[gActiveBattler][3] << 8) | gBattleBufferA[gActiveBattler][2];
+ hpVal = (gBattleResources->bufferA[gActiveBattler][3] << 8) | gBattleResources->bufferA[gActiveBattler][2];
if (hpVal != INSTANT_HP_BAR_DROP)
{
@@ -1719,8 +1765,8 @@ static void OpponentHandleStatusAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
- gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
+ InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1],
+ gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24));
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1778,7 +1824,7 @@ static void OpponentHandleClearUnkVar(void)
static void OpponentHandleSetUnkVar(void)
{
- gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
+ gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1];
OpponentBufferExecCompleted();
}
@@ -1823,20 +1869,20 @@ static void OpponentHandlePlaySE(void)
else
pan = SOUND_PAN_TARGET;
- PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan);
OpponentBufferExecCompleted();
}
static void OpponentHandlePlayFanfareOrBGM(void)
{
- if (gBattleBufferA[gActiveBattler][3])
+ if (gBattleResources->bufferA[gActiveBattler][3])
{
BattleStopLowHpSound();
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
else
{
- PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
OpponentBufferExecCompleted();
@@ -1852,7 +1898,7 @@ static void OpponentHandleFaintingCry(void)
static void OpponentHandleIntroSlide(void)
{
- HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]);
gIntroSlideFlags |= 1;
OpponentBufferExecCompleted();
}
@@ -1892,22 +1938,22 @@ static void Task_StartSendOutAnim(u8 taskId)
u8 savedActiveBank = gActiveBattler;
gActiveBattler = gTasks[taskId].data[0];
- if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ if ((!TwoIntroMons(gActiveBattler) || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) && !BATTLE_TWO_VS_ONE_OPPONENT)
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
}
else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS))
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
}
else
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
}
@@ -1918,7 +1964,7 @@ static void Task_StartSendOutAnim(u8 taskId)
static void OpponentHandleDrawPartyStatusSummary(void)
{
- if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
OpponentBufferExecCompleted();
}
@@ -1926,7 +1972,7 @@ static void OpponentHandleDrawPartyStatusSummary(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E < 2)
{
@@ -1939,10 +1985,10 @@ static void OpponentHandleDrawPartyStatusSummary(void)
}
}
- gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -1974,7 +2020,7 @@ static void OpponentHandleSpriteInvisibility(void)
{
if (IsBattlerSpritePresent(gActiveBattler))
{
- gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1];
CopyBattleSpriteInvisibility(gActiveBattler);
}
OpponentBufferExecCompleted();
@@ -1984,8 +2030,8 @@ static void OpponentHandleBattleAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u8 animationId = gBattleBufferA[gActiveBattler][1];
- u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u8 animationId = gBattleResources->bufferA[gActiveBattler][1];
+ u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
OpponentBufferExecCompleted();
@@ -2015,6 +2061,11 @@ static void OpponentHandleEndLinkBattle(void)
OpponentBufferExecCompleted();
}
+static void OpponentHandleDebugMenu(void)
+{
+ OpponentBufferExecCompleted();
+}
+
static void OpponentCmdEnd(void)
{
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 93269f52e9..8195414955 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -8,6 +8,7 @@
#include "battle_message.h"
#include "battle_setup.h"
#include "battle_tv.h"
+#include "battle_z_move.h"
#include "bg.h"
#include "data.h"
#include "item.h"
@@ -29,6 +30,7 @@
#include "util.h"
#include "window.h"
#include "constants/battle_anim.h"
+#include "constants/battle_config.h"
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/party_menu.h"
@@ -91,13 +93,12 @@ static void PlayerHandleBattleAnimation(void);
static void PlayerHandleLinkStandbyMsg(void);
static void PlayerHandleResetActionMoveSelection(void);
static void PlayerHandleEndLinkBattle(void);
+static void PlayerHandleBattleDebug(void);
static void PlayerCmdEnd(void);
static void PlayerBufferRunCommand(void);
static void HandleInputChooseTarget(void);
static void HandleInputChooseMove(void);
-static void MoveSelectionCreateCursorAt(u8, u8);
-static void MoveSelectionDestroyCursorAt(u8);
static void MoveSelectionDisplayPpNumber(void);
static void MoveSelectionDisplayPpString(void);
static void MoveSelectionDisplayMoveType(void);
@@ -120,6 +121,8 @@ static void PlayerDoMoveAnimation(void);
static void Task_StartSendOutAnim(u8);
static void EndDrawPartyStatusSummary(void);
+static void ReloadMoveNames(void);
+
static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
{
[CONTROLLER_GETMONDATA] = PlayerHandleGetMonData,
@@ -178,11 +181,10 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
[CONTROLLER_LINKSTANDBYMSG] = PlayerHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = PlayerHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = PlayerHandleEndLinkBattle,
+ [CONTROLLER_DEBUGMENU] = PlayerHandleBattleDebug,
[CONTROLLER_TERMINATOR_NOP] = PlayerCmdEnd
};
-static const u8 sTargetIdentities[MAX_BATTLERS_COUNT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT};
-
// unknown unused data
static const u8 sUnused[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58};
@@ -205,7 +207,7 @@ static void PlayerBufferExecCompleted(void)
u8 playerId = GetMultiplayerId();
PrepareBufferDataTransferLink(2, 4, &playerId);
- gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
}
else
{
@@ -217,8 +219,8 @@ static void PlayerBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerBufferCommands))
- sPlayerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerBufferCommands))
+ sPlayerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]]();
else
PlayerBufferExecCompleted();
}
@@ -232,7 +234,7 @@ static void CompleteOnBankSpritePosX_0(void)
static void HandleInputChooseAction(void)
{
- u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u16 itemId = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
@@ -245,7 +247,8 @@ static void HandleInputChooseAction(void)
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
-
+ TryHideLastUsedBall();
+
switch (gActionSelectionCursor[gActiveBattler])
{
case 0: // Top left
@@ -310,7 +313,7 @@ static void HandleInputChooseAction(void)
&& !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)])
&& !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- if (gBattleBufferA[gActiveBattler][1] == B_ACTION_USE_ITEM)
+ if (gBattleResources->bufferA[gActiveBattler][1] == B_ACTION_USE_ITEM)
{
// Add item to bag if it is a ball
if (itemId <= LAST_BALL)
@@ -327,6 +330,20 @@ static void HandleInputChooseAction(void)
{
SwapHpBarsWithHpText();
}
+ else if (B_ENABLE_DEBUG && gMain.newKeys & SELECT_BUTTON)
+ {
+ BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_DEBUG, 0);
+ PlayerBufferExecCompleted();
+ }
+ #if B_LAST_USED_BALL == TRUE
+ else if (JOY_NEW(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall())
+ {
+ PlaySE(SE_SELECT);
+ TryHideLastUsedBall();
+ BtlController_EmitTwoReturnValues(BUFFER_B, B_ACTION_THROW_BALL, 0);
+ PlayerBufferExecCompleted();
+ }
+ #endif
}
static void UnusedEndBounceEffect(void)
@@ -339,21 +356,15 @@ static void UnusedEndBounceEffect(void)
static void HandleInputChooseTarget(void)
{
s32 i;
- u8 identities[MAX_BATTLERS_COUNT];
- memcpy(identities, sTargetIdentities, ARRAY_COUNT(sTargetIdentities));
+ static const u8 identities[MAX_BATTLERS_COUNT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT};
+ u16 move = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler]);
+ u16 moveTarget = GetBattlerMoveTargetType(gActiveBattler, move);
DoBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX, 15, 1);
-
- // what a weird loop
- i = 0;
- if (gBattlersCount != 0)
+ for (i = 0; i < gBattlersCount; i++)
{
- do
- {
- if (i != gMultiUsePlayerCursor)
- EndBounceEffect(i, BOUNCE_HEALTHBOX);
- i++;
- } while (i < gBattlersCount);
+ if (i != gMultiUsePlayerCursor)
+ EndBounceEffect(i, BOUNCE_HEALTHBOX);
}
if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
@@ -364,15 +375,20 @@ static void HandleInputChooseTarget(void)
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
- BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
+ if (gBattleStruct->mega.playerSelect)
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
+ else
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
+ TryHideLastUsedBall();
+ HideTriggerSprites();
PlayerBufferExecCompleted();
}
else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59)
{
PlaySE(SE_SELECT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
@@ -381,98 +397,134 @@ static void HandleInputChooseTarget(void)
else if (JOY_NEW(DPAD_LEFT | DPAD_UP))
{
PlaySE(SE_SELECT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
- do
+ if (moveTarget == (MOVE_TARGET_USER | MOVE_TARGET_ALLY))
+ {
+ gMultiUsePlayerCursor ^= BIT_FLANK;
+ }
+ else
{
- u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor);
-
- for (i = 0; i < MAX_BATTLERS_COUNT; i++)
- {
- if (currSelIdentity == identities[i])
- break;
- }
do
{
- if (--i < 0)
-#ifdef UBFIX
- i = MAX_BATTLERS_COUNT - 1;
-#else
- i = MAX_BATTLERS_COUNT; // UB: array out of range
-#endif
- gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]);
- } while (gMultiUsePlayerCursor == gBattlersCount);
+ u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor);
- i = 0;
- switch (GetBattlerPosition(gMultiUsePlayerCursor))
- {
- case B_POSITION_PLAYER_LEFT:
- case B_POSITION_PLAYER_RIGHT:
- if (gActiveBattler != gMultiUsePlayerCursor)
- i++;
- else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
- i++;
- break;
- case B_POSITION_OPPONENT_LEFT:
- case B_POSITION_OPPONENT_RIGHT:
- i++;
- break;
- }
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (currSelIdentity == identities[i])
+ break;
+ }
+ do
+ {
+ if (--i < 0)
+ i = MAX_BATTLERS_COUNT - 1;
+ gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]);
+ } while (gMultiUsePlayerCursor == gBattlersCount);
- if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
i = 0;
- } while (i == 0);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
+ switch (GetBattlerPosition(gMultiUsePlayerCursor))
+ {
+ case B_POSITION_PLAYER_LEFT:
+ case B_POSITION_PLAYER_RIGHT:
+ if (gActiveBattler != gMultiUsePlayerCursor)
+ i++;
+ else if (moveTarget & MOVE_TARGET_USER_OR_SELECTED)
+ i++;
+ break;
+ case B_POSITION_OPPONENT_LEFT:
+ case B_POSITION_OPPONENT_RIGHT:
+ i++;
+ break;
+ }
+
+ if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor]
+ || !CanTargetBattler(gActiveBattler, gMultiUsePlayerCursor, move))
+ i = 0;
+ } while (i == 0);
+ }
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget;
}
else if (JOY_NEW(DPAD_RIGHT | DPAD_DOWN))
{
PlaySE(SE_SELECT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
- do
+ if (moveTarget == (MOVE_TARGET_USER | MOVE_TARGET_ALLY))
+ {
+ gMultiUsePlayerCursor ^= BIT_FLANK;
+ }
+ else
{
- u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor);
-
- for (i = 0; i < MAX_BATTLERS_COUNT; i++)
- {
- if (currSelIdentity == identities[i])
- break;
- }
do
{
- if (++i > 3)
- i = 0;
- gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]);
- } while (gMultiUsePlayerCursor == gBattlersCount);
+ u8 currSelIdentity = GetBattlerPosition(gMultiUsePlayerCursor);
- i = 0;
- switch (GetBattlerPosition(gMultiUsePlayerCursor))
- {
- case B_POSITION_PLAYER_LEFT:
- case B_POSITION_PLAYER_RIGHT:
- if (gActiveBattler != gMultiUsePlayerCursor)
- i++;
- else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
- i++;
- break;
- case B_POSITION_OPPONENT_LEFT:
- case B_POSITION_OPPONENT_RIGHT:
- i++;
- break;
- }
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (currSelIdentity == identities[i])
+ break;
+ }
+ do
+ {
+ if (++i > 3)
+ i = 0;
+ gMultiUsePlayerCursor = GetBattlerAtPosition(identities[i]);
+ } while (gMultiUsePlayerCursor == gBattlersCount);
- if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor])
i = 0;
- } while (i == 0);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
+ switch (GetBattlerPosition(gMultiUsePlayerCursor))
+ {
+ case B_POSITION_PLAYER_LEFT:
+ case B_POSITION_PLAYER_RIGHT:
+ if (gActiveBattler != gMultiUsePlayerCursor)
+ i++;
+ else if (moveTarget & MOVE_TARGET_USER_OR_SELECTED)
+ i++;
+ break;
+ case B_POSITION_OPPONENT_LEFT:
+ case B_POSITION_OPPONENT_RIGHT:
+ i++;
+ break;
+ }
+
+ if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor]
+ || !CanTargetBattler(gActiveBattler, gMultiUsePlayerCursor, move))
+ i = 0;
+ } while (i == 0);
+ }
+
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget;
}
}
-static void HandleInputChooseMove(void)
+static void HideAllTargets(void)
{
- bool32 canSelectTarget = FALSE;
- struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ s32 i;
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (IsBattlerAlive(i) && gBattleSpritesDataPtr->healthBoxesData[i].healthboxIsBouncing)
+ {
+ gSprites[gBattlerSpriteIds[i]].callback = SpriteCB_HideAsMoveTarget;
+ EndBounceEffect(i, BOUNCE_HEALTHBOX);
+ }
+ }
+}
+static void HideShownTargets(void)
+{
+ s32 i;
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (IsBattlerAlive(i) && gBattleSpritesDataPtr->healthBoxesData[i].healthboxIsBouncing && i != gActiveBattler)
+ {
+ gSprites[gBattlerSpriteIds[i]].callback = SpriteCB_HideAsMoveTarget;
+ EndBounceEffect(i, BOUNCE_HEALTHBOX);
+ }
+ }
+}
+
+static void HandleInputShowEntireFieldTargets(void)
+{
if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
gPlayerDpadHoldFrames++;
else
@@ -480,54 +532,161 @@ static void HandleInputChooseMove(void)
if (JOY_NEW(A_BUTTON))
{
- u8 moveTarget;
+ PlaySE(SE_SELECT);
+ HideAllTargets();
+ if (gBattleStruct->mega.playerSelect)
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
+ else
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
+ HideMegaTriggerSprite();
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59)
+ {
+ PlaySE(SE_SELECT);
+ HideAllTargets();
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
+ }
+}
+static void HandleInputShowTargets(void)
+{
+ if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
+ gPlayerDpadHoldFrames++;
+ else
+ gPlayerDpadHoldFrames = 0;
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ HideShownTargets();
+ if (gBattleStruct->mega.playerSelect)
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
+ else
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
+ HideTriggerSprites();
+ TryHideLastUsedBall();
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59)
+ {
+ PlaySE(SE_SELECT);
+ HideShownTargets();
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
+ DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
+ }
+}
+
+static void TryShowAsTarget(u32 battlerId)
+{
+ if (IsBattlerAlive(battlerId))
+ {
+ DoBounceEffect(battlerId, BOUNCE_HEALTHBOX, 15, 1);
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCB_ShowAsMoveTarget;
+ }
+}
+
+static void HandleInputChooseMove(void)
+{
+ u16 moveTarget;
+ u32 canSelectTarget = 0;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
+
+ if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
+ gPlayerDpadHoldFrames++;
+ else
+ gPlayerDpadHoldFrames = 0;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
PlaySE(SE_SELECT);
if (moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] == MOVE_CURSE)
{
- if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
+ if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST && moveInfo->monType3 != TYPE_GHOST)
moveTarget = MOVE_TARGET_USER;
else
moveTarget = MOVE_TARGET_SELECTED;
}
else
{
- moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].target;
+ moveTarget = GetBattlerMoveTargetType(gActiveBattler, moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]);
}
-
+
+ if (gBattleStruct->zmove.viewing)
+ {
+ u16 chosenMove = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]];
+
+ QueueZMove(gActiveBattler, chosenMove);
+ gBattleStruct->zmove.viewing = FALSE;
+ if (gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].split != SPLIT_STATUS)
+ moveTarget = MOVE_TARGET_SELECTED; //damaging z moves always have selected target
+ }
+
if (moveTarget & MOVE_TARGET_USER)
gMultiUsePlayerCursor = gActiveBattler;
else
gMultiUsePlayerCursor = GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) & BIT_SIDE) ^ BIT_SIDE);
- if (!gBattleBufferA[gActiveBattler][1]) // not a double battle
+ if (!gBattleResources->bufferA[gActiveBattler][1]) // not a double battle
{
- if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleBufferA[gActiveBattler][2])
- canSelectTarget++;
+ if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleResources->bufferA[gActiveBattler][2])
+ canSelectTarget = 1;
}
else // double battle
{
- if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER)))
- canSelectTarget++; // either selected or user
+ if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER | MOVE_TARGET_ALLY)))
+ canSelectTarget = 1; // either selected or user
+ if (moveTarget == (MOVE_TARGET_USER | MOVE_TARGET_ALLY) && IsBattlerAlive(BATTLE_PARTNER(gActiveBattler)))
+ canSelectTarget = 1;
if (moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] == 0)
{
- canSelectTarget = FALSE;
+ canSelectTarget = 0;
}
else if (!(moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
{
gMultiUsePlayerCursor = GetDefaultMoveTarget(gActiveBattler);
- canSelectTarget = FALSE;
+ canSelectTarget = 0;
+ }
+
+ // Show all available targets for multi-target moves
+ if (B_SHOW_TARGETS)
+ {
+ if ((moveTarget & MOVE_TARGET_ALL_BATTLERS) == MOVE_TARGET_ALL_BATTLERS)
+ {
+ u32 i = 0;
+ for (i = 0; i < gBattlersCount; i++)
+ TryShowAsTarget(i);
+
+ canSelectTarget = 3;
+ }
+ else if (moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))
+ {
+ TryShowAsTarget(gMultiUsePlayerCursor);
+ TryShowAsTarget(BATTLE_PARTNER(gMultiUsePlayerCursor));
+ if (moveTarget & MOVE_TARGET_FOES_AND_ALLY)
+ TryShowAsTarget(BATTLE_PARTNER(gActiveBattler));
+ canSelectTarget = 2;
+ }
}
}
-
- if (!canSelectTarget)
+
+ switch (canSelectTarget)
{
- BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
+ case 0:
+ default:
+ if (gBattleStruct->mega.playerSelect)
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
+ else
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
+ HideTriggerSprites();
+ TryHideLastUsedBall();
PlayerBufferExecCompleted();
- }
- else
- {
+ break;
+ case 1:
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
@@ -537,16 +696,33 @@ static void HandleInputChooseMove(void)
else
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget;
+ gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget;
+ break;
+ case 2:
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputShowTargets;
+ break;
+ case 3: // Entire field
+ gBattlerControllerFuncs[gActiveBattler] = HandleInputShowEntireFieldTargets;
+ break;
}
}
else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59)
{
PlaySE(SE_SELECT);
- BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0xFFFF);
- PlayerBufferExecCompleted();
+ if (gBattleStruct->zmove.viewing)
+ {
+ ReloadMoveNames();
+ }
+ else
+ {
+ gBattleStruct->mega.playerSelect = FALSE;
+ gBattleStruct->zmove.viable = FALSE;
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, 0xFFFF);
+ HideTriggerSprites();
+ PlayerBufferExecCompleted();
+ }
}
- else if (JOY_NEW(DPAD_LEFT))
+ else if (JOY_NEW(DPAD_LEFT) && !gBattleStruct->zmove.viewing)
{
if (gMoveSelectionCursor[gActiveBattler] & 1)
{
@@ -556,9 +732,10 @@ static void HandleInputChooseMove(void)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
MoveSelectionDisplayPpNumber();
MoveSelectionDisplayMoveType();
+ TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]);
}
}
- else if (JOY_NEW(DPAD_RIGHT))
+ else if (JOY_NEW(DPAD_RIGHT) && !gBattleStruct->zmove.viewing)
{
if (!(gMoveSelectionCursor[gActiveBattler] & 1)
&& (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose)
@@ -569,9 +746,10 @@ static void HandleInputChooseMove(void)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
MoveSelectionDisplayPpNumber();
MoveSelectionDisplayMoveType();
+ TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]);
}
}
- else if (JOY_NEW(DPAD_UP))
+ else if (JOY_NEW(DPAD_UP) && !gBattleStruct->zmove.viewing)
{
if (gMoveSelectionCursor[gActiveBattler] & 2)
{
@@ -581,9 +759,10 @@ static void HandleInputChooseMove(void)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
MoveSelectionDisplayPpNumber();
MoveSelectionDisplayMoveType();
+ TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]);
}
}
- else if (JOY_NEW(DPAD_DOWN))
+ else if (JOY_NEW(DPAD_DOWN) && !gBattleStruct->zmove.viewing)
{
if (!(gMoveSelectionCursor[gActiveBattler] & 2)
&& (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose)
@@ -594,9 +773,10 @@ static void HandleInputChooseMove(void)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
MoveSelectionDisplayPpNumber();
MoveSelectionDisplayMoveType();
+ TryChangeZIndicator(gActiveBattler, gMoveSelectionCursor[gActiveBattler]);
}
}
- else if (JOY_NEW(SELECT_BUTTON))
+ else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing)
{
if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
{
@@ -612,6 +792,36 @@ static void HandleInputChooseMove(void)
gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitching;
}
}
+ else if (JOY_NEW(START_BUTTON))
+ {
+ if (CanMegaEvolve(gActiveBattler))
+ {
+ gBattleStruct->mega.playerSelect ^= 1;
+ ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, gBattleStruct->mega.playerSelect);
+ PlaySE(SE_SELECT);
+ }
+ else if (gBattleStruct->zmove.viable)
+ {
+ // show z move name / info
+ //TODO: brighten z move symbol
+ PlaySE(SE_SELECT);
+ if (!gBattleStruct->zmove.viewing)
+ MoveSelectionDisplayZMove(gBattleStruct->zmove.chosenZMove);
+ else
+ ReloadMoveNames();
+ }
+ }
+}
+
+static void ReloadMoveNames(void)
+{
+ gBattleStruct->mega.playerSelect = FALSE;
+ gBattleStruct->zmove.viewing = FALSE;
+ MoveSelectionDestroyCursorAt(0);
+ MoveSelectionDisplayMoveNames();
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0);
+ MoveSelectionDisplayPpNumber();
+ MoveSelectionDisplayMoveType();
}
static u32 HandleMoveInputUnused(void)
@@ -676,7 +886,7 @@ static void HandleMoveSwitching(void)
if (gMoveSelectionCursor[gActiveBattler] != gMultiUsePlayerCursor)
{
- struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
s32 i;
// swap moves and pp
@@ -937,20 +1147,25 @@ static void Intro_DelayAndEnd(void)
}
}
+static bool32 TwoIntroMons(u32 battlerId) // Double battle with both player pokemon active.
+{
+ return (IsDoubleBattle() && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[battlerId ^ BIT_FLANK]]));
+}
+
static void Intro_WaitForShinyAnimAndHealthbox(void)
{
bool8 healthboxAnimDone = FALSE;
// Check if healthbox has finished sliding in
- if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy)
healthboxAnimDone = TRUE;
}
else
{
- if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
- && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]].callback == SpriteCallbackDummy)
+ if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
healthboxAnimDone = TRUE;
}
@@ -968,7 +1183,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(void)
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- if (IsDoubleBattle())
+ if (TwoIntroMons(gActiveBattler))
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], gActiveBattler ^ BIT_FLANK);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3;
@@ -997,7 +1212,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
{
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].healthboxSlideInStarted)
{
- if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL);
StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK);
@@ -1028,15 +1243,7 @@ static void Intro_TryShinyAnimShowHealthbox(void)
}
// Wait for battler anims
- if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
- {
- if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
- && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
- {
- battlerAnimsDone = TRUE;
- }
- }
- else
+ if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
&& gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy
@@ -1046,11 +1253,19 @@ static void Intro_TryShinyAnimShowHealthbox(void)
battlerAnimsDone = TRUE;
}
}
+ else
+ {
+ if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy
+ && gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
+ {
+ battlerAnimsDone = TRUE;
+ }
+ }
// Clean up
if (bgmRestored && battlerAnimsDone)
{
- if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]);
DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]);
@@ -1146,16 +1361,22 @@ static void CompleteOnInactiveTextPrinter(void)
PlayerBufferExecCompleted();
}
-#define tExpTask_monId data[0]
-#define tExpTask_gainedExp data[1]
-#define tExpTask_battler data[2]
-#define tExpTask_frames data[10]
+#define tExpTask_monId data[0]
+#define tExpTask_battler data[2]
+#define tExpTask_gainedExp_1 data[3]
+#define tExpTask_gainedExp_2 data[4] // Stored as two half-words containing a word.
+#define tExpTask_frames data[10]
+
+static s32 GetTaskExpValue(u8 taskId)
+{
+ return (u16)(gTasks[taskId].tExpTask_gainedExp_1) | (gTasks[taskId].tExpTask_gainedExp_2 << 16);
+}
static void Task_GiveExpToMon(u8 taskId)
{
u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
u8 battlerId = gTasks[taskId].tExpTask_battler;
- s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ s32 gainedExp = GetTaskExpValue(taskId);
if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // Give exp without moving the expbar.
{
@@ -1200,7 +1421,7 @@ static void Task_GiveExpToMon(u8 taskId)
static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
- s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ s32 gainedExp = GetTaskExpValue(taskId);
u8 battlerId = gTasks[taskId].tExpTask_battler;
struct Pokemon *mon = &gPlayerParty[monIndex];
u8 level = GetMonData(mon, MON_DATA_LEVEL);
@@ -1225,9 +1446,9 @@ static void Task_GiveExpWithExpBar(u8 taskId)
else
{
u8 monId = gTasks[taskId].tExpTask_monId;
- s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
+ s32 gainedExp = GetTaskExpValue(taskId);
u8 battlerId = gTasks[taskId].tExpTask_battler;
- s16 newExpPoints;
+ s32 newExpPoints;
newExpPoints = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
@@ -1365,7 +1586,7 @@ static void WaitForMonSelection(void)
else
BtlController_EmitChosenMonReturnValue(BUFFER_B, PARTY_SIZE, NULL);
- if ((gBattleBufferA[gActiveBattler][1] & 0xF) == 1)
+ if ((gBattleResources->bufferA[gActiveBattler][1] & 0xF) == 1)
PrintLinkStandbyMsg();
PlayerBufferExecCompleted();
@@ -1435,7 +1656,7 @@ static void PlayerHandleYesNoInput(void)
}
if (JOY_NEW(A_BUTTON))
{
- HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
PlaySE(SE_SELECT);
if (gMultiUsePlayerCursor != 0)
@@ -1447,7 +1668,7 @@ static void PlayerHandleYesNoInput(void)
}
if (JOY_NEW(B_BUTTON))
{
- HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
PlaySE(SE_SELECT);
PlayerBufferExecCompleted();
}
@@ -1456,7 +1677,7 @@ static void PlayerHandleYesNoInput(void)
static void MoveSelectionDisplayMoveNames(void)
{
s32 i;
- struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
gNumberOfMovesToChoose = 0;
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -1481,11 +1702,11 @@ static void MoveSelectionDisplayPpNumber(void)
u8 *txtPtr;
struct ChooseMoveStruct *moveInfo;
- if (gBattleBufferA[gActiveBattler][2] == TRUE) // check if we didn't want to display pp number
+ if (gBattleResources->bufferA[gActiveBattler][2] == TRUE) // check if we didn't want to display pp number
return;
SetPpNumbersPaletteInMoveSelection();
- moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
*(txtPtr)++ = CHAR_SLASH;
ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
@@ -1496,18 +1717,18 @@ static void MoveSelectionDisplayPpNumber(void)
static void MoveSelectionDisplayMoveType(void)
{
u8 *txtPtr;
- struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType);
*(txtPtr)++ = EXT_CTRL_CODE_BEGIN;
*(txtPtr)++ = EXT_CTRL_CODE_FONT;
- *(txtPtr)++ = 1;
+ *(txtPtr)++ = FONT_NORMAL;
StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE);
}
-static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum)
+void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum)
{
u16 src[2];
src[0] = baseTileNum + 1;
@@ -1517,7 +1738,7 @@ static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum)
CopyBgTilemapBufferToVram(0);
}
-static void MoveSelectionDestroyCursorAt(u8 cursorPosition)
+void MoveSelectionDestroyCursorAt(u8 cursorPosition)
{
u16 src[2];
src[0] = 0x1016;
@@ -1586,13 +1807,13 @@ static void PlayerHandleGetMonData(void)
u8 monToCheck;
s32 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
size += CopyPlayerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -1614,7 +1835,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst)
u32 data32;
s32 size = 0;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
@@ -1671,7 +1892,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst)
moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
- src = (u8*)(&moveData);
+ src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
@@ -1679,7 +1900,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
dst[0] = data16;
dst[1] = data16 >> 8;
size = 2;
@@ -1694,7 +1915,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst)
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
size = 1;
break;
case REQUEST_OTID_BATTLE:
@@ -1912,14 +2133,14 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst)
void PlayerHandleGetRawMonData(void)
{
struct BattlePokemon battleMon;
- u8 *src = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
- u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBattler][1];
+ u8 *src = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&battleMon + gBattleResources->bufferA[gActiveBattler][1];
u8 i;
- for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
+ for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++)
dst[i] = src[i];
- BtlController_EmitDataTransfer(BUFFER_B, gBattleBufferA[gActiveBattler][2], dst);
+ BtlController_EmitDataTransfer(BUFFER_B, gBattleResources->bufferA[gActiveBattler][2], dst);
PlayerBufferExecCompleted();
}
@@ -1928,13 +2149,13 @@ static void PlayerHandleSetMonData(void)
u8 monToCheck;
u8 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
SetPlayerMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -1947,11 +2168,11 @@ static void PlayerHandleSetMonData(void)
static void SetPlayerMonData(u8 monId)
{
- struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
- struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3];
s32 i;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
{
@@ -1992,10 +2213,10 @@ static void SetPlayerMonData(u8 monId)
}
break;
case REQUEST_SPECIES_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HELDITEM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -2009,154 +2230,154 @@ static void SetPlayerMonData(u8 monId)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PP_DATA_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]);
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_OTID_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_EXP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_FRIENDSHIP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKERUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LOCATION_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_GAME_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKEBALL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ALL_IVS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]);
break;
case REQUEST_HP_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PERSONALITY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CHECKSUM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_STATUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MAX_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SHEEN_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
}
@@ -2165,11 +2386,11 @@ static void SetPlayerMonData(u8 monId)
static void PlayerHandleSetRawMonData(void)
{
- u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1];
u8 i;
- for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
- dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++)
+ dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i];
PlayerBufferExecCompleted();
}
@@ -2183,12 +2404,12 @@ static void PlayerHandleLoadMonSprite(void)
static void PlayerHandleSwitchInAnim(void)
{
- ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
- gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1];
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
gActionSelectionCursor[gActiveBattler] = 0;
gMoveSelectionCursor[gActiveBattler] = 0;
- StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnimShowHealthbox;
}
@@ -2197,7 +2418,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
u16 species;
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
- gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
@@ -2225,7 +2446,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
static void PlayerHandleReturnMonToBall(void)
{
- if (!gBattleBufferA[gActiveBattler][1])
+ if (!gBattleResources->bufferA[gActiveBattler][1])
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -2300,7 +2521,7 @@ static void PlayerHandleDrawTrainerPic(void)
else // First mon, on the left.
xPos = 32;
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER && gPartnerTrainerId < TRAINER_CUSTOM_PARTNER)
{
xPos = 90;
yPos = (8 - gTrainerFrontPicCoords[trainerPicId].size) * 4 + 80;
@@ -2318,7 +2539,7 @@ static void PlayerHandleDrawTrainerPic(void)
}
// Use front pic table for any tag battles unless your partner is Steven.
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER && gPartnerTrainerId < TRAINER_CUSTOM_PARTNER)
{
trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
@@ -2440,23 +2661,31 @@ static void PlayerHandleSuccessBallThrowAnim(void)
{
gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS;
gDoingBattleAnim = TRUE;
- InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW);
+ if (IsCriticalCapture())
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_CRITICAL_CAPTURE_THROW);
+ else
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_BALL_THROW);
+
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
static void PlayerHandleBallThrowAnim(void)
{
- u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1];
+ u8 ballThrowCaseId = gBattleResources->bufferA[gActiveBattler][1];
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
gDoingBattleAnim = TRUE;
- InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW);
+ if (IsCriticalCapture())
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_CRITICAL_CAPTURE_THROW);
+ else
+ InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gBattlerTarget, B_ANIM_BALL_THROW);
+
gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone;
}
static void PlayerHandlePause(void)
{
- u8 timer = gBattleBufferA[gActiveBattler][1];
+ u8 timer = gBattleResources->bufferA[gActiveBattler][1];
while (timer != 0)
timer--;
@@ -2468,32 +2697,25 @@ static void PlayerHandleMoveAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
- gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
- gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
- gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
- gAnimFriendship = gBattleBufferA[gActiveBattler][10];
- gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
- gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
- if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // Always returns FALSE.
- {
- PlayerBufferExecCompleted();
- }
- else
- {
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation;
- BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
- }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation;
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
static void PlayerDoMoveAnimation(void)
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
- u8 multihit = gBattleBufferA[gActiveBattler][11];
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
+ u8 multihit = gBattleResources->bufferA[gActiveBattler][11];
switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
{
@@ -2531,7 +2753,7 @@ static void PlayerDoMoveAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
CopyAllBattleSpritesInvisibilities();
- TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
PlayerBufferExecCompleted();
}
@@ -2545,7 +2767,7 @@ static void PlayerHandlePrintString(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
+ stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
@@ -2582,6 +2804,7 @@ static void PlayerHandleChooseAction(void)
for (i = 0; i < 4; i++)
ActionSelectionDestroyCursorAt(i);
+ TryRestoreLastUsedBall();
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT);
@@ -2591,7 +2814,7 @@ static void PlayerHandleYesNoBox(void)
{
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
- HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
+ HandleBattleWindow(YESNOBOX_X_Y, 0);
BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO);
gMultiUsePlayerCursor = 1;
BattleCreateYesNoCursorAt(1);
@@ -2634,7 +2857,20 @@ static void PlayerHandleChooseMove(void)
}
else
{
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
+
InitMoveSelectionsVarsAndStrings();
+ gBattleStruct->mega.playerSelect = FALSE;
+ if (!IsMegaTriggerSpriteActive())
+ gBattleStruct->mega.triggerSpriteId = 0xFF;
+ if (CanMegaEvolve(gActiveBattler))
+ CreateMegaTriggerSprite(gActiveBattler, 0);
+ if (!IsZMoveTriggerSpriteActive())
+ gBattleStruct->zmove.triggerSpriteId = 0xFF;
+
+ GetUsableZMoves(gActiveBattler, moveInfo->moves);
+ gBattleStruct->zmove.viable = IsZMoveUsable(gActiveBattler, gMoveSelectionCursor[gActiveBattler]);
+ CreateZMoveTriggerSprite(gActiveBattler, gBattleStruct->zmove.viable);
gBattlerControllerFuncs[gActiveBattler] = HandleChooseMoveAfterDma3;
}
}
@@ -2657,18 +2893,18 @@ static void PlayerHandleChooseItem(void)
gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
gBattlerInMenuId = gActiveBattler;
- for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
- gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][1 + i];
+ for (i = 0; i < ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
+ gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[gActiveBattler][1 + i];
}
static void PlayerHandleChoosePokemon(void)
{
s32 i;
- for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
- gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i];
+ for (i = 0; i < ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
+ gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[gActiveBattler][4 + i];
- if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH)
+ if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH)
{
BtlController_EmitChosenMonReturnValue(BUFFER_B, gBattlerPartyIndexes[gActiveBattler] + 1, gBattlePartyCurrentOrder);
PlayerBufferExecCompleted();
@@ -2676,11 +2912,11 @@ static void PlayerHandleChoosePokemon(void)
else
{
gBattleControllerData[gActiveBattler] = CreateTask(TaskDummy, 0xFF);
- gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF;
- *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4;
- *(&gBattleStruct->prevSelectedPartySlot) = gBattleBufferA[gActiveBattler][2];
- *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
- BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
+ gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleResources->bufferA[gActiveBattler][1] & 0xF;
+ *(&gBattleStruct->battlerPreventingSwitchout) = gBattleResources->bufferA[gActiveBattler][1] >> 4;
+ *(&gBattleStruct->prevSelectedPartySlot) = gBattleResources->bufferA[gActiveBattler][2];
+ *(&gBattleStruct->abilityPreventingSwitchout) = (gBattleResources->bufferA[gActiveBattler][3] & 0xFF) | (gBattleResources->bufferA[gActiveBattler][7] << 8);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
gBattlerInMenuId = gActiveBattler;
}
@@ -2698,7 +2934,7 @@ static void PlayerHandleHealthBarUpdate(void)
s16 hpVal;
LoadBattleBarGfx(0);
- hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
// gPlayerPartyLostHP used by Battle Dome, but never read
if (hpVal > 0)
@@ -2724,7 +2960,8 @@ static void PlayerHandleHealthBarUpdate(void)
static void PlayerHandleExpUpdate(void)
{
- u8 monId = gBattleBufferA[gActiveBattler][1];
+ u8 monId = gBattleResources->bufferA[gActiveBattler][1];
+ s32 taskId, expPointsToGive;
if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL)
{
@@ -2732,23 +2969,22 @@ static void PlayerHandleExpUpdate(void)
}
else
{
- s16 expPointsToGive;
- u8 taskId;
-
LoadBattleBarGfx(1);
GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // Unused return value.
- expPointsToGive = T1_READ_16(&gBattleBufferA[gActiveBattler][2]);
+ expPointsToGive = T1_READ_32(&gBattleResources->bufferA[gActiveBattler][2]);
taskId = CreateTask(Task_GiveExpToMon, 10);
gTasks[taskId].tExpTask_monId = monId;
- gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
+ gTasks[taskId].tExpTask_gainedExp_1 = expPointsToGive;
+ gTasks[taskId].tExpTask_gainedExp_2 = expPointsToGive >> 16;
gTasks[taskId].tExpTask_battler = gActiveBattler;
gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy;
}
}
#undef tExpTask_monId
-#undef tExpTask_gainedExp
#undef tExpTask_battler
+#undef tExpTask_gainedExp_1
+#undef tExpTask_gainedExp_2
#undef tExpTask_frames
static void PlayerHandleStatusIconUpdate(void)
@@ -2768,15 +3004,15 @@ static void PlayerHandleStatusAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
- gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
+ InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1],
+ gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24));
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
static void PlayerHandleStatusXor(void)
{
- u8 val = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBattler][1];
+ u8 val = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS) ^ gBattleResources->bufferA[gActiveBattler][1];
SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_STATUS, &val);
PlayerBufferExecCompleted();
@@ -2789,14 +3025,14 @@ static void PlayerHandleDataTransfer(void)
static void PlayerHandleDMA3Transfer(void)
{
- u32 dstArg = gBattleBufferA[gActiveBattler][1]
- | (gBattleBufferA[gActiveBattler][2] << 8)
- | (gBattleBufferA[gActiveBattler][3] << 16)
- | (gBattleBufferA[gActiveBattler][4] << 24);
- u16 sizeArg = gBattleBufferA[gActiveBattler][5] | (gBattleBufferA[gActiveBattler][6] << 8);
+ u32 dstArg = gBattleResources->bufferA[gActiveBattler][1]
+ | (gBattleResources->bufferA[gActiveBattler][2] << 8)
+ | (gBattleResources->bufferA[gActiveBattler][3] << 16)
+ | (gBattleResources->bufferA[gActiveBattler][4] << 24);
+ u16 sizeArg = gBattleResources->bufferA[gActiveBattler][5] | (gBattleResources->bufferA[gActiveBattler][6] << 8);
- const u8 *src = &gBattleBufferA[gActiveBattler][7];
- u8 *dst = (u8*)(dstArg);
+ const u8 *src = &gBattleResources->bufferA[gActiveBattler][7];
+ u8 *dst = (u8 *)(dstArg);
u32 size = sizeArg;
while (1)
@@ -2816,7 +3052,7 @@ static void PlayerHandleDMA3Transfer(void)
static void PlayerHandlePlayBGM(void)
{
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
PlayerBufferExecCompleted();
}
@@ -2857,7 +3093,7 @@ static void PlayerHandleClearUnkVar(void)
static void PlayerHandleSetUnkVar(void)
{
- gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
+ gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1];
PlayerBufferExecCompleted();
}
@@ -2902,20 +3138,20 @@ static void PlayerHandlePlaySE(void)
else
pan = SOUND_PAN_TARGET;
- PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan);
PlayerBufferExecCompleted();
}
static void PlayerHandlePlayFanfareOrBGM(void)
{
- if (gBattleBufferA[gActiveBattler][3])
+ if (gBattleResources->bufferA[gActiveBattler][3])
{
BattleStopLowHpSound();
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
else
{
- PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
PlayerBufferExecCompleted();
@@ -2931,7 +3167,7 @@ static void PlayerHandleFaintingCry(void)
static void PlayerHandleIntroSlide(void)
{
- HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]);
gIntroSlideFlags |= 1;
PlayerBufferExecCompleted();
}
@@ -3000,21 +3236,21 @@ static void Task_StartSendOutAnim(u8 taskId)
u8 savedActiveBattler = gActiveBattler;
gActiveBattler = gTasks[taskId].tBattlerId;
- if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
- StartSendOutAnim(gActiveBattler, FALSE);
- }
- else
- {
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
}
+ else
+ {
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ StartSendOutAnim(gActiveBattler, FALSE);
+ }
gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox;
gActiveBattler = savedActiveBattler;
DestroyTask(taskId);
@@ -3026,18 +3262,18 @@ static void Task_StartSendOutAnim(u8 taskId)
static void PlayerHandleDrawPartyStatusSummary(void)
{
- if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
PlayerBufferExecCompleted();
}
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
- gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
// If intro, skip the delay after drawing
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -3071,7 +3307,7 @@ static void PlayerHandleSpriteInvisibility(void)
{
if (IsBattlerSpritePresent(gActiveBattler))
{
- gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1];
CopyBattleSpriteInvisibility(gActiveBattler);
}
PlayerBufferExecCompleted();
@@ -3081,8 +3317,8 @@ static void PlayerHandleBattleAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u8 animationId = gBattleBufferA[gActiveBattler][1];
- u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u8 animationId = gBattleResources->bufferA[gActiveBattler][1];
+ u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
PlayerBufferExecCompleted();
@@ -3095,8 +3331,8 @@ static void PlayerHandleBattleAnimation(void)
static void PlayerHandleLinkStandbyMsg(void)
{
- RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][2]);
- switch (gBattleBufferA[gActiveBattler][1])
+ RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][2]);
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case LINK_STANDBY_MSG_STOP_BOUNCE:
PrintLinkStandbyMsg();
@@ -3114,7 +3350,7 @@ static void PlayerHandleLinkStandbyMsg(void)
static void PlayerHandleResetActionMoveSelection(void)
{
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case RESET_ACTION_MOVE_SELECTION:
gActionSelectionCursor[gActiveBattler] = 0;
@@ -3132,15 +3368,30 @@ static void PlayerHandleResetActionMoveSelection(void)
static void PlayerHandleEndLinkBattle(void)
{
- RecordedBattle_RecordAllBattlerData(&gBattleBufferA[gActiveBattler][4]);
- gBattleOutcome = gBattleBufferA[gActiveBattler][1];
- gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2];
+ RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[gActiveBattler][4]);
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1];
+ gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[gActiveBattler][2];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
PlayerBufferExecCompleted();
gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
}
+static void WaitForDebug(void)
+{
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
+ {
+ PlayerBufferExecCompleted();
+ }
+}
+
+static void PlayerHandleBattleDebug(void)
+{
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ SetMainCallback2(CB2_BattleDebugMenu);
+ gBattlerControllerFuncs[gActiveBattler] = WaitForDebug;
+}
+
static void PlayerCmdEnd(void)
{
}
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index 648d966cf9..a868d09c03 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -1,12 +1,14 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
+#include "battle_ai_util.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_message.h"
#include "battle_interface.h"
#include "battle_setup.h"
#include "battle_tower.h"
+#include "battle_z_move.h"
#include "bg.h"
#include "data.h"
#include "item_use.h"
@@ -83,6 +85,7 @@ static void PlayerPartnerHandleBattleAnimation(void);
static void PlayerPartnerHandleLinkStandbyMsg(void);
static void PlayerPartnerHandleResetActionMoveSelection(void);
static void PlayerPartnerHandleEndLinkBattle(void);
+static void PlayerPartnerHandleBattleDebug(void);
static void PlayerPartnerCmdEnd(void);
static void PlayerPartnerBufferRunCommand(void);
@@ -159,6 +162,7 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
[CONTROLLER_LINKSTANDBYMSG] = PlayerPartnerHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = PlayerPartnerHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = PlayerPartnerHandleEndLinkBattle,
+ [CONTROLLER_DEBUGMENU] = PlayerPartnerHandleBattleDebug,
[CONTROLLER_TERMINATOR_NOP] = PlayerPartnerCmdEnd
};
@@ -184,8 +188,8 @@ static void PlayerPartnerBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands))
- sPlayerPartnerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands))
+ sPlayerPartnerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]]();
else
PlayerPartnerBufferExecCompleted();
}
@@ -585,7 +589,7 @@ static void PlayerPartnerBufferExecCompleted(void)
u8 playerId = GetMultiplayerId();
PrepareBufferDataTransferLink(2, 4, &playerId);
- gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
}
else
{
@@ -612,13 +616,13 @@ static void PlayerPartnerHandleGetMonData(void)
u8 monToCheck;
s32 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
size += CopyPlayerPartnerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -640,7 +644,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst)
u32 data32;
s32 size = 0;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
@@ -697,7 +701,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst)
moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
- src = (u8*)(&moveData);
+ src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
@@ -705,7 +709,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
dst[0] = data16;
dst[1] = data16 >> 8;
size = 2;
@@ -720,7 +724,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst)
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
size = 1;
break;
case REQUEST_OTID_BATTLE:
@@ -945,13 +949,13 @@ static void PlayerPartnerHandleSetMonData(void)
u8 monToCheck;
u8 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
SetPlayerPartnerMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -964,11 +968,11 @@ static void PlayerPartnerHandleSetMonData(void)
static void SetPlayerPartnerMonData(u8 monId)
{
- struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
- struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3];
s32 i;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
{
@@ -1009,10 +1013,10 @@ static void SetPlayerPartnerMonData(u8 monId)
}
break;
case REQUEST_SPECIES_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HELDITEM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -1026,154 +1030,154 @@ static void SetPlayerPartnerMonData(u8 monId)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PP_DATA_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]);
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_OTID_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_EXP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_FRIENDSHIP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKERUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LOCATION_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_GAME_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKEBALL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ALL_IVS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]);
break;
case REQUEST_HP_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PERSONALITY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CHECKSUM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_STATUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MAX_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SHEEN_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
}
@@ -1182,11 +1186,11 @@ static void SetPlayerPartnerMonData(u8 monId)
static void PlayerPartnerHandleSetRawMonData(void)
{
- u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1];
u8 i;
- for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
- dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++)
+ dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i];
PlayerPartnerBufferExecCompleted();
}
@@ -1212,10 +1216,10 @@ static void PlayerPartnerHandleLoadMonSprite(void)
static void PlayerPartnerHandleSwitchInAnim(void)
{
- ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
- gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1];
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim;
}
@@ -1224,7 +1228,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
u16 species;
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
- gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
@@ -1252,7 +1256,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
static void PlayerPartnerHandleReturnMonToBall(void)
{
- if (gBattleBufferA[gActiveBattler][1] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][1] == 0)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1303,6 +1307,12 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
xPos = 90;
yPos = (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80;
}
+ else if (gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER)
+ {
+ trainerPicId = gPartnerSpriteId;
+ xPos = 90;
+ yPos = (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80;
+ }
else
{
trainerPicId = GetFrontierTrainerFrontSpriteId(gPartnerTrainerId);
@@ -1311,7 +1321,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
}
// Use back pic only if the partner is Steven
- if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
+ if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER)
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
@@ -1411,31 +1421,24 @@ static void PlayerPartnerHandleMoveAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
- gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
- gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
- gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
- gAnimFriendship = gBattleBufferA[gActiveBattler][10];
- gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
- gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
- if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
- {
- PlayerPartnerBufferExecCompleted();
- }
- else
- {
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- gBattlerControllerFuncs[gActiveBattler] = PlayerPartnerDoMoveAnimation;
- }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = PlayerPartnerDoMoveAnimation;
}
}
static void PlayerPartnerDoMoveAnimation(void)
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
- u8 multihit = gBattleBufferA[gActiveBattler][11];
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
+ u8 multihit = gBattleResources->bufferA[gActiveBattler][11];
switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
{
@@ -1473,7 +1476,7 @@ static void PlayerPartnerDoMoveAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
CopyAllBattleSpritesInvisibilities();
- TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
PlayerPartnerBufferExecCompleted();
}
@@ -1487,7 +1490,7 @@ static void PlayerPartnerHandlePrintString(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
+ stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
@@ -1512,10 +1515,10 @@ static void PlayerPartnerHandleYesNoBox(void)
static void PlayerPartnerHandleChooseMove(void)
{
u8 chosenMoveId;
- struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
- BattleAI_SetupAIData(0xF);
- chosenMoveId = BattleAI_ChooseMoveOrAction();
+ chosenMoveId = gBattleStruct->aiMoveOrAction[gActiveBattler];
+ gBattlerTarget = gBattleStruct->aiChosenTarget[gActiveBattler];
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
gBattlerTarget = gActiveBattler;
@@ -1525,8 +1528,16 @@ static void PlayerPartnerHandleChooseMove(void)
if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
}
+
+ if (ShouldUseZMove(gActiveBattler, gBattlerTarget, moveInfo->moves[chosenMoveId]))
+ QueueZMove(gActiveBattler, moveInfo->moves[chosenMoveId]);
+
+ // If partner can mega evolve, do it.
+ if (CanMegaEvolve(gActiveBattler))
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8));
+ else
+ BtlController_EmitTwoReturnValues(BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8));
- BtlController_EmitTwoReturnValues(BUFFER_B, 10, chosenMoveId | (gBattlerTarget << 8));
PlayerPartnerBufferExecCompleted();
}
@@ -1570,7 +1581,7 @@ static void PlayerPartnerHandleHealthBarUpdate(void)
s16 hpVal;
LoadBattleBarGfx(0);
- hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP)
{
@@ -1591,7 +1602,7 @@ static void PlayerPartnerHandleHealthBarUpdate(void)
static void PlayerPartnerHandleExpUpdate(void)
{
- u8 monId = gBattleBufferA[gActiveBattler][1];
+ u8 monId = gBattleResources->bufferA[gActiveBattler][1];
if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL)
{
@@ -1604,7 +1615,7 @@ static void PlayerPartnerHandleExpUpdate(void)
LoadBattleBarGfx(1);
GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // unused return value
- expPointsToGive = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ expPointsToGive = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
taskId = CreateTask(Task_GiveExpToMon, 10);
gTasks[taskId].tExpTask_monId = monId;
gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
@@ -1635,8 +1646,8 @@ static void PlayerPartnerHandleStatusAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
- gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
+ InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1],
+ gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24));
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1694,7 +1705,7 @@ static void PlayerPartnerHandleClearUnkVar(void)
static void PlayerPartnerHandleSetUnkVar(void)
{
- gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
+ gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1];
PlayerPartnerBufferExecCompleted();
}
@@ -1739,20 +1750,20 @@ static void PlayerPartnerHandlePlaySE(void)
else
pan = SOUND_PAN_TARGET;
- PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan);
PlayerPartnerBufferExecCompleted();
}
static void PlayerPartnerHandlePlayFanfareOrBGM(void)
{
- if (gBattleBufferA[gActiveBattler][3])
+ if (gBattleResources->bufferA[gActiveBattler][3])
{
BattleStopLowHpSound();
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
else
{
- PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
PlayerPartnerBufferExecCompleted();
@@ -1768,7 +1779,7 @@ static void PlayerPartnerHandleFaintingCry(void)
static void PlayerPartnerHandleIntroSlide(void)
{
- HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]);
gIntroSlideFlags |= 1;
PlayerPartnerBufferExecCompleted();
}
@@ -1795,6 +1806,11 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void)
u8 spriteId = TRAINER_BACK_PIC_STEVEN;
LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32);
}
+ else if (gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER)
+ {
+ u8 spriteId = gPartnerSpriteId;
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32);
+ }
else
{
u8 spriteId = GetFrontierTrainerFrontSpriteId(gPartnerTrainerId);
@@ -1827,15 +1843,15 @@ static void Task_StartSendOutAnim(u8 taskId)
gActiveBattler = gTasks[taskId].data[0];
if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
}
else
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
@@ -1848,17 +1864,17 @@ static void Task_StartSendOutAnim(u8 taskId)
static void PlayerPartnerHandleDrawPartyStatusSummary(void)
{
- if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
PlayerPartnerBufferExecCompleted();
}
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
- gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -1890,7 +1906,7 @@ static void PlayerPartnerHandleSpriteInvisibility(void)
{
if (IsBattlerSpritePresent(gActiveBattler))
{
- gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1];
CopyBattleSpriteInvisibility(gActiveBattler);
}
PlayerPartnerBufferExecCompleted();
@@ -1900,8 +1916,8 @@ static void PlayerPartnerHandleBattleAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u8 animationId = gBattleBufferA[gActiveBattler][1];
- u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u8 animationId = gBattleResources->bufferA[gActiveBattler][1];
+ u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
PlayerPartnerBufferExecCompleted();
@@ -1922,13 +1938,18 @@ static void PlayerPartnerHandleResetActionMoveSelection(void)
static void PlayerPartnerHandleEndLinkBattle(void)
{
- gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
PlayerPartnerBufferExecCompleted();
gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
}
+static void PlayerPartnerHandleBattleDebug(void)
+{
+ PlayerPartnerBufferExecCompleted();
+}
+
static void PlayerPartnerCmdEnd(void)
{
}
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index fce9154003..3f5e1cf7f9 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_interface.h"
@@ -85,6 +85,7 @@ static void RecordedOpponentHandleBattleAnimation(void);
static void RecordedOpponentHandleLinkStandbyMsg(void);
static void RecordedOpponentHandleResetActionMoveSelection(void);
static void RecordedOpponentHandleEndLinkBattle(void);
+static void RecordedOpponentHandleBattleDebug(void);
static void RecordedOpponentCmdEnd(void);
static void RecordedOpponentBufferRunCommand(void);
@@ -157,6 +158,7 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void
[CONTROLLER_LINKSTANDBYMSG] = RecordedOpponentHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = RecordedOpponentHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = RecordedOpponentHandleEndLinkBattle,
+ [CONTROLLER_DEBUGMENU] = RecordedOpponentHandleBattleDebug,
[CONTROLLER_TERMINATOR_NOP] = RecordedOpponentCmdEnd
};
@@ -173,8 +175,8 @@ static void RecordedOpponentBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands))
- sRecordedOpponentBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands))
+ sRecordedOpponentBufferCommands[gBattleResources->bufferA[gActiveBattler][0]]();
else
RecordedOpponentBufferExecCompleted();
}
@@ -509,7 +511,7 @@ static void RecordedOpponentBufferExecCompleted(void)
u8 playerId = GetMultiplayerId();
PrepareBufferDataTransferLink(2, 4, &playerId);
- gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
}
else
{
@@ -524,13 +526,13 @@ static void RecordedOpponentHandleGetMonData(void)
u8 monToCheck;
s32 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
size += CopyRecordedOpponentMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -552,7 +554,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst)
u32 data32;
s32 size = 0;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES);
@@ -609,7 +611,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst)
moveData.pp[size] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES);
- src = (u8*)(&moveData);
+ src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
@@ -617,7 +619,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ data16 = GetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
dst[0] = data16;
dst[1] = data16 >> 8;
size = 2;
@@ -632,7 +634,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst)
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ dst[0] = GetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
size = 1;
break;
case REQUEST_OTID_BATTLE:
@@ -857,13 +859,13 @@ static void RecordedOpponentHandleSetMonData(void)
u8 monToCheck;
u8 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
SetRecordedOpponentMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -876,11 +878,11 @@ static void RecordedOpponentHandleSetMonData(void)
static void SetRecordedOpponentMonData(u8 monId)
{
- struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
- struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3];
s32 i;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
{
@@ -921,10 +923,10 @@ static void SetRecordedOpponentMonData(u8 monId)
}
break;
case REQUEST_SPECIES_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HELDITEM_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -938,165 +940,165 @@ static void SetRecordedOpponentMonData(u8 monId)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PP_DATA_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]);
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_OTID_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_EXP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_EV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_FRIENDSHIP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKERUS_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LOCATION_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LEVEL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_GAME_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKEBALL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ALL_IVS_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]);
break;
case REQUEST_HP_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_IV_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PERSONALITY_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CHECKSUM_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_STATUS_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_LEVEL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MAX_HP_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SHEEN_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_RIBBON_BATTLE:
- SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gEnemyParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
}
}
static void RecordedOpponentHandleSetRawMonData(void)
{
- u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1];
u8 i;
- for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
- dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++)
+ dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i];
RecordedOpponentBufferExecCompleted();
}
@@ -1125,8 +1127,8 @@ static void RecordedOpponentHandleLoadMonSprite(void)
static void RecordedOpponentHandleSwitchInAnim(void)
{
- gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
- StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1];
+ StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim;
}
@@ -1135,7 +1137,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
u16 species;
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
- gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
@@ -1163,7 +1165,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
static void RecordedOpponentHandleReturnMonToBall(void)
{
- if (gBattleBufferA[gActiveBattler][1] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][1] == 0)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1316,31 +1318,24 @@ static void RecordedOpponentHandleMoveAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
- gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
- gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
- gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
- gAnimFriendship = gBattleBufferA[gActiveBattler][10];
- gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
- gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
- if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
- {
- RecordedOpponentBufferExecCompleted();
- }
- else
- {
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- gBattlerControllerFuncs[gActiveBattler] = RecordedOpponentDoMoveAnimation;
- }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = RecordedOpponentDoMoveAnimation;
}
}
static void RecordedOpponentDoMoveAnimation(void)
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
- u8 multihit = gBattleBufferA[gActiveBattler][11];
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
+ u8 multihit = gBattleResources->bufferA[gActiveBattler][11];
switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
{
@@ -1378,7 +1373,7 @@ static void RecordedOpponentDoMoveAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
CopyAllBattleSpritesInvisibilities();
- TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
RecordedOpponentBufferExecCompleted();
}
@@ -1392,7 +1387,7 @@ static void RecordedOpponentHandlePrintString(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
+ stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
@@ -1452,7 +1447,7 @@ static void RecordedOpponentHandleHealthBarUpdate(void)
s16 hpVal;
LoadBattleBarGfx(0);
- hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP)
{
@@ -1493,8 +1488,8 @@ static void RecordedOpponentHandleStatusAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
- gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
+ InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1],
+ gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24));
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1552,7 +1547,7 @@ static void RecordedOpponentHandleClearUnkVar(void)
static void RecordedOpponentHandleSetUnkVar(void)
{
- gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
+ gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1];
RecordedOpponentBufferExecCompleted();
}
@@ -1597,20 +1592,20 @@ static void RecordedOpponentHandlePlaySE(void)
else
pan = SOUND_PAN_TARGET;
- PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan);
RecordedOpponentBufferExecCompleted();
}
static void RecordedOpponentHandlePlayFanfareOrBGM(void)
{
- if (gBattleBufferA[gActiveBattler][3])
+ if (gBattleResources->bufferA[gActiveBattler][3])
{
BattleStopLowHpSound();
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
else
{
- PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
RecordedOpponentBufferExecCompleted();
@@ -1626,7 +1621,7 @@ static void RecordedOpponentHandleFaintingCry(void)
static void RecordedOpponentHandleIntroSlide(void)
{
- HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]);
gIntroSlideFlags |= 1;
RecordedOpponentBufferExecCompleted();
}
@@ -1661,15 +1656,15 @@ static void Task_StartSendOutAnim(u8 taskId)
gActiveBattler = gTasks[taskId].data[0];
if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
}
else
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
}
@@ -1687,7 +1682,7 @@ static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite)
static void RecordedOpponentHandleDrawPartyStatusSummary(void)
{
- if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
RecordedOpponentBufferExecCompleted();
}
@@ -1695,7 +1690,7 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
{
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E < 2)
{
@@ -1708,10 +1703,10 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(void)
}
}
- gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -1743,7 +1738,7 @@ static void RecordedOpponentHandleSpriteInvisibility(void)
{
if (IsBattlerSpritePresent(gActiveBattler))
{
- gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1];
CopyBattleSpriteInvisibility(gActiveBattler);
}
RecordedOpponentBufferExecCompleted();
@@ -1753,8 +1748,8 @@ static void RecordedOpponentHandleBattleAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u8 animationId = gBattleBufferA[gActiveBattler][1];
- u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u8 animationId = gBattleResources->bufferA[gActiveBattler][1];
+ u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
RecordedOpponentBufferExecCompleted();
@@ -1775,10 +1770,10 @@ static void RecordedOpponentHandleResetActionMoveSelection(void)
static void RecordedOpponentHandleEndLinkBattle(void)
{
- if (gBattleBufferA[gActiveBattler][1] == B_OUTCOME_DREW)
- gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ if (gBattleResources->bufferA[gActiveBattler][1] == B_OUTCOME_DREW)
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1];
else
- gBattleOutcome = gBattleBufferA[gActiveBattler][1] ^ B_OUTCOME_DREW;
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1] ^ B_OUTCOME_DREW;
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
@@ -1786,6 +1781,11 @@ static void RecordedOpponentHandleEndLinkBattle(void)
gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
}
+static void RecordedOpponentHandleBattleDebug(void)
+{
+ RecordedOpponentBufferExecCompleted();
+}
+
static void RecordedOpponentCmdEnd(void)
{
}
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 2a51586e74..b02f171f98 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_message.h"
@@ -168,8 +168,8 @@ static void RecordedPlayerBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands))
- sRecordedPlayerBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands))
+ sRecordedPlayerBufferCommands[gBattleResources->bufferA[gActiveBattler][0]]();
else
RecordedPlayerBufferExecCompleted();
}
@@ -476,7 +476,7 @@ static void RecordedPlayerBufferExecCompleted(void)
u8 playerId = GetMultiplayerId();
PrepareBufferDataTransferLink(2, 4, &playerId);
- gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
}
else
{
@@ -503,13 +503,13 @@ static void RecordedPlayerHandleGetMonData(void)
u8 monToCheck;
s32 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
size += CopyRecordedPlayerMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -531,7 +531,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst)
u32 data32;
s32 size = 0;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
@@ -588,7 +588,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst)
moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
- src = (u8*)(&moveData);
+ src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
@@ -596,7 +596,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
dst[0] = data16;
dst[1] = data16 >> 8;
size = 2;
@@ -611,7 +611,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst)
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
size = 1;
break;
case REQUEST_OTID_BATTLE:
@@ -836,13 +836,13 @@ static void RecordedPlayerHandleSetMonData(void)
u8 monToCheck;
u8 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
SetRecordedPlayerMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -855,11 +855,11 @@ static void RecordedPlayerHandleSetMonData(void)
static void SetRecordedPlayerMonData(u8 monId)
{
- struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
- struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3];
s32 i;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
{
@@ -900,10 +900,10 @@ static void SetRecordedPlayerMonData(u8 monId)
}
break;
case REQUEST_SPECIES_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HELDITEM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -917,154 +917,154 @@ static void SetRecordedPlayerMonData(u8 monId)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PP_DATA_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]);
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_OTID_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_EXP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_FRIENDSHIP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKERUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LOCATION_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_GAME_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKEBALL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ALL_IVS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]);
break;
case REQUEST_HP_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PERSONALITY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CHECKSUM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_STATUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MAX_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SHEEN_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
}
@@ -1073,11 +1073,11 @@ static void SetRecordedPlayerMonData(u8 monId)
static void RecordedPlayerHandleSetRawMonData(void)
{
- u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleBufferA[gActiveBattler][1];
+ u8 *dst = (u8 *)&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]] + gBattleResources->bufferA[gActiveBattler][1];
u8 i;
- for (i = 0; i < gBattleBufferA[gActiveBattler][2]; i++)
- dst[i] = gBattleBufferA[gActiveBattler][3 + i];
+ for (i = 0; i < gBattleResources->bufferA[gActiveBattler][2]; i++)
+ dst[i] = gBattleResources->bufferA[gActiveBattler][3 + i];
RecordedPlayerBufferExecCompleted();
}
@@ -1103,10 +1103,10 @@ static void RecordedPlayerHandleLoadMonSprite(void)
static void RecordedPlayerHandleSwitchInAnim(void)
{
- ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
- gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1];
+ ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
+ gBattlerPartyIndexes[gActiveBattler] = gBattleResources->bufferA[gActiveBattler][1];
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]);
+ StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]);
gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim;
}
@@ -1115,7 +1115,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
u16 species;
ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
- gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
@@ -1143,7 +1143,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit)
static void RecordedPlayerHandleReturnMonToBall(void)
{
- if (gBattleBufferA[gActiveBattler][1] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][1] == 0)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1322,31 +1322,24 @@ static void RecordedPlayerHandleMoveAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
- gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
- gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
- gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
- gAnimFriendship = gBattleBufferA[gActiveBattler][10];
- gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
- gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
- if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
- {
- RecordedPlayerBufferExecCompleted();
- }
- else
- {
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- gBattlerControllerFuncs[gActiveBattler] = RecordedPlayerDoMoveAnimation;
- }
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = RecordedPlayerDoMoveAnimation;
}
}
static void RecordedPlayerDoMoveAnimation(void)
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
- u8 multihit = gBattleBufferA[gActiveBattler][11];
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
+ u8 multihit = gBattleResources->bufferA[gActiveBattler][11];
switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
{
@@ -1384,7 +1377,7 @@ static void RecordedPlayerDoMoveAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
CopyAllBattleSpritesInvisibilities();
- TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
RecordedPlayerBufferExecCompleted();
}
@@ -1398,7 +1391,7 @@ static void RecordedPlayerHandlePrintString(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
+ stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
@@ -1474,7 +1467,7 @@ static void RecordedPlayerHandleHealthBarUpdate(void)
s16 hpVal;
LoadBattleBarGfx(0);
- hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP)
{
@@ -1516,8 +1509,8 @@ static void RecordedPlayerHandleStatusAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1],
- gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24));
+ InitAndLaunchChosenStatusAnimation(gBattleResources->bufferA[gActiveBattler][1],
+ gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8) | (gBattleResources->bufferA[gActiveBattler][4] << 16) | (gBattleResources->bufferA[gActiveBattler][5] << 24));
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1575,7 +1568,7 @@ static void RecordedPlayerHandleClearUnkVar(void)
static void RecordedPlayerHandleSetUnkVar(void)
{
- gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1];
+ gUnusedControllerStruct.unk = gBattleResources->bufferA[gActiveBattler][1];
RecordedPlayerBufferExecCompleted();
}
@@ -1620,20 +1613,20 @@ static void RecordedPlayerHandlePlaySE(void)
else
pan = SOUND_PAN_TARGET;
- PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan);
RecordedPlayerBufferExecCompleted();
}
static void RecordedPlayerHandlePlayFanfareOrBGM(void)
{
- if (gBattleBufferA[gActiveBattler][3])
+ if (gBattleResources->bufferA[gActiveBattler][3])
{
BattleStopLowHpSound();
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
else
{
- PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
RecordedPlayerBufferExecCompleted();
@@ -1649,7 +1642,7 @@ static void RecordedPlayerHandleFaintingCry(void)
static void RecordedPlayerHandleIntroSlide(void)
{
- HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]);
gIntroSlideFlags |= 1;
RecordedPlayerBufferExecCompleted();
}
@@ -1704,15 +1697,15 @@ static void Task_StartSendOutAnim(u8 taskId)
gActiveBattler = gTasks[taskId].data[0];
if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
}
else
{
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
StartSendOutAnim(gActiveBattler, FALSE);
gActiveBattler ^= BIT_FLANK;
@@ -1725,17 +1718,17 @@ static void Task_StartSendOutAnim(u8 taskId)
static void RecordedPlayerHandleDrawPartyStatusSummary(void)
{
- if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
RecordedPlayerBufferExecCompleted();
}
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
- gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0;
- if (gBattleBufferA[gActiveBattler][2] != 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] != 0)
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93;
gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary;
@@ -1767,7 +1760,7 @@ static void RecordedPlayerHandleSpriteInvisibility(void)
{
if (IsBattlerSpritePresent(gActiveBattler))
{
- gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleBufferA[gActiveBattler][1];
+ gSprites[gBattlerSpriteIds[gActiveBattler]].invisible = gBattleResources->bufferA[gActiveBattler][1];
CopyBattleSpriteInvisibility(gActiveBattler);
}
RecordedPlayerBufferExecCompleted();
@@ -1777,8 +1770,8 @@ static void RecordedPlayerHandleBattleAnimation(void)
{
if (!IsBattleSEPlaying(gActiveBattler))
{
- u8 animationId = gBattleBufferA[gActiveBattler][1];
- u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u8 animationId = gBattleResources->bufferA[gActiveBattler][1];
+ u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
RecordedPlayerBufferExecCompleted();
@@ -1799,7 +1792,7 @@ static void RecordedPlayerHandleResetActionMoveSelection(void)
static void RecordedPlayerHandleEndLinkBattle(void)
{
- gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
RecordedPlayerBufferExecCompleted();
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
index 78a57a0f79..1542838dbb 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle_controller_safari.c
@@ -80,6 +80,7 @@ static void SafariHandleBattleAnimation(void);
static void SafariHandleLinkStandbyMsg(void);
static void SafariHandleResetActionMoveSelection(void);
static void SafariHandleEndLinkBattle(void);
+static void SafariHandleBattleDebug(void);
static void SafariCmdEnd(void);
static void SafariBufferRunCommand(void);
@@ -144,6 +145,7 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
[CONTROLLER_LINKSTANDBYMSG] = SafariHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = SafariHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = SafariHandleEndLinkBattle,
+ [CONTROLLER_DEBUGMENU] = SafariHandleBattleDebug,
[CONTROLLER_TERMINATOR_NOP] = SafariCmdEnd
};
@@ -160,8 +162,8 @@ static void SafariBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sSafariBufferCommands))
- sSafariBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sSafariBufferCommands))
+ sSafariBufferCommands[gBattleResources->bufferA[gActiveBattler][0]]();
else
SafariBufferExecCompleted();
}
@@ -299,7 +301,7 @@ static void SafariBufferExecCompleted(void)
u8 playerId = GetMultiplayerId();
PrepareBufferDataTransferLink(2, 4, &playerId);
- gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
}
else
{
@@ -398,7 +400,7 @@ static void SafariHandleSuccessBallThrowAnim(void)
static void SafariHandleBallThrowAnim(void)
{
- u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1];
+ u8 ballThrowCaseId = gBattleResources->bufferA[gActiveBattler][1];
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
gDoingBattleAnim = TRUE;
@@ -422,7 +424,7 @@ static void SafariHandlePrintString(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
+ stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
@@ -593,20 +595,20 @@ static void SafariHandlePlaySE(void)
else
pan = SOUND_PAN_TARGET;
- PlaySE12WithPanning(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8), pan);
+ PlaySE12WithPanning(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8), pan);
SafariBufferExecCompleted();
}
static void SafariHandlePlayFanfareOrBGM(void)
{
- if (gBattleBufferA[gActiveBattler][3])
+ if (gBattleResources->bufferA[gActiveBattler][3])
{
BattleStopLowHpSound();
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
else
{
- PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
SafariBufferExecCompleted();
@@ -622,7 +624,7 @@ static void SafariHandleFaintingCry(void)
static void SafariHandleIntroSlide(void)
{
- HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]);
gIntroSlideFlags |= 1;
SafariBufferExecCompleted();
}
@@ -657,8 +659,8 @@ static void SafariHandleSpriteInvisibility(void)
static void SafariHandleBattleAnimation(void)
{
- u8 animationId = gBattleBufferA[gActiveBattler][1];
- u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u8 animationId = gBattleResources->bufferA[gActiveBattler][1];
+ u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
SafariBufferExecCompleted();
@@ -678,7 +680,7 @@ static void SafariHandleResetActionMoveSelection(void)
static void SafariHandleEndLinkBattle(void)
{
- gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
SafariBufferExecCompleted();
@@ -686,6 +688,11 @@ static void SafariHandleEndLinkBattle(void)
gBattlerControllerFuncs[gActiveBattler] = SafariSetBattleEndCallbacks;
}
+static void SafariHandleBattleDebug(void)
+{
+ SafariBufferExecCompleted();
+}
+
static void SafariCmdEnd(void)
{
}
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index 0b9c337a13..9728376df2 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -89,6 +89,7 @@ static void WallyHandleBattleAnimation(void);
static void WallyHandleLinkStandbyMsg(void);
static void WallyHandleResetActionMoveSelection(void);
static void WallyHandleEndLinkBattle(void);
+static void WallyHandleBattleDebug(void);
static void WallyCmdEnd(void);
static void WallyBufferRunCommand(void);
@@ -158,6 +159,7 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
[CONTROLLER_LINKSTANDBYMSG] = WallyHandleLinkStandbyMsg,
[CONTROLLER_RESETACTIONMOVESELECTION] = WallyHandleResetActionMoveSelection,
[CONTROLLER_ENDLINKBATTLE] = WallyHandleEndLinkBattle,
+ [CONTROLLER_DEBUGMENU] = WallyHandleBattleDebug,
[CONTROLLER_TERMINATOR_NOP] = WallyCmdEnd
};
@@ -178,8 +180,8 @@ static void WallyBufferRunCommand(void)
{
if (gBattleControllerExecFlags & gBitTable[gActiveBattler])
{
- if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sWallyBufferCommands))
- sWallyBufferCommands[gBattleBufferA[gActiveBattler][0]]();
+ if (gBattleResources->bufferA[gActiveBattler][0] < ARRAY_COUNT(sWallyBufferCommands))
+ sWallyBufferCommands[gBattleResources->bufferA[gActiveBattler][0]]();
else
WallyBufferExecCompleted();
}
@@ -409,7 +411,7 @@ static void WallyBufferExecCompleted(void)
u8 playerId = GetMultiplayerId();
PrepareBufferDataTransferLink(2, 4, &playerId);
- gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
+ gBattleResources->bufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP;
}
else
{
@@ -430,13 +432,13 @@ static void WallyHandleGetMonData(void)
u8 monToCheck;
s32 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
size += CopyWallyMonData(gBattlerPartyIndexes[gActiveBattler], monData);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -458,7 +460,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst)
u32 data32;
s32 size = 0;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
battleMon.species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES);
@@ -515,7 +517,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst)
moveData.pp[size] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + size);
}
moveData.ppBonuses = GetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES);
- src = (u8*)(&moveData);
+ src = (u8 *)(&moveData);
for (size = 0; size < sizeof(moveData); size++)
dst[size] = src[size];
break;
@@ -523,7 +525,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
+ data16 = GetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE);
dst[0] = data16;
dst[1] = data16 >> 8;
size = 2;
@@ -538,7 +540,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst)
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
+ dst[0] = GetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE);
size = 1;
break;
case REQUEST_OTID_BATTLE:
@@ -763,13 +765,13 @@ static void WallyHandleSetMonData(void)
u8 monToCheck;
u8 i;
- if (gBattleBufferA[gActiveBattler][2] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][2] == 0)
{
SetWallyMonData(gBattlerPartyIndexes[gActiveBattler]);
}
else
{
- monToCheck = gBattleBufferA[gActiveBattler][2];
+ monToCheck = gBattleResources->bufferA[gActiveBattler][2];
for (i = 0; i < PARTY_SIZE; i++)
{
if (monToCheck & 1)
@@ -782,11 +784,11 @@ static void WallyHandleSetMonData(void)
static void SetWallyMonData(u8 monId)
{
- struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3];
- struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3];
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleResources->bufferA[gActiveBattler][3];
+ struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleResources->bufferA[gActiveBattler][3];
s32 i;
- switch (gBattleBufferA[gActiveBattler][1])
+ switch (gBattleResources->bufferA[gActiveBattler][1])
{
case REQUEST_ALL_BATTLE:
{
@@ -827,10 +829,10 @@ static void SetWallyMonData(u8 monId)
}
break;
case REQUEST_SPECIES_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HELDITEM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MOVES_PP_BATTLE:
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -844,154 +846,154 @@ static void SetWallyMonData(u8 monId)
case REQUEST_MOVE2_BATTLE:
case REQUEST_MOVE3_BATTLE:
case REQUEST_MOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MOVE1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PP_DATA_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP2, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP3, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP4, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP_BONUSES, &gBattleResources->bufferA[gActiveBattler][7]);
break;
case REQUEST_PPMOVE1_BATTLE:
case REQUEST_PPMOVE2_BATTLE:
case REQUEST_PPMOVE3_BATTLE:
case REQUEST_PPMOVE4_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PP1 + gBattleResources->bufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_OTID_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_OT_ID, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_EXP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_EV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_EV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_FRIENDSHIP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_FRIENDSHIP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKERUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKERUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LOCATION_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LOCATION, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MET_GAME_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MET_GAME, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_POKEBALL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_POKEBALL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ALL_IVS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]);
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]);
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][4]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][5]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][6]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][7]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][8]);
break;
case REQUEST_HP_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_IV_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF_IV, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_PERSONALITY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CHECKSUM_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CHECKSUM, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_STATUS_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_STATUS, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_LEVEL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_LEVEL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_MAX_HP_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_MAX_HP, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_ATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_ATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_DEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_DEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPEED_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPEED, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPATK_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPATK, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SPDEF_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPDEF, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SHEEN_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SHEEN, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_COOL_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_COOL_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_BEAUTY_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_BEAUTY_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_CUTE_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_CUTE_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_SMART_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SMART_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
case REQUEST_TOUGH_RIBBON_BATTLE:
- SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_TOUGH_RIBBON, &gBattleResources->bufferA[gActiveBattler][3]);
break;
}
@@ -1015,7 +1017,7 @@ static void WallyHandleSwitchInAnim(void)
static void WallyHandleReturnMonToBall(void)
{
- if (gBattleBufferA[gActiveBattler][1] == 0)
+ if (gBattleResources->bufferA[gActiveBattler][1] == 0)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON);
gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation;
@@ -1088,7 +1090,7 @@ static void WallyHandleSuccessBallThrowAnim(void)
static void WallyHandleBallThrowAnim(void)
{
- u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1];
+ u8 ballThrowCaseId = gBattleResources->bufferA[gActiveBattler][1];
gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId;
gDoingBattleAnim = TRUE;
@@ -1103,30 +1105,22 @@ static void WallyHandlePause(void)
static void WallyHandleMoveAnimation(void)
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
- gAnimMoveTurn = gBattleBufferA[gActiveBattler][3];
- gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8);
- gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24);
- gAnimFriendship = gBattleBufferA[gActiveBattler][10];
- gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
- gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
+ gAnimMoveTurn = gBattleResources->bufferA[gActiveBattler][3];
+ gAnimMovePower = gBattleResources->bufferA[gActiveBattler][4] | (gBattleResources->bufferA[gActiveBattler][5] << 8);
+ gAnimMoveDmg = gBattleResources->bufferA[gActiveBattler][6] | (gBattleResources->bufferA[gActiveBattler][7] << 8) | (gBattleResources->bufferA[gActiveBattler][8] << 16) | (gBattleResources->bufferA[gActiveBattler][9] << 24);
+ gAnimFriendship = gBattleResources->bufferA[gActiveBattler][10];
+ gWeatherMoveAnim = gBattleResources->bufferA[gActiveBattler][12] | (gBattleResources->bufferA[gActiveBattler][13] << 8);
+ gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
- if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
- {
- WallyBufferExecCompleted();
- }
- else
- {
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
- gBattlerControllerFuncs[gActiveBattler] = WallyDoMoveAnimation;
- }
-
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
+ gBattlerControllerFuncs[gActiveBattler] = WallyDoMoveAnimation;
}
static void WallyDoMoveAnimation(void)
{
- u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8);
+ u16 move = gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8);
switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState)
{
@@ -1161,7 +1155,7 @@ static void WallyDoMoveAnimation(void)
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
CopyAllBattleSpritesInvisibilities();
- TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
WallyBufferExecCompleted();
}
@@ -1175,7 +1169,7 @@ static void WallyHandlePrintString(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
+ stringId = (u16 *)(&gBattleResources->bufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
@@ -1269,7 +1263,7 @@ static void WallyHandleHealthBarUpdate(void)
s16 hpVal;
LoadBattleBarGfx(0);
- hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ hpVal = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (hpVal != INSTANT_HP_BAR_DROP)
{
@@ -1391,20 +1385,20 @@ static void WallyHandleCantSwitch(void)
static void WallyHandlePlaySE(void)
{
- PlaySE(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlaySE(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
WallyBufferExecCompleted();
}
static void WallyHandlePlayFanfareOrBGM(void)
{
- if (gBattleBufferA[gActiveBattler][3])
+ if (gBattleResources->bufferA[gActiveBattler][3])
{
BattleStopLowHpSound();
- PlayBGM(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayBGM(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
else
{
- PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8));
+ PlayFanfare(gBattleResources->bufferA[gActiveBattler][1] | (gBattleResources->bufferA[gActiveBattler][2] << 8));
}
WallyBufferExecCompleted();
@@ -1422,7 +1416,7 @@ static void WallyHandleFaintingCry(void)
static void WallyHandleIntroSlide(void)
{
- HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
+ HandleIntroSlide(gBattleResources->bufferA[gActiveBattler][1]);
gIntroSlideFlags |= 1;
WallyBufferExecCompleted();
}
@@ -1462,7 +1456,7 @@ static void StartSendOutAnim(u8 battlerId)
u16 species;
gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = 0;
- gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim);
SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
@@ -1495,7 +1489,7 @@ static void Task_StartSendOutAnim(u8 taskId)
u8 savedActiveBank = gActiveBattler;
gActiveBattler = gTasks[taskId].data[0];
- gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
+ gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler];
StartSendOutAnim(gActiveBattler);
gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox;
gActiveBattler = savedActiveBank;
@@ -1505,14 +1499,14 @@ static void Task_StartSendOutAnim(u8 taskId)
static void WallyHandleDrawPartyStatusSummary(void)
{
- if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (gBattleResources->bufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
WallyBufferExecCompleted();
}
else
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
- gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
+ gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleResources->bufferA[gActiveBattler][4], gBattleResources->bufferA[gActiveBattler][1], gBattleResources->bufferA[gActiveBattler][2]);
WallyBufferExecCompleted();
}
}
@@ -1534,8 +1528,8 @@ static void WallyHandleSpriteInvisibility(void)
static void WallyHandleBattleAnimation(void)
{
- u8 animationId = gBattleBufferA[gActiveBattler][1];
- u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ u8 animationId = gBattleResources->bufferA[gActiveBattler][1];
+ u16 argument = gBattleResources->bufferA[gActiveBattler][2] | (gBattleResources->bufferA[gActiveBattler][3] << 8);
if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument))
WallyBufferExecCompleted();
@@ -1555,7 +1549,7 @@ static void WallyHandleResetActionMoveSelection(void)
static void WallyHandleEndLinkBattle(void)
{
- gBattleOutcome = gBattleBufferA[gActiveBattler][1];
+ gBattleOutcome = gBattleResources->bufferA[gActiveBattler][1];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
WallyBufferExecCompleted();
@@ -1564,6 +1558,11 @@ static void WallyHandleEndLinkBattle(void)
gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks;
}
+static void WallyHandleBattleDebug(void)
+{
+ WallyBufferExecCompleted();
+}
+
static void WallyCmdEnd(void)
{
}
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 369f735f24..82ce1ebf20 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -1,9 +1,10 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
#include "battle_anim.h"
#include "battle_controllers.h"
#include "battle_message.h"
+#include "battle_setup.h"
#include "cable_club.h"
#include "link.h"
#include "link_rfu.h"
@@ -58,7 +59,8 @@ void SetUpBattleVarsAndBirchZigzagoon(void)
gBattleControllerExecFlags = 0;
ClearBattleAnimationVars();
ClearBattleMonForms();
- BattleAI_HandleItemUseBeforeAISetup(0xF);
+ BattleAI_SetupItems();
+ BattleAI_SetupFlags();
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{
@@ -99,10 +101,10 @@ void InitBattleControllers(void)
}
for (i = 0; i < sizeof(gBattleStruct->tvMovePoints); i++)
- *((u8*)(&gBattleStruct->tvMovePoints) + i) = 0;
+ *((u8 *)(&gBattleStruct->tvMovePoints) + i) = 0;
for (i = 0; i < sizeof(gBattleStruct->tv); i++)
- *((u8*)(&gBattleStruct->tv) + i) = 0;
+ *((u8 *)(&gBattleStruct->tv) + i) = 0;
}
static void InitSinglePlayerBtlControllers(void)
@@ -151,8 +153,16 @@ static void InitSinglePlayerBtlControllers(void)
gBattlerPartyIndexes[0] = 0;
gBattlerPartyIndexes[1] = 0;
- gBattlerPartyIndexes[2] = 3;
- gBattlerPartyIndexes[3] = 3;
+ if (BATTLE_TWO_VS_ONE_OPPONENT)
+ {
+ gBattlerPartyIndexes[2] = 3;
+ gBattlerPartyIndexes[3] = 1;
+ }
+ else
+ {
+ gBattlerPartyIndexes[2] = 3;
+ gBattlerPartyIndexes[3] = 3;
+ }
}
else if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
@@ -578,6 +588,14 @@ static void InitLinkBtlControllers(void)
}
}
+bool32 IsValidForBattle(struct Pokemon *mon)
+{
+ u32 species = GetMonData(mon, MON_DATA_SPECIES2);
+ return (species != SPECIES_NONE && species != SPECIES_EGG
+ && GetMonData(mon, MON_DATA_HP) != 0
+ && GetMonData(mon, MON_DATA_IS_EGG) == 0);
+}
+
static void SetBattlePartyIds(void)
{
s32 i, j;
@@ -592,10 +610,7 @@ static void SetBattlePartyIds(void)
{
if (GET_BATTLER_SIDE2(i) == B_SIDE_PLAYER)
{
- if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0
- && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_NONE
- && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG
- && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0)
+ if (IsValidForBattle(&gPlayerParty[j]))
{
gBattlerPartyIndexes[i] = j;
break;
@@ -603,10 +618,7 @@ static void SetBattlePartyIds(void)
}
else
{
- if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0
- && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE
- && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG
- && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0)
+ if (IsValidForBattle(&gEnemyParty[j]))
{
gBattlerPartyIndexes[i] = j;
break;
@@ -617,11 +629,7 @@ static void SetBattlePartyIds(void)
{
if (GET_BATTLER_SIDE2(i) == B_SIDE_PLAYER)
{
- if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0
- && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != SPECIES_NONE // Probably a typo by Game Freak. The rest use SPECIES2.
- && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG
- && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0
- && gBattlerPartyIndexes[i - 2] != j)
+ if (IsValidForBattle(&gPlayerParty[j]) && gBattlerPartyIndexes[i - 2] != j)
{
gBattlerPartyIndexes[i] = j;
break;
@@ -629,16 +637,18 @@ static void SetBattlePartyIds(void)
}
else
{
- if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0
- && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE
- && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG
- && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0
- && gBattlerPartyIndexes[i - 2] != j)
+ if (IsValidForBattle(&gEnemyParty[j]) && gBattlerPartyIndexes[i - 2] != j)
{
gBattlerPartyIndexes[i] = j;
break;
}
}
+
+ // No valid mons were found. Add the empty slot.
+ if (gBattlerPartyIndexes[i - 2] == 0)
+ gBattlerPartyIndexes[i] = 1;
+ else
+ gBattlerPartyIndexes[i] = 0;
}
}
}
@@ -663,14 +673,14 @@ static void PrepareBufferDataTransfer(u8 bufferId, u8 *data, u16 size)
case BUFFER_A:
for (i = 0; i < size; i++)
{
- gBattleBufferA[gActiveBattler][i] = *data;
+ gBattleResources->bufferA[gActiveBattler][i] = *data;
data++;
}
break;
case BUFFER_B:
for (i = 0; i < size; i++)
{
- gBattleBufferB[gActiveBattler][i] = *data;
+ gBattleResources->bufferB[gActiveBattler][i] = *data;
data++;
}
break;
@@ -880,7 +890,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
if (gBattleControllerExecFlags & gBitTable[battlerId])
return;
- memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
+ memcpy(gBattleResources->bufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
MarkBattlerReceivedLinkData(battlerId);
if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER))
@@ -892,7 +902,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
}
break;
case 1:
- memcpy(gBattleBufferB[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
+ memcpy(gBattleResources->bufferB[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize);
break;
case 2:
var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA];
@@ -930,7 +940,7 @@ void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 b
sBattleBuffersTransferData[1] = requestId;
sBattleBuffersTransferData[2] = monToCheck;
for (i = 0; i < bytes; i++)
- sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
+ sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes);
}
@@ -942,7 +952,7 @@ void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data
sBattleBuffersTransferData[1] = monId;
sBattleBuffersTransferData[2] = bytes;
for (i = 0; i < bytes; i++)
- sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
+ sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, bytes + 3);
}
@@ -1039,7 +1049,7 @@ void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data)
sBattleBuffersTransferData[0] = CONTROLLER_PAUSE;
sBattleBuffersTransferData[1] = toWait;
for (i = 0; i < toWait * 3; i++)
- sBattleBuffersTransferData[2 + i] = *(u8*)(data++);
+ sBattleBuffersTransferData[2 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, toWait * 3 + 2);
}
@@ -1057,7 +1067,7 @@ void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 m
sBattleBuffersTransferData[9] = (dmg & 0xFF000000) >> 24;
sBattleBuffersTransferData[10] = friendship;
sBattleBuffersTransferData[11] = multihit;
- if (WEATHER_HAS_EFFECT2)
+ if (WEATHER_HAS_EFFECT)
{
sBattleBuffersTransferData[12] = gBattleWeather;
sBattleBuffersTransferData[13] = (gBattleWeather & 0xFF00) >> 8;
@@ -1076,14 +1086,14 @@ void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 m
void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
{
s32 i;
- struct BattleMsgData* stringInfo;
+ struct BattleMsgData *stringInfo;
sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING;
sBattleBuffersTransferData[1] = gBattleOutcome;
sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
- stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]);
+ stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
@@ -1115,7 +1125,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
- stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]);
+ stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
@@ -1164,7 +1174,7 @@ void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpN
sBattleBuffersTransferData[2] = NoPpNumber;
sBattleBuffersTransferData[3] = 0;
for (i = 0; i < sizeof(*movePpData); i++)
- sBattleBuffersTransferData[4 + i] = *((u8*)(movePpData) + i);
+ sBattleBuffersTransferData[4 + i] = *((u8 *)(movePpData) + i);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4);
}
@@ -1178,14 +1188,15 @@ void BtlController_EmitChooseItem(u8 bufferId, u8 *battlePartyOrder)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
-void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abilityId, u8 *data)
+void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 *data)
{
s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
sBattleBuffersTransferData[1] = caseId;
sBattleBuffersTransferData[2] = slotId;
- sBattleBuffersTransferData[3] = abilityId;
+ sBattleBuffersTransferData[3] = abilityId & 0xFF;
+ sBattleBuffersTransferData[7] = (abilityId >> 8) & 0xFF;
for (i = 0; i < 3; i++)
sBattleBuffersTransferData[4 + i] = data[i];
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written.
@@ -1210,14 +1221,15 @@ void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
-// why is the argument u16 if it's being cast to s16 anyway?
-void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints)
+void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, s32 expPoints)
{
sBattleBuffersTransferData[0] = CONTROLLER_EXPUPDATE;
sBattleBuffersTransferData[1] = partyId;
- sBattleBuffersTransferData[2] = (s16)expPoints;
- sBattleBuffersTransferData[3] = ((s16)expPoints & 0xFF00) >> 8;
- PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[2] = expPoints;
+ sBattleBuffersTransferData[3] = (expPoints & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[4] = (expPoints & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[5] = (expPoints & 0xFF000000) >> 24;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6);
}
void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2)
@@ -1261,7 +1273,7 @@ void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data)
sBattleBuffersTransferData[2] = size;
sBattleBuffersTransferData[3] = (size & 0xFF00) >> 8;
for (i = 0; i < size; i++)
- sBattleBuffersTransferData[4 + i] = *(u8*)(data++);
+ sBattleBuffersTransferData[4 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4);
}
@@ -1277,7 +1289,7 @@ void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data
sBattleBuffersTransferData[5] = size;
sBattleBuffersTransferData[6] = (size & 0xFF00) >> 8;
for (i = 0; i < size; i++)
- sBattleBuffersTransferData[7 + i] = *(u8*)(data++);
+ sBattleBuffersTransferData[7 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7);
}
@@ -1293,7 +1305,7 @@ void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data)
// Nonsense loop using songId as a size
// Would go out of bounds for any song id after SE_RG_BAG_POCKET (253)
for (i = 0; i < songId; i++)
- sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
+ sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3);
}
@@ -1305,17 +1317,19 @@ void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data)
sBattleBuffersTransferData[1] = size;
sBattleBuffersTransferData[2] = (size & 0xFF00) >> 8;
for (i = 0; i < size; i++)
- sBattleBuffersTransferData[3 + i] = *(u8*)(data++);
+ sBattleBuffersTransferData[3 + i] = *(u8 *)(data++);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3);
}
-void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u16 ret16)
+void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u32 ret32)
{
sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES;
sBattleBuffersTransferData[1] = ret8;
- sBattleBuffersTransferData[2] = ret16;
- sBattleBuffersTransferData[3] = (ret16 & 0xFF00) >> 8;
- PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
+ sBattleBuffersTransferData[2] = ret32;
+ sBattleBuffersTransferData[3] = (ret32 & 0x0000FF00) >> 8;
+ sBattleBuffersTransferData[4] = (ret32 & 0x00FF0000) >> 16;
+ sBattleBuffersTransferData[5] = (ret32 & 0xFF000000) >> 24;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6);
}
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battlePartyOrder)
@@ -1451,7 +1465,7 @@ void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* h
sBattleBuffersTransferData[2] = (flags & PARTY_SUMM_SKIP_DRAW_DELAY) >> 7; // If true, skip delay after drawing. True during intro
sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); i++)
- sBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus));
+ sBattleBuffersTransferData[4 + i] = *(i + (u8 *)(hpAndStatus));
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * PARTY_SIZE + 4);
}
@@ -1522,3 +1536,9 @@ void BtlController_EmitEndLinkBattle(u8 bufferId, u8 battleOutcome)
sBattleBuffersTransferData[5] = sBattleBuffersTransferData[4] = RecordedBattle_BufferNewBattlerData(&sBattleBuffersTransferData[6]);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sBattleBuffersTransferData[4] + 6);
}
+
+void BtlController_EmitDebugMenu(u8 bufferId)
+{
+ sBattleBuffersTransferData[0] = CONTROLLER_DEBUGMENU;
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 1);
+}
diff --git a/src/battle_debug.c b/src/battle_debug.c
new file mode 100644
index 0000000000..9911154022
--- /dev/null
+++ b/src/battle_debug.c
@@ -0,0 +1,2155 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_message.h"
+#include "main.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "scanline_effect.h"
+#include "palette.h"
+#include "pokemon_icon.h"
+#include "sprite.h"
+#include "item.h"
+#include "task.h"
+#include "bg.h"
+#include "gpu_regs.h"
+#include "window.h"
+#include "text.h"
+#include "text_window.h"
+#include "international_string_util.h"
+#include "strings.h"
+#include "battle_ai_main.h"
+#include "battle_ai_util.h"
+#include "list_menu.h"
+#include "decompress.h"
+#include "trainer_pokemon_sprites.h"
+#include "malloc.h"
+#include "string_util.h"
+#include "util.h"
+#include "data.h"
+#include "reset_rtc_screen.h"
+#include "reshow_battle_screen.h"
+#include "constants/abilities.h"
+#include "constants/moves.h"
+#include "constants/items.h"
+#include "constants/rgb.h"
+#include "constants/hold_effects.h"
+
+#define MAX_MODIFY_DIGITS 4
+
+struct BattleDebugModifyArrows
+{
+ u8 arrowSpriteId[2];
+ u16 minValue;
+ u16 maxValue;
+ int currValue;
+ u8 currentDigit;
+ u8 maxDigits;
+ u8 charDigits[MAX_MODIFY_DIGITS];
+ void *modifiedValPtr;
+ u8 typeOfVal;
+};
+
+struct BattleDebugMenu
+{
+ u8 battlerId;
+ u8 battlerWindowId;
+
+ u8 mainListWindowId;
+ u8 mainListTaskId;
+ u8 currentMainListItemId;
+
+ u8 secondaryListWindowId;
+ u8 secondaryListTaskId;
+ u8 currentSecondaryListItemId;
+ u8 secondaryListItemCount;
+
+ u8 modifyWindowId;
+
+ u8 activeWindow;
+
+ struct BattleDebugModifyArrows modifyArrows;
+ const struct BitfieldInfo *bitfield;
+ bool8 battlerWasChanged[MAX_BATTLERS_COUNT];
+
+ u8 aiBattlerId;
+ u8 aiViewState;
+ u8 aiIconSpriteIds[MAX_BATTLERS_COUNT];
+ u8 aiMonSpriteId;
+ u8 aiMovesWindowId;
+};
+
+struct __attribute__((__packed__)) BitfieldInfo
+{
+ u8 bitsCount;
+ u8 currBit;
+};
+
+enum
+{
+ LIST_ITEM_MOVES,
+ LIST_ITEM_ABILITY,
+ LIST_ITEM_HELD_ITEM,
+ LIST_ITEM_PP,
+ LIST_ITEM_TYPES,
+ LIST_ITEM_STATS,
+ LIST_ITEM_STAT_STAGES,
+ LIST_ITEM_STATUS1,
+ LIST_ITEM_STATUS2,
+ LIST_ITEM_STATUS3,
+ LIST_ITEM_STATUS4,
+ LIST_ITEM_SIDE_STATUS,
+ LIST_ITEM_AI,
+ LIST_ITEM_AI_MOVES_PTS,
+ LIST_ITEM_AI_INFO,
+ LIST_ITEM_VARIOUS,
+ LIST_ITEM_COUNT
+};
+
+enum
+{
+ ACTIVE_WIN_MAIN,
+ ACTIVE_WIN_SECONDARY,
+ ACTIVE_WIN_MODIFY
+};
+
+enum
+{
+ VAL_U8,
+ VAL_U16,
+ VAL_U32,
+ VAL_BITFIELD_8,
+ VAL_BITFIELD_16,
+ VAL_BITFIELD_32,
+ VAR_SIDE_STATUS,
+ VAR_SHOW_HP,
+ VAR_SUBSTITUTE,
+ VAR_IN_LOVE,
+ VAR_U16_4_ENTRIES,
+ VAL_S8,
+ VAL_ITEM,
+ VAL_ALL_STAT_STAGES,
+};
+
+enum
+{
+ LIST_SIDE_REFLECT,
+ LIST_SIDE_LIGHTSCREEN,
+ LIST_SIDE_SPIKES,
+ LIST_SIDE_SAFEGUARD,
+ LIST_SIDE_MIST,
+ LIST_SIDE_AURORA_VEIL,
+ LIST_SIDE_LUCKY_CHANT,
+ LIST_SIDE_TAILWIND,
+ LIST_SIDE_STEALTH_ROCK,
+ LIST_SIDE_TOXIC_SPIKES,
+ LIST_SIDE_STICKY_WEB,
+};
+
+enum
+{
+ VARIOUS_SHOW_HP,
+ VARIOUS_SUBSTITUTE_HP,
+ VARIOUS_IN_LOVE,
+};
+
+// Static Declarations
+static const u8 *GetHoldEffectName(u16 holdEffect);
+
+// const rom data
+static const u8 sText_HoldEffect[] = _("Hold Effect");
+static const u8 sText_Ability[] = _("Ability");
+static const u8 sText_Moves[] = _("Moves");
+static const u8 sText_Stats[] = _("Stats");
+static const u8 sText_StatStages[] = _("Stat Stages");
+static const u8 sText_Status1[] = _("Status1");
+static const u8 sText_Status2[] = _("Status2");
+static const u8 sText_Status3[] = _("Status3");
+static const u8 sText_Status4[] = _("Status4");
+static const u8 sText_HeldItem[] = _("Held Item");
+static const u8 sText_SideStatus[] = _("Side Status");
+static const u8 sText_MaxHp[] = _("HP Max");
+static const u8 sText_CurrHp[] = _("HP Current");
+static const u8 sText_Freeze[] = _("Freeze");
+static const u8 sText_ToxicPoison[] = _("Toxic Poison");
+static const u8 sText_ToxicCounter[] = _("Toxic Counter");
+static const u8 sText_Flinch[] = _("Flinch");
+static const u8 sText_Uproar[] = _("Uproar");
+static const u8 sText_Bide[] = _("Bide");
+static const u8 sText_LockConfuse[] = _("Lock Confuse");
+static const u8 sText_MultipleTurns[] = _("MultipleTurns");
+static const u8 sText_FocusEnergy[] = _("Focus Energy");
+static const u8 sText_Transformed[] = _("Transformed");
+static const u8 sText_Recharge[] = _("Recharge");
+static const u8 sText_Rage[] = _("Rage");
+static const u8 sText_Substitute[] = _("Substitute");
+static const u8 sText_SubstituteHp[] = _("Substitute HP");
+static const u8 sText_DestinyBond[] = _("Destiny Bond");
+static const u8 sText_CantEscape[] = _("Cant Escape");
+static const u8 sText_Nightmare[] = _("Nightmare");
+static const u8 sText_Cursed[] = _("Cursed");
+static const u8 sText_Foresight[] = _("Foresighted");
+static const u8 sText_DefenseCurl[] = _("Def Curled");
+static const u8 sText_Tormented[] = _("Tormented");
+static const u8 sText_AlwaysHits[] = _("Sure Hit");
+static const u8 sText_ChargedUp[] = _("Charged Up");
+static const u8 sText_Rooted[] = _("Rooted");
+static const u8 sText_Yawned[] = _("Yawned");
+static const u8 sText_Minimized[] = _("Minimized");
+static const u8 sText_NoCrit[] = _("No Crit");
+static const u8 sText_Imprisoned[] = _("Imprison");
+static const u8 sText_Reflect[] = _("Reflect");
+static const u8 sText_LightScreen[] = _("Light Screen");
+static const u8 sText_Spikes[] = _("Spikes");
+static const u8 sText_Safeguard[] = _("Safeguard");
+static const u8 sText_Mist[] = _("Mist");
+static const u8 sText_ShowOpponentHP[] = _("Opponent Hp");
+static const u8 sText_Types[] = _("Types");
+static const u8 sText_GastroAcid[] = _("Gastro Acid");
+static const u8 sText_SmackDown[] = _("Smacked Down");
+static const u8 sText_MiracleEye[] = _("Miracle Eye");
+static const u8 sText_AquaRing[] = _("Aqua Ring");
+static const u8 sText_LaserFocus[] = _("Laser Focused");
+static const u8 sText_Electrified[] = _("Electrified");
+static const u8 sText_AuroraVeil[] = _("Aurora Veil");
+static const u8 sText_LuckyChant[] = _("Lucky Chant");
+static const u8 sText_Tailwind[] = _("Tailwind");
+static const u8 sText_PP[] = _("PP");
+static const u8 sText_StealthRock[] = _("Stealth Rock");
+static const u8 sText_ToxicSpikes[] = _("Toxic Spikes");
+static const u8 sText_StickyWeb[] = _("Sticky Web");
+static const u8 sText_AI[] = _("AI");
+static const u8 sText_NoBadMoves[] = _("No Bad Moves");
+static const u8 sText_Viability[] = _("Viability");
+static const u8 sText_TryFaint[] = _("Try Faint");
+static const u8 sText_SetUpFirstTurn[] = _("Setup 1 turn");
+static const u8 sText_Risky[] = _("Risky");
+static const u8 sText_StrongestMove[] = _("Most dmg move");
+static const u8 sText_Various[] = _("Various");
+static const u8 sText_ShowHP[] = _("Show HP");
+static const u8 sText_PreferBatonPass[] = _("Baton Pass");
+static const u8 sText_InDoubles[] = _("In Doubles");
+static const u8 sText_HpAware[] = _("HP aware");
+static const u8 sText_Unknown[] = _("Unknown");
+static const u8 sText_InLove[] = _("In Love");
+static const u8 sText_AIMovePts[] = _("AI Pts/Dmg");
+static const u8 sText_AiKnowledge[] = _("AI Info");
+static const u8 sText_EffectOverride[] = _("Effect Override");
+
+static const u8 sText_EmptyString[] = _("");
+
+static const struct BitfieldInfo sStatus1Bitfield[] =
+{
+ {/*Sleep*/ 3, 0},
+ {/*Poison*/ 1, 3},
+ {/*Burn*/ 1, 4},
+ {/*Freeze*/ 1, 5},
+ {/*Paralysis*/1, 6},
+ {/*Toxic Poison*/ 1, 7},
+ {/*Toxic Counter*/ 4, 8},
+};
+
+static const struct BitfieldInfo sStatus2Bitfield[] =
+{
+ {/*Confusion*/ 3, 0},
+ {/*Flinch*/ 1, 3},
+ {/*Uproar*/ 3, 4},
+ // Bit 7 is unused.
+ {/*Bide*/ 2, 8},
+ {/*Lock Confuse*/ 2, 10},
+ {/*Multiple Turns*/ 1, 12},
+ // Wrap bits are omitted. Done in various.
+ // In Love bits are omitted. Done in various.
+ {/*Transformed*/ 1, 21},
+ {/*Recharge*/ 1, 22},
+ {/*Rage*/ 1, 23},
+ {/*Substitute*/ 1, 24},
+ {/*Destiny bond*/ 1, 25},
+ {/*Can't escape*/ 1, 26},
+ {/*Nightmares*/ 1, 27},
+ {/*Cursed*/ 1, 28},
+ {/*Foresighted*/ 1, 29},
+ {/*Defense Curled*/ 1, 30},
+ {/*Tormented*/ 1, 31},
+};
+
+static const struct BitfieldInfo sStatus3Bitfield[] =
+{
+ {/*Always hits*/ 2, 4},
+ //*Perish Song*/ 1, 5},
+ // On Air 1, 6,
+ // Underground 1, 7,
+ {/*Minimized*/ 1, 8},
+ {/*Charged Up*/ 1, 9},
+ {/*Rooted*/ 1, 10},
+ {/*Yawn*/ 2, 11},
+ {/*Imprison*/ 1, 13},
+ // Grudge 1, 14,
+ {/*No Crit*/ 1, 15},
+ {/*Gastro Acid*/ 1, 16},
+ // Embargo 1, 17,
+ // Underwater 1, 18,
+ // Intimidated Mons 1, 19,
+ // Traced 1, 20,
+ {/*Smacked Down*/ 1, 21},
+ // Me First 1, 22,
+ // Telekinesis 1, 23,
+ // Phantom Force 1, 24},
+ {/*Miracle Eyed*/ 1, 25},
+ // Magnet Rise 1, 26,
+ // Heal Block 1, 27,
+ {/*Aqua Ring*/ 1, 28},
+ {/*Laser Focus*/ 1, 29},
+ // Power Trick 1, 30,
+};
+
+static const struct BitfieldInfo sStatus4Bitfield[] =
+{
+ {/*Electrified*/ 1, 0,}
+};
+
+static const struct BitfieldInfo sAIBitfield[] =
+{
+ {/*Check bad move*/ 1, 0},
+ {/*Try To Faint*/ 1, 1},
+ {/*Viability*/ 1, 2},
+ {/*Set up first turn*/ 1, 3},
+ {/*Risky*/ 1, 4},
+ {/*Prefer Strongest Move*/ 1, 5},
+ {/*Prefer Baton Pass*/ 1, 6},
+ {/*In Doubles*/ 1, 7},
+ {/*Hp aware*/ 1, 8},
+ {/*Unknown*/ 1, 9},
+};
+
+
+static const struct ListMenuItem sMainListItems[] =
+{
+ {sText_Moves, LIST_ITEM_MOVES},
+ {sText_Ability, LIST_ITEM_ABILITY},
+ {sText_HeldItem, LIST_ITEM_HELD_ITEM},
+ {sText_PP, LIST_ITEM_PP},
+ {sText_Types, LIST_ITEM_TYPES},
+ {sText_Stats, LIST_ITEM_STATS},
+ {sText_StatStages, LIST_ITEM_STAT_STAGES},
+ {sText_Status1, LIST_ITEM_STATUS1},
+ {sText_Status2, LIST_ITEM_STATUS2},
+ {sText_Status3, LIST_ITEM_STATUS3},
+ {sText_Status4, LIST_ITEM_STATUS4},
+ {sText_SideStatus, LIST_ITEM_SIDE_STATUS},
+ {sText_AI, LIST_ITEM_AI},
+ {sText_AIMovePts, LIST_ITEM_AI_MOVES_PTS},
+ {sText_AiKnowledge, LIST_ITEM_AI_INFO},
+ {sText_Various, LIST_ITEM_VARIOUS},
+};
+
+static const struct ListMenuItem sVariousListItems[] =
+{
+ {sText_ShowHP, VARIOUS_SHOW_HP},
+ {sText_SubstituteHp, VARIOUS_SUBSTITUTE_HP},
+ {sText_InLove, VARIOUS_IN_LOVE},
+};
+
+static const struct ListMenuItem sAIListItems[] =
+{
+ {sText_NoBadMoves, 0},
+ {sText_TryFaint, 1},
+ {sText_Viability, 2},
+ {sText_SetUpFirstTurn, 3},
+ {sText_Risky, 4},
+ {sText_StrongestMove, 5},
+ {sText_PreferBatonPass, 6},
+ {sText_InDoubles, 7},
+ {sText_HpAware, 8},
+ // {sText_Unknown, 9},
+};
+
+static const struct ListMenuItem sStatsListItems[] =
+{
+ {sText_CurrHp, 0},
+ {sText_MaxHp, 1},
+ {gText_Attack, 2},
+ {gText_Defense, 3},
+ {gText_Speed, 4},
+ {gText_SpAtk, 5},
+ {gText_SpDef, 6},
+};
+
+static const struct ListMenuItem sStatus1ListItems[] =
+{
+ {gText_Sleep, 0},
+ {gText_Poison, 1},
+ {gText_Burn, 2},
+ {sText_Freeze, 3},
+ {gText_Paralysis, 4},
+ {sText_ToxicPoison, 5},
+ {sText_ToxicCounter, 6},
+};
+
+static const struct ListMenuItem sStatus2ListItems[] =
+{
+ {gText_Confusion, 0},
+ {sText_Flinch, 1},
+ {sText_Uproar, 2},
+ {sText_Bide, 3},
+ {sText_LockConfuse, 4},
+ {sText_MultipleTurns, 5},
+ {sText_FocusEnergy, 6},
+ {sText_Recharge, 7},
+ {sText_Rage, 8},
+ {sText_Substitute, 9},
+ {sText_DestinyBond, 10},
+ {sText_CantEscape, 11},
+ {sText_Nightmare, 12},
+ {sText_Cursed, 13},
+ {sText_Foresight, 14},
+ {sText_DefenseCurl, 15},
+ {sText_Tormented, 16},
+};
+
+static const struct ListMenuItem sStatus3ListItems[] =
+{
+ {sText_AlwaysHits, 0},
+ {sText_Minimized, 1},
+ {sText_ChargedUp, 2},
+ {sText_Rooted, 3},
+ {sText_Yawned, 4},
+ {sText_Imprisoned, 5},
+ {sText_NoCrit, 6},
+ {sText_GastroAcid, 7},
+ {sText_SmackDown, 8},
+ {sText_MiracleEye, 9},
+ {sText_AquaRing, 10},
+ {sText_LaserFocus, 11},
+};
+
+static const struct ListMenuItem sStatus4ListItems[] =
+{
+ {sText_Electrified, 0},
+};
+
+static const struct ListMenuItem sSideStatusListItems[] =
+{
+ {sText_Reflect, LIST_SIDE_REFLECT},
+ {sText_LightScreen, LIST_SIDE_LIGHTSCREEN},
+ {sText_Spikes, LIST_SIDE_SPIKES},
+ {sText_Safeguard, LIST_SIDE_SAFEGUARD},
+ {sText_Mist, LIST_SIDE_MIST},
+ {sText_AuroraVeil, LIST_SIDE_AURORA_VEIL},
+ {sText_LuckyChant, LIST_SIDE_LUCKY_CHANT},
+ {sText_Tailwind, LIST_SIDE_TAILWIND},
+ {sText_StealthRock, LIST_SIDE_STEALTH_ROCK},
+ {sText_ToxicSpikes, LIST_SIDE_TOXIC_SPIKES},
+ {sText_StickyWeb, LIST_SIDE_STICKY_WEB},
+};
+
+static const struct ListMenuItem sSecondaryListItems[] =
+{
+ {sText_EmptyString, 0},
+ {sText_EmptyString, 1},
+ {sText_EmptyString, 2},
+ {sText_EmptyString, 3},
+ {sText_EmptyString, 4},
+ {sText_EmptyString, 5},
+ {sText_EmptyString, 6},
+ {sText_EmptyString, 7},
+ {sText_EmptyString, 8},
+};
+
+
+static const struct ListMenuTemplate sMainListTemplate =
+{
+ .items = sMainListItems,
+ .moveCursorFunc = NULL,
+ .itemPrintFunc = NULL,
+ .totalItems = ARRAY_COUNT(sMainListItems),
+ .maxShowed = 6,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 1,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+static const struct ListMenuTemplate sSecondaryListTemplate =
+{
+ .items = sSecondaryListItems,
+ .moveCursorFunc = NULL,
+ .itemPrintFunc = NULL,
+ .totalItems = 0,
+ .maxShowed = 0,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 1,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+
+static const struct WindowTemplate sMainListWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 3,
+ .width = 9,
+ .height = 12,
+ .paletteNum = 0xF,
+ .baseBlock = 0x2
+};
+
+static const struct WindowTemplate sSecondaryListWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 3,
+ .width = 10,
+ .height = 2,
+ .paletteNum = 0xF,
+ .baseBlock = 0xA0
+};
+
+static const struct WindowTemplate sModifyWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 25,
+ .tilemapTop = 2,
+ .width = 4,
+ .height = 2,
+ .paletteNum = 0xF,
+ .baseBlock = 0x200
+};
+
+static const struct WindowTemplate sBattlerWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 10,
+ .tilemapTop = 0,
+ .width = 14,
+ .height = 2,
+ .paletteNum = 0xF,
+ .baseBlock = 0x300
+};
+
+static const struct BgTemplate sBgTemplates[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 20,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ }
+};
+
+static const u8 sBitsToMaxDigit[] =
+{
+ [0] = 0,
+ [1] = 1, // max 1
+ [2] = 1, // max 3
+ [3] = 1, // max 7
+ [4] = 2, // max 15
+ [5] = 2, // max 31
+ [6] = 2, // max 63
+ [7] = 3, // max 127
+ [8] = 3, // max 255
+};
+
+static const bool8 sHasChangeableEntries[LIST_ITEM_COUNT] =
+{
+ [LIST_ITEM_MOVES] = TRUE,
+ [LIST_ITEM_AI_MOVES_PTS] = TRUE,
+ [LIST_ITEM_PP] = TRUE,
+ [LIST_ITEM_ABILITY] = TRUE,
+ [LIST_ITEM_TYPES] = TRUE,
+ [LIST_ITEM_HELD_ITEM] = TRUE,
+ [LIST_ITEM_STAT_STAGES] = TRUE,
+};
+
+static const u16 sBgColor[] = {RGB_WHITE};
+
+// this file's functions
+static void Task_DebugMenuFadeOut(u8 taskId);
+static void Task_DebugMenuProcessInput(u8 taskId);
+static void Task_DebugMenuFadeIn(u8 taskId);
+static void PrintOnBattlerWindow(u8 windowId, u8 battlerId);
+static void UpdateWindowsOnChangedBattler(struct BattleDebugMenu *data);
+static void CreateSecondaryListMenu(struct BattleDebugMenu *data);
+static void PrintSecondaryEntries(struct BattleDebugMenu *data);
+static void DestroyModifyArrows(struct BattleDebugMenu *data);
+static void PrintDigitChars(struct BattleDebugMenu *data);
+static void SetUpModifyArrows(struct BattleDebugMenu *data);
+static void UpdateBattlerValue(struct BattleDebugMenu *data);
+static void UpdateMonData(struct BattleDebugMenu *data);
+static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, bool32 statusTrue);
+static bool32 TryMoveDigit(struct BattleDebugModifyArrows *modArrows, bool32 moveUp);
+static void SwitchToDebugView(u8 taskId);
+
+// code
+static struct BattleDebugMenu *GetStructPtr(u8 taskId)
+{
+ u8 *taskDataPtr = (u8 *)(&gTasks[taskId].data[0]);
+
+ return (struct BattleDebugMenu*)(T1_READ_PTR(taskDataPtr));
+}
+
+static void SetStructPtr(u8 taskId, void *ptr)
+{
+ u32 structPtr = (u32)(ptr);
+ u8 *taskDataPtr = (u8 *)(&gTasks[taskId].data[0]);
+
+ taskDataPtr[0] = structPtr >> 0;
+ taskDataPtr[1] = structPtr >> 8;
+ taskDataPtr[2] = structPtr >> 16;
+ taskDataPtr[3] = structPtr >> 24;
+}
+
+static void MainCB2(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void VBlankCB(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void CB2_BattleDebugMenu(void)
+{
+ u8 taskId;
+ struct BattleDebugMenu *data;
+
+ switch (gMain.state)
+ {
+ default:
+ case 0:
+ SetVBlankCallback(NULL);
+ gMain.state++;
+ break;
+ case 1:
+ ResetVramOamAndBgCntRegs();
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ ResetAllBgsCoordinates();
+ FreeAllWindowBuffers();
+ DeactivateAllTextPrinters();
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ ShowBg(0);
+ ShowBg(1);
+ gMain.state++;
+ break;
+ case 2:
+ ResetPaletteFade();
+ ScanlineEffect_Stop();
+ ResetTasks();
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 3:
+ LoadPalette(sBgColor, 0, 2);
+ LoadPalette(GetOverworldTextboxPalettePtr(), 0xf0, 16);
+ gMain.state++;
+ break;
+ case 4:
+ taskId = CreateTask(Task_DebugMenuFadeIn, 0);
+ data = AllocZeroed(sizeof(struct BattleDebugMenu));
+ SetStructPtr(taskId, data);
+
+ data->battlerId = gBattleStruct->debugBattler;
+ data->battlerWindowId = AddWindow(&sBattlerWindowTemplate);
+ PutWindowTilemap(data->battlerWindowId);
+ PrintOnBattlerWindow(data->battlerWindowId, data->battlerId);
+
+ data->mainListWindowId = AddWindow(&sMainListWindowTemplate);
+
+ gMultiuseListMenuTemplate = sMainListTemplate;
+ gMultiuseListMenuTemplate.windowId = data->mainListWindowId;
+ data->mainListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ data->currentMainListItemId = 0;
+ data->activeWindow = ACTIVE_WIN_MAIN;
+ data->secondaryListTaskId = 0xFF;
+ CopyWindowToVram(data->mainListWindowId, 3);
+ gMain.state++;
+ break;
+ case 5:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ SetVBlankCallback(VBlankCB);
+ SetMainCallback2(MainCB2);
+ return;
+ }
+}
+
+static void PutMovesPointsText(struct BattleDebugMenu *data)
+{
+ u32 i, j, count, battlerDef;
+ u8 *text = malloc(0x50);
+
+ FillWindowPixelBuffer(data->aiMovesWindowId, 0x11);
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ text[0] = CHAR_SPACE;
+ StringCopy(text + 1, gMoveNames[gBattleMons[data->aiBattlerId].moves[i]]);
+ AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 0, i * 15, 0, NULL);
+ for (count = 0, j = 0; j < MAX_BATTLERS_COUNT; j++)
+ {
+ if (data->aiIconSpriteIds[j] == 0xFF)
+ continue;
+ battlerDef = gSprites[data->aiIconSpriteIds[j]].data[0];
+ ConvertIntToDecimalStringN(text,
+ gBattleStruct->aiFinalScore[data->aiBattlerId][battlerDef][i],
+ STR_CONV_MODE_RIGHT_ALIGN, 3);
+ AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 83 + count * 54, i * 15, 0, NULL);
+
+ ConvertIntToDecimalStringN(text,
+ AI_DATA->simulatedDmg[data->aiBattlerId][battlerDef][i],
+ STR_CONV_MODE_RIGHT_ALIGN, 3);
+ AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 110 + count * 54, i * 15, 0, NULL);
+
+ count++;
+ }
+ }
+
+ CopyWindowToVram(data->aiMovesWindowId, 3);
+ free(text);
+}
+
+static void Task_ShowAiPoints(u8 taskId)
+{
+ u32 i, count;
+ struct WindowTemplate winTemplate;
+ struct BattleDebugMenu *data = GetStructPtr(taskId);
+
+ switch (data->aiViewState)
+ {
+ case 0:
+ HideBg(0);
+ ShowBg(1);
+
+ // Swap battler if it's player mon
+ data->aiBattlerId = data->battlerId;
+ while (!IsBattlerAIControlled(data->aiBattlerId))
+ {
+ if (++data->aiBattlerId >= gBattlersCount)
+ data->aiBattlerId = 0;
+ }
+
+ LoadMonIconPalettes();
+ for (count = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (i != data->aiBattlerId && IsBattlerAlive(i))
+ {
+ data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species,
+ SpriteCallbackDummy,
+ 95 + (count * 60), 17, 0, 0);
+ gSprites[data->aiIconSpriteIds[i]].data[0] = i; // battler id
+ count++;
+ }
+ else
+ {
+ data->aiIconSpriteIds[i] = 0xFF;
+ }
+ }
+ data->aiMonSpriteId = CreateMonPicSprite(gBattleMons[data->aiBattlerId].species,
+ gBattleMons[data->aiBattlerId].otId,
+ gBattleMons[data->aiBattlerId].personality,
+ TRUE,
+ 39, 130, 15, TAG_NONE);
+ data->aiViewState++;
+ break;
+ // Put text
+ case 1:
+ winTemplate = CreateWindowTemplate(1, 0, 4, 30, 14, 15, 0x200);
+ data->aiMovesWindowId = AddWindow(&winTemplate);
+ PutWindowTilemap(data->aiMovesWindowId);
+ PutMovesPointsText(data);
+
+ data->aiViewState++;
+ break;
+ // Input
+ case 2:
+ if (gMain.newKeys & (SELECT_BUTTON | B_BUTTON))
+ {
+ SwitchToDebugView(taskId);
+ HideBg(1);
+ ShowBg(0);
+ return;
+ }
+ break;
+ }
+}
+
+static void SwitchToAiPointsView(u8 taskId)
+{
+ gTasks[taskId].func = Task_ShowAiPoints;
+ GetStructPtr(taskId)->aiViewState = 0;
+}
+
+static const u8 *const sAiInfoItemNames[] =
+{
+ sText_Ability,
+ sText_HeldItem,
+ sText_HoldEffect,
+};
+static void PutAiInfoText(struct BattleDebugMenu *data)
+{
+ u32 i, j, count;
+ u8 *text = malloc(0x50);
+
+ FillWindowPixelBuffer(data->aiMovesWindowId, 0x11);
+
+ // item names
+ for (i = 0; i < ARRAY_COUNT(sAiInfoItemNames); i++)
+ {
+ AddTextPrinterParameterized(data->aiMovesWindowId, 1, sAiInfoItemNames[i], 3, i * 15, 0, NULL);
+ }
+
+ // items info
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (GET_BATTLER_SIDE(i) == B_SIDE_PLAYER && IsBattlerAlive(i))
+ {
+ u16 ability = AI_GetAbility(i);
+ u16 holdEffect = AI_GetHoldEffect(i);
+ u16 item = gBattleMons[i].item;
+ u8 x = (i == B_POSITION_PLAYER_LEFT) ? 83 + (i) * 75 : 83 + (i-1) * 75;
+ AddTextPrinterParameterized(data->aiMovesWindowId, 0, gAbilityNames[ability], x, 0, 0, NULL);
+ AddTextPrinterParameterized(data->aiMovesWindowId, 0, ItemId_GetName(item), x, 15, 0, NULL);
+ AddTextPrinterParameterized(data->aiMovesWindowId, 0, GetHoldEffectName(holdEffect), x, 30, 0, NULL);
+ }
+ }
+
+ CopyWindowToVram(data->aiMovesWindowId, 3);
+ free(text);
+}
+
+static void Task_ShowAiKnowledge(u8 taskId)
+{
+ u32 i, count;
+ struct WindowTemplate winTemplate;
+ struct BattleDebugMenu *data = GetStructPtr(taskId);
+
+ switch (data->aiViewState)
+ {
+ case 0:
+ HideBg(0);
+ ShowBg(1);
+
+ // Swap battler if it's player mon
+ data->aiBattlerId = data->battlerId;
+ while (!IsBattlerAIControlled(data->aiBattlerId))
+ {
+ if (++data->aiBattlerId >= gBattlersCount)
+ data->aiBattlerId = 0;
+ }
+
+ LoadMonIconPalettes();
+ for (count = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (GET_BATTLER_SIDE(i) == B_SIDE_PLAYER && IsBattlerAlive(i))
+ {
+ data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species,
+ SpriteCallbackDummy,
+ 95 + (count * 80), 17, 0, 0);
+ gSprites[data->aiIconSpriteIds[i]].data[0] = i; // battler id
+ count++;
+ }
+ else
+ {
+ data->aiIconSpriteIds[i] = 0xFF;
+ }
+ }
+ data->aiMonSpriteId = CreateMonPicSprite(gBattleMons[data->aiBattlerId].species,
+ gBattleMons[data->aiBattlerId].otId,
+ gBattleMons[data->aiBattlerId].personality,
+ TRUE,
+ 39, 130, 15, TAG_NONE);
+ data->aiViewState++;
+ break;
+ // Put text
+ case 1:
+ winTemplate = CreateWindowTemplate(1, 0, 4, 27, 14, 15, 0x200);
+ data->aiMovesWindowId = AddWindow(&winTemplate);
+ PutWindowTilemap(data->aiMovesWindowId);
+ PutAiInfoText(data);
+ data->aiViewState++;
+ break;
+ // Input
+ case 2:
+ if (gMain.newKeys & (SELECT_BUTTON | B_BUTTON))
+ {
+ SwitchToDebugView(taskId);
+ HideBg(1);
+ ShowBg(0);
+ return;
+ }
+ break;
+ }
+}
+
+static void SwitchToAiInfoView(u8 taskId)
+{
+ gTasks[taskId].func = Task_ShowAiKnowledge;
+ GetStructPtr(taskId)->aiViewState = 0;
+}
+
+static void SwitchToDebugView(u8 taskId)
+{
+ u32 i;
+ struct BattleDebugMenu *data = GetStructPtr(taskId);
+
+ FreeMonIconPalettes();
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (data->aiIconSpriteIds[i] != 0xFF)
+ FreeAndDestroyMonIconSprite(&gSprites[data->aiIconSpriteIds[i]]);
+ }
+ FreeAndDestroyMonPicSprite(data->aiMonSpriteId);
+ RemoveWindow(data->aiMovesWindowId);
+
+ gTasks[taskId].func = Task_DebugMenuProcessInput;
+}
+
+static void Task_DebugMenuFadeIn(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = Task_DebugMenuProcessInput;
+}
+
+static void Task_DebugMenuProcessInput(u8 taskId)
+{
+ s32 listItemId = 0;
+ struct BattleDebugMenu *data = GetStructPtr(taskId);
+
+ // Exit the menu.
+ if (gMain.newKeys & SELECT_BUTTON)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskId].func = Task_DebugMenuFadeOut;
+ return;
+ }
+
+ // Try changing active battler.
+ if (gMain.newKeys & R_BUTTON)
+ {
+ if (data->battlerId++ == gBattlersCount - 1)
+ data->battlerId = 0;
+ UpdateWindowsOnChangedBattler(data);
+ }
+ else if (gMain.newKeys & L_BUTTON)
+ {
+ if (data->battlerId-- == 0)
+ data->battlerId = gBattlersCount - 1;
+ UpdateWindowsOnChangedBattler(data);
+ }
+
+ // A main list item is active, handle input.
+ if (data->activeWindow == ACTIVE_WIN_MAIN)
+ {
+ listItemId = ListMenu_ProcessInput(data->mainListTaskId);
+ if (listItemId != LIST_CANCEL && listItemId != LIST_NOTHING_CHOSEN && listItemId < LIST_ITEM_COUNT)
+ {
+ if (listItemId == LIST_ITEM_AI_MOVES_PTS && gMain.newKeys & A_BUTTON)
+ {
+ SwitchToAiPointsView(taskId);
+ return;
+ }
+ else if (listItemId == LIST_ITEM_AI_INFO && gMain.newKeys & A_BUTTON)
+ {
+ SwitchToAiInfoView(taskId);
+ return;
+ }
+ data->currentMainListItemId = listItemId;
+
+ // Create the secondary menu list.
+ CreateSecondaryListMenu(data);
+ PrintSecondaryEntries(data);
+ data->activeWindow = ACTIVE_WIN_SECONDARY;
+ }
+ }
+ // Secondary list is active, handle input.
+ else if (data->activeWindow == ACTIVE_WIN_SECONDARY)
+ {
+ listItemId = ListMenu_ProcessInput(data->secondaryListTaskId);
+ if (listItemId == LIST_CANCEL)
+ {
+ DestroyListMenuTask(data->secondaryListTaskId, NULL, NULL);
+ ClearStdWindowAndFrameToTransparent(data->secondaryListWindowId, TRUE);
+ RemoveWindow(data->secondaryListWindowId);
+ data->activeWindow = ACTIVE_WIN_MAIN;
+ data->secondaryListTaskId = 0xFF;
+ }
+ else if (listItemId != LIST_NOTHING_CHOSEN)
+ {
+ data->currentSecondaryListItemId = listItemId;
+ data->modifyWindowId = AddWindow(&sModifyWindowTemplate);
+ PutWindowTilemap(data->modifyWindowId);
+ CopyWindowToVram(data->modifyWindowId, 3);
+ SetUpModifyArrows(data);
+ PrintDigitChars(data);
+ data->activeWindow = ACTIVE_WIN_MODIFY;
+ }
+ }
+ // Handle value modifying.
+ else if (data->activeWindow == ACTIVE_WIN_MODIFY)
+ {
+ if (gMain.newKeys & (B_BUTTON | A_BUTTON))
+ {
+ ClearStdWindowAndFrameToTransparent(data->modifyWindowId, TRUE);
+ RemoveWindow(data->modifyWindowId);
+ DestroyModifyArrows(data);
+ data->activeWindow = ACTIVE_WIN_SECONDARY;
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (data->modifyArrows.currentDigit != (data->modifyArrows.maxDigits - 1))
+ {
+ data->modifyArrows.currentDigit++;
+ gSprites[data->modifyArrows.arrowSpriteId[0]].x2 += 6;
+ gSprites[data->modifyArrows.arrowSpriteId[1]].x2 += 6;
+ }
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (data->modifyArrows.currentDigit != 0)
+ {
+ data->modifyArrows.currentDigit--;
+ gSprites[data->modifyArrows.arrowSpriteId[0]].x2 -= 6;
+ gSprites[data->modifyArrows.arrowSpriteId[1]].x2 -= 6;
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (TryMoveDigit(&data->modifyArrows, TRUE))
+ {
+ PrintDigitChars(data);
+ UpdateBattlerValue(data);
+ PrintSecondaryEntries(data);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (TryMoveDigit(&data->modifyArrows, FALSE))
+ {
+ PrintDigitChars(data);
+ UpdateBattlerValue(data);
+ PrintSecondaryEntries(data);
+ }
+ }
+ }
+}
+
+static void Task_DebugMenuFadeOut(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ struct BattleDebugMenu *data = GetStructPtr(taskId);
+ DestroyListMenuTask(data->mainListTaskId, 0, 0);
+ if (data->secondaryListTaskId != 0xFF)
+ DestroyListMenuTask(data->secondaryListTaskId, 0, 0);
+
+ FreeAllWindowBuffers();
+ UpdateMonData(data);
+ gBattleStruct->debugBattler = data->battlerId;
+ Free(data);
+ DestroyTask(taskId);
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+ }
+}
+
+static void PrintOnBattlerWindow(u8 windowId, u8 battlerId)
+{
+ u8 text[POKEMON_NAME_LENGTH + 10];
+
+ text[0] = CHAR_0 + battlerId;
+ text[1] = CHAR_SPACE;
+ text[2] = CHAR_HYPHEN;
+ text[3] = CHAR_SPACE;
+ StringCopy(&text[4], gBattleMons[battlerId].nickname);
+
+ FillWindowPixelBuffer(windowId, 0x11);
+ AddTextPrinterParameterized(windowId, 1, text, 0, 0, 0, NULL);
+ CopyWindowToVram(windowId, 3);
+}
+
+static void UpdateWindowsOnChangedBattler(struct BattleDebugMenu *data)
+{
+ PrintOnBattlerWindow(data->battlerWindowId, data->battlerId);
+ if (data->secondaryListTaskId != 0xFF)
+ {
+ DestroyListMenuTask(data->secondaryListTaskId, 0, 0);
+ RemoveWindow(data->secondaryListWindowId);
+ CreateSecondaryListMenu(data);
+ data->currentSecondaryListItemId = 0;
+ PrintSecondaryEntries(data);
+ }
+ if (data->activeWindow == ACTIVE_WIN_MODIFY)
+ {
+ DestroyModifyArrows(data);
+ SetUpModifyArrows(data);
+ PrintDigitChars(data);
+ }
+}
+
+
+static void CreateSecondaryListMenu(struct BattleDebugMenu *data)
+{
+ struct WindowTemplate winTemplate;
+ struct ListMenuTemplate listTemplate;
+ u8 itemsCount = 1;
+
+ winTemplate = sSecondaryListWindowTemplate;
+ listTemplate = sSecondaryListTemplate;
+
+ switch (data->currentMainListItemId)
+ {
+ case LIST_ITEM_ABILITY:
+ itemsCount = 1;
+ break;
+ case LIST_ITEM_HELD_ITEM:
+ itemsCount = 2;
+ break;
+ case LIST_ITEM_TYPES:
+ itemsCount = 3;
+ break;
+ case LIST_ITEM_MOVES:
+ itemsCount = 5;
+ break;
+ case LIST_ITEM_PP:
+ itemsCount = 4;
+ break;
+ case LIST_ITEM_STATS:
+ listTemplate.items = sStatsListItems;
+ itemsCount = ARRAY_COUNT(sStatsListItems);
+ break;
+ case LIST_ITEM_STAT_STAGES:
+ itemsCount = 8;
+ break;
+ case LIST_ITEM_STATUS1:
+ listTemplate.items = sStatus1ListItems;
+ itemsCount = ARRAY_COUNT(sStatus1ListItems);
+ data->bitfield = sStatus1Bitfield;
+ break;
+ case LIST_ITEM_STATUS2:
+ listTemplate.items = sStatus2ListItems;
+ itemsCount = ARRAY_COUNT(sStatus2ListItems);
+ data->bitfield = sStatus2Bitfield;
+ winTemplate.height = 1;
+ break;
+ case LIST_ITEM_STATUS3:
+ listTemplate.items = sStatus3ListItems;
+ itemsCount = ARRAY_COUNT(sStatus3ListItems);
+ data->bitfield = sStatus3Bitfield;
+ break;
+ case LIST_ITEM_STATUS4:
+ listTemplate.items = sStatus4ListItems;
+ itemsCount = ARRAY_COUNT(sStatus4ListItems);
+ data->bitfield = sStatus4Bitfield;
+ break;
+ case LIST_ITEM_AI:
+ listTemplate.items = sAIListItems;
+ itemsCount = ARRAY_COUNT(sAIListItems);
+ data->bitfield = sAIBitfield;
+ break;
+ case LIST_ITEM_VARIOUS:
+ listTemplate.items = sVariousListItems;
+ itemsCount = ARRAY_COUNT(sVariousListItems);
+ break;
+ case LIST_ITEM_SIDE_STATUS:
+ listTemplate.items = sSideStatusListItems;
+ itemsCount = ARRAY_COUNT(sSideStatusListItems);
+ break;
+ case LIST_ITEM_AI_MOVES_PTS:
+ case LIST_ITEM_AI_INFO:
+ return;
+ }
+
+ data->secondaryListItemCount = itemsCount;
+ winTemplate.height *= itemsCount;
+ data->secondaryListWindowId = AddWindow(&winTemplate);
+
+ listTemplate.totalItems = itemsCount;
+ listTemplate.maxShowed = itemsCount;
+ if (listTemplate.maxShowed > 7 && !sHasChangeableEntries[data->currentMainListItemId])
+ listTemplate.maxShowed = 7;
+ listTemplate.windowId = data->secondaryListWindowId;
+
+ data->secondaryListTaskId = ListMenuInit(&listTemplate, 0, 0);
+ CopyWindowToVram(data->secondaryListWindowId, 3);
+}
+
+static void PadString(const u8 *src, u8 *dst)
+{
+ u32 i;
+
+ for (i = 0; i < 17 && src[i] != EOS; i++)
+ dst[i] = src[i];
+
+ for (; i < 17; i++)
+ dst[i] = CHAR_SPACE;
+
+ dst[i] = EOS;
+}
+
+static const u8 sTextAll[] = _("All");
+
+static void PrintSecondaryEntries(struct BattleDebugMenu *data)
+{
+ u8 text[20];
+ s32 i;
+ struct TextPrinterTemplate printer;
+ u8 yMultiplier;
+
+ // Do not print entries if they are not changing.
+ if (!sHasChangeableEntries[data->currentMainListItemId])
+ return;
+
+ yMultiplier = (GetFontAttribute(sSecondaryListTemplate.fontId, 1) + sSecondaryListTemplate.itemVerticalPadding);
+
+ printer.windowId = data->secondaryListWindowId;
+ printer.fontId = 1;
+ printer.unk = 0;
+ printer.letterSpacing = 0;
+ printer.lineSpacing = 1;
+ printer.fgColor = 2;
+ printer.bgColor = 1;
+ printer.shadowColor = 3;
+ printer.x = sSecondaryListTemplate.item_X;
+ printer.currentX = sSecondaryListTemplate.item_X;
+ printer.currentChar = text;
+
+ switch (data->currentMainListItemId)
+ {
+ case LIST_ITEM_MOVES:
+ case LIST_ITEM_PP:
+ for (i = 0; i < 4; i++)
+ {
+ PadString(gMoveNames[gBattleMons[data->battlerId].moves[i]], text);
+ printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y;
+ AddTextPrinter(&printer, 0, NULL);
+ }
+ // Allow changing all moves at once. Useful for testing in wild doubles.
+ if (data->currentMainListItemId == LIST_ITEM_MOVES)
+ {
+ PadString(sTextAll, text);
+ printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y;
+ AddTextPrinter(&printer, 0, NULL);
+ }
+ break;
+ case LIST_ITEM_ABILITY:
+ PadString(gAbilityNames[gBattleMons[data->battlerId].ability], text);
+ printer.currentY = printer.y = sSecondaryListTemplate.upText_Y;
+ AddTextPrinter(&printer, 0, NULL);
+ break;
+ case LIST_ITEM_HELD_ITEM:
+ PadString(ItemId_GetName(gBattleMons[data->battlerId].item), text);
+ printer.currentY = printer.y = sSecondaryListTemplate.upText_Y;
+ AddTextPrinter(&printer, 0, NULL);
+
+ PadString(sText_EffectOverride, text);
+ printer.fontId = 0;
+ printer.currentY = printer.y = sSecondaryListTemplate.upText_Y + yMultiplier;
+ AddTextPrinter(&printer, 0, NULL);
+ break;
+ case LIST_ITEM_TYPES:
+ for (i = 0; i < 3; i++)
+ {
+ u8 *types = &gBattleMons[data->battlerId].type1;
+
+ PadString(gTypeNames[types[i]], text);
+ printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y;
+ AddTextPrinter(&printer, 0, NULL);
+ }
+ break;
+ case LIST_ITEM_STAT_STAGES:
+ for (i = 0; i < NUM_BATTLE_STATS - 1; i++)
+ {
+ u8 *txtPtr = StringCopy(text, gStatNamesTable[STAT_ATK + i]);
+ txtPtr[0] = CHAR_SPACE;
+ if (gBattleMons[data->battlerId].statStages[STAT_ATK + i] >= DEFAULT_STAT_STAGE)
+ {
+ txtPtr[1] = CHAR_PLUS;
+ txtPtr[2] = CHAR_0 + (gBattleMons[data->battlerId].statStages[STAT_ATK + i] - DEFAULT_STAT_STAGE);
+ }
+ else
+ {
+ txtPtr[1] = CHAR_HYPHEN;
+ txtPtr[2] = CHAR_6 - (gBattleMons[data->battlerId].statStages[STAT_ATK + i]);
+ }
+ txtPtr[3] = EOS;
+
+ PadString(text, text);
+ printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y;
+ AddTextPrinter(&printer, 0, NULL);
+ }
+ // Allow changing all stat stages at once.
+ PadString(sTextAll, text);
+ printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y;
+ AddTextPrinter(&printer, 0, NULL);
+ break;
+ }
+}
+
+static void DestroyModifyArrows(struct BattleDebugMenu *data)
+{
+ FreeSpritePaletteByTag(gSpritePalette_Arrow.tag);
+ if (data->modifyArrows.arrowSpriteId[0] != 0xFF)
+ DestroySprite(&gSprites[data->modifyArrows.arrowSpriteId[0]]);
+ if (data->modifyArrows.arrowSpriteId[1] != 0xFF)
+ DestroySprite(&gSprites[data->modifyArrows.arrowSpriteId[1]]);
+}
+
+static void PrintDigitChars(struct BattleDebugMenu *data)
+{
+ s32 i;
+ u8 text[MAX_MODIFY_DIGITS + 1];
+
+ for (i = 0; i < data->modifyArrows.maxDigits; i++)
+ text[i] = data->modifyArrows.charDigits[i];
+
+ text[i] = EOS;
+
+ AddTextPrinterParameterized(data->modifyWindowId, 1, text, 3, 0, 0, NULL);
+}
+
+static const u32 GetBitfieldToAndValue(u32 currBit, u32 bitsCount)
+{
+ u32 i;
+ u32 toAnd = 0;
+
+ for (i = 0; i < bitsCount; i++)
+ toAnd |= (1 << (currBit + i));
+
+ return toAnd;
+}
+
+static const u32 GetBitfieldValue(u32 value, u32 currBit, u32 bitsCount)
+{
+ return (value & (GetBitfieldToAndValue(currBit, bitsCount))) >> currBit;
+}
+
+static void UpdateBattlerValue(struct BattleDebugMenu *data)
+{
+ u32 i;
+ switch (data->modifyArrows.typeOfVal)
+ {
+ case VAL_U8:
+ *(u8 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue;
+ break;
+ case VAL_S8:
+ *(s8 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue;
+ break;
+ case VAL_U16:
+ *(u16 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue;
+ break;
+ case VAR_U16_4_ENTRIES:
+ ((u16 *)(data->modifyArrows.modifiedValPtr))[0] = data->modifyArrows.currValue;
+ ((u16 *)(data->modifyArrows.modifiedValPtr))[1] = data->modifyArrows.currValue;
+ ((u16 *)(data->modifyArrows.modifiedValPtr))[2] = data->modifyArrows.currValue;
+ ((u16 *)(data->modifyArrows.modifiedValPtr))[3] = data->modifyArrows.currValue;
+ break;
+ case VAL_ALL_STAT_STAGES:
+ for (i = 0; i < NUM_BATTLE_STATS; i++)
+ gBattleMons[data->battlerId].statStages[i] = data->modifyArrows.currValue;
+ break;
+ case VAL_U32:
+ *(u32 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue;
+ break;
+ case VAL_BITFIELD_32:
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~(GetBitfieldToAndValue(data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount));
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= (data->modifyArrows.currValue << data->bitfield[data->currentSecondaryListItemId].currBit);
+ break;
+ case VAR_SIDE_STATUS:
+ *GetSideStatusValue(data, TRUE, data->modifyArrows.currValue != 0) = data->modifyArrows.currValue;
+ break;
+ case VAR_SHOW_HP:
+ (*(struct BattleSpriteInfo*)(data->modifyArrows.modifiedValPtr)).hpNumbersNoBars = data->modifyArrows.currValue;
+ break;
+ case VAR_SUBSTITUTE:
+ *(u8 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue;
+ if (*(u8 *)(data->modifyArrows.modifiedValPtr) == 0)
+ {
+ gBattleMons[data->battlerId].status2 &= ~STATUS2_SUBSTITUTE;
+ gBattleSpritesDataPtr->battlerData[data->battlerId].behindSubstitute = 0;
+ }
+ else
+ {
+ gBattleMons[data->battlerId].status2 |= STATUS2_SUBSTITUTE;
+ gBattleSpritesDataPtr->battlerData[data->battlerId].behindSubstitute = 1;
+ }
+ break;
+ case VAR_IN_LOVE:
+ if (data->modifyArrows.currValue)
+ {
+ if (IsBattlerAlive(BATTLE_OPPOSITE(data->battlerId)))
+ gBattleMons[data->battlerId].status2 |= STATUS2_INFATUATED_WITH(BATTLE_OPPOSITE(data->battlerId));
+ else
+ gBattleMons[data->battlerId].status2 |= STATUS2_INFATUATED_WITH(BATTLE_PARTNER(BATTLE_OPPOSITE(data->battlerId)));
+ }
+ else
+ {
+ gBattleMons[data->battlerId].status2 &= ~STATUS2_INFATUATION;
+ }
+ break;
+ case VAL_ITEM:
+ if (data->currentSecondaryListItemId == 0)
+ *(u16 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue;
+ else if (data->currentSecondaryListItemId == 1)
+ gBattleStruct->debugHoldEffects[data->battlerId] = data->modifyArrows.currValue;
+ break;
+ }
+ data->battlerWasChanged[data->battlerId] = TRUE;
+}
+
+static u32 CharDigitsToValue(u8 *charDigits, u8 maxDigits)
+{
+ s32 i;
+ u8 id = 0;
+ u32 newValue = 0;
+ u8 valueDigits[MAX_MODIFY_DIGITS];
+
+ for (i = 0; i < MAX_MODIFY_DIGITS; i++)
+ valueDigits[i] = charDigits[i] - CHAR_0;
+
+ if (maxDigits >= MAX_MODIFY_DIGITS)
+ newValue += valueDigits[id++] * 1000;
+ if (maxDigits >= MAX_MODIFY_DIGITS - 1)
+ newValue += valueDigits[id++] * 100;
+ if (maxDigits >= MAX_MODIFY_DIGITS - 2)
+ newValue += valueDigits[id++] * 10;
+ if (maxDigits >= MAX_MODIFY_DIGITS - 3)
+ newValue += valueDigits[id++];
+
+ return newValue;
+}
+
+static void ValueToCharDigits(u8 *charDigits, u32 newValue, u8 maxDigits)
+{
+ s32 i;
+ u8 valueDigits[MAX_MODIFY_DIGITS];
+ u8 id = 0;
+
+ if (maxDigits >= MAX_MODIFY_DIGITS)
+ valueDigits[id++] = newValue / 1000;
+ if (maxDigits >= MAX_MODIFY_DIGITS - 1)
+ valueDigits[id++] = (newValue % 1000) / 100;
+ if (maxDigits >= MAX_MODIFY_DIGITS - 2)
+ valueDigits[id++] = (newValue % 100) / 10;
+ if (maxDigits >= MAX_MODIFY_DIGITS - 3)
+ valueDigits[id++] = newValue % 10;
+
+ for (i = 0; i < MAX_MODIFY_DIGITS; i++)
+ charDigits[i] = valueDigits[i] + CHAR_0;
+}
+
+static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, bool32 statusTrue)
+{
+ struct SideTimer *sideTimer = &gSideTimers[GET_BATTLER_SIDE(data->battlerId)];
+
+ switch (data->currentSecondaryListItemId)
+ {
+ case LIST_SIDE_REFLECT:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_REFLECT;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_REFLECT;
+ sideTimer->reflectBattlerId = data->battlerId;
+ }
+ return &sideTimer->reflectTimer;
+ case LIST_SIDE_LIGHTSCREEN:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_LIGHTSCREEN;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_LIGHTSCREEN;
+ sideTimer->lightscreenBattlerId = data->battlerId;
+ }
+ return &sideTimer->lightscreenTimer;
+ case LIST_SIDE_SPIKES:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_SPIKES;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_SPIKES;
+ }
+ return &sideTimer->spikesAmount;
+ case LIST_SIDE_SAFEGUARD:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_SAFEGUARD;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_SAFEGUARD;
+ sideTimer->safeguardBattlerId = data->battlerId;
+ }
+ return &sideTimer->safeguardTimer;
+ case LIST_SIDE_MIST:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_MIST;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_MIST;
+ sideTimer->mistBattlerId = data->battlerId;
+ }
+ return &sideTimer->mistTimer;
+ case LIST_SIDE_AURORA_VEIL:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_AURORA_VEIL;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_AURORA_VEIL;
+ sideTimer->auroraVeilBattlerId = data->battlerId;
+ }
+ return &sideTimer->auroraVeilTimer;
+ case LIST_SIDE_LUCKY_CHANT:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_LUCKY_CHANT;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_LUCKY_CHANT;
+ sideTimer->luckyChantBattlerId = data->battlerId;
+ }
+ return &sideTimer->luckyChantTimer;
+ case LIST_SIDE_TAILWIND:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TAILWIND;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TAILWIND;
+ sideTimer->tailwindBattlerId = data->battlerId;
+ }
+ return &sideTimer->tailwindTimer;
+ case LIST_SIDE_STEALTH_ROCK:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STEALTH_ROCK;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEALTH_ROCK;
+ }
+ return &sideTimer->stealthRockAmount;
+ case LIST_SIDE_TOXIC_SPIKES:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TOXIC_SPIKES;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TOXIC_SPIKES;
+ }
+ return &sideTimer->toxicSpikesAmount;
+ case LIST_SIDE_STICKY_WEB:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STICKY_WEB;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STICKY_WEB;
+ }
+ return &sideTimer->stickyWebAmount;
+ default:
+ return NULL;
+ }
+}
+
+static void SetUpModifyArrows(struct BattleDebugMenu *data)
+{
+ LoadSpritePalette(&gSpritePalette_Arrow);
+ data->modifyArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, 207, 12, 0);
+ data->modifyArrows.arrowSpriteId[1] = CreateSprite(&gSpriteTemplate_Arrow, 207, 36, 0);
+ gSprites[data->modifyArrows.arrowSpriteId[1]].animNum = 1;
+ switch (data->currentMainListItemId)
+ {
+ case LIST_ITEM_ABILITY:
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = ABILITIES_COUNT_GEN8 - 1;
+ data->modifyArrows.maxDigits = 3;
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].ability;
+ data->modifyArrows.typeOfVal = VAL_U16;
+ data->modifyArrows.currValue = gBattleMons[data->battlerId].ability;
+ break;
+ case LIST_ITEM_MOVES:
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = MOVES_COUNT_GEN8 - 1;
+ data->modifyArrows.maxDigits = 3;
+ if (data->currentSecondaryListItemId == 4)
+ {
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].moves[0];
+ data->modifyArrows.currValue = gBattleMons[data->battlerId].moves[0];
+ data->modifyArrows.typeOfVal = VAR_U16_4_ENTRIES;
+ }
+ else
+ {
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].moves[data->currentSecondaryListItemId];
+ data->modifyArrows.currValue = gBattleMons[data->battlerId].moves[data->currentSecondaryListItemId];
+ data->modifyArrows.typeOfVal = VAL_U16;
+ }
+ break;
+ case LIST_ITEM_PP:
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = CalculatePPWithBonus(gBattleMons[data->battlerId].moves[data->currentSecondaryListItemId], gBattleMons[data->battlerId].ppBonuses, data->currentSecondaryListItemId);
+ data->modifyArrows.maxDigits = 2;
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].pp[data->currentSecondaryListItemId];
+ data->modifyArrows.typeOfVal = VAL_U8;
+ data->modifyArrows.currValue = gBattleMons[data->battlerId].pp[data->currentSecondaryListItemId];
+ break;
+ case LIST_ITEM_HELD_ITEM:
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = ITEMS_COUNT - 1;
+ data->modifyArrows.maxDigits = 3;
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].item;
+ data->modifyArrows.typeOfVal = VAL_ITEM;
+ if (data->currentSecondaryListItemId == 0)
+ data->modifyArrows.currValue = gBattleMons[data->battlerId].item;
+ else
+ data->modifyArrows.currValue = gBattleStruct->debugHoldEffects[data->battlerId];
+ break;
+ case LIST_ITEM_TYPES:
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = NUMBER_OF_MON_TYPES - 1;
+ data->modifyArrows.maxDigits = 2;
+ data->modifyArrows.modifiedValPtr = (u8 *)((&gBattleMons[data->battlerId].type1) + data->currentSecondaryListItemId);
+ data->modifyArrows.typeOfVal = VAL_U8;
+ data->modifyArrows.currValue = *(u8 *)((&gBattleMons[data->battlerId].type1) + data->currentSecondaryListItemId);
+ break;
+ case LIST_ITEM_STATS:
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = 9999;
+ data->modifyArrows.maxDigits = 4;
+ if (data->currentSecondaryListItemId == 0)
+ {
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].hp;
+ data->modifyArrows.currValue = gBattleMons[data->battlerId].hp;
+ data->modifyArrows.minValue = 1;
+ data->modifyArrows.maxValue = gBattleMons[data->battlerId].maxHP;
+ }
+ else if (data->currentSecondaryListItemId == 1)
+ {
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].maxHP;
+ data->modifyArrows.minValue = gBattleMons[data->battlerId].hp;
+ data->modifyArrows.currValue = gBattleMons[data->battlerId].maxHP;
+ }
+ else
+ {
+ data->modifyArrows.modifiedValPtr = (u16 *)((&gBattleMons[data->battlerId].attack) + (data->currentSecondaryListItemId - 2));
+ data->modifyArrows.currValue = *(u16 *)((&gBattleMons[data->battlerId].attack) + (data->currentSecondaryListItemId - 2));
+ }
+ data->modifyArrows.typeOfVal = VAL_U16;
+ break;
+ case LIST_ITEM_STAT_STAGES:
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = 12;
+ data->modifyArrows.maxDigits = 2;
+ if (data->currentSecondaryListItemId == NUM_BATTLE_STATS - 1) // Change all stats
+ {
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].statStages[STAT_ATK];
+ data->modifyArrows.currValue = gBattleMons[data->battlerId].statStages[STAT_ATK];
+ data->modifyArrows.typeOfVal = VAL_ALL_STAT_STAGES;
+ }
+ else
+ {
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].statStages[data->currentSecondaryListItemId + STAT_ATK];
+ data->modifyArrows.typeOfVal = VAL_U8;
+ data->modifyArrows.currValue = gBattleMons[data->battlerId].statStages[data->currentSecondaryListItemId + STAT_ATK];
+ }
+ break;
+ case LIST_ITEM_VARIOUS:
+ if (data->currentSecondaryListItemId == VARIOUS_SHOW_HP)
+ {
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = 1;
+ data->modifyArrows.maxDigits = 1;
+ data->modifyArrows.modifiedValPtr = &gBattleSpritesDataPtr->battlerData[data->battlerId];
+ data->modifyArrows.typeOfVal = VAR_SHOW_HP;
+ data->modifyArrows.currValue = gBattleSpritesDataPtr->battlerData[data->battlerId].hpNumbersNoBars;
+ }
+ else if (data->currentSecondaryListItemId == VARIOUS_SUBSTITUTE_HP)
+ {
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = 255;
+ data->modifyArrows.maxDigits = 3;
+ data->modifyArrows.modifiedValPtr = &gDisableStructs[data->battlerId].substituteHP;
+ data->modifyArrows.typeOfVal = VAR_SUBSTITUTE;
+ data->modifyArrows.currValue = gDisableStructs[data->battlerId].substituteHP;
+ }
+ else if (data->currentSecondaryListItemId == VARIOUS_IN_LOVE)
+ {
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = 1;
+ data->modifyArrows.maxDigits = 1;
+ data->modifyArrows.modifiedValPtr = NULL;
+ data->modifyArrows.typeOfVal = VAR_IN_LOVE;
+ data->modifyArrows.currValue = (gBattleMons[data->battlerId].status2 & STATUS2_INFATUATION) != 0;
+ }
+ break;
+ case LIST_ITEM_STATUS1:
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].status1;
+ data->modifyArrows.currValue = GetBitfieldValue(gBattleMons[data->battlerId].status1, data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount);
+ data->modifyArrows.typeOfVal = VAL_BITFIELD_32;
+ goto CASE_ITEM_STATUS;
+ case LIST_ITEM_STATUS2:
+ data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].status2;
+ data->modifyArrows.currValue = GetBitfieldValue(gBattleMons[data->battlerId].status2, data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount);
+ data->modifyArrows.typeOfVal = VAL_BITFIELD_32;
+ goto CASE_ITEM_STATUS;
+ case LIST_ITEM_STATUS3:
+ data->modifyArrows.modifiedValPtr = &gStatuses3[data->battlerId];
+ data->modifyArrows.currValue = GetBitfieldValue(gStatuses3[data->battlerId], data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount);
+ data->modifyArrows.typeOfVal = VAL_BITFIELD_32;
+ goto CASE_ITEM_STATUS;
+ case LIST_ITEM_STATUS4:
+ data->modifyArrows.modifiedValPtr = &gStatuses4[data->battlerId];
+ data->modifyArrows.currValue = GetBitfieldValue(gStatuses4[data->battlerId], data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount);
+ data->modifyArrows.typeOfVal = VAL_BITFIELD_32;
+ goto CASE_ITEM_STATUS;
+ case LIST_ITEM_AI:
+ data->modifyArrows.modifiedValPtr = &gBattleResources->ai->aiFlags;
+ data->modifyArrows.currValue = GetBitfieldValue(gBattleResources->ai->aiFlags, data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount);
+ data->modifyArrows.typeOfVal = VAL_BITFIELD_32;
+ goto CASE_ITEM_STATUS;
+ CASE_ITEM_STATUS:
+ data->modifyArrows.minValue = 0;
+ data->modifyArrows.maxValue = (1 << data->bitfield[data->currentSecondaryListItemId].bitsCount) - 1;
+ data->modifyArrows.maxDigits = sBitsToMaxDigit[data->bitfield[data->currentSecondaryListItemId].bitsCount];
+ break;
+ case LIST_ITEM_SIDE_STATUS:
+ data->modifyArrows.minValue = 0;
+
+ if (data->currentSecondaryListItemId == LIST_SIDE_SPIKES)
+ data->modifyArrows.maxValue = 3;
+ else if (data->currentSecondaryListItemId == LIST_SIDE_STEALTH_ROCK || data->currentSecondaryListItemId == LIST_SIDE_STICKY_WEB)
+ data->modifyArrows.maxValue = 1;
+ else
+ data->modifyArrows.maxValue = 9;
+
+ data->modifyArrows.maxDigits = 2;
+ data->modifyArrows.modifiedValPtr = &gSideStatuses[GET_BATTLER_SIDE(data->battlerId)];
+ data->modifyArrows.typeOfVal = VAR_SIDE_STATUS;
+ data->modifyArrows.currValue = *GetSideStatusValue(data, FALSE, FALSE);
+ break;
+ }
+
+ data->modifyArrows.currentDigit = 0;
+ ValueToCharDigits(data->modifyArrows.charDigits, data->modifyArrows.currValue, data->modifyArrows.maxDigits);
+}
+
+static bool32 TryMoveDigit(struct BattleDebugModifyArrows *modArrows, bool32 moveUp)
+{
+ s32 i;
+ u8 charDigits[MAX_MODIFY_DIGITS];
+ u32 newValue;
+
+ for (i = 0; i < MAX_MODIFY_DIGITS; i++)
+ charDigits[i] = modArrows->charDigits[i];
+
+ if (moveUp)
+ {
+ if (charDigits[modArrows->currentDigit] == CHAR_9)
+ {
+ charDigits[modArrows->currentDigit] = CHAR_0;
+ for (i = modArrows->currentDigit - 1; i >= 0; i--)
+ {
+ if (charDigits[i] == CHAR_9)
+ {
+ charDigits[i] = CHAR_0;
+ }
+ else
+ {
+ charDigits[i]++;
+ break;
+ }
+ }
+ }
+ else
+ charDigits[modArrows->currentDigit]++;
+ }
+ else
+ {
+ if (charDigits[modArrows->currentDigit] == CHAR_0)
+ {
+ charDigits[modArrows->currentDigit] = CHAR_9;
+ for (i = modArrows->currentDigit - 1; i >= 0; i--)
+ {
+ if (charDigits[i] == CHAR_0)
+ {
+ charDigits[i] = CHAR_9;
+ }
+ else
+ {
+ charDigits[i]--;
+ break;
+ }
+ }
+ }
+ else
+ charDigits[modArrows->currentDigit]--;
+ }
+
+ newValue = CharDigitsToValue(charDigits, modArrows->maxDigits);
+ if (newValue > modArrows->maxValue || newValue < modArrows->minValue)
+ {
+ return FALSE;
+ }
+ else
+ {
+ modArrows->currValue = newValue;
+ for (i = 0; i < MAX_MODIFY_DIGITS; i++)
+ modArrows->charDigits[i] = charDigits[i];
+ return TRUE;
+ }
+}
+
+static void UpdateMonData(struct BattleDebugMenu *data)
+{
+ s32 i, j;
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (data->battlerWasChanged[i])
+ {
+ struct Pokemon *mon;
+ struct BattlePokemon *battleMon = &gBattleMons[i];
+
+ if (GetBattlerSide(i) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[i]];
+ else
+ mon = &gEnemyParty[gBattlerPartyIndexes[i]];
+
+ SetMonData(mon, MON_DATA_HELD_ITEM, &battleMon->item);
+ SetMonData(mon, MON_DATA_STATUS, &battleMon->status1);
+ SetMonData(mon, MON_DATA_HP, &battleMon->hp);
+ SetMonData(mon, MON_DATA_MAX_HP, &battleMon->maxHP);
+ for (j = 0; j < 4; j++)
+ SetMonData(mon, MON_DATA_MOVE1 + j, &battleMon->moves[j]);
+ }
+ }
+}
+
+static const u8 sText_HoldEffectNone[] = _("????????");
+static const u8 sText_HoldEffectRestoreHp[] = _("Restore Hp");
+static const u8 sText_HoldEffectCurePar[] = _("Cure Par");
+static const u8 sText_HoldEffectCureSlp[] = _("Cure Slp");
+static const u8 sText_HoldEffectCurePsn[] = _("Cure Psn");
+static const u8 sText_HoldEffectCureBrn[] = _("Cure Brn");
+static const u8 sText_HoldEffectCureFrz[] = _("Cure Frz");
+static const u8 sText_HoldEffectRestorePp[] = _("Restore Pp");
+static const u8 sText_HoldEffectCureConfusion[] = _("Cure Confusion");
+static const u8 sText_HoldEffectCureStatus[] = _("Cure Status");
+static const u8 sText_HoldEffectConfuseSpicy[] = _("Confuse Spicy");
+static const u8 sText_HoldEffectConfuseDry[] = _("Confuse Dry");
+static const u8 sText_HoldEffectConfuseSweet[] = _("Confuse Sweet");
+static const u8 sText_HoldEffectConfuseBitter[] = _("Confuse Bitter");
+static const u8 sText_HoldEffectConfuseSour[] = _("Confuse Sour");
+static const u8 sText_HoldEffectAttackUp[] = _("Attack Up");
+static const u8 sText_HoldEffectDefenseUp[] = _("Defense Up");
+static const u8 sText_HoldEffectSpeedUp[] = _("Speed Up");
+static const u8 sText_HoldEffectSpAttackUp[] = _("Sp Attack Up");
+static const u8 sText_HoldEffectSpDefenseUp[] = _("Sp Defense Up");
+static const u8 sText_HoldEffectCriticalUp[] = _("Critical Up");
+static const u8 sText_HoldEffectRandomStatUp[] = _("Random Stat Up");
+static const u8 sText_HoldEffectEvasionUp[] = _("Evasion Up");
+static const u8 sText_HoldEffectRestoreStats[] = _("Restore Stats");
+static const u8 sText_HoldEffectMachoBrace[] = _("Macho Brace");
+static const u8 sText_HoldEffectExpShare[] = _("Exp Share");
+static const u8 sText_HoldEffectQuickClaw[] = _("Quick Claw");
+static const u8 sText_HoldEffectFriendshipUp[] = _("Friendship Up");
+static const u8 sText_HoldEffectMentalHerb[] = _("Mental Herb");
+static const u8 sText_HoldEffectChoiceBand[] = _("Choice Band");
+static const u8 sText_HoldEffectFlinch[] = _("Flinch");
+static const u8 sText_HoldEffectBugPower[] = _("Bug Power");
+static const u8 sText_HoldEffectDoublePrize[] = _("Double Prize");
+static const u8 sText_HoldEffectRepel[] = _("Repel");
+static const u8 sText_HoldEffectSoulDew[] = _("Soul Dew");
+static const u8 sText_HoldEffectDeepSeaTooth[] = _("Deep Sea Tooth");
+static const u8 sText_HoldEffectDeepSeaScale[] = _("Deep Sea Scale");
+static const u8 sText_HoldEffectCanAlwaysRun[] = _("Can Always Run");
+static const u8 sText_HoldEffectPreventEvolve[] = _("Prevent Evolve");
+static const u8 sText_HoldEffectFocusBand[] = _("Focus Band");
+static const u8 sText_HoldEffectLuckyEgg[] = _("Lucky Egg");
+static const u8 sText_HoldEffectScopeLens[] = _("Scope Lens");
+static const u8 sText_HoldEffectSteelPower[] = _("Steel Power");
+static const u8 sText_HoldEffectLeftovers[] = _("Leftovers");
+static const u8 sText_HoldEffectDragonScale[] = _("Dragon Scale");
+static const u8 sText_HoldEffectLightBall[] = _("Light Ball");
+static const u8 sText_HoldEffectGroundPower[] = _("Ground Power");
+static const u8 sText_HoldEffectRockPower[] = _("Rock Power");
+static const u8 sText_HoldEffectGrassPower[] = _("Grass Power");
+static const u8 sText_HoldEffectDarkPower[] = _("Dark Power");
+static const u8 sText_HoldEffectFightingPower[] = _("Fighting Power");
+static const u8 sText_HoldEffectElectricPower[] = _("Electric Power");
+static const u8 sText_HoldEffectWaterPower[] = _("Water Power");
+static const u8 sText_HoldEffectFlyingPower[] = _("Flying Power");
+static const u8 sText_HoldEffectPoisonPower[] = _("Poison Power");
+static const u8 sText_HoldEffectIcePower[] = _("Ice Power");
+static const u8 sText_HoldEffectGhostPower[] = _("Ghost Power");
+static const u8 sText_HoldEffectPsychicPower[] = _("Psychic Power");
+static const u8 sText_HoldEffectFirePower[] = _("Fire Power");
+static const u8 sText_HoldEffectDragonPower[] = _("Dragon Power");
+static const u8 sText_HoldEffectNormalPower[] = _("Normal Power");
+static const u8 sText_HoldEffectUpgrade[] = _("Upgrade");
+static const u8 sText_HoldEffectShellBell[] = _("Shell Bell");
+static const u8 sText_HoldEffectLuckyPunch[] = _("Lucky Punch");
+static const u8 sText_HoldEffectMetalPowder[] = _("Metal Powder");
+static const u8 sText_HoldEffectThickClub[] = _("Thick Club");
+static const u8 sText_HoldEffectLeek[] = _("Leek");
+static const u8 sText_HoldEffectChoiceScarf[] = _("Choice Scarf");
+static const u8 sText_HoldEffectChoiceSpecs[] = _("Choice Specs");
+static const u8 sText_HoldEffectDampRock[] = _("Damp Rock");
+static const u8 sText_HoldEffectGripClaw[] = _("Grip Claw");
+static const u8 sText_HoldEffectHeatRock[] = _("Heat Rock");
+static const u8 sText_HoldEffectIcyRock[] = _("Icy Rock");
+static const u8 sText_HoldEffectLightClay[] = _("Light Clay");
+static const u8 sText_HoldEffectSmoothRock[] = _("Smooth Rock");
+static const u8 sText_HoldEffectPowerHerb[] = _("Power Herb");
+static const u8 sText_HoldEffectBigRoot[] = _("Big Root");
+static const u8 sText_HoldEffectExpertBelt[] = _("Expert Belt");
+static const u8 sText_HoldEffectLifeOrb[] = _("Life Orb");
+static const u8 sText_HoldEffectMetronome[] = _("Metronome");
+static const u8 sText_HoldEffectMuscleBand[] = _("Muscle Band");
+static const u8 sText_HoldEffectWideLens[] = _("Wide Lens");
+static const u8 sText_HoldEffectWiseGlasses[] = _("Wise Glasses");
+static const u8 sText_HoldEffectZoomLens[] = _("Zoom Lens");
+static const u8 sText_HoldEffectLaggingTail[] = _("Lagging Tail");
+static const u8 sText_HoldEffectFocusSash[] = _("Focus Sash");
+static const u8 sText_HoldEffectFlameOrb[] = _("Flame Orb");
+static const u8 sText_HoldEffectToxicOrb[] = _("Toxic Orb");
+static const u8 sText_HoldEffectStickyBarb[] = _("Sticky Barb");
+static const u8 sText_HoldEffectIronBall[] = _("Iron Ball");
+static const u8 sText_HoldEffectBlackSludge[] = _("Black Sludge");
+static const u8 sText_HoldEffectDestinyKnot[] = _("Destiny Knot");
+static const u8 sText_HoldEffectShedShell[] = _("Shed Shell");
+static const u8 sText_HoldEffectQuickPowder[] = _("Quick Powder");
+static const u8 sText_HoldEffectAdamantOrb[] = _("Adamant Orb");
+static const u8 sText_HoldEffectLustrousOrb[] = _("Lustrous Orb");
+static const u8 sText_HoldEffectGriseousOrb[] = _("Griseous Orb");
+static const u8 sText_HoldEffectEnigmaBerry[] = _("Enigma Berry");
+static const u8 sText_HoldEffectResistBerry[] = _("Resist Berry");
+static const u8 sText_HoldEffectPowerItem[] = _("Power Item");
+static const u8 sText_HoldEffectRestorePctHp[] = _("Restore Pct Hp");
+static const u8 sText_HoldEffectMicleBerry[] = _("Micle Berry");
+static const u8 sText_HoldEffectCustapBerry[] = _("Custap Berry");
+static const u8 sText_HoldEffectJabocaBerry[] = _("Jaboca Berry");
+static const u8 sText_HoldEffectRowapBerry[] = _("Rowap Berry");
+static const u8 sText_HoldEffectKeeBerry[] = _("Kee Berry");
+static const u8 sText_HoldEffectMarangaBerry[] = _("Maranga Berry");
+static const u8 sText_HoldEffectFloatStone[] = _("Float Stone");
+static const u8 sText_HoldEffectEviolite[] = _("Eviolite");
+static const u8 sText_HoldEffectAssaultVest[] = _("Assault Vest");
+static const u8 sText_HoldEffectDrive[] = _("Drive");
+static const u8 sText_HoldEffectGems[] = _("Gems");
+static const u8 sText_HoldEffectRockyHelmet[] = _("Rocky Helmet");
+static const u8 sText_HoldEffectAirBalloon[] = _("Air Balloon");
+static const u8 sText_HoldEffectRedCard[] = _("Red Card");
+static const u8 sText_HoldEffectRingTarget[] = _("Ring Target");
+static const u8 sText_HoldEffectBindingBand[] = _("Binding Band");
+static const u8 sText_HoldEffectEjectButton[] = _("Eject Button");
+static const u8 sText_HoldEffectAbsorbBulb[] = _("Absorb Bulb");
+static const u8 sText_HoldEffectCellBattery[] = _("Cell Battery");
+static const u8 sText_HoldEffectFairyPower[] = _("Fairy Power");
+static const u8 sText_HoldEffectMegaStone[] = _("Mega Stone");
+static const u8 sText_HoldEffectSafetyGoggles[] = _("Safety Goggles");
+static const u8 sText_HoldEffectLuminousMoss[] = _("Luminous Moss");
+static const u8 sText_HoldEffectSnowball[] = _("Snowball");
+static const u8 sText_HoldEffectWeaknessPolicy[] = _("Weakness Policy");
+static const u8 sText_HoldEffectPrimalOrb[] = _("Primal Orb");
+static const u8 sText_HoldEffectProtectivePads[] = _("Protective Pads");
+static const u8 sText_HoldEffectTerrainExtender[] = _("Terrain Extender");
+static const u8 sText_HoldEffectSeeds[] = _("Seeds");
+static const u8 sText_HoldEffectAdrenalineOrb[] = _("Adrenaline Orb");
+static const u8 sText_HoldEffectMemory[] = _("Memory");
+static const u8 sText_HoldEffectZCrystal[] = _("Z-Crystal");
+static const u8 sText_HoldEffectPlate[] = _("Plate");
+static const u8 sText_HoldEffectUtilityUmbrella[] = _("Utility Umbrella");
+static const u8 sText_HoldEffectEjectPack[] = _("Eject Pack");
+static const u8 sText_HoldEffectRoomService[] = _("Room Service");
+static const u8 sText_HoldEffectBlunderPolicy[] = _("Blunder Policy");
+static const u8 sText_HoldEffectHeavyDutyBoots[] = _("Heavy Duty Boots");
+static const u8 sText_HoldEffectThroatSpray[] = _("Throat Spray");
+static const u8 *const sHoldEffectNames[] =
+{
+ [HOLD_EFFECT_NONE] = sText_HoldEffectNone,
+ [HOLD_EFFECT_RESTORE_HP] = sText_HoldEffectRestoreHp,
+ [HOLD_EFFECT_CURE_PAR] = sText_HoldEffectCurePar,
+ [HOLD_EFFECT_CURE_SLP] = sText_HoldEffectCureSlp,
+ [HOLD_EFFECT_CURE_PSN] = sText_HoldEffectCurePsn,
+ [HOLD_EFFECT_CURE_BRN] = sText_HoldEffectCureBrn,
+ [HOLD_EFFECT_CURE_FRZ] = sText_HoldEffectCureFrz,
+ [HOLD_EFFECT_RESTORE_PP] = sText_HoldEffectRestorePp,
+ [HOLD_EFFECT_CURE_CONFUSION] = sText_HoldEffectCureConfusion,
+ [HOLD_EFFECT_CURE_STATUS] = sText_HoldEffectCureStatus,
+ [HOLD_EFFECT_CONFUSE_SPICY] = sText_HoldEffectConfuseSpicy,
+ [HOLD_EFFECT_CONFUSE_DRY] = sText_HoldEffectConfuseDry,
+ [HOLD_EFFECT_CONFUSE_SWEET] = sText_HoldEffectConfuseSweet,
+ [HOLD_EFFECT_CONFUSE_BITTER] = sText_HoldEffectConfuseBitter,
+ [HOLD_EFFECT_CONFUSE_SOUR] = sText_HoldEffectConfuseSour,
+ [HOLD_EFFECT_ATTACK_UP] = sText_HoldEffectAttackUp,
+ [HOLD_EFFECT_DEFENSE_UP] = sText_HoldEffectDefenseUp,
+ [HOLD_EFFECT_SPEED_UP] = sText_HoldEffectSpeedUp,
+ [HOLD_EFFECT_SP_ATTACK_UP] = sText_HoldEffectSpAttackUp,
+ [HOLD_EFFECT_SP_DEFENSE_UP] = sText_HoldEffectSpDefenseUp,
+ [HOLD_EFFECT_CRITICAL_UP] = sText_HoldEffectCriticalUp,
+ [HOLD_EFFECT_RANDOM_STAT_UP] = sText_HoldEffectRandomStatUp,
+ [HOLD_EFFECT_EVASION_UP] = sText_HoldEffectEvasionUp,
+ [HOLD_EFFECT_RESTORE_STATS] = sText_HoldEffectRestoreStats,
+ [HOLD_EFFECT_MACHO_BRACE] = sText_HoldEffectMachoBrace,
+ [HOLD_EFFECT_EXP_SHARE] = sText_HoldEffectExpShare,
+ [HOLD_EFFECT_QUICK_CLAW] = sText_HoldEffectQuickClaw,
+ [HOLD_EFFECT_FRIENDSHIP_UP] = sText_HoldEffectFriendshipUp,
+ [HOLD_EFFECT_MENTAL_HERB] = sText_HoldEffectMentalHerb,
+ [HOLD_EFFECT_CHOICE_BAND] = sText_HoldEffectChoiceBand,
+ [HOLD_EFFECT_FLINCH] = sText_HoldEffectFlinch,
+ [HOLD_EFFECT_BUG_POWER] = sText_HoldEffectBugPower,
+ [HOLD_EFFECT_DOUBLE_PRIZE] = sText_HoldEffectDoublePrize,
+ [HOLD_EFFECT_REPEL] = sText_HoldEffectRepel,
+ [HOLD_EFFECT_SOUL_DEW] = sText_HoldEffectSoulDew,
+ [HOLD_EFFECT_DEEP_SEA_TOOTH] = sText_HoldEffectDeepSeaTooth,
+ [HOLD_EFFECT_DEEP_SEA_SCALE] = sText_HoldEffectDeepSeaScale,
+ [HOLD_EFFECT_CAN_ALWAYS_RUN] = sText_HoldEffectCanAlwaysRun,
+ [HOLD_EFFECT_PREVENT_EVOLVE] = sText_HoldEffectPreventEvolve,
+ [HOLD_EFFECT_FOCUS_BAND] = sText_HoldEffectFocusBand,
+ [HOLD_EFFECT_LUCKY_EGG] = sText_HoldEffectLuckyEgg,
+ [HOLD_EFFECT_SCOPE_LENS] = sText_HoldEffectScopeLens,
+ [HOLD_EFFECT_STEEL_POWER] = sText_HoldEffectSteelPower,
+ [HOLD_EFFECT_LEFTOVERS] = sText_HoldEffectLeftovers,
+ [HOLD_EFFECT_DRAGON_SCALE] = sText_HoldEffectDragonScale,
+ [HOLD_EFFECT_LIGHT_BALL] = sText_HoldEffectLightBall,
+ [HOLD_EFFECT_GROUND_POWER] = sText_HoldEffectGroundPower,
+ [HOLD_EFFECT_ROCK_POWER] = sText_HoldEffectRockPower,
+ [HOLD_EFFECT_GRASS_POWER] = sText_HoldEffectGrassPower,
+ [HOLD_EFFECT_DARK_POWER] = sText_HoldEffectDarkPower,
+ [HOLD_EFFECT_FIGHTING_POWER] = sText_HoldEffectFightingPower,
+ [HOLD_EFFECT_ELECTRIC_POWER] = sText_HoldEffectElectricPower,
+ [HOLD_EFFECT_WATER_POWER] = sText_HoldEffectWaterPower,
+ [HOLD_EFFECT_FLYING_POWER] = sText_HoldEffectFlyingPower,
+ [HOLD_EFFECT_POISON_POWER] = sText_HoldEffectPoisonPower,
+ [HOLD_EFFECT_ICE_POWER] = sText_HoldEffectIcePower,
+ [HOLD_EFFECT_GHOST_POWER] = sText_HoldEffectGhostPower,
+ [HOLD_EFFECT_PSYCHIC_POWER] = sText_HoldEffectPsychicPower,
+ [HOLD_EFFECT_FIRE_POWER] = sText_HoldEffectFirePower,
+ [HOLD_EFFECT_DRAGON_POWER] = sText_HoldEffectDragonPower,
+ [HOLD_EFFECT_NORMAL_POWER] = sText_HoldEffectNormalPower,
+ [HOLD_EFFECT_UPGRADE] = sText_HoldEffectUpgrade,
+ [HOLD_EFFECT_SHELL_BELL] = sText_HoldEffectShellBell,
+ [HOLD_EFFECT_LUCKY_PUNCH] = sText_HoldEffectLuckyPunch,
+ [HOLD_EFFECT_METAL_POWDER] = sText_HoldEffectMetalPowder,
+ [HOLD_EFFECT_THICK_CLUB] = sText_HoldEffectThickClub,
+ [HOLD_EFFECT_LEEK] = sText_HoldEffectLeek,
+ [HOLD_EFFECT_CHOICE_SCARF] = sText_HoldEffectChoiceScarf,
+ [HOLD_EFFECT_CHOICE_SPECS] = sText_HoldEffectChoiceSpecs,
+ [HOLD_EFFECT_DAMP_ROCK] = sText_HoldEffectDampRock,
+ [HOLD_EFFECT_GRIP_CLAW] = sText_HoldEffectGripClaw,
+ [HOLD_EFFECT_HEAT_ROCK] = sText_HoldEffectHeatRock,
+ [HOLD_EFFECT_ICY_ROCK] = sText_HoldEffectIcyRock,
+ [HOLD_EFFECT_LIGHT_CLAY] = sText_HoldEffectLightClay,
+ [HOLD_EFFECT_SMOOTH_ROCK] = sText_HoldEffectSmoothRock,
+ [HOLD_EFFECT_POWER_HERB] = sText_HoldEffectPowerHerb,
+ [HOLD_EFFECT_BIG_ROOT] = sText_HoldEffectBigRoot,
+ [HOLD_EFFECT_EXPERT_BELT] = sText_HoldEffectExpertBelt,
+ [HOLD_EFFECT_LIFE_ORB] = sText_HoldEffectLifeOrb,
+ [HOLD_EFFECT_METRONOME] = sText_HoldEffectMetronome,
+ [HOLD_EFFECT_MUSCLE_BAND] = sText_HoldEffectMuscleBand,
+ [HOLD_EFFECT_WIDE_LENS] = sText_HoldEffectWideLens,
+ [HOLD_EFFECT_WISE_GLASSES] = sText_HoldEffectWiseGlasses,
+ [HOLD_EFFECT_ZOOM_LENS] = sText_HoldEffectZoomLens,
+ [HOLD_EFFECT_LAGGING_TAIL] = sText_HoldEffectLaggingTail,
+ [HOLD_EFFECT_FOCUS_SASH] = sText_HoldEffectFocusSash,
+ [HOLD_EFFECT_FLAME_ORB] = sText_HoldEffectFlameOrb,
+ [HOLD_EFFECT_TOXIC_ORB] = sText_HoldEffectToxicOrb,
+ [HOLD_EFFECT_STICKY_BARB] = sText_HoldEffectStickyBarb,
+ [HOLD_EFFECT_IRON_BALL] = sText_HoldEffectIronBall,
+ [HOLD_EFFECT_BLACK_SLUDGE] = sText_HoldEffectBlackSludge,
+ [HOLD_EFFECT_DESTINY_KNOT] = sText_HoldEffectDestinyKnot,
+ [HOLD_EFFECT_SHED_SHELL] = sText_HoldEffectShedShell,
+ [HOLD_EFFECT_QUICK_POWDER] = sText_HoldEffectQuickPowder,
+ [HOLD_EFFECT_ADAMANT_ORB] = sText_HoldEffectAdamantOrb,
+ [HOLD_EFFECT_LUSTROUS_ORB] = sText_HoldEffectLustrousOrb,
+ [HOLD_EFFECT_GRISEOUS_ORB] = sText_HoldEffectGriseousOrb,
+ [HOLD_EFFECT_ENIGMA_BERRY] = sText_HoldEffectEnigmaBerry,
+ [HOLD_EFFECT_RESIST_BERRY] = sText_HoldEffectResistBerry,
+ [HOLD_EFFECT_POWER_ITEM] = sText_HoldEffectPowerItem,
+ [HOLD_EFFECT_RESTORE_PCT_HP] = sText_HoldEffectRestorePctHp,
+ [HOLD_EFFECT_MICLE_BERRY] = sText_HoldEffectMicleBerry,
+ [HOLD_EFFECT_CUSTAP_BERRY] = sText_HoldEffectCustapBerry,
+ [HOLD_EFFECT_JABOCA_BERRY] = sText_HoldEffectJabocaBerry,
+ [HOLD_EFFECT_ROWAP_BERRY] = sText_HoldEffectRowapBerry,
+ [HOLD_EFFECT_KEE_BERRY] = sText_HoldEffectKeeBerry,
+ [HOLD_EFFECT_MARANGA_BERRY] = sText_HoldEffectMarangaBerry,
+ [HOLD_EFFECT_PLATE] = sText_HoldEffectPlate,
+ [HOLD_EFFECT_FLOAT_STONE] = sText_HoldEffectFloatStone,
+ [HOLD_EFFECT_EVIOLITE] = sText_HoldEffectEviolite,
+ [HOLD_EFFECT_ASSAULT_VEST] = sText_HoldEffectAssaultVest,
+ [HOLD_EFFECT_DRIVE] = sText_HoldEffectDrive,
+ [HOLD_EFFECT_GEMS] = sText_HoldEffectGems,
+ [HOLD_EFFECT_ROCKY_HELMET] = sText_HoldEffectRockyHelmet,
+ [HOLD_EFFECT_AIR_BALLOON] = sText_HoldEffectAirBalloon,
+ [HOLD_EFFECT_RED_CARD] = sText_HoldEffectRedCard,
+ [HOLD_EFFECT_RING_TARGET] = sText_HoldEffectRingTarget,
+ [HOLD_EFFECT_BINDING_BAND] = sText_HoldEffectBindingBand,
+ [HOLD_EFFECT_EJECT_BUTTON] = sText_HoldEffectEjectButton,
+ [HOLD_EFFECT_ABSORB_BULB] = sText_HoldEffectAbsorbBulb,
+ [HOLD_EFFECT_CELL_BATTERY] = sText_HoldEffectCellBattery,
+ [HOLD_EFFECT_FAIRY_POWER] = sText_HoldEffectFairyPower,
+ [HOLD_EFFECT_MEGA_STONE] = sText_HoldEffectMegaStone,
+ [HOLD_EFFECT_SAFETY_GOGGLES] = sText_HoldEffectSafetyGoggles,
+ [HOLD_EFFECT_LUMINOUS_MOSS] = sText_HoldEffectLuminousMoss,
+ [HOLD_EFFECT_SNOWBALL] = sText_HoldEffectSnowball,
+ [HOLD_EFFECT_WEAKNESS_POLICY] = sText_HoldEffectWeaknessPolicy,
+ [HOLD_EFFECT_PRIMAL_ORB] = sText_HoldEffectPrimalOrb,
+ [HOLD_EFFECT_PROTECTIVE_PADS] = sText_HoldEffectProtectivePads,
+ [HOLD_EFFECT_TERRAIN_EXTENDER] = sText_HoldEffectTerrainExtender,
+ [HOLD_EFFECT_SEEDS] = sText_HoldEffectSeeds,
+ [HOLD_EFFECT_ADRENALINE_ORB] = sText_HoldEffectAdrenalineOrb,
+ [HOLD_EFFECT_MEMORY] = sText_HoldEffectMemory,
+ [HOLD_EFFECT_Z_CRYSTAL] = sText_HoldEffectZCrystal,
+ [HOLD_EFFECT_UTILITY_UMBRELLA] = sText_HoldEffectUtilityUmbrella,
+ [HOLD_EFFECT_EJECT_PACK] = sText_HoldEffectEjectPack,
+ [HOLD_EFFECT_ROOM_SERVICE] = sText_HoldEffectRoomService,
+ [HOLD_EFFECT_BLUNDER_POLICY] = sText_HoldEffectBlunderPolicy,
+ [HOLD_EFFECT_HEAVY_DUTY_BOOTS] = sText_HoldEffectHeavyDutyBoots,
+ [HOLD_EFFECT_THROAT_SPRAY] = sText_HoldEffectThroatSpray,
+};
+static const u8 *GetHoldEffectName(u16 holdEffect)
+{
+ if (holdEffect > ARRAY_COUNT(sHoldEffectNames))
+ return sHoldEffectNames[0];
+ return sHoldEffectNames[holdEffect];
+}
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 409e0f3b98..8b3b29fc15 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -97,7 +97,7 @@ static void CB2_TourneyTree(void);
static void VblankCb_TourneyInfoCard(void);
static void DisplayMatchInfoOnCard(u8, u8);
static void DisplayTrainerInfoOnCard(u8, u8);
-static int BufferDomeWinString(u8, u8*);
+static int BufferDomeWinString(u8, u8 *);
static u8 GetDomeBrainTrainerPicId(void);
static u8 GetDomeBrainTrainerClass(void);
static void CopyDomeBrainTrainerName(u8 *);
@@ -108,8 +108,8 @@ static u8 UpdateTourneyTreeCursor(u8);
static void DecideRoundWinners(u8);
static u8 GetOpposingNPCTournamentIdByRound(u8, u8);
static void DrawTourneyAdvancementLine(u8, u8);
-static void SpriteCb_HorizontalScrollArrow(struct Sprite *);
-static void SpriteCb_VerticalScrollArrow(struct Sprite *);
+static void SpriteCB_HorizontalScrollArrow(struct Sprite *);
+static void SpriteCB_VerticalScrollArrow(struct Sprite *);
static void InitDomeChallenge(void);
static void GetDomeData(void);
static void SetDomeData(void);
@@ -894,7 +894,7 @@ static const struct OamData sOamData_TourneyTreePokeball =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -912,7 +912,7 @@ static const struct OamData sOamData_TourneyTreeCloseButton =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
@@ -929,7 +929,7 @@ static const struct OamData sOamData_VerticalScrollArrow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x8),
.x = 0,
@@ -946,7 +946,7 @@ static const struct OamData sOamData_HorizontalScrollArrow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x16),
.x = 0,
@@ -1089,7 +1089,7 @@ static const struct SpriteTemplate sHorizontalScrollArrowSpriteTemplate =
.anims = sSpriteAnimTable_HorizontalScrollArrow,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCb_HorizontalScrollArrow
+ .callback = SpriteCB_HorizontalScrollArrow
};
static const struct SpriteTemplate sVerticalScrollArrowSpriteTemplate =
@@ -1100,7 +1100,7 @@ static const struct SpriteTemplate sVerticalScrollArrowSpriteTemplate =
.anims = sSpriteAnimTable_VerticalScrollArrow,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCb_VerticalScrollArrow
+ .callback = SpriteCB_VerticalScrollArrow
};
// Organized by seed starting position, i.e. seed 0 battles seed 8 first
@@ -2763,38 +2763,21 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode)
{
typePower = 8;
#ifdef BUGFIX
- return;
+ return typePower;
#endif
}
}
else
{
- // Calculate a "type power" value to determine the benefit of using this type move against the target.
- // This value will then be used to get the number of points to assign to the move.
- while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
- {
- if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
- {
- i += 3;
- continue;
- }
- if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
- {
- // BUG: the value of TYPE_x2 does not exist in gTypeEffectiveness, so if defAbility is ABILITY_WONDER_GUARD, the conditional always fails
- #ifndef BUGFIX
- #define WONDER_GUARD_EFFECTIVENESS TYPE_x2
- #else
- #define WONDER_GUARD_EFFECTIVENESS TYPE_MUL_SUPER_EFFECTIVE
- #endif
- if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
- if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == WONDER_GUARD_EFFECTIVENESS) || defAbility != ABILITY_WONDER_GUARD)
- typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
- if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
- if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == WONDER_GUARD_EFFECTIVENESS) || defAbility != ABILITY_WONDER_GUARD)
- typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
- }
- i += 3;
- }
+ u32 typeEffectiveness1 = UQ_4_12_TO_INT(GetTypeModifier(moveType, defType1) * 2) * 5;
+ u32 typeEffectiveness2 = UQ_4_12_TO_INT(GetTypeModifier(moveType, defType2) * 2) * 5;
+
+ typePower = (typeEffectiveness1 * typePower) / 10;
+ if (defType2 != defType1)
+ typePower = (typeEffectiveness2 * typePower) / 10;
+
+ if (defAbility == ABILITY_WONDER_GUARD && typeEffectiveness1 != TYPE_x1 && typeEffectiveness2 != TYPE_x1)
+ typePower = 0;
}
switch (mode)
@@ -3115,7 +3098,7 @@ static void Task_ShowTourneyInfoCard(u8 taskId)
// Note: Card scrolling up means the current card goes down and another one appears from top.
// The same is true for scrolling left.
// That means that the sprite needs to move with the moving card in the opposite scrolling direction.
-static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite)
+static void SpriteCB_TrainerIconCardScrollUp(struct Sprite *sprite)
{
sprite->y += 4;
if (sprite->data[0] != 0)
@@ -3135,7 +3118,7 @@ static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite)
}
}
-static void SpriteCb_TrainerIconCardScrollDown(struct Sprite *sprite)
+static void SpriteCB_TrainerIconCardScrollDown(struct Sprite *sprite)
{
sprite->y -= 4;
if (sprite->data[0] != 0)
@@ -3155,7 +3138,7 @@ static void SpriteCb_TrainerIconCardScrollDown(struct Sprite *sprite)
}
}
-static void SpriteCb_TrainerIconCardScrollLeft(struct Sprite *sprite)
+static void SpriteCB_TrainerIconCardScrollLeft(struct Sprite *sprite)
{
sprite->x += 4;
if (sprite->data[0] != 0)
@@ -3175,7 +3158,7 @@ static void SpriteCb_TrainerIconCardScrollLeft(struct Sprite *sprite)
}
}
-static void SpriteCb_TrainerIconCardScrollRight(struct Sprite *sprite)
+static void SpriteCB_TrainerIconCardScrollRight(struct Sprite *sprite)
{
sprite->x -= 4;
if (sprite->data[0] != 0)
@@ -3197,13 +3180,13 @@ static void SpriteCb_TrainerIconCardScrollRight(struct Sprite *sprite)
#define sMonIconStill data[3]
-static void SpriteCb_MonIcon(struct Sprite *sprite)
+static void SpriteCB_MonIconDomeInfo(struct Sprite *sprite)
{
if (!sprite->sMonIconStill)
UpdateMonIconFrame(sprite);
}
-static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite)
+static void SpriteCB_MonIconCardScrollUp(struct Sprite *sprite)
{
if (!sprite->sMonIconStill)
UpdateMonIconFrame(sprite);
@@ -3213,7 +3196,7 @@ static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite)
if (sprite->y >= -16)
sprite->invisible = FALSE;
if (++sprite->data[1] == 40)
- sprite->callback = SpriteCb_MonIcon;
+ sprite->callback = SpriteCB_MonIconDomeInfo;
}
else
{
@@ -3225,7 +3208,7 @@ static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite)
}
}
-static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite)
+static void SpriteCB_MonIconCardScrollDown(struct Sprite *sprite)
{
if (!sprite->sMonIconStill)
UpdateMonIconFrame(sprite);
@@ -3235,7 +3218,7 @@ static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite)
if (sprite->y <= 176)
sprite->invisible = FALSE;
if (++sprite->data[1] == 40)
- sprite->callback = SpriteCb_MonIcon;
+ sprite->callback = SpriteCB_MonIconDomeInfo;
}
else
{
@@ -3247,7 +3230,7 @@ static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite)
}
}
-static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite)
+static void SpriteCB_MonIconCardScrollLeft(struct Sprite *sprite)
{
if (!sprite->sMonIconStill)
UpdateMonIconFrame(sprite);
@@ -3257,7 +3240,7 @@ static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite)
if (sprite->x >= -16)
sprite->invisible = FALSE;
if (++sprite->data[1] == 64)
- sprite->callback = SpriteCb_MonIcon;
+ sprite->callback = SpriteCB_MonIconDomeInfo;
}
else
{
@@ -3269,7 +3252,7 @@ static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite)
}
}
-static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite)
+static void SpriteCB_MonIconCardScrollRight(struct Sprite *sprite)
{
if (!sprite->sMonIconStill)
UpdateMonIconFrame(sprite);
@@ -3279,7 +3262,7 @@ static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite)
if (sprite->x <= DISPLAY_WIDTH + 16)
sprite->invisible = FALSE;
if (++sprite->data[1] == 64)
- sprite->callback = SpriteCb_MonIcon;
+ sprite->callback = SpriteCB_MonIconDomeInfo;
}
else
{
@@ -3291,7 +3274,7 @@ static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite)
}
}
-static void SpriteCb_HorizontalScrollArrow(struct Sprite *sprite)
+static void SpriteCB_HorizontalScrollArrow(struct Sprite *sprite)
{
int taskId1 = sprite->data[0];
int arrId = gTasks[gTasks[taskId1].data[4]].data[1];
@@ -3360,7 +3343,7 @@ static void SpriteCb_HorizontalScrollArrow(struct Sprite *sprite)
}
}
-static void SpriteCb_VerticalScrollArrow(struct Sprite *sprite)
+static void SpriteCB_VerticalScrollArrow(struct Sprite *sprite)
{
int taskId1 = sprite->data[0];
@@ -3526,7 +3509,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollUp;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollUp;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3537,7 +3520,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollUp;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollUp;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3550,7 +3533,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollUp;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollUp;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3561,7 +3544,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollUp;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollUp;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3642,7 +3625,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollDown;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollDown;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3653,7 +3636,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollDown;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollDown;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3666,7 +3649,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollDown;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollDown;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3677,7 +3660,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollDown;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollDown;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3725,7 +3708,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollLeft;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3736,7 +3719,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollLeft;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3749,7 +3732,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollLeft;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3760,7 +3743,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollLeft;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3808,7 +3791,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollLeft;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3819,7 +3802,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollLeft;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3832,7 +3815,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollLeft;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3843,7 +3826,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollLeft;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3889,7 +3872,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollRight;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3900,7 +3883,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollRight;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3913,7 +3896,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollRight;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3924,7 +3907,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollRight;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3972,7 +3955,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollRight;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3983,7 +3966,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollRight;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -3996,7 +3979,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_TrainerIconCardScrollRight;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -4007,7 +3990,7 @@ static void Task_HandleInfoCardInput(u8 taskId)
{
if (sInfoCard->spriteIds[i] != SPRITE_NONE)
{
- gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCB_MonIconCardScrollRight;
gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
gSprites[sInfoCard->spriteIds[i]].data[2] = i;
@@ -4297,7 +4280,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
if (trainerId == TRAINER_PLAYER)
{
sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[trainerTourneyId][i],
- SpriteCb_MonIcon,
+ SpriteCB_MonIconDomeInfo,
x | sInfoTrainerMonX[i],
y + sInfoTrainerMonY[i],
0, 0);
@@ -4306,7 +4289,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
else if (trainerId == TRAINER_FRONTIER_BRAIN)
{
sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[trainerTourneyId][i],
- SpriteCb_MonIcon,
+ SpriteCB_MonIconDomeInfo,
x | sInfoTrainerMonX[i],
y + sInfoTrainerMonY[i],
0, 0);
@@ -4315,7 +4298,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
else
{
sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].species,
- SpriteCb_MonIcon,
+ SpriteCB_MonIconDomeInfo,
x | sInfoTrainerMonX[i],
y + sInfoTrainerMonY[i],
0, 0);
@@ -4563,7 +4546,6 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
// If 2 good stats have been found already, choose which to use
if (i == 2)
{
-
if (allocatedArray[6] < allocatedArray[k])
{
if (allocatedArray[7] < allocatedArray[k])
@@ -4786,7 +4768,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
if (trainerIds[0] == TRAINER_PLAYER)
{
sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[0]][i],
- SpriteCb_MonIcon,
+ SpriteCB_MonIconDomeInfo,
x | sLeftTrainerMonX[i],
y + sLeftTrainerMonY[i],
0, 0);
@@ -4795,7 +4777,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN)
{
sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[0]][i],
- SpriteCb_MonIcon,
+ SpriteCB_MonIconDomeInfo,
x | sLeftTrainerMonX[i],
y + sLeftTrainerMonY[i],
0, 0);
@@ -4804,7 +4786,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
else
{
sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[DOME_MONS[tournamentIds[0]][i]].species,
- SpriteCb_MonIcon,
+ SpriteCB_MonIconDomeInfo,
x | sLeftTrainerMonX[i],
y + sLeftTrainerMonY[i],
0, 0);
@@ -4826,7 +4808,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
if (trainerIds[1] == TRAINER_PLAYER)
{
sInfoCard->spriteIds[5 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[1]][i],
- SpriteCb_MonIcon,
+ SpriteCB_MonIconDomeInfo,
x | sRightTrainerMonX[i],
y + sRightTrainerMonY[i],
0, 0);
@@ -4835,7 +4817,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN)
{
sInfoCard->spriteIds[5 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[1]][i],
- SpriteCb_MonIcon,
+ SpriteCB_MonIconDomeInfo,
x | sRightTrainerMonX[i],
y + sRightTrainerMonY[i],
0, 0);
@@ -4844,7 +4826,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
else
{
sInfoCard->spriteIds[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[DOME_MONS[tournamentIds[1]][i]].species,
- SpriteCb_MonIcon,
+ SpriteCB_MonIconDomeInfo,
x | sRightTrainerMonX[i],
y + sRightTrainerMonY[i],
0, 0);
@@ -5194,28 +5176,28 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
for (k = 0; k < FRONTIER_PARTY_SIZE; k++)
{
- u32 var = 0;
- u16 targetSpecies = SPECIES_NONE;
- u16 targetAbility = ABILITY_NONE;
+ u32 personality = 0;
+ u32 targetSpecies = 0;
+ u32 targetAbility = 0;
+ u32 typeMultiplier = 0;
do
{
- var = Random32();
- } while (gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].nature != GetNatureFromPersonality(var));
+ personality = Random32();
+ } while (gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].nature != GetNatureFromPersonality(personality));
targetSpecies = gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].species;
- if (var & 1)
+
+ if (personality & 1)
targetAbility = gBaseStats[targetSpecies].abilities[1];
else
targetAbility = gBaseStats[targetSpecies].abilities[0];
- var = AI_TypeCalc(moveIds[i * MAX_MON_MOVES + j], targetSpecies, targetAbility);
- if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE && var & MOVE_RESULT_SUPER_EFFECTIVE)
- moveScores[i * MAX_MON_MOVES + j] += movePower;
- else if (var & MOVE_RESULT_NO_EFFECT)
+ typeMultiplier = CalcPartyMonTypeEffectivenessMultiplier(moveIds[i * 4 + j], targetSpecies, targetAbility);
+ if (typeMultiplier == UQ_4_12(0))
moveScores[i * MAX_MON_MOVES + j] += 0;
- else if (var & MOVE_RESULT_SUPER_EFFECTIVE)
+ else if (typeMultiplier >= UQ_4_12(2))
moveScores[i * MAX_MON_MOVES + j] += movePower * 2;
- else if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE)
+ else if (typeMultiplier <= UQ_4_12(0.5))
moveScores[i * MAX_MON_MOVES + j] += movePower / 2;
else
moveScores[i * MAX_MON_MOVES + j] += movePower;
diff --git a/src/battle_factory.c b/src/battle_factory.c
index a68ef81809..12e477e323 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -893,13 +893,13 @@ u32 GetAiScriptsInBattleFactory(void)
int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
- return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY;
+ return AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY;
else if (challengeNum < 2)
return 0;
else if (challengeNum < 4)
- return AI_SCRIPT_CHECK_BAD_MOVE;
+ return AI_FLAG_CHECK_BAD_MOVE;
else
- return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY;
+ return AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY;
}
}
diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c
index 3085277022..6f9a2efb3a 100644
--- a/src/battle_factory_screen.c
+++ b/src/battle_factory_screen.c
@@ -410,7 +410,7 @@ static const struct OamData sOam_Select_Pokeball =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -427,7 +427,7 @@ static const struct OamData sOam_Select_Arrow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -444,7 +444,7 @@ static const struct OamData sOam_Select_MenuHighlight =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
@@ -461,7 +461,7 @@ static const struct OamData sOam_Select_MonPicBgAnim =
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_BLEND,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -661,7 +661,7 @@ static const struct OamData sOam_Swap_Pokeball =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -678,7 +678,7 @@ static const struct OamData sOam_Swap_Arrow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -695,7 +695,7 @@ static const struct OamData sOam_Swap_MenuHighlight =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
@@ -712,7 +712,7 @@ static const struct OamData sOam_Swap_MonPicBgAnim =
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_BLEND,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -1747,9 +1747,9 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId)
u16 monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
sFactorySelectScreen->mons[i + firstMonId].monId = monId;
if (i < rentalRank)
- ivs = GetFactoryMonFixedIV(challengeNum + 1, 0);
+ ivs = GetFactoryMonFixedIV(challengeNum + 1, FALSE);
else
- ivs = GetFactoryMonFixedIV(challengeNum, 0);
+ ivs = GetFactoryMonFixedIV(challengeNum, FALSE);
CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
gFacilityTrainerMons[monId].species,
level,
@@ -2473,7 +2473,7 @@ static void Swap_Task_HandleYesNo(u8 taskId)
gTasks[taskId].tSaidYes = TRUE;
hiPtr = gTasks[taskId].tFollowUpTaskPtrHi;
loPtr = gTasks[taskId].tFollowUpTaskPtrLo;
- gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr);
+ gTasks[taskId].func = (void *)((hiPtr << 16) | loPtr);
}
else
{
@@ -2482,7 +2482,7 @@ static void Swap_Task_HandleYesNo(u8 taskId)
Swap_ErasePopupMenu(SWAP_WIN_YES_NO);
hiPtr = gTasks[taskId].tFollowUpTaskPtrHi;
loPtr = gTasks[taskId].tFollowUpTaskPtrLo;
- gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr);
+ gTasks[taskId].func = (void *)((hiPtr << 16) | loPtr);
}
}
else if (JOY_NEW(B_BUTTON))
@@ -2492,7 +2492,7 @@ static void Swap_Task_HandleYesNo(u8 taskId)
Swap_ErasePopupMenu(SWAP_WIN_YES_NO);
hiPtr = gTasks[taskId].tFollowUpTaskPtrHi;
loPtr = gTasks[taskId].tFollowUpTaskPtrLo;
- gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr);
+ gTasks[taskId].func = (void *)((hiPtr << 16) | loPtr);
}
else if (JOY_REPEAT(DPAD_UP))
{
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 7a4e10b710..8cd23098f2 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "battle.h"
#include "battle_controllers.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_interface.h"
@@ -23,17 +23,18 @@
#include "palette.h"
#include "contest.h"
#include "constants/songs.h"
+#include "constants/battle_config.h"
#include "constants/rgb.h"
#include "constants/battle_palace.h"
extern const u8 gBattlePalaceNatureToMoveTarget[];
-extern const u8 * const gBattleAnims_General[];
-extern const u8 * const gBattleAnims_Special[];
+extern const u8 *const gBattleAnims_General[];
+extern const u8 *const gBattleAnims_Special[];
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
// this file's functions
-static u8 GetBattlePalaceMoveGroup(u16 move);
+static u8 GetBattlePalaceMoveGroup(u8 battlerId, u16 move);
static u16 GetBattlePalaceTarget(void);
static void SpriteCB_TrainerSlideVertical(struct Sprite *sprite);
static bool8 ShouldAnimBeDoneRegardlessOfSubstitute(u8 animId);
@@ -114,7 +115,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
{
s32 i, var1, var2;
s32 chosenMoveId = -1;
- struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
u8 unusableMovesBits = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL);
s32 percent = Random() % 100;
@@ -154,7 +155,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
{
if (moveInfo->moves[i] == MOVE_NONE)
break;
- if (selectedGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i]) && moveInfo->currentPp[i] != 0)
+ if (selectedGroup == GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i]) && moveInfo->currentPp[i] != 0)
selectedMoves |= gBitTable[i];
}
@@ -180,11 +181,11 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
{
// 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
- if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits))
+ if (GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits))
validMoveFlags += (1 << 0);
- if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits))
+ if (GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits))
validMoveFlags += (1 << 4);
- if (GetBattlePalaceMoveGroup(moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits))
+ if (GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits))
validMoveFlags += (1 << 8);
}
@@ -221,7 +222,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
do
{
i = Random() % MAX_MON_MOVES;
- if (!(gBitTable[i] & unusableMovesBits) && validMoveGroup == GetBattlePalaceMoveGroup(moveInfo->moves[i]))
+ if (!(gBitTable[i] & unusableMovesBits) && validMoveGroup == GetBattlePalaceMoveGroup(gActiveBattler, moveInfo->moves[i]))
chosenMoveId = i;
} while (chosenMoveId == -1);
}
@@ -243,14 +244,14 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
if (moveInfo->moves[chosenMoveId] == MOVE_CURSE)
{
- if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
+ if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST && moveInfo->monType3 != TYPE_GHOST)
moveTarget = MOVE_TARGET_USER;
else
moveTarget = MOVE_TARGET_SELECTED;
}
else
{
- moveTarget = gBattleMoves[moveInfo->moves[chosenMoveId]].target;
+ moveTarget = GetBattlerMoveTargetType(gActiveBattler, moveInfo->moves[chosenMoveId]);
}
if (moveTarget & MOVE_TARGET_USER)
@@ -272,9 +273,9 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
#undef numValidMoveGroups
#undef validMoveGroup
-static u8 GetBattlePalaceMoveGroup(u16 move)
+static u8 GetBattlePalaceMoveGroup(u8 battlerId, u16 move)
{
- switch (gBattleMoves[move].target)
+ switch (GetBattlerMoveTargetType(battlerId, move))
{
case MOVE_TARGET_SELECTED:
case MOVE_TARGET_USER_OR_SELECTED:
@@ -458,6 +459,12 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 de
return TRUE;
}
+ if (tableId == B_ANIM_ILLUSION_OFF)
+ {
+ gBattleStruct->illusion[activeBattler].broken = 1;
+ gBattleStruct->illusion[activeBattler].on = 0;
+ }
+
gBattleAnimAttacker = atkBattler;
gBattleAnimTarget = defBattler;
gBattleSpritesDataPtr->animationData->animArg = argument;
@@ -523,12 +530,6 @@ static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
#undef tBattlerId
-// Great function to include newly added moves that don't have animation yet.
-bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
-{
- return FALSE;
-}
-
// Check if SE has finished or 30 calls, whichever comes first
bool8 IsBattleSEPlaying(u8 battlerId)
{
@@ -553,16 +554,15 @@ bool8 IsBattleSEPlaying(u8 battlerId)
return TRUE;
}
-void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
+static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 opponent)
{
- u32 monsPersonality, currentPersonality, otId;
- u16 species;
- u8 position;
- u16 paletteOffset;
+ u32 monsPersonality, currentPersonality, otId, species, paletteOffset, position;
const void *lzPaletteData;
+ struct Pokemon *illusionMon = GetIllusionMonPtr(battlerId);
+ if (illusionMon != NULL)
+ mon = illusionMon;
monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
-
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
{
species = GetMonData(mon, MON_DATA_SPECIES);
@@ -576,9 +576,18 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
otId = GetMonData(mon, MON_DATA_OT_ID);
position = GetBattlerPosition(battlerId);
- HandleLoadSpecialPokePic(&gMonFrontPicTable[species],
- gMonSpritesGfxPtr->sprites.ptr[position],
- species, currentPersonality);
+ if (opponent)
+ {
+ HandleLoadSpecialPokePic(&gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->sprites.ptr[position],
+ species, currentPersonality);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic(&gMonBackPicTable[species],
+ gMonSpritesGfxPtr->sprites.ptr[position],
+ species, currentPersonality);
+ }
paletteOffset = 0x100 + battlerId * 16;
@@ -591,7 +600,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
LoadPalette(gDecompressionBuffer, paletteOffset, 0x20);
LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20);
- if (species == SPECIES_CASTFORM)
+ if (species == SPECIES_CASTFORM || species == SPECIES_CHERRIM)
{
paletteOffset = 0x100 + battlerId * 16;
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette);
@@ -606,63 +615,14 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
}
}
+void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
+{
+ BattleLoadMonSpriteGfx(mon, battlerId, TRUE);
+}
+
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
{
- u32 monsPersonality, currentPersonality, otId;
- u16 species;
- u8 position;
- u16 paletteOffset;
- const void *lzPaletteData;
-
- monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
-
- if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
- {
- species = GetMonData(mon, MON_DATA_SPECIES);
- currentPersonality = monsPersonality;
- }
- else
- {
- species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
- currentPersonality = gTransformedPersonalities[battlerId];
- }
-
- otId = GetMonData(mon, MON_DATA_OT_ID);
- position = GetBattlerPosition(battlerId);
-
- HandleLoadSpecialPokePic(&gMonBackPicTable[species],
- gMonSpritesGfxPtr->sprites.ptr[position],
- species, currentPersonality);
-
- paletteOffset = 0x100 + battlerId * 16;
-
- if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
- lzPaletteData = GetMonFrontSpritePal(mon);
- else
- lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality);
-
- LZDecompressWram(lzPaletteData, gDecompressionBuffer);
- LoadPalette(gDecompressionBuffer, paletteOffset, 0x20);
- LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20);
-
- if (species == SPECIES_CASTFORM)
- {
- paletteOffset = 0x100 + battlerId * 16;
- LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette);
- LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
- }
-
- // transform's pink color
- if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
- {
- BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
- CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
- }
-}
-
-// Unused
-static void BattleGfxSfxDummy1(void)
-{
+ BattleLoadMonSpriteGfx(mon, battlerId, FALSE);
}
void BattleGfxSfxDummy2(u16 species)
@@ -887,18 +847,61 @@ void CopyBattleSpriteInvisibility(u8 battlerId)
gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible;
}
-void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform)
+void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform, bool32 megaEvo)
{
- u16 paletteOffset;
- u32 personalityValue;
- u32 otId;
- u8 position;
- const u32 *lzPaletteData;
+ u32 personalityValue, otId, position, paletteOffset, targetSpecies;
+ const void *lzPaletteData, *src;
+ void *dst;
+
+ if (IsContest())
+ {
+ position = B_POSITION_PLAYER_LEFT;
+ targetSpecies = gContestResources->moveAnim->targetSpecies;
+ personalityValue = gContestResources->moveAnim->personality;
+ otId = gContestResources->moveAnim->otId;
+
+ HandleLoadSpecialPokePic(&gMonBackPicTable[targetSpecies],
+ gMonSpritesGfxPtr->sprites.ptr[position],
+ targetSpecies,
+ gContestResources->moveAnim->targetPersonality);
+ }
+ else
+ {
+ position = GetBattlerPosition(battlerAtk);
+
+ if (GetBattlerSide(battlerDef) == B_SIDE_OPPONENT)
+ targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
+ else
+ targetSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
+
+ if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER)
+ {
+ personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
+
+ HandleLoadSpecialPokePic(&gMonBackPicTable[targetSpecies],
+ gMonSpritesGfxPtr->sprites.ptr[position],
+ targetSpecies,
+ gTransformedPersonalities[battlerAtk]);
+ }
+ else
+ {
+ personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
+
+ HandleLoadSpecialPokePic(&gMonFrontPicTable[targetSpecies],
+ gMonSpritesGfxPtr->sprites.ptr[position],
+ targetSpecies,
+ gTransformedPersonalities[battlerAtk]);
+ }
+ }
if (castform)
{
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleSpritesDataPtr->animationData->animArg);
paletteOffset = 0x100 + battlerAtk * 16;
+ lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue);
+ LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette);
LoadPalette(gBattleStruct->castformPalette[gBattleSpritesDataPtr->animationData->animArg], paletteOffset, 32);
gBattleMonForms[battlerAtk] = gBattleSpritesDataPtr->animationData->animArg;
if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies != SPECIES_NONE)
@@ -910,53 +913,6 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform)
}
else
{
- const void *src;
- void *dst;
- u16 targetSpecies;
-
- if (IsContest())
- {
- position = B_POSITION_PLAYER_LEFT;
- targetSpecies = gContestResources->moveAnim->targetSpecies;
- personalityValue = gContestResources->moveAnim->personality;
- otId = gContestResources->moveAnim->otId;
-
- HandleLoadSpecialPokePic(&gMonBackPicTable[targetSpecies],
- gMonSpritesGfxPtr->sprites.ptr[position],
- targetSpecies,
- gContestResources->moveAnim->targetPersonality);
- }
- else
- {
- position = GetBattlerPosition(battlerAtk);
-
- if (GetBattlerSide(battlerDef) == B_SIDE_OPPONENT)
- targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
- else
- targetSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
-
- if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER)
- {
- personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
- otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
-
- HandleLoadSpecialPokePic(&gMonBackPicTable[targetSpecies],
- gMonSpritesGfxPtr->sprites.ptr[position],
- targetSpecies,
- gTransformedPersonalities[battlerAtk]);
- }
- else
- {
- personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
- otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
-
- HandleLoadSpecialPokePic(&gMonFrontPicTable[targetSpecies],
- gMonSpritesGfxPtr->sprites.ptr[position],
- targetSpecies,
- gTransformedPersonalities[battlerAtk]);
- }
- }
-
src = gMonSpritesGfxPtr->sprites.ptr[position];
dst = (void *)(OBJ_VRAM0 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32);
DmaCopy32(3, src, dst, MON_PIC_SIZE);
@@ -965,17 +921,20 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform)
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
LoadPalette(gDecompressionBuffer, paletteOffset, 32);
- if (targetSpecies == SPECIES_CASTFORM)
+ if (targetSpecies == SPECIES_CASTFORM || targetSpecies == SPECIES_CHERRIM)
{
gSprites[gBattlerSpriteIds[battlerAtk]].anims = gMonFrontAnimsPtrTable[targetSpecies];
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette);
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerDef]], paletteOffset, 32);
}
- BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
- CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
+ if (!megaEvo)
+ {
+ BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
+ CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
+ }
- if (!IsContest())
+ if (!IsContest() && !megaEvo)
{
gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies = targetSpecies;
gBattleMonForms[battlerAtk] = gBattleMonForms[battlerDef];
@@ -1194,7 +1153,7 @@ void SpriteCB_SetInvisible(struct Sprite *sprite)
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species)
{
// The player's shadow is never seen.
- if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER || gBattleScripting.monCaught)
return;
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
@@ -1214,7 +1173,7 @@ void HideBattlerShadowSprite(u8 battlerId)
// Color the background tiles surrounding the action selection and move windows
void FillAroundBattleWindows(void)
{
- u16 *vramPtr = (u16*)(VRAM + 0x240);
+ u16 *vramPtr = (u16 *)(VRAM + 0x240);
s32 i;
s32 j;
diff --git a/src/battle_interface.c b/src/battle_interface.c
index dbcab4a9cc..a504cf1c0e 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -1,8 +1,10 @@
#include "global.h"
+#include "malloc.h"
#include "battle.h"
#include "pokemon.h"
#include "battle_controllers.h"
#include "battle_interface.h"
+#include "battle_z_move.h"
#include "graphics.h"
#include "sprite.h"
#include "window.h"
@@ -22,18 +24,15 @@
#include "data.h"
#include "pokemon_summary_screen.h"
#include "strings.h"
+#include "battle_debug.h"
+#include "item.h"
+#include "item_icon.h"
+#include "item_use.h"
#include "constants/battle_anim.h"
#include "constants/rgb.h"
#include "constants/songs.h"
-
-struct TestingBar
-{
- s32 maxValue;
- s32 oldValue;
- s32 receivedValue;
- u32 unkC_0:5;
- u32 unk10;
-};
+#include "constants/battle_config.h"
+#include "constants/items.h"
enum
{ // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c
@@ -159,7 +158,7 @@ enum
};
static const u8 *GetHealthboxElementGfxPtr(u8);
-static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *, u32, u32, u32, u32 *);
+static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *, u32, u32, u32, u32 *);
static void RemoveWindowOnHealthbox(u32 windowId);
static void UpdateHpTextInHealthboxInDoubles(u8, s16, u8);
@@ -182,19 +181,27 @@ static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *);
static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *);
static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *);
+static void SpriteCb_MegaTrigger(struct Sprite *);
+static void SpriteCb_MegaIndicator(struct Sprite *);
+
static u8 GetStatusIconForBattlerId(u8, u8);
static s32 CalcNewBarValue(s32, s32, s32, s32 *, u8, u16);
static u8 GetScaledExpFraction(s32, s32, s32, u8);
static void MoveBattleBarGraphically(u8, u8);
static u8 CalcBarFilledPixels(s32, s32, s32, s32 *, u8 *, u8);
-static void Debug_TestHealthBar_Helper(struct TestingBar *, s32 *, u16 *);
+
+static void SpriteCb_AbilityPopUp(struct Sprite *);
+static void Task_FreeAbilityPopUpGfx(u8);
+
+static void SpriteCB_LastUsedBall(struct Sprite *);
+static void SpriteCB_LastUsedBallWin(struct Sprite *);
static const struct OamData sOamData_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -266,7 +273,7 @@ static const struct OamData sOamData_Healthbar =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
@@ -318,134 +325,6 @@ static const struct SpriteTemplate sHealthbarSpriteTemplates[MAX_BATTLERS_COUNT]
}
};
-static const struct Subsprite sUnused_Subsprites_0[] =
-{
- {
- .x = DISPLAY_WIDTH,
- .y = 0,
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
- .tileOffset = 0,
- .priority = 1
- },
- {
- .x = 48,
- .y = 0,
- .shape = SPRITE_SHAPE(32x32),
- .size = SPRITE_SIZE(32x32),
- .tileOffset = 32,
- .priority = 1
- },
- {
- .x = DISPLAY_WIDTH,
- .y = 32,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 48,
- .priority = 1
- },
- {
- .x = 16,
- .y = 32,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 52,
- .priority = 1
- },
- {
- .x = 48,
- .y = 32,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 56,
- .priority = 1
- }
-};
-
-static const struct Subsprite sUnused_Subsprites_2[] =
-{
- {
- .x = DISPLAY_WIDTH,
- .y = 0,
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
- .tileOffset = 64,
- .priority = 1
- },
- {
- .x = 48,
- .y = 0,
- .shape = SPRITE_SHAPE(32x32),
- .size = SPRITE_SIZE(32x32),
- .tileOffset = 96,
- .priority = 1
- },
- {
- .x = DISPLAY_WIDTH,
- .y = 32,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 112,
- .priority = 1
- },
- {
- .x = 16,
- .y = 32,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 116,
- .priority = 1
- },
- {
- .x = 48,
- .y = 32,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 120,
- .priority = 1
- }
-};
-
-static const struct Subsprite sUnused_Subsprites_1[] =
-{
- {
- .x = DISPLAY_WIDTH,
- .y = 0,
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
- .tileOffset = 0,
- .priority = 1
- },
- {
- .x = 48,
- .y = 0,
- .shape = SPRITE_SHAPE(32x32),
- .size = SPRITE_SIZE(32x32),
- .tileOffset = 32,
- .priority = 1
- }
-};
-
-static const struct Subsprite sUnused_Subsprites_3[] =
-{
- {
- .x = DISPLAY_WIDTH,
- .y = 0,
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
- .tileOffset = 0,
- .priority = 1
- },
- {
- .x = 48,
- .y = 0,
- .shape = SPRITE_SHAPE(32x32),
- .size = SPRITE_SIZE(32x32),
- .tileOffset = 32,
- .priority = 1
- }
-};
-
static const struct Subsprite sHealthBar_Subsprites_Player[] =
{
{
@@ -494,14 +373,6 @@ static const struct Subsprite sHealthBar_Subsprites_Opponent[] =
}
};
-static const struct SubspriteTable sUnused_SubspriteTable[] =
-{
- {ARRAY_COUNT(sUnused_Subsprites_0), sUnused_Subsprites_0},
- {ARRAY_COUNT(sUnused_Subsprites_1), sUnused_Subsprites_1},
- {ARRAY_COUNT(sUnused_Subsprites_2), sUnused_Subsprites_2},
- {ARRAY_COUNT(sUnused_Subsprites_3), sUnused_Subsprites_3}
-};
-
static const struct SubspriteTable sHealthBar_SubspriteTables[] =
{
[B_SIDE_PLAYER] = {ARRAY_COUNT(sHealthBar_Subsprites_Player), sHealthBar_Subsprites_Player},
@@ -606,9 +477,6 @@ static const struct SubspriteTable sStatusSummaryBar_SubspriteTable_Exit[] =
{ARRAY_COUNT(sStatusSummaryBar_Subsprites_Exit), sStatusSummaryBar_Subsprites_Exit}
};
-// unused unknown image
-static const u8 sUnusedStatusSummary[] = INCBIN_U8("graphics/battle_interface/unused_status_summary.4bpp");
-
static const struct CompressedSpriteSheet sStatusSummaryBarSpriteSheet =
{
gBattleInterface_BallStatusBarGfx, 0x200, TAG_STATUS_SUMMARY_BAR_TILE
@@ -629,30 +497,12 @@ static const struct SpriteSheet sStatusSummaryBallsSpriteSheet =
&gHealthboxElementsGfxTable[HEALTHBOX_GFX_STATUS_BALL], 0x80, TAG_STATUS_SUMMARY_BALLS_TILE
};
-// unused oam data
-static const struct OamData sOamData_Unused64x32 =
-{
- .y = 0,
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
- .bpp = ST_OAM_4BPP,
- .shape = SPRITE_SHAPE(64x32),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(64x32),
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
static const struct OamData sOamData_StatusSummaryBalls =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -739,87 +589,147 @@ static const struct WindowTemplate sHealthboxWindowTemplate = {
.baseBlock = 0
};
-static s32 DummiedOutFunction(s16 unused1, s16 unused2, s32 unused3)
+static const u8 sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp");
+static const u16 sMegaTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal");
+
+static const struct SpriteSheet sSpriteSheet_MegaTrigger =
{
- return 9;
-}
-
-static void Debug_DrawNumber(s16 number, u16 *dest, bool8 unk)
+ sMegaTriggerGfx, sizeof(sMegaTriggerGfx), TAG_MEGA_TRIGGER_TILE
+};
+static const struct SpritePalette sSpritePalette_MegaTrigger =
{
- s8 i, j;
- u8 buff[4];
+ sMegaTriggerPal, TAG_MEGA_TRIGGER_PAL
+};
- for (i = 0; i < 4; i++)
- buff[i] = 0;
-
- for (i = 3; ; i--)
- {
- if (number > 0)
- {
- buff[i] = number % 10;
- number /= 10;
- }
- else
- {
- for (; i > -1; i--)
- buff[i] = 0xFF;
-
- if (buff[3] == 0xFF)
- buff[3] = 0;
- break;
- }
- }
-
- if (!unk)
- {
- for (i = 0, j = 0; i < 4; i++)
- {
- if (buff[j] == 0xFF)
- {
- dest[j + 0x00] &= 0xFC00;
- dest[j + 0x00] |= 0x1E;
- dest[i + 0x20] &= 0xFC00;
- dest[i + 0x20] |= 0x1E;
- }
- else
- {
- dest[j + 0x00] &= 0xFC00;
- dest[j + 0x00] |= 0x14 + buff[j];
- dest[i + 0x20] &= 0xFC00;
- dest[i + 0x20] |= 0x34 + buff[i];
- }
- j++;
- }
- }
- else
- {
- for (i = 0; i < 4; i++)
- {
- if (buff[i] == 0xFF)
- {
- dest[i + 0x00] &= 0xFC00;
- dest[i + 0x00] |= 0x1E;
- dest[i + 0x20] &= 0xFC00;
- dest[i + 0x20] |= 0x1E;
- }
- else
- {
- dest[i + 0x00] &= 0xFC00;
- dest[i + 0x00] |= 0x14 + buff[i];
- dest[i + 0x20] &= 0xFC00;
- dest[i + 0x20] |= 0x34 + buff[i];
- }
- }
- }
-}
-
-// Unused
-static void Debug_DrawNumberPair(s16 number1, s16 number2, u16 *dest)
+static const struct OamData sOamData_MegaTrigger =
{
- dest[4] = 0x1E;
- Debug_DrawNumber(number2, dest, FALSE);
- Debug_DrawNumber(number1, dest + 5, TRUE);
-}
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = ST_OAM_SQUARE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_MegaTriggerOff[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_MegaTriggerOn[] =
+{
+ ANIMCMD_FRAME(16, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_MegaTrigger[] =
+{
+ sSpriteAnim_MegaTriggerOff,
+ sSpriteAnim_MegaTriggerOn,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_MegaTrigger =
+{
+ .tileTag = TAG_MEGA_TRIGGER_TILE,
+ .paletteTag = TAG_MEGA_TRIGGER_PAL,
+ .oam = &sOamData_MegaTrigger,
+ .anims = sSpriteAnimTable_MegaTrigger,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCb_MegaTrigger
+};
+
+static const u8 sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp");
+static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal");
+
+static const struct SpriteSheet sSpriteSheet_MegaIndicator =
+{
+ sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE
+};
+static const struct SpritePalette sSpritePalette_MegaIndicator =
+{
+ sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL
+};
+
+static const u8 sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp");
+static const u16 sAlphaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/alpha_indicator.gbapal");
+static const u8 sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp");
+static const u16 sOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/omega_indicator.gbapal");
+
+static const struct SpriteSheet sSpriteSheet_AlphaIndicator =
+{
+ sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE
+};
+static const struct SpritePalette sSpritePalette_AlphaIndicator =
+{
+ sAlphaIndicatorPal, TAG_ALPHA_INDICATOR_PAL
+};
+static const struct SpriteSheet sSpriteSheet_OmegaIndicator =
+{
+ sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE
+};
+static const struct SpritePalette sSpritePalette_OmegaIndicator =
+{
+ sOmegaIndicatorPal, TAG_OMEGA_INDICATOR_PAL
+};
+
+static const struct OamData sOamData_MegaIndicator =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_MegaIndicator =
+{
+ .tileTag = TAG_MEGA_INDICATOR_TILE,
+ .paletteTag = TAG_MEGA_INDICATOR_PAL,
+ .oam = &sOamData_MegaIndicator,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCb_MegaIndicator,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_AlphaIndicator =
+{
+ .tileTag = TAG_ALPHA_INDICATOR_TILE,
+ .paletteTag = TAG_ALPHA_INDICATOR_PAL,
+ .oam = &sOamData_MegaIndicator,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCb_MegaIndicator,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_OmegaIndicator =
+{
+ .tileTag = TAG_OMEGA_INDICATOR_TILE,
+ .paletteTag = TAG_OMEGA_INDICATOR_PAL,
+ .oam = &sOamData_MegaIndicator,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCb_MegaIndicator,
+};
// Because the healthbox is too large to fit into one sprite, it is divided into two sprites.
// healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite.
@@ -834,16 +744,31 @@ static void Debug_DrawNumberPair(s16 number1, s16 number2, u16 *dest)
// data fields for healthboxRight
#define hOther_HealthBoxSpriteId data[5]
+#define hOther_IndicatorSpriteId data[6] // For Mega Evo
// data fields for healthbar
#define hBar_HealthBoxSpriteId data[5]
#define hBar_Data6 data[6]
+u8 GetMegaIndicatorSpriteId(u32 healthboxSpriteId)
+{
+ u8 spriteId = gSprites[healthboxSpriteId].oam.affineParam;
+ if (spriteId >= MAX_SPRITES)
+ return 0xFF;
+ return gSprites[spriteId].hOther_IndicatorSpriteId;
+}
+
+static void InitLastUsedBallAssets(void)
+{
+ gBattleStruct->ballSpriteIds[0] = MAX_SPRITES;
+ gBattleStruct->ballSpriteIds[1] = MAX_SPRITES;
+}
+
u8 CreateBattlerHealthboxSprites(u8 battlerId)
{
s16 data6 = 0;
u8 healthboxLeftSpriteId, healthboxRightSpriteId;
- u8 healthbarSpriteId;
+ u8 healthbarSpriteId, megaIndicatorSpriteId;
struct Sprite *healthBarSpritePtr;
if (!IsDoubleBattle())
@@ -908,18 +833,30 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId)
healthBarSpritePtr->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
healthBarSpritePtr->oam.priority = 1;
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void*)(OBJ_VRAM0 + healthBarSpritePtr->oam.tileNum * TILE_SIZE_4BPP), 64);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + healthBarSpritePtr->oam.tileNum * TILE_SIZE_4BPP), 64);
gSprites[healthboxLeftSpriteId].hMain_HealthBarSpriteId = healthbarSpriteId;
gSprites[healthboxLeftSpriteId].hMain_Battler = battlerId;
gSprites[healthboxLeftSpriteId].invisible = TRUE;
gSprites[healthboxRightSpriteId].invisible = TRUE;
+ gSprites[healthboxRightSpriteId].hOther_IndicatorSpriteId = 0xFF;
healthBarSpritePtr->hBar_HealthBoxSpriteId = healthboxLeftSpriteId;
healthBarSpritePtr->hBar_Data6 = data6;
healthBarSpritePtr->invisible = TRUE;
+ // Create mega indicator sprite if is a mega evolved or a primal reverted mon.
+ if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]
+ || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]])
+ {
+ megaIndicatorSpriteId = CreateMegaIndicatorSprite(battlerId, 0);
+ gSprites[megaIndicatorSpriteId].invisible = TRUE;
+ }
+
+ gBattleStruct->ballSpriteIds[0] = MAX_SPRITES;
+ gBattleStruct->ballSpriteIds[1] = MAX_SPRITES;
+
return healthboxLeftSpriteId;
}
@@ -938,6 +875,8 @@ u8 CreateSafariPlayerHealthboxSprites(void)
gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId;
gSprites[healthboxRightSpriteId].hOther_HealthBoxSpriteId = healthboxLeftSpriteId;
+ gSprites[healthboxRightSpriteId].hOther_IndicatorSpriteId = 0xFF;
+
gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther;
return healthboxLeftSpriteId;
@@ -977,12 +916,19 @@ static void SpriteCB_HealthBar(struct Sprite *sprite)
static void SpriteCB_HealthBoxOther(struct Sprite *sprite)
{
u8 healthboxMainSpriteId = sprite->hOther_HealthBoxSpriteId;
+ u8 megaSpriteId = sprite->hOther_IndicatorSpriteId;
sprite->x = gSprites[healthboxMainSpriteId].x + 64;
sprite->y = gSprites[healthboxMainSpriteId].y;
sprite->x2 = gSprites[healthboxMainSpriteId].x2;
sprite->y2 = gSprites[healthboxMainSpriteId].y2;
+
+ if (megaSpriteId != 0xFF)
+ {
+ gSprites[megaSpriteId].x2 = sprite->x2;
+ gSprites[megaSpriteId].y2 = sprite->y2;
+ }
}
void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue)
@@ -996,6 +942,7 @@ void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldV
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId)
{
+ DestroyMegaIndicatorSprite(healthboxSpriteId);
gSprites[healthboxSpriteId].invisible = TRUE;
gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = TRUE;
gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = TRUE;
@@ -1003,9 +950,20 @@ void SetHealthboxSpriteInvisible(u8 healthboxSpriteId)
void SetHealthboxSpriteVisible(u8 healthboxSpriteId)
{
+ u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler;
+
gSprites[healthboxSpriteId].invisible = FALSE;
gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE;
gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE;
+ if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]
+ || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]])
+ {
+ u8 spriteId = GetMegaIndicatorSpriteId(healthboxSpriteId);
+ if (spriteId != 0xFF)
+ gSprites[spriteId].invisible = FALSE;
+ else
+ CreateMegaIndicatorSprite(battlerId, 0);
+ }
}
static void UpdateSpritePos(u8 spriteId, s16 x, s16 y)
@@ -1016,6 +974,7 @@ static void UpdateSpritePos(u8 spriteId, s16 x, s16 y)
void DestoryHealthboxSprite(u8 healthboxSpriteId)
{
+ DestroyMegaIndicatorSprite(healthboxSpriteId);
DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]);
DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]);
DestroySprite(&gSprites[healthboxSpriteId]);
@@ -1026,7 +985,29 @@ void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerO
}
-void UpdateOamPriorityInAllHealthboxes(u8 priority)
+static void TryToggleHealboxVisibility(u8 priority, u8 healthboxLeftSpriteId, u8 healthboxRightSpriteId, u8 healthbarSpriteId, u8 indicatorSpriteId)
+{
+ u8 spriteIds[4] = {healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId, indicatorSpriteId};
+ int i;
+
+ for (i = 0; i < NELEMS(spriteIds); i++)
+ {
+ if (spriteIds[i] == 0xFF)
+ continue;
+
+ switch (priority)
+ {
+ case 0: //start of anim -> make invisible
+ gSprites[spriteIds[i]].invisible = TRUE;
+ break;
+ case 1: //end of anim -> make visible
+ gSprites[spriteIds[i]].invisible = FALSE;
+ break;
+ }
+ }
+}
+
+void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes)
{
s32 i;
@@ -1035,43 +1016,57 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority)
u8 healthboxLeftSpriteId = gHealthboxSpriteIds[i];
u8 healthboxRightSpriteId = gSprites[gHealthboxSpriteIds[i]].oam.affineParam;
u8 healthbarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId;
+ u8 indicatorSpriteId = GetMegaIndicatorSpriteId(healthboxLeftSpriteId);
gSprites[healthboxLeftSpriteId].oam.priority = priority;
gSprites[healthboxRightSpriteId].oam.priority = priority;
gSprites[healthbarSpriteId].oam.priority = priority;
+ if (indicatorSpriteId != 0xFF)
+ gSprites[indicatorSpriteId].oam.priority = priority;
+
+ #if B_HIDE_HEALTHBOX_IN_ANIMS
+ if (hideHPBoxes && IsBattlerAlive(i))
+ TryToggleHealboxVisibility(priority, healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId, indicatorSpriteId);
+ #endif
}
}
-void InitBattlerHealthboxCoords(u8 battler)
+void GetBattlerHealthboxCoords(u8 battler, s16 *x, s16 *y)
{
- s16 x = 0, y = 0;
+ *x = 0, *y = 0;
if (!IsDoubleBattle())
{
if (GetBattlerSide(battler) != B_SIDE_PLAYER)
- x = 44, y = 30;
+ *x = 44, *y = 30;
else
- x = 158, y = 88;
+ *x = 158, *y = 88;
}
else
{
switch (GetBattlerPosition(battler))
{
case B_POSITION_PLAYER_LEFT:
- x = 159, y = 76;
+ *x = 159, *y = 76;
break;
case B_POSITION_PLAYER_RIGHT:
- x = 171, y = 101;
+ *x = 171, *y = 101;
break;
case B_POSITION_OPPONENT_LEFT:
- x = 44, y = 19;
+ *x = 44, *y = 19;
break;
case B_POSITION_OPPONENT_RIGHT:
- x = 32, y = 44;
+ *x = 32, *y = 44;
break;
}
}
+}
+void InitBattlerHealthboxCoords(u8 battler)
+{
+ s16 x, y;
+
+ GetBattlerHealthboxCoords(battler, &x, &y);
UpdateSpritePos(gHealthboxSpriteIds[battler], x, y);
}
@@ -1082,19 +1077,31 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
u8 text[16];
u32 xPos;
u8 *objVram;
+ u8 battler = gSprites[healthboxSpriteId].hMain_Battler;
- text[0] = CHAR_EXTRA_SYMBOL;
- text[1] = CHAR_LV_2;
+ // Don't print Lv char if mon is mega evolved or primal reverted.
+ if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]]
+ || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])
+ {
+ objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3);
+ xPos = 5 * (3 - (objVram - (text + 2))) - 1;
+ }
+ else
+ {
+ text[0] = CHAR_EXTRA_SYMBOL;
+ text[1] = CHAR_LV_2;
+
+ objVram = ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3);
+ xPos = 5 * (3 - (objVram - (text + 2)));
+ }
- objVram = ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3);
xPos = 5 * (3 - (objVram - (text + 2)));
-
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId);
spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
- if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
{
- objVram = (void*)(OBJ_VRAM0);
+ objVram = (void *)(OBJ_VRAM0);
if (!IsDoubleBattle())
objVram += spriteTileNum + 0x820;
else
@@ -1102,7 +1109,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
}
else
{
- objVram = (void*)(OBJ_VRAM0);
+ objVram = (void *)(OBJ_VRAM0);
objVram += spriteTileNum + 0x400;
}
TextIntoHealthboxObject(objVram, windowTileData, 3);
@@ -1123,7 +1130,7 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
{
ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3);
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, 2, &windowId);
- objVram = (void*)(OBJ_VRAM0);
+ objVram = (void *)(OBJ_VRAM0);
objVram += spriteTileNum + 0xB40;
HpTextIntoHealthboxObject(objVram, windowTileData, 2);
RemoveWindowOnHealthbox(windowId);
@@ -1134,10 +1141,10 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
text[3] = CHAR_SLASH;
text[4] = EOS;
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 4, 5, 2, &windowId);
- objVram = (void*)(OBJ_VRAM0);
+ objVram = (void *)(OBJ_VRAM0);
objVram += spriteTileNum + 0x3E0;
HpTextIntoHealthboxObject(objVram, windowTileData, 1);
- objVram = (void*)(OBJ_VRAM0);
+ objVram = (void *)(OBJ_VRAM0);
objVram += spriteTileNum + 0xB00;
HpTextIntoHealthboxObject(objVram, windowTileData + 0x20, 2);
RemoveWindowOnHealthbox(windowId);
@@ -1149,11 +1156,11 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
memcpy(text, sEmptyWhiteText_GrayHighlight, sizeof(sEmptyWhiteText_GrayHighlight));
battler = gSprites[healthboxSpriteId].hMain_Battler;
- if (IsDoubleBattle() == TRUE || GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ if (IsDoubleBattle() == TRUE)
{
UpdateHpTextInHealthboxInDoubles(healthboxSpriteId, value, maxOrCurrent);
}
- else
+ else if (gBattleSpritesDataPtr->battlerData[battler].hpNumbersNoBars) // don't print text if only bars are visible
{
u32 var;
u8 i;
@@ -1168,18 +1175,18 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
else
{
if (maxOrCurrent == HP_CURRENT)
- var = 20;
+ var = 21;
else
- var = 48;
+ var = 49;
}
- ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(text + 6, value, STR_CONV_MODE_LEADING_ZEROS, 3);
RenderTextHandleBold(gMonSpritesGfxPtr->barFontGfx, FONT_BOLD, text);
for (i = 0; i < 3; i++)
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[i * 64 + 32],
- (void*)((OBJ_VRAM0) + TILE_SIZE_4BPP * (gSprites[healthboxSpriteId].oam.tileNum + var + i)),
+ (void *)((OBJ_VRAM0) + TILE_SIZE_4BPP * (gSprites[healthboxSpriteId].oam.tileNum + var + i)),
0x20);
}
}
@@ -1198,16 +1205,16 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
if (gBattleSpritesDataPtr->battlerData[gSprites[healthboxSpriteId].data[6]].hpNumbersNoBars) // don't print text if only bars are visible
{
spriteTileNum = gSprites[gSprites[healthboxSpriteId].data[5]].oam.tileNum * TILE_SIZE_4BPP;
- objVram = (void*)(OBJ_VRAM0) + spriteTileNum;
+ objVram = (void *)(OBJ_VRAM0) + spriteTileNum;
if (maxOrCurrent != HP_CURRENT) // doubles, max hp
{
ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3);
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, 0, &windowId);
- HpTextIntoHealthboxObject((void*)(OBJ_VRAM0) + spriteTileNum + 0xC0, windowTileData, 2);
+ HpTextIntoHealthboxObject((void *)(OBJ_VRAM0) + spriteTileNum + 0xC0, windowTileData, 2);
RemoveWindowOnHealthbox(windowId);
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_FRAME_END),
- (void*)(OBJ_VRAM0 + 0x680) + (gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP),
+ (void *)(OBJ_VRAM0 + 0x680) + (gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP),
0x20);
}
else
@@ -1217,7 +1224,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
text[4] = EOS;
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 4, 5, 0, &windowId);
FillHealthboxObject(objVram, 0, 3); // Erases HP bar leftover.
- HpTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x60) + spriteTileNum, windowTileData, 3);
+ HpTextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x60) + spriteTileNum, windowTileData, 3);
RemoveWindowOnHealthbox(windowId);
}
}
@@ -1250,13 +1257,13 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
if (i < 3)
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32],
- (void*)((OBJ_VRAM0) + 32 * (1 + gSprites[r7].oam.tileNum + i)),
+ (void *)((OBJ_VRAM0) + 32 * (1 + gSprites[r7].oam.tileNum + i)),
0x20);
}
else
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[((i - var) * 64) + 32],
- (void*)((OBJ_VRAM0 + 0x20) + 32 * (i + gSprites[r7].oam.tileNum)),
+ (void *)((OBJ_VRAM0 + 0x20) + 32 * (i + gSprites[r7].oam.tileNum)),
0x20);
}
}
@@ -1264,16 +1271,16 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
if (maxOrCurrent == HP_CURRENT)
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[224],
- (void*)((OBJ_VRAM0) + ((gSprites[r7].oam.tileNum + 4) * TILE_SIZE_4BPP)),
+ (void *)((OBJ_VRAM0) + ((gSprites[r7].oam.tileNum + 4) * TILE_SIZE_4BPP)),
0x20);
- CpuFill32(0, (void*)((OBJ_VRAM0) + (gSprites[r7].oam.tileNum * TILE_SIZE_4BPP)), 0x20);
+ CpuFill32(0, (void *)((OBJ_VRAM0) + (gSprites[r7].oam.tileNum * TILE_SIZE_4BPP)), 0x20);
}
else
{
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // Impossible to reach part, because the battlerId is from the opponent's side.
{
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_FRAME_END),
- (void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * TILE_SIZE_4BPP),
+ (void *)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * TILE_SIZE_4BPP),
0x20);
}
}
@@ -1313,11 +1320,11 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
for (j = 1; j < var + 1; j++)
{
spriteTileNum = (gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP;
- CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20);
+ CpuCopy32(barFontGfx, (void *)(OBJ_VRAM0) + (spriteTileNum), 0x20);
barFontGfx += 0x20;
spriteTileNum = (8 + gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP;
- CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20);
+ CpuCopy32(barFontGfx, (void *)(OBJ_VRAM0) + (spriteTileNum), 0x20);
barFontGfx += 0x20;
}
@@ -1334,13 +1341,13 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
if (j <= 1)
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20],
- (void*)(OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum + 2 + j) * TILE_SIZE_4BPP,
+ (void *)(OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum + 2 + j) * TILE_SIZE_4BPP,
32);
}
else
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20],
- (void*)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthBarSpriteId].oam.tileNum) * TILE_SIZE_4BPP,
+ (void *)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthBarSpriteId].oam.tileNum) * TILE_SIZE_4BPP,
32);
}
}
@@ -1372,7 +1379,7 @@ void SwapHpBarsWithHpText(void)
{
healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId;
- CpuFill32(0, (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0x100);
+ CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0x100);
UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT);
UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX);
}
@@ -1380,7 +1387,7 @@ void SwapHpBarsWithHpText(void)
{
UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gPlayerParty[gBattlerPartyIndexes[i]], HEALTHBOX_HEALTH_BAR);
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_FRAME_END_BAR), (void*)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_FRAME_END_BAR), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32);
}
}
else
@@ -1414,6 +1421,223 @@ void SwapHpBarsWithHpText(void)
}
}
+// Mega Evolution gfx functions.
+void ChangeMegaTriggerSprite(u8 spriteId, u8 animId)
+{
+ StartSpriteAnim(&gSprites[spriteId], animId);
+}
+
+#define SINGLES_MEGA_TRIGGER_POS_X_OPTIMAL (30)
+#define SINGLES_MEGA_TRIGGER_POS_X_PRIORITY (31)
+#define SINGLES_MEGA_TRIGGER_POS_X_SLIDE (15)
+#define SINGLES_MEGA_TRIGGER_POS_Y_DIFF (-11)
+
+#define DOUBLES_MEGA_TRIGGER_POS_X_OPTIMAL (30)
+#define DOUBLES_MEGA_TRIGGER_POS_X_PRIORITY (31)
+#define DOUBLES_MEGA_TRIGGER_POS_X_SLIDE (15)
+#define DOUBLES_MEGA_TRIGGER_POS_Y_DIFF (-4)
+
+#define tBattler data[0]
+#define tHide data[1]
+
+void CreateMegaTriggerSprite(u8 battlerId, u8 palId)
+{
+ LoadSpritePalette(&sSpritePalette_MegaTrigger);
+ if (GetSpriteTileStartByTag(TAG_MEGA_TRIGGER_TILE) == 0xFFFF)
+ LoadSpriteSheet(&sSpriteSheet_MegaTrigger);
+ if (gBattleStruct->mega.triggerSpriteId == 0xFF)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ gBattleStruct->mega.triggerSpriteId = CreateSprite(&sSpriteTemplate_MegaTrigger,
+ gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_MEGA_TRIGGER_POS_X_SLIDE,
+ gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_MEGA_TRIGGER_POS_Y_DIFF, 0);
+ else
+ gBattleStruct->mega.triggerSpriteId = CreateSprite(&sSpriteTemplate_MegaTrigger,
+ gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_MEGA_TRIGGER_POS_X_SLIDE,
+ gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_MEGA_TRIGGER_POS_Y_DIFF, 0);
+ }
+ gSprites[gBattleStruct->mega.triggerSpriteId].tBattler = battlerId;
+ gSprites[gBattleStruct->mega.triggerSpriteId].tHide = FALSE;
+
+ ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, palId);
+}
+
+static void SpriteCb_MegaTrigger(struct Sprite *sprite)
+{
+ s32 xSlide, xPriority, xOptimal;
+ s32 yDiff;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ xSlide = DOUBLES_MEGA_TRIGGER_POS_X_SLIDE;
+ xPriority = DOUBLES_MEGA_TRIGGER_POS_X_PRIORITY;
+ xOptimal = DOUBLES_MEGA_TRIGGER_POS_X_OPTIMAL;
+ yDiff = DOUBLES_MEGA_TRIGGER_POS_Y_DIFF;
+ }
+ else
+ {
+ xSlide = SINGLES_MEGA_TRIGGER_POS_X_SLIDE;
+ xPriority = SINGLES_MEGA_TRIGGER_POS_X_PRIORITY;
+ xOptimal = SINGLES_MEGA_TRIGGER_POS_X_OPTIMAL;
+ yDiff = SINGLES_MEGA_TRIGGER_POS_Y_DIFF;
+ }
+
+ if (sprite->tHide)
+ {
+ if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
+ sprite->x++;
+
+ if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
+ sprite->oam.priority = 2;
+ else
+ sprite->oam.priority = 1;
+
+ sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
+ sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
+ if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
+ DestroyMegaTriggerSprite();
+ }
+ else
+ {
+ if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal)
+ sprite->x--;
+
+ if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
+ sprite->oam.priority = 2;
+ else
+ sprite->oam.priority = 1;
+
+ sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
+ sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
+ }
+}
+
+bool32 IsMegaTriggerSpriteActive(void)
+{
+ if (GetSpriteTileStartByTag(TAG_MEGA_TRIGGER_TILE) == 0xFFFF)
+ return FALSE;
+ else if (IndexOfSpritePaletteTag(TAG_MEGA_TRIGGER_PAL) != 0xFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void HideMegaTriggerSprite(void)
+{
+ if (gBattleStruct->mega.triggerSpriteId != 0xFF)
+ {
+ ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, 0);
+ gSprites[gBattleStruct->mega.triggerSpriteId].tHide = TRUE;
+ }
+}
+
+void HideTriggerSprites(void)
+{
+ HideMegaTriggerSprite();
+ HideZMoveTriggerSprite();
+}
+
+void DestroyMegaTriggerSprite(void)
+{
+ FreeSpritePaletteByTag(TAG_MEGA_TRIGGER_PAL);
+ FreeSpriteTilesByTag(TAG_MEGA_TRIGGER_TILE);
+ if (gBattleStruct->mega.triggerSpriteId != 0xFF)
+ DestroySprite(&gSprites[gBattleStruct->mega.triggerSpriteId]);
+ gBattleStruct->mega.triggerSpriteId = 0xFF;
+}
+
+static const s8 sIndicatorPositions[][2] =
+{
+ [B_POSITION_PLAYER_LEFT] = {52, -9},
+ [B_POSITION_OPPONENT_LEFT] = {44, -9},
+ [B_POSITION_PLAYER_RIGHT] = {52, -9},
+ [B_POSITION_OPPONENT_RIGHT] = {44, -9},
+};
+
+u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which)
+{
+ u32 spriteId, position;
+ s16 x, y;
+
+ if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]])
+ {
+ LoadSpritePalette(&sSpritePalette_MegaIndicator);
+ LoadSpriteSheet(&sSpriteSheet_MegaIndicator);
+ }
+ else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]])
+ {
+ if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON)
+ {
+ LoadSpritePalette(&sSpritePalette_OmegaIndicator);
+ LoadSpriteSheet(&sSpriteSheet_OmegaIndicator);
+ }
+ else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE)
+ {
+ LoadSpritePalette(&sSpritePalette_AlphaIndicator);
+ LoadSpriteSheet(&sSpriteSheet_AlphaIndicator);
+ }
+ }
+
+ position = GetBattlerPosition(battlerId);
+ GetBattlerHealthboxCoords(battlerId, &x, &y);
+
+ x += sIndicatorPositions[position][0];
+ y += sIndicatorPositions[position][1];
+
+ if (gBattleMons[battlerId].level >= 100)
+ x -= 4;
+ else if (gBattleMons[battlerId].level < 10)
+ x += 5;
+
+ if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]])
+ {
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_MegaIndicator, x, y, 0);
+ }
+ else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]])
+ {
+ if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON)
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_OmegaIndicator, x, y, 0);
+ else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE)
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_AlphaIndicator, x, y, 0);
+ }
+
+ gSprites[gSprites[gHealthboxSpriteIds[battlerId]].oam.affineParam].hOther_IndicatorSpriteId = spriteId;
+ gSprites[spriteId].tBattler = battlerId;
+ return spriteId;
+}
+
+void DestroyMegaIndicatorSprite(u32 healthboxSpriteId)
+{
+ u32 i;
+ s16 *spriteId = &gSprites[gSprites[healthboxSpriteId].oam.affineParam].hOther_IndicatorSpriteId;
+
+ if (*spriteId != 0xFF)
+ {
+ DestroySprite(&gSprites[*spriteId]);
+ *spriteId = 0xFF;
+ }
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (gSprites[gSprites[gHealthboxSpriteIds[i]].oam.affineParam].hOther_IndicatorSpriteId != 0xFF)
+ break;
+ }
+ // Free Sprite pal/tiles only if no indicator sprite is active for all battlers.
+ if (i == MAX_BATTLERS_COUNT)
+ {
+ FreeSpritePaletteByTag(TAG_MEGA_INDICATOR_PAL);
+ FreeSpriteTilesByTag(TAG_MEGA_INDICATOR_TILE);
+ }
+}
+
+static void SpriteCb_MegaIndicator(struct Sprite *sprite)
+{
+
+}
+
+#undef tBattler
+#undef tHide
+
#define tBattler data[0]
#define tSummaryBarSpriteId data[1]
#define tBallIconSpriteId(n) data[3 + n]
@@ -1886,10 +2110,12 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
{
u8 nickname[POKEMON_NAME_LENGTH + 1];
void *ptr;
- u32 windowId, spriteTileNum;
+ u32 windowId, spriteTileNum, species;
u8 *windowTileData;
- u16 species;
u8 gender;
+ struct Pokemon *illusionMon = GetIllusionMonPtr(gSprites[healthboxSpriteId].hMain_Battler);
+ if (illusionMon != NULL)
+ mon = illusionMon;
StringCopy(gDisplayedStringBattle, gText_HealthboxNickname);
GetMonData(mon, MON_DATA_NICKNAME, nickname);
@@ -1924,8 +2150,8 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
{
- TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40 + spriteTileNum), windowTileData, 6);
- ptr = (void*)(OBJ_VRAM0);
+ TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x40 + spriteTileNum), windowTileData, 6);
+ ptr = (void *)(OBJ_VRAM0);
if (!IsDoubleBattle())
ptr += spriteTileNum + 0x800;
else
@@ -1934,7 +2160,7 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
}
else
{
- TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x20 + spriteTileNum), windowTileData, 7);
+ TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x20 + spriteTileNum), windowTileData, 7);
}
RemoveWindowOnHealthbox(windowId);
@@ -1958,9 +2184,9 @@ static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
if (noStatus)
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_STATUS_BALL_CAUGHT), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_STATUS_BALL_CAUGHT), (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32);
else
- CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32);
+ CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32);
}
static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
@@ -2018,7 +2244,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
statusGfxPtr = GetHealthboxElementGfxPtr(HEALTHBOX_GFX_39);
for (i = 0; i < 3; i++)
- CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), 32);
+ CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), 32);
if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 64);
@@ -2031,14 +2257,14 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
pltAdder += battlerId + 12;
FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2);
- CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2);
- CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96);
+ CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void *)(OBJ_PLTT + pltAdder * 2), 2);
+ CpuCopy32(statusGfxPtr, (void *)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96);
if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
{
if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
{
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 32);
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void *)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), 32);
}
}
TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE);
@@ -2111,8 +2337,8 @@ static void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId)
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gText_SafariBalls, 0, 3, 2, &windowId);
spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
- TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6);
- TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2);
+ TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6);
+ TextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2);
RemoveWindowOnHealthbox(windowId);
}
@@ -2128,8 +2354,8 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId)
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, GetStringRightAlignXOffset(FONT_SMALL, text, 0x2F), 3, 2, &windowId);
spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
- SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2);
- SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4);
+ SafariTextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2);
+ SafariTextIntoHealthboxObject((void *)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4);
RemoveWindowOnHealthbox(windowId);
}
@@ -2138,9 +2364,6 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
s32 maxHp, currHp;
u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler;
- if (elementId == HEALTHBOX_ALL && !IsDoubleBattle())
- GetBattlerSide(battlerId); // Pointless function call.
-
if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER)
{
u8 isDoubles;
@@ -2190,6 +2413,10 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
{
if (elementId == HEALTHBOX_LEVEL || elementId == HEALTHBOX_ALL)
UpdateLvlInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_LEVEL));
+ if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars && (elementId == HEALTHBOX_CURRENT_HP || elementId == HEALTHBOX_ALL))
+ UpdateHpTextInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_HP), HP_CURRENT);
+ if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars && (elementId == HEALTHBOX_MAX_HP || elementId == HEALTHBOX_ALL))
+ UpdateHpTextInHealthbox(healthboxSpriteId, GetMonData(mon, MON_DATA_MAX_HP), HP_MAX);
if (elementId == HEALTHBOX_HEALTH_BAR || elementId == HEALTHBOX_ALL)
{
LoadBattleBarGfx(0);
@@ -2218,7 +2445,11 @@ s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused)
gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
&gBattleSpritesDataPtr->battleBars[battlerId].currValue,
+ #if B_FAST_HP_DRAIN == TRUE
+ B_HEALTHBAR_PIXELS / 8, max(gBattleSpritesDataPtr->battleBars[battlerId].maxValue / B_HEALTHBAR_PIXELS, 1));
+ #else
B_HEALTHBAR_PIXELS / 8, 1);
+ #endif
}
else // exp bar
{
@@ -2273,10 +2504,10 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].hMain_HealthBarSpriteId;
if (i < 2)
CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32,
- (void*)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), 32);
+ (void *)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), 32);
else
CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32,
- (void*)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32);
+ (void *)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32);
}
break;
case EXP_BAR:
@@ -2295,10 +2526,10 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
{
if (i < 4)
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
- (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32);
+ (void *)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32);
else
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
- (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32);
+ (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32);
}
break;
}
@@ -2431,43 +2662,6 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32
return filledPixels;
}
-// Unused
-// These two functions seem as if they were made for testing the health bar.
-static s16 Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 *dest, s32 unused)
-{
- s16 ret, var;
-
- ret = CalcNewBarValue(barInfo->maxValue,
- barInfo->oldValue,
- barInfo->receivedValue,
- currValue, B_HEALTHBAR_PIXELS / 8, 1);
- Debug_TestHealthBar_Helper(barInfo, currValue, dest);
-
- if (barInfo->maxValue < B_HEALTHBAR_PIXELS)
- var = *currValue >> 8;
- else
- var = *currValue;
-
- DummiedOutFunction(barInfo->maxValue, var, unused);
-
- return ret;
-}
-
-static void Debug_TestHealthBar_Helper(struct TestingBar *barInfo, s32 *currValue, u16 *dest)
-{
- u8 pixels[6];
- u16 src[6];
- u8 i;
-
- CalcBarFilledPixels(barInfo->maxValue, barInfo->oldValue,
- barInfo->receivedValue, currValue, pixels, B_HEALTHBAR_PIXELS / 8);
-
- for (i = 0; i < 6; i++)
- src[i] = (barInfo->unkC_0 << 12) | (barInfo->unk10 + pixels[i]);
-
- CpuCopy16(src, dest, sizeof(src));
-}
-
static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale)
{
s32 newVal, result;
@@ -2522,7 +2716,7 @@ u8 GetHPBarLevel(s16 hp, s16 maxhp)
return result;
}
-static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId)
+static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId)
{
u16 winId;
u8 color[3];
@@ -2538,7 +2732,7 @@ static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y,
AddTextPrinterParameterized4(winId, FONT_SMALL, x, y, 0, 0, color, TEXT_SKIP_DRAW, str);
*windowId = winId;
- return (u8*)(GetWindowAttribute(winId, WINDOW_TILE_DATA));
+ return (u8 *)(GetWindowAttribute(winId, WINDOW_TILE_DATA));
}
static void RemoveWindowOnHealthbox(u32 windowId)
@@ -2576,3 +2770,688 @@ static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 wi
CpuCopy32(windowTileData, dest, windowWidth * TILE_SIZE_4BPP);
CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP);
}
+
+#define ABILITY_POP_UP_TAG 0xD720
+
+// for sprite
+#define tOriginalX data[0]
+#define tHide data[1]
+#define tFrames data[2]
+#define tRightToLeft data[3]
+#define tBattlerId data[4]
+#define tIsMain data[5]
+
+// for task
+#define tSpriteId1 data[6]
+#define tSpriteId2 data[7]
+
+static const u8 sAbilityPopUpGfx[] = INCBIN_U8("graphics/battle_interface/ability_pop_up.4bpp");
+static const u16 sAbilityPopUpPalette[] = INCBIN_U16("graphics/battle_interface/ability_pop_up.gbapal");
+
+static const struct SpriteSheet sSpriteSheet_AbilityPopUp =
+{
+ sAbilityPopUpGfx, sizeof(sAbilityPopUpGfx), ABILITY_POP_UP_TAG
+};
+static const struct SpritePalette sSpritePalette_AbilityPopUp =
+{
+ sAbilityPopUpPalette, ABILITY_POP_UP_TAG
+};
+
+static const struct OamData sOamData_AbilityPopUp =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = ST_OAM_H_RECTANGLE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_AbilityPopUp1[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_AbilityPopUp1[] =
+{
+ sSpriteAnim_AbilityPopUp1
+};
+
+static const struct SpriteTemplate sSpriteTemplate_AbilityPopUp1 =
+{
+ .tileTag = ABILITY_POP_UP_TAG,
+ .paletteTag = ABILITY_POP_UP_TAG,
+ .oam = &sOamData_AbilityPopUp,
+ .anims = sSpriteAnimTable_AbilityPopUp1,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCb_AbilityPopUp
+};
+
+static const union AnimCmd sSpriteAnim_AbilityPopUp2[] =
+{
+ ANIMCMD_FRAME(32, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_AbilityPopUp2[] =
+{
+ sSpriteAnim_AbilityPopUp2
+};
+
+static const struct SpriteTemplate sSpriteTemplate_AbilityPopUp2 =
+{
+ .tileTag = ABILITY_POP_UP_TAG,
+ .paletteTag = ABILITY_POP_UP_TAG,
+ .oam = &sOamData_AbilityPopUp,
+ .anims = sSpriteAnimTable_AbilityPopUp2,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCb_AbilityPopUp
+};
+
+#define ABILITY_POP_UP_POS_X_DIFF 64
+#define ABILITY_POP_UP_POS_X_SLIDE 68
+
+static const s16 sAbilityPopUpCoordsDoubles[MAX_BATTLERS_COUNT][2] =
+{
+ {29, 80}, // player left
+ {186, 19}, // opponent left
+ {29, 97}, // player right
+ {186, 36}, // opponent right
+};
+
+static const s16 sAbilityPopUpCoordsSingles[MAX_BATTLERS_COUNT][2] =
+{
+ {29, 97}, // player
+ {186, 57}, // opponent
+};
+
+static u8* AddTextPrinterAndCreateWindowOnAbilityPopUp(const u8 *str, u32 x, u32 y, u32 color1, u32 color2, u32 color3, u32 *windowId)
+{
+ u8 color[3] = {color1, color2, color3};
+ struct WindowTemplate winTemplate = {0};
+ winTemplate.width = 8;
+ winTemplate.height = 2;
+
+ *windowId = AddWindow(&winTemplate);
+ FillWindowPixelBuffer(*windowId, PIXEL_FILL(color1));
+
+ AddTextPrinterParameterized4(*windowId, 0, x, y, 0, 0, color, -1, str);
+ return (u8 *)(GetWindowAttribute(*windowId, WINDOW_TILE_DATA));
+}
+
+static void TextIntoAbilityPopUp(void *dest, u8 *windowTileData, s32 arg2, bool32 arg3)
+{
+ CpuCopy32(windowTileData + 256, dest + 256, arg2 * 32);
+ if (arg2 > 0)
+ {
+ do
+ {
+ if (arg3)
+ CpuCopy32(windowTileData + 16, dest + 16, 16);
+ else
+ CpuCopy32(windowTileData + 20, dest + 20, 12);
+ dest += 32, windowTileData += 32;
+ arg2--;
+ } while (arg2 != 0);
+ }
+}
+
+#define MAX_CHARS_PRINTED 12
+
+static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTileData2, u32 x1, u32 x2, u32 y, u32 color1, u32 color2, u32 color3)
+{
+ u32 windowId, i;
+ u8 *windowTileData;
+ u8 text1[MAX_CHARS_PRINTED];
+ u8 text2[MAX_CHARS_PRINTED];
+
+ for (i = 0; i < MAX_CHARS_PRINTED; i++)
+ {
+ text1[i] = str[i];
+ if (text1[i] == EOS)
+ break;
+ }
+ text1[i] = EOS;
+
+ windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text1, x1, y, color1, color2, color3, &windowId);
+ TextIntoAbilityPopUp(spriteTileData1, windowTileData, 8, (y == 0));
+ RemoveWindow(windowId);
+
+ if (i == MAX_CHARS_PRINTED)
+ {
+ for (i = 0; i < MAX_CHARS_PRINTED; i++)
+ {
+ text2[i] = str[MAX_CHARS_PRINTED + i];
+ if (text2[i] == EOS)
+ break;
+ }
+ text2[i] = EOS;
+
+ windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(text2, x2, y, color1, color2, color3, &windowId);
+ TextIntoAbilityPopUp(spriteTileData2, windowTileData, 3, (y == 0));
+ RemoveWindow(windowId);
+ }
+}
+
+static const u8 sText_Space16[]= _(" ");
+static void ClearAbilityName(u8 spriteId1, u8 spriteId2)
+{
+ PrintOnAbilityPopUp(sText_Space16,
+ (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256,
+ (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256,
+ 6, 1,
+ 4,
+ 7, 9, 1);
+}
+
+static void PrintBattlerOnAbilityPopUp(u8 battlerId, u8 spriteId1, u8 spriteId2)
+{
+ int i;
+ u8 lastChar;
+ u8* name;
+ u8 monName[POKEMON_NAME_LENGTH + 3] = {0};
+ u8* nick = gBattleMons[battlerId].nickname;
+
+ for (i = 0; i < POKEMON_NAME_LENGTH; ++i)
+ {
+ monName[i] = nick[i];
+ if (nick[i] == EOS || i + 1 == POKEMON_NAME_LENGTH)
+ break;
+ }
+
+ name = monName + i + 1;
+ if (*(name - 1) == EOS)
+ name--;
+
+ lastChar = *(name - 1);
+ name[0] = CHAR_SGL_QUOTE_RIGHT; // apostraphe
+ name++;
+ if (lastChar != CHAR_S && lastChar != CHAR_s)
+ {
+ name[0] = CHAR_s;
+ name++;
+ }
+
+ name[0] = EOS;
+ PrintOnAbilityPopUp((const u8 *)monName,
+ (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32),
+ (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32),
+ 7, 0,
+ 0,
+ 2, 7, 1);
+}
+
+static void PrintAbilityOnAbilityPopUp(u32 ability, u8 spriteId1, u8 spriteId2)
+{
+ PrintOnAbilityPopUp(gAbilityNames[ability],
+ (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256,
+ (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256,
+ 6, 1,
+ 4,
+ 7, 9, 1);
+}
+
+#define PIXEL_COORDS_TO_OFFSET(x, y)( \
+/*Add tiles by X*/ \
+((y / 8) * 32 * 8) \
+/*Add tiles by X*/ \
++ ((x / 8) * 32) \
+/*Add pixels by Y*/ \
++ ((((y) - ((y / 8) * 8))) * 4) \
+/*Add pixels by X*/ \
++ ((((x) - ((x / 8) * 8)) / 2)))
+
+static const u16 sOverwrittenPixelsTable[][2] =
+{
+ {PIXEL_COORDS_TO_OFFSET(0, 0), 5},
+ {PIXEL_COORDS_TO_OFFSET(0, 1), 5},
+ {PIXEL_COORDS_TO_OFFSET(0, 2), 5},
+ {PIXEL_COORDS_TO_OFFSET(0, 3), 5},
+ {PIXEL_COORDS_TO_OFFSET(0, 4), 5},
+ {PIXEL_COORDS_TO_OFFSET(0, 5), 5},
+ {PIXEL_COORDS_TO_OFFSET(0, 6), 5},
+ {PIXEL_COORDS_TO_OFFSET(0, 7), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 8), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 9), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 10), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 11), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 12), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 13), 8},
+
+ {PIXEL_COORDS_TO_OFFSET(8, 13), 8},
+ {PIXEL_COORDS_TO_OFFSET(16, 13), 8},
+ {PIXEL_COORDS_TO_OFFSET(24, 13), 8},
+ {PIXEL_COORDS_TO_OFFSET(32, 13), 8},
+ {PIXEL_COORDS_TO_OFFSET(40, 13), 8},
+ {PIXEL_COORDS_TO_OFFSET(48, 13), 8},
+ {PIXEL_COORDS_TO_OFFSET(56, 13), 8},
+
+ {PIXEL_COORDS_TO_OFFSET(0, 14), 8},
+ {PIXEL_COORDS_TO_OFFSET(8, 14), 8},
+ {PIXEL_COORDS_TO_OFFSET(16, 14), 8},
+ {PIXEL_COORDS_TO_OFFSET(24, 14), 8},
+ {PIXEL_COORDS_TO_OFFSET(32, 14), 8},
+ {PIXEL_COORDS_TO_OFFSET(40, 14), 8},
+ {PIXEL_COORDS_TO_OFFSET(48, 14), 8},
+ {PIXEL_COORDS_TO_OFFSET(56, 14), 8},
+
+ {PIXEL_COORDS_TO_OFFSET(0, 15), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 16), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 17), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 18), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 19), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 20), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 21), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 22), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 23), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 24), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 25), 3},
+ {PIXEL_COORDS_TO_OFFSET(0, 26), 3},
+
+//Second Row Of Image
+ {PIXEL_COORDS_TO_OFFSET(0, 45), 8},
+ {PIXEL_COORDS_TO_OFFSET(0, 46), 8},
+ {PIXEL_COORDS_TO_OFFSET(0, 47), 8},
+ //{PIXEL_COORDS_TO_OFFSET(0, 48), 8}, // cuts off the top of the 'G' in Neutralizing Gas
+ {PIXEL_COORDS_TO_OFFSET(8, 45), 8},
+ {PIXEL_COORDS_TO_OFFSET(8, 46), 8},
+ {PIXEL_COORDS_TO_OFFSET(8, 47), 8},
+ {PIXEL_COORDS_TO_OFFSET(8, 48), 8},
+ {PIXEL_COORDS_TO_OFFSET(16, 45), 8},
+ {PIXEL_COORDS_TO_OFFSET(16, 46), 8},
+ {PIXEL_COORDS_TO_OFFSET(16, 47), 8},
+ {PIXEL_COORDS_TO_OFFSET(16, 48), 8},
+};
+
+static inline void CopyPixels(u8 *dest, const u8 *src, u32 pixelCount)
+{
+ u32 i = 0;
+
+ if (pixelCount & 1)
+ {
+ while (pixelCount != 0)
+ {
+ dest[i] &= ~(0xF);
+ dest[i] |= (src[i] & 0xF);
+ if (--pixelCount != 0)
+ {
+ dest[i] &= ~(0xF0);
+ dest[i] |= (src[i] & 0xF0);
+ pixelCount--;
+ }
+ i++;
+ }
+ }
+ else
+ {
+ for (i = 0; i < pixelCount / 2; i++)
+ dest[i] = src[i];
+ }
+}
+
+static void RestoreOverwrittenPixels(u8 *tiles)
+{
+ u32 i;
+ u8 *buffer = Alloc(sizeof(sAbilityPopUpGfx) * 2);
+
+ CpuCopy32(tiles, buffer, sizeof(sAbilityPopUpGfx));
+
+ for (i = 0; i < ARRAY_COUNT(sOverwrittenPixelsTable); i++)
+ {
+ CopyPixels(buffer + sOverwrittenPixelsTable[i][0],
+ sAbilityPopUpGfx + sOverwrittenPixelsTable[i][0],
+ sOverwrittenPixelsTable[i][1]);
+ }
+
+ CpuCopy32(buffer, tiles, sizeof(sAbilityPopUpGfx));
+ Free(buffer);
+}
+
+void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle)
+{
+ const s16 (*coords)[2];
+ u8 spriteId1, spriteId2, battlerPosition, taskId;
+
+ if (!B_ABILITY_POP_UP)
+ return;
+
+ if (gBattleScripting.abilityPopupOverwrite != 0)
+ ability = gBattleScripting.abilityPopupOverwrite;
+
+ if (!gBattleStruct->activeAbilityPopUps)
+ {
+ LoadSpriteSheet(&sSpriteSheet_AbilityPopUp);
+ LoadSpritePalette(&sSpritePalette_AbilityPopUp);
+ }
+ gBattleStruct->activeAbilityPopUps |= gBitTable[battlerId];
+ battlerPosition = GetBattlerPosition(battlerId);
+
+ if (isDoubleBattle)
+ coords = sAbilityPopUpCoordsDoubles;
+ else
+ coords = sAbilityPopUpCoordsSingles;
+
+ if ((battlerPosition & BIT_SIDE) == B_SIDE_PLAYER)
+ {
+ spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp1,
+ coords[battlerPosition][0] - ABILITY_POP_UP_POS_X_SLIDE,
+ coords[battlerPosition][1], 0);
+ spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp2,
+ coords[battlerPosition][0] - ABILITY_POP_UP_POS_X_SLIDE + ABILITY_POP_UP_POS_X_DIFF,
+ coords[battlerPosition][1], 0);
+
+ gSprites[spriteId1].tOriginalX = coords[battlerPosition][0];
+ gSprites[spriteId2].tOriginalX = coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_DIFF;
+
+ gSprites[spriteId1].tRightToLeft = TRUE;
+ gSprites[spriteId2].tRightToLeft = TRUE;
+ }
+ else
+ {
+ spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp1,
+ coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_SLIDE,
+ coords[battlerPosition][1], 0);
+ spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp2,
+ coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_SLIDE + ABILITY_POP_UP_POS_X_DIFF,
+ coords[battlerPosition][1], 0);
+
+ gSprites[spriteId1].tOriginalX = coords[battlerPosition][0];
+ gSprites[spriteId2].tOriginalX = coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_DIFF;
+
+ gSprites[spriteId1].tRightToLeft = FALSE;
+ gSprites[spriteId2].tRightToLeft = FALSE;
+ }
+
+ gBattleStruct->abilityPopUpSpriteIds[battlerId][0] = spriteId1;
+ gBattleStruct->abilityPopUpSpriteIds[battlerId][1] = spriteId2;
+
+ taskId = CreateTask(Task_FreeAbilityPopUpGfx, 5);
+ gTasks[taskId].tSpriteId1 = spriteId1;
+ gTasks[taskId].tSpriteId2 = spriteId2;
+
+ gSprites[spriteId1].tIsMain = TRUE;
+ gSprites[spriteId1].tBattlerId = battlerId;
+ gSprites[spriteId2].tBattlerId = battlerId;
+
+ StartSpriteAnim(&gSprites[spriteId1], 0);
+ StartSpriteAnim(&gSprites[spriteId2], 0);
+
+ PrintBattlerOnAbilityPopUp(battlerId, spriteId1, spriteId2);
+ PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2);
+ RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32));
+}
+
+void UpdateAbilityPopup(u8 battlerId)
+{
+ u8 spriteId1 = gBattleStruct->abilityPopUpSpriteIds[battlerId][0];
+ u8 spriteId2 = gBattleStruct->abilityPopUpSpriteIds[battlerId][1];
+ u16 ability = (gBattleScripting.abilityPopupOverwrite != 0) ? gBattleScripting.abilityPopupOverwrite : gBattleMons[battlerId].ability;
+
+ ClearAbilityName(spriteId1, spriteId2);
+ PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2);
+ RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32));
+}
+
+#define FRAMES_TO_WAIT 48
+
+static void SpriteCb_AbilityPopUp(struct Sprite *sprite)
+{
+ if (!sprite->tHide) // Show
+ {
+ if (sprite->tIsMain && ++sprite->tFrames == 4)
+ PlaySE(SE_BALL_TRAY_ENTER);
+ if ((!sprite->tRightToLeft && (sprite->x -= 4) <= sprite->tOriginalX)
+ || (sprite->tRightToLeft && (sprite->x += 4) >= sprite->tOriginalX)
+ )
+ {
+ sprite->x = sprite->tOriginalX;
+ sprite->tHide = TRUE;
+ sprite->tFrames = FRAMES_TO_WAIT;
+ }
+ }
+ else // Hide
+ {
+ if (sprite->tFrames == 0)
+ {
+ if ((!sprite->tRightToLeft && (sprite->x += 4) >= sprite->tOriginalX + ABILITY_POP_UP_POS_X_SLIDE)
+ ||(sprite->tRightToLeft && (sprite->x -= 4) <= sprite->tOriginalX - ABILITY_POP_UP_POS_X_SLIDE)
+ )
+ {
+ gBattleStruct->activeAbilityPopUps &= ~(gBitTable[sprite->tBattlerId]);
+ DestroySprite(sprite);
+ }
+ }
+ else
+ {
+ if (!gBattleScripting.fixedPopup)
+ sprite->tFrames--;
+ }
+ }
+}
+
+void DestroyAbilityPopUp(u8 battlerId)
+{
+ gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][0]].tFrames = 0;
+ gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][1]].tFrames = 0;
+ gBattleScripting.fixedPopup = FALSE;
+}
+
+static void Task_FreeAbilityPopUpGfx(u8 taskId)
+{
+ if (!gSprites[gTasks[taskId].tSpriteId1].inUse
+ && !gSprites[gTasks[taskId].tSpriteId2].inUse
+ && !gBattleStruct->activeAbilityPopUps)
+ {
+ FreeSpriteTilesByTag(ABILITY_POP_UP_TAG);
+ FreeSpritePaletteByTag(ABILITY_POP_UP_TAG);
+ DestroyTask(taskId);
+ }
+}
+
+// last used ball
+#define LAST_BALL_WINDOW_TAG 0xD721
+
+static const struct OamData sOamData_LastUsedBall =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_LastUsedBallWindow =
+{
+ .tileTag = LAST_BALL_WINDOW_TAG,
+ .paletteTag = ABILITY_POP_UP_TAG,
+ .oam = &sOamData_LastUsedBall,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_LastUsedBallWin
+};
+
+#if B_LAST_USED_BALL_BUTTON == R_BUTTON
+ static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r.4bpp");
+#else
+ static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_l.4bpp");
+#endif
+static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow =
+{
+ sLastUsedBallWindowGfx, sizeof(sLastUsedBallWindowGfx), LAST_BALL_WINDOW_TAG
+};
+
+#define LAST_USED_BALL_X_F 15
+#define LAST_USED_BALL_X_0 -15
+#define LAST_USED_BALL_Y ((IsDoubleBattle()) ? 78 : 68)
+
+#define LAST_BALL_WIN_X_F (LAST_USED_BALL_X_F - 1)
+#define LAST_BALL_WIN_X_0 (LAST_USED_BALL_X_0 - 0)
+#define LAST_USED_WIN_Y (LAST_USED_BALL_Y - 8)
+
+#define sHide data[0]
+
+bool32 CanThrowLastUsedBall(void)
+{
+#if B_LAST_USED_BALL == FALSE
+ return FALSE;
+#else
+ if (!CanThrowBall())
+ return FALSE;
+ if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FRONTIER))
+ return FALSE;
+ if (!CheckBagHasItem(gLastThrownBall, 1))
+ return FALSE;
+
+ return TRUE;
+#endif
+}
+
+void TryAddLastUsedBallItemSprites(void)
+{
+#if B_LAST_USED_BALL == TRUE
+ if (gLastThrownBall == 0
+ || (gLastThrownBall != 0 && !CheckBagHasItem(gLastThrownBall, 1)))
+ {
+ // we're out of the last used ball, so just set it to the first ball in the bag
+ // we have to compact the bag first bc it is typically only compacted when you open it
+ CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]);
+ gLastThrownBall = gBagPockets[BALLS_POCKET].itemSlots[0].itemId;
+ }
+
+ if (!CanThrowLastUsedBall())
+ return;
+
+ // ball
+ if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES)
+ {
+ gBattleStruct->ballSpriteIds[0] = AddItemIconSprite(102, 102, gLastThrownBall);
+ gSprites[gBattleStruct->ballSpriteIds[0]].x = LAST_USED_BALL_X_0;
+ gSprites[gBattleStruct->ballSpriteIds[0]].y = LAST_USED_BALL_Y;
+ gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore
+ gSprites[gBattleStruct->ballSpriteIds[0]].callback = SpriteCB_LastUsedBall;
+ }
+
+ // window
+ LoadSpritePalette(&sSpritePalette_AbilityPopUp);
+ if (GetSpriteTileStartByTag(LAST_BALL_WINDOW_TAG) == 0xFFFF)
+ LoadSpriteSheet(&sSpriteSheet_LastUsedBallWindow);
+
+ if (gBattleStruct->ballSpriteIds[1] == MAX_SPRITES)
+ {
+ gBattleStruct->ballSpriteIds[1] = CreateSprite(&sSpriteTemplate_LastUsedBallWindow,
+ LAST_BALL_WIN_X_0,
+ LAST_USED_WIN_Y, 5);
+ gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore
+ }
+#endif
+}
+
+static void DestroyLastUsedBallWinGfx(struct Sprite *sprite)
+{
+ FreeSpriteTilesByTag(LAST_BALL_WINDOW_TAG);
+ FreeSpritePaletteByTag(ABILITY_POP_UP_TAG);
+ DestroySprite(sprite);
+ gBattleStruct->ballSpriteIds[1] = MAX_SPRITES;
+}
+
+static void DestroyLastUsedBallGfx(struct Sprite *sprite)
+{
+ FreeSpriteTilesByTag(102);
+ FreeSpritePaletteByTag(102);
+ DestroySprite(sprite);
+ gBattleStruct->ballSpriteIds[0] = MAX_SPRITES;
+}
+
+static void SpriteCB_LastUsedBallWin(struct Sprite *sprite)
+{
+ if (sprite->sHide)
+ {
+ if (sprite->x != LAST_BALL_WIN_X_0)
+ sprite->x--;
+
+ if (sprite->x == LAST_BALL_WIN_X_0)
+ DestroyLastUsedBallWinGfx(sprite);
+ }
+ else
+ {
+ if (sprite->x != LAST_BALL_WIN_X_F)
+ sprite->x++;
+ }
+}
+
+static void SpriteCB_LastUsedBall(struct Sprite *sprite)
+{
+ if (sprite->sHide)
+ {
+ if (sprite->x != LAST_USED_BALL_X_0)
+ sprite->x--;
+
+ if (sprite->x == LAST_USED_BALL_X_0)
+ DestroyLastUsedBallGfx(sprite);
+ }
+ else
+ {
+ if (sprite->x != LAST_USED_BALL_X_F)
+ sprite->x++;
+ }
+}
+
+static void TryHideOrRestoreLastUsedBall(u8 caseId)
+{
+#if B_LAST_USED_BALL == TRUE
+ if (gBattleStruct->ballSpriteIds[0] == MAX_SPRITES)
+ return;
+
+ switch (caseId)
+ {
+ case 0: // hide
+ if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES)
+ gSprites[gBattleStruct->ballSpriteIds[0]].sHide = TRUE; // hide
+ if (gBattleStruct->ballSpriteIds[1] != MAX_SPRITES)
+ gSprites[gBattleStruct->ballSpriteIds[1]].sHide = TRUE; // hide
+ break;
+ case 1: // restore
+ if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES)
+ gSprites[gBattleStruct->ballSpriteIds[0]].sHide = FALSE; // restore
+ if (gBattleStruct->ballSpriteIds[1] != MAX_SPRITES)
+ gSprites[gBattleStruct->ballSpriteIds[1]].sHide = FALSE; // restore
+ break;
+ }
+#endif
+}
+
+void TryHideLastUsedBall(void)
+{
+#if B_LAST_USED_BALL == TRUE
+ TryHideOrRestoreLastUsedBall(0);
+#endif
+}
+
+void TryRestoreLastUsedBall(void)
+{
+#if B_LAST_USED_BALL == TRUE
+ if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES)
+ TryHideOrRestoreLastUsedBall(1);
+ else
+ TryAddLastUsedBallItemSprites();
+#endif
+}
diff --git a/src/battle_intro.c b/src/battle_intro.c
index 42fe659746..78982ca4c3 100644
--- a/src/battle_intro.c
+++ b/src/battle_intro.c
@@ -106,7 +106,7 @@ void HandleIntroSlide(u8 terrain)
{
u8 taskId;
- if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
+ if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) && gPartnerTrainerId != TRAINER_STEVEN_PARTNER && gPartnerTrainerId < TRAINER_CUSTOM_PARTNER)
{
taskId = CreateTask(BattleIntroSlidePartner, 0);
}
diff --git a/src/battle_main.c b/src/battle_main.c
index c39f0689ee..5c03a18b46 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -1,7 +1,8 @@
#include "global.h"
#include "battle.h"
#include "battle_anim.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
+#include "battle_ai_util.h"
#include "battle_arena.h"
#include "battle_controllers.h"
#include "battle_interface.h"
@@ -48,8 +49,10 @@
#include "trig.h"
#include "tv.h"
#include "util.h"
+#include "wild_encounter.h"
#include "window.h"
#include "constants/abilities.h"
+#include "constants/battle_config.h"
#include "constants/battle_move_effects.h"
#include "constants/battle_string_ids.h"
#include "constants/hold_effects.h"
@@ -61,6 +64,8 @@
#include "constants/trainers.h"
#include "cable_club.h"
+extern struct Evolution gEvolutionTable[][EVOS_PER_MON];
+
extern const struct BgTemplate gBattleBgTemplates[];
extern const struct WindowTemplate *const gBattleWindowTemplates[];
@@ -78,36 +83,28 @@ static void EndLinkBattleInSteps(void);
static void CB2_InitAskRecordBattle(void);
static void CB2_AskRecordBattle(void);
static void AskRecordBattle(void);
-static void SpriteCb_MoveWildMonToRight(struct Sprite *sprite);
-static void SpriteCb_WildMonShowHealthbox(struct Sprite *sprite);
-static void SpriteCb_WildMonAnimate(struct Sprite *sprite);
+static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite);
+static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite);
+static void SpriteCB_WildMonAnimate(struct Sprite *sprite);
static void SpriteCB_Flicker(struct Sprite *sprite);
static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite);
-static void SpriteCb_BlinkVisible(struct Sprite *sprite);
+static void SpriteCB_BlinkVisible(struct Sprite *sprite);
static void SpriteCB_Idle(struct Sprite *sprite);
static void SpriteCB_BattleSpriteSlideLeft(struct Sprite *sprite);
static void TurnValuesCleanUp(bool8 var0);
static void SpriteCB_BounceEffect(struct Sprite *sprite);
static void BattleStartClearSetData(void);
-static void BattleIntroGetMonsData(void);
-static void BattleIntroPrepareBackgroundSlide(void);
-static void BattleIntroDrawTrainersOrMonsSprites(void);
-static void BattleIntroDrawPartySummaryScreens(void);
-static void BattleIntroPrintTrainerWantsToBattle(void);
-static void BattleIntroPrintWildMonAttacked(void);
-static void BattleIntroPrintOpponentSendsOut(void);
-static void BattleIntroPrintPlayerSendsOut(void);
-static void BattleIntroOpponent1SendsOutMonAnimation(void);
-static void BattleIntroOpponent2SendsOutMonAnimation(void);
-static void BattleIntroRecordMonsToDex(void);
-static void BattleIntroPlayer1SendsOutMonAnimation(void);
+static void DoBattleIntro(void);
static void TryDoEventsBeforeFirstTurn(void);
static void HandleTurnActionSelectionState(void);
static void RunTurnActionsFunctions(void);
static void SetActionsAndBattlersTurnOrder(void);
static void UpdateBattlerPartyOrdersOnSwitch(void);
static bool8 AllAtActionConfirmed(void);
+static void TryChangeTurnOrder(void);
static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void);
+static void CheckMegaEvolutionBeforeTurn(void);
+static void CheckQuickClaw_CustapBerryActivation(void);
static void FreeResetData_ReturnToOvOrDoEvolutions(void);
static void ReturnFromBattleToOverworld(void);
static void TryEvolvePokemon(void);
@@ -118,8 +115,9 @@ static void HandleEndTurn_BattleLost(void);
static void HandleEndTurn_RanFromBattle(void);
static void HandleEndTurn_MonFled(void);
static void HandleEndTurn_FinishBattle(void);
-static void SpriteCB_UnusedBattleInit(struct Sprite* sprite);
+static void SpriteCB_UnusedBattleInit(struct Sprite *sprite);
static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite);
+static void TrySpecialEvolution(void);
EWRAM_DATA u16 gBattle_BG0_X = 0;
EWRAM_DATA u16 gBattle_BG0_Y = 0;
@@ -133,10 +131,10 @@ EWRAM_DATA u16 gBattle_WIN0H = 0;
EWRAM_DATA u16 gBattle_WIN0V = 0;
EWRAM_DATA u16 gBattle_WIN1H = 0;
EWRAM_DATA u16 gBattle_WIN1V = 0;
-EWRAM_DATA u8 gDisplayedStringBattle[300] = {0};
+EWRAM_DATA u8 gDisplayedStringBattle[400] = {0};
EWRAM_DATA u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT] = {0};
EWRAM_DATA u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT] = {0};
-EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0};
+EWRAM_DATA u8 gBattleTextBuff3[30] = {0}; //expanded for stupidly long z move names
// The below array is never intentionally used. However, Juan's
// defeat text (SootopolisCity_Gym_1F_Text_JuanDefeat) is too long
// for gDisplayedStringBattle and overflows into this array. If it
@@ -150,8 +148,6 @@ EWRAM_DATA struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE] =
EWRAM_DATA static struct MultiPartnerMenuPokemon* sMultiPartnerPartyBuffer = NULL;
EWRAM_DATA u8 *gBattleAnimBgTileBuffer = NULL;
EWRAM_DATA u8 *gBattleAnimBgTilemapBuffer = NULL;
-EWRAM_DATA u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200] = {0};
-EWRAM_DATA u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200] = {0};
EWRAM_DATA u8 gActiveBattler = 0;
EWRAM_DATA u32 gBattleControllerExecFlags = 0;
EWRAM_DATA u8 gBattlersCount = 0;
@@ -172,17 +168,16 @@ EWRAM_DATA s32 gBattleMoveDamage = 0;
EWRAM_DATA s32 gHpDealt = 0;
EWRAM_DATA s32 gTakenDmg[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u16 gLastUsedItem = 0;
-EWRAM_DATA u8 gLastUsedAbility = 0;
+EWRAM_DATA u16 gLastUsedAbility = 0;
EWRAM_DATA u8 gBattlerAttacker = 0;
EWRAM_DATA u8 gBattlerTarget = 0;
EWRAM_DATA u8 gBattlerFainted = 0;
EWRAM_DATA u8 gEffectBattler = 0;
EWRAM_DATA u8 gPotentialItemEffectBattler = 0;
EWRAM_DATA u8 gAbsentBattlerFlags = 0;
-EWRAM_DATA u8 gCritMultiplier = 0;
+EWRAM_DATA u8 gIsCriticalHit = FALSE;
EWRAM_DATA u8 gMultiHitCounter = 0;
EWRAM_DATA const u8 *gBattlescriptCurrInstr = NULL;
-EWRAM_DATA u32 gUnusedBattleMainVar = 0;
EWRAM_DATA u8 gChosenActionByBattler[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL};
EWRAM_DATA const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL};
@@ -192,16 +187,17 @@ EWRAM_DATA u16 gLastLandedMoves[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u16 gLastHitByType[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u16 gLastResultingMoves[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u16 gLockedMoves[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gLastUsedMove = 0;
EWRAM_DATA u8 gLastHitBy[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT] = {0};
-EWRAM_DATA u8 gMoveResultFlags = 0;
+EWRAM_DATA u16 gMoveResultFlags = 0;
EWRAM_DATA u32 gHitMarker = 0;
-EWRAM_DATA static u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gUnusedFirstBattleVar2 = 0; // Never read
-EWRAM_DATA u16 gSideStatuses[2] = {0};
+EWRAM_DATA u32 gSideStatuses[2] = {0};
EWRAM_DATA struct SideTimer gSideTimers[2] = {0};
EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u32 gStatuses4[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u16 gPauseCounterBattle = 0;
EWRAM_DATA u16 gPaydayMoney = 0;
@@ -214,7 +210,6 @@ EWRAM_DATA u16 gBattleWeather = 0;
EWRAM_DATA struct WishFutureKnock gWishFutureKnock = {0};
EWRAM_DATA u16 gIntroSlideFlags = 0;
EWRAM_DATA u8 gSentPokesToOpponent[2] = {0};
-EWRAM_DATA u16 gDynamicBasePower = 0;
EWRAM_DATA u16 gExpShareExp = 0;
EWRAM_DATA struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA struct BattleScripting gBattleScripting = {0};
@@ -236,6 +231,16 @@ EWRAM_DATA struct BattleHealthboxInfo *gBattleControllerOpponentFlankHealthboxDa
EWRAM_DATA u16 gBattleMovePower = 0;
EWRAM_DATA u16 gMoveToLearn = 0;
EWRAM_DATA u8 gBattleMonForms[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u32 gFieldStatuses = 0;
+EWRAM_DATA struct FieldTimer gFieldTimers = {0};
+EWRAM_DATA u8 gBattlerAbility = 0;
+EWRAM_DATA u16 gPartnerSpriteId = 0;
+EWRAM_DATA struct TotemBoost gTotemBoosts[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA bool8 gHasFetchedBall = FALSE;
+EWRAM_DATA u8 gLastUsedBall = 0;
+EWRAM_DATA u16 gLastThrownBall = 0;
+EWRAM_DATA u8 gPartyCriticalHits[PARTY_SIZE] = {0};
+EWRAM_DATA static u8 sTriedEvolving = 0;
void (*gPreBattleCallback1)(void);
void (*gBattleMainFunc)(void);
@@ -301,156 +306,29 @@ const struct OamData gOamData_BattleSpritePlayerSide =
.affineParam = 0,
};
-// Unknown and unused data. Feel free to remove.
-static const u16 sUnused1[] = {0, 5, 0xfffe, 0};
-static const u16 *const sUnused1Ptr = sUnused1;
-static const u16 sUnused2[] = {0xfff0, 0, 0x0400, 0, 0, 0, 0x3c00, 0, 0x7ffe, 1, 0, 0};
-static const u16 *const sUnused2Ptr = sUnused2;
-
static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32};
-// format: attacking type, defending type, damage multiplier
-// the multiplier is a (decimal) fixed-point number:
-// 20 is ×2.0 TYPE_MUL_SUPER_EFFECTIVE
-// 10 is ×1.0 TYPE_MUL_NORMAL
-// 05 is ×0.5 TYPE_MUL_NOT_EFFECTIVE
-// 00 is ×0.0 TYPE_MUL_NO_EFFECT
-const u8 gTypeEffectiveness[336] =
-{
- TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT,
- TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT,
- TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT,
- TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT,
- TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT,
- TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
- TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
- TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT,
- TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT,
- TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT,
- TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT
-};
-
const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1] =
{
- [TYPE_NORMAL] = _("NORMAL"),
- [TYPE_FIGHTING] = _("FIGHT"),
- [TYPE_FLYING] = _("FLYING"),
- [TYPE_POISON] = _("POISON"),
- [TYPE_GROUND] = _("GROUND"),
- [TYPE_ROCK] = _("ROCK"),
- [TYPE_BUG] = _("BUG"),
- [TYPE_GHOST] = _("GHOST"),
- [TYPE_STEEL] = _("STEEL"),
+ [TYPE_NORMAL] = _("Normal"),
+ [TYPE_FIGHTING] = _("Fight"),
+ [TYPE_FLYING] = _("Flying"),
+ [TYPE_POISON] = _("Poison"),
+ [TYPE_GROUND] = _("Ground"),
+ [TYPE_ROCK] = _("Rock"),
+ [TYPE_BUG] = _("Bug"),
+ [TYPE_GHOST] = _("Ghost"),
+ [TYPE_STEEL] = _("Steel"),
[TYPE_MYSTERY] = _("???"),
- [TYPE_FIRE] = _("FIRE"),
- [TYPE_WATER] = _("WATER"),
- [TYPE_GRASS] = _("GRASS"),
- [TYPE_ELECTRIC] = _("ELECTR"),
- [TYPE_PSYCHIC] = _("PSYCHC"),
- [TYPE_ICE] = _("ICE"),
- [TYPE_DRAGON] = _("DRAGON"),
- [TYPE_DARK] = _("DARK"),
+ [TYPE_FIRE] = _("Fire"),
+ [TYPE_WATER] = _("Water"),
+ [TYPE_GRASS] = _("Grass"),
+ [TYPE_ELECTRIC] = _("Electr"),
+ [TYPE_PSYCHIC] = _("Psychc"),
+ [TYPE_ICE] = _("Ice"),
+ [TYPE_DRAGON] = _("Dragon"),
+ [TYPE_DARK] = _("Dark"),
+ [TYPE_FAIRY] = _("Fairy"),
};
// This is a factor in how much money you get for beating a trainer.
@@ -532,6 +410,7 @@ static void (* const sTurnActionsFuncsTable[])(void) =
[B_ACTION_TRY_FINISH] = HandleAction_TryFinish,
[B_ACTION_FINISHED] = HandleAction_ActionFinished,
[B_ACTION_NOTHING_FAINTED] = HandleAction_NothingIsFainted,
+ [B_ACTION_THROW_BALL] = HandleAction_ThrowBall,
};
static void (* const sEndTurnFuncsTable[])(void) =
@@ -557,7 +436,7 @@ const u8 gStatusConditionString_IceJpn[] = _("こおり$$$$");
const u8 gStatusConditionString_ConfusionJpn[] = _("こんらん$$$");
const u8 gStatusConditionString_LoveJpn[] = _("メロメロ$$$");
-const u8 * const gStatusConditionStringsTable[][2] =
+const u8 *const gStatusConditionStringsTable[][2] =
{
{gStatusConditionString_PoisonJpn, gText_Poison},
{gStatusConditionString_SleepJpn, gText_Sleep},
@@ -606,7 +485,7 @@ static void CB2_InitBattleInternal(void)
SetHBlankCallback(NULL);
SetVBlankCallback(NULL);
- CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+ CpuFill32(0, (void *)(VRAM), VRAM_SIZE);
SetGpuReg(REG_OFFSET_MOSAIC, 0);
SetGpuReg(REG_OFFSET_WIN0H, DISPLAY_WIDTH);
@@ -616,7 +495,7 @@ static void CB2_InitBattleInternal(void)
gBattle_WIN0H = DISPLAY_WIDTH;
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER && gPartnerTrainerId < TRAINER_CUSTOM_PARTNER)
{
gBattle_WIN0V = DISPLAY_HEIGHT - 1;
gBattle_WIN1H = DISPLAY_WIDTH;
@@ -681,7 +560,7 @@ static void CB2_InitBattleInternal(void)
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED)))
{
CreateNPCTrainerParty(&gEnemyParty[0], gTrainerBattleOpponent_A, TRUE);
- if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
+ if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT)
CreateNPCTrainerParty(&gEnemyParty[PARTY_SIZE / 2], gTrainerBattleOpponent_B, FALSE);
SetWildMonHeldItem();
}
@@ -756,7 +635,7 @@ static void SetPlayerBerryDataInBattleStruct(void)
}
else
{
- const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY));
+ const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY_E_READER));
for (i = 0; i < BERRY_NAME_LENGTH; i++)
battleBerry->name[i] = berryData->name[i];
@@ -772,8 +651,7 @@ static void SetPlayerBerryDataInBattleStruct(void)
static void SetAllPlayersBerryData(void)
{
- s32 i;
- s32 j;
+ s32 i, j;
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
{
@@ -800,7 +678,7 @@ static void SetAllPlayersBerryData(void)
}
else
{
- const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY));
+ const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY_E_READER));
for (i = 0; i < BERRY_NAME_LENGTH; i++)
{
@@ -816,8 +694,8 @@ static void SetAllPlayersBerryData(void)
gEnigmaBerries[2].itemEffect[i] = 0;
}
- gEnigmaBerries[0].holdEffect = 0;
- gEnigmaBerries[2].holdEffect = 0;
+ gEnigmaBerries[0].holdEffect = HOLD_EFFECT_NONE;
+ gEnigmaBerries[2].holdEffect = HOLD_EFFECT_NONE;
gEnigmaBerries[0].holdEffectParam = 0;
gEnigmaBerries[2].holdEffectParam = 0;
}
@@ -1067,7 +945,7 @@ static void CB2_HandleStartBattle(void)
// Recv Pokémon 5-6
ResetBlockReceivedFlags();
memcpy(&gEnemyParty[4], gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2);
-
+
TryCorrectShedinjaLanguage(&gEnemyParty[0]);
TryCorrectShedinjaLanguage(&gEnemyParty[1]);
TryCorrectShedinjaLanguage(&gEnemyParty[2]);
@@ -1803,7 +1681,7 @@ static void CB2_HandleStartMultiBattle(void)
case 8:
if (IsLinkTaskFinished())
{
- u32* ptr = gBattleStruct->multiBuffer.battleVideo;
+ u32 *ptr = gBattleStruct->multiBuffer.battleVideo;
ptr[0] = gBattleTypeFlags;
ptr[1] = gRecordedBattleRngSeed; // UB: overwrites berry data
SendBlock(BitmaskAllOtherLinkPlayers(), ptr, sizeof(gBattleStruct->multiBuffer.battleVideo));
@@ -1889,7 +1767,7 @@ void CB2_QuitRecordedBattle(void)
#define sState data[0]
#define sDelay data[4]
-static void SpriteCB_UnusedBattleInit(struct Sprite* sprite)
+static void SpriteCB_UnusedBattleInit(struct Sprite *sprite)
{
sprite->sState = 0;
sprite->callback = SpriteCB_UnusedBattleInit_Main;
@@ -1897,7 +1775,7 @@ static void SpriteCB_UnusedBattleInit(struct Sprite* sprite)
static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite)
{
- u16 *arr = (u16*)gDecompressionBuffer;
+ u16 *arr = (u16 *)gDecompressionBuffer;
switch (sprite->sState)
{
@@ -2058,13 +1936,6 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
return gTrainers[trainerNum].partySize;
}
-// Unused
-static void HBlankCB_Battle(void)
-{
- if (REG_VCOUNT < DISPLAY_HEIGHT && REG_VCOUNT >= 111)
- SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_SCREENBASE(24) | BGCNT_TXT256x512);
-}
-
void VBlankCB_Battle(void)
{
// Change gRngSeed every vblank unless the battle could be recorded.
@@ -2176,7 +2047,7 @@ void CB2_InitEndLinkBattle(void)
}
else
{
- CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+ CpuFill32(0, (void *)(VRAM), VRAM_SIZE);
SetGpuReg(REG_OFFSET_MOSAIC, 0);
SetGpuReg(REG_OFFSET_WIN0H, DISPLAY_WIDTH);
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1));
@@ -2317,7 +2188,7 @@ static void EndLinkBattleInSteps(void)
}
break;
case 3:
- CpuFill32(0, (void*)VRAM, VRAM_SIZE);
+ CpuFill32(0, (void *)VRAM, VRAM_SIZE);
for (i = 0; i < 2; i++)
LoadChosenBattleElement(i);
@@ -2404,7 +2275,7 @@ static void CB2_InitAskRecordBattle(void)
SetHBlankCallback(NULL);
SetVBlankCallback(NULL);
- CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+ CpuFill32(0, (void *)(VRAM), VRAM_SIZE);
ResetPaletteFade();
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -2487,7 +2358,7 @@ static void AskRecordBattle(void)
case STATE_PRINT_YES_NO:
if (!IsTextPrinterActive(B_WIN_MSG))
{
- HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
+ HandleBattleWindow(YESNOBOX_X_Y, 0);
BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO);
gBattleCommunication[CURSOR_POSITION] = 1;
BattleCreateYesNoCursorAt(1);
@@ -2523,7 +2394,7 @@ static void AskRecordBattle(void)
if (gBattleCommunication[CURSOR_POSITION] == 0)
{
// Selected Yes
- HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
gBattleCommunication[1] = MoveRecordedBattleToSaveData();
gBattleCommunication[MULTIUSE_STATE] = STATE_RECORD_YES;
}
@@ -2542,7 +2413,7 @@ static void AskRecordBattle(void)
case STATE_RECORD_NO:
if (IsLinkTaskFinished() == TRUE)
{
- HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
if (gMain.anyLinkBattlerHasFrontierPass)
{
// Other battlers may be recording, wait for them
@@ -2648,38 +2519,44 @@ u32 GetBattleWindowTemplatePixelWidth(u32 windowsType, u32 tableId)
#define sBattler data[0]
#define sSpeciesId data[2]
-void SpriteCb_WildMon(struct Sprite *sprite)
+void SpriteCB_WildMon(struct Sprite *sprite)
{
- sprite->callback = SpriteCb_MoveWildMonToRight;
+ sprite->callback = SpriteCB_MoveWildMonToRight;
StartSpriteAnimIfDifferent(sprite, 0);
- BeginNormalPaletteFade(0x20000, 0, 10, 10, RGB(8, 8, 8));
+ if (WILD_DOUBLE_BATTLE)
+ BeginNormalPaletteFade((0x10000 << sprite->sBattler) | (0x10000 << BATTLE_PARTNER(sprite->sBattler)), 0, 10, 10, RGB(8, 8, 8));
+ else
+ BeginNormalPaletteFade((0x10000 << sprite->sBattler), 0, 10, 10, RGB(8, 8, 8));
}
-static void SpriteCb_MoveWildMonToRight(struct Sprite *sprite)
+static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite)
{
if ((gIntroSlideFlags & 1) == 0)
{
sprite->x2 += 2;
if (sprite->x2 == 0)
{
- sprite->callback = SpriteCb_WildMonShowHealthbox;
+ sprite->callback = SpriteCB_WildMonShowHealthbox;
}
}
}
-static void SpriteCb_WildMonShowHealthbox(struct Sprite *sprite)
+static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite)
{
if (sprite->animEnded)
{
StartHealthboxSlideIn(sprite->sBattler);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[sprite->sBattler]);
- sprite->callback = SpriteCb_WildMonAnimate;
+ sprite->callback = SpriteCB_WildMonAnimate;
StartSpriteAnimIfDifferent(sprite, 0);
- BeginNormalPaletteFade(0x20000, 0, 10, 0, RGB(8, 8, 8));
+ if (WILD_DOUBLE_BATTLE)
+ BeginNormalPaletteFade((0x10000 << sprite->sBattler) | (0x10000 << BATTLE_PARTNER(sprite->sBattler)), 0, 10, 0, RGB(8, 8, 8));
+ else
+ BeginNormalPaletteFade((0x10000 << sprite->sBattler), 0, 10, 0, RGB(8, 8, 8));
}
}
-static void SpriteCb_WildMonAnimate(struct Sprite *sprite)
+static void SpriteCB_WildMonAnimate(struct Sprite *sprite)
{
if (!gPaletteFade.active)
{
@@ -2695,14 +2572,6 @@ void SpriteCallbackDummy_2(struct Sprite *sprite)
#define sNumFlickers data[3]
#define sDelay data[4]
-// Unused
-static void SpriteCB_InitFlicker(struct Sprite *sprite)
-{
- sprite->sNumFlickers = 6;
- sprite->sDelay = 1;
- sprite->callback = SpriteCB_Flicker;
-}
-
static void SpriteCB_Flicker(struct Sprite *sprite)
{
sprite->sDelay--;
@@ -2715,7 +2584,7 @@ static void SpriteCB_Flicker(struct Sprite *sprite)
{
sprite->invisible = FALSE;
sprite->callback = SpriteCallbackDummy_2;
- sFlickerArray[0] = 0;
+ // sFlickerArray[0] = 0;
}
}
}
@@ -2778,7 +2647,7 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite)
}
else // Erase bottom part of the sprite to create a smooth illusion of mon falling down.
{
- u8* dst = gMonSpritesGfxPtr->sprites.byte[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8);
+ u8 *dst = gMonSpritesGfxPtr->sprites.byte[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8);
for (i = 0; i < 0x100; i++)
*(dst++) = 0;
@@ -2789,14 +2658,14 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite)
}
// Used when selecting a move, which can hit multiple targets, in double battles.
-void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite)
+void SpriteCB_ShowAsMoveTarget(struct Sprite *sprite)
{
sprite->data[3] = 8;
sprite->data[4] = sprite->invisible;
- sprite->callback = SpriteCb_BlinkVisible;
+ sprite->callback = SpriteCB_BlinkVisible;
}
-static void SpriteCb_BlinkVisible(struct Sprite *sprite)
+static void SpriteCB_BlinkVisible(struct Sprite *sprite)
{
if (--sprite->data[3] == 0)
{
@@ -2805,7 +2674,7 @@ static void SpriteCb_BlinkVisible(struct Sprite *sprite)
}
}
-void SpriteCb_HideAsMoveTarget(struct Sprite *sprite)
+void SpriteCB_HideAsMoveTarget(struct Sprite *sprite)
{
sprite->invisible = sprite->data[4];
sprite->data[4] = FALSE;
@@ -2869,11 +2738,11 @@ void SpriteCB_FaintSlideAnim(struct Sprite *sprite)
#undef sSpeedX
#undef sSpeedY
-#define sSinIndex data[0]
-#define sDelta data[1]
-#define sAmplitude data[2]
-#define sBouncerSpriteId data[3]
-#define sWhich data[4]
+#define sSinIndex data[3]
+#define sDelta data[4]
+#define sAmplitude data[5]
+#define sBouncerSpriteId data[6]
+#define sWhich data[7]
void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude)
{
@@ -2912,6 +2781,7 @@ void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude)
gSprites[invisibleSpriteId].sAmplitude = amplitude;
gSprites[invisibleSpriteId].sBouncerSpriteId = bouncerSpriteId;
gSprites[invisibleSpriteId].sWhich = which;
+ gSprites[invisibleSpriteId].sBattler = battler;
gSprites[bouncerSpriteId].x2 = 0;
gSprites[bouncerSpriteId].y2 = 0;
}
@@ -2946,15 +2816,15 @@ void EndBounceEffect(u8 battler, u8 which)
static void SpriteCB_BounceEffect(struct Sprite *sprite)
{
u8 bouncerSpriteId = sprite->sBouncerSpriteId;
- s32 index;
+ s32 index = sprite->sSinIndex;
+ s32 y = Sin(index, sprite->sAmplitude) + sprite->sAmplitude;
- if (sprite->sWhich == BOUNCE_HEALTHBOX)
- index = sprite->sSinIndex;
- else
- index = sprite->sSinIndex;
-
- gSprites[bouncerSpriteId].y2 = Sin(index, sprite->sAmplitude) + sprite->sAmplitude;
+ gSprites[bouncerSpriteId].y2 = y;
sprite->sSinIndex = (sprite->sSinIndex + sprite->sDelta) & 0xFF;
+
+ bouncerSpriteId = GetMegaIndicatorSpriteId(sprite->sBouncerSpriteId);
+ if (sprite->sWhich == BOUNCE_HEALTHBOX && bouncerSpriteId != 0xFF)
+ gSprites[bouncerSpriteId].y2 = y;
}
#undef sSinIndex
@@ -2976,7 +2846,7 @@ static void SpriteCB_TrainerThrowObject_Main(struct Sprite *sprite)
sprite->callback = SpriteCB_Idle;
}
-// Sprite callback for a trainer back pic to throw an object
+// Sprite callback for a trainer back pic to throw an object
// (Wally throwing a ball, throwing Pokéblocks/balls in the Safari Zone)
void SpriteCB_TrainerThrowObject(struct Sprite *sprite)
{
@@ -2999,7 +2869,8 @@ void BeginBattleIntro(void)
{
BattleStartClearSetData();
gBattleCommunication[1] = 0;
- gBattleMainFunc = BattleIntroGetMonsData;
+ gBattleStruct->introState = 0;
+ gBattleMainFunc = DoBattleIntro;
}
static void BattleMainCB1(void)
@@ -3013,50 +2884,51 @@ static void BattleMainCB1(void)
static void BattleStartClearSetData(void)
{
s32 i;
- u32 j;
- u8 *dataPtr;
TurnValuesCleanUp(FALSE);
SpecialStatusesClear();
+ memset(&gDisableStructs, 0, sizeof(gDisableStructs));
+ memset(&gFieldTimers, 0, sizeof(gFieldTimers));
+ memset(&gSideStatuses, 0, sizeof(gSideStatuses));
+ memset(&gSideTimers, 0, sizeof(gSideTimers));
+ memset(&gWishFutureKnock, 0, sizeof(gWishFutureKnock));
+ memset(&gBattleResults, 0, sizeof(gBattleResults));
+
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
gStatuses3[i] = 0;
-
- dataPtr = (u8 *)&gDisableStructs[i];
- for (j = 0; j < sizeof(struct DisableStruct); j++)
- dataPtr[j] = 0;
-
+ gStatuses4[i] = 0;
gDisableStructs[i].isFirstTurn = 2;
- sUnusedBattlersArray[i] = 0;
- gLastMoves[i] = 0;
- gLastLandedMoves[i] = 0;
+ gLastMoves[i] = MOVE_NONE;
+ gLastLandedMoves[i] = MOVE_NONE;
gLastHitByType[i] = 0;
- gLastResultingMoves[i] = 0;
+ gLastResultingMoves[i] = MOVE_NONE;
gLastHitBy[i] = 0xFF;
- gLockedMoves[i] = 0;
- gLastPrintedMoves[i] = 0;
+ gLockedMoves[i] = MOVE_NONE;
+ gLastPrintedMoves[i] = MOVE_NONE;
gBattleResources->flags->flags[i] = 0;
gPalaceSelectionBattleScripts[i] = 0;
+ gBattleStruct->lastTakenMove[i] = MOVE_NONE;
+ gBattleStruct->choicedMove[i] = MOVE_NONE;
+ gBattleStruct->changedItems[i] = 0;
+ gBattleStruct->lastTakenMoveFrom[i][0] = MOVE_NONE;
+ gBattleStruct->lastTakenMoveFrom[i][1] = MOVE_NONE;
+ gBattleStruct->lastTakenMoveFrom[i][2] = MOVE_NONE;
+ gBattleStruct->lastTakenMoveFrom[i][3] = MOVE_NONE;
+ gBattleStruct->AI_monToSwitchIntoId[i] = PARTY_SIZE;
+ gBattleStruct->skyDropTargets[i] = 0xFF;
}
- for (i = 0; i < 2; i++)
- {
- gSideStatuses[i] = 0;
+ gLastUsedMove = 0;
+ gFieldStatuses = 0;
- dataPtr = (u8 *)&gSideTimers[i];
- for (j = 0; j < sizeof(struct SideTimer); j++)
- dataPtr[j] = 0;
- }
+ gHasFetchedBall = FALSE;
+ gLastUsedBall = 0;
gBattlerAttacker = 0;
gBattlerTarget = 0;
gBattleWeather = 0;
-
- dataPtr = (u8 *)&gWishFutureKnock;
- for (i = 0; i < sizeof(struct WishFutureKnock); i++)
- dataPtr[i] = 0;
-
gHitMarker = 0;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
@@ -3065,9 +2937,13 @@ static void BattleStartClearSetData(void)
gHitMarker |= HITMARKER_NO_ANIMATIONS;
}
else if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) && GetBattleSceneInRecordedBattle())
+ {
gHitMarker |= HITMARKER_NO_ANIMATIONS;
+ }
gBattleScripting.battleStyle = gSaveBlock2Ptr->optionsBattleStyle;
+ gBattleScripting.expOnCatch = (B_EXP_CATCH >= GEN_6);
+ gBattleScripting.monCaught = FALSE;
gMultiHitCounter = 0;
gBattleOutcome = 0;
@@ -3089,49 +2965,43 @@ static void BattleStartClearSetData(void)
gBattleStruct->runTries = 0;
gBattleStruct->safariGoNearCounter = 0;
gBattleStruct->safariPkblThrowCounter = 0;
- *(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275;
+ gBattleStruct->safariCatchFactor = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275;
gBattleStruct->safariEscapeFactor = 3;
gBattleStruct->wildVictorySong = 0;
gBattleStruct->moneyMultiplier = 1;
- for (i = 0; i < 8; i++)
- {
- *((u8 *)gBattleStruct->lastTakenMove + i) = 0;
- *((u8 *)gBattleStruct->usedHeldItems + i) = 0;
- *((u8 *)gBattleStruct->choicedMove + i) = 0;
- *((u8 *)gBattleStruct->changedItems + i) = 0;
- *(i + 0 * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(i + 1 * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(i + 2 * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(i + 3 * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- }
-
- for (i = 0; i < MAX_BATTLERS_COUNT; i++)
- {
- *(gBattleStruct->AI_monToSwitchIntoId + i) = PARTY_SIZE;
- }
-
gBattleStruct->givenExpMons = 0;
gBattleStruct->palaceFlags = 0;
gRandomTurnNumber = Random();
- dataPtr = (u8 *)(&gBattleResults);
- for (i = 0; i < sizeof(struct BattleResults); i++)
- dataPtr[i] = 0;
-
gBattleResults.shinyWildMon = IsMonShiny(&gEnemyParty[0]);
gBattleStruct->arenaLostPlayerMons = 0;
gBattleStruct->arenaLostOpponentMons = 0;
+
+ gBattleStruct->mega.triggerSpriteId = 0xFF;
+
+ gBattleStruct->stickyWebUser = 0xFF;
+ gBattleStruct->appearedInBattle = 0;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ gBattleStruct->usedHeldItems[i][0] = 0;
+ gBattleStruct->usedHeldItems[i][1] = 0;
+ gBattleStruct->itemStolen[i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ gPartyCriticalHits[i] = 0;
+ }
+
+ gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky
}
void SwitchInClearSetData(void)
{
- struct DisableStruct disableStructCopy = gDisableStructs[gActiveBattler];
s32 i;
- u8 *ptr;
+ struct DisableStruct disableStructCopy = gDisableStructs[gActiveBattler];
+ ClearIllusionMon(gActiveBattler);
if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS)
{
for (i = 0; i < NUM_BATTLE_STATS; i++)
@@ -3150,8 +3020,10 @@ void SwitchInClearSetData(void)
if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS)
{
gBattleMons[gActiveBattler].status2 &= (STATUS2_CONFUSION | STATUS2_FOCUS_ENERGY | STATUS2_SUBSTITUTE | STATUS2_ESCAPE_PREVENTION | STATUS2_CURSED);
- gStatuses3[gActiveBattler] &= (STATUS3_LEECHSEED_BATTLER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT);
-
+ gStatuses3[gActiveBattler] &= (STATUS3_LEECHSEED_BATTLER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED
+ | STATUS3_GASTRO_ACID | STATUS3_EMBARGO | STATUS3_TELEKINESIS | STATUS3_MAGNET_RISE | STATUS3_HEAL_BLOCK
+ | STATUS3_AQUA_RING | STATUS3_POWER_TRICK);
+ gStatuses4[gActiveBattler] &= (STATUS4_MUD_SPORT | STATUS4_WATER_SPORT);
for (i = 0; i < gBattlersCount; i++)
{
if (GetBattlerSide(gActiveBattler) != GetBattlerSide(i)
@@ -3162,11 +3034,14 @@ void SwitchInClearSetData(void)
gStatuses3[i] |= STATUS3_ALWAYS_HITS_TURN(2);
}
}
+ if (gStatuses3[gActiveBattler] & STATUS3_POWER_TRICK)
+ SWAP(gBattleMons[gActiveBattler].attack, gBattleMons[gActiveBattler].defense, i);
}
else
{
gBattleMons[gActiveBattler].status2 = 0;
gStatuses3[gActiveBattler] = 0;
+ gStatuses4[gActiveBattler] = 0;
}
for (i = 0; i < gBattlersCount; i++)
@@ -3180,9 +3055,7 @@ void SwitchInClearSetData(void)
gActionSelectionCursor[gActiveBattler] = 0;
gMoveSelectionCursor[gActiveBattler] = 0;
- ptr = (u8 *)&gDisableStructs[gActiveBattler];
- for (i = 0; i < sizeof(struct DisableStruct); i++)
- ptr[i] = 0;
+ memset(&gDisableStructs[gActiveBattler], 0, sizeof(struct DisableStruct));
if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS)
{
@@ -3196,58 +3069,57 @@ void SwitchInClearSetData(void)
gMoveResultFlags = 0;
gDisableStructs[gActiveBattler].isFirstTurn = 2;
gDisableStructs[gActiveBattler].truantSwitchInHack = disableStructCopy.truantSwitchInHack;
- gLastMoves[gActiveBattler] = 0;
- gLastLandedMoves[gActiveBattler] = 0;
+ gLastMoves[gActiveBattler] = MOVE_NONE;
+ gLastLandedMoves[gActiveBattler] = MOVE_NONE;
gLastHitByType[gActiveBattler] = 0;
- gLastResultingMoves[gActiveBattler] = 0;
- gLastPrintedMoves[gActiveBattler] = 0;
+ gLastResultingMoves[gActiveBattler] = MOVE_NONE;
+ gLastPrintedMoves[gActiveBattler] = MOVE_NONE;
gLastHitBy[gActiveBattler] = 0xFF;
- *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 0) = 0;
- *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 1) = 0;
- *(0 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(0 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
- *(1 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(1 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
- *(2 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(2 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
- *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
-
+ gBattleStruct->lastTakenMove[gActiveBattler] = 0;
+ gBattleStruct->sameMoveTurns[gActiveBattler] = 0;
+ gBattleStruct->lastTakenMoveFrom[gActiveBattler][0] = 0;
+ gBattleStruct->lastTakenMoveFrom[gActiveBattler][1] = 0;
+ gBattleStruct->lastTakenMoveFrom[gActiveBattler][2] = 0;
+ gBattleStruct->lastTakenMoveFrom[gActiveBattler][3] = 0;
+ gBattleStruct->lastMoveFailed &= ~(gBitTable[gActiveBattler]);
gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]);
+
+ if (gActiveBattler == gBattleStruct->stickyWebUser)
+ gBattleStruct->stickyWebUser = 0xFF; // Switched into sticky web user slot so reset it
for (i = 0; i < gBattlersCount; i++)
{
if (i != gActiveBattler && GetBattlerSide(i) != GetBattlerSide(gActiveBattler))
- {
- *(gBattleStruct->lastTakenMove + i * 2 + 0) = 0;
- *(gBattleStruct->lastTakenMove + i * 2 + 1) = 0;
- }
- *(i * 8 + gActiveBattler * 2 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(i * 8 + gActiveBattler * 2 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
+ gBattleStruct->lastTakenMove[i] = MOVE_NONE;
+
+ gBattleStruct->lastTakenMoveFrom[i][gActiveBattler] = 0;
}
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBattler]) + 0) = 0;
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBattler]) + 1) = 0;
-
+ gBattleStruct->choicedMove[gActiveBattler] = MOVE_NONE;
gBattleResources->flags->flags[gActiveBattler] = 0;
- gCurrentMove = 0;
+ gCurrentMove = MOVE_NONE;
gBattleStruct->arenaTurnCounter = 0xFF;
+
+ // Reset damage to prevent things like red card activating if the switched-in mon is holding it
+ gSpecialStatuses[gActiveBattler].physicalDmg = 0;
+ gSpecialStatuses[gActiveBattler].specialDmg = 0;
ClearBattlerMoveHistory(gActiveBattler);
ClearBattlerAbilityHistory(gActiveBattler);
+ ClearBattlerItemEffectHistory(gActiveBattler);
}
void FaintClearSetData(void)
{
s32 i;
- u8 *ptr;
for (i = 0; i < NUM_BATTLE_STATS; i++)
gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
gBattleMons[gActiveBattler].status2 = 0;
gStatuses3[gActiveBattler] = 0;
+ gStatuses4[gActiveBattler] = 0;
for (i = 0; i < gBattlersCount; i++)
{
@@ -3262,547 +3134,458 @@ void FaintClearSetData(void)
gActionSelectionCursor[gActiveBattler] = 0;
gMoveSelectionCursor[gActiveBattler] = 0;
- ptr = (u8 *)&gDisableStructs[gActiveBattler];
- for (i = 0; i < sizeof(struct DisableStruct); i++)
- ptr[i] = 0;
+ memset(&gDisableStructs[gActiveBattler], 0, sizeof(struct DisableStruct));
- gProtectStructs[gActiveBattler].protected = 0;
- gProtectStructs[gActiveBattler].endured = 0;
- gProtectStructs[gActiveBattler].noValidMoves = 0;
- gProtectStructs[gActiveBattler].helpingHand = 0;
- gProtectStructs[gActiveBattler].bounceMove = 0;
- gProtectStructs[gActiveBattler].stealMove = 0;
- gProtectStructs[gActiveBattler].flag0Unknown = 0;
- gProtectStructs[gActiveBattler].prlzImmobility = 0;
- gProtectStructs[gActiveBattler].confusionSelfDmg = 0;
- gProtectStructs[gActiveBattler].targetNotAffected = 0;
- gProtectStructs[gActiveBattler].chargingTurn = 0;
+ gProtectStructs[gActiveBattler].protected = FALSE;
+ gProtectStructs[gActiveBattler].spikyShielded = FALSE;
+ gProtectStructs[gActiveBattler].kingsShielded = FALSE;
+ gProtectStructs[gActiveBattler].banefulBunkered = FALSE;
+ gProtectStructs[gActiveBattler].obstructed = FALSE;
+ gProtectStructs[gActiveBattler].endured = FALSE;
+ gProtectStructs[gActiveBattler].noValidMoves = FALSE;
+ gProtectStructs[gActiveBattler].helpingHand = FALSE;
+ gProtectStructs[gActiveBattler].bounceMove = FALSE;
+ gProtectStructs[gActiveBattler].stealMove = FALSE;
+ gProtectStructs[gActiveBattler].prlzImmobility = FALSE;
+ gProtectStructs[gActiveBattler].confusionSelfDmg = FALSE;
+ gProtectStructs[gActiveBattler].targetAffected = FALSE;
+ gProtectStructs[gActiveBattler].chargingTurn = FALSE;
gProtectStructs[gActiveBattler].fleeType = 0;
- gProtectStructs[gActiveBattler].usedImprisonedMove = 0;
- gProtectStructs[gActiveBattler].loveImmobility = 0;
- gProtectStructs[gActiveBattler].usedDisabledMove = 0;
- gProtectStructs[gActiveBattler].usedTauntedMove = 0;
- gProtectStructs[gActiveBattler].flag2Unknown = 0;
- gProtectStructs[gActiveBattler].flinchImmobility = 0;
- gProtectStructs[gActiveBattler].notFirstStrike = 0;
+ gProtectStructs[gActiveBattler].usedImprisonedMove = FALSE;
+ gProtectStructs[gActiveBattler].loveImmobility = FALSE;
+ gProtectStructs[gActiveBattler].usedDisabledMove = FALSE;
+ gProtectStructs[gActiveBattler].usedTauntedMove = FALSE;
+ gProtectStructs[gActiveBattler].flag2Unknown = FALSE;
+ gProtectStructs[gActiveBattler].flinchImmobility = FALSE;
+ gProtectStructs[gActiveBattler].notFirstStrike = FALSE;
+ gProtectStructs[gActiveBattler].usedHealBlockedMove = FALSE;
+ gProtectStructs[gActiveBattler].usesBouncedMove = FALSE;
+ gProtectStructs[gActiveBattler].usedGravityPreventedMove = FALSE;
+ gProtectStructs[gActiveBattler].usedThroatChopPreventedMove = FALSE;
+ gProtectStructs[gActiveBattler].statRaised = FALSE;
+ gProtectStructs[gActiveBattler].statFell = FALSE;
+ gProtectStructs[gActiveBattler].pranksterElevated = FALSE;
gDisableStructs[gActiveBattler].isFirstTurn = 2;
- gLastMoves[gActiveBattler] = 0;
- gLastLandedMoves[gActiveBattler] = 0;
+ gLastMoves[gActiveBattler] = MOVE_NONE;
+ gLastLandedMoves[gActiveBattler] = MOVE_NONE;
gLastHitByType[gActiveBattler] = 0;
- gLastResultingMoves[gActiveBattler] = 0;
- gLastPrintedMoves[gActiveBattler] = 0;
+ gLastResultingMoves[gActiveBattler] = MOVE_NONE;
+ gLastPrintedMoves[gActiveBattler] = MOVE_NONE;
gLastHitBy[gActiveBattler] = 0xFF;
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBattler]) + 0) = 0;
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gActiveBattler]) + 1) = 0;
-
- *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 0) = 0;
- *(gBattleStruct->lastTakenMove + gActiveBattler * 2 + 1) = 0;
- *(0 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(0 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
- *(1 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(1 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
- *(2 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(2 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
- *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(3 * 2 + gActiveBattler * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
+ gBattleStruct->choicedMove[gActiveBattler] = MOVE_NONE;
+ gBattleStruct->sameMoveTurns[gActiveBattler] = 0;
+ gBattleStruct->lastTakenMove[gActiveBattler] = MOVE_NONE;
+ gBattleStruct->lastTakenMoveFrom[gActiveBattler][0] = 0;
+ gBattleStruct->lastTakenMoveFrom[gActiveBattler][1] = 0;
+ gBattleStruct->lastTakenMoveFrom[gActiveBattler][2] = 0;
+ gBattleStruct->lastTakenMoveFrom[gActiveBattler][3] = 0;
gBattleStruct->palaceFlags &= ~(gBitTable[gActiveBattler]);
+
+ if (gActiveBattler == gBattleStruct->stickyWebUser)
+ gBattleStruct->stickyWebUser = 0xFF; // User of sticky web fainted, so reset the stored battler ID
for (i = 0; i < gBattlersCount; i++)
{
if (i != gActiveBattler && GetBattlerSide(i) != GetBattlerSide(gActiveBattler))
- {
- *(gBattleStruct->lastTakenMove + i * 2 + 0) = 0;
- *(gBattleStruct->lastTakenMove + i * 2 + 1) = 0;
- }
- *(i * 8 + gActiveBattler * 2 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = 0;
- *(i * 8 + gActiveBattler * 2 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = 0;
+ gBattleStruct->lastTakenMove[i] = MOVE_NONE;
+
+ gBattleStruct->lastTakenMoveFrom[i][gActiveBattler] = 0;
}
gBattleResources->flags->flags[gActiveBattler] = 0;
gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1;
gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2;
+ gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY;
ClearBattlerMoveHistory(gActiveBattler);
ClearBattlerAbilityHistory(gActiveBattler);
+ ClearBattlerItemEffectHistory(gActiveBattler);
+ UndoFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler), FALSE);
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]);
+
+ // If the fainted mon was involved in a Sky Drop
+ if (gBattleStruct->skyDropTargets[gActiveBattler] != 0xFF)
+ {
+ // Get battler id of the other Pokemon involved in this Sky Drop
+ u8 otherSkyDropper = gBattleStruct->skyDropTargets[gActiveBattler];
+
+ // Clear Sky Drop data
+ gBattleStruct->skyDropTargets[gActiveBattler] = 0xFF;
+ gBattleStruct->skyDropTargets[otherSkyDropper] = 0xFF;
+
+ // If the other Pokemon involved in this Sky Drop was the target, not the attacker
+ if (gStatuses3[otherSkyDropper] & STATUS3_SKY_DROPPED)
+ {
+ // Release the target and take them out of the semi-invulnerable state
+ gStatuses3[otherSkyDropper] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR);
+
+ // Make the target's sprite visible
+ gSprites[gBattlerSpriteIds[otherSkyDropper]].invisible = FALSE;
+
+ // If the target was sky dropped in the middle of using Outrage/Petal Dance/Thrash,
+ // confuse them upon release and print "confused via fatigue" message and animation.
+ if (gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE)
+ {
+ gBattleMons[otherSkyDropper].status2 &= ~(STATUS2_LOCK_CONFUSE);
+
+ // If the released mon can be confused, do so.
+ // Don't use CanBeConfused here, since it can cause issues in edge cases.
+ if (!(GetBattlerAbility(otherSkyDropper) == ABILITY_OWN_TEMPO
+ || gBattleMons[otherSkyDropper].status2 & STATUS2_CONFUSION
+ || IsBattlerTerrainAffected(otherSkyDropper, STATUS_FIELD_MISTY_TERRAIN)))
+ {
+ gBattleMons[otherSkyDropper].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2);
+ gBattlerAttacker = otherSkyDropper;
+ gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 2;
+ }
+ }
+ }
+ }
}
-static void BattleIntroGetMonsData(void)
+static void DoBattleIntro(void)
{
- switch (gBattleCommunication[MULTIUSE_STATE])
+ s32 i;
+ u8 *state = &gBattleStruct->introState;
+
+ switch (*state)
{
- case 0:
+ case 0: // Get Data of all battlers.
gActiveBattler = gBattleCommunication[1];
BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, 0);
MarkBattlerForControllerExec(gActiveBattler);
- gBattleCommunication[MULTIUSE_STATE]++;
+ (*state)++;
break;
- case 1:
- if (gBattleControllerExecFlags == 0)
+ case 1: // Loop through all battlers.
+ if (!gBattleControllerExecFlags)
{
- gBattleCommunication[1]++;
- if (gBattleCommunication[1] == gBattlersCount)
- gBattleMainFunc = BattleIntroPrepareBackgroundSlide;
+ if (++gBattleCommunication[1] == gBattlersCount)
+ (*state)++;
else
- gBattleCommunication[MULTIUSE_STATE] = 0;
+ *state = 0;
}
break;
- }
-}
-
-static void BattleIntroPrepareBackgroundSlide(void)
-{
- if (gBattleControllerExecFlags == 0)
- {
- gActiveBattler = GetBattlerAtPosition(0);
- BtlController_EmitIntroSlide(BUFFER_A, gBattleTerrain);
- MarkBattlerForControllerExec(gActiveBattler);
- gBattleMainFunc = BattleIntroDrawTrainersOrMonsSprites;
- gBattleCommunication[0] = 0;
- gBattleCommunication[1] = 0;
- }
-}
-
-static void BattleIntroDrawTrainersOrMonsSprites(void)
-{
- u8 *ptr;
- s32 i;
-
- if (gBattleControllerExecFlags)
- return;
-
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI)
- && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ case 2: // Start graphical intro slide.
+ if (!gBattleControllerExecFlags)
{
- ptr = (u8 *)&gBattleMons[gActiveBattler];
- for (i = 0; i < sizeof(struct BattlePokemon); i++)
- ptr[i] = 0;
- }
- else
- {
- u16* hpOnSwitchout;
-
- ptr = (u8 *)&gBattleMons[gActiveBattler];
- for (i = 0; i < sizeof(struct BattlePokemon); i++)
- ptr[i] = gBattleBufferB[gActiveBattler][4 + i];
-
- gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1;
- gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2;
- gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum);
- hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)];
- *hpOnSwitchout = gBattleMons[gActiveBattler].hp;
- for (i = 0; i < NUM_BATTLE_STATS; i++)
- gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
- gBattleMons[gActiveBattler].status2 = 0;
- }
-
- if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT)
- {
- BtlController_EmitDrawTrainerPic(BUFFER_A);
+ gActiveBattler = GetBattlerAtPosition(0);
+ BtlController_EmitIntroSlide(BUFFER_A, gBattleTerrain);
MarkBattlerForControllerExec(gActiveBattler);
+ gBattleCommunication[0] = 0;
+ gBattleCommunication[1] = 0;
+ (*state)++;
+ }
+ break;
+ case 3: // Wait for intro slide.
+ if (!gBattleControllerExecFlags)
+ (*state)++;
+ break;
+ case 4: // Copy battler data gotten in cases 0 and 1. Draw trainer/mon sprite.
+ for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
+ memset(&gBattleMons[gActiveBattler], 0, sizeof(struct BattlePokemon));
+ }
+ else
+ {
+ memcpy(&gBattleMons[gActiveBattler], &gBattleResources->bufferB[gActiveBattler][4], sizeof(struct BattlePokemon));
+ gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1;
+ gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2;
+ gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY;
+ gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum);
+ gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)] = gBattleMons[gActiveBattler].hp;
+ gBattleMons[gActiveBattler].status2 = 0;
+ for (i = 0; i < NUM_BATTLE_STATS; i++)
+ gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
+ }
+
+ // Draw sprite.
+ switch (GetBattlerPosition(gActiveBattler))
+ {
+ case B_POSITION_PLAYER_LEFT: // player sprite
+ BtlController_EmitDrawTrainerPic(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case B_POSITION_OPPONENT_LEFT:
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) // opponent 1 sprite
+ {
+ BtlController_EmitDrawTrainerPic(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else // wild mon 1
+ {
+ BtlController_EmitLoadMonSprite(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL);
+ }
+ break;
+ case B_POSITION_PLAYER_RIGHT:
+ if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) // partner sprite
+ {
+ BtlController_EmitDrawTrainerPic(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ break;
+ case B_POSITION_OPPONENT_RIGHT:
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) // opponent 2 if exists
+ {
+ BtlController_EmitDrawTrainerPic(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ else // wild mon 2
+ {
+ BtlController_EmitLoadMonSprite(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL);
+ }
+ break;
+ }
+
+ if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
+ BattleArena_InitPoints();
}
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
- if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT)
+ (*state)++;
+ }
+ else // Skip party summary since it is a wild battle.
+ {
+ if (B_FAST_INTRO)
+ *state = 7; // Don't wait for sprite, print message at the same time.
+ else
+ *state = 6; // Wait for sprite to load.
+ }
+ break;
+ case 5: // draw party summary in trainer battles
+ if (!gBattleControllerExecFlags)
+ {
+ struct HpAndStatus hpStatus[PARTY_SIZE];
+
+ for (i = 0; i < PARTY_SIZE; i++)
{
- BtlController_EmitDrawTrainerPic(BUFFER_A);
- MarkBattlerForControllerExec(gActiveBattler);
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
+ || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ {
+ hpStatus[i].hp = HP_EMPTY_SLOT;
+ hpStatus[i].status = 0;
+ }
+ else
+ {
+ hpStatus[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP);
+ hpStatus[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS);
+ }
}
- if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT
- && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER
- | BATTLE_TYPE_FRONTIER
- | BATTLE_TYPE_LINK
- | BATTLE_TYPE_RECORDED_LINK
- | BATTLE_TYPE_TRAINER_HILL)))
+
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ BtlController_EmitDrawPartyStatusSummary(BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY);
+ MarkBattlerForControllerExec(gActiveBattler);
+
+ for (i = 0; i < PARTY_SIZE; i++)
{
- HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality);
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
+ || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
+ {
+ hpStatus[i].hp = HP_EMPTY_SLOT;
+ hpStatus[i].status = 0;
+ }
+ else
+ {
+ hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
+ }
+ }
+
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ BtlController_EmitDrawPartyStatusSummary(BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY);
+ MarkBattlerForControllerExec(gActiveBattler);
+
+ (*state)++;
+ }
+ break;
+ case 6: // wait for previous action to complete
+ if (!gBattleControllerExecFlags)
+ (*state)++;
+ break;
+ case 7: // print battle intro message
+ if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)))
+ {
+ PrepareStringBattle(STRINGID_INTROMSG, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT));
+ (*state)++;
+ }
+ break;
+ case 8: // wait for intro message to be printed
+ if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)))
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ (*state)++;
+ }
+ else
+ {
+ if (B_FAST_INTRO)
+ *state = 15; // Wait for text to be printed.
+ else
+ *state = 14; // Wait for text and sprite.
}
}
+ break;
+ case 9: // print opponent sends out
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER))
+ PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT));
else
+ PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT));
+ (*state)++;
+ break;
+ case 10: // wait for opponent sends out text
+ if (!gBattleControllerExecFlags)
+ (*state)++;
+ break;
+ case 11: // first opponent's mon send out animation
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER))
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ else
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+
+ BtlController_EmitIntroTrainerBallThrow(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ (*state)++;
+ break;
+ case 12: // nothing
+ (*state)++;
+ case 13: // second opponent's mon send out
+ if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT)
{
- if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER))
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ else
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+
+ BtlController_EmitIntroTrainerBallThrow(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ if (B_FAST_INTRO && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK)))
+ *state = 15; // Print at the same time as trainer sends out second mon.
+ else
+ (*state)++;
+ break;
+ case 14: // wait for opponent 2 send out
+ if (!gBattleControllerExecFlags)
+ (*state)++;
+ break;
+ case 15: // wait for wild battle message
+ if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)))
+ (*state)++;
+ break;
+ case 16: // print player sends out
+ if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER))
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ else
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+
+ // A hack that makes fast intro work in trainer battles too.
+ if (B_FAST_INTRO
+ && gBattleTypeFlags & BATTLE_TYPE_TRAINER
+ && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK))
+ && gSprites[gHealthboxSpriteIds[gActiveBattler ^ BIT_SIDE]].callback == SpriteCallbackDummy)
{
- if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER
- | BATTLE_TYPE_FRONTIER
- | BATTLE_TYPE_LINK
- | BATTLE_TYPE_RECORDED_LINK
- | BATTLE_TYPE_TRAINER_HILL)))
+ return;
+ }
+
+ PrepareStringBattle(STRINGID_INTROSENDOUT, gActiveBattler);
+ }
+ (*state)++;
+ break;
+ case 17: // wait for player send out message
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleControllerExecFlags))
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER))
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ else
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+
+ if (!IsBattlerMarkedForControllerExec(gActiveBattler))
+ (*state)++;
+ }
+ break;
+ case 18: // player 1 send out
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER))
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ else
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+
+ BtlController_EmitIntroTrainerBallThrow(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ (*state)++;
+ break;
+ case 19: // player 2 send out
+ if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER))
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER))
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ else
+ gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+
+ BtlController_EmitIntroTrainerBallThrow(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ (*state)++;
+ break;
+ case 20: // set dex and battle vars
+ if (!gBattleControllerExecFlags)
+ {
+ for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
+ {
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT
+ && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_FRONTIER
+ | BATTLE_TYPE_LINK
+ | BATTLE_TYPE_RECORDED_LINK
+ | BATTLE_TYPE_TRAINER_HILL)))
{
HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality);
}
- BtlController_EmitLoadMonSprite(BUFFER_A);
- MarkBattlerForControllerExec(gActiveBattler);
- gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL);
}
+
+ gBattleStruct->switchInAbilitiesCounter = 0;
+ gBattleStruct->switchInItemsCounter = 0;
+ gBattleStruct->overworldWeatherDone = FALSE;
+
+ gBattleMainFunc = TryDoEventsBeforeFirstTurn;
}
-
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- {
- if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT
- || GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)
- {
- BtlController_EmitDrawTrainerPic(BUFFER_A);
- MarkBattlerForControllerExec(gActiveBattler);
- }
- }
-
- if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)
- {
- BtlController_EmitDrawTrainerPic(BUFFER_A);
- MarkBattlerForControllerExec(gActiveBattler);
- }
-
- if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
- BattleArena_InitPoints();
- }
- gBattleMainFunc = BattleIntroDrawPartySummaryScreens;
-}
-
-static void BattleIntroDrawPartySummaryScreens(void)
-{
- s32 i;
- struct HpAndStatus hpStatus[PARTY_SIZE];
-
- if (gBattleControllerExecFlags)
- return;
-
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- {
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
- || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
- {
- hpStatus[i].hp = HP_EMPTY_SLOT;
- hpStatus[i].status = 0;
- }
- else
- {
- hpStatus[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP);
- hpStatus[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS);
- }
- }
- gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- BtlController_EmitDrawPartyStatusSummary(BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY);
- MarkBattlerForControllerExec(gActiveBattler);
-
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
- || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
- {
- hpStatus[i].hp = HP_EMPTY_SLOT;
- hpStatus[i].status = 0;
- }
- else
- {
- hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
- hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
- }
- }
- gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- BtlController_EmitDrawPartyStatusSummary(BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY);
- MarkBattlerForControllerExec(gActiveBattler);
-
- gBattleMainFunc = BattleIntroPrintTrainerWantsToBattle;
- }
- else
- {
- // The struct gets set here, but nothing is ever done with it since
- // wild battles don't show the party summary.
- // Still, there's no point in having dead code.
-
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
- || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
- {
- hpStatus[i].hp = HP_EMPTY_SLOT;
- hpStatus[i].status = 0;
- }
- else
- {
- hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
- hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
- }
- }
-
- gBattleMainFunc = BattleIntroPrintWildMonAttacked;
- }
-
-}
-
-static void BattleIntroPrintTrainerWantsToBattle(void)
-{
- if (gBattleControllerExecFlags == 0)
- {
- gActiveBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- PrepareStringBattle(STRINGID_INTROMSG, gActiveBattler);
- gBattleMainFunc = BattleIntroPrintOpponentSendsOut;
- }
-}
-
-static void BattleIntroPrintWildMonAttacked(void)
-{
- if (gBattleControllerExecFlags == 0)
- {
- gBattleMainFunc = BattleIntroPrintPlayerSendsOut;
- PrepareStringBattle(STRINGID_INTROMSG, 0);
- }
-}
-
-static void BattleIntroPrintOpponentSendsOut(void)
-{
- u32 position;
-
- if (gBattleControllerExecFlags)
- return;
-
- if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
- position = B_POSITION_OPPONENT_LEFT;
- else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)
- position = B_POSITION_OPPONENT_LEFT;
- else
- position = B_POSITION_PLAYER_LEFT;
- }
- else
- position = B_POSITION_OPPONENT_LEFT;
-
- PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(position));
- gBattleMainFunc = BattleIntroOpponent1SendsOutMonAnimation;
-}
-
-static void BattleIntroOpponent2SendsOutMonAnimation(void)
-{
- u32 position;
-
- if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
- position = B_POSITION_OPPONENT_RIGHT;
- else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)
- position = B_POSITION_OPPONENT_RIGHT;
- else
- position = B_POSITION_PLAYER_RIGHT;
- }
- else
- position = B_POSITION_OPPONENT_RIGHT;
-
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
- {
- if (GetBattlerPosition(gActiveBattler) == position)
- {
- BtlController_EmitIntroTrainerBallThrow(BUFFER_A);
- MarkBattlerForControllerExec(gActiveBattler);
- }
- }
-
- gBattleMainFunc = BattleIntroRecordMonsToDex;
-}
-
-static void BattleIntroOpponent1SendsOutMonAnimation(void)
-{
- u32 position;
-
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)
- position = B_POSITION_OPPONENT_LEFT;
- else
- position = B_POSITION_PLAYER_LEFT;
- }
- else
- position = B_POSITION_OPPONENT_LEFT;
- }
- else
- position = B_POSITION_OPPONENT_LEFT;
-
- if (gBattleControllerExecFlags)
- return;
-
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
- {
- if (GetBattlerPosition(gActiveBattler) == position)
- {
- BtlController_EmitIntroTrainerBallThrow(BUFFER_A);
- MarkBattlerForControllerExec(gActiveBattler);
- if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS))
- {
- gBattleMainFunc = BattleIntroOpponent2SendsOutMonAnimation;
- return;
- }
- }
- }
-
- gBattleMainFunc = BattleIntroRecordMonsToDex;
-}
-
-static void BattleIntroRecordMonsToDex(void)
-{
- if (gBattleControllerExecFlags == 0)
- {
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
- {
- if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT
- && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER
- | BATTLE_TYPE_FRONTIER
- | BATTLE_TYPE_LINK
- | BATTLE_TYPE_RECORDED_LINK
- | BATTLE_TYPE_TRAINER_HILL)))
- {
- HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality);
- }
- }
- gBattleMainFunc = BattleIntroPrintPlayerSendsOut;
- }
-}
-
-// Unused
-static void BattleIntroSkipRecordMonsToDex(void)
-{
- if (gBattleControllerExecFlags == 0)
- gBattleMainFunc = BattleIntroPrintPlayerSendsOut;
-}
-
-static void BattleIntroPrintPlayerSendsOut(void)
-{
- if (gBattleControllerExecFlags == 0)
- {
- u8 position;
-
- if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
- position = B_POSITION_PLAYER_LEFT;
- else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)
- position = B_POSITION_PLAYER_LEFT;
- else
- position = B_POSITION_OPPONENT_LEFT;
- }
- else
- position = B_POSITION_PLAYER_LEFT;
-
- if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
- PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(position));
-
- gBattleMainFunc = BattleIntroPlayer1SendsOutMonAnimation;
- }
-}
-
-static void BattleIntroPlayer2SendsOutMonAnimation(void)
-{
- u32 position;
-
- if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
- position = B_POSITION_PLAYER_RIGHT;
- else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)
- position = B_POSITION_PLAYER_RIGHT;
- else
- position = B_POSITION_OPPONENT_RIGHT;
- }
- else
- position = B_POSITION_PLAYER_RIGHT;
-
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
- {
- if (GetBattlerPosition(gActiveBattler) == position)
- {
- BtlController_EmitIntroTrainerBallThrow(BUFFER_A);
- MarkBattlerForControllerExec(gActiveBattler);
- }
- }
-
- gBattleStruct->switchInAbilitiesCounter = 0;
- gBattleStruct->switchInItemsCounter = 0;
- gBattleStruct->overworldWeatherDone = FALSE;
-
- gBattleMainFunc = TryDoEventsBeforeFirstTurn;
-}
-
-static void BattleIntroPlayer1SendsOutMonAnimation(void)
-{
- u32 position;
-
- if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
- position = B_POSITION_PLAYER_LEFT;
- else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)
- position = B_POSITION_PLAYER_LEFT;
- else
- position = B_POSITION_OPPONENT_LEFT;
- }
- else
- position = B_POSITION_PLAYER_LEFT;
-
- if (gBattleControllerExecFlags)
- return;
-
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
- {
- if (GetBattlerPosition(gActiveBattler) == position)
- {
- BtlController_EmitIntroTrainerBallThrow(BUFFER_A);
- MarkBattlerForControllerExec(gActiveBattler);
- if (gBattleTypeFlags & (BATTLE_TYPE_MULTI))
- {
- gBattleMainFunc = BattleIntroPlayer2SendsOutMonAnimation;
- return;
- }
- }
- }
-
- gBattleStruct->switchInAbilitiesCounter = 0;
- gBattleStruct->switchInItemsCounter = 0;
- gBattleStruct->overworldWeatherDone = FALSE;
-
- gBattleMainFunc = TryDoEventsBeforeFirstTurn;
-}
-
-// Unused
-static void BattleIntroSwitchInPlayerMons(void)
-{
- if (gBattleControllerExecFlags == 0)
- {
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
- {
- if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
- {
- BtlController_EmitSwitchInAnim(BUFFER_A, gBattlerPartyIndexes[gActiveBattler], FALSE);
- MarkBattlerForControllerExec(gActiveBattler);
- }
- }
-
- gBattleStruct->switchInAbilitiesCounter = 0;
- gBattleStruct->switchInItemsCounter = 0;
- gBattleStruct->overworldWeatherDone = FALSE;
-
- gBattleMainFunc = TryDoEventsBeforeFirstTurn;
+ break;
}
}
static void TryDoEventsBeforeFirstTurn(void)
{
- s32 i;
- s32 j;
- u8 effect = 0;
+ s32 i, j;
if (gBattleControllerExecFlags)
return;
+ // Set invalid mons as absent(for example when starting a double battle with only one pokemon).
+ if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
+ {
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE)
+ gAbsentBattlerFlags |= gBitTable[i];
+ }
+ }
+
if (gBattleStruct->switchInAbilitiesCounter == 0)
{
for (i = 0; i < gBattlersCount; i++)
@@ -3822,37 +3605,73 @@ static void TryDoEventsBeforeFirstTurn(void)
gBattleStruct->overworldWeatherDone = TRUE;
return;
}
+
+ if (!gBattleStruct->terrainDone && AbilityBattleEffects(0, 0, 0, ABILITYEFFECT_SWITCH_IN_TERRAIN, 0) != 0)
+ {
+ gBattleStruct->terrainDone = TRUE;
+ return;
+ }
+
+ // Totem boosts
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gTotemBoosts[i].stats != 0)
+ {
+ gBattlerAttacker = i;
+ BattleScriptExecute(BattleScript_TotemVar);
+ return;
+ }
+ }
+ memset(gTotemBoosts, 0, sizeof(gTotemBoosts)); // erase all totem boosts just to be safe
+
+ // Primal Reversion
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_PRIMAL_ORB)
+ {
+ for (j = 0; j < EVOS_PER_MON; j++)
+ {
+ if (gEvolutionTable[gBattleMons[i].species][j].targetSpecies != SPECIES_NONE
+ && gEvolutionTable[gBattleMons[i].species][j].method == EVO_PRIMAL_REVERSION)
+ {
+ gBattlerAttacker = i;
+ BattleScriptExecute(BattleScript_PrimalReversion);
+ return;
+ }
+ }
+ }
+ }
+
+ // Check neutralizing gas
+ if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0)
+ return;
+
// Check all switch in abilities happening from the fastest mon to slowest.
while (gBattleStruct->switchInAbilitiesCounter < gBattlersCount)
{
- if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter], 0, 0, 0) != 0)
- effect++;
-
- gBattleStruct->switchInAbilitiesCounter++;
-
- if (effect)
+ gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter++];
+ if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0)
return;
}
if (AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE1, 0, 0, 0, 0) != 0)
return;
- if (AbilityBattleEffects(ABILITYEFFECT_TRACE, 0, 0, 0, 0) != 0)
+ if (AbilityBattleEffects(ABILITYEFFECT_TRACE1, 0, 0, 0, 0) != 0)
return;
// Check all switch in items having effect from the fastest mon to slowest.
while (gBattleStruct->switchInItemsCounter < gBattlersCount)
{
- if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter], FALSE))
- effect++;
-
- gBattleStruct->switchInItemsCounter++;
-
- if (effect)
+ if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter++], FALSE))
return;
}
+
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
*(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE;
gChosenActionByBattler[i] = B_ACTION_NONE;
gChosenMoveByBattler[i] = MOVE_NONE;
+ // Record party slots of player's mons that appeared in battle
+ if (!IsBattlerAIControlled(i))
+ gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]];
}
TurnValuesCleanUp(FALSE);
SpecialStatusesClear();
@@ -3877,6 +3696,8 @@ static void TryDoEventsBeforeFirstTurn(void)
gMoveResultFlags = 0;
gRandomTurnNumber = Random();
+
+ GetAiLogicData(); // get assumed abilities, hold effects, etc of all battlers
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
{
@@ -3965,6 +3786,7 @@ void BattleTurnPassed(void)
*(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags;
BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG);
+ GetAiLogicData(); // get assumed abilities, hold effects, etc of all battlers
gBattleMainFunc = HandleTurnActionSelectionState;
gRandomTurnNumber = Random();
@@ -3972,71 +3794,58 @@ void BattleTurnPassed(void)
BattleScriptExecute(BattleScript_PalacePrintFlavorText);
else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaTurnCounter == 0)
BattleScriptExecute(BattleScript_ArenaTurnBeginning);
+ else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_LOW_HP))
+ BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2);
}
u8 IsRunningFromBattleImpossible(void)
{
- u8 holdEffect;
- u8 side;
- s32 i;
+ u32 holdEffect, i;
- if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY)
+ if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY_E_READER)
holdEffect = gEnigmaBerries[gActiveBattler].holdEffect;
else
holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item);
gPotentialItemEffectBattler = gActiveBattler;
- if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
- return 0;
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
- return 0;
- if (gBattleMons[gActiveBattler].ability == ABILITY_RUN_AWAY)
- return 0;
-
- side = GetBattlerSide(gActiveBattler);
-
- for (i = 0; i < gBattlersCount; i++)
+ if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) // Cannot ever run from saving Birch's battle.
{
- if (side != GetBattlerSide(i)
- && gBattleMons[i].ability == ABILITY_SHADOW_TAG)
- {
- gBattleScripting.battler = i;
- gLastUsedAbility = gBattleMons[i].ability;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PREVENTS_ESCAPE;
- return 2;
- }
- if (side != GetBattlerSide(i)
- && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE
- && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
- && gBattleMons[i].ability == ABILITY_ARENA_TRAP)
- {
- gBattleScripting.battler = i;
- gLastUsedAbility = gBattleMons[i].ability;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PREVENTS_ESCAPE;
- return 2;
- }
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DONT_LEAVE_BIRCH;
+ return BATTLE_RUN_FORBIDDEN;
}
- i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0);
- if (i != 0 && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))
+ if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && WILD_DOUBLE_BATTLE
+ && IsBattlerAlive(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) // The second pokemon cannot run from a double wild battle, unless it's the only alive mon.
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_ESCAPE;
+ return BATTLE_RUN_FORBIDDEN;
+ }
+
+ if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
+ return BATTLE_RUN_SUCCESS;
+ #if B_GHOSTS_ESCAPE >= GEN_6
+ if (IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_GHOST))
+ return BATTLE_RUN_SUCCESS;
+ #endif
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ return BATTLE_RUN_SUCCESS;
+ if (GetBattlerAbility(gActiveBattler) == ABILITY_RUN_AWAY)
+ return BATTLE_RUN_SUCCESS;
+
+ if ((i = IsAbilityPreventingEscape(gActiveBattler)))
{
gBattleScripting.battler = i - 1;
gLastUsedAbility = gBattleMons[i - 1].ability;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PREVENTS_ESCAPE;
- return 2;
+ return BATTLE_RUN_FAILURE;
}
- if ((gBattleMons[gActiveBattler].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED))
- || (gStatuses3[gActiveBattler] & STATUS3_ROOTED))
+
+ if (!CanBattlerEscape(gActiveBattler))
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_ESCAPE;
- return 1;
+ return BATTLE_RUN_FORBIDDEN;
}
- if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DONT_LEAVE_BIRCH;
- return 1;
- }
- return 0;
+ return BATTLE_RUN_SUCCESS;
}
void SwitchPartyOrder(u8 battler)
@@ -4046,7 +3855,7 @@ void SwitchPartyOrder(u8 battler)
u8 partyId2;
for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
- gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8*)(gBattleStruct->battlerPartyOrders));
+ gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders));
partyId1 = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]);
partyId2 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler));
@@ -4056,15 +3865,15 @@ void SwitchPartyOrder(u8 battler)
{
for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
{
- *(battler * 3 + i + (u8*)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
- *(BATTLE_PARTNER(battler) * 3 + i + (u8*)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
+ *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
+ *(BATTLE_PARTNER(battler) * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
}
}
else
{
for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
{
- *(battler * 3 + i + (u8*)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
+ *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
}
}
}
@@ -4095,6 +3904,11 @@ static void HandleTurnActionSelectionState(void)
case STATE_TURN_START_RECORD: // Recorded battle related action on start of every turn.
RecordedBattle_CopyBattlerMoves();
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
+
+ // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem
+ if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) && IsBattlerAIControlled(gActiveBattler)) {
+ gBattleStruct->aiMoveOrAction[gActiveBattler] = ComputeBattleAiScores(gActiveBattler);
+ }
break;
case STATE_BEFORE_ACTION_CHOSEN: // Choose an action.
*(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
@@ -4119,9 +3933,17 @@ static void HandleTurnActionSelectionState(void)
gChosenActionByBattler[gActiveBattler] = B_ACTION_USE_MOVE;
gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY;
}
+ else if (WILD_DOUBLE_BATTLE
+ && position == B_POSITION_PLAYER_RIGHT
+ && (gBattleStruct->throwingPokeBall || gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] == B_ACTION_RUN))
+ {
+ gBattleStruct->throwingPokeBall = FALSE;
+ gChosenActionByBattler[gActiveBattler] = B_ACTION_NOTHING_FAINTED; // Not fainted, but it cannot move, because of the throwing ball.
+ gBattleCommunication[gActiveBattler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY;
+ }
else
{
- BtlController_EmitChooseAction(BUFFER_A, gChosenActionByBattler[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8));
+ BtlController_EmitChooseAction(BUFFER_A, gChosenActionByBattler[0], gBattleResources->bufferB[0][1] | (gBattleResources->bufferB[0][2] << 8));
MarkBattlerForControllerExec(gActiveBattler);
gBattleCommunication[gActiveBattler]++;
}
@@ -4131,10 +3953,10 @@ static void HandleTurnActionSelectionState(void)
case STATE_WAIT_ACTION_CHOSEN: // Try to perform an action.
if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF << 28) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 12))))
{
- RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][1]);
- gChosenActionByBattler[gActiveBattler] = gBattleBufferB[gActiveBattler][1];
+ RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][1]);
+ gChosenActionByBattler[gActiveBattler] = gBattleResources->bufferB[gActiveBattler][1];
- switch (gBattleBufferB[gActiveBattler][1])
+ switch (gBattleResources->bufferB[gActiveBattler][1])
{
case B_ACTION_USE_MOVE:
if (AreAllMovesUnusable())
@@ -4142,7 +3964,7 @@ static void HandleTurnActionSelectionState(void)
gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT;
*(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE;
*(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_WAIT_ACTION_CONFIRMED_STANDBY;
- *(gBattleStruct->moveTarget + gActiveBattler) = gBattleBufferB[gActiveBattler][3];
+ *(gBattleStruct->moveTarget + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][3];
return;
}
else if (gDisableStructs[gActiveBattler].encoredMove != 0)
@@ -4156,9 +3978,12 @@ static void HandleTurnActionSelectionState(void)
{
struct ChooseMoveStruct moveInfo;
+ moveInfo.zmove = gBattleStruct->zmove;
+ moveInfo.mega = gBattleStruct->mega;
moveInfo.species = gBattleMons[gActiveBattler].species;
moveInfo.monType1 = gBattleMons[gActiveBattler].type1;
moveInfo.monType2 = gBattleMons[gActiveBattler].type2;
+ moveInfo.monType3 = gBattleMons[gActiveBattler].type3;
for (i = 0; i < MAX_MON_MOVES; i++)
{
@@ -4175,10 +4000,12 @@ static void HandleTurnActionSelectionState(void)
}
break;
case B_ACTION_USE_ITEM:
- if (gBattleTypeFlags & (BATTLE_TYPE_LINK
+ if ((gBattleTypeFlags & (BATTLE_TYPE_LINK
| BATTLE_TYPE_FRONTIER_NO_PYRAMID
| BATTLE_TYPE_EREADER_TRAINER
| BATTLE_TYPE_RECORDED_LINK))
+ // Or if currently held by Sky Drop
+ || gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED)
{
RecordedBattle_ClearBattlerAction(gActiveBattler, 1);
gSelectionBattleScripts[gActiveBattler] = BattleScript_ActionSelectionItemsCantBeUsed;
@@ -4195,20 +4022,15 @@ static void HandleTurnActionSelectionState(void)
break;
case B_ACTION_SWITCH:
*(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
- if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)
- || gBattleTypeFlags & BATTLE_TYPE_ARENA
- || gStatuses3[gActiveBattler] & STATUS3_ROOTED)
+ if (gBattleTypeFlags & BATTLE_TYPE_ARENA
+ || !CanBattlerEscape(gActiveBattler))
{
BtlController_EmitChoosePokemon(BUFFER_A, PARTY_ACTION_CANT_SWITCH, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]);
}
- else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG))
- || ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP))
- && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
- && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE)
- || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0))
- && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)))
+ else if (ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item) != HOLD_EFFECT_SHED_SHELL
+ && (i = IsAbilityPreventingEscape(gActiveBattler))) // must be last to keep i value integrity
{
- BtlController_EmitChoosePokemon(BUFFER_A, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gLastUsedAbility, gBattleStruct->battlerPartyOrders[gActiveBattler]);
+ BtlController_EmitChoosePokemon(BUFFER_A, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gBattleMons[i - 1].ability, gBattleStruct->battlerPartyOrders[gActiveBattler]);
}
else
{
@@ -4270,14 +4092,21 @@ static void HandleTurnActionSelectionState(void)
{
RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))), 3);
}
+
+ gBattleStruct->mega.toEvolve &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))]);
+ gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))] = MOVE_NONE;
BtlController_EmitEndBounceEffect(BUFFER_A);
MarkBattlerForControllerExec(gActiveBattler);
return;
+ case B_ACTION_DEBUG:
+ BtlController_EmitDebugMenu(BUFFER_A);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
}
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER
&& gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_TRAINER_HILL)
- && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN)
+ && gBattleResources->bufferB[gActiveBattler][1] == B_ACTION_RUN)
{
gSelectionBattleScripts[gActiveBattler] = BattleScript_AskIfWantsToForfeitMatch;
gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT_MAY_RUN;
@@ -4287,13 +4116,13 @@ static void HandleTurnActionSelectionState(void)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER
&& !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))
- && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN)
+ && gBattleResources->bufferB[gActiveBattler][1] == B_ACTION_RUN)
{
BattleScriptExecute(BattleScript_PrintCantRunFromTrainer);
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
}
- else if (IsRunningFromBattleImpossible()
- && gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN)
+ else if (IsRunningFromBattleImpossible() != BATTLE_RUN_SUCCESS
+ && gBattleResources->bufferB[gActiveBattler][1] == B_ACTION_RUN)
{
gSelectionBattleScripts[gActiveBattler] = BattleScript_PrintCantEscapeFromBattle;
gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT;
@@ -4313,7 +4142,7 @@ static void HandleTurnActionSelectionState(void)
switch (gChosenActionByBattler[gActiveBattler])
{
case B_ACTION_USE_MOVE:
- switch (gBattleBufferB[gActiveBattler][1])
+ switch (gBattleResources->bufferB[gActiveBattler][1])
{
case 3:
case 4:
@@ -4322,7 +4151,7 @@ static void HandleTurnActionSelectionState(void)
case 7:
case 8:
case 9:
- gChosenActionByBattler[gActiveBattler] = gBattleBufferB[gActiveBattler][1];
+ gChosenActionByBattler[gActiveBattler] = gBattleResources->bufferB[gActiveBattler][1];
return;
case 15:
gChosenActionByBattler[gActiveBattler] = B_ACTION_SWITCH;
@@ -4330,7 +4159,7 @@ static void HandleTurnActionSelectionState(void)
return;
default:
RecordedBattle_CheckMovesetChanges(B_RECORD_MODE_PLAYBACK);
- if ((gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8)) == 0xFFFF)
+ if ((gBattleResources->bufferB[gActiveBattler][2] | (gBattleResources->bufferB[gActiveBattler][3] << 8)) == 0xFFFF)
{
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
RecordedBattle_ClearBattlerAction(gActiveBattler, 1);
@@ -4340,7 +4169,7 @@ static void HandleTurnActionSelectionState(void)
RecordedBattle_ClearBattlerAction(gActiveBattler, 1);
gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT;
*(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE;
- gBattleBufferB[gActiveBattler][1] = B_ACTION_USE_MOVE;
+ gBattleResources->bufferB[gActiveBattler][1] = B_ACTION_USE_MOVE;
*(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_WAIT_ACTION_CHOSEN;
return;
}
@@ -4348,30 +4177,34 @@ static void HandleTurnActionSelectionState(void)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_PALACE))
{
- RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][2]);
- RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][3]);
+ RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][2]);
+ RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][3]);
}
- *(gBattleStruct->chosenMovePositions + gActiveBattler) = gBattleBufferB[gActiveBattler][2];
+ *(gBattleStruct->chosenMovePositions + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][2] & ~RET_MEGA_EVOLUTION;
gChosenMoveByBattler[gActiveBattler] = gBattleMons[gActiveBattler].moves[*(gBattleStruct->chosenMovePositions + gActiveBattler)];
- *(gBattleStruct->moveTarget + gActiveBattler) = gBattleBufferB[gActiveBattler][3];
+ *(gBattleStruct->moveTarget + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][3];
+ if (gBattleResources->bufferB[gActiveBattler][2] & RET_MEGA_EVOLUTION)
+ gBattleStruct->mega.toEvolve |= gBitTable[gActiveBattler];
gBattleCommunication[gActiveBattler]++;
}
break;
}
break;
case B_ACTION_USE_ITEM:
- if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) == 0)
+ if ((gBattleResources->bufferB[gActiveBattler][1] | (gBattleResources->bufferB[gActiveBattler][2] << 8)) == 0)
{
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
}
else
{
- gLastUsedItem = (gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8));
+ gLastUsedItem = (gBattleResources->bufferB[gActiveBattler][1] | (gBattleResources->bufferB[gActiveBattler][2] << 8));
+ if (ItemId_GetPocket(gLastUsedItem) == POCKET_POKE_BALLS)
+ gBattleStruct->throwingPokeBall = TRUE;
gBattleCommunication[gActiveBattler]++;
}
break;
case B_ACTION_SWITCH:
- if (gBattleBufferB[gActiveBattler][1] == PARTY_SIZE)
+ if (gBattleResources->bufferB[gActiveBattler][1] == PARTY_SIZE)
{
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
RecordedBattle_ClearBattlerAction(gActiveBattler, 1);
@@ -4392,8 +4225,12 @@ static void HandleTurnActionSelectionState(void)
case B_ACTION_SAFARI_BALL:
gBattleCommunication[gActiveBattler]++;
break;
+ case B_ACTION_THROW_BALL:
+ gBattleStruct->throwingPokeBall = TRUE;
+ gBattleCommunication[gActiveBattler]++;
+ break;
case B_ACTION_SAFARI_POKEBLOCK:
- if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) != 0)
+ if ((gBattleResources->bufferB[gActiveBattler][1] | (gBattleResources->bufferB[gActiveBattler][2] << 8)) != 0)
gBattleCommunication[gActiveBattler]++;
else
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
@@ -4408,6 +4245,9 @@ static void HandleTurnActionSelectionState(void)
case B_ACTION_WALLY_THROW:
gBattleCommunication[gActiveBattler]++;
break;
+ case B_ACTION_DEBUG:
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
+ break;
}
}
break;
@@ -4468,7 +4308,7 @@ static void HandleTurnActionSelectionState(void)
case STATE_SELECTION_SCRIPT_MAY_RUN:
if (*(gBattleStruct->selectionScriptFinished + gActiveBattler))
{
- if (gBattleBufferB[gActiveBattler][1] == B_ACTION_NOTHING_FAINTED)
+ if (gBattleResources->bufferB[gActiveBattler][1] == B_ACTION_NOTHING_FAINTED)
{
gHitMarker |= HITMARKER_RUN;
gChosenActionByBattler[gActiveBattler] = B_ACTION_RUN;
@@ -4498,6 +4338,13 @@ static void HandleTurnActionSelectionState(void)
if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount)
{
RecordedBattle_CheckMovesetChanges(B_RECORD_MODE_RECORDING);
+
+ if (WILD_DOUBLE_BATTLE && gBattleStruct->throwingPokeBall) {
+ // if we choose to throw a ball with our second mon, skip the action of the first
+ // (if we have chosen throw ball with first, second's is already skipped)
+ gChosenActionByBattler[B_POSITION_PLAYER_LEFT] = B_ACTION_NOTHING_FAINTED;
+ }
+
gBattleMainFunc = SetActionsAndBattlersTurnOrder;
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
@@ -4529,18 +4376,18 @@ static bool8 AllAtActionConfirmed(void)
static void UpdateBattlerPartyOrdersOnSwitch(void)
{
- *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1];
- RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][1]);
+ *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][1];
+ RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][1]);
if (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
- *(gActiveBattler * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF;
- *(gActiveBattler * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0);
- *(gActiveBattler * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 1) = gBattleBufferB[gActiveBattler][3];
+ *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF;
+ *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleResources->bufferB[gActiveBattler][2] & 0xF0);
+ *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 1) = gBattleResources->bufferB[gActiveBattler][3];
- *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0);
- *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4;
- *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 2) = gBattleBufferB[gActiveBattler][3];
+ *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0);
+ *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleResources->bufferB[gActiveBattler][2] & 0xF0) >> 4;
+ *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 2) = gBattleResources->bufferB[gActiveBattler][3];
}
}
@@ -4552,156 +4399,219 @@ void SwapTurnOrder(u8 id1, u8 id2)
SWAP(gBattlerByTurnOrder[id1], gBattlerByTurnOrder[id2], temp);
}
+u32 GetBattlerTotalSpeedStat(u8 battlerId)
+{
+ u32 speed = gBattleMons[battlerId].speed;
+ u32 ability = GetBattlerAbility(battlerId);
+ u32 holdEffect = GetBattlerHoldEffect(battlerId, TRUE);
+
+ // weather abilities
+ if (WEATHER_HAS_EFFECT)
+ {
+ if (ability == ABILITY_SWIFT_SWIM && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && gBattleWeather & B_WEATHER_RAIN)
+ speed *= 2;
+ else if (ability == ABILITY_CHLOROPHYLL && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && gBattleWeather & B_WEATHER_SUN)
+ speed *= 2;
+ else if (ability == ABILITY_SAND_RUSH && gBattleWeather & B_WEATHER_SANDSTORM)
+ speed *= 2;
+ else if (ability == ABILITY_SLUSH_RUSH && gBattleWeather & B_WEATHER_HAIL)
+ speed *= 2;
+ }
+
+ // other abilities
+ if (ability == ABILITY_QUICK_FEET && gBattleMons[battlerId].status1 & STATUS1_ANY)
+ speed = (speed * 150) / 100;
+ else if (ability == ABILITY_SURGE_SURFER && gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
+ speed *= 2;
+ else if (ability == ABILITY_SLOW_START && gDisableStructs[battlerId].slowStartTimer != 0)
+ speed /= 2;
+
+ // stat stages
+ speed *= gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPEED]][0];
+ speed /= gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPEED]][1];
+
+ // player's badge boost
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER))
+ && ShouldGetStatBadgeBoost(FLAG_BADGE03_GET, battlerId)
+ && GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ {
+ speed = (speed * 110) / 100;
+ }
+
+ // item effects
+ if (holdEffect == HOLD_EFFECT_MACHO_BRACE || holdEffect == HOLD_EFFECT_POWER_ITEM)
+ speed /= 2;
+ else if (holdEffect == HOLD_EFFECT_IRON_BALL)
+ speed /= 2;
+ else if (holdEffect == HOLD_EFFECT_CHOICE_SCARF)
+ speed = (speed * 150) / 100;
+ else if (holdEffect == HOLD_EFFECT_QUICK_POWDER && gBattleMons[battlerId].species == SPECIES_DITTO && !(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED))
+ speed *= 2;
+
+ // various effects
+ if (gSideStatuses[GET_BATTLER_SIDE(battlerId)] & SIDE_STATUS_TAILWIND)
+ speed *= 2;
+ if (gBattleResources->flags->flags[battlerId] & RESOURCE_FLAG_UNBURDEN)
+ speed *= 2;
+
+ // paralysis drop
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS && ability != ABILITY_QUICK_FEET)
+ speed /= (B_PARALYSIS_SPEED >= GEN_7 ? 2 : 4);
+
+ return speed;
+}
+
+s8 GetChosenMovePriority(u32 battlerId)
+{
+ u16 move;
+
+ gProtectStructs[battlerId].pranksterElevated = 0;
+ if (gProtectStructs[battlerId].noValidMoves)
+ move = MOVE_STRUGGLE;
+ else
+ move = gBattleMons[battlerId].moves[*(gBattleStruct->chosenMovePositions + battlerId)];
+
+ return GetMovePriority(battlerId, move);
+}
+
+s8 GetMovePriority(u32 battlerId, u16 move)
+{
+ s8 priority;
+ u16 ability = GetBattlerAbility(battlerId);
+
+ priority = gBattleMoves[move].priority;
+ if (ability == ABILITY_GALE_WINGS
+ && gBattleMoves[move].type == TYPE_FLYING
+ && (B_GALE_WINGS <= GEN_6 || BATTLER_MAX_HP(battlerId)))
+ {
+ priority++;
+ }
+ else if (ability == ABILITY_PRANKSTER && IS_MOVE_STATUS(move))
+ {
+ gProtectStructs[battlerId].pranksterElevated = 1;
+ priority++;
+ }
+ else if (gBattleMoves[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battlerId))
+ {
+ priority++;
+ }
+ else if (ability == ABILITY_TRIAGE)
+ {
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_RESTORE_HP:
+ case EFFECT_REST:
+ case EFFECT_MORNING_SUN:
+ case EFFECT_MOONLIGHT:
+ case EFFECT_SYNTHESIS:
+ case EFFECT_HEAL_PULSE:
+ case EFFECT_HEALING_WISH:
+ case EFFECT_SWALLOW:
+ case EFFECT_WISH:
+ case EFFECT_SOFTBOILED:
+ case EFFECT_ABSORB:
+ case EFFECT_ROOST:
+ priority += 3;
+ break;
+ }
+ }
+
+ return priority;
+}
+
u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves)
{
u8 strikesFirst = 0;
- u8 speedMultiplierBattler1 = 0, speedMultiplierBattler2 = 0;
u32 speedBattler1 = 0, speedBattler2 = 0;
- u8 holdEffect = 0;
- u8 holdEffectParam = 0;
- u16 moveBattler1 = 0, moveBattler2 = 0;
+ u32 holdEffectBattler1 = 0, holdEffectBattler2 = 0;
+ s8 priority1 = 0, priority2 = 0;
+ u16 ability1 = GetBattlerAbility(battler1), ability2 = GetBattlerAbility(battler2);
- if (WEATHER_HAS_EFFECT)
- {
- if ((gBattleMons[battler1].ability == ABILITY_SWIFT_SWIM && gBattleWeather & B_WEATHER_RAIN)
- || (gBattleMons[battler1].ability == ABILITY_CHLOROPHYLL && gBattleWeather & B_WEATHER_SUN))
- speedMultiplierBattler1 = 2;
- else
- speedMultiplierBattler1 = 1;
+ // Battler 1
+ speedBattler1 = GetBattlerTotalSpeedStat(battler1);
+ holdEffectBattler1 = GetBattlerHoldEffect(battler1, TRUE);
+ // Quick Draw
+ if (!ignoreChosenMoves && ability1 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler1]) && Random() % 100 < 30)
+ gProtectStructs[battler1].quickDraw = TRUE;
+ // Quick Claw and Custap Berry
+ if (!gProtectStructs[battler1].quickDraw
+ && ((holdEffectBattler1 == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler1)) / 100)
+ || (holdEffectBattler1 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler1, 4, gBattleMons[battler1].item))))
+ gProtectStructs[battler1].usedCustapBerry = TRUE;
- if ((gBattleMons[battler2].ability == ABILITY_SWIFT_SWIM && gBattleWeather & B_WEATHER_RAIN)
- || (gBattleMons[battler2].ability == ABILITY_CHLOROPHYLL && gBattleWeather & B_WEATHER_SUN))
- speedMultiplierBattler2 = 2;
- else
- speedMultiplierBattler2 = 1;
- }
- else
- {
- speedMultiplierBattler1 = 1;
- speedMultiplierBattler2 = 1;
- }
+ // Battler 2
+ speedBattler2 = GetBattlerTotalSpeedStat(battler2);
+ holdEffectBattler2 = GetBattlerHoldEffect(battler2, TRUE);
+ // Quick Draw
+ if (!ignoreChosenMoves && ability2 == ABILITY_QUICK_DRAW && !IS_MOVE_STATUS(gChosenMoveByBattler[battler2]) && Random() % 100 < 30)
+ gProtectStructs[battler2].quickDraw = TRUE;
+ // Quick Claw and Custap Berry
+ if (!gProtectStructs[battler2].quickDraw
+ && ((holdEffectBattler2 == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * GetBattlerHoldEffectParam(battler2)) / 100)
+ || (holdEffectBattler2 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler2, 4, gBattleMons[battler2].item))))
+ gProtectStructs[battler2].usedCustapBerry = TRUE;
- speedBattler1 = (gBattleMons[battler1].speed * speedMultiplierBattler1)
- * (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][0])
- / (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][1]);
-
- if (gBattleMons[battler1].item == ITEM_ENIGMA_BERRY)
- {
- holdEffect = gEnigmaBerries[battler1].holdEffect;
- holdEffectParam = gEnigmaBerries[battler1].holdEffectParam;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(gBattleMons[battler1].item);
- holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler1].item);
- }
-
- // badge boost
- if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER))
- && FlagGet(FLAG_BADGE03_GET)
- && GetBattlerSide(battler1) == B_SIDE_PLAYER)
- {
- speedBattler1 = (speedBattler1 * 110) / 100;
- }
-
- if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
- speedBattler1 /= 2;
-
- if (gBattleMons[battler1].status1 & STATUS1_PARALYSIS)
- speedBattler1 /= 4;
-
- if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100)
- speedBattler1 = UINT_MAX;
-
- // check second battlerId's speed
-
- speedBattler2 = (gBattleMons[battler2].speed * speedMultiplierBattler2)
- * (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][0])
- / (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][1]);
-
- if (gBattleMons[battler2].item == ITEM_ENIGMA_BERRY)
- {
- holdEffect = gEnigmaBerries[battler2].holdEffect;
- holdEffectParam = gEnigmaBerries[battler2].holdEffectParam;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(gBattleMons[battler2].item);
- holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler2].item);
- }
-
- // badge boost
- if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER))
- && FlagGet(FLAG_BADGE03_GET)
- && GetBattlerSide(battler2) == B_SIDE_PLAYER)
- {
- speedBattler2 = (speedBattler2 * 110) / 100;
- }
-
- if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
- speedBattler2 /= 2;
-
- if (gBattleMons[battler2].status1 & STATUS1_PARALYSIS)
- speedBattler2 /= 4;
-
- if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100)
- speedBattler2 = UINT_MAX;
-
- if (ignoreChosenMoves)
- {
- moveBattler1 = MOVE_NONE;
- moveBattler2 = MOVE_NONE;
- }
- else
+ if (!ignoreChosenMoves)
{
if (gChosenActionByBattler[battler1] == B_ACTION_USE_MOVE)
- {
- if (gProtectStructs[battler1].noValidMoves)
- moveBattler1 = MOVE_STRUGGLE;
- else
- moveBattler1 = gBattleMons[battler1].moves[*(gBattleStruct->chosenMovePositions + battler1)];
- }
- else
- moveBattler1 = MOVE_NONE;
-
+ priority1 = GetChosenMovePriority(battler1);
if (gChosenActionByBattler[battler2] == B_ACTION_USE_MOVE)
- {
- if (gProtectStructs[battler2].noValidMoves)
- moveBattler2 = MOVE_STRUGGLE;
- else
- moveBattler2 = gBattleMons[battler2].moves[*(gBattleStruct->chosenMovePositions + battler2)];
- }
- else
- moveBattler2 = MOVE_NONE;
+ priority2 = GetChosenMovePriority(battler2);
}
- // both move priorities are different than 0
- if (gBattleMoves[moveBattler1].priority != 0 || gBattleMoves[moveBattler2].priority != 0)
+ if (priority1 == priority2)
{
- // both priorities are the same
- if (gBattleMoves[moveBattler1].priority == gBattleMoves[moveBattler2].priority)
+ // QUICK CLAW / CUSTAP - always first
+ // LAGGING TAIL - always last
+ // STALL - always last
+
+ if (gProtectStructs[battler1].quickDraw && !gProtectStructs[battler2].quickDraw)
+ strikesFirst = 0;
+ else if (!gProtectStructs[battler1].quickDraw && gProtectStructs[battler2].quickDraw)
+ strikesFirst = 1;
+ else if (gProtectStructs[battler1].usedCustapBerry && !gProtectStructs[battler2].usedCustapBerry)
+ strikesFirst = 0;
+ else if (gProtectStructs[battler2].usedCustapBerry && !gProtectStructs[battler1].usedCustapBerry)
+ strikesFirst = 1;
+ else if (holdEffectBattler1 == HOLD_EFFECT_LAGGING_TAIL && holdEffectBattler2 != HOLD_EFFECT_LAGGING_TAIL)
+ strikesFirst = 1;
+ else if (holdEffectBattler2 == HOLD_EFFECT_LAGGING_TAIL && holdEffectBattler1 != HOLD_EFFECT_LAGGING_TAIL)
+ strikesFirst = 0;
+ else if (ability1 == ABILITY_STALL && ability2 != ABILITY_STALL)
+ strikesFirst = 1;
+ else if (ability2 == ABILITY_STALL && ability1 != ABILITY_STALL)
+ strikesFirst = 0;
+ else
{
if (speedBattler1 == speedBattler2 && Random() & 1)
+ {
strikesFirst = 2; // same speeds, same priorities
+ }
else if (speedBattler1 < speedBattler2)
- strikesFirst = 1; // battler2 has more speed
-
- // else battler1 has more speed
+ {
+ // battler2 has more speed
+ if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM)
+ strikesFirst = 0;
+ else
+ strikesFirst = 1;
+ }
+ else
+ {
+ // battler1 has more speed
+ if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM)
+ strikesFirst = 1;
+ else
+ strikesFirst = 0;
+ }
}
- else if (gBattleMoves[moveBattler1].priority < gBattleMoves[moveBattler2].priority)
- strikesFirst = 1; // battler2's move has greater priority
-
- // else battler1's move has greater priority
}
- // both priorities are equal to 0
+ else if (priority1 < priority2)
+ {
+ strikesFirst = 1; // battler2's move has greater priority
+ }
else
{
- if (speedBattler1 == speedBattler2 && Random() & 1)
- strikesFirst = 2; // same speeds, same priorities
- else if (speedBattler1 < speedBattler2)
- strikesFirst = 1; // battler2 has more speed
-
- // else battler1 has more speed
+ strikesFirst = 0; // battler1's move has greater priority
}
return strikesFirst;
@@ -4762,15 +4672,17 @@ static void SetActionsAndBattlersTurnOrder(void)
turnOrderId++;
}
}
- gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
- gBattleStruct->focusPunchBattlerId = 0;
+ gBattleMainFunc = CheckMegaEvolutionBeforeTurn;
+ gBattleStruct->mega.battlerId = 0;
return;
}
else
{
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
- if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH)
+ if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM
+ || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH
+ || gChosenActionByBattler[gActiveBattler] == B_ACTION_THROW_BALL)
{
gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
@@ -4779,7 +4691,9 @@ static void SetActionsAndBattlersTurnOrder(void)
}
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
- if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH)
+ if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM
+ && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH
+ && gChosenActionByBattler[gActiveBattler] != B_ACTION_THROW_BALL)
{
gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
@@ -4795,7 +4709,9 @@ static void SetActionsAndBattlersTurnOrder(void)
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
- && gActionsByTurnOrder[j] != B_ACTION_SWITCH)
+ && gActionsByTurnOrder[j] != B_ACTION_SWITCH
+ && gActionsByTurnOrder[i] != B_ACTION_THROW_BALL
+ && gActionsByTurnOrder[j] != B_ACTION_THROW_BALL)
{
if (GetWhoStrikesFirst(battler1, battler2, FALSE))
SwapTurnOrder(i, j);
@@ -4804,27 +4720,26 @@ static void SetActionsAndBattlersTurnOrder(void)
}
}
}
- gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
- gBattleStruct->focusPunchBattlerId = 0;
+ gBattleMainFunc = CheckMegaEvolutionBeforeTurn;
+ gBattleStruct->mega.battlerId = 0;
}
static void TurnValuesCleanUp(bool8 var0)
{
s32 i;
- u8 *dataPtr;
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
if (var0)
{
- gProtectStructs[gActiveBattler].protected = 0;
- gProtectStructs[gActiveBattler].endured = 0;
+ gProtectStructs[gActiveBattler].protected = FALSE;
+ gProtectStructs[gActiveBattler].spikyShielded = FALSE;
+ gProtectStructs[gActiveBattler].kingsShielded = FALSE;
+ gProtectStructs[gActiveBattler].banefulBunkered = FALSE;
}
else
{
- dataPtr = (u8*)(&gProtectStructs[gActiveBattler]);
- for (i = 0; i < sizeof(struct ProtectStruct); i++)
- dataPtr[i] = 0;
+ memset(&gProtectStructs[gActiveBattler], 0, sizeof(struct ProtectStruct));
if (gDisableStructs[gActiveBattler].isFirstTurn)
gDisableStructs[gActiveBattler].isFirstTurn--;
@@ -4841,46 +4756,158 @@ static void TurnValuesCleanUp(bool8 var0)
gBattleMons[gActiveBattler].status2 &= ~STATUS2_SUBSTITUTE;
}
+ gSideStatuses[0] &= ~(SIDE_STATUS_QUICK_GUARD | SIDE_STATUS_WIDE_GUARD | SIDE_STATUS_CRAFTY_SHIELD | SIDE_STATUS_MAT_BLOCK);
+ gSideStatuses[1] &= ~(SIDE_STATUS_QUICK_GUARD | SIDE_STATUS_WIDE_GUARD | SIDE_STATUS_CRAFTY_SHIELD | SIDE_STATUS_MAT_BLOCK);
gSideTimers[0].followmeTimer = 0;
gSideTimers[1].followmeTimer = 0;
}
void SpecialStatusesClear(void)
{
- for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
- {
- s32 i;
- u8 *dataPtr = (u8*)(&gSpecialStatuses[gActiveBattler]);
+ memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses));
+}
- for (i = 0; i < sizeof(struct SpecialStatus); i++)
- dataPtr[i] = 0;
+static void CheckMegaEvolutionBeforeTurn(void)
+{
+ if (!(gHitMarker & HITMARKER_RUN))
+ {
+ while (gBattleStruct->mega.battlerId < gBattlersCount)
+ {
+ gActiveBattler = gBattlerAttacker = gBattleStruct->mega.battlerId;
+ gBattleStruct->mega.battlerId++;
+ if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler]
+ && !(gProtectStructs[gActiveBattler].noValidMoves))
+ {
+ gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]);
+ gLastUsedItem = gBattleMons[gActiveBattler].item;
+ if (gBattleStruct->mega.isWishMegaEvo == TRUE)
+ BattleScriptExecute(BattleScript_WishMegaEvolution);
+ else
+ BattleScriptExecute(BattleScript_MegaEvolution);
+ return;
+ }
+ }
}
+
+ #if B_MEGA_EVO_TURN_ORDER <= GEN_6
+ gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
+ gBattleStruct->focusPunchBattlerId = 0;
+ #else
+ gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved
+ #endif
+}
+
+// In gen7, priority and speed are recalculated during the turn in which a pokemon mega evolves
+static void TryChangeTurnOrder(void)
+{
+ s32 i, j;
+ for (i = 0; i < gBattlersCount - 1; i++)
+ {
+ for (j = i + 1; j < gBattlersCount; j++)
+ {
+ u8 battler1 = gBattlerByTurnOrder[i];
+ u8 battler2 = gBattlerByTurnOrder[j];
+ if (gActionsByTurnOrder[i] == B_ACTION_USE_MOVE
+ && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE)
+ {
+ if (GetWhoStrikesFirst(battler1, battler2, FALSE))
+ SwapTurnOrder(i, j);
+ }
+ }
+ }
+ gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
+ gBattleStruct->focusPunchBattlerId = 0;
}
static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
{
+ u32 i;
+
if (!(gHitMarker & HITMARKER_RUN))
{
while (gBattleStruct->focusPunchBattlerId < gBattlersCount)
{
gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBattlerId;
gBattleStruct->focusPunchBattlerId++;
- if (gChosenMoveByBattler[gActiveBattler] == MOVE_FOCUS_PUNCH
- && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
+ if (!(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
&& !(gDisableStructs[gBattlerAttacker].truantCounter)
&& !(gProtectStructs[gActiveBattler].noValidMoves))
{
- BattleScriptExecute(BattleScript_FocusPunchSetUp);
+ switch(gChosenMoveByBattler[gActiveBattler])
+ {
+ case MOVE_FOCUS_PUNCH:
+ BattleScriptExecute(BattleScript_FocusPunchSetUp);
+ return;
+ case MOVE_BEAK_BLAST:
+ BattleScriptExecute(BattleScript_BeakBlastSetUp);
+ return;
+ }
+ }
+ }
+ }
+
+ gBattleMainFunc = CheckQuickClaw_CustapBerryActivation;
+ gBattleStruct->quickClawBattlerId = 0;
+}
+
+static void CheckQuickClaw_CustapBerryActivation(void)
+{
+ u32 i;
+
+ if (!(gHitMarker & HITMARKER_RUN))
+ {
+ while (gBattleStruct->quickClawBattlerId < gBattlersCount)
+ {
+ gActiveBattler = gBattlerAttacker = gBattleStruct->quickClawBattlerId;
+ gBattleStruct->quickClawBattlerId++;
+ if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_MOVE
+ && gChosenMoveByBattler[gActiveBattler] != MOVE_FOCUS_PUNCH // quick claw message doesn't need to activate here
+ && (gProtectStructs[gActiveBattler].usedCustapBerry || gProtectStructs[gActiveBattler].quickDraw)
+ && !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
+ && !(gDisableStructs[gBattlerAttacker].truantCounter)
+ && !(gProtectStructs[gActiveBattler].noValidMoves))
+ {
+ if (gProtectStructs[gActiveBattler].usedCustapBerry)
+ {
+ gProtectStructs[gActiveBattler].usedCustapBerry = FALSE;
+ gLastUsedItem = gBattleMons[gActiveBattler].item;
+ PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem);
+ if (GetBattlerHoldEffect(gActiveBattler, FALSE) == HOLD_EFFECT_CUSTAP_BERRY)
+ {
+ // don't record berry since its gone now
+ BattleScriptExecute(BattleScript_CustapBerryActivation);
+ }
+ else
+ {
+ RecordItemEffectBattle(gActiveBattler, GetBattlerHoldEffect(gActiveBattler, FALSE));
+ BattleScriptExecute(BattleScript_QuickClawActivation);
+ }
+ }
+ else if (gProtectStructs[gActiveBattler].quickDraw)
+ {
+ gBattlerAbility = gActiveBattler;
+ gProtectStructs[gActiveBattler].quickDraw = FALSE;
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
+ BattleScriptExecute(BattleScript_QuickDrawActivation);
+ }
return;
}
}
}
- TryClearRageStatuses();
+ // setup stuff before turns/actions
+ TryClearRageAndFuryCutter();
gCurrentTurnActionNumber = 0;
- gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber];
- gDynamicBasePower = 0;
+ gCurrentActionFuncId = gActionsByTurnOrder[0];
gBattleStruct->dynamicMoveType = 0;
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ gBattleStruct->ateBoost[i] = FALSE;
+ gSpecialStatuses[i].gemBoost = FALSE;
+ }
+
gBattleMainFunc = RunTurnActionsFunctions;
gBattleCommunication[3] = 0;
gBattleCommunication[4] = 0;
@@ -5051,6 +5078,8 @@ static void HandleEndTurn_MonFled(void)
static void HandleEndTurn_FinishBattle(void)
{
+ u32 i;
+
if (gCurrentActionFuncId == B_ACTION_TRY_FINISH || gCurrentActionFuncId == B_ACTION_FINISHED)
{
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK
@@ -5096,6 +5125,27 @@ static void HandleEndTurn_FinishBattle(void)
RecordedBattle_SetPlaybackFinished();
BeginFastPaletteFade(3);
FadeOutMapMusic(5);
+ #if B_TRAINERS_KNOCK_OFF_ITEMS
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ TryRestoreStolenItems();
+ #endif
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ UndoMegaEvolution(i);
+ UndoFormChange(i, B_SIDE_PLAYER, FALSE);
+ DoBurmyFormChange(i);
+ }
+ #if B_RECALCULATE_STATS >= GEN_5
+ // Recalculate the stats of every party member before the end
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG)
+ {
+ CalculateMonStats(&gPlayerParty[i]);
+ }
+ }
+ #endif
gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions;
gCB2_AfterEvolution = BattleMainCB2;
}
@@ -5110,15 +5160,24 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void)
{
if (!gPaletteFade.active)
{
+ gIsFishingEncounter = FALSE;
+ gIsSurfingEncounter = FALSE;
ResetSpriteData();
- if (gLeveledUpInBattle == 0 || gBattleOutcome != B_OUTCOME_WON)
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK
+ | BATTLE_TYPE_RECORDED_LINK
+ | BATTLE_TYPE_FIRST_BATTLE
+ | BATTLE_TYPE_SAFARI
+ | BATTLE_TYPE_FRONTIER
+ | BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_WALLY_TUTORIAL))
+ && (B_EVOLUTION_AFTER_WHITEOUT >= GEN_6 || gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT))
{
- gBattleMainFunc = ReturnFromBattleToOverworld;
- return;
+ gBattleMainFunc = TrySpecialEvolution;
}
else
{
- gBattleMainFunc = TryEvolvePokemon;
+ gBattleMainFunc = ReturnFromBattleToOverworld;
+ return;
}
}
@@ -5131,6 +5190,26 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void)
}
}
+static void TrySpecialEvolution(void) // Attempts to perform non-level related battle evolutions (not the script command).
+{
+ s32 i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ u16 species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_SPECIAL, i, NULL);
+ if (species != SPECIES_NONE && !(sTriedEvolving & gBitTable[i]))
+ {
+ sTriedEvolving |= gBitTable[i];
+ FreeAllWindowBuffers();
+ gBattleMainFunc = WaitForEvoSceneToFinish;
+ EvolutionScene(&gPlayerParty[i], species, TRUE, i);
+ return;
+ }
+ }
+ sTriedEvolving = 0;
+ gBattleMainFunc = TryEvolvePokemon;
+}
+
static void TryEvolvePokemon(void)
{
s32 i;
@@ -5165,7 +5244,7 @@ static void TryEvolvePokemon(void)
static void WaitForEvoSceneToFinish(void)
{
if (gMain.callback2 == BattleMainCB2)
- gBattleMainFunc = TryEvolvePokemon;
+ gBattleMainFunc = TrySpecialEvolution;
}
static void ReturnFromBattleToOverworld(void)
@@ -5219,3 +5298,162 @@ void RunBattleScriptCommands(void)
if (gBattleControllerExecFlags == 0)
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
}
+
+void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk)
+{
+ u32 moveType, ateType, attackerAbility;
+ u16 holdEffect = GetBattlerHoldEffect(battlerAtk, TRUE);
+
+ if (move == MOVE_STRUGGLE)
+ return;
+
+ gBattleStruct->dynamicMoveType = 0;
+ gBattleStruct->ateBoost[battlerAtk] = 0;
+ gSpecialStatuses[battlerAtk].gemBoost = FALSE;
+
+ if (gBattleMoves[move].effect == EFFECT_WEATHER_BALL)
+ {
+ if (WEATHER_HAS_EFFECT)
+ {
+ if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA)
+ gBattleStruct->dynamicMoveType = TYPE_WATER | F_DYNAMIC_TYPE_2;
+ else if (gBattleWeather & B_WEATHER_SANDSTORM)
+ gBattleStruct->dynamicMoveType = TYPE_ROCK | F_DYNAMIC_TYPE_2;
+ else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA)
+ gBattleStruct->dynamicMoveType = TYPE_FIRE | F_DYNAMIC_TYPE_2;
+ else if (gBattleWeather & B_WEATHER_HAIL)
+ gBattleStruct->dynamicMoveType = TYPE_ICE | F_DYNAMIC_TYPE_2;
+ else
+ gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_2;
+ }
+ }
+ else if (gBattleMoves[move].effect == EFFECT_HIDDEN_POWER)
+ {
+ u8 typeBits = ((gBattleMons[battlerAtk].hpIV & 1) << 0)
+ | ((gBattleMons[battlerAtk].attackIV & 1) << 1)
+ | ((gBattleMons[battlerAtk].defenseIV & 1) << 2)
+ | ((gBattleMons[battlerAtk].speedIV & 1) << 3)
+ | ((gBattleMons[battlerAtk].spAttackIV & 1) << 4)
+ | ((gBattleMons[battlerAtk].spDefenseIV & 1) << 5);
+
+ // Subtract 4 instead of 1 below because 3 types are excluded (TYPE_NORMAL and TYPE_MYSTERY and TYPE_FAIRY)
+ // The final + 1 skips past Normal, and the following conditional skips TYPE_MYSTERY
+ gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 4) * typeBits) / 63 + 1;
+ if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY)
+ gBattleStruct->dynamicMoveType++;
+ gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_1 | F_DYNAMIC_TYPE_2;
+ }
+ else if (gBattleMoves[move].effect == EFFECT_CHANGE_TYPE_ON_ITEM)
+ {
+ if (holdEffect == gBattleMoves[move].argument)
+ gBattleStruct->dynamicMoveType = ItemId_GetSecondaryId(gBattleMons[battlerAtk].item) | F_DYNAMIC_TYPE_2;
+ }
+ else if (gBattleMoves[move].effect == EFFECT_REVELATION_DANCE)
+ {
+ if (gBattleMons[battlerAtk].type1 != TYPE_MYSTERY)
+ gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type1 | F_DYNAMIC_TYPE_2;
+ else if (gBattleMons[battlerAtk].type2 != TYPE_MYSTERY)
+ gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_2;
+ else if (gBattleMons[battlerAtk].type3 != TYPE_MYSTERY)
+ gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type3 | F_DYNAMIC_TYPE_2;
+ }
+ else if (gBattleMoves[move].effect == EFFECT_NATURAL_GIFT)
+ {
+ if (ItemId_GetPocket(gBattleMons[battlerAtk].item) == POCKET_BERRIES)
+ gBattleStruct->dynamicMoveType = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].type;
+ }
+ else if (gBattleMoves[move].effect == EFFECT_TERRAIN_PULSE)
+ {
+ if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_TERRAIN_ANY))
+ {
+ if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
+ gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_2;
+ else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
+ gBattleStruct->dynamicMoveType = TYPE_GRASS | F_DYNAMIC_TYPE_2;
+ else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
+ gBattleStruct->dynamicMoveType = TYPE_FAIRY | F_DYNAMIC_TYPE_2;
+ else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
+ gBattleStruct->dynamicMoveType = TYPE_PSYCHIC | F_DYNAMIC_TYPE_2;
+ else //failsafe
+ gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_2;
+ }
+ }
+
+ attackerAbility = GetBattlerAbility(battlerAtk);
+ GET_MOVE_TYPE(move, moveType);
+ if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL)
+ || gStatuses4[battlerAtk] & STATUS4_ELECTRIFIED)
+ {
+ gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_2;
+ }
+ else if (gBattleMoves[move].type == TYPE_NORMAL
+ && gBattleMoves[move].effect != EFFECT_HIDDEN_POWER
+ && gBattleMoves[move].effect != EFFECT_WEATHER_BALL
+ && gBattleMoves[move].effect != EFFECT_CHANGE_TYPE_ON_ITEM
+ && gBattleMoves[move].effect != EFFECT_NATURAL_GIFT
+ && ((attackerAbility == ABILITY_PIXILATE && (ateType = TYPE_FAIRY))
+ || (attackerAbility == ABILITY_REFRIGERATE && (ateType = TYPE_ICE))
+ || (attackerAbility == ABILITY_AERILATE && (ateType = TYPE_FLYING))
+ || ((attackerAbility == ABILITY_GALVANIZE) && (ateType = TYPE_ELECTRIC))
+ )
+ )
+ {
+ gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_2;
+ gBattleStruct->ateBoost[battlerAtk] = 1;
+ }
+ else if (gBattleMoves[move].type != TYPE_NORMAL
+ && gBattleMoves[move].effect != EFFECT_HIDDEN_POWER
+ && gBattleMoves[move].effect != EFFECT_WEATHER_BALL
+ && attackerAbility == ABILITY_NORMALIZE)
+ {
+ gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_2;
+ gBattleStruct->ateBoost[battlerAtk] = 1;
+ }
+ else if (gBattleMoves[move].flags & FLAG_SOUND
+ && attackerAbility == ABILITY_LIQUID_VOICE)
+ {
+ gBattleStruct->dynamicMoveType = TYPE_WATER | F_DYNAMIC_TYPE_2;
+ }
+ else if (gStatuses4[battlerAtk] & STATUS4_PLASMA_FISTS && moveType == TYPE_NORMAL)
+ {
+ gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_2;
+ }
+ else if (move == MOVE_AURA_WHEEL && gBattleMons[battlerAtk].species == SPECIES_MORPEKO_HANGRY)
+ {
+ gBattleStruct->dynamicMoveType = TYPE_DARK | F_DYNAMIC_TYPE_2;
+ }
+
+ // Check if a gem should activate.
+ GET_MOVE_TYPE(move, moveType);
+ if (holdEffect == HOLD_EFFECT_GEMS
+ && moveType == ItemId_GetSecondaryId(gBattleMons[battlerAtk].item))
+ {
+ gSpecialStatuses[battlerAtk].gemParam = GetBattlerHoldEffectParam(battlerAtk);
+ gSpecialStatuses[battlerAtk].gemBoost = TRUE;
+ }
+}
+
+// special to set a field's totem boost(s)
+// inputs:
+// var8000: battlerId
+// var8001 - var8007: stat changes
+void SetTotemBoost(void)
+{
+ u8 battlerId = gSpecialVar_0x8000;
+ u8 i;
+
+ for (i = 0; i < (NUM_BATTLE_STATS - 1); i++)
+ {
+ if (*(&gSpecialVar_0x8001 + i))
+ {
+ gTotemBoosts[battlerId].stats |= (1 << i);
+ gTotemBoosts[battlerId].statChanges[i] = *(&gSpecialVar_0x8001 + i);
+ gTotemBoosts[battlerId].stats |= 0x80; // used as a flag for the "totem flared to life" script
+ }
+ }
+}
+
+bool32 IsWildMonSmart(void)
+{
+ return (B_SMART_WILD_AI_FLAG != 0 && FlagGet(B_SMART_WILD_AI_FLAG));
+}
diff --git a/src/battle_message.c b/src/battle_message.c
index c6938c5cfb..688a48f256 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -5,6 +5,7 @@
#include "battle_message.h"
#include "battle_setup.h"
#include "battle_tower.h"
+#include "battle_z_move.h"
#include "data.h"
#include "event_data.h"
#include "frontier_util.h"
@@ -20,11 +21,14 @@
#include "text.h"
#include "trainer_hill.h"
#include "window.h"
+#include "constants/abilities.h"
#include "constants/battle_dome.h"
#include "constants/battle_string_ids.h"
#include "constants/frontier_util.h"
#include "constants/items.h"
#include "constants/moves.h"
+#include "constants/opponents.h"
+#include "constants/species.h"
#include "constants/trainers.h"
#include "constants/trainer_hill.h"
#include "constants/weather.h"
@@ -45,9 +49,8 @@ struct BattleWindowText
static void ChooseMoveUsedParticle(u8 *textPtr);
static void ChooseTypeOfMoveUsedString(u8 *dst);
-static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst);
-static EWRAM_DATA u8 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0};
+static EWRAM_DATA u16 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL;
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
@@ -74,8 +77,14 @@ static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_
static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p");
static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p");
static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p");
+static const u8 sText_PlayerLostToEnemyTrainer[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\pPlayer lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}");
+static const u8 sText_PlayerPaidPrizeMoney[] = _("{B_PLAYER_NAME} paid ¥{B_BUFF1} as the prize\nmoney…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p");
+#if B_WHITEOUT_MONEY >= GEN_4
+static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} panicked and lost ¥{B_BUFF1}…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
+#else
static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
+#endif
static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p");
static const u8 sText_CantEscape2[] = _("Can't escape!\p");
static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!");
@@ -86,7 +95,7 @@ static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalre
static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!");
static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!");
static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!");
-static const u8 sText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}!");
static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!");
static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned.");
static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!");
@@ -141,6 +150,7 @@ static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!");
static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!");
static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!");
static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}'s BIND!");
+static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped\nby a snap trap!");
static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!");
static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!");
static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!");
@@ -216,13 +226,13 @@ static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\
static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!");
static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!");
static const u8 sText_PkmnAttack[] = _("{B_BUFF1}'s attack!");
-static const u8 sText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!");
+static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became the\ncenter of attention!");
static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!");
static const u8 sText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!");
static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}'s status\nreturned to normal!");
static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!");
static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!");
-static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!");
+static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe Taunt!");
static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!");
static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!");
static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.");
@@ -257,9 +267,10 @@ static const u8 sText_TheWallShattered[] = _("The wall shattered!");
static const u8 sText_ButNoEffect[] = _("But it had no effect!");
static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p");
static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nis disabled!\p");
-static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the same\nmove in a row due to the TORMENT!\p");
-static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the TAUNT!\p");
+static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the same\nmove in a row due to the Torment!\p");
+static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the Taunt!\p");
static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the\nsealed {B_CURRENT_MOVE}!\p");
+static const u8 sText_PkmnCantUseMoveThroatChop[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} due to Throat Chop!\p");
static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!");
static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!");
static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!");
@@ -275,7 +286,7 @@ static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s
static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!");
static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s ATTACK!");
static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!");
-static const u8 sText_PkmnHurtsWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!");
static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}'s {B_BUFF2}!");
static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents burns!");
static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!");
@@ -297,7 +308,7 @@ static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s
static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!");
static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!");
-static const u8 sText_StatSharply[] = _("sharply ");
+const u8 gText_StatSharply[] = _("sharply ");
const u8 gText_StatRose[] = _("rose!");
static const u8 sText_StatHarshly[] = _("harshly ");
static const u8 sText_StatFell[] = _("fell!");
@@ -416,31 +427,20 @@ static const u8 sText_FoePkmnPrefix3[] = _("Foe");
static const u8 sText_AllyPkmnPrefix2[] = _("Ally");
static const u8 sText_FoePkmnPrefix4[] = _("Foe");
static const u8 sText_AllyPkmnPrefix3[] = _("Ally");
-static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}");
+static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF3}!");
static const u8 sText_ExclamationMark[] = _("!");
static const u8 sText_ExclamationMark2[] = _("!");
static const u8 sText_ExclamationMark3[] = _("!");
static const u8 sText_ExclamationMark4[] = _("!");
static const u8 sText_ExclamationMark5[] = _("!");
-static const u8 sText_HP2[] = _("HP");
-static const u8 sText_Attack2[] = _("ATTACK");
-static const u8 sText_Defense2[] = _("DEFENSE");
-static const u8 sText_Speed[] = _("SPEED");
-static const u8 sText_SpAtk2[] = _("SP. ATK");
-static const u8 sText_SpDef2[] = _("SP. DEF");
static const u8 sText_Accuracy[] = _("accuracy");
static const u8 sText_Evasiveness[] = _("evasiveness");
-const u8 * const gStatNamesTable[NUM_BATTLE_STATS] =
+const u8 *const gStatNamesTable[NUM_BATTLE_STATS] =
{
- [STAT_HP] = sText_HP2,
- [STAT_ATK] = sText_Attack2,
- [STAT_DEF] = sText_Defense2,
- [STAT_SPEED] = sText_Speed,
- [STAT_SPATK] = sText_SpAtk2,
- [STAT_SPDEF] = sText_SpDef2,
- [STAT_ACC] = sText_Accuracy,
- [STAT_EVASION] = sText_Evasiveness,
+ gText_HP3, gText_Attack, gText_Defense,
+ gText_Speed, gText_SpAtk, gText_SpDef,
+ sText_Accuracy, sText_Evasiveness
};
static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!");
@@ -449,7 +449,7 @@ static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!");
static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!");
static const u8 sText_PokeblockWasTooSour[] = _("was too sour!");
-const u8 * const gPokeblockWasTooXStringTable[FLAVOR_COUNT] =
+const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] =
{
[FLAVOR_SPICY] = sText_PokeblockWasTooSpicy,
[FLAVOR_DRY] = sText_PokeblockWasTooDry,
@@ -469,13 +469,13 @@ static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!");
static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!");
static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!");
static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!");
-static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p");
-static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}");
-static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?");
-static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC.");
+static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p");
+static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}");
+static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_DEF_NAME}?");
+static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} was sent to\n{B_PC_CREATOR_NAME} PC.");
static const u8 sText_Someones[] = _("someone's");
static const u8 sText_Lanettes[] = _("LANETTE's");
-static const u8 sText_PkmnDataAddedToDex[] = _("{B_OPPONENT_MON1_NAME}'s data was\nadded to the POKéDEX.\p");
+static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data was\nadded to the POKéDEX.\p");
static const u8 sText_ItIsRaining[] = _("It is raining.");
static const u8 sText_SandstormIsRaging[] = _("A sandstorm is raging.");
static const u8 sText_BoxIsFull[] = _("The BOX is full!\nYou can't catch any more!\p");
@@ -514,8 +514,337 @@ static const u8 sText_Trainer2WinText[];
static const u8 sText_TwoInGameTrainersDefeated[];
static const u8 sText_Trainer2LoseText[];
-const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_START] =
+// New battle strings.
+static const s8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} Endured\nthe hit using {B_DEF_ABILITY}!");
+static const s8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its {B_LAST_ITEM}!");
+static const s8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its {B_LAST_ITEM}!");
+static const s8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly \npoisoned by the {B_LAST_ITEM}!");
+static const s8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned\nby the {B_LAST_ITEM}!");
+static const s8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} activates!");
+static const u8 sText_GravityIntensified[] = _("Gravity intensified!");
+static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was \nidentified!");
+static const u8 sText_TargetWokeUp[] = _("{B_DEF_NAME_WITH_PREFIX} woke up!");
+static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and\nate {B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!");
+static const u8 sText_TailWindBlew[] = _("The tailwind blew from\nbehind {B_ATK_TEAM2} team!");
+static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back\nto {B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}");
+static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can't use\nitems anymore!");
+static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its\n{B_LAST_ITEM}!");
+static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was prevented\nfrom healing!");
+static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched its\nAttack and Defense!");
+static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s ability\nwas suppressed!");
+static const u8 sText_ShieldedFromCriticalHits[] = _("The {B_CURRENT_MOVE} shielded {B_ATK_TEAM2}\nteam from critical hits!");
+static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Attack and\pSp. Atk with the target!");
+static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Defense and\pSp. Def with the target!");
+static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired\n{B_DEF_ABILITY}!");
+static const u8 sText_PoisonSpikesScattered[] = _("Poison Spikes were scattered all\naround the opposing team's feet!");
+static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes\nwith the target!");
+static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself\nwith a veil of water!");
+static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated on\nelectromagnetism!");
+static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted\nthe dimensions!");
+static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air\naround {B_DEF_TEAM2} team!");
+static const u8 sText_CloakedInMysticalMoonlight[] =_("It became cloaked in mystical\nmoonlight!");
+static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by swirling magma!");
+static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} vanished\ninstantly!");
+static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected\n{B_ATK_TEAM2} team!");
+static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\nguard with the target!");
+static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\npower with the target!");
+static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which the\nDefense and Sp.Def stats are swapped!");
+static const u8 sText_BecameNimble[] =_("{B_ATK_NAME_WITH_PREFIX} became nimble!");
+static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!");
+static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which\nPokémon's held items lose their effects!");
+static const u8 sText_FellStraightDown[] =_("{B_DEF_NAME_WITH_PREFIX} fell\nstraight down!");
+static const u8 sText_TargetChangedType[] =_("{B_DEF_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!");
+static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!");
+static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind offer!");
+static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}'s stat changes\nwere removed!");
+static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} switched places!");
+static const u8 sText_RestoreTargetsHealth[] =_("{B_DEF_NAME_WITH_PREFIX}'s HP was restored!");
+static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX} into the sky!");
+static const u8 sText_FreedFromSkyDrop[] =_("{B_DEF_NAME_WITH_PREFIX} was freed\nfrom the Sky Drop!");
+static const u8 sText_PostponeTargetMove[] =_("{B_DEF_NAME_WITH_PREFIX}'s move\nwas postponed!");
+static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX}'s type\nchanged to match the {B_DEF_NAME_WITH_PREFIX}'s!");
+static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}");
+static const u8 sText_EmbargoEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse items again!");
+static const u8 sText_Electromagnetism[] = _("electromagnetism");
+static const u8 sText_BufferEnds[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\nwore off!");
+static const u8 sText_ThroatChopEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse sound-based moves again!");
+static const u8 sText_TelekinesisEnds[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom the telekinesis!");
+static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM1} team's tailwind\npetered out!");
+static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM1} team's Lucky Chant\nwore off!");
+static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to\nnormal!");
+static const u8 sText_WonderRoomEnds[] = _("Wonder Room wore off, and Defense\nand Sp. Def stats returned to normal!");
+static const u8 sText_MagicRoomEnds[] = _("Magic Room wore off, and held items'\neffects returned to normal!");
+static const u8 sText_MudSportEnds[] = _("The effects of Mud Sport have faded.");
+static const u8 sText_WaterSportEnds[] = _("The effects of Water Sport have faded.");
+static const u8 sText_GravityEnds[] = _("Gravity returned to normal!");
+static const u8 sText_AquaRingHeal[] = _("Aqua Ring restored\n{B_ATK_NAME_WITH_PREFIX}'s HP!");
+static const u8 sText_TargetAbilityRaisedStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its {B_BUFF1}!");
+static const u8 sText_TargetAbilityLoweredStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nlowered its {B_BUFF1}!");
+static const u8 sText_AttackerAbilityRaisedStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nraised its {B_BUFF1}!");
+static const u8 sText_ScriptingAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!");
+static const u8 sText_AuroraVeilEnds[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nwore off!");
+static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared\nfrom the battlefield.");
+static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared\nfrom the battlefield.");
+static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared\nfrom the battlefield.");
+static const u8 sText_GrassyTerrainEnds[] = _("The grass disappeared\nfrom the battlefield.");
+static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed\nits {B_BUFF1}!");
+static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX}\na little bit!");
+static const u8 sText_BadDreamsDmg[] = _("{B_DEF_NAME_WITH_PREFIX} is tormented\nby {B_ATK_ABILITY}!");
+static const u8 sText_MoldBreakerEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} breaks the mold!");
+static const u8 sText_TeravoltEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating \na bursting aura!");
+static const u8 sText_TurboblazeEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na blazing aura!");
+static const u8 sText_SlowStartEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} can't get it going!");
+static const u8 sText_SlowStartEnd[] = _("{B_ATK_NAME_WITH_PREFIX} finally got\nits act together!");
+static const u8 sText_SolarPowerHpDrop[] = _("The {B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\ntakes its toll!");
+static const u8 sText_AftermathDmg[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt!");
+static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered\nin anticipation!");
+static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nto the {B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!");
+static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nhealed it a little bit!");
+static const u8 sText_SnowWarningHail[] = _("It started to hail!");
+static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX} and\nfound its {B_LAST_ITEM}!");
+static const u8 sText_UnnerveEnters[] = _("The opposing team is too nervous\nto eat Berries!");
+static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested\nits {B_LAST_ITEM}!");
+static const u8 sText_LastAbilityRaisedBuff1[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\nraised its {B_BUFF1}!");
+static const u8 sText_MagicBounceActivates[] = _("The {B_DEF_NAME_WITH_PREFIX} bounced the\n{B_ATK_NAME_WITH_PREFIX} back!");
+static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed\nit into the {B_BUFF1} type!");
+static const u8 sText_SymbiosisItemPass[] = _("{B_ATK_NAME_WITH_PREFIX} passed its {B_LAST_ITEM}\nto {B_SCR_ACTIVE_NAME_WITH_PREFIX} through {B_ATK_ABILITY}!");
+static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
+static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared\nfrom around the opposing team's feet!");
+static const u8 sText_ToxicSpikesPoisoned[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was poisoned!");
+static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was\ncaught in a Sticky Web!");
+static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_HealingWishHealed[] = _("{B_ATK_NAME_WITH_PREFIX} regained health!");
+static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!");
+static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled\nby {B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!");
+static const u8 sText_AttackerAquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired {B_LAST_ABILITY}!");
+static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go higher!");
+static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was\nbounced back by {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY}!");
+static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into\n{B_DEF_NAME_WITH_PREFIX} using {B_LAST_ABILITY}!");
+static const u8 sText_NotDoneYet[] = _("This move effect is not done yet!\p");
+static const u8 sText_PkmnBlewAwayToxicSpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nToxic Spikes!");
+static const u8 sText_PkmnBlewAwayStickyWeb[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSticky Web!");
+static const u8 sText_PkmnBlewAwayStealthRock[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nStealth Rock!");
+static const u8 sText_StickyWebUsed[] = _("A sticky web spreads out on the\nground around {B_DEF_TEAM2} team!");
+static const u8 sText_QuashSuccess[] = _("The opposing {B_ATK_NAME_WITH_PREFIX}'s move was postponed!");
+static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers\nthe battlefield!");
+static const u8 sText_TopsyTurvySwitchedStats[] = _("{B_DEF_NAME_WITH_PREFIX}'s stat changes were\nall reversed!");
+static const u8 sText_TerrainBecomesMisty[] = _("Mist swirled about\nthe battlefield!");
+static const u8 sText_TerrainBecomesGrassy[] = _("Grass grew to cover\nthe battlefield!");
+static const u8 sText_TerrainBecomesElectric[] = _("An electric current runs across\nthe battlefield!");
+static const u8 sText_TerrainBecomesPsychic[] = _("The battlefield got weird!");
+static const u8 sText_TargetElectrified[] = _("The {B_DEF_NAME_WITH_PREFIX}'s moves\nhave been electrified!");
+static const u8 sText_AssaultVestDoesntAllow[] = _("{B_LAST_ITEM}'s effects prevent\nstatus moves from being used!\p");
+static const u8 sText_GravityPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE}\nbecause of gravity!\p");
+static const u8 sText_HealBlockPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} was\nprevented from healing!\p");
+static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is \nreacting to {B_ATK_TRAINER_NAME}'s Mega Ring!");
+static const u8 sText_FerventWishReached[] = _("{B_ATK_TRAINER_NAME}'s fervent wish\nhas reached {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_MegaEvoEvolved[] = _("{B_ATK_NAME_WITH_PREFIX} has Mega Evolved into\nMega {B_BUFF1}!");
+static const u8 sText_drastically[] = _("drastically ");
+static const u8 sText_severely[] = _("severely ");
+static const u8 sText_Infestation[] = _("{B_DEF_NAME_WITH_PREFIX} has been afflicted\nwith an infestation by {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_NoEffectOnTarget[] = _("It had no effect\non {B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_BurstingFlames[] = _("The bursting flames\nhit {B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
+static const u8 sText_BestowItemGiving[] = _("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to\n{B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_FellForFeint[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe feint!");
+static const u8 sText_PokemonCannotUseMove[] = _("{B_ATK_NAME_WITH_PREFIX} cannot\nuse {B_CURRENT_MOVE}!");
+static const u8 sText_CoveredInPowder[] = _("{B_DEF_NAME_WITH_PREFIX} is covered in powder!");
+static const u8 sText_PowderExplodes[] = _("When the flame touched the powder\non the Pokémon, it exploded!");
+static const u8 sText_BelchCantUse[] = _("Belch cannot be used!\p");
+static const u8 sText_SpectralThiefSteal[] = _("{B_ATK_NAME_WITH_PREFIX} stole the target's\nboosted stats!");
+static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} can't stay airborne\nbecause of gravity!");
+static const u8 sText_MistyTerrainPreventsStatus[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith a protective mist!");
+static const u8 sText_GrassyTerrainHeals[] = _("{B_ATK_NAME_WITH_PREFIX} is healed\nby the grassy terrain!");
+static const u8 sText_ElectricTerrainPreventsSleep[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith electrified terrain!");
+static const u8 sText_PsychicTerrainPreventsPriority[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith psychic terrain!");
+static const u8 sText_SafetyGogglesProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is not affected\nthanks to its {B_LAST_ITEM}!");
+static const u8 sText_FlowerVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself\nwith a veil of petals!");
+static const u8 sText_SweetVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself\nwith a veil of sweetness!");
+static const u8 sText_AromaVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby an aromatic veil!");
+static const u8 sText_CelebrateMessage[] = _("Congratulations, {B_PLAYER_NAME}!");
+static const u8 sText_UsedInstructedMove[] = _("{B_ATK_NAME_WITH_PREFIX} used the move\ninstructed by {B_BUFF1}!");
+static const u8 sText_LaserFocusMessage[] = _("{B_ATK_NAME_WITH_PREFIX}\nconcentrated intensely!");
+static const u8 sText_GemActivates[] = _("{B_LAST_ITEM} strengthened\n{B_ATK_NAME_WITH_PREFIX}'s power!");
+static const u8 sText_BerryDmgReducing[] = _("{B_LAST_ITEM} weakened the damage\nto {B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_TargetAteItem[] = _("{B_DEF_NAME_WITH_PREFIX} ate its {B_LAST_ITEM}!");
+static const u8 sText_AirBalloonFloat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air\nwith its {B_LAST_ITEM}!");
+static const u8 sText_AirBalloonPop[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} popped!");
+static const u8 sText_IncinerateBurn[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwas burnt up!");
+static const u8 sText_BugBite[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate\n{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!");
+static const u8 sText_IllusionWoreOff[] = _("{B_DEF_NAME_WITH_PREFIX}'s Illusion wore off!");
+static const u8 sText_AttackerCuredTargetStatus[] = _("{B_ATK_NAME_WITH_PREFIX} cured\n{B_DEF_NAME_WITH_PREFIX}'s problem!");
+static const u8 sText_AttackerLostFireType[] = _("{B_ATK_NAME_WITH_PREFIX} burned itself out!");
+static const u8 sText_HealerCure[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\ncured {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s problem!");
+static const u8 sText_ReceiverAbilityTakeOver[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwas taken over!");
+static const u8 sText_PkmnAbsorbingPower[] = _("{B_ATK_NAME_WITH_PREFIX} is absorbing power!");
+static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run away\nduring the next turn!");
+static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love\nfrom the {B_LAST_ITEM}!");
+static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin a freezing light!");
+static const u8 sText_StatWasNotLowered[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas not lowered!");
+static const u8 sText_AuraFlaredToLife[] = _("{B_DEF_NAME_WITH_PREFIX}'s aura flared to life!");
+static const u8 sText_AirLockActivates[] = _("The effects of weather\ndisappeared.");
+static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its\npressure!");
+static const u8 sText_DarkAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na dark aura!");
+static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na fairy aura!");
+static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all\nother Pokémon's auras!");
+static const u8 sText_ComatoseActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is drowsing!");
+static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were\ncleansed!");
+static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found\na {B_LAST_ITEM}!");
+static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!");
+static const u8 sText_ASandstormKickedUp[] = _("A sandstorm kicked up!");
+static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish\nin three turns!");
+static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} drastically!");
+static const u8 sText_AsOneEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has two Abilities!");
+static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s\nstat changes were reset!");
+static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster,\nthanks to {B_BUFF1}!");
+static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its\nnext move using {B_LAST_ITEM}!");
+static const u8 sText_PkmnShookOffTheTaunt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off\nthe taunt!");
+static const u8 sText_PkmnGotOverItsInfatuation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over\nits infatuation!");
+static const u8 sText_ZPowerSurrounds[] = _("{B_ATK_NAME_WITH_PREFIX} surrounds\nitself with its Z-Power!");
+static const u8 sText_ZPowerUnleashed[] = _("{B_ATK_NAME_WITH_PREFIX} unleashes\nits full-force Z-Move!");
+static const u8 sText_ZMoveResetsStats[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its\ndecreased stats to normal using\lits Z-Power!");
+static const u8 sText_ZMoveAllStatsUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted all\nof its stats using its Z-Power!");
+static const u8 sText_ZMoveBoostCrit[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its\ncritical-hit ratio using its Z-Power!");
+static const u8 sText_ZMoveRestoreHp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nHP using its Z-Power!");
+static const u8 sText_ZMoveStatUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits stats using its Z-Power!");
+static const u8 sText_ZMoveHpSwitchInTrap[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s HP was restored by the Z-Power!");
+static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to\nnormal!");
+static const u8 sText_ItemCannotBeRemoved[] = _("{B_ATK_NAME_WITH_PREFIX}'s item cannot be removed!");
+static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to\n{B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nburn was healed.");
+static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its {B_LAST_ITEM}\nagainst {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched\nout with the {B_LAST_ITEM}!");
+static const u8 sText_AttackerGotOverInfatuation[] =_("{B_ATK_NAME_WITH_PREFIX} got over\nits infatuation!");
+static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is\ntormented no more!");
+static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of\nits heal block!");
+static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its bond with its trainer!\p");
+static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-{B_BUFF1}!\p");
+static const u8 sText_ExtremelyHarshSunlight[] = _("The sunlight turned\nextremely harsh!");
+static const u8 sText_ExtremeSunlightFaded[] = _("The extreme sunlight faded.{PAUSE 64}");
+static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated\nin the harsh sunlight!");
+static const u8 sText_ExtremelyHarshSunlightWasNotLessened[] = _("The extremely harsh sunlight\nwas not lessened at all!");
+static const u8 sText_HeavyRain[] = _("A heavy rain began to fall!");
+static const u8 sText_HeavyRainLifted[] = _("The heavy rain has lifted!{PAUSE 64}");
+static const u8 sText_MoveFizzledOutInTheHeavyRain[] = _("The Fire-type attack fizzled out\nin the heavy rain!");
+static const u8 sText_NoReliefFromHeavyRain[] = _("There is no relief from\nthis heavy rain!");
+static const u8 sText_MysteriousAirCurrent[] = _("A mysterious air current is\nprotecting Flying-type Pokémon!");
+static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds\nhave dissipated!{PAUSE 64}");
+static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious air current\nblows on regardless!");
+static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds\nweakened the attack!");
+static const u8 sText_StuffCheeksCantSelect[] = _("Stuff Cheeks cannot be\nselected without a Berry!\p");
+static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}'s Primal Reversion!\nIt reverted to its primal form!");
+static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX} can't\nuse the move!");
+static const u8 sText_ButHoopaCantUseIt[] = _("But Hoopa can't use it\nthe way it is now!");
+static const u8 sText_BrokeThroughProtection[] = _("It broke through the\n{B_DEF_NAME_WITH_PREFIX}'s protection!");
+static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} allows the\nuse of only {B_CURRENT_MOVE}!\p");
+static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities\nwith its target!");
+static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!");
+static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!");
+static const u8 sText_BattlerTypeChangedTo[] = _("{B_BUFF1}'s type\nchanged to {B_BUFF2}!");
+static const u8 sText_BothCanNoLongerEscape[] = _("Neither Pokémon can run away!");
+static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape\nbecause it used {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became\nweaker to fire!");
+static const u8 sText_PkmnAboutToBeAttackedByItsItem[] = _("{B_DEF_NAME_WITH_PREFIX} is about\nto be attacked by its {B_BUFF1}!");
+static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape\nbecause of {B_CURRENT_MOVE}!");
+static const u8 sText_NeutralizingGasEnters[] = _("Neutralizing Gas filled the area!");
+static const u8 sText_NeutralizingGasOver[] = _("The effects of Neutralizing\nGas wore off!");
+static const u8 sText_PkmnTookTargetHigh[] = _("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX}\ninto the air!");
+static const u8 sText_TargetTooHeavy[] = _("But the target\nwas too heavy!");
+static const u8 sText_MeteorBeamCharging[] = _("{B_ATK_NAME_WITH_PREFIX} is overflowing\nwith space energy!");
+static const u8 sText_HeatingUpBeak[] = _("{B_ATK_NAME_WITH_PREFIX} started\nheating up its beak!");
+static const u8 sText_CourtChange[] = _("{B_ATK_NAME_WITH_PREFIX} swapped the battle\neffects affecting each side!");
+
+
+const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
{
+ [STRINGID_ZPOWERSURROUNDS - BATTLESTRINGS_TABLE_START] = sText_ZPowerSurrounds,
+ [STRINGID_ZMOVEUNLEASHED - BATTLESTRINGS_TABLE_START] = sText_ZPowerUnleashed,
+ [STRINGID_ZMOVERESETSSTATS - BATTLESTRINGS_TABLE_START] = sText_ZMoveResetsStats,
+ [STRINGID_ZMOVEALLSTATSUP - BATTLESTRINGS_TABLE_START] = sText_ZMoveAllStatsUp,
+ [STRINGID_ZMOVEZBOOSTCRIT - BATTLESTRINGS_TABLE_START] = sText_ZMoveBoostCrit,
+ [STRINGID_ZMOVERESTOREHP - BATTLESTRINGS_TABLE_START] = sText_ZMoveRestoreHp,
+ [STRINGID_ZMOVESTATUP - BATTLESTRINGS_TABLE_START] = sText_ZMoveStatUp,
+ [STRINGID_ZMOVEHPTRAP - BATTLESTRINGS_TABLE_START] = sText_ZMoveHpSwitchInTrap,
+ [STRINGID_PLAYERLOSTTOENEMYTRAINER - BATTLESTRINGS_TABLE_START] = sText_PlayerLostToEnemyTrainer,
+ [STRINGID_PLAYERPAIDPRIZEMONEY - BATTLESTRINGS_TABLE_START] = sText_PlayerPaidPrizeMoney,
+ [STRINGID_COURTCHANGE - BATTLESTRINGS_TABLE_START] = sText_CourtChange,
+ [STRINGID_HEATUPBEAK - BATTLESTRINGS_TABLE_START] = sText_HeatingUpBeak,
+ [STRINGID_METEORBEAMCHARGING - BATTLESTRINGS_TABLE_START] = sText_MeteorBeamCharging,
+ [STRINGID_PKMNINSNAPTRAP - BATTLESTRINGS_TABLE_START] = sText_PkmnInSnapTrap,
+ [STRINGID_NEUTRALIZINGGASOVER - BATTLESTRINGS_TABLE_START] = sText_NeutralizingGasOver,
+ [STRINGID_NEUTRALIZINGGASENTERS - BATTLESTRINGS_TABLE_START] = sText_NeutralizingGasEnters,
+ [STRINGID_BATTLERTYPECHANGEDTO - BATTLESTRINGS_TABLE_START] = sText_BattlerTypeChangedTo,
+ [STRINGID_PASTELVEILENTERS - BATTLESTRINGS_TABLE_START] = sText_PastelVeilEnters,
+ [STRINGID_PASTELVEILPROTECTED - BATTLESTRINGS_TABLE_START] = sText_PastelVeilProtected,
+ [STRINGID_SWAPPEDABILITIES - BATTLESTRINGS_TABLE_START] = sText_SwappedAbilities,
+ [STRINGID_ABILITYALLOWSONLYMOVE - BATTLESTRINGS_TABLE_START] = sText_AbilityAllowsOnlyMove,
+ [STRINGID_BROKETHROUGHPROTECTION - BATTLESTRINGS_TABLE_START] = sText_BrokeThroughProtection,
+ [STRINGID_BUTPOKEMONCANTUSETHEMOVE - BATTLESTRINGS_TABLE_START] = sText_ButPokemonCantUseTheMove,
+ [STRINGID_BUTHOOPACANTUSEIT - BATTLESTRINGS_TABLE_START] = sText_ButHoopaCantUseIt,
+ [STRINGID_PKMNREVERTEDTOPRIMAL - BATTLESTRINGS_TABLE_START] = sText_PkmnRevertedToPrimal,
+ [STRINGID_STUFFCHEEKSCANTSELECT - BATTLESTRINGS_TABLE_START] = sText_StuffCheeksCantSelect,
+ [STRINGID_ATTACKWEAKENEDBSTRONGWINDS - BATTLESTRINGS_TABLE_START] = sText_AttackWeakenedByStrongWinds,
+ [STRINGID_MYSTERIOUSAIRCURRENTBLOWSON - BATTLESTRINGS_TABLE_START] = sText_MysteriousAirCurrentBlowsOn,
+ [STRINGID_STRONGWINDSDISSIPATED - BATTLESTRINGS_TABLE_START] = sText_StrongWindsDissipated,
+ [STRINGID_MYSTERIOUSAIRCURRENT - BATTLESTRINGS_TABLE_START] = sText_MysteriousAirCurrent,
+ [STRINGID_NORELIEFROMHEAVYRAIN - BATTLESTRINGS_TABLE_START] = sText_NoReliefFromHeavyRain,
+ [STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN - BATTLESTRINGS_TABLE_START] = sText_MoveFizzledOutInTheHeavyRain,
+ [STRINGID_HEAVYRAINLIFTED - BATTLESTRINGS_TABLE_START] = sText_HeavyRainLifted,
+ [STRINGID_HEAVYRAIN - BATTLESTRINGS_TABLE_START] = sText_HeavyRain,
+ [STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED - BATTLESTRINGS_TABLE_START] = sText_ExtremelyHarshSunlightWasNotLessened,
+ [STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT - BATTLESTRINGS_TABLE_START] = sText_MoveEvaporatedInTheHarshSunlight,
+ [STRINGID_EXTREMESUNLIGHTFADED - BATTLESTRINGS_TABLE_START] = sText_ExtremeSunlightFaded,
+ [STRINGID_EXTREMELYHARSHSUNLIGHT - BATTLESTRINGS_TABLE_START] = sText_ExtremelyHarshSunlight,
+ [STRINGID_ATTACKERBECAMEASHSPECIES - BATTLESTRINGS_TABLE_START] = sText_AttackerBecameAshSpecies,
+ [STRINGID_ATTACKERBECAMEFULLYCHARGED - BATTLESTRINGS_TABLE_START] = sText_AttackerBecameFullyCharged,
+ [STRINGID_HEALBLOCKEDNOMORE - BATTLESTRINGS_TABLE_START] = sText_HealBlockedNoMore,
+ [STRINGID_TORMENTEDNOMORE - BATTLESTRINGS_TABLE_START] = sText_TormentedNoMore,
+ [STRINGID_ATKGOTOVERINFATUATION - BATTLESTRINGS_TABLE_START] = sText_AttackerGotOverInfatuation,
+ [STRINGID_EJECTBUTTONACTIVATE - BATTLESTRINGS_TABLE_START] = sText_EjectButtonActivate,
+ [STRINGID_REDCARDACTIVATE - BATTLESTRINGS_TABLE_START] = sText_RedCardActivate,
+ [STRINGID_PKMNBURNHEALED - BATTLESTRINGS_TABLE_START] = sText_PkmnBurnHealed,
+ [STRINGID_STICKYBARBTRANSFER - BATTLESTRINGS_TABLE_START] = sText_StickyBarbTransfer,
+ [STRINGID_ITEMCANNOTBEREMOVED - BATTLESTRINGS_TABLE_START] = sText_ItemCannotBeRemoved,
+ [STRINGID_PKMNGOTOVERITSINFATUATION - BATTLESTRINGS_TABLE_START] = sText_PkmnGotOverItsInfatuation,
+ [STRINGID_PKMNSHOOKOFFTHETAUNT - BATTLESTRINGS_TABLE_START] = sText_PkmnShookOffTheTaunt,
+ [STRINGID_MICLEBERRYACTIVATES - BATTLESTRINGS_TABLE_START] = sText_MicleBerryActivates,
+ [STRINGID_CANACTFASTERTHANKSTO - BATTLESTRINGS_TABLE_START] = sText_CanActFaster,
+ [STRINGID_CURIOUSMEDICINEENTERS - BATTLESTRINGS_TABLE_START] = sText_CuriousMedicineEnters,
+ [STRINGID_ASONEENTERS - BATTLESTRINGS_TABLE_START] = sText_AsOneEnters,
+ [STRINGID_ABILITYRAISEDSTATDRASTICALLY - BATTLESTRINGS_TABLE_START] = sText_AbilityRaisedStatDrastically,
+ [STRINGID_PKMNSWILLPERISHIN3TURNS - BATTLESTRINGS_TABLE_START] = sText_PkmnsWillPerishIn3Turns,
+ [STRINGID_ASANDSTORMKICKEDUP - BATTLESTRINGS_TABLE_START] = sText_ASandstormKickedUp,
+ [STRINGID_BATTLERABILITYRAISEDSTAT - BATTLESTRINGS_TABLE_START] = sText_BattlerAbilityRaisedStat,
+ [STRINGID_FETCHEDPOKEBALL - BATTLESTRINGS_TABLE_START] = sText_FetchedPokeBall,
+ [STRINGID_STATWASNOTLOWERED - BATTLESTRINGS_TABLE_START] = sText_StatWasNotLowered,
+ [STRINGID_CLOAKEDINAFREEZINGLIGHT - BATTLESTRINGS_TABLE_START] = sText_CloakedInAFreezingLight,
+ [STRINGID_DESTINYKNOTACTIVATES - BATTLESTRINGS_TABLE_START] = sText_DestinyKnotActivates,
+ [STRINGID_NOONEWILLBEABLETORUNAWAY - BATTLESTRINGS_TABLE_START] = sText_NoOneWillBeAbleToRun,
+ [STRINGID_PKNMABSORBINGPOWER - BATTLESTRINGS_TABLE_START] = sText_PkmnAbsorbingPower,
+ [STRINGID_RECEIVERABILITYTAKEOVER - BATTLESTRINGS_TABLE_START] = sText_ReceiverAbilityTakeOver,
+ [STRINGID_SCRIPTINGABILITYSTATRAISE - BATTLESTRINGS_TABLE_START] = sText_ScriptingAbilityRaisedStat,
+ [STRINGID_HEALERCURE - BATTLESTRINGS_TABLE_START] = sText_HealerCure,
+ [STRINGID_ATTACKERLOSTFIRETYPE - BATTLESTRINGS_TABLE_START] = sText_AttackerLostFireType,
+ [STRINGID_ATTACKERCUREDTARGETSTATUS - BATTLESTRINGS_TABLE_START] = sText_AttackerCuredTargetStatus,
+ [STRINGID_ILLUSIONWOREOFF - BATTLESTRINGS_TABLE_START] = sText_IllusionWoreOff,
+ [STRINGID_BUGBITE - BATTLESTRINGS_TABLE_START] = sText_BugBite,
+ [STRINGID_INCINERATEBURN - BATTLESTRINGS_TABLE_START] = sText_IncinerateBurn,
+ [STRINGID_AIRBALLOONPOP - BATTLESTRINGS_TABLE_START] = sText_AirBalloonPop,
+ [STRINGID_AIRBALLOONFLOAT - BATTLESTRINGS_TABLE_START] = sText_AirBalloonFloat,
+ [STRINGID_TARGETATEITEM - BATTLESTRINGS_TABLE_START] = sText_TargetAteItem,
+ [STRINGID_BERRYDMGREDUCES - BATTLESTRINGS_TABLE_START] = sText_BerryDmgReducing,
+ [STRINGID_GEMACTIVATES - BATTLESTRINGS_TABLE_START] = sText_GemActivates,
+ [STRINGID_LASERFOCUS - BATTLESTRINGS_TABLE_START] = sText_LaserFocusMessage,
+ [STRINGID_THROATCHOPENDS - BATTLESTRINGS_TABLE_START] = sText_ThroatChopEnds,
+ [STRINGID_PKMNCANTUSEMOVETHROATCHOP - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseMoveThroatChop,
+ [STRINGID_USEDINSTRUCTEDMOVE - BATTLESTRINGS_TABLE_START] = sText_UsedInstructedMove,
+ [STRINGID_CELEBRATEMESSAGE - BATTLESTRINGS_TABLE_START] = sText_CelebrateMessage,
+ [STRINGID_AROMAVEILPROTECTED - BATTLESTRINGS_TABLE_START] = sText_AromaVeilProtected,
+ [STRINGID_SWEETVEILPROTECTED - BATTLESTRINGS_TABLE_START] = sText_SweetVeilProtected,
+ [STRINGID_FLOWERVEILPROTECTED - BATTLESTRINGS_TABLE_START] = sText_FlowerVeilProtected,
+ [STRINGID_SAFETYGOGGLESPROTECTED - BATTLESTRINGS_TABLE_START] = sText_SafetyGogglesProtected,
+ [STRINGID_SPECTRALTHIEFSTEAL - BATTLESTRINGS_TABLE_START] = sText_SpectralThiefSteal,
+ [STRINGID_BELCHCANTSELECT - BATTLESTRINGS_TABLE_START] = sText_BelchCantUse,
[STRINGID_TRAINER1LOSETEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer1LoseText,
[STRINGID_PKMNGAINEDEXP - BATTLESTRINGS_TABLE_START] = sText_PkmnGainedEXP,
[STRINGID_PKMNGREWTOLV - BATTLESTRINGS_TABLE_START] = sText_PkmnGrewToLv,
@@ -713,7 +1042,7 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_S
[STRINGID_PKMNPREVENTSSTATLOSSWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventsStatLossWith,
[STRINGID_PKMNHURTSWITH - BATTLESTRINGS_TABLE_START] = sText_PkmnHurtsWith,
[STRINGID_PKMNTRACED - BATTLESTRINGS_TABLE_START] = sText_PkmnTraced,
- [STRINGID_STATSHARPLY - BATTLESTRINGS_TABLE_START] = sText_StatSharply,
+ [STRINGID_STATSHARPLY - BATTLESTRINGS_TABLE_START] = gText_StatSharply,
[STRINGID_STATROSE - BATTLESTRINGS_TABLE_START] = gText_StatRose,
[STRINGID_STATHARSHLY - BATTLESTRINGS_TABLE_START] = sText_StatHarshly,
[STRINGID_STATFELL - BATTLESTRINGS_TABLE_START] = sText_StatFell,
@@ -885,6 +1214,235 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_S
[STRINGID_PKMNBOXLANETTESPCFULL - BATTLESTRINGS_TABLE_START] = gText_PkmnTransferredLanettesPCBoxFull,
[STRINGID_TRAINER1WINTEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer1WinText,
[STRINGID_TRAINER2WINTEXT - BATTLESTRINGS_TABLE_START] = sText_Trainer2WinText,
+ [STRINGID_ENDUREDSTURDY - BATTLESTRINGS_TABLE_START] = sText_EnduredViaSturdy,
+ [STRINGID_POWERHERB - BATTLESTRINGS_TABLE_START] = sText_PowerHerbActivation,
+ [STRINGID_HURTBYITEM - BATTLESTRINGS_TABLE_START] = sText_HurtByItem,
+ [STRINGID_PSNBYITEM - BATTLESTRINGS_TABLE_START] = sText_BadlyPoisonedByItem,
+ [STRINGID_BRNBYITEM - BATTLESTRINGS_TABLE_START] = sText_BurnedByItem,
+ [STRINGID_DEFABILITYIN - BATTLESTRINGS_TABLE_START] = sText_TargetAbilityActivates,
+ [STRINGID_GRAVITYINTENSIFIED - BATTLESTRINGS_TABLE_START] = sText_GravityIntensified,
+ [STRINGID_TARGETIDENTIFIED - BATTLESTRINGS_TABLE_START] = sText_TargetIdentified,
+ [STRINGID_TARGETWOKEUP - BATTLESTRINGS_TABLE_START] = sText_TargetWokeUp,
+ [STRINGID_PKMNSTOLEANDATEITEM - BATTLESTRINGS_TABLE_START] = sText_PkmnStoleAndAteItem,
+ [STRINGID_TAILWINDBLEW - BATTLESTRINGS_TABLE_START] = sText_TailWindBlew,
+ [STRINGID_PKMNWENTBACK - BATTLESTRINGS_TABLE_START] = sText_PkmnWentBack,
+ [STRINGID_PKMNCANTUSEITEMSANYMORE - BATTLESTRINGS_TABLE_START] = sText_PkmnCantUseItemsAnymore,
+ [STRINGID_PKMNFLUNG - BATTLESTRINGS_TABLE_START] = sText_PkmnFlung,
+ [STRINGID_PKMNPREVENTEDFROMHEALING - BATTLESTRINGS_TABLE_START] = sText_PkmnPreventedFromHealing,
+ [STRINGID_PKMNSWITCHEDATKANDDEF - BATTLESTRINGS_TABLE_START] = sText_PkmnSwitchedAtkAndDef,
+ [STRINGID_PKMNSABILITYSUPPRESSED - BATTLESTRINGS_TABLE_START] = sText_PkmnsAbilitySuppressed,
+ [STRINGID_SHIELDEDFROMCRITICALHITS - BATTLESTRINGS_TABLE_START] = sText_ShieldedFromCriticalHits,
+ [STRINGID_SWITCHEDATKANDSPATK - BATTLESTRINGS_TABLE_START] = sText_SwitchedAtkAndSpAtk,
+ [STRINGID_SWITCHEDDEFANDSPDEF - BATTLESTRINGS_TABLE_START] = sText_SwitchedDefAndSpDef,
+ [STRINGID_PKMNACQUIREDABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnAcquiredAbility,
+ [STRINGID_POISONSPIKESSCATTERED - BATTLESTRINGS_TABLE_START] = sText_PoisonSpikesScattered,
+ [STRINGID_PKMNSWITCHEDSTATCHANGES - BATTLESTRINGS_TABLE_START] = sText_PkmnSwitchedStatChanges,
+ [STRINGID_PKMNSURROUNDEDWITHVEILOFWATER - BATTLESTRINGS_TABLE_START] = sText_PkmnSurroundedWithVeilOfWater,
+ [STRINGID_PKMNLEVITATEDONELECTROMAGNETISM - BATTLESTRINGS_TABLE_START] = sText_PkmnLevitatedOnElectromagnetism,
+ [STRINGID_PKMNTWISTEDDIMENSIONS - BATTLESTRINGS_TABLE_START] = sText_PkmnTwistedDimensions,
+ [STRINGID_POINTEDSTONESFLOAT - BATTLESTRINGS_TABLE_START] = sText_PointedStonesFloat,
+ [STRINGID_CLOAKEDINMYSTICALMOONLIGHT - BATTLESTRINGS_TABLE_START] = sText_CloakedInMysticalMoonlight,
+ [STRINGID_TRAPPEDBYSWIRLINGMAGMA - BATTLESTRINGS_TABLE_START] = sText_TrappedBySwirlingMagma,
+ [STRINGID_VANISHEDINSTANTLY - BATTLESTRINGS_TABLE_START] = sText_VanishedInstantly,
+ [STRINGID_PROTECTEDTEAM - BATTLESTRINGS_TABLE_START] = sText_ProtectedTeam,
+ [STRINGID_SHAREDITSGUARD - BATTLESTRINGS_TABLE_START] = sText_SharedItsGuard,
+ [STRINGID_SHAREDITSPOWER - BATTLESTRINGS_TABLE_START] = sText_SharedItsPower,
+ [STRINGID_SWAPSDEFANDSPDEFOFALLPOKEMON - BATTLESTRINGS_TABLE_START] = sText_SwapsDefAndSpDefOfAllPkmn,
+ [STRINGID_BECAMENIMBLE - BATTLESTRINGS_TABLE_START] = sText_BecameNimble,
+ [STRINGID_HURLEDINTOTHEAIR - BATTLESTRINGS_TABLE_START] = sText_HurledIntoTheAir,
+ [STRINGID_HELDITEMSLOSEEFFECTS - BATTLESTRINGS_TABLE_START] = sText_HeldItemsLoseEffects,
+ [STRINGID_FELLSTRAIGHTDOWN - BATTLESTRINGS_TABLE_START] = sText_FellStraightDown,
+ [STRINGID_TARGETCHANGEDTYPE - BATTLESTRINGS_TABLE_START] = sText_TargetChangedType,
+ [STRINGID_PKMNACQUIREDSIMPLE - BATTLESTRINGS_TABLE_START] = sText_PkmnAcquiredSimple,
+ [STRINGID_EMPTYSTRING5 - BATTLESTRINGS_TABLE_START] = sText_EmptyString4,
+ [STRINGID_KINDOFFER - BATTLESTRINGS_TABLE_START] = sText_KindOffer,
+ [STRINGID_RESETSTARGETSSTATLEVELS - BATTLESTRINGS_TABLE_START] = sText_ResetsTargetsStatLevels,
+ [STRINGID_EMPTYSTRING6 - BATTLESTRINGS_TABLE_START] = sText_EmptyString4,
+ [STRINGID_ALLYSWITCHPOSITION - BATTLESTRINGS_TABLE_START] = sText_AllySwitchPosition,
+ [STRINGID_RESTORETARGETSHEALTH - BATTLESTRINGS_TABLE_START] = sText_RestoreTargetsHealth,
+ [STRINGID_TOOKPJMNINTOTHESKY - BATTLESTRINGS_TABLE_START] = sText_TookPkmnIntoTheSky,
+ [STRINGID_FREEDFROMSKYDROP - BATTLESTRINGS_TABLE_START] = sText_FreedFromSkyDrop,
+ [STRINGID_POSTPONETARGETMOVE - BATTLESTRINGS_TABLE_START] = sText_PostponeTargetMove,
+ [STRINGID_REFLECTTARGETSTYPE - BATTLESTRINGS_TABLE_START] = sText_ReflectTargetsType,
+ [STRINGID_TRANSFERHELDITEM - BATTLESTRINGS_TABLE_START] = sText_TransferHeldItem,
+ [STRINGID_EMBARGOENDS - BATTLESTRINGS_TABLE_START] = sText_EmbargoEnds,
+ [STRINGID_ELECTROMAGNETISM - BATTLESTRINGS_TABLE_START] = sText_Electromagnetism,
+ [STRINGID_BUFFERENDS - BATTLESTRINGS_TABLE_START] = sText_BufferEnds,
+ [STRINGID_TELEKINESISENDS - BATTLESTRINGS_TABLE_START] = sText_TelekinesisEnds,
+ [STRINGID_TAILWINDENDS - BATTLESTRINGS_TABLE_START] = sText_TailwindEnds,
+ [STRINGID_LUCKYCHANTENDS - BATTLESTRINGS_TABLE_START] = sText_LuckyChantEnds,
+ [STRINGID_TRICKROOMENDS - BATTLESTRINGS_TABLE_START] = sText_TrickRoomEnds,
+ [STRINGID_WONDERROOMENDS - BATTLESTRINGS_TABLE_START] = sText_WonderRoomEnds,
+ [STRINGID_MAGICROOMENDS - BATTLESTRINGS_TABLE_START] = sText_MagicRoomEnds,
+ [STRINGID_MUDSPORTENDS - BATTLESTRINGS_TABLE_START] = sText_MudSportEnds,
+ [STRINGID_WATERSPORTENDS - BATTLESTRINGS_TABLE_START] = sText_WaterSportEnds,
+ [STRINGID_GRAVITYENDS - BATTLESTRINGS_TABLE_START] = sText_GravityEnds,
+ [STRINGID_AQUARINGHEAL - BATTLESTRINGS_TABLE_START] = sText_AquaRingHeal,
+ [STRINGID_AURORAVEILENDS - BATTLESTRINGS_TABLE_START] = sText_AuroraVeilEnds,
+ [STRINGID_ELECTRICTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainEnds,
+ [STRINGID_MISTYTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_MistyTerrainEnds,
+ [STRINGID_PSYCHICTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_PsychicTerrainEnds,
+ [STRINGID_GRASSYTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_GrassyTerrainEnds,
+ [STRINGID_TARGETABILITYSTATRAISE - BATTLESTRINGS_TABLE_START] = sText_TargetAbilityRaisedStat,
+ [STRINGID_TARGETSSTATWASMAXEDOUT - BATTLESTRINGS_TABLE_START] = sText_TargetsStatWasMaxedOut,
+ [STRINGID_ATTACKERABILITYSTATRAISE - BATTLESTRINGS_TABLE_START] = sText_AttackerAbilityRaisedStat,
+ [STRINGID_POISONHEALHPUP - BATTLESTRINGS_TABLE_START] = sText_PoisonHealHpUp,
+ [STRINGID_BADDREAMSDMG - BATTLESTRINGS_TABLE_START] = sText_BadDreamsDmg,
+ [STRINGID_MOLDBREAKERENTERS - BATTLESTRINGS_TABLE_START] = sText_MoldBreakerEnters,
+ [STRINGID_TERAVOLTENTERS - BATTLESTRINGS_TABLE_START] = sText_TeravoltEnters,
+ [STRINGID_TURBOBLAZEENTERS - BATTLESTRINGS_TABLE_START] = sText_TurboblazeEnters,
+ [STRINGID_SLOWSTARTENTERS - BATTLESTRINGS_TABLE_START] = sText_SlowStartEnters,
+ [STRINGID_SLOWSTARTEND - BATTLESTRINGS_TABLE_START] = sText_SlowStartEnd,
+ [STRINGID_SOLARPOWERHPDROP - BATTLESTRINGS_TABLE_START] = sText_SolarPowerHpDrop,
+ [STRINGID_AFTERMATHDMG - BATTLESTRINGS_TABLE_START] = sText_AftermathDmg,
+ [STRINGID_ANTICIPATIONACTIVATES - BATTLESTRINGS_TABLE_START] = sText_AnticipationActivates,
+ [STRINGID_FOREWARNACTIVATES - BATTLESTRINGS_TABLE_START] = sText_ForewarnActivates,
+ [STRINGID_ICEBODYHPGAIN - BATTLESTRINGS_TABLE_START] = sText_IceBodyHpGain,
+ [STRINGID_SNOWWARNINGHAIL - BATTLESTRINGS_TABLE_START] = sText_SnowWarningHail,
+ [STRINGID_FRISKACTIVATES - BATTLESTRINGS_TABLE_START] = sText_FriskActivates,
+ [STRINGID_UNNERVEENTERS - BATTLESTRINGS_TABLE_START] = sText_UnnerveEnters,
+ [STRINGID_HARVESTBERRY - BATTLESTRINGS_TABLE_START] = sText_HarvestBerry,
+ [STRINGID_LASTABILITYRAISEDSTAT - BATTLESTRINGS_TABLE_START] = sText_LastAbilityRaisedBuff1,
+ [STRINGID_MAGICBOUNCEACTIVATES - BATTLESTRINGS_TABLE_START] = sText_MagicBounceActivates,
+ [STRINGID_PROTEANTYPECHANGE - BATTLESTRINGS_TABLE_START] = sText_ProteanTypeChange,
+ [STRINGID_SYMBIOSISITEMPASS - BATTLESTRINGS_TABLE_START] = sText_SymbiosisItemPass,
+ [STRINGID_STEALTHROCKDMG - BATTLESTRINGS_TABLE_START] = sText_StealthRockDmg,
+ [STRINGID_TOXICSPIKESABSORBED - BATTLESTRINGS_TABLE_START] = sText_ToxicSpikesAbsorbed,
+ [STRINGID_TOXICSPIKESPOISONED - BATTLESTRINGS_TABLE_START] = sText_ToxicSpikesPoisoned,
+ [STRINGID_STICKYWEBSWITCHIN - BATTLESTRINGS_TABLE_START] = sText_StickyWebSwitchIn,
+ [STRINGID_HEALINGWISHCAMETRUE - BATTLESTRINGS_TABLE_START] = sText_HealingWishCameTrue,
+ [STRINGID_HEALINGWISHHEALED - BATTLESTRINGS_TABLE_START] = sText_HealingWishHealed,
+ [STRINGID_LUNARDANCECAMETRUE - BATTLESTRINGS_TABLE_START] = sText_LunarDanceCameTrue,
+ [STRINGID_CUSEDBODYDISABLED - BATTLESTRINGS_TABLE_START] = sText_CursedBodyDisabled,
+ [STRINGID_ATTACKERACQUIREDABILITY - BATTLESTRINGS_TABLE_START] = sText_AttackerAquiredAbility,
+ [STRINGID_TARGETABILITYSTATLOWER - BATTLESTRINGS_TABLE_START] = sText_TargetAbilityLoweredStat,
+ [STRINGID_TARGETSTATWONTGOHIGHER - BATTLESTRINGS_TABLE_START] = sText_TargetStatWontGoHigher,
+ [STRINGID_PKMNMOVEBOUNCEDABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveBouncedViaAbility,
+ [STRINGID_IMPOSTERTRANSFORM - BATTLESTRINGS_TABLE_START] = sText_ImposterTransform,
+ [STRINGID_ASSAULTVESTDOESNTALLOW - BATTLESTRINGS_TABLE_START] = sText_AssaultVestDoesntAllow,
+ [STRINGID_GRAVITYPREVENTSUSAGE - BATTLESTRINGS_TABLE_START] = sText_GravityPreventsUsage,
+ [STRINGID_HEALBLOCKPREVENTSUSAGE - BATTLESTRINGS_TABLE_START] = sText_HealBlockPreventsUsage,
+ [STRINGID_NOTDONEYET - BATTLESTRINGS_TABLE_START] = sText_NotDoneYet,
+ [STRINGID_STICKYWEBUSED - BATTLESTRINGS_TABLE_START] = sText_StickyWebUsed,
+ [STRINGID_QUASHSUCCESS - BATTLESTRINGS_TABLE_START] = sText_QuashSuccess,
+ [STRINGID_PKMNBLEWAWAYTOXICSPIKES - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayToxicSpikes,
+ [STRINGID_PKMNBLEWAWAYSTICKYWEB - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayStickyWeb,
+ [STRINGID_PKMNBLEWAWAYSTEALTHROCK - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayStealthRock,
+ [STRINGID_IONDELUGEON - BATTLESTRINGS_TABLE_START] = sText_IonDelugeOn,
+ [STRINGID_TOPSYTURVYSWITCHEDSTATS - BATTLESTRINGS_TABLE_START] = sText_TopsyTurvySwitchedStats,
+ [STRINGID_TERRAINBECOMESMISTY - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesMisty,
+ [STRINGID_TERRAINBECOMESGRASSY - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesGrassy,
+ [STRINGID_TERRAINBECOMESELECTRIC - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesElectric,
+ [STRINGID_TERRAINBECOMESPSYCHIC - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesPsychic,
+ [STRINGID_TARGETELECTRIFIED - BATTLESTRINGS_TABLE_START] = sText_TargetElectrified,
+ [STRINGID_MEGAEVOREACTING - BATTLESTRINGS_TABLE_START] = sText_MegaEvoReacting,
+ [STRINGID_FERVENTWISHREACHED - BATTLESTRINGS_TABLE_START] = sText_FerventWishReached,
+ [STRINGID_MEGAEVOEVOLVED - BATTLESTRINGS_TABLE_START] = sText_MegaEvoEvolved,
+ [STRINGID_DRASTICALLY - BATTLESTRINGS_TABLE_START] = sText_drastically,
+ [STRINGID_SEVERELY - BATTLESTRINGS_TABLE_START] = sText_severely,
+ [STRINGID_INFESTATION - BATTLESTRINGS_TABLE_START] = sText_Infestation,
+ [STRINGID_NOEFFECTONTARGET - BATTLESTRINGS_TABLE_START] = sText_NoEffectOnTarget,
+ [STRINGID_BURSTINGFLAMESHIT - BATTLESTRINGS_TABLE_START] = sText_BurstingFlames,
+ [STRINGID_BESTOWITEMGIVING - BATTLESTRINGS_TABLE_START] = sText_BestowItemGiving,
+ [STRINGID_THIRDTYPEADDED - BATTLESTRINGS_TABLE_START] = sText_ThirdTypeAdded,
+ [STRINGID_FELLFORFEINT - BATTLESTRINGS_TABLE_START] = sText_FellForFeint,
+ [STRINGID_POKEMONCANNOTUSEMOVE - BATTLESTRINGS_TABLE_START] = sText_PokemonCannotUseMove,
+ [STRINGID_COVEREDINPOWDER - BATTLESTRINGS_TABLE_START] = sText_CoveredInPowder,
+ [STRINGID_POWDEREXPLODES - BATTLESTRINGS_TABLE_START] = sText_PowderExplodes,
+ [STRINGID_GRAVITYGROUNDING - BATTLESTRINGS_TABLE_START] = sText_GravityGrounding,
+ [STRINGID_MISTYTERRAINPREVENTS - BATTLESTRINGS_TABLE_START] = sText_MistyTerrainPreventsStatus,
+ [STRINGID_GRASSYTERRAINHEALS - BATTLESTRINGS_TABLE_START] = sText_GrassyTerrainHeals,
+ [STRINGID_ELECTRICTERRAINPREVENTS - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainPreventsSleep,
+ [STRINGID_PSYCHICTERRAINPREVENTS - BATTLESTRINGS_TABLE_START] = sText_PsychicTerrainPreventsPriority,
+ [STRINGID_AURAFLAREDTOLIFE - BATTLESTRINGS_TABLE_START] = sText_AuraFlaredToLife,
+ [STRINGID_AIRLOCKACTIVATES - BATTLESTRINGS_TABLE_START] = sText_AirLockActivates,
+ [STRINGID_PRESSUREENTERS - BATTLESTRINGS_TABLE_START] = sText_PressureActivates,
+ [STRINGID_DARKAURAENTERS - BATTLESTRINGS_TABLE_START] = sText_DarkAuraActivates,
+ [STRINGID_FAIRYAURAENTERS - BATTLESTRINGS_TABLE_START] = sText_FairyAuraActivates,
+ [STRINGID_AURABREAKENTERS - BATTLESTRINGS_TABLE_START] = sText_AuraBreakActivates,
+ [STRINGID_COMATOSEENTERS - BATTLESTRINGS_TABLE_START] = sText_ComatoseActivates,
+ [STRINGID_SCREENCLEANERENTERS - BATTLESTRINGS_TABLE_START] = sText_ScreenCleanerActivates,
+ [STRINGID_BOTHCANNOLONGERESCAPE - BATTLESTRINGS_TABLE_START] = sText_BothCanNoLongerEscape,
+ [STRINGID_CANTESCAPEDUETOUSEDMOVE - BATTLESTRINGS_TABLE_START] = sText_CantEscapeDueToUsedMove,
+ [STRINGID_PKMNBECAMEWEAKERTOFIRE - BATTLESTRINGS_TABLE_START] = sText_PkmnBecameWeakerToFire,
+ [STRINGID_ABOUTTOUSEPOLTERGEIST - BATTLESTRINGS_TABLE_START] = sText_PkmnAboutToBeAttackedByItsItem,
+ [STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE - BATTLESTRINGS_TABLE_START] = sText_CantEscapeBecauseOfCurrentMove,
+ [STRINGID_PKMNTOOKTARGETHIGH - BATTLESTRINGS_TABLE_START] = sText_PkmnTookTargetHigh,
+ [STRINGID_TARGETTOOHEAVY - BATTLESTRINGS_TABLE_START] = sText_TargetTooHeavy,
+};
+
+const u16 gZEffectStringIds[] =
+{
+ [B_MSG_Z_RESET_STATS] = STRINGID_ZMOVERESETSSTATS,
+ [B_MSG_Z_ALL_STATS_UP]= STRINGID_ZMOVEALLSTATSUP,
+ [B_MSG_Z_BOOST_CRITS] = STRINGID_ZMOVEZBOOSTCRIT,
+ [B_MSG_Z_FOLLOW_ME] = STRINGID_PKMNCENTERATTENTION,
+ [B_MSG_Z_RECOVER_HP] = STRINGID_ZMOVERESTOREHP,
+ [B_MSG_Z_STAT_UP] = STRINGID_ZMOVESTATUP,
+ [B_MSG_Z_HP_TRAP] = STRINGID_ZMOVEHPTRAP,
+};
+
+const u16 gMentalHerbCureStringIds[] =
+{
+ [B_MSG_MENTALHERBCURE_INFATUATION] = STRINGID_ATKGOTOVERINFATUATION,
+ [B_MSG_MENTALHERBCURE_TAUNT] = STRINGID_BUFFERENDS,
+ [B_MSG_MENTALHERBCURE_ENCORE] = STRINGID_PKMNENCOREENDED,
+ [B_MSG_MENTALHERBCURE_TORMENT] = STRINGID_TORMENTEDNOMORE,
+ [B_MSG_MENTALHERBCURE_HEALBLOCK] = STRINGID_HEALBLOCKEDNOMORE,
+ [B_MSG_MENTALHERBCURE_DISABLE] = STRINGID_PKMNMOVEDISABLEDNOMORE,
+};
+
+const u16 gTerrainStringIds[] =
+{
+ STRINGID_TERRAINBECOMESMISTY, STRINGID_TERRAINBECOMESGRASSY, STRINGID_TERRAINBECOMESELECTRIC, STRINGID_TERRAINBECOMESPSYCHIC, STRINGID_TERRAINREMOVED,
+};
+
+const u16 gTerrainEndingStringIds[] =
+{
+ STRINGID_MISTYTERRAINENDS, STRINGID_GRASSYTERRAINENDS, STRINGID_ELECTRICTERRAINENDS, STRINGID_PSYCHICTERRAINENDS
+};
+
+const u16 gTerrainPreventsStringIds[] =
+{
+ [B_MSG_TERRAINPREVENTS_MISTY] = STRINGID_MISTYTERRAINPREVENTS,
+ [B_MSG_TERRAINPREVENTS_ELECTRIC] = STRINGID_ELECTRICTERRAINPREVENTS,
+ [B_MSG_TERRAINPREVENTS_PSYCHIC] = STRINGID_PSYCHICTERRAINPREVENTS
+};
+
+const u16 gMagicCoatBounceStringIds[] =
+{
+ STRINGID_PKMNMOVEBOUNCED, STRINGID_PKMNMOVEBOUNCEDABILITY
+};
+
+const u16 gHealingWishStringIds[] =
+{
+ STRINGID_HEALINGWISHCAMETRUE, STRINGID_LUNARDANCECAMETRUE
+};
+
+const u16 gDmgHazardsStringIds[] =
+{
+ STRINGID_PKMNHURTBYSPIKES, STRINGID_STEALTHROCKDMG
+};
+
+const u16 gSwitchInAbilityStringIds[] =
+{
+ [B_MSG_SWITCHIN_MOLDBREAKER] = STRINGID_MOLDBREAKERENTERS,
+ [B_MSG_SWITCHIN_TERAVOLT] = STRINGID_TERAVOLTENTERS,
+ [B_MSG_SWITCHIN_TURBOBLAZE] = STRINGID_TURBOBLAZEENTERS,
+ [B_MSG_SWITCHIN_SLOWSTART] = STRINGID_SLOWSTARTENTERS,
+ [B_MSG_SWITCHIN_UNNERVE] = STRINGID_UNNERVEENTERS,
+ [B_MSG_SWITCHIN_ANTICIPATION] = STRINGID_ANTICIPATIONACTIVATES,
+ [B_MSG_SWITCHIN_FOREWARN] = STRINGID_FOREWARNACTIVATES,
+ [B_MSG_SWITCHIN_PRESSURE] = STRINGID_PRESSUREENTERS,
+ [B_MSG_SWITCHIN_DARKAURA] = STRINGID_DARKAURAENTERS,
+ [B_MSG_SWITCHIN_FAIRYAURA] = STRINGID_FAIRYAURAENTERS,
+ [B_MSG_SWITCHIN_AURABREAK] = STRINGID_AURABREAKENTERS,
+ [B_MSG_SWITCHIN_COMATOSE] = STRINGID_COMATOSEENTERS,
+ [B_MSG_SWITCHIN_SCREENCLEANER] = STRINGID_SCREENCLEANERENTERS,
+ [B_MSG_SWITCHIN_ASONE] = STRINGID_ASONEENTERS,
+ [B_MSG_SWITCHIN_CURIOUS_MEDICINE] = STRINGID_CURIOUSMEDICINEENTERS,
+ [B_MSG_SWITCHIN_PASTEL_VEIL] = STRINGID_PASTELVEILENTERS,
+ [B_MSG_SWITCHIN_NEUTRALIZING_GAS] = STRINGID_NEUTRALIZINGGASENTERS,
};
const u16 gMissStringIds[] =
@@ -945,6 +1503,7 @@ const u16 gProtectLikeUsedStringIds[] =
[B_MSG_PROTECTED_ITSELF] = STRINGID_PKMNPROTECTEDITSELF2,
[B_MSG_BRACED_ITSELF] = STRINGID_PKMNBRACEDITSELF,
[B_MSG_PROTECT_FAILED] = STRINGID_BUTITFAILED,
+ [B_MSG_PROTECTED_TEAM] = STRINGID_PROTECTEDTEAM,
};
const u16 gReflectLightScreenSafeguardStringIds[] =
@@ -1010,7 +1569,7 @@ const u16 gStatUpStringIds[] =
[B_MSG_STAT_WONT_INCREASE] = STRINGID_STATSWONTINCREASE,
[B_MSG_STAT_ROSE_EMPTY] = STRINGID_EMPTYSTRING3,
[B_MSG_STAT_ROSE_ITEM] = STRINGID_USINGITEMSTATOFPKMNROSE,
- [B_MSG_USED_DIRE_HIT] = STRINGID_PKMNUSEDXTOGETPUMPED,
+ [B_MSG_USED_DIRE_HIT] = STRINGID_PKMNUSEDXTOGETPUMPED,
};
const u16 gStatDownStringIds[] =
@@ -1024,25 +1583,33 @@ const u16 gStatDownStringIds[] =
// Index read from sTWOTURN_STRINGID
const u16 gFirstTurnOfTwoStringIds[] =
{
- [B_MSG_TURN1_RAZOR_WIND] = STRINGID_PKMNWHIPPEDWHIRLWIND,
- [B_MSG_TURN1_SOLAR_BEAM] = STRINGID_PKMNTOOKSUNLIGHT,
- [B_MSG_TURN1_SKULL_BASH] = STRINGID_PKMNLOWEREDHEAD,
- [B_MSG_TURN1_SKY_ATTACK] = STRINGID_PKMNISGLOWING,
- [B_MSG_TURN1_FLY] = STRINGID_PKMNFLEWHIGH,
- [B_MSG_TURN1_DIG] = STRINGID_PKMNDUGHOLE,
- [B_MSG_TURN1_DIVE] = STRINGID_PKMNHIDUNDERWATER,
- [B_MSG_TURN1_BOUNCE] = STRINGID_PKMNSPRANGUP,
+ [B_MSG_TURN1_RAZOR_WIND] = STRINGID_PKMNWHIPPEDWHIRLWIND,
+ [B_MSG_TURN1_SOLAR_BEAM] = STRINGID_PKMNTOOKSUNLIGHT,
+ [B_MSG_TURN1_SKULL_BASH] = STRINGID_PKMNLOWEREDHEAD,
+ [B_MSG_TURN1_SKY_ATTACK] = STRINGID_PKMNISGLOWING,
+ [B_MSG_TURN1_FLY] = STRINGID_PKMNFLEWHIGH,
+ [B_MSG_TURN1_DIG] = STRINGID_PKMNDUGHOLE,
+ [B_MSG_TURN1_DIVE] = STRINGID_PKMNHIDUNDERWATER,
+ [B_MSG_TURN1_BOUNCE] = STRINGID_PKMNSPRANGUP,
+ [B_MSG_TURN1_PHANTOM_FORCE] = STRINGID_VANISHEDINSTANTLY,
+ [B_MSG_TURN1_GEOMANCY] = STRINGID_PKNMABSORBINGPOWER,
+ [B_MSG_TURN1_FREEZE_SHOCK] = STRINGID_CLOAKEDINAFREEZINGLIGHT,
+ [B_MSG_TURN1_SKY_DROP] = STRINGID_PKMNTOOKTARGETHIGH,
+ [B_MSG_TURN1_METEOR_BEAM] = STRINGID_METEORBEAMCHARGING,
};
-// Index copied from move's index in gTrappingMoves
+// Index copied from move's index in sTrappingMoves
const u16 gWrappedStringIds[NUM_TRAPPING_MOVES] =
{
- STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND
- STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP
- STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_FIRE_SPIN
- STRINGID_PKMNCLAMPED, // MOVE_CLAMP
- STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_WHIRLPOOL
- STRINGID_PKMNTRAPPEDBYSANDTOMB // MOVE_SAND_TOMB
+ [B_MSG_WRAPPED_BIND] = STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND
+ [B_MSG_WRAPPED_WRAP] = STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP
+ [B_MSG_WRAPPED_FIRE_SPIN] = STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_FIRE_SPIN
+ [B_MSG_WRAPPED_CLAMP] = STRINGID_PKMNCLAMPED, // MOVE_CLAMP
+ [B_MSG_WRAPPED_WHIRLPOOL] = STRINGID_PKMNTRAPPEDINVORTEX, // MOVE_WHIRLPOOL
+ [B_MSG_WRAPPED_SAND_TOMB] = STRINGID_PKMNTRAPPEDBYSANDTOMB, // MOVE_SAND_TOMB
+ [B_MSG_WRAPPED_MAGMA_STORM] = STRINGID_TRAPPEDBYSWIRLINGMAGMA, // MOVE_MAGMA_STORM
+ [B_MSG_WRAPPED_INFESTATION] = STRINGID_INFESTATION, // MOVE_INFESTATION
+ [B_MSG_WRAPPED_SNAP_TRAP] = STRINGID_PKMNINSNAPTRAP, // MOVE_SNAP_TRAP
};
const u16 gMistUsedStringIds[] =
@@ -1253,22 +1820,24 @@ const u16 gCaughtMonStringIds[] =
[B_MSG_LANETTES_BOX_FULL] = STRINGID_PKMNBOXLANETTESPCFULL,
};
-const u16 gTrappingMoves[NUM_TRAPPING_MOVES + 1] =
+const u16 gRoomsStringIds[] =
{
- MOVE_BIND,
- MOVE_WRAP,
- MOVE_FIRE_SPIN,
- MOVE_CLAMP,
- MOVE_WHIRLPOOL,
- MOVE_SAND_TOMB,
- 0xFFFF // Never read
+ STRINGID_PKMNTWISTEDDIMENSIONS, STRINGID_TRICKROOMENDS,
+ STRINGID_SWAPSDEFANDSPDEFOFALLPOKEMON, STRINGID_WONDERROOMENDS,
+ STRINGID_HELDITEMSLOSEEFFECTS, STRINGID_MAGICROOMENDS,
+ STRINGID_EMPTYSTRING3
+};
+
+const u16 gStatusConditionsStringIds[] =
+{
+ STRINGID_PKMNWASPOISONED, STRINGID_PKMNBADLYPOISONED, STRINGID_PKMNWASBURNED, STRINGID_PKMNWASPARALYZED, STRINGID_PKMNFELLASLEEP
};
const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!");
const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p");
const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p");
const u8 gText_EllipsisQuestionMark[] = _("……?\p");
-const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_ACTIVE_NAME_WITH_PREFIX} do?");
+const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_ACTIVE_NAME2} do?");
const u8 gText_WhatWillPkmnDo2[] = _("What will\n{B_PLAYER_NAME} do?");
const u8 gText_WhatWillWallyDo[] = _("What will\nWALLY do?");
const u8 gText_LinkStandby[] = _("{PAUSE 16}Link standby…");
@@ -1286,17 +1855,11 @@ const u8 gText_BattleSwitchWhich3[] = _("{UP_ARROW}");
const u8 gText_BattleSwitchWhich4[] = _("{ESCAPE 4}");
const u8 gText_BattleSwitchWhich5[] = _("-");
-static const u8 sText_HP[] = _("HP");
-static const u8 sText_Attack[] = _("ATTACK");
-static const u8 sText_Defense[] = _("DEFENSE");
-static const u8 sText_SpAtk[] = _("SP. ATK");
-static const u8 sText_SpDef[] = _("SP. DEF");
-
// Unused
-static const u8 * const sStatNamesTable2[] =
+static const u8 *const sStatNamesTable2[] =
{
- sText_HP, sText_SpAtk, sText_Attack,
- sText_SpDef, sText_Defense, sText_Speed
+ gText_HP3, gText_SpAtk, gText_Attack,
+ gText_SpDef, gText_Defense, gText_Speed
};
const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GRAY}SAFARI BALLS");
@@ -1343,7 +1906,8 @@ static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][17] =
[TYPE_PSYCHIC] = _("a PSYCHIC move"),
[TYPE_ICE] = _("an ICE move"),
[TYPE_DRAGON] = _("a DRAGON move"),
- [TYPE_DARK] = _("a DARK move")
+ [TYPE_DARK] = _("a DARK move"),
+ [TYPE_FAIRY] = _("a FAIRY move"),
};
const u8 gText_BattleTourney[] = _("BATTLE TOURNEY");
@@ -1405,7 +1969,7 @@ static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost t
static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!");
static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!");
-const u8 * const gRefereeStringsTable[] =
+const u8 *const gRefereeStringsTable[] =
{
[B_MSG_REF_NOTHING_IS_DECIDED] = sText_RefIfNothingIsDecided,
[B_MSG_REF_THATS_IT] = sText_RefThatsIt,
@@ -1429,6 +1993,10 @@ const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\no
const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}'s battle result was recorded\non the FRONTIER PASS.");
static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!{PAUSE 49}");
static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!{PAUSE 49}");
+static const u8 sText_Your1[] = _("Your");
+static const u8 sText_Opposing1[] = _("The opposing");
+static const u8 sText_Your2[] = _("your");
+static const u8 sText_Opposing2[] = _("the opposing");
// This is four lists of moves which use a different attack string in Japanese
// to the default. See the documentation for ChooseTypeOfMoveUsedString for more detail.
@@ -2059,14 +2627,14 @@ void BufferStringBattle(u16 stringID)
s32 i;
const u8 *stringPtr = NULL;
- gBattleMsgDataPtr = (struct BattleMsgData*)(&gBattleBufferA[gActiveBattler][4]);
+ gBattleMsgDataPtr = (struct BattleMsgData *)(&gBattleResources->bufferA[gActiveBattler][4]);
gLastUsedItem = gBattleMsgDataPtr->lastItem;
gLastUsedAbility = gBattleMsgDataPtr->lastAbility;
gBattleScripting.battler = gBattleMsgDataPtr->scrActive;
- *(&gBattleStruct->field_52) = gBattleMsgDataPtr->unk1605E;
- *(&gBattleStruct->hpScale) = gBattleMsgDataPtr->hpScale;
+ gBattleStruct->field_52 = gBattleMsgDataPtr->unk1605E;
+ gBattleStruct->hpScale = gBattleMsgDataPtr->hpScale;
gPotentialItemEffectBattler = gBattleMsgDataPtr->itemEffectBattler;
- *(&gBattleStruct->stringMoveType) = gBattleMsgDataPtr->moveType;
+ gBattleStruct->stringMoveType = gBattleMsgDataPtr->moveType;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
@@ -2109,7 +2677,9 @@ void BufferStringBattle(u16 stringID)
}
else
{
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
+ if (BATTLE_TWO_VS_ONE_OPPONENT)
+ stringPtr = sText_Trainer1WantsToBattle;
+ else if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER))
stringPtr = sText_TwoTrainersWantToBattle;
else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
stringPtr = sText_TwoTrainersWantToBattle;
@@ -2121,7 +2691,7 @@ void BufferStringBattle(u16 stringID)
{
if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
stringPtr = sText_LegendaryPkmnAppeared;
- else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]])) // interesting, looks like they had something planned for wild double battles
stringPtr = sText_TwoWildPkmnAppeared;
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
stringPtr = sText_WildPkmnAppearedPause;
@@ -2132,7 +2702,7 @@ void BufferStringBattle(u16 stringID)
case STRINGID_INTROSENDOUT: // poke first send-out
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]))
{
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
stringPtr = sText_InGamePartnerSentOutZGoN;
@@ -2150,9 +2720,11 @@ void BufferStringBattle(u16 stringID)
}
else
{
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]))
{
- if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
+ if (BATTLE_TWO_VS_ONE_OPPONENT)
+ stringPtr = sText_Trainer1SentOutTwoPkmn;
+ else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
stringPtr = sText_TwoTrainersSentPkmn;
else if (gBattleTypeFlags & BATTLE_TYPE_TOWER_LINK_MULTI)
stringPtr = sText_TwoTrainersSentPkmn;
@@ -2251,14 +2823,13 @@ void BufferStringBattle(u16 stringID)
}
break;
case STRINGID_USEDMOVE: // pokemon used a move msg
- ChooseMoveUsedParticle(gBattleTextBuff1); // buff1 doesn't appear in the string, leftover from japanese move names
-
- if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
- StringCopy(gBattleTextBuff2, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]);
+ if (gBattleStruct->zmove.active && gBattleStruct->zmove.activeSplit != SPLIT_STATUS)
+ StringCopy(gBattleTextBuff3, GetZMoveName(gBattleMsgDataPtr->currentMove));
+ else if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
+ StringCopy(gBattleTextBuff3, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]);
else
- StringCopy(gBattleTextBuff2, gMoveNames[gBattleMsgDataPtr->currentMove]);
+ StringCopy(gBattleTextBuff3, gMoveNames[gBattleMsgDataPtr->currentMove]);
- ChooseTypeOfMoveUsedString(gBattleTextBuff2);
stringPtr = sText_AttackerUsedX;
break;
case STRINGID_BATTLEEND: // battle end
@@ -2330,6 +2901,9 @@ void BufferStringBattle(u16 stringID)
}
}
break;
+ case STRINGID_TRAINERSLIDE:
+ stringPtr = gBattleStruct->trainerSlideMsg;
+ break;
default: // load a string from the table
if (stringID >= BATTLESTRINGS_COUNT)
{
@@ -2346,17 +2920,17 @@ void BufferStringBattle(u16 stringID)
BattleStringExpandPlaceholdersToDisplayedString(stringPtr);
}
-u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src)
+u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src)
{
BattleStringExpandPlaceholders(src, gDisplayedStringBattle);
}
-static const u8* TryGetStatusString(u8 *src)
+static const u8 *TryGetStatusString(u8 *src)
{
u32 i;
u8 status[8];
u32 chars1, chars2;
- u8* statusPtr;
+ u8 *statusPtr;
memcpy(status, sDummyWeirdStatusString, 8);
@@ -2369,19 +2943,35 @@ static const u8* TryGetStatusString(u8 *src)
statusPtr++;
}
- chars1 = *(u32*)(&status[0]);
- chars2 = *(u32*)(&status[4]);
+ chars1 = *(u32 *)(&status[0]);
+ chars2 = *(u32 *)(&status[4]);
for (i = 0; i < ARRAY_COUNT(gStatusConditionStringsTable); i++)
{
- if (chars1 == *(u32*)(&gStatusConditionStringsTable[i][0][0])
- && chars2 == *(u32*)(&gStatusConditionStringsTable[i][0][4]))
+ if (chars1 == *(u32 *)(&gStatusConditionStringsTable[i][0][0])
+ && chars2 == *(u32 *)(&gStatusConditionStringsTable[i][0][4]))
return gStatusConditionStringsTable[i][1];
}
return NULL;
}
-#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex) \
+static void GetBattlerNick(u32 battlerId, u8 *dst)
+{
+ struct Pokemon *mon, *illusionMon;
+
+ if (GET_BATTLER_SIDE(battlerId) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
+ else
+ mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
+
+ illusionMon = GetIllusionMonPtr(battlerId);
+ if (illusionMon != NULL)
+ mon = illusionMon;
+ GetMonData(mon, MON_DATA_NICKNAME, dst);
+ StringGet_Nickname(dst);
+}
+
+#define HANDLE_NICKNAME_STRING_CASE(battlerId) \
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) \
{ \
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
@@ -2394,15 +2984,144 @@ static const u8* TryGetStatusString(u8 *src)
dstID++; \
toCpy++; \
} \
- GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \
} \
- else \
- { \
- GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \
- } \
- StringGet_Nickname(text); \
+ GetBattlerNick(battlerId, text); \
toCpy = text;
+static const u8 *BattleStringGetOpponentNameByTrainerId(u16 trainerId, u8 *text, u8 multiplayerId, u8 battlerId)
+{
+ const u8 *toCpy;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
+ {
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(gBattleResources->secretBase->trainerName); i++)
+ text[i] = gBattleResources->secretBase->trainerName[i];
+ text[i] = EOS;
+ ConvertInternationalString(text, gBattleResources->secretBase->language);
+ toCpy = text;
+ }
+ else if (trainerId == TRAINER_UNION_ROOM)
+ {
+ toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name;
+ }
+ else if (trainerId == TRAINER_LINK_OPPONENT)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ toCpy = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].name;
+ else
+ toCpy = gLinkPlayers[GetBattlerMultiplayerId(battlerId) & BIT_SIDE].name;
+ }
+ else if (trainerId == TRAINER_FRONTIER_BRAIN)
+ {
+ CopyFrontierBrainTrainerName(text);
+ toCpy = text;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
+ {
+ GetFrontierTrainerName(text, trainerId);
+ toCpy = text;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
+ {
+ GetTrainerHillTrainerName(text, trainerId);
+ toCpy = text;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
+ {
+ GetEreaderTrainerName(text);
+ toCpy = text;
+ }
+ else
+ {
+ toCpy = gTrainers[trainerId].trainerName;
+ }
+
+ return toCpy;
+}
+
+static const u8 *BattleStringGetOpponentName(u8 *text, u8 multiplayerId, u8 battlerId)
+{
+ const u8 *toCpy;
+
+ switch (GetBattlerPosition(battlerId))
+ {
+ case B_POSITION_OPPONENT_LEFT:
+ toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, text, multiplayerId, battlerId);
+ break;
+ case B_POSITION_OPPONENT_RIGHT:
+ if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI) && !BATTLE_TWO_VS_ONE_OPPONENT)
+ toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_B, text, multiplayerId, battlerId);
+ else
+ toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, text, multiplayerId, battlerId);
+ break;
+ }
+
+ return toCpy;
+}
+
+static const u8 *BattleStringGetPlayerName(u8 *text, u8 battlerId)
+{
+ const u8 *toCpy;
+
+ switch (GetBattlerPosition(battlerId))
+ {
+ case B_POSITION_PLAYER_LEFT:
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
+ toCpy = gLinkPlayers[0].name;
+ else
+ toCpy = gSaveBlock2Ptr->playerName;
+ break;
+ case B_POSITION_PLAYER_RIGHT:
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_MULTI))
+ {
+ toCpy = gLinkPlayers[2].name;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
+ {
+ GetFrontierTrainerName(text, gPartnerTrainerId);
+ toCpy = text;
+ }
+ else
+ {
+ toCpy = gSaveBlock2Ptr->playerName;
+ }
+ break;
+ }
+
+ return toCpy;
+}
+
+static const u8 *BattleStringGetTrainerName(u8 *text, u8 multiplayerId, u8 battlerId)
+{
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ return BattleStringGetPlayerName(text, battlerId);
+ else
+ return BattleStringGetOpponentName(text, multiplayerId, battlerId);
+}
+
+static const u8 *BattleStringGetOpponentClassByTrainerId(u16 trainerId)
+{
+ const u8 *toCpy;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
+ toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
+ else if (trainerId == TRAINER_UNION_ROOM)
+ toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()];
+ else if (trainerId == TRAINER_FRONTIER_BRAIN)
+ toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()];
+ else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
+ toCpy = gTrainerClassNames[GetFrontierOpponentClass(trainerId)];
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
+ toCpy = gTrainerClassNames[GetTrainerHillOpponentClass(trainerId)];
+ else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
+ toCpy = gTrainerClassNames[GetEreaderTrainerClassId()];
+ else
+ toCpy = gTrainerClassNames[gTrainers[trainerId].trainerClass];
+
+ return toCpy;
+}
+
u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
{
u32 dstID = 0; // if they used dstID, why not use srcID as well?
@@ -2418,6 +3137,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
while (*src != EOS)
{
+ toCpy = NULL;
if (*src == PLACEHOLDER_BEGIN)
{
src++;
@@ -2464,89 +3184,86 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gStringVar3;
break;
case B_TXT_PLAYER_MON1_NAME: // first player poke name
- GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]],
- MON_DATA_NICKNAME, text);
- StringGet_Nickname(text);
+ GetBattlerNick(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), text);
toCpy = text;
break;
case B_TXT_OPPONENT_MON1_NAME: // first enemy poke name
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]],
- MON_DATA_NICKNAME, text);
- StringGet_Nickname(text);
+ GetBattlerNick(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), text);
toCpy = text;
break;
case B_TXT_PLAYER_MON2_NAME: // second player poke name
- GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]],
- MON_DATA_NICKNAME, text);
- StringGet_Nickname(text);
+ GetBattlerNick(GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT), text);
toCpy = text;
break;
case B_TXT_OPPONENT_MON2_NAME: // second enemy poke name
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]],
- MON_DATA_NICKNAME, text);
- StringGet_Nickname(text);
+ GetBattlerNick(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT), text);
toCpy = text;
break;
case B_TXT_LINK_PLAYER_MON1_NAME: // link first player poke name
- GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id]],
- MON_DATA_NICKNAME, text);
- StringGet_Nickname(text);
+ GetBattlerNick(gLinkPlayers[multiplayerId].id, text);
toCpy = text;
break;
case B_TXT_LINK_OPPONENT_MON1_NAME: // link first opponent poke name
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 1]],
- MON_DATA_NICKNAME, text);
- StringGet_Nickname(text);
+ GetBattlerNick(gLinkPlayers[multiplayerId].id ^ 1, text);
toCpy = text;
break;
case B_TXT_LINK_PLAYER_MON2_NAME: // link second player poke name
- GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 2]],
- MON_DATA_NICKNAME, text);
- StringGet_Nickname(text);
+ GetBattlerNick(gLinkPlayers[multiplayerId].id ^ 2, text);
toCpy = text;
break;
case B_TXT_LINK_OPPONENT_MON2_NAME: // link second opponent poke name
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerId].id ^ 3]],
- MON_DATA_NICKNAME, text);
- StringGet_Nickname(text);
+ GetBattlerNick(gLinkPlayers[multiplayerId].id ^ 3, text);
toCpy = text;
break;
- case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only battlerId 0/1
- HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker,
- gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker))])
+ case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // Unused, to change into sth else.
break;
case B_TXT_ATK_PARTNER_NAME: // attacker partner name
- if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
- GetMonData(&gPlayerParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) + 2]], MON_DATA_NICKNAME, text);
- else
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker)) + 2]], MON_DATA_NICKNAME, text);
-
- StringGet_Nickname(text);
+ GetBattlerNick(BATTLE_PARTNER(gBattlerAttacker), text);
toCpy = text;
break;
case B_TXT_ATK_NAME_WITH_PREFIX: // attacker name with prefix
- HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker])
+ HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker)
break;
case B_TXT_DEF_NAME_WITH_PREFIX: // target name with prefix
- HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget])
+ HANDLE_NICKNAME_STRING_CASE(gBattlerTarget)
+ break;
+ case B_TXT_DEF_NAME: // target name
+ GetBattlerNick(gBattlerTarget, text);
+ toCpy = text;
+ break;
+ case B_TXT_ACTIVE_NAME: // active name
+ GetBattlerNick(gActiveBattler, text);
+ toCpy = text;
+ break;
+ case B_TXT_ACTIVE_NAME2: // active battlerId name with prefix, no illusion
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_NICKNAME, text);
+ else
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_NICKNAME, text);
+ StringGet_Nickname(text);
+ toCpy = text;
break;
case B_TXT_EFF_NAME_WITH_PREFIX: // effect battlerId name with prefix
- HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler])
+ HANDLE_NICKNAME_STRING_CASE(gEffectBattler)
break;
case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active battlerId name with prefix
- HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
+ HANDLE_NICKNAME_STRING_CASE(gActiveBattler)
break;
case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active battlerId name with prefix
- HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, gBattlerPartyIndexes[gBattleScripting.battler])
+ HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler)
break;
case B_TXT_CURRENT_MOVE: // current move name
- if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
+ if (gBattleStruct->zmove.active)
+ toCpy = GetZMoveName(gBattleMsgDataPtr->currentMove);
+ else if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gBattleMsgDataPtr->currentMove];
break;
case B_TXT_LAST_MOVE: // originally used move name
- if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT)
+ if (gBattleStruct->zmove.active)
+ toCpy = GetZMoveName(gBattleMsgDataPtr->originallyUsedMove);
+ else if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT)
toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gBattleMsgDataPtr->originallyUsedMove];
@@ -2554,7 +3271,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_LAST_ITEM: // last used item
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))
{
- if (gLastUsedItem == ITEM_ENIGMA_BERRY)
+ if (gLastUsedItem == ITEM_ENIGMA_BERRY_E_READER)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
@@ -2610,58 +3327,10 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gAbilityNames[sBattlerAbilities[gEffectBattler]];
break;
case B_TXT_TRAINER1_CLASS: // trainer class name
- if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
- toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
- else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
- toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()];
- else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
- toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()];
- else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
- toCpy = gTrainerClassNames[GetFrontierOpponentClass(gTrainerBattleOpponent_A)];
- else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
- toCpy = gTrainerClassNames[GetTrainerHillOpponentClass(gTrainerBattleOpponent_A)];
- else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
- toCpy = gTrainerClassNames[GetEreaderTrainerClassId()];
- else
- toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent_A].trainerClass];
+ toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A);
break;
case B_TXT_TRAINER1_NAME: // trainer1 name
- if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
- {
- for (i = 0; i < (s32) ARRAY_COUNT(gBattleResources->secretBase->trainerName); i++)
- text[i] = gBattleResources->secretBase->trainerName[i];
- text[i] = EOS;
- ConvertInternationalString(text, gBattleResources->secretBase->language);
- toCpy = text;
- }
- else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
- {
- toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name;
- }
- else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
- {
- CopyFrontierBrainTrainerName(text);
- toCpy = text;
- }
- else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
- {
- GetFrontierTrainerName(text, gTrainerBattleOpponent_A);
- toCpy = text;
- }
- else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
- {
- GetTrainerHillTrainerName(text, gTrainerBattleOpponent_A);
- toCpy = text;
- }
- else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
- {
- GetEreaderTrainerName(text);
- toCpy = text;
- }
- else
- {
- toCpy = gTrainers[gTrainerBattleOpponent_A].trainerName;
- }
+ toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, text, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT));
break;
case B_TXT_LINK_PLAYER_NAME: // link player name
toCpy = gLinkPlayers[multiplayerId].name;
@@ -2679,10 +3348,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gLinkPlayers[GetBattlerMultiplayerId(gBattleScripting.battler)].name;
break;
case B_TXT_PLAYER_NAME: // player name
- if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
- toCpy = gLinkPlayers[0].name;
- else
- toCpy = gSaveBlock2Ptr->playerName;
+ toCpy = BattleStringGetPlayerName(text, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT));
break;
case B_TXT_TRAINER1_LOSE_TEXT: // trainerA lose text
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
@@ -2713,7 +3379,26 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
break;
case B_TXT_26: // ?
- HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, *(&gBattleStruct->field_52))
+ if (GetBattlerSide(gBattleScripting.battler) != B_SIDE_PLAYER)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ toCpy = sText_FoePkmnPrefix;
+ else
+ toCpy = sText_WildPkmnPrefix;
+ while (*toCpy != EOS)
+ {
+ dst[dstID] = *toCpy;
+ dstID++;
+ toCpy++;
+ }
+ GetMonData(&gEnemyParty[gBattleStruct->field_52], MON_DATA_NICKNAME, text);
+ }
+ else
+ {
+ GetMonData(&gPlayerParty[gBattleStruct->field_52], MON_DATA_NICKNAME, text);
+ }
+ StringGet_Nickname(text);
+ toCpy = text;
break;
case B_TXT_PC_CREATOR_NAME: // lanette pc
if (FlagGet(FLAG_SYS_PC_LANETTE))
@@ -2758,28 +3443,10 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = sText_FoePkmnPrefix4;
break;
case B_TXT_TRAINER2_CLASS:
- if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
- toCpy = gTrainerClassNames[GetFrontierOpponentClass(gTrainerBattleOpponent_B)];
- else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
- toCpy = gTrainerClassNames[GetTrainerHillOpponentClass(gTrainerBattleOpponent_B)];
- else
- toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent_B].trainerClass];
+ toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B);
break;
case B_TXT_TRAINER2_NAME:
- if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
- {
- GetFrontierTrainerName(text, gTrainerBattleOpponent_B);
- toCpy = text;
- }
- else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
- {
- GetTrainerHillTrainerName(text, gTrainerBattleOpponent_B);
- toCpy = text;
- }
- else
- {
- toCpy = gTrainers[gTrainerBattleOpponent_B].trainerName;
- }
+ toCpy = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_B, text, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT));
break;
case B_TXT_TRAINER2_LOSE_TEXT:
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
@@ -2813,18 +3480,65 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gTrainerClassNames[GetFrontierOpponentClass(gPartnerTrainerId)];
break;
case B_TXT_PARTNER_NAME:
- GetFrontierTrainerName(text, gPartnerTrainerId);
- toCpy = text;
+ toCpy = BattleStringGetPlayerName(text, GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT));
+ break;
+ case B_TXT_ATK_TRAINER_NAME:
+ toCpy = BattleStringGetTrainerName(text, multiplayerId, gBattlerAttacker);
+ break;
+ case B_TXT_ATK_TRAINER_CLASS:
+ switch (GetBattlerPosition(gBattlerAttacker))
+ {
+ case B_POSITION_PLAYER_RIGHT:
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
+ toCpy = gTrainerClassNames[GetFrontierOpponentClass(gPartnerTrainerId)];
+ break;
+ case B_POSITION_OPPONENT_LEFT:
+ toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A);
+ break;
+ case B_POSITION_OPPONENT_RIGHT:
+ if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT)
+ toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B);
+ else
+ toCpy = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A);
+ break;
+ }
+ break;
+ case B_TXT_ATK_TEAM1:
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ toCpy = sText_Your1;
+ else
+ toCpy = sText_Opposing1;
+ break;
+ case B_TXT_ATK_TEAM2:
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ toCpy = sText_Your2;
+ else
+ toCpy = sText_Opposing2;
+ break;
+ case B_TXT_DEF_TEAM1:
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ toCpy = sText_Your1;
+ else
+ toCpy = sText_Opposing1;
+ break;
+ case B_TXT_DEF_TEAM2:
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ toCpy = sText_Your2;
+ else
+ toCpy = sText_Opposing2;
break;
}
- // missing if (toCpy != NULL) check
- while (*toCpy != EOS)
+ if (toCpy != NULL)
{
- dst[dstID] = *toCpy;
- dstID++;
- toCpy++;
+ while (*toCpy != EOS)
+ {
+ dst[dstID] = *toCpy;
+ dstID++;
+ toCpy++;
+ }
}
+
if (*src == B_TXT_TRAINER1_LOSE_TEXT || *src == B_TXT_TRAINER2_LOSE_TEXT
|| *src == B_TXT_TRAINER1_WIN_TEXT || *src == B_TXT_TRAINER2_WIN_TEXT)
{
@@ -2848,7 +3562,38 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
return dstID;
}
-static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
+static void IllusionNickHack(u32 battlerId, u32 partyId, u8 *dst)
+{
+ s32 id, i;
+ // we know it's gEnemyParty
+ struct Pokemon *mon = &gEnemyParty[partyId], *partnerMon;
+
+ if (GetMonAbility(mon) == ABILITY_ILLUSION)
+ {
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerId)))
+ partnerMon = &gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]];
+ else
+ partnerMon = mon;
+
+ // Find last alive non-egg pokemon.
+ for (i = PARTY_SIZE - 1; i >= 0; i--)
+ {
+ id = i;
+ if (GetMonData(&gEnemyParty[id], MON_DATA_SANITY_HAS_SPECIES)
+ && GetMonData(&gEnemyParty[id], MON_DATA_HP)
+ && &gEnemyParty[id] != mon
+ && &gEnemyParty[id] != partnerMon)
+ {
+ GetMonData(&gEnemyParty[id], MON_DATA_NICKNAME, dst);
+ return;
+ }
+ }
+ }
+
+ GetMonData(mon, MON_DATA_NICKNAME, dst);
+}
+
+void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
{
u32 srcID = 1;
u32 value = 0;
@@ -2916,11 +3661,24 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
srcID += 3;
break;
case B_BUFF_MON_NICK: // poke nick without prefix
- if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER)
- GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
+ if (src[srcID + 2] == gBattlerPartyIndexes[src[srcID + 1]])
+ {
+ GetBattlerNick(src[srcID + 1], dst);
+ }
+ else if (gBattleScripting.illusionNickHack) // for STRINGID_ENEMYABOUTTOSWITCHPKMN
+ {
+ gBattleScripting.illusionNickHack = 0;
+ IllusionNickHack(src[srcID + 1], src[srcID + 2], dst);
+ StringGet_Nickname(dst);
+ }
else
- GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
- StringGet_Nickname(dst);
+ {
+ if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER)
+ GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
+ else
+ GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst);
+ StringGet_Nickname(dst);
+ }
srcID += 3;
break;
case B_BUFF_NEGATIVE_FLAVOR: // flavor table
@@ -2928,14 +3686,14 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
srcID += 2;
break;
case B_BUFF_ABILITY: // ability names
- StringAppend(dst, gAbilityNames[src[srcID + 1]]);
- srcID += 2;
+ StringAppend(dst, gAbilityNames[T1_READ_16(&src[srcID + 1])]);
+ srcID += 3;
break;
case B_BUFF_ITEM: // item name
hword = T1_READ_16(&src[srcID + 1]);
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))
{
- if (hword == ITEM_ENIGMA_BERRY)
+ if (hword == ITEM_ENIGMA_BERRY_E_READER)
{
if (gLinkPlayers[gBattleScripting.multiplayerId].id == gPotentialItemEffectBattler)
{
@@ -2964,9 +3722,9 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
// Loads one of two text strings into the provided buffer. This is functionally
// unused, since the value loaded into the buffer is not read; it loaded one of
-// two particles (either "は" or "の") which works in tandem with ChooseTypeOfMoveUsedString
+// two particles (either "?" or "?") which works in tandem with ChooseTypeOfMoveUsedString
// below to effect changes in the meaning of the line.
-static void ChooseMoveUsedParticle(u8* textBuff)
+static void ChooseMoveUsedParticle(u8 *textBuff)
{
s32 counter = 0;
u32 i = 0;
@@ -2994,19 +3752,19 @@ static void ChooseMoveUsedParticle(u8* textBuff)
// sText_ExclamationMark was a plain "!", used for any attack not on the list.
// It resulted in the translation "'s !".
//
-// sText_ExclamationMark2 was "を つかった!". This resulted in the translation
+// sText_ExclamationMark2 was "? ????!". This resulted in the translation
// " used !", which was used for all attacks in English.
//
-// sText_ExclamationMark3 was "した!". This was used for those moves whose
+// sText_ExclamationMark3 was "??!". This was used for those moves whose
// names were verbs, such as Recover, and resulted in translations like "
// recovered itself!".
//
-// sText_ExclamationMark4 was "を した!" This resulted in a translation of
+// sText_ExclamationMark4 was "? ??!" This resulted in a translation of
// " did an !".
//
-// sText_ExclamationMark5 was " こうげき!" This resulted in a translation of
+// sText_ExclamationMark5 was " ????!" This resulted in a translation of
// "'s attack!".
-static void ChooseTypeOfMoveUsedString(u8* dst)
+static void ChooseTypeOfMoveUsedString(u8 *dst)
{
s32 counter = 0;
s32 i = 0;
@@ -3119,7 +3877,7 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId)
void SetPpNumbersPaletteInMoveSelection(void)
{
- struct ChooseMoveStruct *chooseMoveStruct = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
+ struct ChooseMoveStruct *chooseMoveStruct = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
const u16 *palPtr = gPPTextPalette;
u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]],
chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]);
@@ -3163,3 +3921,95 @@ u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp)
return 0;
}
+
+struct TrainerSlide
+{
+ u16 trainerId;
+ const u8 *msgLastSwitchIn;
+ const u8 *msgLastLowHp;
+ const u8 *msgFirstDown;
+};
+
+static const struct TrainerSlide sTrainerSlides[] =
+{
+ /* Put any trainer slide-in messages inside this array.
+ Example:
+ {
+ .trainerId = TRAINER_WALLY_VR_2,
+ .msgLastSwitchIn = sText_AarghAlmostHadIt,
+ .msgLastLowHp = sText_BoxIsFull,
+ .msgFirstDown = sText_123Poof,
+ },
+ */
+};
+
+static u32 GetEnemyMonCount(bool32 onlyAlive)
+{
+ u32 i, count = 0;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL);
+ if (species != SPECIES_NONE
+ && species != SPECIES_EGG
+ && (!onlyAlive || GetMonData(&gEnemyParty[i], MON_DATA_HP, NULL)))
+ count++;
+ }
+
+ return count;
+}
+
+static bool32 IsBattlerHpLow(u32 battler)
+{
+ if ((gBattleMons[battler].hp * 100) / gBattleMons[battler].maxHP < 25)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which)
+{
+ s32 i;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) || GetBattlerSide(battlerId) != B_SIDE_OPPONENT)
+ return FALSE;
+
+ for (i = 0; i < ARRAY_COUNT(sTrainerSlides); i++)
+ {
+ if (trainerId == sTrainerSlides[i].trainerId)
+ {
+ gBattleScripting.battler = battlerId;
+ switch (which)
+ {
+ case TRAINER_SLIDE_LAST_SWITCHIN:
+ if (sTrainerSlides[i].msgLastSwitchIn != NULL && GetEnemyMonCount(TRUE) == 1)
+ {
+ gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastSwitchIn;
+ return TRUE;
+ }
+ break;
+ case TRAINER_SLIDE_LAST_LOW_HP:
+ if (sTrainerSlides[i].msgLastLowHp != NULL
+ && GetEnemyMonCount(TRUE) == 1
+ && IsBattlerHpLow(battlerId)
+ && !gBattleStruct->trainerSlideLowHpMsgDone)
+ {
+ gBattleStruct->trainerSlideLowHpMsgDone = TRUE;
+ gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastLowHp;
+ return TRUE;
+ }
+ break;
+ case TRAINER_SLIDE_FIRST_DOWN:
+ if (sTrainerSlides[i].msgFirstDown != NULL && GetEnemyMonCount(TRUE) == GetEnemyMonCount(FALSE) - 1)
+ {
+ gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgFirstDown;
+ return TRUE;
+ }
+ break;
+ }
+ break;
+ }
+ }
+
+ return FALSE;
+}
diff --git a/src/battle_pike.c b/src/battle_pike.c
index 433dd0a083..229f6211ba 100644
--- a/src/battle_pike.c
+++ b/src/battle_pike.c
@@ -17,6 +17,7 @@
#include "constants/battle_frontier.h"
#include "constants/frontier_util.h"
#include "constants/abilities.h"
+#include "constants/battle_config.h"
#include "constants/layouts.h"
#include "constants/rgb.h"
#include "constants/trainers.h"
@@ -809,7 +810,7 @@ static void HealMon(struct Pokemon *mon)
static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status)
{
- u8 ability = GetMonAbility(mon);
+ u16 ability = GetMonAbility(mon);
bool8 ret = FALSE;
switch (status)
@@ -819,7 +820,7 @@ static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status)
ret = TRUE;
break;
case STATUS1_BURN:
- if (ability == ABILITY_WATER_VEIL)
+ if (ability == ABILITY_WATER_VEIL || ability == ABILITY_WATER_BUBBLE)
ret = TRUE;
break;
case STATUS1_PARALYSIS:
@@ -854,8 +855,9 @@ static bool8 DoesTypePreventStatus(u16 species, u32 status)
ret = TRUE;
break;
case STATUS1_PARALYSIS:
- if (gBaseStats[species].type1 == TYPE_GROUND || gBaseStats[species].type1 == TYPE_ELECTRIC
- || gBaseStats[species].type2 == TYPE_GROUND || gBaseStats[species].type2 == TYPE_ELECTRIC)
+ if (gBaseStats[species].type1 == TYPE_GROUND || gBaseStats[species].type2 == TYPE_GROUND
+ || (B_PARALYZE_ELECTRIC >= GEN_6 &&
+ (gBaseStats[species].type1 == TYPE_ELECTRIC || gBaseStats[species].type2 == TYPE_ELECTRIC)))
ret = TRUE;
break;
case STATUS1_BURN:
@@ -1251,7 +1253,7 @@ static void Task_DoStatusInflictionScreenFlash(u8 taskId)
{
if (IsStatusInflictionScreenFlashTaskFinished())
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
}
@@ -1624,7 +1626,7 @@ static bool8 CanEncounterWildMon(u8 enemyMonLevel)
{
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
{
- u8 monAbility = GetMonAbility(&gPlayerParty[0]);
+ u16 monAbility = GetMonAbility(&gPlayerParty[0]);
if (monAbility == ABILITY_KEEN_EYE || monAbility == ABILITY_INTIMIDATE)
{
u8 playerMonLevel = GetMonData(&gPlayerParty[0], MON_DATA_LEVEL);
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index a885f1c8ea..d1f418ccbe 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -289,23 +289,23 @@ static const u16 sPickupItemsLvl50[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] =
{ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_CHERI_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_PECHA_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_RAWST_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
- {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
+ {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_SPEED, ITEM_CHESTO_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_X_ACCURACY, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
- {ITEM_HYPER_POTION, ITEM_X_SPECIAL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
+ {ITEM_HYPER_POTION, ITEM_X_SP_ATK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_GUARD_SPEC, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
- {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
+ {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_SPEED, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_X_ACCURACY, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
- {ITEM_HYPER_POTION, ITEM_X_SPECIAL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
+ {ITEM_HYPER_POTION, ITEM_X_SP_ATK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_GUARD_SPEC, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
- {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
+ {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
};
static const u16 sPickupItemsLvlOpen[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] =
@@ -313,23 +313,23 @@ static const u16 sPickupItemsLvlOpen[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] =
{ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_CHERI_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_PECHA_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_RAWST_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
- {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
+ {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_SPEED, ITEM_CHESTO_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_X_ACCURACY, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
- {ITEM_HYPER_POTION, ITEM_X_SPECIAL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
+ {ITEM_HYPER_POTION, ITEM_X_SP_ATK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_GUARD_SPEC, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
- {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
+ {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_SPEED, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_X_ACCURACY, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
- {ITEM_HYPER_POTION, ITEM_X_SPECIAL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
+ {ITEM_HYPER_POTION, ITEM_X_SP_ATK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_GUARD_SPEC, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
{ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
{ITEM_HYPER_POTION, ITEM_X_ATTACK, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_SCOPE_LENS, ITEM_FOCUS_BAND, ITEM_MAX_REVIVE, ITEM_SACRED_ASH},
- {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
+ {ITEM_HYPER_POTION, ITEM_X_DEFENSE, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR},
};
static const u8 sPickupItemSlots[][2] =
@@ -1480,7 +1480,7 @@ u8 GetTrainerEncounterMusicIdInBattlePyramid(u16 trainerId)
// Unused
static void BattlePyramidRetireChallenge(void)
{
- ScriptContext1_SetupScript(BattlePyramid_Retire);
+ ScriptContext_SetupScript(BattlePyramid_Retire);
}
static u16 GetUniqueTrainerId(u8 objectEventId)
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index 66b4cd97d1..9fab996da8 100644
--- a/src/battle_pyramid_bag.c
+++ b/src/battle_pyramid_bag.c
@@ -309,7 +309,7 @@ static const struct OamData sOamData_PyramidBag =
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -393,7 +393,7 @@ static void OpenBattlePyramidBagInBattle(void)
// make room.
void ChooseItemsToTossFromPyramidBag(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeScreen(FADE_TO_BLACK, 0);
CreateTask(Task_ChooseItemsToTossFromPyramidBag, 10);
}
@@ -1195,7 +1195,7 @@ static void Task_ChooseHowManyToToss(u8 taskId)
{
// Toss
PlaySE(SE_SELECT);
- ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, 0);
+ ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, FALSE);
ClearWindowTilemap(WIN_TOSS_NUM);
ScheduleBgCopyTilemapToVram(1);
AskConfirmToss(taskId);
@@ -1204,7 +1204,7 @@ static void Task_ChooseHowManyToToss(u8 taskId)
{
// Cancel tossing
PlaySE(SE_SELECT);
- ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, 0);
+ ClearStdWindowAndFrameToTransparent(WIN_TOSS_NUM, FALSE);
ClearWindowTilemap(WIN_TOSS_NUM);
ScheduleBgCopyTilemapToVram(1);
DontTossItem(taskId);
@@ -1464,7 +1464,7 @@ static void PyramidBagPrint_Quantity(u8 windowId, const u8 *src, u8 x, u8 y, u8
static void DrawTossNumberWindow(u8 windowId)
{
- DrawStdFrameWithCustomTileAndPalette(windowId, 0, 1, 0xE);
+ DrawStdFrameWithCustomTileAndPalette(windowId, FALSE, 1, 0xE);
ScheduleBgCopyTilemapToVram(1);
}
diff --git a/src/battle_records.c b/src/battle_records.c
index f576d5912d..6cab28d21b 100644
--- a/src/battle_records.c
+++ b/src/battle_records.c
@@ -388,7 +388,7 @@ static void RemoveTrainerHillRecordsWindow(u8 windowId)
static void ClearVramOamPlttRegs(void)
{
- DmaClearLarge16(3, (void*)(VRAM), VRAM_SIZE, 0x1000);
+ DmaClearLarge16(3, (void *)(VRAM), VRAM_SIZE, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index b950eea61a..420d5790ce 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -2,8 +2,12 @@
#include "battle.h"
#include "battle_message.h"
#include "battle_anim.h"
-#include "battle_ai_script_commands.h"
+#include "battle_ai_main.h"
+#include "battle_ai_util.h"
#include "battle_scripts.h"
+#include "battle_z_move.h"
+#include "constants/moves.h"
+#include "constants/abilities.h"
#include "item.h"
#include "util.h"
#include "pokemon.h"
@@ -30,7 +34,10 @@
#include "naming_screen.h"
#include "battle_setup.h"
#include "overworld.h"
+#include "wild_encounter.h"
+#include "rtc.h"
#include "party_menu.h"
+#include "constants/battle_config.h"
#include "battle_arena.h"
#include "battle_pike.h"
#include "battle_pyramid.h"
@@ -51,10 +58,244 @@
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/trainers.h"
+#include "battle_util.h"
-extern const u8* const gBattleScriptsForMoveEffects[];
+extern struct Evolution gEvolutionTable[][EVOS_PER_MON];
-#define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
+extern const u8 *const gBattleScriptsForMoveEffects[];
+
+// table to avoid ugly powing on gba (courtesy of doesnt)
+// this returns (i^2.5)/4
+// the quarters cancel so no need to re-quadruple them in actual calculation
+static const s32 sExperienceScalingFactors[] =
+{
+ 0,
+ 0,
+ 1,
+ 3,
+ 8,
+ 13,
+ 22,
+ 32,
+ 45,
+ 60,
+ 79,
+ 100,
+ 124,
+ 152,
+ 183,
+ 217,
+ 256,
+ 297,
+ 343,
+ 393,
+ 447,
+ 505,
+ 567,
+ 634,
+ 705,
+ 781,
+ 861,
+ 946,
+ 1037,
+ 1132,
+ 1232,
+ 1337,
+ 1448,
+ 1563,
+ 1685,
+ 1811,
+ 1944,
+ 2081,
+ 2225,
+ 2374,
+ 2529,
+ 2690,
+ 2858,
+ 3031,
+ 3210,
+ 3396,
+ 3587,
+ 3786,
+ 3990,
+ 4201,
+ 4419,
+ 4643,
+ 4874,
+ 5112,
+ 5357,
+ 5608,
+ 5866,
+ 6132,
+ 6404,
+ 6684,
+ 6971,
+ 7265,
+ 7566,
+ 7875,
+ 8192,
+ 8515,
+ 8847,
+ 9186,
+ 9532,
+ 9886,
+ 10249,
+ 10619,
+ 10996,
+ 11382,
+ 11776,
+ 12178,
+ 12588,
+ 13006,
+ 13433,
+ 13867,
+ 14310,
+ 14762,
+ 15222,
+ 15690,
+ 16167,
+ 16652,
+ 17146,
+ 17649,
+ 18161,
+ 18681,
+ 19210,
+ 19748,
+ 20295,
+ 20851,
+ 21417,
+ 21991,
+ 22574,
+ 23166,
+ 23768,
+ 24379,
+ 25000,
+ 25629,
+ 26268,
+ 26917,
+ 27575,
+ 28243,
+ 28920,
+ 29607,
+ 30303,
+ 31010,
+ 31726,
+ 32452,
+ 33188,
+ 33934,
+ 34689,
+ 35455,
+ 36231,
+ 37017,
+ 37813,
+ 38619,
+ 39436,
+ 40262,
+ 41099,
+ 41947,
+ 42804,
+ 43673,
+ 44551,
+ 45441,
+ 46340,
+ 47251,
+ 48172,
+ 49104,
+ 50046,
+ 50999,
+ 51963,
+ 52938,
+ 53924,
+ 54921,
+ 55929,
+ 56947,
+ 57977,
+ 59018,
+ 60070,
+ 61133,
+ 62208,
+ 63293,
+ 64390,
+ 65498,
+ 66618,
+ 67749,
+ 68891,
+ 70045,
+ 71211,
+ 72388,
+ 73576,
+ 74777,
+ 75989,
+ 77212,
+ 78448,
+ 79695,
+ 80954,
+ 82225,
+ 83507,
+ 84802,
+ 86109,
+ 87427,
+ 88758,
+ 90101,
+ 91456,
+ 92823,
+ 94202,
+ 95593,
+ 96997,
+ 98413,
+ 99841,
+ 101282,
+ 102735,
+ 104201,
+ 105679,
+ 107169,
+ 108672,
+ 110188,
+ 111716,
+ 113257,
+ 114811,
+ 116377,
+ 117956,
+ 119548,
+ 121153,
+ 122770,
+ 124401,
+ 126044,
+ 127700,
+ 129369,
+ 131052,
+ 132747,
+ 134456,
+ 136177,
+ 137912,
+ 139660,
+ 141421,
+ 143195,
+ 144983,
+ 146784,
+ 148598,
+ 150426,
+ 152267,
+ 154122,
+ 155990,
+ 157872,
+ 159767,
+};
+
+static const u16 sTrappingMoves[NUM_TRAPPING_MOVES] =
+{
+ MOVE_BIND, MOVE_WRAP, MOVE_FIRE_SPIN, MOVE_CLAMP, MOVE_WHIRLPOOL, MOVE_SAND_TOMB, MOVE_MAGMA_STORM, MOVE_INFESTATION, MOVE_SNAP_TRAP,
+};
+
+static const u16 sBadgeFlags[8] = {
+ FLAG_BADGE01_GET, FLAG_BADGE02_GET, FLAG_BADGE03_GET, FLAG_BADGE04_GET,
+ FLAG_BADGE05_GET, FLAG_BADGE06_GET, FLAG_BADGE07_GET, FLAG_BADGE08_GET,
+};
+
+static const u16 sWhiteOutBadgeMoney[9] = { 8, 16, 24, 36, 48, 64, 80, 100, 120 };
+
+#define STAT_CHANGE_WORKED 0
+#define STAT_CHANGE_DIDNT_WORK 1
#define LEVEL_UP_BANNER_START 416
#define LEVEL_UP_BANNER_END 512
@@ -64,8 +305,7 @@ extern const u8* const gBattleScriptsForMoveEffects[];
static bool8 IsTwoTurnsMove(u16 move);
static void TrySetDestinyBondToHappen(void);
static u8 AttacksThisTurn(u8 battlerId, u16 move); // Note: returns 1 if it's a charging turn, otherwise 2.
-static void CheckWonderGuardAndLevitate(void);
-static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8, const u8* BS_ptr);
+static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr);
static bool32 IsMonGettingExpSentOut(void);
static void InitLevelUpBanner(void);
static bool8 SlideInLevelUpBanner(void);
@@ -74,7 +314,8 @@ static void DrawLevelUpWindow1(void);
static void DrawLevelUpWindow2(void);
static void PutMonIconOnLvlUpBanner(void);
static void DrawLevelUpBannerText(void);
-static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite* sprite);
+static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite);
+static bool32 CriticalCapture(u32 odds);
static void Cmd_attackcanceler(void);
static void Cmd_accuracycheck(void);
@@ -83,8 +324,8 @@ static void Cmd_ppreduce(void);
static void Cmd_critcalc(void);
static void Cmd_damagecalc(void);
static void Cmd_typecalc(void);
-static void Cmd_adjustnormaldamage(void);
-static void Cmd_adjustnormaldamage2(void);
+static void Cmd_adjustdamage(void);
+static void Cmd_multihitresultmessage(void);
static void Cmd_attackanimation(void);
static void Cmd_waitanimation(void);
static void Cmd_healthbarupdate(void);
@@ -110,7 +351,7 @@ static void Cmd_jumpifability(void);
static void Cmd_jumpifsideaffecting(void);
static void Cmd_jumpifstat(void);
static void Cmd_jumpifstatus3condition(void);
-static void Cmd_jumpiftype(void);
+static void Cmd_jumpbasedontype(void);
static void Cmd_getexp(void);
static void Cmd_checkteamslost(void);
static void Cmd_movevaluescleanup(void);
@@ -142,7 +383,7 @@ static void Cmd_end2(void);
static void Cmd_end3(void);
static void Cmd_jumpifaffectedbyprotect(void);
static void Cmd_call(void);
-static void Cmd_jumpiftype2(void);
+static void Cmd_setroost(void);
static void Cmd_jumpifabilitypresent(void);
static void Cmd_endselectionscript(void);
static void Cmd_playanimation(void);
@@ -150,7 +391,7 @@ static void Cmd_playanimation_var(void);
static void Cmd_setgraphicalstatchangevalues(void);
static void Cmd_playstatchangeanimation(void);
static void Cmd_moveend(void);
-static void Cmd_typecalc2(void);
+static void Cmd_sethealblock(void);
static void Cmd_returnatktoball(void);
static void Cmd_getswitchedmondata(void);
static void Cmd_switchindataupdate(void);
@@ -181,14 +422,14 @@ static void Cmd_status2animation(void);
static void Cmd_chosenstatusanimation(void);
static void Cmd_yesnobox(void);
static void Cmd_cancelallactions(void);
-static void Cmd_adjustsetdamage(void);
+static void Cmd_setgravity(void);
static void Cmd_removeitem(void);
static void Cmd_atknameinbuff1(void);
static void Cmd_drawlvlupbox(void);
static void Cmd_resetsentmonsvalue(void);
static void Cmd_setatktoplayer0(void);
static void Cmd_makevisible(void);
-static void Cmd_recordlastability(void);
+static void Cmd_recordability(void);
static void Cmd_buffermovetolearn(void);
static void Cmd_jumpifplayerran(void);
static void Cmd_hpthresholds(void);
@@ -196,7 +437,7 @@ static void Cmd_hpthresholds2(void);
static void Cmd_useitemonopponent(void);
static void Cmd_various(void);
static void Cmd_setprotectlike(void);
-static void Cmd_faintifabilitynotdamp(void);
+static void Cmd_tryexplosion(void);
static void Cmd_setatkhptozero(void);
static void Cmd_jumpifnexttargetvalid(void);
static void Cmd_tryhealhalfhealth(void);
@@ -207,12 +448,12 @@ static void Cmd_setseeded(void);
static void Cmd_manipulatedamage(void);
static void Cmd_trysetrest(void);
static void Cmd_jumpifnotfirstturn(void);
-static void Cmd_nop(void);
+static void Cmd_setmiracleeye(void);
static void Cmd_jumpifcantmakeasleep(void);
static void Cmd_stockpile(void);
static void Cmd_stockpiletobasedamage(void);
static void Cmd_stockpiletohpheal(void);
-static void Cmd_negativedamage(void);
+static void Cmd_setdrainedhp(void);
static void Cmd_statbuffchange(void);
static void Cmd_normalisebuffs(void);
static void Cmd_setbide(void);
@@ -248,17 +489,17 @@ static void Cmd_copymovepermanently(void);
static void Cmd_trychoosesleeptalkmove(void);
static void Cmd_setdestinybond(void);
static void Cmd_trysetdestinybondtohappen(void);
-static void Cmd_remaininghptopower(void);
+static void Cmd_settailwind(void);
static void Cmd_tryspiteppreduce(void);
static void Cmd_healpartystatus(void);
static void Cmd_cursetarget(void);
static void Cmd_trysetspikes(void);
static void Cmd_setforesight(void);
static void Cmd_trysetperishsong(void);
-static void Cmd_rolloutdamagecalculation(void);
+static void Cmd_handlerollout(void);
static void Cmd_jumpifconfusedandstatmaxed(void);
-static void Cmd_furycuttercalc(void);
-static void Cmd_friendshiptodamagecalculation(void);
+static void Cmd_handlefurycutter(void);
+static void Cmd_setembargo(void);
static void Cmd_presentdamagecalculation(void);
static void Cmd_setsafeguard(void);
static void Cmd_magnitudedamagecalculation(void);
@@ -269,7 +510,7 @@ static void Cmd_copyfoestats(void);
static void Cmd_rapidspinfree(void);
static void Cmd_setdefensecurlbit(void);
static void Cmd_recoverbasedonsunlight(void);
-static void Cmd_hiddenpowercalc(void);
+static void Cmd_setstickyweb(void);
static void Cmd_selectfirstvalidtarget(void);
static void Cmd_trysetfutureattack(void);
static void Cmd_trydobeatup(void);
@@ -277,7 +518,7 @@ static void Cmd_setsemiinvulnerablebit(void);
static void Cmd_clearsemiinvulnerablebit(void);
static void Cmd_setminimize(void);
static void Cmd_sethail(void);
-static void Cmd_jumpifattackandspecialattackcannotfall(void);
+static void Cmd_trymemento(void);
static void Cmd_setforcedtarget(void);
static void Cmd_setcharge(void);
static void Cmd_callterrainattack(void);
@@ -289,15 +530,15 @@ static void Cmd_trysethelpinghand(void);
static void Cmd_tryswapitems(void);
static void Cmd_trycopyability(void);
static void Cmd_trywish(void);
-static void Cmd_trysetroots(void);
-static void Cmd_doubledamagedealtifdamaged(void);
+static void Cmd_settoxicspikes(void);
+static void Cmd_setgastroacid(void);
static void Cmd_setyawn(void);
static void Cmd_setdamagetohealthdifference(void);
-static void Cmd_scaledamagebyhealthratio(void);
+static void Cmd_setroom(void);
static void Cmd_tryswapabilities(void);
static void Cmd_tryimprison(void);
-static void Cmd_trysetgrudge(void);
-static void Cmd_weightdamagecalculation(void);
+static void Cmd_setstealthrock(void);
+static void Cmd_setuserstatus3(void);
static void Cmd_assistattackselect(void);
static void Cmd_trysetmagiccoat(void);
static void Cmd_trysetsnatch(void);
@@ -309,7 +550,7 @@ static void Cmd_pickup(void);
static void Cmd_docastformchangeanimation(void);
static void Cmd_trycastformdatachange(void);
static void Cmd_settypebasedhalvers(void);
-static void Cmd_setweatherballtype(void);
+static void Cmd_jumpifsubstituteblocks(void);
static void Cmd_tryrecycleitem(void);
static void Cmd_settypetoterrain(void);
static void Cmd_pursuitdoubles(void);
@@ -325,6 +566,13 @@ static void Cmd_removeattackerstatus1(void);
static void Cmd_finishaction(void);
static void Cmd_finishturn(void);
static void Cmd_trainerslideout(void);
+static void Cmd_settelekinesis(void);
+static void Cmd_swapstatstages(void);
+static void Cmd_averagestats(void);
+static void Cmd_jumpifoppositegenders(void);
+static void Cmd_trygetbaddreamstarget(void);
+static void Cmd_tryworryseed(void);
+static void Cmd_metalburstdamagecalculator(void);
void (* const gBattleScriptingCommandsTable[])(void) =
{
@@ -335,8 +583,8 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_critcalc, //0x4
Cmd_damagecalc, //0x5
Cmd_typecalc, //0x6
- Cmd_adjustnormaldamage, //0x7
- Cmd_adjustnormaldamage2, //0x8
+ Cmd_adjustdamage, //0x7
+ Cmd_multihitresultmessage, //0x8
Cmd_attackanimation, //0x9
Cmd_waitanimation, //0xA
Cmd_healthbarupdate, //0xB
@@ -362,7 +610,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_jumpifsideaffecting, //0x1F
Cmd_jumpifstat, //0x20
Cmd_jumpifstatus3condition, //0x21
- Cmd_jumpiftype, //0x22
+ Cmd_jumpbasedontype, //0x22
Cmd_getexp, //0x23
Cmd_checkteamslost, //0x24
Cmd_movevaluescleanup, //0x25
@@ -394,7 +642,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_end3, //0x3F
Cmd_jumpifaffectedbyprotect, //0x40
Cmd_call, //0x41
- Cmd_jumpiftype2, //0x42
+ Cmd_setroost, //0x42
Cmd_jumpifabilitypresent, //0x43
Cmd_endselectionscript, //0x44
Cmd_playanimation, //0x45
@@ -402,7 +650,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_setgraphicalstatchangevalues, //0x47
Cmd_playstatchangeanimation, //0x48
Cmd_moveend, //0x49
- Cmd_typecalc2, //0x4A
+ Cmd_sethealblock, //0x4A
Cmd_returnatktoball, //0x4B
Cmd_getswitchedmondata, //0x4C
Cmd_switchindataupdate, //0x4D
@@ -433,14 +681,14 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_chosenstatusanimation, //0x66
Cmd_yesnobox, //0x67
Cmd_cancelallactions, //0x68
- Cmd_adjustsetdamage, //0x69
+ Cmd_setgravity, //0x69
Cmd_removeitem, //0x6A
Cmd_atknameinbuff1, //0x6B
Cmd_drawlvlupbox, //0x6C
Cmd_resetsentmonsvalue, //0x6D
Cmd_setatktoplayer0, //0x6E
Cmd_makevisible, //0x6F
- Cmd_recordlastability, //0x70
+ Cmd_recordability, //0x70
Cmd_buffermovetolearn, //0x71
Cmd_jumpifplayerran, //0x72
Cmd_hpthresholds, //0x73
@@ -448,7 +696,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_useitemonopponent, //0x75
Cmd_various, //0x76
Cmd_setprotectlike, //0x77
- Cmd_faintifabilitynotdamp, //0x78
+ Cmd_tryexplosion, //0x78
Cmd_setatkhptozero, //0x79
Cmd_jumpifnexttargetvalid, //0x7A
Cmd_tryhealhalfhealth, //0x7B
@@ -459,12 +707,12 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_manipulatedamage, //0x80
Cmd_trysetrest, //0x81
Cmd_jumpifnotfirstturn, //0x82
- Cmd_nop, //0x83
+ Cmd_setmiracleeye, //0x83
Cmd_jumpifcantmakeasleep, //0x84
Cmd_stockpile, //0x85
Cmd_stockpiletobasedamage, //0x86
Cmd_stockpiletohpheal, //0x87
- Cmd_negativedamage, //0x88
+ Cmd_setdrainedhp, //0x88
Cmd_statbuffchange, //0x89
Cmd_normalisebuffs, //0x8A
Cmd_setbide, //0x8B
@@ -500,17 +748,17 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_trychoosesleeptalkmove, //0xA9
Cmd_setdestinybond, //0xAA
Cmd_trysetdestinybondtohappen, //0xAB
- Cmd_remaininghptopower, //0xAC
+ Cmd_settailwind, //0xAC
Cmd_tryspiteppreduce, //0xAD
Cmd_healpartystatus, //0xAE
Cmd_cursetarget, //0xAF
Cmd_trysetspikes, //0xB0
Cmd_setforesight, //0xB1
Cmd_trysetperishsong, //0xB2
- Cmd_rolloutdamagecalculation, //0xB3
+ Cmd_handlerollout, //0xB3
Cmd_jumpifconfusedandstatmaxed, //0xB4
- Cmd_furycuttercalc, //0xB5
- Cmd_friendshiptodamagecalculation, //0xB6
+ Cmd_handlefurycutter, //0xB5
+ Cmd_setembargo, //0xB6
Cmd_presentdamagecalculation, //0xB7
Cmd_setsafeguard, //0xB8
Cmd_magnitudedamagecalculation, //0xB9
@@ -521,7 +769,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_rapidspinfree, //0xBE
Cmd_setdefensecurlbit, //0xBF
Cmd_recoverbasedonsunlight, //0xC0
- Cmd_hiddenpowercalc, //0xC1
+ Cmd_setstickyweb, //0xC1
Cmd_selectfirstvalidtarget, //0xC2
Cmd_trysetfutureattack, //0xC3
Cmd_trydobeatup, //0xC4
@@ -529,7 +777,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_clearsemiinvulnerablebit, //0xC6
Cmd_setminimize, //0xC7
Cmd_sethail, //0xC8
- Cmd_jumpifattackandspecialattackcannotfall, //0xC9
+ Cmd_trymemento, //0xC9
Cmd_setforcedtarget, //0xCA
Cmd_setcharge, //0xCB
Cmd_callterrainattack, //0xCC
@@ -541,15 +789,15 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_tryswapitems, //0xD2
Cmd_trycopyability, //0xD3
Cmd_trywish, //0xD4
- Cmd_trysetroots, //0xD5
- Cmd_doubledamagedealtifdamaged, //0xD6
+ Cmd_settoxicspikes, //0xD5
+ Cmd_setgastroacid, //0xD6
Cmd_setyawn, //0xD7
Cmd_setdamagetohealthdifference, //0xD8
- Cmd_scaledamagebyhealthratio, //0xD9
+ Cmd_setroom, //0xD9
Cmd_tryswapabilities, //0xDA
Cmd_tryimprison, //0xDB
- Cmd_trysetgrudge, //0xDC
- Cmd_weightdamagecalculation, //0xDD
+ Cmd_setstealthrock, //0xDC
+ Cmd_setuserstatus3, //0xDD
Cmd_assistattackselect, //0xDE
Cmd_trysetmagiccoat, //0xDF
Cmd_trysetsnatch, //0xE0
@@ -561,7 +809,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_docastformchangeanimation, //0xE6
Cmd_trycastformdatachange, //0xE7
Cmd_settypebasedhalvers, //0xE8
- Cmd_setweatherballtype, //0xE9
+ Cmd_jumpifsubstituteblocks, //0xE9
Cmd_tryrecycleitem, //0xEA
Cmd_settypetoterrain, //0xEB
Cmd_pursuitdoubles, //0xEC
@@ -576,16 +824,17 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_removeattackerstatus1, //0xF5
Cmd_finishaction, //0xF6
Cmd_finishturn, //0xF7
- Cmd_trainerslideout //0xF8
+ Cmd_trainerslideout, //0xF8
+ Cmd_settelekinesis, //0xF9
+ Cmd_swapstatstages, //0xFA
+ Cmd_averagestats, //0xFB
+ Cmd_jumpifoppositegenders, //0xFC
+ Cmd_trygetbaddreamstarget, //0xFD
+ Cmd_tryworryseed, //0xFE
+ Cmd_metalburstdamagecalculator, //0xFF
};
-struct StatFractions
-{
- u8 dividend;
- u8 divisor;
-};
-
-static const struct StatFractions sAccuracyStageRatios[] =
+const struct StatFractions gAccuracyStageRatios[] =
{
{ 33, 100}, // -6
{ 36, 100}, // -5
@@ -602,9 +851,6 @@ static const struct StatFractions sAccuracyStageRatios[] =
{ 3, 1}, // +6
};
-// The chance is 1/N for each stage.
-static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2};
-
static const u32 sStatusFlagsForMoveEffects[NUM_MOVE_EFFECTS] =
{
[MOVE_EFFECT_SLEEP] = STATUS1_SLEEP,
@@ -624,9 +870,8 @@ static const u32 sStatusFlagsForMoveEffects[NUM_MOVE_EFFECTS] =
[MOVE_EFFECT_THRASH] = STATUS2_LOCK_CONFUSE,
};
-static const u8* const sMoveEffectBS_Ptrs[] =
+static const u8 *const sMoveEffectBS_Ptrs[] =
{
- [0] = BattleScript_MoveEffectSleep,
[MOVE_EFFECT_SLEEP] = BattleScript_MoveEffectSleep,
[MOVE_EFFECT_POISON] = BattleScript_MoveEffectPoison,
[MOVE_EFFECT_BURN] = BattleScript_MoveEffectBurn,
@@ -634,40 +879,15 @@ static const u8* const sMoveEffectBS_Ptrs[] =
[MOVE_EFFECT_PARALYSIS] = BattleScript_MoveEffectParalysis,
[MOVE_EFFECT_TOXIC] = BattleScript_MoveEffectToxic,
[MOVE_EFFECT_CONFUSION] = BattleScript_MoveEffectConfusion,
- [MOVE_EFFECT_FLINCH] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_TRI_ATTACK] = BattleScript_MoveEffectSleep,
[MOVE_EFFECT_UPROAR] = BattleScript_MoveEffectUproar,
[MOVE_EFFECT_PAYDAY] = BattleScript_MoveEffectPayDay,
- [MOVE_EFFECT_CHARGING] = BattleScript_MoveEffectSleep,
[MOVE_EFFECT_WRAP] = BattleScript_MoveEffectWrap,
[MOVE_EFFECT_RECOIL_25] = BattleScript_MoveEffectRecoil,
- [MOVE_EFFECT_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SPD_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SP_ATK_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SP_DEF_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ACC_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_EVS_PLUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SPD_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SP_ATK_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_SP_DEF_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ACC_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_EVS_MINUS_1] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_RECHARGE] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_RAGE] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_STEAL_ITEM] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_PREVENT_ESCAPE] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_NIGHTMARE] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ALL_STATS_UP] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_RAPIDSPIN] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_REMOVE_PARALYSIS] = BattleScript_MoveEffectSleep,
- [MOVE_EFFECT_ATK_DEF_DOWN] = BattleScript_MoveEffectSleep,
[MOVE_EFFECT_RECOIL_33] = BattleScript_MoveEffectRecoil,
};
-static const struct WindowTemplate sUnusedWinTemplate = {
+static const struct WindowTemplate sUnusedWinTemplate =
+{
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 3,
@@ -680,19 +900,12 @@ static const struct WindowTemplate sUnusedWinTemplate = {
static const u16 sLevelUpBanner_Pal[] = INCBIN_U16("graphics/battle_interface/level_up_banner.gbapal");
static const u32 sLevelUpBanner_Gfx[] = INCBIN_U32("graphics/battle_interface/level_up_banner.4bpp.lz");
-// unused
-static const u8 sRubyLevelUpStatBoxStats[] =
-{
- MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK,
- MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED
-};
-
static const struct OamData sOamData_MonIconOnLvlUpBanner =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -717,67 +930,239 @@ static const struct SpriteTemplate sSpriteTemplate_MonIconOnLvlUpBanner =
static const u16 sProtectSuccessRates[] = {USHRT_MAX, USHRT_MAX / 2, USHRT_MAX / 4, USHRT_MAX / 8};
-#define MIMIC_FORBIDDEN_END 0xFFFE
-#define METRONOME_FORBIDDEN_END 0xFFFF
-#define ASSIST_FORBIDDEN_END 0xFFFF
+#define FORBIDDEN_MIMIC (1 << 0)
+#define FORBIDDEN_METRONOME (1 << 1)
+#define FORBIDDEN_ASSIST (1 << 2)
+#define FORBIDDEN_COPYCAT (1 << 3)
+#define FORBIDDEN_SLEEP_TALK (1 << 4)
+#define FORBIDDEN_INSTRUCT (1 << 5)
-static const u16 sMovesForbiddenToCopy[] =
+static const u8 sForbiddenMoves[MOVES_COUNT] =
{
- MOVE_METRONOME,
- MOVE_STRUGGLE,
- MOVE_SKETCH,
- MOVE_MIMIC,
- MIMIC_FORBIDDEN_END,
- MOVE_COUNTER,
- MOVE_MIRROR_COAT,
- MOVE_PROTECT,
- MOVE_DETECT,
- MOVE_ENDURE,
- MOVE_DESTINY_BOND,
- MOVE_SLEEP_TALK,
- MOVE_THIEF,
- MOVE_FOLLOW_ME,
- MOVE_SNATCH,
- MOVE_HELPING_HAND,
- MOVE_COVET,
- MOVE_TRICK,
- MOVE_FOCUS_PUNCH,
- METRONOME_FORBIDDEN_END
+ [MOVE_NONE] = 0xFF, // Can't use a non-move lol
+ [MOVE_STRUGGLE] = 0xFF, // Neither Struggle
+ [MOVE_AFTER_YOU] = FORBIDDEN_METRONOME,
+ [MOVE_APPLE_ACID] = FORBIDDEN_METRONOME,
+ [MOVE_ASSIST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_ASTRAL_BARRAGE] = FORBIDDEN_METRONOME,
+ [MOVE_AURA_WHEEL] = FORBIDDEN_METRONOME,
+ [MOVE_BADDY_BAD] = FORBIDDEN_METRONOME,
+ [MOVE_BANEFUL_BUNKER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_BEAK_BLAST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_BEHEMOTH_BASH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_BEHEMOTH_BLADE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_BELCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_BESTOW] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_BIDE] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_BLAST_BURN] = FORBIDDEN_INSTRUCT,
+ [MOVE_BODY_PRESS] = FORBIDDEN_METRONOME,
+ [MOVE_BOUNCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_BOUNCY_BUBBLE] = FORBIDDEN_METRONOME,
+ [MOVE_BRANCH_POKE] = FORBIDDEN_METRONOME,
+ [MOVE_BREAKING_SWIPE] = FORBIDDEN_METRONOME,
+ [MOVE_BUZZY_BUZZ] = FORBIDDEN_METRONOME,
+ [MOVE_CELEBRATE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_CHATTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_CIRCLE_THROW] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_CLANGOROUS_SOUL] = FORBIDDEN_METRONOME,
+ [MOVE_COPYCAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_COUNTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_COVET] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_CRAFTY_SHIELD] = FORBIDDEN_METRONOME,
+ [MOVE_DECORATE] = FORBIDDEN_METRONOME,
+ [MOVE_DESTINY_BOND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_DETECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_DIAMOND_STORM] = FORBIDDEN_METRONOME,
+ [MOVE_DIG] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_DIVE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_DOUBLE_IRON_BASH] = FORBIDDEN_METRONOME,
+ [MOVE_DRAGON_ASCENT] = FORBIDDEN_METRONOME,
+ [MOVE_DRAGON_ENERGY] = FORBIDDEN_METRONOME,
+ [MOVE_DRAGON_TAIL] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_DRUM_BEATING] = FORBIDDEN_METRONOME,
+ [MOVE_DYNAMAX_CANNON] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_ENDURE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_ETERNABEAM] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT,
+ [MOVE_FALSE_SURRENDER] = FORBIDDEN_METRONOME,
+ [MOVE_FEINT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_FIERY_WRATH] = FORBIDDEN_METRONOME,
+ [MOVE_FLEUR_CANNON] = FORBIDDEN_METRONOME,
+ [MOVE_FLOATY_FALL] = FORBIDDEN_METRONOME,
+ [MOVE_FLY] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_FOCUS_PUNCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_FOLLOW_ME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_FREEZE_SHOCK] = FORBIDDEN_METRONOME | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_FREEZING_GLARE] = FORBIDDEN_METRONOME,
+ [MOVE_FREEZY_FROST] = FORBIDDEN_METRONOME,
+ [MOVE_FRENZY_PLANT] = FORBIDDEN_INSTRUCT,
+ [MOVE_GEOMANCY] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_GIGA_IMPACT] = FORBIDDEN_INSTRUCT,
+ [MOVE_GLACIAL_LANCE] = FORBIDDEN_METRONOME,
+ [MOVE_GLITZY_GLOW] = FORBIDDEN_METRONOME,
+ [MOVE_GRAV_APPLE] = FORBIDDEN_METRONOME,
+ [MOVE_HELPING_HAND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_HOLD_HANDS] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_HYDRO_CANNON] = FORBIDDEN_INSTRUCT,
+ [MOVE_HYPER_BEAM] = FORBIDDEN_INSTRUCT,
+ [MOVE_HYPERSPACE_FURY] = FORBIDDEN_METRONOME,
+ [MOVE_HYPERSPACE_HOLE] = FORBIDDEN_METRONOME,
+ [MOVE_ICE_BALL] = FORBIDDEN_INSTRUCT,
+ [MOVE_ICE_BURN] = FORBIDDEN_METRONOME | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_INSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT,
+ [MOVE_JUNGLE_HEALING] = FORBIDDEN_METRONOME,
+ [MOVE_KINGS_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT,
+ [MOVE_LIFE_DEW] = FORBIDDEN_METRONOME,
+ [MOVE_LIGHT_OF_RUIN] = FORBIDDEN_METRONOME,
+ [MOVE_MAT_BLOCK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_ME_FIRST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_METEOR_ASSAULT] = FORBIDDEN_METRONOME | FORBIDDEN_INSTRUCT,
+ [MOVE_METEOR_BEAM] = FORBIDDEN_INSTRUCT,
+ [MOVE_METRONOME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_MIMIC] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_MIND_BLOWN] = FORBIDDEN_METRONOME,
+ [MOVE_MIRROR_COAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_MIRROR_MOVE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_MOONGEIST_BEAM] = FORBIDDEN_METRONOME,
+ [MOVE_NATURE_POWER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_NATURES_MADNESS] = FORBIDDEN_METRONOME,
+ [MOVE_OBSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT,
+ [MOVE_ORIGIN_PULSE] = FORBIDDEN_METRONOME,
+ [MOVE_OUTRAGE] = FORBIDDEN_INSTRUCT,
+ [MOVE_OVERDRIVE] = FORBIDDEN_METRONOME,
+ [MOVE_PETAL_DANCE] = FORBIDDEN_INSTRUCT,
+ [MOVE_PHANTOM_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_PHOTON_GEYSER] = FORBIDDEN_METRONOME,
+ [MOVE_PIKA_PAPOW] = FORBIDDEN_METRONOME,
+ [MOVE_PLASMA_FISTS] = FORBIDDEN_METRONOME,
+ [MOVE_PRECIPICE_BLADES] = FORBIDDEN_METRONOME,
+ [MOVE_PRISMATIC_LASER] = FORBIDDEN_INSTRUCT,
+ [MOVE_PROTECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_PYRO_BALL] = FORBIDDEN_METRONOME,
+ [MOVE_QUASH] = FORBIDDEN_METRONOME,
+ [MOVE_QUICK_GUARD] = FORBIDDEN_METRONOME,
+ [MOVE_RAGE_POWDER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_RAZOR_WIND] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_RELIC_SONG] = FORBIDDEN_METRONOME,
+ [MOVE_ROAR] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_ROAR_OF_TIME] = FORBIDDEN_INSTRUCT,
+ [MOVE_ROCK_WRECKER] = FORBIDDEN_INSTRUCT,
+ [MOVE_ROLLOUT] = FORBIDDEN_INSTRUCT,
+ [MOVE_SAPPY_SEED] = FORBIDDEN_METRONOME,
+ [MOVE_SECRET_SWORD] = FORBIDDEN_METRONOME,
+ [MOVE_SHADOW_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_SHELL_TRAP] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_SIZZLY_SLIDE] = FORBIDDEN_METRONOME,
+ [MOVE_SKETCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_SKULL_BASH] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_SKY_ATTACK] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_SKY_DROP] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_SLEEP_TALK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_SNAP_TRAP] = FORBIDDEN_METRONOME,
+ [MOVE_SNARL] = FORBIDDEN_METRONOME,
+ [MOVE_SNATCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_INSTRUCT,
+ [MOVE_SNORE] = FORBIDDEN_METRONOME,
+ [MOVE_SOLAR_BEAM] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_SOLAR_BLADE] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_SPARKLY_SWIRL] = FORBIDDEN_METRONOME,
+ [MOVE_SPECTRAL_THIEF] = FORBIDDEN_METRONOME,
+ [MOVE_SPIKY_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_SPIRIT_BREAK] = FORBIDDEN_METRONOME,
+ [MOVE_SPLISHY_SPLASH] = FORBIDDEN_METRONOME,
+ [MOVE_SPOTLIGHT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_STEAM_ERUPTION] = FORBIDDEN_METRONOME,
+ [MOVE_STEEL_BEAM] = FORBIDDEN_METRONOME,
+ [MOVE_STRANGE_STEAM] = FORBIDDEN_METRONOME,
+ [MOVE_SUNSTEEL_STRIKE] = FORBIDDEN_METRONOME,
+ [MOVE_SURGING_STRIKES] = FORBIDDEN_METRONOME,
+ [MOVE_SWITCHEROO] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_TECHNO_BLAST] = FORBIDDEN_METRONOME,
+ [MOVE_THIEF] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_THOUSAND_ARROWS] = FORBIDDEN_METRONOME,
+ [MOVE_THOUSAND_WAVES] = FORBIDDEN_METRONOME,
+ [MOVE_THRASH] = FORBIDDEN_INSTRUCT,
+ [MOVE_THUNDER_CAGE] = FORBIDDEN_METRONOME,
+ [MOVE_THUNDEROUS_KICK] = FORBIDDEN_METRONOME,
+ [MOVE_TRANSFORM] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_INSTRUCT,
+ [MOVE_TRICK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_UPROAR] = FORBIDDEN_SLEEP_TALK | FORBIDDEN_INSTRUCT,
+ [MOVE_V_CREATE] = FORBIDDEN_METRONOME,
+ [MOVE_VEEVEE_VOLLEY] = FORBIDDEN_METRONOME,
+ [MOVE_WHIRLWIND] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
+ [MOVE_WICKED_BLOW] = FORBIDDEN_METRONOME,
+ [MOVE_WIDE_GUARD] = FORBIDDEN_METRONOME,
+ [MOVE_ZIPPY_ZAP] = FORBIDDEN_METRONOME,
};
-static const u8 sFlailHpScaleToPowerTable[] =
-{
- 1, 200,
- 4, 150,
- 9, 100,
- 16, 80,
- 32, 40,
- 48, 20
-};
-
-static const u16 sNaturePowerMoves[] =
+static const u16 sNaturePowerMoves[BATTLE_TERRAIN_COUNT] =
{
+#if B_NATURE_POWER_MOVES >= GEN_7
+ [BATTLE_TERRAIN_GRASS] = MOVE_ENERGY_BALL,
+ [BATTLE_TERRAIN_LONG_GRASS] = MOVE_ENERGY_BALL,
+ [BATTLE_TERRAIN_SAND] = MOVE_EARTH_POWER,
+ [BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTH_POWER,
+ [BATTLE_TERRAIN_CAVE] = MOVE_EARTH_POWER,
+ [BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
+ [BATTLE_TERRAIN_PLAIN] = MOVE_TRI_ATTACK,
+ [BATTLE_TERRAIN_SNOW] = MOVE_ICE_BEAM,
+#elif B_NATURE_POWER_MOVES == GEN_6
+ [BATTLE_TERRAIN_GRASS] = MOVE_ENERGY_BALL,
+ [BATTLE_TERRAIN_LONG_GRASS] = MOVE_ENERGY_BALL,
+ [BATTLE_TERRAIN_SAND] = MOVE_EARTH_POWER,
+ [BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTH_POWER,
+ [BATTLE_TERRAIN_CAVE] = MOVE_EARTH_POWER,
+ [BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
+ [BATTLE_TERRAIN_PLAIN] = MOVE_TRI_ATTACK,
+ [BATTLE_TERRAIN_SNOW] = MOVE_FROST_BREATH,
+#elif B_NATURE_POWER_MOVES == GEN_5
+ [BATTLE_TERRAIN_GRASS] = MOVE_SEED_BOMB,
+ [BATTLE_TERRAIN_LONG_GRASS] = MOVE_SEED_BOMB,
+ [BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
+ [BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTHQUAKE,
+ [BATTLE_TERRAIN_CAVE] = MOVE_EARTHQUAKE,
+ [BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
+ [BATTLE_TERRAIN_PLAIN] = MOVE_EARTHQUAKE,
+ [BATTLE_TERRAIN_SNOW] = MOVE_BLIZZARD,
+#elif B_NATURE_POWER_MOVES == GEN_4
+ [BATTLE_TERRAIN_GRASS] = MOVE_SEED_BOMB,
+ [BATTLE_TERRAIN_LONG_GRASS] = MOVE_SEED_BOMB,
+ [BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
+ [BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE,
+ [BATTLE_TERRAIN_CAVE] = MOVE_ROCK_SLIDE,
+ [BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
+ [BATTLE_TERRAIN_PLAIN] = MOVE_EARTHQUAKE,
+ [BATTLE_TERRAIN_SNOW] = MOVE_BLIZZARD,
+#else // Gen 1-3
[BATTLE_TERRAIN_GRASS] = MOVE_STUN_SPORE,
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_RAZOR_LEAF,
[BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
- [BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP,
[BATTLE_TERRAIN_WATER] = MOVE_SURF,
[BATTLE_TERRAIN_POND] = MOVE_BUBBLE_BEAM,
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE,
[BATTLE_TERRAIN_CAVE] = MOVE_SHADOW_BALL,
[BATTLE_TERRAIN_BUILDING] = MOVE_SWIFT,
- [BATTLE_TERRAIN_PLAIN] = MOVE_SWIFT
-};
-
-// format: min. weight (hectograms), base power
-static const u16 sWeightToDamageTable[] =
-{
- 100, 20,
- 250, 40,
- 500, 60,
- 1000, 80,
- 2000, 100,
- 0xFFFF, 0xFFFF
+ [BATTLE_TERRAIN_PLAIN] = MOVE_SWIFT,
+ [BATTLE_TERRAIN_SNOW] = MOVE_BLIZZARD,
+#endif
+ [BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP,
+ [BATTLE_TERRAIN_SOARING] = MOVE_AIR_SLASH,
+ [BATTLE_TERRAIN_SKY_PILLAR] = MOVE_AIR_SLASH,
+ [BATTLE_TERRAIN_BURIAL_GROUND] = MOVE_SHADOW_BALL,
+ [BATTLE_TERRAIN_PUDDLE] = MOVE_MUD_BOMB,
+ [BATTLE_TERRAIN_MARSH] = MOVE_MUD_BOMB,
+ [BATTLE_TERRAIN_SWAMP] = MOVE_MUD_BOMB,
+ [BATTLE_TERRAIN_ICE] = MOVE_ICE_BEAM,
+ [BATTLE_TERRAIN_VOLCANO] = MOVE_LAVA_PLUME,
+ [BATTLE_TERRAIN_DISTORTION_WORLD] = MOVE_TRI_ATTACK,
+ [BATTLE_TERRAIN_SPACE] = MOVE_DRACO_METEOR,
+ [BATTLE_TERRAIN_ULTRA_SPACE] = MOVE_PSYSHOCK,
};
static const u16 sPickupItems[] =
@@ -822,27 +1207,38 @@ static const u8 sPickupProbabilities[] =
30, 40, 50, 60, 70, 80, 90, 94, 98
};
-static const u8 sTerrainToType[] =
+static const u8 sTerrainToType[BATTLE_TERRAIN_COUNT] =
{
- [BATTLE_TERRAIN_GRASS] = TYPE_GRASS,
- [BATTLE_TERRAIN_LONG_GRASS] = TYPE_GRASS,
- [BATTLE_TERRAIN_SAND] = TYPE_GROUND,
- [BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER,
- [BATTLE_TERRAIN_WATER] = TYPE_WATER,
- [BATTLE_TERRAIN_POND] = TYPE_WATER,
- [BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK,
- [BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
- [BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL,
- [BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL,
-};
-
-// - ITEM_ULTRA_BALL skips Master Ball and ITEM_NONE
-static const u8 sBallCatchBonuses[] =
-{
- [ITEM_ULTRA_BALL - ITEM_ULTRA_BALL] = 20,
- [ITEM_GREAT_BALL - ITEM_ULTRA_BALL] = 15,
- [ITEM_POKE_BALL - ITEM_ULTRA_BALL] = 10,
- [ITEM_SAFARI_BALL - ITEM_ULTRA_BALL] = 15
+ [BATTLE_TERRAIN_GRASS] = TYPE_GRASS,
+ [BATTLE_TERRAIN_LONG_GRASS] = TYPE_GRASS,
+ [BATTLE_TERRAIN_SAND] = TYPE_GROUND,
+ [BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER,
+ [BATTLE_TERRAIN_WATER] = TYPE_WATER,
+ [BATTLE_TERRAIN_POND] = TYPE_WATER,
+ [BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
+ [BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL,
+ [BATTLE_TERRAIN_SOARING] = TYPE_FLYING,
+ [BATTLE_TERRAIN_SKY_PILLAR] = TYPE_FLYING,
+ [BATTLE_TERRAIN_BURIAL_GROUND] = TYPE_GHOST,
+ [BATTLE_TERRAIN_PUDDLE] = TYPE_GROUND,
+ [BATTLE_TERRAIN_MARSH] = TYPE_GROUND,
+ [BATTLE_TERRAIN_SWAMP] = TYPE_GROUND,
+ [BATTLE_TERRAIN_SNOW] = TYPE_ICE,
+ [BATTLE_TERRAIN_ICE] = TYPE_ICE,
+ [BATTLE_TERRAIN_VOLCANO] = TYPE_FIRE,
+ [BATTLE_TERRAIN_DISTORTION_WORLD] = TYPE_NORMAL,
+ [BATTLE_TERRAIN_SPACE] = TYPE_DRAGON,
+ [BATTLE_TERRAIN_ULTRA_SPACE] = TYPE_PSYCHIC,
+#if B_CAMOUFLAGE_TYPES >= GEN_5
+ [BATTLE_TERRAIN_MOUNTAIN] = TYPE_GROUND,
+ [BATTLE_TERRAIN_PLAIN] = TYPE_GROUND,
+#elif B_CAMOUFLAGE_TYPES == GEN_4
+ [BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK,
+ [BATTLE_TERRAIN_PLAIN] = TYPE_GROUND,
+#else
+ [BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK,
+ [BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL,
+#endif
};
// In Battle Palace, moves are chosen based on the pokemons nature rather than by the player
@@ -911,9 +1307,82 @@ static const u8 sBattlePalaceNatureToFlavorTextId[NUM_NATURES] =
[NATURE_QUIRKY] = B_MSG_EAGER_FOR_MORE,
};
+static bool32 NoTargetPresent(u8 battlerId, u32 move)
+{
+ if (!IsBattlerAlive(gBattlerTarget))
+ gBattlerTarget = GetMoveTarget(move, NO_TARGET_OVERRIDE);
+
+ switch (GetBattlerMoveTargetType(battlerId, move))
+ {
+ case MOVE_TARGET_SELECTED:
+ case MOVE_TARGET_DEPENDS:
+ case MOVE_TARGET_RANDOM:
+ if (!IsBattlerAlive(gBattlerTarget))
+ return TRUE;
+ break;
+ case MOVE_TARGET_BOTH:
+ if (!IsBattlerAlive(gBattlerTarget) && !IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)))
+ return TRUE;
+ break;
+ case MOVE_TARGET_FOES_AND_ALLY:
+ if (!IsBattlerAlive(gBattlerTarget) && !IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) && !IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))
+ return TRUE;
+ break;
+ }
+
+ return FALSE;
+}
+
+static bool32 TryAegiFormChange(void)
+{
+ // Only Aegislash with Stance Change can transform, transformed mons cannot.
+ if (GetBattlerAbility(gBattlerAttacker) != ABILITY_STANCE_CHANGE
+ || gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)
+ return FALSE;
+
+ switch (gBattleMons[gBattlerAttacker].species)
+ {
+ default:
+ return FALSE;
+ case SPECIES_AEGISLASH: // Shield -> Blade
+ if (gBattleMoves[gCurrentMove].power == 0)
+ return FALSE;
+ gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH_BLADE;
+ break;
+ case SPECIES_AEGISLASH_BLADE: // Blade -> Shield
+ if (gCurrentMove != MOVE_KINGS_SHIELD)
+ return FALSE;
+ gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH;
+ break;
+ }
+
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AttackerFormChange;
+ return TRUE;
+}
+
static void Cmd_attackcanceler(void)
{
- s32 i;
+ s32 i, moveType;
+ u16 attackerAbility = GetBattlerAbility(gBattlerAttacker);
+
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+
+ if (WEATHER_HAS_EFFECT && gBattleMoves[gCurrentMove].power)
+ {
+ if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL))
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_PrimordialSeaFizzlesOutFireTypeMoves;
+ return;
+ }
+ else if (moveType == TYPE_WATER && (gBattleWeather & B_WEATHER_SUN_PRIMAL))
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_DesolateLandEvaporatesWaterTypeMoves;
+ return;
+ }
+ }
if (gBattleOutcome != 0)
{
@@ -926,24 +1395,51 @@ static void Cmd_attackcanceler(void)
gBattlescriptCurrInstr = BattleScript_MoveEnd;
return;
}
+ #if (B_STANCE_CHANGE_FAIL <= GEN_6)
+ if (TryAegiFormChange())
+ return;
+ #endif
if (AtkCanceller_UnableToUseMove())
return;
+
+ // Check Protean activation.
+ if ((attackerAbility == ABILITY_PROTEAN || attackerAbility == ABILITY_LIBERO)
+ && (gBattleMons[gBattlerAttacker].type1 != moveType || gBattleMons[gBattlerAttacker].type2 != moveType ||
+ (gBattleMons[gBattlerAttacker].type3 != moveType && gBattleMons[gBattlerAttacker].type3 != TYPE_MYSTERY))
+ && gCurrentMove != MOVE_STRUGGLE)
+ {
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
+ SET_BATTLER_TYPE(gBattlerAttacker, moveType);
+ gBattlerAbility = gBattlerAttacker;
+ BattleScriptPushCursor();
+ PrepareStringBattle(STRINGID_EMPTYSTRING3, gBattlerAttacker);
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ gBattlescriptCurrInstr = BattleScript_ProteanActivates;
+ return;
+ }
+
+ if (AtkCanceller_UnableToUseMove2())
+ return;
if (AbilityBattleEffects(ABILITYEFFECT_MOVES_BLOCK, gBattlerTarget, 0, 0, 0))
return;
- if (!gBattleMons[gBattlerAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & (HITMARKER_ALLOW_NO_PP | HITMARKER_NO_ATTACKSTRING))
+ if (!gBattleMons[gBattlerAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE
+ && !(gHitMarker & (HITMARKER_ALLOW_NO_PP | HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT))
&& !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))
{
gBattlescriptCurrInstr = BattleScript_NoPPForMove;
gMoveResultFlags |= MOVE_RESULT_MISSED;
return;
}
+ #if (B_STANCE_CHANGE_FAIL >= GEN_7)
+ if (TryAegiFormChange())
+ return;
+ #endif
gHitMarker &= ~HITMARKER_ALLOW_NO_PP;
if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))
{
- i = IsMonDisobedient(); // why use the 'i' variable...?
- switch (i)
+ switch (IsMonDisobedient())
{
case 0:
break;
@@ -957,11 +1453,42 @@ static void Cmd_attackcanceler(void)
}
gHitMarker |= HITMARKER_OBEYS;
+ if (NoTargetPresent(gBattlerAttacker, gCurrentMove) && (!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)))
+ {
+ gBattlescriptCurrInstr = BattleScript_ButItFailedAtkStringPpReduce;
+ if (!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))
+ CancelMultiTurnMoves(gBattlerAttacker);
+ return;
+ }
- if (gProtectStructs[gBattlerTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED)
+ if (gProtectStructs[gBattlerTarget].bounceMove
+ && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED
+ && !gProtectStructs[gBattlerAttacker].usesBouncedMove)
{
PressurePPLose(gBattlerAttacker, gBattlerTarget, MOVE_MAGIC_COAT);
- gProtectStructs[gBattlerTarget].bounceMove = 0;
+ gProtectStructs[gBattlerTarget].bounceMove = FALSE;
+ gProtectStructs[gBattlerTarget].usesBouncedMove = TRUE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ if (BlocksPrankster(gCurrentMove, gBattlerTarget, gBattlerAttacker, TRUE))
+ {
+ // Opponent used a prankster'd magic coat -> reflected status move should fail against a dark-type attacker
+ gBattlerTarget = gBattlerAttacker;
+ gBattlescriptCurrInstr = BattleScript_MagicCoatBouncePrankster;
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MagicCoatBounce;
+ }
+ return;
+ }
+ else if (GetBattlerAbility(gBattlerTarget) == ABILITY_MAGIC_BOUNCE
+ && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED
+ && !gProtectStructs[gBattlerAttacker].usesBouncedMove)
+ {
+ RecordAbilityBattle(gBattlerTarget, ABILITY_MAGIC_BOUNCE);
+ gProtectStructs[gBattlerTarget].usesBouncedMove = TRUE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_MagicCoatBounce;
return;
@@ -972,7 +1499,7 @@ static void Cmd_attackcanceler(void)
if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED)
{
PressurePPLose(gBattlerAttacker, gBattlerByTurnOrder[i], MOVE_SNATCH);
- gProtectStructs[gBattlerByTurnOrder[i]].stealMove = 0;
+ gProtectStructs[gBattlerByTurnOrder[i]].stealMove = FALSE;
gBattleScripting.battler = gBattlerByTurnOrder[i];
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SnatchedMove;
@@ -982,16 +1509,27 @@ static void Cmd_attackcanceler(void)
if (gSpecialStatuses[gBattlerTarget].lightningRodRedirected)
{
- gSpecialStatuses[gBattlerTarget].lightningRodRedirected = 0;
+ gSpecialStatuses[gBattlerTarget].lightningRodRedirected = FALSE;
gLastUsedAbility = ABILITY_LIGHTNING_ROD;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_TookAttack;
RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
}
- else if (DEFENDER_IS_PROTECTED
- && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
- && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))))
+ else if (gSpecialStatuses[gBattlerTarget].stormDrainRedirected)
{
+ gSpecialStatuses[gBattlerTarget].stormDrainRedirected = FALSE;
+ gLastUsedAbility = ABILITY_STORM_DRAIN;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TookAttack;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ else if (IsBattlerProtected(gBattlerTarget, gCurrentMove)
+ && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
+ && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)))
+ && gBattleMoves[gCurrentMove].effect != EFFECT_SUCKER_PUNCH)
+ {
+ if (IsMoveMakingContact(gCurrentMove, gBattlerAttacker))
+ gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
gMoveResultFlags |= MOVE_RESULT_MISSED;
gLastLandedMoves[gBattlerTarget] = 0;
@@ -999,33 +1537,39 @@ static void Cmd_attackcanceler(void)
gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED;
gBattlescriptCurrInstr++;
}
+ else if (gProtectStructs[gBattlerTarget].beakBlastCharge && IsMoveMakingContact(gCurrentMove, gBattlerAttacker))
+ {
+ gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE;
+ gBattlescriptCurrInstr++;
+ }
else
{
gBattlescriptCurrInstr++;
}
}
-static void JumpIfMoveFailed(u8 adder, u16 move)
+static bool32 JumpIfMoveFailed(u8 adder, u16 move)
{
- const u8 *BS_ptr = gBattlescriptCurrInstr + adder;
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
gLastLandedMoves[gBattlerTarget] = 0;
gLastHitByType[gBattlerTarget] = 0;
- BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ return TRUE;
}
else
{
TrySetDestinyBondToHappen();
if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBattlerTarget, 0, 0, move))
- return;
+ return TRUE;
}
- gBattlescriptCurrInstr = BS_ptr;
+ gBattlescriptCurrInstr += adder;
+ return FALSE;
}
static void Cmd_jumpifaffectedbyprotect(void)
{
- if (DEFENDER_IS_PROTECTED)
+ if (IsBattlerProtected(gBattlerTarget, gCurrentMove))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
JumpIfMoveFailed(5, 0);
@@ -1037,10 +1581,10 @@ static void Cmd_jumpifaffectedbyprotect(void)
}
}
-bool8 JumpIfMoveAffectedByProtect(u16 move)
+static bool8 JumpIfMoveAffectedByProtect(u16 move)
{
bool8 affected = FALSE;
- if (DEFENDER_IS_PROTECTED)
+ if (IsBattlerProtected(gBattlerTarget, move))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
JumpIfMoveFailed(7, move);
@@ -1050,44 +1594,59 @@ bool8 JumpIfMoveAffectedByProtect(u16 move)
return affected;
}
-static bool8 AccuracyCalcHelper(u16 move)
+static bool32 AccuracyCalcHelper(u16 move)
{
if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
{
JumpIfMoveFailed(7, move);
return TRUE;
}
+ else if (B_TOXIC_NEVER_MISS >= GEN_6
+ && gBattleMoves[move].effect == EFFECT_TOXIC
+ && IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_POISON))
+ {
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ // If the attacker has the ability No Guard and they aren't targeting a Pokemon involved in a Sky Drop with the move Sky Drop, move hits.
+ else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF))
+ {
+ if (!JumpIfMoveFailed(7, move))
+ RecordAbilityBattle(gBattlerAttacker, ABILITY_NO_GUARD);
+ return TRUE;
+ }
+ // If the target has the ability No Guard and they aren't involved in a Sky Drop or the current move isn't Sky Drop, move hits.
+ else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF))
+ {
+ if (!JumpIfMoveFailed(7, move))
+ RecordAbilityBattle(gBattlerTarget, ABILITY_NO_GUARD);
+ return TRUE;
+ }
+
+ if (gBattleStruct->zmove.active && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
+ {
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
- if (!(gHitMarker & HITMARKER_IGNORE_ON_AIR) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
+ if ((gStatuses3[gBattlerTarget] & STATUS3_PHANTOM_FORCE)
+ || (!(gBattleMoves[move].flags & (FLAG_DMG_IN_AIR | FLAG_DMG_2X_IN_AIR)) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
+ || (!(gBattleMoves[move].flags & FLAG_DMG_UNDERGROUND) && gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND)
+ || (!(gBattleMoves[move].flags & FLAG_DMG_UNDERWATER) && gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
JumpIfMoveFailed(7, move);
return TRUE;
}
- gHitMarker &= ~HITMARKER_IGNORE_ON_AIR;
-
- if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND)
- {
- gMoveResultFlags |= MOVE_RESULT_MISSED;
- JumpIfMoveFailed(7, move);
- return TRUE;
- }
-
- gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND;
-
- if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER)
- {
- gMoveResultFlags |= MOVE_RESULT_MISSED;
- JumpIfMoveFailed(7, move);
- return TRUE;
- }
-
- gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER;
-
- if ((WEATHER_HAS_EFFECT && (gBattleWeather & B_WEATHER_RAIN) && gBattleMoves[move].effect == EFFECT_THUNDER)
- || (gBattleMoves[move].effect == EFFECT_ALWAYS_HIT || gBattleMoves[move].effect == EFFECT_VITAL_THROW))
+ if ((WEATHER_HAS_EFFECT &&
+ ((IsBattlerWeatherAffected(gBattlerTarget, B_WEATHER_RAIN) && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE))
+ || ((B_BLIZZARD_HAIL >= GEN_4 && (gBattleWeather & B_WEATHER_HAIL) && move == MOVE_BLIZZARD))))
+ || (gBattleMoves[move].effect == EFFECT_VITAL_THROW)
+ || (gBattleMoves[move].accuracy == 0)
+ || ((B_MINIMIZE_DMG_ACC >= GEN_6) && (gStatuses3[gBattlerTarget] & STATUS3_MINIMIZED) && (gBattleMoves[move].flags & FLAG_DMG_MINIMIZE)))
{
+ // thunder/hurricane ignore acc checks in rain unless target is holding utility umbrella
JumpIfMoveFailed(7, move);
return TRUE;
}
@@ -1095,93 +1654,126 @@ static bool8 AccuracyCalcHelper(u16 move)
return FALSE;
}
+u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect)
+{
+ u32 calc, moveAcc;
+ s8 buff, accStage, evasionStage;
+ u8 atkParam = GetBattlerHoldEffectParam(battlerAtk);
+ u8 defParam = GetBattlerHoldEffectParam(battlerDef);
+
+ gPotentialItemEffectBattler = battlerDef;
+ accStage = gBattleMons[battlerAtk].statStages[STAT_ACC];
+ evasionStage = gBattleMons[battlerDef].statStages[STAT_EVASION];
+ if (atkAbility == ABILITY_UNAWARE || atkAbility == ABILITY_KEEN_EYE)
+ evasionStage = DEFAULT_STAT_STAGE;
+ if (gBattleMoves[move].flags & FLAG_STAT_STAGES_IGNORED)
+ evasionStage = DEFAULT_STAT_STAGE;
+ if (defAbility == ABILITY_UNAWARE)
+ accStage = DEFAULT_STAT_STAGE;
+
+ if (gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT || gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED)
+ buff = accStage;
+ else
+ buff = accStage + DEFAULT_STAT_STAGE - evasionStage;
+
+ if (buff < MIN_STAT_STAGE)
+ buff = MIN_STAT_STAGE;
+ if (buff > MAX_STAT_STAGE)
+ buff = MAX_STAT_STAGE;
+
+ moveAcc = gBattleMoves[move].accuracy;
+ // Check Thunder and Hurricane on sunny weather.
+ if (IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN)
+ && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE))
+ moveAcc = 50;
+ // Check Wonder Skin.
+ if (defAbility == ABILITY_WONDER_SKIN && gBattleMoves[move].power == 0)
+ moveAcc = 50;
+
+ calc = gAccuracyStageRatios[buff].dividend * moveAcc;
+ calc /= gAccuracyStageRatios[buff].divisor;
+
+ if (atkAbility == ABILITY_COMPOUND_EYES)
+ calc = (calc * 130) / 100; // 1.3 compound eyes boost
+ else if (atkAbility == ABILITY_VICTORY_STAR)
+ calc = (calc * 110) / 100; // 1.1 victory star boost
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_VICTORY_STAR)
+ calc = (calc * 110) / 100; // 1.1 ally's victory star boost
+
+ if (defAbility == ABILITY_SAND_VEIL && WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_SANDSTORM)
+ calc = (calc * 80) / 100; // 1.2 sand veil loss
+ else if (defAbility == ABILITY_SNOW_CLOAK && WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL)
+ calc = (calc * 80) / 100; // 1.2 snow cloak loss
+ else if (defAbility == ABILITY_TANGLED_FEET && gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
+ calc = (calc * 50) / 100; // 1.5 tangled feet loss
+
+ if (atkAbility == ABILITY_HUSTLE && IS_MOVE_PHYSICAL(move))
+ calc = (calc * 80) / 100; // 1.2 hustle loss
+
+ if (defHoldEffect == HOLD_EFFECT_EVASION_UP)
+ calc = (calc * (100 - defParam)) / 100;
+
+ if (atkHoldEffect == HOLD_EFFECT_WIDE_LENS)
+ calc = (calc * (100 + atkParam)) / 100;
+ else if (atkHoldEffect == HOLD_EFFECT_ZOOM_LENS && GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef));
+ calc = (calc * (100 + atkParam)) / 100;
+
+ if (gProtectStructs[battlerAtk].usedMicleBerry)
+ {
+ gProtectStructs[battlerAtk].usedMicleBerry = FALSE;
+ if (atkAbility == ABILITY_RIPEN)
+ calc = (calc * 140) / 100; // ripen gives 40% acc boost
+ else
+ calc = (calc * 120) / 100; // 20% acc boost
+ }
+
+ if (gFieldStatuses & STATUS_FIELD_GRAVITY)
+ calc = (calc * 5) / 3; // 1.66 Gravity acc boost
+
+ return calc;
+}
+
static void Cmd_accuracycheck(void)
{
- u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
+ u16 type, move = T2_READ_16(gBattlescriptCurrInstr + 5);
+ u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move);
- if (move == NO_ACC_CALC || move == NO_ACC_CALC_CHECK_LOCK_ON)
+ if (move == ACC_CURR_MOVE)
+ move = gCurrentMove;
+
+ if (move == NO_ACC_CALC_CHECK_LOCK_ON)
{
- if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == NO_ACC_CALC_CHECK_LOCK_ON && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
+ if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
gBattlescriptCurrInstr += 7;
- else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ else if (gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else if (!JumpIfMoveAffectedByProtect(0))
gBattlescriptCurrInstr += 7;
}
else
{
- u8 type, moveAcc, holdEffect, param;
- s8 buff;
- u16 calc;
-
- if (move == ACC_CURR_MOVE)
- move = gCurrentMove;
-
GET_MOVE_TYPE(move, type);
-
if (JumpIfMoveAffectedByProtect(move))
return;
if (AccuracyCalcHelper(move))
return;
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
- {
- u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
- buff = acc;
- }
- else
- {
- u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
- buff = acc + DEFAULT_STAT_STAGE - gBattleMons[gBattlerTarget].statStages[STAT_EVASION];
- }
-
- if (buff < MIN_STAT_STAGE)
- buff = MIN_STAT_STAGE;
- if (buff > MAX_STAT_STAGE)
- buff = MAX_STAT_STAGE;
-
- moveAcc = gBattleMoves[move].accuracy;
- // check Thunder on sunny weather
- if (WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_SUN && gBattleMoves[move].effect == EFFECT_THUNDER)
- moveAcc = 50;
-
- calc = sAccuracyStageRatios[buff].dividend * moveAcc;
- calc /= sAccuracyStageRatios[buff].divisor;
-
- if (gBattleMons[gBattlerAttacker].ability == ABILITY_COMPOUND_EYES)
- calc = (calc * 130) / 100; // 1.3 compound eyes boost
- if (WEATHER_HAS_EFFECT && gBattleMons[gBattlerTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & B_WEATHER_SANDSTORM)
- calc = (calc * 80) / 100; // 1.2 sand veil loss
- if (gBattleMons[gBattlerAttacker].ability == ABILITY_HUSTLE && IS_TYPE_PHYSICAL(type))
- calc = (calc * 80) / 100; // 1.2 hustle loss
-
- if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
- {
- holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
- param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
- param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
- }
-
- gPotentialItemEffectBattler = gBattlerTarget;
-
- if (holdEffect == HOLD_EFFECT_EVASION_UP)
- calc = (calc * (100 - param)) / 100;
-
// final calculation
- if ((Random() % 100 + 1) > calc)
+ if ((Random() % 100 + 1) > GetTotalAccuracy(gBattlerAttacker, gBattlerTarget, move, GetBattlerAbility(gBattlerAttacker), GetBattlerAbility(gBattlerTarget),
+ GetBattlerHoldEffect(gBattlerAttacker, TRUE), GetBattlerHoldEffect(gBattlerTarget, TRUE)))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
+ if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_BLUNDER_POLICY)
+ gBattleStruct->blunderPolicy = TRUE; // Only activates from missing through acc/evasion checks
+
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE &&
- (gBattleMoves[move].target == MOVE_TARGET_BOTH || gBattleMoves[move].target == MOVE_TARGET_FOES_AND_ALLY))
+ (moveTarget == MOVE_TARGET_BOTH || moveTarget == MOVE_TARGET_FOES_AND_ALLY))
gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_ATK;
else
gBattleCommunication[MISS_TYPE] = B_MSG_MISSED;
- CheckWonderGuardAndLevitate();
+ if (gBattleMoves[move].power)
+ CalcTypeEffectivenessMultiplier(move, type, gBattlerAttacker, gBattlerTarget, TRUE);
}
JumpIfMoveFailed(7, move);
}
@@ -1190,7 +1782,8 @@ static void Cmd_accuracycheck(void)
static void Cmd_attackstring(void)
{
if (gBattleControllerExecFlags)
- return;
+ return;
+
if (!(gHitMarker & (HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED)))
{
PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker);
@@ -1202,24 +1795,32 @@ static void Cmd_attackstring(void)
static void Cmd_ppreduce(void)
{
- s32 ppToDeduct = 1;
+ s32 i, ppToDeduct = 1;
if (gBattleControllerExecFlags)
return;
if (!gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure)
{
- switch (gBattleMoves[gCurrentMove].target)
+ switch (GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove))
{
case MOVE_TARGET_FOES_AND_ALLY:
- ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBattlerAttacker, ABILITY_PRESSURE, 0, 0);
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (i != gBattlerAttacker && IsBattlerAlive(i))
+ ppToDeduct += (GetBattlerAbility(i) == ABILITY_PRESSURE);
+ }
break;
case MOVE_TARGET_BOTH:
case MOVE_TARGET_OPPONENTS_FIELD:
- ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_PRESSURE, 0, 0);
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i))
+ ppToDeduct += (GetBattlerAbility(i) == ABILITY_PRESSURE);
+ }
break;
default:
- if (gBattlerAttacker != gBattlerTarget && gBattleMons[gBattlerTarget].ability == ABILITY_PRESSURE)
+ if (gBattlerAttacker != gBattlerTarget && GetBattlerAbility(gBattlerTarget) == ABILITY_PRESSURE)
ppToDeduct++;
break;
}
@@ -1227,7 +1828,14 @@ static void Cmd_ppreduce(void)
if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBattlerAttacker].pp[gCurrMovePos])
{
- gProtectStructs[gBattlerAttacker].notFirstStrike = 1;
+ gProtectStructs[gBattlerAttacker].notFirstStrike = TRUE;
+ // For item Metronome, echoed voice
+ if (gCurrentMove == gLastResultingMoves[gBattlerAttacker]
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && !WasUnableToUseMove(gBattlerAttacker))
+ gBattleStruct->sameMoveTurns[gBattlerAttacker]++;
+ else
+ gBattleStruct->sameMoveTurns[gBattlerAttacker] = 0;
if (gBattleMons[gBattlerAttacker].pp[gCurrMovePos] > ppToDeduct)
gBattleMons[gBattlerAttacker].pp[gCurrMovePos] -= ppToDeduct;
@@ -1248,500 +1856,267 @@ static void Cmd_ppreduce(void)
gBattlescriptCurrInstr++;
}
+// The chance is 1/N for each stage.
+#if B_CRIT_CHANCE >= GEN_7
+ static const u8 sCriticalHitChance[] = {24, 8, 2, 1, 1};
+#elif B_CRIT_CHANCE == GEN_6
+ static const u8 sCriticalHitChance[] = {16, 8, 2, 1, 1};
+#else
+ static const u8 sCriticalHitChance[] = {16, 8, 4, 3, 2}; // Gens 2,3,4,5
+#endif // B_CRIT_CHANCE
+
+#define BENEFITS_FROM_LEEK(battler, holdEffect)((holdEffect == HOLD_EFFECT_LEEK) && (GET_BASE_SPECIES_ID(gBattleMons[battler].species) == SPECIES_FARFETCHD || gBattleMons[battler].species == SPECIES_SIRFETCHD))
+s32 CalcCritChanceStage(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recordAbility)
+{
+ s32 critChance = 0;
+ u32 abilityAtk = GetBattlerAbility(gBattlerAttacker);
+ u32 abilityDef = GetBattlerAbility(gBattlerTarget);
+ u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE);
+
+ if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT
+ || gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT)
+ {
+ critChance = -1;
+ }
+ else if (abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR)
+ {
+ if (recordAbility)
+ RecordAbilityBattle(battlerDef, abilityDef);
+ critChance = -1;
+ }
+ else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS
+ || gBattleMoves[move].effect == EFFECT_ALWAYS_CRIT
+ || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)
+ || move == MOVE_SURGING_STRIKES)
+ {
+ critChance = -2;
+ }
+ else
+ {
+ critChance = 2 * ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0)
+ + ((gBattleMoves[gCurrentMove].flags & FLAG_HIGH_CRIT) != 0)
+ + (holdEffectAtk == HOLD_EFFECT_SCOPE_LENS)
+ + 2 * (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBattlerAttacker].species == SPECIES_CHANSEY)
+ + 2 * BENEFITS_FROM_LEEK(battlerAtk, holdEffectAtk)
+ + (abilityAtk == ABILITY_SUPER_LUCK);
+
+ if (critChance >= ARRAY_COUNT(sCriticalHitChance))
+ critChance = ARRAY_COUNT(sCriticalHitChance) - 1;
+ }
+
+ return critChance;
+}
+#undef BENEFITS_FROM_LEEK
+
+s8 GetInverseCritChance(u8 battlerAtk, u8 battlerDef, u32 move)
+{
+ s32 critChanceIndex = CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE);
+ if(critChanceIndex < 0)
+ return -1;
+ else
+ return sCriticalHitChance[critChanceIndex];
+}
+
static void Cmd_critcalc(void)
{
- u8 holdEffect;
- u16 item, critChance;
-
- item = gBattleMons[gBattlerAttacker].item;
-
- if (item == ITEM_ENIGMA_BERRY)
- holdEffect = gEnigmaBerries[gBattlerAttacker].holdEffect;
- else
- holdEffect = ItemId_GetHoldEffect(item);
-
+ u16 partySlot;
+ s32 critChance = CalcCritChanceStage(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE);
gPotentialItemEffectBattler = gBattlerAttacker;
- critChance = 2 * ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0)
- + (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL)
- + (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK)
- + (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK)
- + (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL)
- + (holdEffect == HOLD_EFFECT_SCOPE_LENS)
- + 2 * (holdEffect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBattlerAttacker].species == SPECIES_CHANSEY)
- + 2 * (holdEffect == HOLD_EFFECT_STICK && gBattleMons[gBattlerAttacker].species == SPECIES_FARFETCHD);
-
- if (critChance >= ARRAY_COUNT(sCriticalHitChance))
- critChance = ARRAY_COUNT(sCriticalHitChance) - 1;
-
- if ((gBattleMons[gBattlerTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBattlerTarget].ability != ABILITY_SHELL_ARMOR)
- && !(gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT)
- && !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE))
- && !(Random() % sCriticalHitChance[critChance]))
- gCritMultiplier = 2;
+ if (gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE))
+ gIsCriticalHit = FALSE;
+ else if (critChance == -1)
+ gIsCriticalHit = FALSE;
+ else if (critChance == -2)
+ gIsCriticalHit = TRUE;
+ else if (Random() % sCriticalHitChance[critChance] == 0)
+ gIsCriticalHit = TRUE;
else
- gCritMultiplier = 1;
+ gIsCriticalHit = FALSE;
+
+ // Counter for EVO_CRITICAL_HITS.
+ partySlot = gBattlerPartyIndexes[gBattlerAttacker];
+ if (gIsCriticalHit && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER
+ && !(gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gBattlerAttacker) == B_POSITION_PLAYER_LEFT))
+ gPartyCriticalHits[partySlot]++;
gBattlescriptCurrInstr++;
}
static void Cmd_damagecalc(void)
{
- u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)];
- gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove,
- sideStatus, gDynamicBasePower,
- gBattleStruct->dynamicMoveType, gBattlerAttacker, gBattlerTarget);
- gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleScripting.dmgMultiplier;
-
- if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
- gBattleMoveDamage *= 2;
- if (gProtectStructs[gBattlerAttacker].helpingHand)
- gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+ u8 moveType;
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE);
gBattlescriptCurrInstr++;
}
-void AI_CalcDmg(u8 attacker, u8 defender)
-{
- u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(defender)];
- gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[attacker], &gBattleMons[defender], gCurrentMove,
- sideStatus, gDynamicBasePower,
- gBattleStruct->dynamicMoveType, attacker, defender);
- gDynamicBasePower = 0;
- gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleScripting.dmgMultiplier;
-
- if (gStatuses3[attacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
- gBattleMoveDamage *= 2;
- if (gProtectStructs[attacker].helpingHand)
- gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
-}
-
-static void ModulateDmgByType(u8 multiplier)
-{
- gBattleMoveDamage = gBattleMoveDamage * multiplier / 10;
- if (gBattleMoveDamage == 0 && multiplier != 0)
- gBattleMoveDamage = 1;
-
- switch (multiplier)
- {
- case TYPE_MUL_NO_EFFECT:
- gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
- gMoveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
- gMoveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
- break;
- case TYPE_MUL_NOT_EFFECTIVE:
- if (gBattleMoves[gCurrentMove].power && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
- {
- if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
- gMoveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
- else
- gMoveResultFlags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
- }
- break;
- case TYPE_MUL_SUPER_EFFECTIVE:
- if (gBattleMoves[gCurrentMove].power && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
- {
- if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
- gMoveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
- else
- gMoveResultFlags |= MOVE_RESULT_SUPER_EFFECTIVE;
- }
- break;
- }
-}
-
static void Cmd_typecalc(void)
{
- s32 i = 0;
u8 moveType;
- if (gCurrentMove == MOVE_STRUGGLE)
- {
- gBattlescriptCurrInstr++;
- return;
- }
-
GET_MOVE_TYPE(gCurrentMove, moveType);
-
- // check stab
- if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType))
- {
- gBattleMoveDamage = gBattleMoveDamage * 15;
- gBattleMoveDamage = gBattleMoveDamage / 10;
- }
-
- if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
- {
- gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
- gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
- gLastLandedMoves[gBattlerTarget] = 0;
- gLastHitByType[gBattlerTarget] = 0;
- gBattleCommunication[MISS_TYPE] = B_MSG_GROUND_MISS;
- RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
- }
- else
- {
- while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
- {
- if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
- {
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
- break;
- i += 3;
- continue;
- }
- else if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
- {
- // check type1
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1)
- ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i));
- // check type2
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 &&
- gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2)
- ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i));
- }
- i += 3;
- }
- }
-
- if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2
- && (!(gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) || ((gMoveResultFlags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
- && gBattleMoves[gCurrentMove].power)
- {
- gLastUsedAbility = ABILITY_WONDER_GUARD;
- gMoveResultFlags |= MOVE_RESULT_MISSED;
- gLastLandedMoves[gBattlerTarget] = 0;
- gLastHitByType[gBattlerTarget] = 0;
- gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_DMG;
- RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
- }
- if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
- gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
+ CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, gBattlerAttacker, gBattlerTarget, TRUE);
gBattlescriptCurrInstr++;
}
-static void CheckWonderGuardAndLevitate(void)
+static void Cmd_adjustdamage(void)
{
- u8 flags = 0;
- s32 i = 0;
- u8 moveType;
-
- if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power)
- return;
+ u8 holdEffect, param;
+ u32 moveType;
GET_MOVE_TYPE(gCurrentMove, moveType);
- if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
- {
- gLastUsedAbility = ABILITY_LEVITATE;
- gBattleCommunication[MISS_TYPE] = B_MSG_GROUND_MISS;
- RecordAbilityBattle(gBattlerTarget, ABILITY_LEVITATE);
- return;
- }
+ if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))
+ goto END;
+ if (DoesDisguiseBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))
+ goto END;
+ if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
+ goto END;
- while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
- {
- if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
- {
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
- break;
- i += 3;
- continue;
- }
- if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
- {
- // check no effect
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1
- && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
- {
- gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
- gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
- }
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 &&
- gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 &&
- TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
- {
- gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
- gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
- }
-
- // check super effective
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1 && TYPE_EFFECT_MULTIPLIER(i) == 20)
- flags |= 1;
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
- && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
- && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE)
- flags |= 1;
-
- // check not very effective
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1 && TYPE_EFFECT_MULTIPLIER(i) == 5)
- flags |= 2;
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
- && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
- && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE)
- flags |= 2;
- }
- i += 3;
- }
-
- if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2)
- {
- if (((flags & 2) || !(flags & 1)) && gBattleMoves[gCurrentMove].power)
- {
- gLastUsedAbility = ABILITY_WONDER_GUARD;
- gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_DMG;
- RecordAbilityBattle(gBattlerTarget, ABILITY_WONDER_GUARD);
- }
- }
-}
-
-static void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags) // same as ModulateDmgByType except different arguments
-{
- gBattleMoveDamage = gBattleMoveDamage * multiplier / 10;
- if (gBattleMoveDamage == 0 && multiplier != 0)
- gBattleMoveDamage = 1;
-
- switch (multiplier)
- {
- case TYPE_MUL_NO_EFFECT:
- *flags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
- *flags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
- *flags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
- break;
- case TYPE_MUL_NOT_EFFECTIVE:
- if (gBattleMoves[move].power && !(*flags & MOVE_RESULT_NO_EFFECT))
- {
- if (*flags & MOVE_RESULT_SUPER_EFFECTIVE)
- *flags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
- else
- *flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
- }
- break;
- case TYPE_MUL_SUPER_EFFECTIVE:
- if (gBattleMoves[move].power && !(*flags & MOVE_RESULT_NO_EFFECT))
- {
- if (*flags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
- *flags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
- else
- *flags |= MOVE_RESULT_SUPER_EFFECTIVE;
- }
- break;
- }
-}
-
-u8 TypeCalc(u16 move, u8 attacker, u8 defender)
-{
- s32 i = 0;
- u8 flags = 0;
- u8 moveType;
-
- if (move == MOVE_STRUGGLE)
- return 0;
-
- moveType = gBattleMoves[move].type;
-
- // check stab
- if (IS_BATTLER_OF_TYPE(attacker, moveType))
- {
- gBattleMoveDamage = gBattleMoveDamage * 15;
- gBattleMoveDamage = gBattleMoveDamage / 10;
- }
-
- if (gBattleMons[defender].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
- {
- flags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
- }
- else
- {
- while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
- {
- if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
- {
- if (gBattleMons[defender].status2 & STATUS2_FORESIGHT)
- break;
- i += 3;
- continue;
- }
-
- else if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
- {
- // check type1
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[defender].type1)
- ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
- // check type2
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[defender].type2 &&
- gBattleMons[defender].type1 != gBattleMons[defender].type2)
- ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
- }
- i += 3;
- }
- }
-
- if (gBattleMons[defender].ability == ABILITY_WONDER_GUARD && !(flags & MOVE_RESULT_MISSED)
- && AttacksThisTurn(attacker, move) == 2
- && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
- && gBattleMoves[move].power)
- {
- flags |= MOVE_RESULT_MISSED;
- }
- return flags;
-}
-
-u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility)
-{
- s32 i = 0;
- u8 flags = 0;
- u8 type1 = gBaseStats[targetSpecies].type1, type2 = gBaseStats[targetSpecies].type2;
- u8 moveType;
-
- if (move == MOVE_STRUGGLE)
- return 0;
-
- moveType = gBattleMoves[move].type;
-
- if (targetAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND)
- {
- flags = MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE;
- }
- else
- {
- while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
- {
- if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
- {
- i += 3;
- continue;
- }
- if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
- {
- // check type1
- if (TYPE_EFFECT_DEF_TYPE(i) == type1)
- ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
- // check type2
- if (TYPE_EFFECT_DEF_TYPE(i) == type2 && type1 != type2)
- ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
- }
- i += 3;
- }
- }
- if (targetAbility == ABILITY_WONDER_GUARD
- && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
- && gBattleMoves[move].power)
- flags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
- return flags;
-}
-
-// Multiplies the damage by a random factor between 85% to 100% inclusive
-static inline void ApplyRandomDmgMultiplier(void)
-{
- u16 rand = Random();
- u16 randPercent = 100 - (rand % 16);
-
- if (gBattleMoveDamage != 0)
- {
- gBattleMoveDamage *= randPercent;
- gBattleMoveDamage /= 100;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- }
-}
-
-static void Unused_ApplyRandomDmgMultiplier(void)
-{
- ApplyRandomDmgMultiplier();
-}
-
-static void Cmd_adjustnormaldamage(void)
-{
- u8 holdEffect, param;
-
- ApplyRandomDmgMultiplier();
-
- if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
- {
- holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
- param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
- param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
- }
+ holdEffect = GetBattlerHoldEffect(gBattlerTarget, TRUE);
+ param = GetBattlerHoldEffectParam(gBattlerTarget);
gPotentialItemEffectBattler = gBattlerTarget;
if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
{
RecordItemEffectBattle(gBattlerTarget, holdEffect);
- gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ gSpecialStatuses[gBattlerTarget].focusBanded = TRUE;
}
- if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
- && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
- && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
+ #if B_STURDY >= GEN_5
+ else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STURDY && BATTLER_MAX_HP(gBattlerTarget))
{
- gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
- if (gProtectStructs[gBattlerTarget].endured)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
- }
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
- gLastUsedItem = gBattleMons[gBattlerTarget].item;
- }
+ RecordAbilityBattle(gBattlerTarget, ABILITY_STURDY);
+ gSpecialStatuses[gBattlerTarget].sturdied = TRUE;
}
- gBattlescriptCurrInstr++;
-}
-
-static void Cmd_adjustnormaldamage2(void) // The same as adjustnormaldamage except it doesn't check for false swipe move effect.
-{
- u8 holdEffect, param;
-
- ApplyRandomDmgMultiplier();
-
- if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
- {
- holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
- param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
- param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
- }
-
- gPotentialItemEffectBattler = gBattlerTarget;
-
- if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+ #endif
+ else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && BATTLER_MAX_HP(gBattlerTarget))
{
RecordItemEffectBattle(gBattlerTarget, holdEffect);
- gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ gSpecialStatuses[gBattlerTarget].focusSashed = TRUE;
}
- if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
- && (gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
- && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
+
+ if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE
+ && !gProtectStructs[gBattlerTarget].endured
+ && !gSpecialStatuses[gBattlerTarget].focusBanded
+ && !gSpecialStatuses[gBattlerTarget].focusSashed
+ && !gSpecialStatuses[gBattlerTarget].sturdied)
+ goto END;
+
+ // Handle reducing the dmg to 1 hp.
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+
+ if (gProtectStructs[gBattlerTarget].endured)
{
- gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
- if (gProtectStructs[gBattlerTarget].endured)
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded || gSpecialStatuses[gBattlerTarget].focusSashed)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].sturdied)
+ {
+ gMoveResultFlags |= MOVE_RESULT_STURDIED;
+ gLastUsedAbility = ABILITY_STURDY;
+ }
+
+END:
+ gBattlescriptCurrInstr++;
+
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMoveDamage >= 1)
+ gSpecialStatuses[gBattlerAttacker].damagedMons |= gBitTable[gBattlerTarget];
+
+ // Check gems and damage reducing berries.
+ if (gSpecialStatuses[gBattlerTarget].berryReduced
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerTarget].item)
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryReduceDmg;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
+ if (gSpecialStatuses[gBattlerAttacker].gemBoost
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].item)
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_GemActivates;
+ gLastUsedItem = gBattleMons[gBattlerAttacker].item;
+ }
+
+ // B_WEATHER_STRONG_WINDS prints a string when it's about to reduce the power
+ // of a move that is Super Effective against a Flying-type Pokémon.
+ if (gBattleWeather & B_WEATHER_STRONG_WINDS)
+ {
+ if ((gBattleMons[gBattlerTarget].type1 == TYPE_FLYING
+ && GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type1) >= UQ_4_12(2.0))
+ || (gBattleMons[gBattlerTarget].type2 == TYPE_FLYING
+ && GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type2) >= UQ_4_12(2.0))
+ || (gBattleMons[gBattlerTarget].type3 == TYPE_FLYING
+ && GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type3) >= UQ_4_12(2.0)))
{
- gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
- }
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
- gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gBattlerAbility = gBattlerTarget;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AttackWeakenedByStrongWinds;
}
}
- gBattlescriptCurrInstr++;
}
-static void Cmd_attackanimation(void)
+static void Cmd_multihitresultmessage(void)
{
if (gBattleControllerExecFlags)
return;
- if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE))
+ if (!(gMoveResultFlags & MOVE_RESULT_FAILED) && !(gMoveResultFlags & MOVE_RESULT_FOE_ENDURED))
+ {
+ if (gMoveResultFlags & MOVE_RESULT_STURDIED)
+ {
+ gMoveResultFlags &= ~(MOVE_RESULT_STURDIED | MOVE_RESULT_FOE_HUNG_ON);
+ gSpecialStatuses[gBattlerTarget].sturdied = FALSE; // Delete this line to make Sturdy last for the duration of the whole move turn.
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SturdiedMsg;
+ return;
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_FOE_HUNG_ON)
+ {
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gPotentialItemEffectBattler = gBattlerTarget;
+ gMoveResultFlags &= ~(MOVE_RESULT_STURDIED | MOVE_RESULT_FOE_HUNG_ON);
+ gSpecialStatuses[gBattlerTarget].focusBanded = FALSE; // Delete this line to make Focus Band last for the duration of the whole move turn.
+ gSpecialStatuses[gBattlerTarget].focusSashed = FALSE; // Delete this line to make Focus Sash last for the duration of the whole move turn.
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_HangedOnMsg;
+ return;
+ }
+ }
+ gBattlescriptCurrInstr++;
+
+ // Print berry reducing message after result message.
+ if (gSpecialStatuses[gBattlerTarget].berryReduced
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gSpecialStatuses[gBattlerTarget].berryReduced = FALSE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString;
+ }
+}
+
+static void Cmd_attackanimation(void)
+{
+ u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove);
+
+ if (gBattleControllerExecFlags)
+ return;
+
+ if ((gHitMarker & HITMARKER_NO_ANIMATIONS)
+ && gCurrentMove != MOVE_TRANSFORM
+ && gCurrentMove != MOVE_SUBSTITUTE
+ // In a wild double battle gotta use the teleport animation if two wild pokemon are alive.
+ && !(gCurrentMove == MOVE_TELEPORT && WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker))))
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_Pausex20;
@@ -1750,9 +2125,9 @@ static void Cmd_attackanimation(void)
}
else
{
- if ((gBattleMoves[gCurrentMove].target & MOVE_TARGET_BOTH
- || gBattleMoves[gCurrentMove].target & MOVE_TARGET_FOES_AND_ALLY
- || gBattleMoves[gCurrentMove].target & MOVE_TARGET_DEPENDS)
+ if ((moveTarget & MOVE_TARGET_BOTH
+ || moveTarget & MOVE_TARGET_FOES_AND_ALLY
+ || moveTarget & MOVE_TARGET_DEPENDS)
&& gBattleScripting.animTargetsHit)
{
gBattlescriptCurrInstr++;
@@ -1777,8 +2152,8 @@ static void Cmd_attackanimation(void)
multihit = gMultiHitCounter;
BtlController_EmitMoveAnimation(BUFFER_A, gCurrentMove, gBattleScripting.animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBattlerAttacker].friendship, &gDisableStructs[gBattlerAttacker], multihit);
- gBattleScripting.animTurn += 1;
- gBattleScripting.animTargetsHit += 1;
+ gBattleScripting.animTurn++;
+ gBattleScripting.animTargetsHit++;
MarkBattlerForControllerExec(gBattlerAttacker);
gBattlescriptCurrInstr++;
}
@@ -1801,25 +2176,17 @@ static void Cmd_healthbarupdate(void)
if (gBattleControllerExecFlags)
return;
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE))
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ if (DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove) && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
{
PrepareStringBattle(STRINGID_SUBSTITUTEDAMAGED, gActiveBattler);
}
- else
+ else if (!DoesDisguiseBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove))
{
- s16 healthValue;
-
- s32 currDmg = gBattleMoveDamage;
- s32 maxPossibleDmgValue = 10000; // not present in R/S, ensures that huge damage values don't change sign
-
- if (currDmg <= maxPossibleDmgValue)
- healthValue = currDmg;
- else
- healthValue = maxPossibleDmgValue;
+ s16 healthValue = min(gBattleMoveDamage, 10000); // Max damage (10000) not present in R/S, ensures that huge damage values don't change sign
BtlController_EmitHealthBarUpdate(BUFFER_A, healthValue);
MarkBattlerForControllerExec(gActiveBattler);
@@ -1846,10 +2213,10 @@ static void Cmd_datahpupdate(void)
else
moveType = gBattleMoves[gCurrentMove].type;
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE))
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ if (DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove) && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
{
if (gDisableStructs[gActiveBattler].substituteHP >= gBattleMoveDamage)
{
@@ -1874,6 +2241,12 @@ static void Cmd_datahpupdate(void)
return;
}
}
+ else if (DoesDisguiseBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove))
+ {
+ gBattleMons[gActiveBattler].species = SPECIES_MIMIKYU_BUSTED;
+ BattleScriptPush(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = BattleScript_TargetFormChange;
+ }
else
{
gHitMarker &= ~HITMARKER_IGNORE_SUBSTITUTE;
@@ -1913,7 +2286,7 @@ static void Cmd_datahpupdate(void)
if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE))
gSpecialStatuses[gActiveBattler].dmg = gHpDealt;
- if (IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE) && gCurrentMove != MOVE_PAIN_SPLIT)
+ if (IS_MOVE_PHYSICAL(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE) && gCurrentMove != MOVE_PAIN_SPLIT)
{
gProtectStructs[gActiveBattler].physicalDmg = gHpDealt;
gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt;
@@ -1928,7 +2301,7 @@ static void Cmd_datahpupdate(void)
gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerTarget;
}
}
- else if (!IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE))
+ else if (!IS_MOVE_PHYSICAL(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE))
{
gProtectStructs[gActiveBattler].specialDmg = gHpDealt;
gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt;
@@ -1962,7 +2335,7 @@ static void Cmd_critmessage(void)
{
if (gBattleControllerExecFlags == 0)
{
- if (gCritMultiplier == 2 && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ if (gIsCriticalHit == TRUE && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
{
PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker);
gBattleCommunication[MSG_DISPLAY] = 1;
@@ -1979,7 +2352,7 @@ static void Cmd_effectivenesssound(void)
gActiveBattler = gBattlerTarget;
if (!(gMoveResultFlags & MOVE_RESULT_MISSED))
{
- switch (gMoveResultFlags & (u8)(~MOVE_RESULT_MISSED))
+ switch (gMoveResultFlags & ~MOVE_RESULT_MISSED)
{
case MOVE_RESULT_SUPER_EFFECTIVE:
BtlController_EmitPlaySE(BUFFER_A, SE_SUPER_EFFECTIVE);
@@ -1996,6 +2369,7 @@ static void Cmd_effectivenesssound(void)
case MOVE_RESULT_FOE_ENDURED:
case MOVE_RESULT_ONE_HIT_KO:
case MOVE_RESULT_FOE_HUNG_ON:
+ case MOVE_RESULT_STURDIED:
default:
if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
{
@@ -2027,13 +2401,15 @@ static void Cmd_resultmessage(void)
if (gMoveResultFlags & MOVE_RESULT_MISSED && (!(gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) || gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK))
{
+ if (gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK) // Wonder Guard or Levitate - show the ability pop-up
+ CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0);
stringId = gMissStringIds[gBattleCommunication[MISS_TYPE]];
gBattleCommunication[MSG_DISPLAY] = 1;
}
else
{
gBattleCommunication[MSG_DISPLAY] = 1;
- switch (gMoveResultFlags & (u8)(~MOVE_RESULT_MISSED))
+ switch (gMoveResultFlags & ~MOVE_RESULT_MISSED)
{
case MOVE_RESULT_SUPER_EFFECTIVE:
stringId = STRINGID_SUPEREFFECTIVE;
@@ -2058,7 +2434,7 @@ static void Cmd_resultmessage(void)
gPotentialItemEffectBattler = gBattlerTarget;
gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_FocusBandActivates;
+ gBattlescriptCurrInstr = BattleScript_HangedOnMsg;
return;
default:
if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
@@ -2074,6 +2450,14 @@ static void Cmd_resultmessage(void)
gBattlescriptCurrInstr = BattleScript_OneHitKOMsg;
return;
}
+ else if (gMoveResultFlags & MOVE_RESULT_STURDIED)
+ {
+ gMoveResultFlags &= ~(MOVE_RESULT_STURDIED | MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
+ gSpecialStatuses[gBattlerTarget].sturdied = FALSE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SturdiedMsg;
+ return;
+ }
else if (gMoveResultFlags & MOVE_RESULT_FOE_ENDURED)
{
gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
@@ -2087,7 +2471,7 @@ static void Cmd_resultmessage(void)
gPotentialItemEffectBattler = gBattlerTarget;
gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_FocusBandActivates;
+ gBattlescriptCurrInstr = BattleScript_HangedOnMsg;
return;
}
else if (gMoveResultFlags & MOVE_RESULT_FAILED)
@@ -2105,6 +2489,16 @@ static void Cmd_resultmessage(void)
PrepareStringBattle(stringId, gBattlerAttacker);
gBattlescriptCurrInstr++;
+
+ // Print berry reducing message after result message.
+ if (gSpecialStatuses[gBattlerTarget].berryReduced
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gSpecialStatuses[gBattlerTarget].berryReduced = FALSE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString;
+ }
}
static void Cmd_printstring(void)
@@ -2112,8 +2506,9 @@ static void Cmd_printstring(void)
if (gBattleControllerExecFlags == 0)
{
u16 var = T2_READ_16(gBattlescriptCurrInstr + 1);
- PrepareStringBattle(var, gBattlerAttacker);
+
gBattlescriptCurrInstr += 3;
+ PrepareStringBattle(var, gBattlerAttacker);
gBattleCommunication[MSG_DISPLAY] = 1;
}
}
@@ -2154,12 +2549,11 @@ static void Cmd_printfromtable(void)
{
if (gBattleControllerExecFlags == 0)
{
- const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1);
ptr += gBattleCommunication[MULTISTRING_CHOOSER];
- PrepareStringBattle(*ptr, gBattlerAttacker);
-
gBattlescriptCurrInstr += 5;
+ PrepareStringBattle(*ptr, gBattlerAttacker);
gBattleCommunication[MSG_DISPLAY] = 1;
}
}
@@ -2168,7 +2562,7 @@ static void Cmd_printselectionstringfromtable(void)
{
if (gBattleControllerExecFlags == 0)
{
- const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1);
ptr += gBattleCommunication[MULTISTRING_CHOOSER];
gActiveBattler = gBattlerAttacker;
@@ -2191,29 +2585,74 @@ u8 GetBattlerTurnOrderNum(u8 battlerId)
return i;
}
+static void CheckSetUnburden(u8 battlerId)
+{
+ if (GetBattlerAbility(battlerId) == ABILITY_UNBURDEN)
+ {
+ gBattleResources->flags->flags[battlerId] |= RESOURCE_FLAG_UNBURDEN;
+ RecordAbilityBattle(battlerId, ABILITY_UNBURDEN);
+ }
+}
+
+// battlerStealer steals the item of battlerItem
+void StealTargetItem(u8 battlerStealer, u8 battlerItem)
+{
+ gLastUsedItem = gBattleMons[battlerItem].item;
+ gBattleMons[battlerItem].item = 0;
+
+ RecordItemEffectBattle(battlerItem, 0);
+ RecordItemEffectBattle(battlerStealer, ItemId_GetHoldEffect(gLastUsedItem));
+ gBattleMons[battlerStealer].item = gLastUsedItem;
+
+ CheckSetUnburden(battlerItem);
+ gBattleResources->flags->flags[battlerStealer] &= ~RESOURCE_FLAG_UNBURDEN;
+
+ gActiveBattler = battlerStealer;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gLastUsedItem), &gLastUsedItem); // set attacker item
+ MarkBattlerForControllerExec(battlerStealer);
+
+ gActiveBattler = battlerItem;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[battlerItem].item); // remove target item
+ MarkBattlerForControllerExec(battlerItem);
+
+ gBattleStruct->choicedMove[battlerItem] = 0;
+
+ TrySaveExchangedItem(battlerItem, gLastUsedItem);
+}
+
#define INCREMENT_RESET_RETURN \
{ \
gBattlescriptCurrInstr++; \
- gBattleCommunication[MOVE_EFFECT_BYTE] = 0; \
+ gBattleScripting.moveEffect = 0; \
return; \
}
#define RESET_RETURN \
{ \
- gBattleCommunication[MOVE_EFFECT_BYTE] = 0; \
+ gBattleScripting.moveEffect = 0; \
return; \
}
-void SetMoveEffect(bool8 primary, u8 certain)
+void SetMoveEffect(bool32 primary, u32 certain)
{
+ s32 i, byTwo, affectsUser = 0;
bool32 statusChanged = FALSE;
- u8 affectsUser = 0; // 0x40 otherwise
- bool32 noSunCanFreeze = TRUE;
+ bool32 mirrorArmorReflected = (GetBattlerAbility(gBattlerTarget) == ABILITY_MIRROR_ARMOR);
+ u32 flags = 0;
+ u16 battlerAbility;
+
+ switch (gBattleScripting.moveEffect) // Set move effects which happen later on
+ {
+ case MOVE_EFFECT_KNOCK_OFF:
+ gBattleStruct->moveEffect2 = gBattleScripting.moveEffect;
+ gBattlescriptCurrInstr++;
+ return;
+ }
- if (gBattleCommunication[MOVE_EFFECT_BYTE] & MOVE_EFFECT_AFFECTS_USER)
+ if (gBattleScripting.moveEffect & MOVE_EFFECT_AFFECTS_USER)
{
gEffectBattler = gBattlerAttacker; // battlerId that effects get applied on
- gBattleCommunication[MOVE_EFFECT_BYTE] &= ~MOVE_EFFECT_AFFECTS_USER;
+ gBattleScripting.moveEffect &= ~MOVE_EFFECT_AFFECTS_USER;
affectsUser = MOVE_EFFECT_AFFECTS_USER;
gBattleScripting.battler = gBattlerTarget; // theoretically the attacker
}
@@ -2223,52 +2662,56 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleScripting.battler = gBattlerAttacker;
}
- if (gBattleMons[gEffectBattler].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
- && !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9)
+ battlerAbility = GetBattlerAbility(gEffectBattler);
+
+ // Just in case this flag is still set
+ gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN;
+
+ if (battlerAbility == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ && !primary && gBattleScripting.moveEffect <= 9)
INCREMENT_RESET_RETURN
if (gSideStatuses[GET_BATTLER_SIDE(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
- && !primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7)
+ && !primary && gBattleScripting.moveEffect <= 7)
+ INCREMENT_RESET_RETURN
+
+ if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER)
INCREMENT_RESET_RETURN
if (gBattleMons[gEffectBattler].hp == 0
- && gBattleCommunication[MOVE_EFFECT_BYTE] != MOVE_EFFECT_PAYDAY
- && gBattleCommunication[MOVE_EFFECT_BYTE] != MOVE_EFFECT_STEAL_ITEM)
+ && gBattleScripting.moveEffect != MOVE_EFFECT_PAYDAY
+ && gBattleScripting.moveEffect != MOVE_EFFECT_STEAL_ITEM)
INCREMENT_RESET_RETURN
- if (gBattleMons[gEffectBattler].status2 & STATUS2_SUBSTITUTE && affectsUser != MOVE_EFFECT_AFFECTS_USER)
+ if (DoesSubstituteBlockMove(gBattlerAttacker, gEffectBattler, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER)
INCREMENT_RESET_RETURN
- if (gBattleCommunication[MOVE_EFFECT_BYTE] <= PRIMARY_STATUS_MOVE_EFFECT)
+ if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) // status change
{
- switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ switch (sStatusFlagsForMoveEffects[gBattleScripting.moveEffect])
{
case STATUS1_SLEEP:
// check active uproar
- if (gBattleMons[gEffectBattler].ability != ABILITY_SOUNDPROOF)
+ if (battlerAbility != ABILITY_SOUNDPROOF)
{
for (gActiveBattler = 0;
gActiveBattler < gBattlersCount && !(gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR);
gActiveBattler++)
- {}
+ ;
}
else
gActiveBattler = gBattlersCount;
- if (gBattleMons[gEffectBattler].status1)
- break;
if (gActiveBattler != gBattlersCount)
break;
- if (gBattleMons[gEffectBattler].ability == ABILITY_VITAL_SPIRIT)
- break;
- if (gBattleMons[gEffectBattler].ability == ABILITY_INSOMNIA)
+ if (!CanSleep(gEffectBattler))
break;
CancelMultiTurnMoves(gEffectBattler);
statusChanged = TRUE;
break;
case STATUS1_POISON:
- if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY
+ if (battlerAbility == ABILITY_IMMUNITY
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
gLastUsedAbility = ABILITY_IMMUNITY;
@@ -2288,7 +2731,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
+ if (!CanPoisonType(gBattleScripting.battler, gEffectBattler)
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2298,23 +2741,20 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUS_HAD_NO_EFFECT;
RESET_RETURN
}
- if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON))
- break;
- if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
- break;
- if (gBattleMons[gEffectBattler].status1)
- break;
- if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY)
+ if (!CanBePoisoned(gBattleScripting.battler, gEffectBattler))
break;
statusChanged = TRUE;
break;
case STATUS1_BURN:
- if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL
- && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ if (gCurrentMove == MOVE_BURNING_JEALOUSY && !gProtectStructs[gEffectBattler].statRaised)
+ break;
+
+ if ((battlerAbility == ABILITY_WATER_VEIL || battlerAbility == ABILITY_WATER_BUBBLE)
+ && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
- gLastUsedAbility = ABILITY_WATER_VEIL;
- RecordAbilityBattle(gEffectBattler, ABILITY_WATER_VEIL);
+ gLastUsedAbility = battlerAbility;
+ RecordAbilityBattle(gEffectBattler, battlerAbility);
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_BRNPrevention;
@@ -2339,32 +2779,21 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUS_HAD_NO_EFFECT;
RESET_RETURN
}
- if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE))
- break;
- if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL)
- break;
- if (gBattleMons[gEffectBattler].status1)
+
+ if (!CanBeBurned(gEffectBattler))
break;
statusChanged = TRUE;
break;
case STATUS1_FREEZE:
- if (WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_SUN)
- noSunCanFreeze = FALSE;
- if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_ICE))
- break;
- if (gBattleMons[gEffectBattler].status1)
- break;
- if (noSunCanFreeze == FALSE)
- break;
- if (gBattleMons[gEffectBattler].ability == ABILITY_MAGMA_ARMOR)
+ if (!CanBeFrozen(gEffectBattler))
break;
CancelMultiTurnMoves(gEffectBattler);
statusChanged = TRUE;
break;
case STATUS1_PARALYSIS:
- if (gBattleMons[gEffectBattler].ability == ABILITY_LIMBER)
+ if (battlerAbility == ABILITY_LIMBER)
{
if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)
{
@@ -2388,13 +2817,25 @@ void SetMoveEffect(bool8 primary, u8 certain)
else
break;
}
- if (gBattleMons[gEffectBattler].status1)
+ if (!CanParalyzeType(gBattleScripting.battler, gEffectBattler)
+ && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
+ && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_PRLZPrevention;
+
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ RESET_RETURN
+ }
+ if (!CanParalyzeType(gBattleScripting.battler, gEffectBattler))
+ break;
+ if (!CanBeParalyzed(gEffectBattler))
break;
statusChanged = TRUE;
break;
case STATUS1_TOXIC_POISON:
- if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
+ if (battlerAbility == ABILITY_IMMUNITY && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
gLastUsedAbility = ABILITY_IMMUNITY;
RecordAbilityBattle(gEffectBattler, ABILITY_IMMUNITY);
@@ -2413,7 +2854,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
+ if (!CanPoisonType(gBattleScripting.battler, gEffectBattler)
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2425,11 +2866,8 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
if (gBattleMons[gEffectBattler].status1)
break;
- if (!IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) && !IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
+ if (CanBePoisoned(gBattleScripting.battler, gEffectBattler))
{
- if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY)
- break;
-
// It's redundant, because at this point we know the status1 value is 0.
gBattleMons[gEffectBattler].status1 &= ~STATUS1_TOXIC_POISON;
gBattleMons[gEffectBattler].status1 &= ~STATUS1_POISON;
@@ -2446,12 +2884,12 @@ void SetMoveEffect(bool8 primary, u8 certain)
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
- if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS1_SLEEP)
- gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN((Random() & 3) + 2); // 2-5 turns
+ if (sStatusFlagsForMoveEffects[gBattleScripting.moveEffect] == STATUS1_SLEEP)
+ gBattleMons[gEffectBattler].status1 |= (B_SLEEP_TURNS >= GEN_5) ? ((Random() % 3) + 2) : ((Random() % 4) + 3);
else
- gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect];
- gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect];
gActiveBattler = gEffectBattler;
BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].status1), &gBattleMons[gEffectBattler].status1);
@@ -2469,20 +2907,19 @@ void SetMoveEffect(bool8 primary, u8 certain)
// for synchronize
- if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_POISON
- || gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_TOXIC
- || gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_PARALYSIS
- || gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN)
+ if (gBattleScripting.moveEffect == MOVE_EFFECT_POISON
+ || gBattleScripting.moveEffect == MOVE_EFFECT_TOXIC
+ || gBattleScripting.moveEffect == MOVE_EFFECT_PARALYSIS
+ || gBattleScripting.moveEffect == MOVE_EFFECT_BURN)
{
- u8* synchronizeEffect = &gBattleStruct->synchronizeMoveEffect;
- *synchronizeEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
+ gBattleStruct->synchronizeMoveEffect = gBattleScripting.moveEffect;
gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT;
}
return;
}
else if (statusChanged == FALSE)
{
- gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattleScripting.moveEffect = 0;
gBattlescriptCurrInstr++;
return;
}
@@ -2490,35 +2927,46 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
else
{
- if (gBattleMons[gEffectBattler].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
+ if (gBattleMons[gEffectBattler].status2 & sStatusFlagsForMoveEffects[gBattleScripting.moveEffect])
{
gBattlescriptCurrInstr++;
}
else
{
u8 side;
- switch (gBattleCommunication[MOVE_EFFECT_BYTE])
+ switch (gBattleScripting.moveEffect)
{
case MOVE_EFFECT_CONFUSION:
- if (gBattleMons[gEffectBattler].ability == ABILITY_OWN_TEMPO
- || gBattleMons[gEffectBattler].status2 & STATUS2_CONFUSION)
+ if (!CanBeConfused(gEffectBattler))
{
gBattlescriptCurrInstr++;
}
else
{
gBattleMons[gEffectBattler].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); // 2-5 turns
-
- BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+
+ // If the confusion is activating due to being released from Sky Drop, go to "confused due to fatigue" script.
+ // Otherwise, do normal confusion script.
+ if(gCurrentMove == MOVE_SKY_DROP)
+ {
+ gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE);
+ gBattlerAttacker = gEffectBattler;
+ gBattlescriptCurrInstr = BattleScript_ThrashConfuses;
+ }
+ else
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect];
+ }
}
break;
case MOVE_EFFECT_FLINCH:
- if (gBattleMons[gEffectBattler].ability == ABILITY_INNER_FOCUS)
+ if (battlerAbility == ABILITY_INNER_FOCUS)
{
if (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)
{
gLastUsedAbility = ABILITY_INNER_FOCUS;
+ gBattlerAbility = gEffectBattler;
RecordAbilityBattle(gEffectBattler, ABILITY_INNER_FOCUS);
gBattlescriptCurrInstr = BattleScript_FlinchPrevention;
}
@@ -2530,20 +2978,19 @@ void SetMoveEffect(bool8 primary, u8 certain)
else
{
if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber)
- gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect];
gBattlescriptCurrInstr++;
}
break;
case MOVE_EFFECT_UPROAR:
if (!(gBattleMons[gEffectBattler].status2 & STATUS2_UPROAR))
{
-
gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
gLockedMoves[gEffectBattler] = gCurrentMove;
- gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN((Random() & 3) + 2); // 2-5 turns
+ gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN(B_UPROAR_TURNS >= GEN_5 ? 3 : ((Random() & 3) + 2));
BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect];
}
else
{
@@ -2559,7 +3006,15 @@ void SetMoveEffect(bool8 primary, u8 certain)
gPaydayMoney = 0xFFFF;
}
BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect];
+ break;
+ case MOVE_EFFECT_HAPPY_HOUR:
+ if (GET_BATTLER_SIDE(gBattlerAttacker) == B_SIDE_PLAYER && !gBattleStruct->moneyMultiplierMove)
+ {
+ gBattleStruct->moneyMultiplier *= 2;
+ gBattleStruct->moneyMultiplierMove = 1;
+ }
+ gBattlescriptCurrInstr++;
break;
case MOVE_EFFECT_TRI_ATTACK:
if (gBattleMons[gEffectBattler].status1)
@@ -2568,14 +3023,14 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
else
{
- gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3;
+ gBattleScripting.moveEffect = Random() % 3 + 3;
SetMoveEffect(FALSE, 0);
}
break;
case MOVE_EFFECT_CHARGING:
gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS;
gLockedMoves[gEffectBattler] = gCurrentMove;
- gProtectStructs[gEffectBattler].chargingTurn = 1;
+ gProtectStructs[gEffectBattler].chargingTurn = TRUE;
gBattlescriptCurrInstr++;
break;
case MOVE_EFFECT_WRAP:
@@ -2585,32 +3040,25 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
else
{
- gBattleMons[gEffectBattler].status2 |= STATUS2_WRAPPED_TURN((Random() & 3) + 3); // 3-6 turns
+ gBattleMons[gEffectBattler].status2 |= STATUS2_WRAPPED;
+ if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_GRIP_CLAW)
+ gDisableStructs[gEffectBattler].wrapTurns = (B_BINDING_TURNS >= GEN_5) ? 7 : 5;
+ else
+ gDisableStructs[gEffectBattler].wrapTurns = (B_BINDING_TURNS >= GEN_5) ? ((Random() % 2) + 4) : ((Random() % 4) + 2);
- *(gBattleStruct->wrappedMove + gEffectBattler * 2 + 0) = gCurrentMove;
- *(gBattleStruct->wrappedMove + gEffectBattler * 2 + 1) = gCurrentMove >> 8;
- *(gBattleStruct->wrappedBy + gEffectBattler) = gBattlerAttacker;
+ gBattleStruct->wrappedMove[gEffectBattler] = gCurrentMove;
+ gBattleStruct->wrappedBy[gEffectBattler] = gBattlerAttacker;
BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect];
- for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; ; gBattleCommunication[MULTISTRING_CHOOSER]++)
+ for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattleCommunication[MULTISTRING_CHOOSER] < NUM_TRAPPING_MOVES; gBattleCommunication[MULTISTRING_CHOOSER]++)
{
- if (gBattleCommunication[MULTISTRING_CHOOSER] >= NUM_TRAPPING_MOVES - 1)
- break;
- if (gTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove)
+ if (sTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove)
break;
}
}
break;
- case MOVE_EFFECT_RECOIL_25: // 25% recoil
- gBattleMoveDamage = (gHpDealt) / 4;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
-
- BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
- break;
case MOVE_EFFECT_ATK_PLUS_1:
case MOVE_EFFECT_DEF_PLUS_1:
case MOVE_EFFECT_SPD_PLUS_1:
@@ -2618,15 +3066,16 @@ void SetMoveEffect(bool8 primary, u8 certain)
case MOVE_EFFECT_SP_DEF_PLUS_1:
case MOVE_EFFECT_ACC_PLUS_1:
case MOVE_EFFECT_EVS_PLUS_1:
- if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1),
- gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_PLUS_1 + 1,
- affectsUser, 0))
+ if (NoAliveMonsForEitherParty()
+ || ChangeStatBuffs(SET_STAT_BUFF_VALUE(1),
+ gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_1 + 1,
+ affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0))
{
gBattlescriptCurrInstr++;
}
else
{
- gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
gBattleScripting.animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatUp;
@@ -2639,15 +3088,20 @@ void SetMoveEffect(bool8 primary, u8 certain)
case MOVE_EFFECT_SP_DEF_MINUS_1:
case MOVE_EFFECT_ACC_MINUS_1:
case MOVE_EFFECT_EVS_MINUS_1:
+ flags = affectsUser;
+ if (mirrorArmorReflected && !affectsUser)
+ flags |= STAT_CHANGE_ALLOW_PTR;
+
if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE,
- gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_1 + 1,
- affectsUser, 0))
+ gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_1 + 1,
+ flags | STAT_CHANGE_UPDATE_MOVE_EFFECT, gBattlescriptCurrInstr + 1))
{
- gBattlescriptCurrInstr++;
+ if (!mirrorArmorReflected)
+ gBattlescriptCurrInstr++;
}
else
{
- gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
gBattleScripting.animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatDown;
@@ -2660,15 +3114,16 @@ void SetMoveEffect(bool8 primary, u8 certain)
case MOVE_EFFECT_SP_DEF_PLUS_2:
case MOVE_EFFECT_ACC_PLUS_2:
case MOVE_EFFECT_EVS_PLUS_2:
- if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2),
- gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_PLUS_2 + 1,
- affectsUser, 0))
+ if (NoAliveMonsForEitherParty()
+ || ChangeStatBuffs(SET_STAT_BUFF_VALUE(2),
+ gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_2 + 1,
+ affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0))
{
gBattlescriptCurrInstr++;
}
else
{
- gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
gBattleScripting.animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatUp;
@@ -2681,15 +3136,19 @@ void SetMoveEffect(bool8 primary, u8 certain)
case MOVE_EFFECT_SP_DEF_MINUS_2:
case MOVE_EFFECT_ACC_MINUS_2:
case MOVE_EFFECT_EVS_MINUS_2:
+ flags = affectsUser;
+ if (mirrorArmorReflected && !affectsUser)
+ flags |= STAT_CHANGE_ALLOW_PTR;
if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE,
- gBattleCommunication[MOVE_EFFECT_BYTE] - MOVE_EFFECT_ATK_MINUS_2 + 1,
- affectsUser, 0))
+ gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_2 + 1,
+ flags | STAT_CHANGE_UPDATE_MOVE_EFFECT, gBattlescriptCurrInstr + 1))
{
- gBattlescriptCurrInstr++;
+ if (!mirrorArmorReflected)
+ gBattlescriptCurrInstr++;
}
else
{
- gBattleScripting.animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
gBattleScripting.animArg2 = 0;
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_StatDown;
@@ -2707,7 +3166,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
break;
case MOVE_EFFECT_STEAL_ITEM:
{
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
+ if (!CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item))
{
gBattlescriptCurrInstr++;
break;
@@ -2716,26 +3175,26 @@ void SetMoveEffect(bool8 primary, u8 certain)
side = GetBattlerSide(gBattlerAttacker);
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT
&& !(gBattleTypeFlags &
- (BATTLE_TYPE_EREADER_TRAINER
- | BATTLE_TYPE_FRONTIER
- | BATTLE_TYPE_LINK
- | BATTLE_TYPE_RECORDED_LINK
- | BATTLE_TYPE_SECRET_BASE)))
+ (BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_FRONTIER
+ | BATTLE_TYPE_LINK
+ | BATTLE_TYPE_RECORDED_LINK
+ | BATTLE_TYPE_SECRET_BASE)))
{
gBattlescriptCurrInstr++;
}
else if (!(gBattleTypeFlags &
- (BATTLE_TYPE_EREADER_TRAINER
- | BATTLE_TYPE_FRONTIER
- | BATTLE_TYPE_LINK
- | BATTLE_TYPE_RECORDED_LINK
- | BATTLE_TYPE_SECRET_BASE))
+ (BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_FRONTIER
+ | BATTLE_TYPE_LINK
+ | BATTLE_TYPE_RECORDED_LINK
+ | BATTLE_TYPE_SECRET_BASE))
&& (gWishFutureKnock.knockedOffMons[side] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]))
{
gBattlescriptCurrInstr++;
}
else if (gBattleMons[gBattlerTarget].item
- && gBattleMons[gBattlerTarget].ability == ABILITY_STICKY_HOLD)
+ && GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD)
{
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_NoItemSteal;
@@ -2744,33 +3203,19 @@ void SetMoveEffect(bool8 primary, u8 certain)
RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
}
else if (gBattleMons[gBattlerAttacker].item != ITEM_NONE
- || gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY
- || IS_ITEM_MAIL(gBattleMons[gBattlerTarget].item)
+ || gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY_E_READER
|| gBattleMons[gBattlerTarget].item == ITEM_NONE)
{
gBattlescriptCurrInstr++;
}
else
{
- u16* changedItem = &gBattleStruct->changedItems[gBattlerAttacker];
- gLastUsedItem = *changedItem = gBattleMons[gBattlerTarget].item;
- gBattleMons[gBattlerTarget].item = 0;
-
- gActiveBattler = gBattlerAttacker;
- BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gLastUsedItem), &gLastUsedItem);
- MarkBattlerForControllerExec(gBattlerAttacker);
-
- gActiveBattler = gBattlerTarget;
- BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item);
- MarkBattlerForControllerExec(gBattlerTarget);
-
+ StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker steals target item
+ gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS)
+ gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_ItemSteal;
-
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerTarget]) + 0) = 0;
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerTarget]) + 1) = 0;
}
-
}
break;
case MOVE_EFFECT_PREVENT_ESCAPE:
@@ -2783,41 +3228,97 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattlescriptCurrInstr++;
break;
case MOVE_EFFECT_ALL_STATS_UP:
- BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BattleScript_AllStatsUp;
+ if (!NoAliveMonsForEitherParty())
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_AllStatsUp;
+ }
break;
case MOVE_EFFECT_RAPIDSPIN:
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_RapidSpinAway;
break;
- case MOVE_EFFECT_REMOVE_PARALYSIS: // Smelling salts
- if (!(gBattleMons[gBattlerTarget].status1 & STATUS1_PARALYSIS))
+ case MOVE_EFFECT_REMOVE_STATUS: // Smelling salts
+ if (!(gBattleMons[gBattlerTarget].status1 & gBattleMoves[gCurrentMove].argument))
{
gBattlescriptCurrInstr++;
}
else
{
- gBattleMons[gBattlerTarget].status1 &= ~STATUS1_PARALYSIS;
+ gBattleMons[gBattlerTarget].status1 &= ~gBattleMoves[gCurrentMove].argument;
gActiveBattler = gBattlerTarget;
BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1);
MarkBattlerForControllerExec(gActiveBattler);
BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal;
+ switch (gBattleMoves[gCurrentMove].argument)
+ {
+ case STATUS1_PARALYSIS:
+ gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal;
+ break;
+ case STATUS1_SLEEP:
+ gBattlescriptCurrInstr = BattleScript_TargetWokeUp;
+ break;
+ case STATUS1_BURN:
+ gBattlescriptCurrInstr = BattleScript_TargetBurnHeal;
+ break;
+ }
}
break;
case MOVE_EFFECT_ATK_DEF_DOWN: // SuperPower
- BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BattleScript_AtkDefDown;
+ if (!NoAliveMonsForEitherParty())
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_AtkDefDown;
+ }
break;
- case MOVE_EFFECT_RECOIL_33: // Double Edge
+ case MOVE_EFFECT_DEF_SPDEF_DOWN: // Close Combat
+ if (!NoAliveMonsForEitherParty())
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_DefSpDefDown;
+ }
+ break;
+ case MOVE_EFFECT_RECOIL_25: // Take Down, 25% recoil
+ gBattleMoveDamage = (gHpDealt) / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect];
+ break;
+ case MOVE_EFFECT_RECOIL_33: // Double Edge, 33 % recoil
gBattleMoveDamage = gHpDealt / 3;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect];
+ break;
+ case MOVE_EFFECT_RECOIL_50: // Head Smash, 50 % recoil
+ gBattleMoveDamage = gHpDealt / 2;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil;
+ break;
+ case MOVE_EFFECT_RECOIL_33_STATUS: // Flare Blitz - can burn, Volt Tackle - can paralyze
+ gBattleScripting.savedDmg = gHpDealt / 3;
+ if (gBattleScripting.savedDmg == 0)
+ gBattleScripting.savedDmg = 1;
+
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_MoveEffectRecoilWithStatus;
+ break;
+ case MOVE_EFFECT_RECOIL_HP_25: // Struggle
+ gBattleMoveDamage = (gBattleMons[gEffectBattler].maxHP) / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil;
break;
case MOVE_EFFECT_THRASH:
if (gBattleMons[gEffectBattler].status2 & STATUS2_LOCK_CONFUSE)
@@ -2831,68 +3332,229 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN((Random() & 1) + 2); // thrash for 2-3 turns
}
break;
- case MOVE_EFFECT_KNOCK_OFF:
- if (gBattleMons[gEffectBattler].ability == ABILITY_STICKY_HOLD)
+ case MOVE_EFFECT_SP_ATK_TWO_DOWN: // Overheat
+ if (!NoAliveMonsForEitherParty())
{
- if (gBattleMons[gEffectBattler].item == 0)
- {
- gBattlescriptCurrInstr++;
- }
- else
- {
- gLastUsedAbility = ABILITY_STICKY_HOLD;
- gBattlescriptCurrInstr = BattleScript_StickyHoldActivates;
- RecordAbilityBattle(gEffectBattler, ABILITY_STICKY_HOLD);
- }
- break;
- }
- if (gBattleMons[gEffectBattler].item)
- {
- side = GetBattlerSide(gEffectBattler);
-
- gLastUsedItem = gBattleMons[gEffectBattler].item;
- gBattleMons[gEffectBattler].item = 0;
- gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[gEffectBattler]];
-
BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BattleScript_KnockedOff;
-
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gEffectBattler]) + 0) = 0;
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gEffectBattler]) + 1) = 0;
- }
- else
- {
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr = BattleScript_SAtkDown2;
}
break;
- case MOVE_EFFECT_SP_ATK_TWO_DOWN: // Overheat
- BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BattleScript_SAtkDown2;
+ case MOVE_EFFECT_CLEAR_SMOG:
+ for (i = 0; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[gEffectBattler].statStages[i] != DEFAULT_STAT_STAGE)
+ break;
+ }
+ if ((gSpecialStatuses[gEffectBattler].physicalDmg || gSpecialStatuses[gEffectBattler].specialDmg) && i != NUM_BATTLE_STATS)
+ {
+ for (i = 0; i < NUM_BATTLE_STATS; i++)
+ gBattleMons[gEffectBattler].statStages[i] = DEFAULT_STAT_STAGE;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_MoveEffectClearSmog;
+ }
+ break;
+ case MOVE_EFFECT_SMACK_DOWN:
+ if (!IsBattlerGrounded(gBattlerTarget))
+ {
+ gStatuses3[gBattlerTarget] |= STATUS3_SMACKED_DOWN;
+ gStatuses3[gBattlerTarget] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR);
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_MoveEffectSmackDown;
+ }
+ break;
+ case MOVE_EFFECT_FLAME_BURST:
+ if (IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) && GetBattlerAbility(BATTLE_PARTNER(gBattlerTarget)) != ABILITY_MAGIC_GUARD)
+ {
+ gBattleScripting.savedBattler = BATTLE_PARTNER(gBattlerTarget);
+ gBattleMoveDamage = gBattleMons[BATTLE_PARTNER(gBattlerTarget)].hp / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattlescriptCurrInstr = BattleScript_MoveEffectFlameBurst;
+ }
+ break;
+ case MOVE_EFFECT_FEINT:
+ if (IS_BATTLER_PROTECTED(gBattlerTarget))
+ {
+ gProtectStructs[gBattlerTarget].protected = FALSE;
+ gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~SIDE_STATUS_WIDE_GUARD;
+ gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~SIDE_STATUS_QUICK_GUARD;
+ gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~SIDE_STATUS_CRAFTY_SHIELD;
+ gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~SIDE_STATUS_MAT_BLOCK;
+ gProtectStructs[gBattlerTarget].spikyShielded = FALSE;
+ gProtectStructs[gBattlerTarget].kingsShielded = FALSE;
+ gProtectStructs[gBattlerTarget].banefulBunkered = FALSE;
+ gProtectStructs[gBattlerTarget].obstructed = FALSE;
+ if (gCurrentMove == MOVE_FEINT)
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_MoveEffectFeint;
+ }
+ else if (gCurrentMove == MOVE_HYPERSPACE_FURY)
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_HyperspaceFuryRemoveProtect;
+ }
+ }
+ break;
+ case MOVE_EFFECT_SPECTRAL_THIEF:
+ if (!NoAliveMonsForEitherParty())
+ {
+ gBattleStruct->stolenStats[0] = 0; // Stats to steal.
+ gBattleScripting.animArg1 = 0;
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[gBattlerTarget].statStages[i] > DEFAULT_STAT_STAGE && gBattleMons[gBattlerAttacker].statStages[i] != MAX_STAT_STAGE)
+ {
+ gBattleStruct->stolenStats[0] |= gBitTable[i];
+ // Store by how many stages to raise the stat.
+ gBattleStruct->stolenStats[i] = gBattleMons[gBattlerTarget].statStages[i] - DEFAULT_STAT_STAGE;
+ while (gBattleMons[gBattlerAttacker].statStages[i] + gBattleStruct->stolenStats[i] > MAX_STAT_STAGE)
+ gBattleStruct->stolenStats[i]--;
+ gBattleMons[gBattlerTarget].statStages[i] = DEFAULT_STAT_STAGE;
+
+ if (gBattleStruct->stolenStats[i] >= 2)
+ byTwo++;
+
+ if (gBattleScripting.animArg1 == 0)
+ {
+ if (byTwo)
+ gBattleScripting.animArg1 = STAT_ANIM_PLUS2 - 1 + i;
+ else
+ gBattleScripting.animArg1 = STAT_ANIM_PLUS1 - 1 + i;
+ }
+ else
+ {
+ if (byTwo)
+ gBattleScripting.animArg1 = STAT_ANIM_MULTIPLE_PLUS2;
+ else
+ gBattleScripting.animArg1 = STAT_ANIM_MULTIPLE_PLUS1;
+ }
+ }
+ }
+
+ if (gBattleStruct->stolenStats[0] != 0)
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_SpectralThiefSteal;
+ }
+ }
+ break;
+ case MOVE_EFFECT_V_CREATE:
+ if (!NoAliveMonsForEitherParty())
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_VCreateStatLoss;
+ }
+ break;
+ case MOVE_EFFECT_CORE_ENFORCER:
+ if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)
+ && !NoAliveMonsForEitherParty())
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_MoveEffectCoreEnforcer;
+ }
+ break;
+ case MOVE_EFFECT_THROAT_CHOP:
+ gDisableStructs[gEffectBattler].throatChopTimer = 2;
+ gBattlescriptCurrInstr++;
+ break;
+ case MOVE_EFFECT_INCINERATE:
+ if ((B_INCINERATE_GEMS >= GEN_6 && GetBattlerHoldEffect(gEffectBattler, FALSE) == HOLD_EFFECT_GEMS)
+ || (gBattleMons[gEffectBattler].item >= FIRST_BERRY_INDEX && gBattleMons[gEffectBattler].item <= LAST_BERRY_INDEX))
+ {
+ gLastUsedItem = gBattleMons[gEffectBattler].item;
+ gBattleMons[gEffectBattler].item = 0;
+ CheckSetUnburden(gEffectBattler);
+
+ gActiveBattler = gEffectBattler;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item);
+ MarkBattlerForControllerExec(gActiveBattler);
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_MoveEffectIncinerate;
+ }
+ break;
+ case MOVE_EFFECT_BUG_BITE:
+ if (ItemId_GetPocket(gBattleMons[gEffectBattler].item) == POCKET_BERRIES
+ && battlerAbility != ABILITY_STICKY_HOLD)
+ {
+ // target loses their berry
+ gLastUsedItem = gBattleMons[gEffectBattler].item;
+ gBattleMons[gEffectBattler].item = 0;
+ CheckSetUnburden(gEffectBattler);
+ gActiveBattler = gEffectBattler;
+
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item);
+ MarkBattlerForControllerExec(gActiveBattler);
+
+ // attacker temporarily gains their item
+ gBattleStruct->changedItems[gBattlerAttacker] = gBattleMons[gBattlerAttacker].item;
+ gBattleMons[gBattlerAttacker].item = gLastUsedItem;
+
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_MoveEffectBugBite;
+ }
+ break;
+ case MOVE_EFFECT_RELIC_SONG:
+ if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SHEER_FORCE && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED))
+ {
+ if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA)
+ {
+ gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE;
+ BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect);
+ }
+ else if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_PIROUETTE)
+ {
+ gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA;
+ BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeMoveEffect);
+ }
+ }
+ break;
+ case MOVE_EFFECT_TRAP_BOTH:
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION))
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_BothCanNoLongerEscape;
+ }
+ if (!gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION)
+ gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker;
+
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION))
+ gDisableStructs[gBattlerAttacker].battlerPreventingEscape = gBattlerTarget;
+
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION;
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_ESCAPE_PREVENTION;
+ break;
+ case MOVE_EFFECT_SCALE_SHOT:
+ if (!NoAliveMonsForEitherParty())
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_DefDownSpeedUp;
+ }
break;
}
}
}
- gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattleScripting.moveEffect = 0;
}
static void Cmd_seteffectwithchance(void)
{
u32 percentChance;
- if (gBattleMons[gBattlerAttacker].ability == ABILITY_SERENE_GRACE)
+ if (GetBattlerAbility(gBattlerAttacker) == ABILITY_SERENE_GRACE)
percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance * 2;
else
percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance;
- if (gBattleCommunication[MOVE_EFFECT_BYTE] & MOVE_EFFECT_CERTAIN
+ if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
{
- gBattleCommunication[MOVE_EFFECT_BYTE] &= ~MOVE_EFFECT_CERTAIN;
+ gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN;
SetMoveEffect(FALSE, MOVE_EFFECT_CERTAIN);
}
else if (Random() % 100 < percentChance
- && gBattleCommunication[MOVE_EFFECT_BYTE]
+ && gBattleScripting.moveEffect
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
{
if (percentChance >= 100)
@@ -2905,7 +3567,7 @@ static void Cmd_seteffectwithchance(void)
gBattlescriptCurrInstr++;
}
- gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattleScripting.moveEffect = 0;
gBattleScripting.multihitMoveEffect = 0;
}
@@ -2923,12 +3585,12 @@ static void Cmd_clearstatusfromeffect(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- if (gBattleCommunication[MOVE_EFFECT_BYTE] <= PRIMARY_STATUS_MOVE_EFFECT)
- gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+ if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT)
+ gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]);
else
- gBattleMons[gActiveBattler].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]);
+ gBattleMons[gActiveBattler].status2 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]);
- gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gBattleScripting.moveEffect = 0;
gBattlescriptCurrInstr += 2;
gBattleScripting.multihitMoveEffect = 0;
}
@@ -2946,7 +3608,7 @@ static void Cmd_tryfaintmon(void)
BattleScriptPop();
gBattlescriptCurrInstr = BS_ptr;
- gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~SIDE_STATUS_SPIKES_DAMAGED;
+ gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED | SIDE_STATUS_TOXIC_SPIKES_DAMAGED | SIDE_STATUS_STEALTH_ROCK_DAMAGED | SIDE_STATUS_STICKY_WEB_DAMAGED);
}
else
{
@@ -2981,12 +3643,14 @@ static void Cmd_tryfaintmon(void)
if (gBattleResults.playerFaintCounter < 255)
gBattleResults.playerFaintCounter++;
AdjustFriendshipOnBattleFaint(gActiveBattler);
+ gSideTimers[0].retaliateTimer = 2;
}
else
{
if (gBattleResults.opponentFaintCounter < 255)
gBattleResults.opponentFaintCounter++;
gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL);
+ gSideTimers[1].retaliateTimer = 2;
}
if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0)
{
@@ -3053,9 +3717,9 @@ static void Cmd_jumpifstatus(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
- const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
- if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp)
+ if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp != 0)
gBattlescriptCurrInstr = jumpPtr;
else
gBattlescriptCurrInstr += 10;
@@ -3065,9 +3729,9 @@ static void Cmd_jumpifstatus2(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
- const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
- if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp)
+ if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp != 0)
gBattlescriptCurrInstr = jumpPtr;
else
gBattlescriptCurrInstr += 10;
@@ -3075,104 +3739,77 @@ static void Cmd_jumpifstatus2(void)
static void Cmd_jumpifability(void)
{
- u8 battlerId;
- u8 ability = gBattlescriptCurrInstr[2];
- const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
+ u32 battlerId;
+ bool32 hasAbility = FALSE;
+ u32 ability = T2_READ_16(gBattlescriptCurrInstr + 2);
- if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE)
+ switch (gBattlescriptCurrInstr[1])
{
- battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_BATTLER_SIDE, gBattlerAttacker, ability, 0, 0);
+ default:
+ battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (GetBattlerAbility(battlerId) == ability)
+ hasAbility = TRUE;
+ break;
+ case BS_ATTACKER_SIDE:
+ battlerId = IsAbilityOnSide(gBattlerAttacker, ability);
if (battlerId)
{
- gLastUsedAbility = ability;
- gBattlescriptCurrInstr = jumpPtr;
- RecordAbilityBattle(battlerId - 1, gLastUsedAbility);
- gBattleScripting.battlerWithAbility = battlerId - 1;
+ battlerId--;
+ hasAbility = TRUE;
}
- else
- gBattlescriptCurrInstr += 7;
+ break;
+ case BS_TARGET_SIDE:
+ battlerId = IsAbilityOnOpposingSide(gBattlerAttacker, ability);
+ if (battlerId)
+ {
+ battlerId--;
+ hasAbility = TRUE;
+ }
+ break;
}
- else if (gBattlescriptCurrInstr[1] == BS_NOT_ATTACKER_SIDE)
+
+ if (hasAbility)
{
- battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gBattlerAttacker, ability, 0, 0);
- if (battlerId)
- {
- gLastUsedAbility = ability;
- gBattlescriptCurrInstr = jumpPtr;
- RecordAbilityBattle(battlerId - 1, gLastUsedAbility);
- gBattleScripting.battlerWithAbility = battlerId - 1;
- }
- else
- gBattlescriptCurrInstr += 7;
+ gLastUsedAbility = ability;
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 4);
+ RecordAbilityBattle(battlerId, gLastUsedAbility);
+ gBattlerAbility = battlerId;
}
else
{
- battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- if (gBattleMons[battlerId].ability == ability)
- {
- gLastUsedAbility = ability;
- gBattlescriptCurrInstr = jumpPtr;
- RecordAbilityBattle(battlerId, gLastUsedAbility);
- gBattleScripting.battlerWithAbility = battlerId;
- }
- else
- gBattlescriptCurrInstr += 7;
+ gBattlescriptCurrInstr += 8;
}
}
static void Cmd_jumpifsideaffecting(void)
{
u8 side;
- u16 flags;
- const u8* jumpPtr;
+ u32 flags;
+ const u8 *jumpPtr;
if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
side = GET_BATTLER_SIDE(gBattlerAttacker);
else
side = GET_BATTLER_SIDE(gBattlerTarget);
- flags = T2_READ_16(gBattlescriptCurrInstr + 2);
- jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4);
+ flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
if (gSideStatuses[side] & flags)
gBattlescriptCurrInstr = jumpPtr;
else
- gBattlescriptCurrInstr += 8;
+ gBattlescriptCurrInstr += 10;
}
static void Cmd_jumpifstat(void)
{
- u8 ret = 0;
+ bool32 ret = 0;
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- u8 value = gBattleMons[battlerId].statStages[gBattlescriptCurrInstr[3]];
+ u8 statId = gBattlescriptCurrInstr[3];
+ u8 cmpTo = gBattlescriptCurrInstr[4];
+ u8 cmpKind = gBattlescriptCurrInstr[2];
- switch (gBattlescriptCurrInstr[2])
- {
- case CMP_EQUAL:
- if (value == gBattlescriptCurrInstr[4])
- ret++;
- break;
- case CMP_NOT_EQUAL:
- if (value != gBattlescriptCurrInstr[4])
- ret++;
- break;
- case CMP_GREATER_THAN:
- if (value > gBattlescriptCurrInstr[4])
- ret++;
- break;
- case CMP_LESS_THAN:
- if (value < gBattlescriptCurrInstr[4])
- ret++;
- break;
- case CMP_COMMON_BITS:
- if (value & gBattlescriptCurrInstr[4])
- ret++;
- break;
- case CMP_NO_COMMON_BITS:
- if (!(value & gBattlescriptCurrInstr[4]))
- ret++;
- break;
- }
+ ret = CompareStat(battlerId, statId, cmpTo, cmpKind);
if (ret)
gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 5);
@@ -3205,16 +3842,28 @@ static void Cmd_jumpifstatus3condition(void)
}
}
-static void Cmd_jumpiftype(void)
+static void Cmd_jumpbasedontype(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u8 type = gBattlescriptCurrInstr[2];
- const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4);
- if (IS_BATTLER_OF_TYPE(battlerId, type))
- gBattlescriptCurrInstr = jumpPtr;
+ // jumpiftype
+ if (gBattlescriptCurrInstr[3])
+ {
+ if (IS_BATTLER_OF_TYPE(battlerId, type))
+ gBattlescriptCurrInstr = jumpPtr;
+ else
+ gBattlescriptCurrInstr += 8;
+ }
+ // jumpifnottype
else
- gBattlescriptCurrInstr += 7;
+ {
+ if (!IS_BATTLER_OF_TYPE(battlerId, type))
+ gBattlescriptCurrInstr = jumpPtr;
+ else
+ gBattlescriptCurrInstr += 8;
+ }
}
static void Cmd_getexp(void)
@@ -3224,7 +3873,7 @@ static void Cmd_getexp(void)
u8 holdEffect;
s32 sentIn;
s32 viaExpShare = 0;
- u16 *exp = &gBattleStruct->expValue;
+ u32 *exp = &gBattleStruct->expValue;
gBattlerFainted = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
sentIn = gSentPokesToOpponent[(gBattlerFainted & 2) >> 1];
@@ -3251,7 +3900,7 @@ static void Cmd_getexp(void)
break;
case 1: // calculate experience points to redistribute
{
- u16 calculatedExp;
+ u32 calculatedExp;
s32 viaSentIn;
for (viaSentIn = 0, i = 0; i < PARTY_SIZE; i++)
@@ -3263,7 +3912,7 @@ static void Cmd_getexp(void)
item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
- if (item == ITEM_ENIGMA_BERRY)
+ if (item == ITEM_ENIGMA_BERRY_E_READER)
holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
else
holdEffect = ItemId_GetHoldEffect(item);
@@ -3271,26 +3920,36 @@ static void Cmd_getexp(void)
if (holdEffect == HOLD_EFFECT_EXP_SHARE)
viaExpShare++;
}
+ #if (B_SCALED_EXP >= GEN_5) && (B_SCALED_EXP != GEN_6)
+ calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 5;
+ #else
+ calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7;
+ #endif
- calculatedExp = gBaseStats[gBattleMons[gBattlerFainted].species].expYield * gBattleMons[gBattlerFainted].level / 7;
+ #if B_SPLIT_EXP < GEN_6
+ if (viaExpShare) // at least one mon is getting exp via exp share
+ {
+ *exp = SAFE_DIV(calculatedExp / 2, viaSentIn);
+ if (*exp == 0)
+ *exp = 1;
- if (viaExpShare) // at least one mon is getting exp via exp share
- {
- *exp = SAFE_DIV(calculatedExp / 2, viaSentIn);
- if (*exp == 0)
- *exp = 1;
-
- gExpShareExp = calculatedExp / 2 / viaExpShare;
+ gExpShareExp = calculatedExp / 2 / viaExpShare;
+ if (gExpShareExp == 0)
+ gExpShareExp = 1;
+ }
+ else
+ {
+ *exp = SAFE_DIV(calculatedExp, viaSentIn);
+ if (*exp == 0)
+ *exp = 1;
+ gExpShareExp = 0;
+ }
+ #else
+ *exp = calculatedExp;
+ gExpShareExp = calculatedExp / 2;
if (gExpShareExp == 0)
gExpShareExp = 1;
- }
- else
- {
- *exp = SAFE_DIV(calculatedExp, viaSentIn);
- if (*exp == 0)
- *exp = 1;
- gExpShareExp = 0;
- }
+ #endif
gBattleScripting.getexpState++;
gBattleStruct->expGetterMonId = 0;
@@ -3302,7 +3961,7 @@ static void Cmd_getexp(void)
{
item = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HELD_ITEM);
- if (item == ITEM_ENIGMA_BERRY)
+ if (item == ITEM_ENIGMA_BERRY_E_READER)
holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
else
holdEffect = ItemId_GetHoldEffect(item);
@@ -3313,16 +3972,24 @@ static void Cmd_getexp(void)
gBattleScripting.getexpState = 5;
gBattleMoveDamage = 0; // used for exp
}
- else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) == MAX_LEVEL)
+ else if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gBattleStruct->expGetterMonId >= 3)
+ || GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) == MAX_LEVEL)
{
*(&gBattleStruct->sentInPokes) >>= 1;
gBattleScripting.getexpState = 5;
gBattleMoveDamage = 0; // used for exp
+ #if B_MAX_LEVEL_EV_GAINS >= GEN_5
+ MonGainEVs(&gPlayerParty[gBattleStruct->expGetterMonId], gBattleMons[gBattlerFainted].species);
+ #endif
}
else
{
- // music change in wild battle after fainting a poke
- if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !gBattleStruct->wildVictorySong)
+ // Music change in a wild battle after fainting opposing pokemon.
+ if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ && (gBattleMons[0].hp || (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleMons[2].hp))
+ && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
+ && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))
+ && !gBattleStruct->wildVictorySong)
{
BattleStopLowHpSound();
PlayBGM(MUS_VICTORY_WILD);
@@ -3336,12 +4003,23 @@ static void Cmd_getexp(void)
else
gBattleMoveDamage = 0;
- if (holdEffect == HOLD_EFFECT_EXP_SHARE)
+ // only give exp share bonus in later gens if the mon wasn't sent out
+ if ((holdEffect == HOLD_EFFECT_EXP_SHARE) && ((gBattleMoveDamage == 0) || (B_SPLIT_EXP < GEN_6)))
gBattleMoveDamage += gExpShareExp;
if (holdEffect == HOLD_EFFECT_LUCKY_EGG)
gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && B_TRAINER_EXP_MULTIPLIER <= GEN_7)
gBattleMoveDamage = (gBattleMoveDamage * 150) / 100;
+ #if (B_SCALED_EXP >= GEN_5) && (B_SCALED_EXP != GEN_6)
+ {
+ // Note: There is an edge case where if a pokemon receives a large amount of exp, it wouldn't be properly calculated
+ // because of multiplying by scaling factor(the value would simply be larger than an u32 can hold). Hence u64 is needed.
+ u64 value = gBattleMoveDamage;
+ value *= sExperienceScalingFactors[(gBattleMons[gBattlerFainted].level * 2) + 10];
+ value /= sExperienceScalingFactors[gBattleMons[gBattlerFainted].level + GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) + 10];
+ gBattleMoveDamage = value + 1;
+ }
+ #endif
if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterMonId]))
{
@@ -3382,7 +4060,7 @@ static void Cmd_getexp(void)
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBattlerId, gBattleStruct->expGetterMonId);
// buffer 'gained' or 'gained a boosted'
PREPARE_STRING_BUFFER(gBattleTextBuff2, i);
- PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 5, gBattleMoveDamage);
+ PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 6, gBattleMoveDamage);
PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBattlerId);
MonGainEVs(&gPlayerParty[gBattleStruct->expGetterMonId], gBattleMons[gBattlerFainted].species);
@@ -3395,7 +4073,7 @@ static void Cmd_getexp(void)
case 3: // Set stats and give exp
if (gBattleControllerExecFlags == 0)
{
- gBattleBufferB[gBattleStruct->expGetterBattlerId][0] = 0;
+ gBattleResources->bufferB[gBattleStruct->expGetterBattlerId][0] = 0;
if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP) && GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) != MAX_LEVEL)
{
gBattleResources->beforeLvlUp->stats[STAT_HP] = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
@@ -3416,8 +4094,9 @@ static void Cmd_getexp(void)
if (gBattleControllerExecFlags == 0)
{
gActiveBattler = gBattleStruct->expGetterBattlerId;
- if (gBattleBufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBattler][1] == RET_VALUE_LEVELED_UP)
+ if (gBattleResources->bufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleResources->bufferB[gActiveBattler][1] == RET_VALUE_LEVELED_UP)
{
+ u16 temp, battlerId = 0xFF;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId)
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
@@ -3427,40 +4106,30 @@ static void Cmd_getexp(void)
BattleScriptPushCursor();
gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterMonId];
gBattlescriptCurrInstr = BattleScript_LevelUp;
- gBattleMoveDamage = (gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8));
+ gBattleMoveDamage = T1_READ_32(&gBattleResources->bufferB[gActiveBattler][2]);
AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterMonId], FRIENDSHIP_EVENT_GROW_LEVEL);
// update battle mon structure after level up
if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId && gBattleMons[0].hp)
+ battlerId = 0;
+ else if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ battlerId = 2;
+
+ if (battlerId != 0xFF)
{
- gBattleMons[0].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
- gBattleMons[0].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP);
- gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
- gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
- gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
- // Speed is duplicated, likely due to a copy-paste error.
- gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
- gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
- gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
- gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF);
+ gBattleMons[battlerId].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
+ gBattleMons[battlerId].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP);
+ gBattleMons[battlerId].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
+ gBattleMons[battlerId].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
+ gBattleMons[battlerId].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
+ gBattleMons[battlerId].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
+ gBattleMons[battlerId].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
+ gBattleMons[battlerId].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF);
+
+ if (gStatuses3[battlerId] & STATUS3_POWER_TRICK)
+ SWAP(gBattleMons[battlerId].attack, gBattleMons[battlerId].defense, temp);
}
- if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
- {
- gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL);
- gBattleMons[2].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP);
- gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MAX_HP);
- gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_ATK);
- gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_DEF);
- gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
- // Speed is duplicated again, but Special Defense is missing.
-#ifdef BUGFIX
- gBattleMons[2].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPDEF);
-#else
- gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPEED);
-#endif
- gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
- }
gBattleScripting.getexpState = 5;
}
else
@@ -3488,27 +4157,43 @@ static void Cmd_getexp(void)
if (gBattleControllerExecFlags == 0)
{
// not sure why gf clears the item and ability here
- gBattleMons[gBattlerFainted].item = 0;
- gBattleMons[gBattlerFainted].ability = 0;
+ gBattleMons[gBattlerFainted].item = ITEM_NONE;
+ gBattleMons[gBattlerFainted].ability = ABILITY_NONE;
gBattlescriptCurrInstr += 2;
}
break;
}
}
-// For battles that aren't BATTLE_TYPE_LINK or BATTLE_TYPE_RECORDED_LINK, the only thing this
-// command does is check whether the player has won/lost by totaling each team's HP. It then
-// sets gBattleOutcome accordingly, if necessary.
-static void Cmd_checkteamslost(void)
+#if B_MULTI_BATTLE_WHITEOUT >= GEN_4
+static bool32 NoAliveMonsForPlayerAndPartner(void)
{
- u16 HP_count = 0;
- s32 i;
+ u32 i;
+ u32 HP_count = 0;
- if (gBattleControllerExecFlags)
- return;
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && (gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER))
+ {
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)
+ && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostPlayerMons & gBitTable[i])))
+ {
+ HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ }
+ }
+ }
+
+ return (HP_count == 0);
+}
+#endif
+
+static bool32 NoAliveMonsForPlayer(void)
+{
+ u32 i;
+ u32 HP_count = 0;
// Get total HP for the player's party to determine if the player has lost
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && (gPartnerTrainerId == TRAINER_STEVEN_PARTNER || gPartnerTrainerId >= TRAINER_CUSTOM_PARTNER))
{
// In multi battle with Steven, skip his Pokémon
for (i = 0; i < MULTI_PARTY_SIZE; i++)
@@ -3528,9 +4213,14 @@ static void Cmd_checkteamslost(void)
}
}
}
- if (HP_count == 0)
- gBattleOutcome |= B_OUTCOME_LOST;
- HP_count = 0;
+
+ return (HP_count == 0);
+}
+
+static bool32 NoAliveMonsForOpponent(void)
+{
+ u32 i;
+ u32 HP_count = 0;
// Get total HP for the enemy's party to determine if the player has won
for (i = 0; i < PARTY_SIZE; i++)
@@ -3541,7 +4231,39 @@ static void Cmd_checkteamslost(void)
HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP);
}
}
- if (HP_count == 0)
+
+ return (HP_count == 0);
+}
+
+bool32 NoAliveMonsForEitherParty(void)
+{
+ return (NoAliveMonsForPlayer() || NoAliveMonsForOpponent());
+}
+
+// For battles that aren't BATTLE_TYPE_LINK or BATTLE_TYPE_RECORDED_LINK, the only thing this
+// command does is check whether the player has won/lost by totaling each team's HP. It then
+// sets gBattleOutcome accordingly, if necessary.
+static void Cmd_checkteamslost(void)
+{
+ if (gBattleControllerExecFlags)
+ return;
+
+#if B_MULTI_BATTLE_WHITEOUT >= GEN_4
+ if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER))
+ {
+ if (NoAliveMonsForPlayerAndPartner())
+ gBattleOutcome |= B_OUTCOME_LOST;
+ }
+ else
+ {
+ if (NoAliveMonsForPlayer())
+ gBattleOutcome |= B_OUTCOME_LOST;
+ }
+#else
+ if (NoAliveMonsForPlayer())
+ gBattleOutcome |= B_OUTCOME_LOST;
+#endif
+ if (NoAliveMonsForOpponent())
gBattleOutcome |= B_OUTCOME_WON;
// For link battles that haven't ended, count number of empty battler spots
@@ -3549,10 +4271,9 @@ static void Cmd_checkteamslost(void)
// In non-multi battles, jump to pointer if 1 spot is missing on both sides
if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)))
{
- s32 emptyPlayerSpots = 0;
- s32 emptyOpponentSpots;
+ s32 i, emptyPlayerSpots, emptyOpponentSpots;
- for (i = 0; i < gBattlersCount; i += 2)
+ for (emptyPlayerSpots = 0, i = 0; i < gBattlersCount; i += 2)
{
if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].faintedHasReplacement))
emptyPlayerSpots++;
@@ -3589,9 +4310,8 @@ static void Cmd_checkteamslost(void)
static void MoveValuesCleanUp(void)
{
gMoveResultFlags = 0;
- gBattleScripting.dmgMultiplier = 1;
- gCritMultiplier = 1;
- gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
+ gIsCriticalHit = FALSE;
+ gBattleScripting.moveEffect = 0;
gBattleCommunication[MISS_TYPE] = 0;
gHitMarker &= ~HITMARKER_DESTINYBOND;
gHitMarker &= ~HITMARKER_SYNCHRONISE_EFFECT;
@@ -3625,9 +4345,9 @@ static void Cmd_goto(void)
static void Cmd_jumpifbyte(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
- const u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ const u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2);
u8 value = gBattlescriptCurrInstr[6];
- const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7);
gBattlescriptCurrInstr += 11;
@@ -3663,9 +4383,9 @@ static void Cmd_jumpifbyte(void)
static void Cmd_jumpifhalfword(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
- const u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ const u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2);
u16 value = T2_READ_16(gBattlescriptCurrInstr + 6);
- const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8);
gBattlescriptCurrInstr += 12;
@@ -3701,9 +4421,9 @@ static void Cmd_jumpifhalfword(void)
static void Cmd_jumpifword(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
- const u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ const u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2);
u32 value = T1_READ_32(gBattlescriptCurrInstr + 6);
- const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
gBattlescriptCurrInstr += 14;
@@ -3738,10 +4458,10 @@ static void Cmd_jumpifword(void)
static void Cmd_jumpifarrayequal(void)
{
- const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
- const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
u32 size = gBattlescriptCurrInstr[9];
- const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
u8 i;
for (i = 0; i < size; i++)
@@ -3761,10 +4481,10 @@ static void Cmd_jumpifarrayequal(void)
static void Cmd_jumpifarraynotequal(void)
{
u8 equalBytes = 0;
- const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
- const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
u32 size = gBattlescriptCurrInstr[9];
- const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
+ const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
u8 i;
for (i = 0; i < size; i++)
@@ -3782,7 +4502,7 @@ static void Cmd_jumpifarraynotequal(void)
static void Cmd_setbyte(void)
{
- u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte = gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
@@ -3790,22 +4510,22 @@ static void Cmd_setbyte(void)
static void Cmd_addbyte(void)
{
- u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte += gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
static void Cmd_subbyte(void)
{
- u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte -= gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
static void Cmd_copyarray(void)
{
- u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
- const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
s32 size = gBattlescriptCurrInstr[9];
s32 i;
@@ -3817,9 +4537,9 @@ static void Cmd_copyarray(void)
static void Cmd_copyarraywithindex(void)
{
- u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
- const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
- const u8* index = T2_READ_PTR(gBattlescriptCurrInstr + 9);
+ u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ const u8 *index = T2_READ_PTR(gBattlescriptCurrInstr + 9);
s32 size = gBattlescriptCurrInstr[13];
s32 i;
@@ -3831,14 +4551,14 @@ static void Cmd_copyarraywithindex(void)
static void Cmd_orbyte(void)
{
- u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte |= gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
static void Cmd_orhalfword(void)
{
- u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
*memHword |= val;
@@ -3847,7 +4567,7 @@ static void Cmd_orhalfword(void)
static void Cmd_orword(void)
{
- u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
*memWord |= val;
@@ -3856,14 +4576,14 @@ static void Cmd_orword(void)
static void Cmd_bicbyte(void)
{
- u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte &= ~(gBattlescriptCurrInstr[5]);
gBattlescriptCurrInstr += 6;
}
static void Cmd_bichalfword(void)
{
- u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
*memHword &= ~val;
@@ -3872,7 +4592,7 @@ static void Cmd_bichalfword(void)
static void Cmd_bicword(void)
{
- u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
*memWord &= ~val;
@@ -3931,7 +4651,8 @@ static void Cmd_end2(void)
gCurrentActionFuncId = B_ACTION_TRY_FINISH;
}
-static void Cmd_end3(void) // pops the main function stack
+// Pops the main function stack
+static void Cmd_end3(void)
{
BattleScriptPop();
if (gBattleResources->battleCallbackStack->size != 0)
@@ -3945,22 +4666,45 @@ static void Cmd_call(void)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
-static void Cmd_jumpiftype2(void)
+static void Cmd_setroost(void)
{
- u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ gBattleResources->flags->flags[gBattlerAttacker] |= RESOURCE_FLAG_ROOST;
- if (gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type1 || gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type2)
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
- else
- gBattlescriptCurrInstr += 7;
+ // Pure flying type.
+ if (gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING && gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING)
+ {
+ gBattleStruct->roostTypes[gBattlerAttacker][0] = TYPE_FLYING;
+ gBattleStruct->roostTypes[gBattlerAttacker][1] = TYPE_FLYING;
+ gBattleStruct->roostTypes[gBattlerAttacker][2] = TYPE_FLYING;
+ SET_BATTLER_TYPE(gBattlerAttacker, TYPE_NORMAL);
+ }
+ // Dual Type with Flying Type.
+ else if ((gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING && gBattleMons[gBattlerAttacker].type2 != TYPE_FLYING)
+ ||(gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING && gBattleMons[gBattlerAttacker].type1 != TYPE_FLYING))
+ {
+ gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1;
+ gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2;
+ if (gBattleMons[gBattlerAttacker].type1 == TYPE_FLYING)
+ gBattleMons[gBattlerAttacker].type1 = TYPE_MYSTERY;
+ if (gBattleMons[gBattlerAttacker].type2 == TYPE_FLYING)
+ gBattleMons[gBattlerAttacker].type2 = TYPE_MYSTERY;
+ }
+ // Non-flying type.
+ else if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FLYING))
+ {
+ gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1;
+ gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2;
+ }
+
+ gBattlescriptCurrInstr++;
}
static void Cmd_jumpifabilitypresent(void)
{
- if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, gBattlescriptCurrInstr[1], 0, 0))
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ if (IsAbilityOnField(T1_READ_16(gBattlescriptCurrInstr + 1)))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
else
- gBattlescriptCurrInstr += 6;
+ gBattlescriptCurrInstr += 7;
}
static void Cmd_endselectionscript(void)
@@ -3970,30 +4714,44 @@ static void Cmd_endselectionscript(void)
static void Cmd_playanimation(void)
{
- const u16* argumentPtr;
+ const u16 *argumentPtr;
+ u8 animId = gBattlescriptCurrInstr[2];
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
- if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE
- || gBattlescriptCurrInstr[2] == B_ANIM_SNATCH_MOVE
- || gBattlescriptCurrInstr[2] == B_ANIM_SUBSTITUTE_FADE)
+ #if B_TERRAIN_BG_CHANGE == FALSE
+ if (animId == B_ANIM_RESTORE_BG)
{
- BtlController_EmitBattleAnimation(BUFFER_A, gBattlescriptCurrInstr[2], *argumentPtr);
+ // workaround for .if not working
+ gBattlescriptCurrInstr += 7;
+ return;
+ }
+ #endif
+
+ if (animId == B_ANIM_STATS_CHANGE
+ || animId == B_ANIM_SNATCH_MOVE
+ || animId == B_ANIM_MEGA_EVOLUTION
+ || animId == B_ANIM_ILLUSION_OFF
+ || animId == B_ANIM_FORM_CHANGE
+ || animId == B_ANIM_SUBSTITUTE_FADE
+ || animId == B_ANIM_PRIMAL_REVERSION)
+ {
+ BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr);
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 7;
}
- else if (gHitMarker & HITMARKER_NO_ANIMATIONS)
+ else if (gHitMarker & HITMARKER_NO_ANIMATIONS && animId != B_ANIM_RESTORE_BG)
{
BattleScriptPush(gBattlescriptCurrInstr + 7);
gBattlescriptCurrInstr = BattleScript_Pausex20;
}
- else if (gBattlescriptCurrInstr[2] == B_ANIM_RAIN_CONTINUES
- || gBattlescriptCurrInstr[2] == B_ANIM_SUN_CONTINUES
- || gBattlescriptCurrInstr[2] == B_ANIM_SANDSTORM_CONTINUES
- || gBattlescriptCurrInstr[2] == B_ANIM_HAIL_CONTINUES)
+ else if (animId == B_ANIM_RAIN_CONTINUES
+ || animId == B_ANIM_SUN_CONTINUES
+ || animId == B_ANIM_SANDSTORM_CONTINUES
+ || animId == B_ANIM_HAIL_CONTINUES)
{
- BtlController_EmitBattleAnimation(BUFFER_A, gBattlescriptCurrInstr[2], *argumentPtr);
+ BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr);
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 7;
}
@@ -4003,7 +4761,7 @@ static void Cmd_playanimation(void)
}
else
{
- BtlController_EmitBattleAnimation(BUFFER_A, gBattlescriptCurrInstr[2], *argumentPtr);
+ BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr);
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 7;
}
@@ -4012,8 +4770,8 @@ static void Cmd_playanimation(void)
// Same as playanimation, except it takes a pointer to some animation id, instead of taking the value directly
static void Cmd_playanimation_var(void)
{
- const u16* argumentPtr;
- const u8* animationIdPtr;
+ const u16 *argumentPtr;
+ const u8 *animationIdPtr;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2);
@@ -4021,7 +4779,11 @@ static void Cmd_playanimation_var(void)
if (*animationIdPtr == B_ANIM_STATS_CHANGE
|| *animationIdPtr == B_ANIM_SNATCH_MOVE
- || *animationIdPtr == B_ANIM_SUBSTITUTE_FADE)
+ || *animationIdPtr == B_ANIM_MEGA_EVOLUTION
+ || *animationIdPtr == B_ANIM_ILLUSION_OFF
+ || *animationIdPtr == B_ANIM_FORM_CHANGE
+ || *animationIdPtr == B_ANIM_SUBSTITUTE_FADE
+ || *animationIdPtr == B_ANIM_PRIMAL_REVERSION)
{
BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr);
MarkBattlerForControllerExec(gActiveBattler);
@@ -4054,8 +4816,9 @@ static void Cmd_playanimation_var(void)
static void Cmd_setgraphicalstatchangevalues(void)
{
- u8 value = 0;
- switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger))
+ u8 value = GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger);
+
+ switch (value)
{
case SET_STAT_BUFF_VALUE(1): // +1
value = STAT_ANIM_PLUS1;
@@ -4063,12 +4826,24 @@ static void Cmd_setgraphicalstatchangevalues(void)
case SET_STAT_BUFF_VALUE(2): // +2
value = STAT_ANIM_PLUS2;
break;
+ case SET_STAT_BUFF_VALUE(3): // +3
+ value = STAT_ANIM_PLUS2;
+ break;
case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1
value = STAT_ANIM_MINUS1;
break;
case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2
value = STAT_ANIM_MINUS2;
break;
+ case SET_STAT_BUFF_VALUE(3) | STAT_BUFF_NEGATIVE: // -3
+ value = STAT_ANIM_MINUS2;
+ break;
+ default: // <-12,-4> and <4, 12>
+ if (value & STAT_BUFF_NEGATIVE)
+ value = STAT_ANIM_MINUS2;
+ else
+ value = STAT_ANIM_PLUS2;
+ break;
}
gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1;
gBattleScripting.animArg2 = 0;
@@ -4077,18 +4852,27 @@ static void Cmd_setgraphicalstatchangevalues(void)
static void Cmd_playstatchangeanimation(void)
{
+ u32 ability;
u32 currStat = 0;
- u16 statAnimId = 0;
- s32 changeableStatsCount = 0;
- u8 statsToCheck = 0;
+ u32 statAnimId = 0;
+ u32 changeableStatsCount = 0;
+ u32 statsToCheck = 0;
+ u32 startingStatAnimId = 0;
+ u32 flags = gBattlescriptCurrInstr[3];
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ ability = GetBattlerAbility(gActiveBattler);
statsToCheck = gBattlescriptCurrInstr[2];
- if (gBattlescriptCurrInstr[3] & STAT_CHANGE_NEGATIVE) // goes down
+ // Handle Contrary and Simple
+ if (ability == ABILITY_CONTRARY)
+ flags ^= STAT_CHANGE_NEGATIVE;
+ else if (ability == ABILITY_SIMPLE)
+ flags |= STAT_CHANGE_BY_TWO;
+
+ if (flags & STAT_CHANGE_NEGATIVE) // goes down
{
- s16 startingStatAnimId;
- if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO)
+ if (flags & STAT_CHANGE_BY_TWO)
startingStatAnimId = STAT_ANIM_MINUS2 - 1;
else
startingStatAnimId = STAT_ANIM_MINUS1 - 1;
@@ -4097,7 +4881,7 @@ static void Cmd_playstatchangeanimation(void)
{
if (statsToCheck & 1)
{
- if (gBattlescriptCurrInstr[3] & STAT_CHANGE_CANT_PREVENT)
+ if (flags & STAT_CHANGE_CANT_PREVENT)
{
if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE)
{
@@ -4106,10 +4890,12 @@ static void Cmd_playstatchangeanimation(void)
}
}
else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
- && gBattleMons[gActiveBattler].ability != ABILITY_CLEAR_BODY
- && gBattleMons[gActiveBattler].ability != ABILITY_WHITE_SMOKE
- && !(gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE && currStat == STAT_ACC)
- && !(gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK))
+ && ability != ABILITY_CLEAR_BODY
+ && ability != ABILITY_FULL_METAL_BODY
+ && ability != ABILITY_WHITE_SMOKE
+ && !(ability == ABILITY_KEEN_EYE && currStat == STAT_ACC)
+ && !(ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK)
+ && !(ability == ABILITY_BIG_PECKS && currStat == STAT_DEF))
{
if (gBattleMons[gActiveBattler].statStages[currStat] > MIN_STAT_STAGE)
{
@@ -4123,7 +4909,7 @@ static void Cmd_playstatchangeanimation(void)
if (changeableStatsCount > 1) // more than one stat, so the color is gray
{
- if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO)
+ if (flags & STAT_CHANGE_BY_TWO)
statAnimId = STAT_ANIM_MULTIPLE_MINUS2;
else
statAnimId = STAT_ANIM_MULTIPLE_MINUS1;
@@ -4131,8 +4917,7 @@ static void Cmd_playstatchangeanimation(void)
}
else // goes up
{
- s16 startingStatAnimId;
- if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO)
+ if (flags & STAT_CHANGE_BY_TWO)
startingStatAnimId = STAT_ANIM_PLUS2 - 1;
else
startingStatAnimId = STAT_ANIM_PLUS1 - 1;
@@ -4149,14 +4934,14 @@ static void Cmd_playstatchangeanimation(void)
if (changeableStatsCount > 1) // more than one stat, so the color is gray
{
- if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO)
+ if (flags & STAT_CHANGE_BY_TWO)
statAnimId = STAT_ANIM_MULTIPLE_PLUS2;
else
statAnimId = STAT_ANIM_MULTIPLE_PLUS1;
}
}
- if (gBattlescriptCurrInstr[3] & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount < 2)
+ if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount < 2)
{
gBattlescriptCurrInstr += 4;
}
@@ -4164,7 +4949,7 @@ static void Cmd_playstatchangeanimation(void)
{
BtlController_EmitBattleAnimation(BUFFER_A, B_ANIM_STATS_CHANGE, statAnimId);
MarkBattlerForControllerExec(gActiveBattler);
- if (gBattlescriptCurrInstr[3] & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1)
+ if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1)
gBattleScripting.statAnimPlayed = TRUE;
gBattlescriptCurrInstr += 4;
}
@@ -4174,15 +4959,45 @@ static void Cmd_playstatchangeanimation(void)
}
}
+static bool32 TryKnockOffBattleScript(u32 battlerDef)
+{
+ if (gBattleMons[battlerDef].item != 0
+ && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item)
+ && !NoAliveMonsForEitherParty())
+ {
+ if (GetBattlerAbility(battlerDef) == ABILITY_STICKY_HOLD && IsBattlerAlive(battlerDef))
+ {
+ gBattlerAbility = battlerDef;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_StickyHoldActivates;
+ }
+ else
+ {
+ u32 side = GetBattlerSide(battlerDef);
+
+ gLastUsedItem = gBattleMons[battlerDef].item;
+ gBattleMons[battlerDef].item = 0;
+ gBattleStruct->choicedMove[battlerDef] = 0;
+ gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[battlerDef]];
+ CheckSetUnburden(battlerDef);
+
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_KnockedOff;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
static void Cmd_moveend(void)
{
s32 i;
bool32 effect = FALSE;
- u8 moveType = 0;
- u8 holdEffectAtk = 0;
+ u32 moveType = 0;
+ u32 holdEffectAtk = 0;
u16 *choicedMoveAtk = NULL;
- u8 endMode, endState;
- u16 originallyUsedMove;
+ u32 endMode, endState;
+ u32 originallyUsedMove;
if (gChosenMove == MOVE_UNAVAILABLE)
originallyUsedMove = MOVE_NONE;
@@ -4192,11 +5007,7 @@ static void Cmd_moveend(void)
endMode = gBattlescriptCurrInstr[1];
endState = gBattlescriptCurrInstr[2];
- if (gBattleMons[gBattlerAttacker].item == ITEM_ENIGMA_BERRY)
- holdEffectAtk = gEnigmaBerries[gBattlerAttacker].holdEffect;
- else
- holdEffectAtk = ItemId_GetHoldEffect(gBattleMons[gBattlerAttacker].item);
-
+ holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE);
choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker];
GET_MOVE_TYPE(gCurrentMove, moveType);
@@ -4204,6 +5015,65 @@ static void Cmd_moveend(void)
{
switch (gBattleScripting.moveendState)
{
+ case MOVEEND_PROTECT_LIKE_EFFECT:
+ if (gProtectStructs[gBattlerAttacker].touchedProtectLike)
+ {
+ if (gProtectStructs[gBattlerTarget].spikyShielded && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
+ {
+ gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_SPIKY_SHIELD);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SpikyShieldEffect;
+ effect = 1;
+ }
+ else if (gProtectStructs[gBattlerTarget].kingsShielded)
+ {
+ gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
+ i = gBattlerAttacker;
+ gBattlerAttacker = gBattlerTarget;
+ gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
+ gBattleScripting.moveEffect = (B_KINGS_SHIELD_LOWER_ATK >= GEN_8) ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_ATK_MINUS_2;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_KingsShieldEffect;
+ effect = 1;
+ }
+ else if (gProtectStructs[gBattlerTarget].banefulBunkered)
+ {
+ gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
+ gBattleScripting.moveEffect = MOVE_EFFECT_POISON | MOVE_EFFECT_AFFECTS_USER;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_BANEFUL_BUNKER);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BanefulBunkerEffect;
+ effect = 1;
+ }
+ else if (gProtectStructs[gBattlerTarget].obstructed && gCurrentMove != MOVE_SUCKER_PUNCH)
+ {
+ gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
+ i = gBattlerAttacker;
+ gBattlerAttacker = gBattlerTarget;
+ gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable
+ gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_2;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_KingsShieldEffect;
+ effect = 1;
+ }
+ // Not strictly a protect effect, but works the same way
+ else if (gProtectStructs[gBattlerTarget].beakBlastCharge
+ && CanBeBurned(gBattlerAttacker)
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
+ gBattleMons[gBattlerAttacker].status1 = STATUS1_BURN;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BeakBlastBurn;
+ effect = 1;
+ }
+ }
+ gBattleScripting.moveendState++;
+ break;
case MOVEEND_RAGE: // rage check
if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE
&& gBattleMons[gBattlerTarget].hp != 0
@@ -4212,7 +5082,7 @@ static void Cmd_moveend(void)
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& TARGET_TURN_DAMAGED
&& gBattleMoves[gCurrentMove].power != 0
- && gBattleMons[gBattlerTarget].statStages[STAT_ATK] < MAX_STAT_STAGE)
+ && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN))
{
gBattleMons[gBattlerTarget].statStages[STAT_ATK]++;
BattleScriptPushCursor();
@@ -4227,7 +5097,7 @@ static void Cmd_moveend(void)
&& gBattlerAttacker != gBattlerTarget
&& gSpecialStatuses[gBattlerTarget].specialDmg
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && moveType == TYPE_FIRE)
+ && (moveType == TYPE_FIRE || gBattleMoves[gCurrentMove].effect == EFFECT_SCALD))
{
gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE;
gActiveBattler = gBattlerTarget;
@@ -4244,12 +5114,17 @@ static void Cmd_moveend(void)
effect = TRUE;
gBattleScripting.moveendState++;
break;
- case MOVEEND_ON_DAMAGE_ABILITIES: // Contact abilities and Color Change
- if (AbilityBattleEffects(ABILITYEFFECT_ON_DAMAGE, gBattlerTarget, 0, 0, 0))
+ case MOVEEND_ABILITIES: // Such as abilities activating on contact(Poison Spore, Rough Skin, etc.).
+ if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerTarget, 0, 0, 0))
effect = TRUE;
gBattleScripting.moveendState++;
break;
- case MOVEEND_IMMUNITY_ABILITIES: // status immunities
+ case MOVEEND_ABILITIES_ATTACKER: // Poison Touch, possibly other in the future
+ if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END_ATTACKER, gBattlerAttacker, 0, 0, 0))
+ effect = TRUE;
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_STATUS_IMMUNITY_ABILITIES: // status immunities
if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers
else
@@ -4262,46 +5137,63 @@ static void Cmd_moveend(void)
break;
case MOVEEND_CHOICE_MOVE: // update choice band move
if (gHitMarker & HITMARKER_OBEYS
- && holdEffectAtk == HOLD_EFFECT_CHOICE_BAND
+ && (HOLD_EFFECT_CHOICE(holdEffectAtk) || GetBattlerAbility(gBattlerAttacker) == ABILITY_GORILLA_TACTICS)
&& gChosenMove != MOVE_STRUGGLE
&& (*choicedMoveAtk == MOVE_NONE || *choicedMoveAtk == MOVE_UNAVAILABLE))
{
- if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED))
+ if ((gBattleMoves[gChosenMove].effect == EFFECT_BATON_PASS
+ || gBattleMoves[gChosenMove].effect == EFFECT_HEALING_WISH)
+ && !(gMoveResultFlags & MOVE_RESULT_FAILED))
{
- ++gBattleScripting.moveendState;
+ gBattleScripting.moveendState++;
break;
}
*choicedMoveAtk = gChosenMove;
}
- for (i = 0; i < MAX_MON_MOVES; ++i)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk)
break;
}
if (i == MAX_MON_MOVES)
*choicedMoveAtk = MOVE_NONE;
- ++gBattleScripting.moveendState;
+ gBattleScripting.moveendState++;
break;
case MOVEEND_CHANGED_ITEMS: // changed held items
for (i = 0; i < gBattlersCount; i++)
{
- u16* changedItem = &gBattleStruct->changedItems[i];
- if (*changedItem != ITEM_NONE)
+ if (gBattleStruct->changedItems[i] != ITEM_NONE)
{
- gBattleMons[i].item = *changedItem;
- *changedItem = ITEM_NONE;
+ gBattleMons[i].item = gBattleStruct->changedItems[i];
+ gBattleStruct->changedItems[i] = ITEM_NONE;
}
}
gBattleScripting.moveendState++;
break;
+ case MOVEEND_ITEM_EFFECTS_TARGET:
+ if (ItemBattleEffects(ITEMEFFECT_TARGET, gBattlerTarget, FALSE))
+ effect = TRUE;
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_MOVE_EFFECTS2: // For effects which should happen after target items, for example Knock Off after damage from Rocky Helmet.
+ switch (gBattleStruct->moveEffect2)
+ {
+ case MOVE_EFFECT_KNOCK_OFF:
+ effect = TryKnockOffBattleScript(gBattlerTarget);
+ break;
+ }
+ gBattleStruct->moveEffect2 = 0;
+ gBattleScripting.moveendState++;
+ break;
case MOVEEND_ITEM_EFFECTS_ALL: // item effects for all battlers
if (ItemBattleEffects(ITEMEFFECT_MOVE_END, 0, FALSE))
effect = TRUE;
else
gBattleScripting.moveendState++;
break;
- case MOVEEND_KINGSROCK_SHELLBELL: // king's rock and shell bell
- if (ItemBattleEffects(ITEMEFFECT_KINGSROCK_SHELLBELL, 0, FALSE))
+ case MOVEEND_KINGSROCK: // King's rock
+ // These effects will occur at each hit in a multi-strike move
+ if (ItemBattleEffects(ITEMEFFECT_KINGSROCK, 0, FALSE))
effect = TRUE;
gBattleScripting.moveendState++;
break;
@@ -4326,7 +5218,7 @@ static void Cmd_moveend(void)
BtlController_EmitSpriteInvisibility(BUFFER_A, FALSE);
MarkBattlerForControllerExec(gActiveBattler);
gStatuses3[gBattlerAttacker] &= ~STATUS3_SEMI_INVULNERABLE;
- gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = 1;
+ gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = TRUE;
gBattleScripting.moveendState++;
return;
}
@@ -4353,7 +5245,39 @@ static void Cmd_moveend(void)
}
gBattleScripting.moveendState++;
break;
+ case MOVEEND_SKY_DROP_CONFUSE: // If a Pokemon was released from Sky Drop and was in LOCK_CONFUSE, go to "confused due to fatigue" scripts and clear Sky Drop data.
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattleStruct->skyDropTargets[i] == 0xFE)
+ {
+ u8 targetId;
+ // Find the battler id of the Pokemon that was held by Sky Drop
+ for (targetId = 0; targetId < gBattlersCount; targetId++)
+ {
+ if (gBattleStruct->skyDropTargets[targetId] == i)
+ break;
+ }
+
+ // Set gBattlerAttacker to the battler id of the target
+ gBattlerAttacker = targetId;
+
+ // Jump to "confused due to fatigue" script
+ gBattlescriptCurrInstr = BattleScript_ThrashConfuses;
+
+ // Clear skyDropTargets data
+ gBattleStruct->skyDropTargets[i] = 0xFF;
+ gBattleStruct->skyDropTargets[targetId] = 0xFF;
+ return;
+ }
+ }
+ gBattleScripting.moveendState++;
+ break;
case MOVEEND_UPDATE_LAST_MOVES:
+ if (gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE))
+ gBattleStruct->lastMoveFailed |= gBitTable[gBattlerAttacker];
+ else
+ gBattleStruct->lastMoveFailed &= ~(gBitTable[gBattlerAttacker]);
+
if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
{
gActiveBattler = gBattlerAttacker;
@@ -4361,18 +5285,28 @@ static void Cmd_moveend(void)
gBattlerTarget = gActiveBattler;
gHitMarker &= ~HITMARKER_SWAP_ATTACKER_TARGET;
}
- if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED)
+ if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove)
{
- gLastPrintedMoves[gBattlerAttacker] = gChosenMove;
+ gDisableStructs[gBattlerAttacker].usedMoves |= gBitTable[gCurrMovePos];
+ gBattleStruct->lastMoveTarget[gBattlerAttacker] = gBattlerTarget;
+ if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED)
+ {
+ gLastPrintedMoves[gBattlerAttacker] = gChosenMove;
+ gLastUsedMove = gCurrentMove;
+ }
}
if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
&& !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker])
- && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS)
+ && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS
+ && gBattleMoves[originallyUsedMove].effect != EFFECT_HEALING_WISH)
{
if (gHitMarker & HITMARKER_OBEYS)
{
- gLastMoves[gBattlerAttacker] = gChosenMove;
- gLastResultingMoves[gBattlerAttacker] = gCurrentMove;
+ if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove)
+ {
+ gLastMoves[gBattlerAttacker] = gChosenMove;
+ gLastResultingMoves[gBattlerAttacker] = gCurrentMove;
+ }
}
else
{
@@ -4411,33 +5345,74 @@ static void Cmd_moveend(void)
&& !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
{
- u8 target, attacker;
-
- *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 0) = gChosenMove;
- *(gBattleStruct->lastTakenMove + gBattlerTarget * 2 + 1) = gChosenMove >> 8;
-
- target = gBattlerTarget;
- attacker = gBattlerAttacker;
- *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0) = gChosenMove;
-
- target = gBattlerTarget;
- attacker = gBattlerAttacker;
- *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = gChosenMove >> 8;
+ gBattleStruct->lastTakenMove[gBattlerTarget] = gChosenMove;
+ gBattleStruct->lastTakenMoveFrom[gBattlerTarget][gBattlerAttacker] = gChosenMove;
+ }
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_MAGICIAN:
+ if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MAGICIAN
+ && gCurrentMove != MOVE_FLING && gCurrentMove != MOVE_NATURAL_GIFT
+ && gBattleMons[gBattlerAttacker].item == ITEM_NONE
+ && gBattleMons[gBattlerTarget].item != ITEM_NONE
+ && IsBattlerAlive(gBattlerAttacker)
+ && TARGET_TURN_DAMAGED
+ && CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item)
+ && !gSpecialStatuses[gBattlerAttacker].gemBoost // In base game, gems are consumed after magician would activate.
+ && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]])
+ && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && (GetBattlerAbility(gBattlerTarget) != ABILITY_STICKY_HOLD || !IsBattlerAlive(gBattlerTarget)))
+ {
+ StealTargetItem(gBattlerAttacker, gBattlerTarget);
+ gBattleScripting.battler = gBattlerAbility = gBattlerAttacker;
+ gEffectBattler = gBattlerTarget;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MagicianActivates;
+ effect = TRUE;
}
gBattleScripting.moveendState++;
break;
case MOVEEND_NEXT_TARGET: // For moves hitting two opposing Pokemon.
- if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE
- && !gProtectStructs[gBattlerAttacker].chargingTurn && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH
+ {
+ u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove);
+ // Set a flag if move hits either target (for throat spray that can't check damage)
+ if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ gProtectStructs[gBattlerAttacker].targetAffected = TRUE;
+
+ if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)
+ && gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !gProtectStructs[gBattlerAttacker].chargingTurn
+ && (moveTarget == MOVE_TARGET_BOTH
+ || moveTarget == MOVE_TARGET_FOES_AND_ALLY)
&& !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
{
- u8 battlerId = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget)));
- if (gBattleMons[battlerId].hp != 0)
+ u8 battlerId;
+
+ if (moveTarget == MOVE_TARGET_FOES_AND_ALLY)
{
- gBattlerTarget = battlerId;
+ gHitMarker |= HITMARKER_NO_PPDEDUCT;
+ for (battlerId = gBattlerTarget + 1; battlerId < gBattlersCount; battlerId++)
+ {
+ if (battlerId == gBattlerAttacker)
+ continue;
+ if (IsBattlerAlive(battlerId))
+ break;
+ }
+ }
+ else
+ {
+ battlerId = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget)));
gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ }
+
+ if (IsBattlerAlive(battlerId))
+ {
+ gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = battlerId; // Fix for moxie spread moves
gBattleScripting.moveendState = 0;
MoveValuesCleanUp();
+ gBattleScripting.moveEffect = gBattleScripting.savedMoveEffect;
BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
gBattlescriptCurrInstr = BattleScript_FlushMessageBox;
return;
@@ -4445,8 +5420,233 @@ static void Cmd_moveend(void)
else
{
gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ gHitMarker &= ~HITMARKER_NO_PPDEDUCT;
}
}
+ RecordLastUsedMoveBy(gBattlerAttacker, gCurrentMove);
+ gBattleScripting.moveendState++;
+ break;
+ }
+ case MOVEEND_EJECT_BUTTON:
+ if (gCurrentMove != MOVE_DRAGON_TAIL
+ && gCurrentMove != MOVE_CIRCLE_THROW
+ && IsBattlerAlive(gBattlerAttacker)
+ && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove)
+ && (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER || (gBattleTypeFlags & BATTLE_TYPE_TRAINER)))
+ {
+ // Since we check if battler was damaged, we don't need to check move result.
+ // In fact, doing so actually prevents multi-target moves from activating eject button properly
+ u8 battlers[4] = {0, 1, 2, 3};
+ SortBattlersBySpeed(battlers, FALSE);
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ u8 battler = battlers[i];
+ // Attacker is the damage-dealer, battler is mon to be switched out
+ if (IsBattlerAlive(battler)
+ && GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_EJECT_BUTTON
+ && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove)
+ && (gSpecialStatuses[battler].physicalDmg != 0 || gSpecialStatuses[battler].specialDmg != 0)
+ && CountUsablePartyMons(battler) > 0) // Has mon to switch into
+ {
+ gActiveBattler = gBattleScripting.battler = battler;
+ gLastUsedItem = gBattleMons[battler].item;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_HIT_ESCAPE)
+ gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_EjectButtonActivates;
+ effect = TRUE;
+ break; // Only the fastest Eject Button activates
+ }
+ }
+ }
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_RED_CARD:
+ if (gCurrentMove != MOVE_DRAGON_TAIL
+ && gCurrentMove != MOVE_CIRCLE_THROW
+ && IsBattlerAlive(gBattlerAttacker)
+ && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove))
+ {
+ // Since we check if battler was damaged, we don't need to check move result.
+ // In fact, doing so actually prevents multi-target moves from activating red card properly
+ u8 battlers[4] = {0, 1, 2, 3};
+ SortBattlersBySpeed(battlers, FALSE);
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ u8 battler = battlers[i];
+ // Search for fastest hit pokemon with a red card
+ // Attacker is the one to be switched out, battler is one with red card
+ if (battler != gBattlerAttacker
+ && IsBattlerAlive(battler)
+ && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove)
+ && GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_RED_CARD
+ && (gSpecialStatuses[battler].physicalDmg != 0 || gSpecialStatuses[battler].specialDmg != 0)
+ && CanBattlerSwitch(gBattlerAttacker))
+ {
+ gLastUsedItem = gBattleMons[battler].item;
+ gActiveBattler = gBattleStruct->savedBattlerTarget = gBattleScripting.battler = battler; // Battler with red card
+ gEffectBattler = gBattlerAttacker;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_HIT_ESCAPE)
+ gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_RedCardActivates;
+ effect = TRUE;
+ break; // Only fastest red card activates
+ }
+ }
+ }
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_EJECT_PACK:
+ {
+ u8 battlers[4] = {0, 1, 2, 3};
+ SortBattlersBySpeed(battlers, FALSE);
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ u8 battler = battlers[i];
+ if (IsBattlerAlive(battler)
+ && gProtectStructs[battler].statFell
+ && gProtectStructs[battler].disableEjectPack == 0
+ && GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_EJECT_PACK
+ && !(gCurrentMove == MOVE_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker)) // Does not activate if attacker used Parting Shot and can switch out
+ && CountUsablePartyMons(battler) > 0) // Has mon to switch into
+ {
+ gProtectStructs[battler].statFell = FALSE;
+ gActiveBattler = gBattleScripting.battler = battler;
+ gLastUsedItem = gBattleMons[battler].item;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_EjectPackActivates;
+ effect = TRUE;
+ break; // Only fastest eject pack activates
+ }
+ }
+ }
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_LIFEORB_SHELLBELL:
+ if (ItemBattleEffects(ITEMEFFECT_LIFEORB_SHELLBELL, 0, FALSE))
+ effect = TRUE;
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_PICKPOCKET:
+ if (IsBattlerAlive(gBattlerAttacker)
+ && gBattleMons[gBattlerAttacker].item != ITEM_NONE // Attacker must be holding an item
+ && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]) // But not knocked off
+ && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) // Pickpocket doesn't activate for sheer force
+ && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) // Pickpocket requires contact
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) // Obviously attack needs to have worked
+ {
+ u8 battlers[4] = {0, 1, 2, 3};
+ SortBattlersBySpeed(battlers, FALSE); // Pickpocket activates for fastest mon without item
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ u8 battler = battlers[i];
+ // Attacker is mon who made contact, battler is mon with pickpocket
+ if (battler != gBattlerAttacker // Cannot pickpocket yourself
+ && GetBattlerAbility(battler) == ABILITY_PICKPOCKET // Target must have pickpocket ability
+ && BATTLER_DAMAGED(battler) // Target needs to have been damaged
+ && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) // Subsitute unaffected
+ && IsBattlerAlive(battler) // Battler must be alive to pickpocket
+ && gBattleMons[battler].item == ITEM_NONE // Pickpocketer can't have an item already
+ && CanStealItem(battler, gBattlerAttacker, gBattleMons[gBattlerAttacker].item)) // Cannot steal plates, mega stones, etc
+ {
+ gBattlerTarget = gBattlerAbility = battler;
+ // Battle scripting is super brittle so we shall do the item exchange now (if possible)
+ if (GetBattlerAbility(gBattlerAttacker) != ABILITY_STICKY_HOLD)
+ StealTargetItem(gBattlerTarget, gBattlerAttacker); // Target takes attacker's item
+
+ gEffectBattler = gBattlerAttacker;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_Pickpocket; // Includes sticky hold check to print separate string
+ effect = TRUE;
+ break; // Pickpocket activates on fastest mon, so exit loop.
+ }
+ }
+ }
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_DANCER: // Special case because it's so annoying
+ if (gBattleMoves[gCurrentMove].flags & FLAG_DANCE)
+ {
+ u8 battler, nextDancer = 0;
+
+ if (!(gBattleStruct->lastMoveFailed & gBitTable[gBattlerAttacker]
+ || (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove
+ && gProtectStructs[gBattlerAttacker].usesBouncedMove)))
+ { // Dance move succeeds
+ // Set target for other Dancer mons; set bit so that mon cannot activate Dancer off of its own move
+ if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove)
+ {
+ gBattleScripting.savedBattler = gBattlerTarget | 0x4;
+ gBattleScripting.savedBattler |= (gBattlerAttacker << 4);
+ gSpecialStatuses[gBattlerAttacker].dancerUsedMove = TRUE;
+ }
+ for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++)
+ {
+ if (GetBattlerAbility(battler) == ABILITY_DANCER && !gSpecialStatuses[battler].dancerUsedMove)
+ {
+ if (!nextDancer || (gBattleMons[battler].speed < gBattleMons[nextDancer & 0x3].speed))
+ nextDancer = battler | 0x4;
+ }
+ }
+ if (nextDancer && AbilityBattleEffects(ABILITYEFFECT_MOVE_END_OTHER, nextDancer & 0x3, 0, 0, 0))
+ effect = TRUE;
+ }
+ }
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_EMERGENCY_EXIT: // Special case, because moves hitting multiple opponents stop after switching out
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattleResources->flags->flags[i] & RESOURCE_FLAG_EMERGENCY_EXIT)
+ {
+ gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_EMERGENCY_EXIT;
+ gBattlerTarget = gBattlerAbility = i;
+ BattleScriptPushCursor();
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || GetBattlerSide(i) == B_SIDE_PLAYER)
+ {
+ if (B_ABILITY_POP_UP)
+ gBattlescriptCurrInstr = BattleScript_EmergencyExit;
+ else
+ gBattlescriptCurrInstr = BattleScript_EmergencyExitNoPopUp;
+ }
+ else
+ {
+ if (B_ABILITY_POP_UP)
+ gBattlescriptCurrInstr = BattleScript_EmergencyExitWild;
+ else
+ gBattlescriptCurrInstr = BattleScript_EmergencyExitWildNoPopUp;
+ }
+ return;
+ }
+ }
+ gBattleScripting.moveendState++;
+ break;
+ case MOVEEND_CLEAR_BITS: // Clear/Set bits for things like using a move for all targets and all hits.
+ if (gSpecialStatuses[gBattlerAttacker].instructedChosenTarget)
+ *(gBattleStruct->moveTarget + gBattlerAttacker) = gSpecialStatuses[gBattlerAttacker].instructedChosenTarget & 0x3;
+ if (gSpecialStatuses[gBattlerAttacker].dancerOriginalTarget)
+ *(gBattleStruct->moveTarget + gBattlerAttacker) = gSpecialStatuses[gBattlerAttacker].dancerOriginalTarget & 0x3;
+
+ #if B_RAMPAGE_CANCELLING >= GEN_5
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_RAMPAGE // If we're rampaging
+ && (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) // And it is unusable
+ && (gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) != STATUS2_LOCK_CONFUSE_TURN(1)) // And won't end this turn
+ CancelMultiTurnMoves(gBattlerAttacker); // Cancel it
+ #endif
+
+ gProtectStructs[gBattlerAttacker].usesBouncedMove = FALSE;
+ gProtectStructs[gBattlerAttacker].targetAffected = FALSE;
+ gBattleStruct->ateBoost[gBattlerAttacker] = 0;
+ gStatuses3[gBattlerAttacker] &= ~STATUS3_ME_FIRST;
+ gSpecialStatuses[gBattlerAttacker].gemBoost = FALSE;
+ gSpecialStatuses[gBattlerAttacker].damagedMons = 0;
+ gSpecialStatuses[gBattlerTarget].berryReduced = FALSE;
+ gBattleScripting.moveEffect = 0;
+ // clear attacker z move data
+ gBattleStruct->zmove.active = FALSE;
+ gBattleStruct->zmove.toBeUsed[gBattlerAttacker] = MOVE_NONE;
+ gBattleStruct->zmove.effect = EFFECT_HIT;
gBattleScripting.moveendState++;
break;
case MOVEEND_COUNT:
@@ -4464,99 +5664,18 @@ static void Cmd_moveend(void)
gBattlescriptCurrInstr += 3;
}
-static void Cmd_typecalc2(void)
+static void Cmd_sethealblock(void)
{
- u8 flags = 0;
- s32 i = 0;
- u8 moveType = gBattleMoves[gCurrentMove].type;
-
- if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK)
{
- gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
- gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
- gLastLandedMoves[gBattlerTarget] = 0;
- gBattleCommunication[MISS_TYPE] = B_MSG_GROUND_MISS;
- RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
- {
- if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
- {
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
- {
- break;
- }
- else
- {
- i += 3;
- continue;
- }
- }
-
- if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
- {
- // check type1
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1)
- {
- if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
- {
- gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
- break;
- }
- if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE)
- {
- flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
- }
- if (TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE)
- {
- flags |= MOVE_RESULT_SUPER_EFFECTIVE;
- }
- }
- // check type2
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2)
- {
- if (gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
- && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
- {
- gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
- break;
- }
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
- && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
- && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE)
- {
- flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
- }
- if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
- && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
- && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE)
- {
- flags |= MOVE_RESULT_SUPER_EFFECTIVE;
- }
- }
- }
- i += 3;
- }
+ gStatuses3[gBattlerTarget] |= STATUS3_HEAL_BLOCK;
+ gDisableStructs[gBattlerTarget].healBlockTimer = 5;
+ gBattlescriptCurrInstr += 5;
}
-
- if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD
- && !(flags & MOVE_RESULT_NO_EFFECT)
- && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2
- && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
- && gBattleMoves[gCurrentMove].power)
- {
- gLastUsedAbility = ABILITY_WONDER_GUARD;
- gMoveResultFlags |= MOVE_RESULT_MISSED;
- gLastLandedMoves[gBattlerTarget] = 0;
- gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_DMG;
- RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
- }
- if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
- gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
-
- gBattlescriptCurrInstr++;
}
static void Cmd_returnatktoball(void)
@@ -4596,20 +5715,21 @@ static void Cmd_switchindataupdate(void)
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
oldData = gBattleMons[gActiveBattler];
- monData = (u8*)(&gBattleMons[gActiveBattler]);
+ monData = (u8 *)(&gBattleMons[gActiveBattler]);
for (i = 0; i < sizeof(struct BattlePokemon); i++)
- monData[i] = gBattleBufferB[gActiveBattler][4 + i];
+ monData[i] = gBattleResources->bufferB[gActiveBattler][4 + i];
gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1;
gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2;
+ gBattleMons[gActiveBattler].type3 = TYPE_MYSTERY;
gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum);
// check knocked off item
i = GetBattlerSide(gActiveBattler);
if (gWishFutureKnock.knockedOffMons[i] & gBitTable[gBattlerPartyIndexes[gActiveBattler]])
{
- gBattleMons[gActiveBattler].item = 0;
+ gBattleMons[gActiveBattler].item = ITEM_NONE;
}
if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS)
@@ -4651,7 +5771,7 @@ static void Cmd_switchinanim(void)
| BATTLE_TYPE_RECORDED_LINK
| BATTLE_TYPE_TRAINER_HILL
| BATTLE_TYPE_FRONTIER)))
- HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality);
+ HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBattler].species), FLAG_SET_SEEN, gBattleMons[gActiveBattler].personality);
gAbsentBattlerFlags &= ~(gBitTable[gActiveBattler]);
@@ -4664,29 +5784,38 @@ static void Cmd_switchinanim(void)
BattleArena_InitPoints();
}
-static void Cmd_jumpifcantswitch(void)
+bool32 CanBattlerSwitch(u32 battlerId)
{
- s32 i;
- s32 lastMonId;
+ s32 i, lastMonId, battlerIn1, battlerIn2;
+ bool32 ret = FALSE;
struct Pokemon *party;
- gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~SWITCH_IGNORE_ESCAPE_PREVENTION);
-
- if (!(gBattlescriptCurrInstr[1] & SWITCH_IGNORE_ESCAPE_PREVENTION)
- && ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
- || (gStatuses3[gActiveBattler] & STATUS3_ROOTED)))
+ if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
{
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ party = gEnemyParty;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && i != gBattlerPartyIndexes[battlerIn1] && i != gBattlerPartyIndexes[battlerIn2])
+ break;
+ }
+
+ ret = (i != PARTY_SIZE);
}
else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
- if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
party = gEnemyParty;
else
party = gPlayerParty;
lastMonId = 0;
- if (gActiveBattler & 2)
+ if (battlerId & 2)
lastMonId = MULTI_PARTY_SIZE;
for (i = lastMonId; i < lastMonId + MULTI_PARTY_SIZE; i++)
@@ -4694,32 +5823,29 @@ static void Cmd_jumpifcantswitch(void)
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
&& GetMonData(&party[i], MON_DATA_HP) != 0
- && gBattlerPartyIndexes[gActiveBattler] != i)
+ && gBattlerPartyIndexes[battlerId] != i)
break;
}
- if (i == lastMonId + MULTI_PARTY_SIZE)
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
- else
- gBattlescriptCurrInstr += 6;
+ ret = (i != lastMonId + MULTI_PARTY_SIZE);
}
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (gBattleTypeFlags & BATTLE_TYPE_TOWER_LINK_MULTI)
{
- if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
party = gPlayerParty;
lastMonId = 0;
- if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(battlerId)) == TRUE)
lastMonId = MULTI_PARTY_SIZE;
}
else
{
party = gEnemyParty;
- if (gActiveBattler == 1)
+ if (battlerId == 1)
lastMonId = 0;
else
lastMonId = MULTI_PARTY_SIZE;
@@ -4727,13 +5853,13 @@ static void Cmd_jumpifcantswitch(void)
}
else
{
- if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
party = gEnemyParty;
else
party = gPlayerParty;
lastMonId = 0;
- if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(battlerId)) == TRUE)
lastMonId = MULTI_PARTY_SIZE;
}
@@ -4742,21 +5868,18 @@ static void Cmd_jumpifcantswitch(void)
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
&& GetMonData(&party[i], MON_DATA_HP) != 0
- && gBattlerPartyIndexes[gActiveBattler] != i)
+ && gBattlerPartyIndexes[battlerId] != i)
break;
}
- if (i == lastMonId + MULTI_PARTY_SIZE)
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
- else
- gBattlescriptCurrInstr += 6;
+ ret = (i != lastMonId + MULTI_PARTY_SIZE);
}
- else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
{
party = gEnemyParty;
lastMonId = 0;
- if (gActiveBattler == B_POSITION_OPPONENT_RIGHT)
+ if (battlerId == B_POSITION_OPPONENT_RIGHT)
lastMonId = PARTY_SIZE / 2;
for (i = lastMonId; i < lastMonId + (PARTY_SIZE / 2); i++)
@@ -4764,20 +5887,15 @@ static void Cmd_jumpifcantswitch(void)
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
&& GetMonData(&party[i], MON_DATA_HP) != 0
- && gBattlerPartyIndexes[gActiveBattler] != i)
+ && gBattlerPartyIndexes[battlerId] != i)
break;
}
- if (i == lastMonId + (PARTY_SIZE / 2))
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
- else
- gBattlescriptCurrInstr += 6;
+ ret = (i != lastMonId + (PARTY_SIZE / 2));
}
else
{
- u8 battlerIn1, battlerIn2;
-
- if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
{
battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
@@ -4790,6 +5908,7 @@ static void Cmd_jumpifcantswitch(void)
}
else
{
+ // Check if attacker side has mon to switch into
battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
@@ -4809,10 +5928,26 @@ static void Cmd_jumpifcantswitch(void)
break;
}
- if (i == PARTY_SIZE)
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
- else
+ ret = (i != PARTY_SIZE);
+ }
+ return ret;
+}
+
+static void Cmd_jumpifcantswitch(void)
+{
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~SWITCH_IGNORE_ESCAPE_PREVENTION);
+
+ if (!(gBattlescriptCurrInstr[1] & SWITCH_IGNORE_ESCAPE_PREVENTION)
+ && !CanBattlerEscape(gActiveBattler))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ }
+ else
+ {
+ if (CanBattlerSwitch(gActiveBattler))
gBattlescriptCurrInstr += 6;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
}
}
@@ -5005,7 +6140,7 @@ static void Cmd_openpartyscreen(void)
if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits)
{
gActiveBattler = 2;
- if (HasNoMonsToSwitch(gActiveBattler, gBattleBufferB[0][1], PARTY_SIZE))
+ if (HasNoMonsToSwitch(gActiveBattler, gBattleResources->bufferB[0][1], PARTY_SIZE))
{
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler);
@@ -5021,7 +6156,7 @@ static void Cmd_openpartyscreen(void)
if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1])
{
gActiveBattler = 3;
- if (HasNoMonsToSwitch(gActiveBattler, gBattleBufferB[1][1], PARTY_SIZE))
+ if (HasNoMonsToSwitch(gActiveBattler, gBattleResources->bufferB[1][1], PARTY_SIZE))
{
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler);
@@ -5129,12 +6264,12 @@ static void Cmd_switchhandleorder(void)
case 0:
for (i = 0; i < gBattlersCount; i++)
{
- if (gBattleBufferB[i][0] == CONTROLLER_CHOSENMONRETURNVALUE)
+ if (gBattleResources->bufferB[i][0] == CONTROLLER_CHOSENMONRETURNVALUE)
{
- *(gBattleStruct->monToSwitchIntoId + i) = gBattleBufferB[i][1];
+ *(gBattleStruct->monToSwitchIntoId + i) = gBattleResources->bufferB[i][1];
if (!(gBattleStruct->field_93 & gBitTable[i]))
{
- RecordedBattle_SetBattlerAction(i, gBattleBufferB[i][1]);
+ RecordedBattle_SetBattlerAction(i, gBattleResources->bufferB[i][1]);
gBattleStruct->field_93 |= gBitTable[i];
}
}
@@ -5147,23 +6282,23 @@ static void Cmd_switchhandleorder(void)
case 2:
if (!(gBattleStruct->field_93 & gBitTable[gActiveBattler]))
{
- RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][1]);
+ RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][1]);
gBattleStruct->field_93 |= gBitTable[gActiveBattler];
}
// fall through
case 3:
- gBattleCommunication[0] = gBattleBufferB[gActiveBattler][1];
- *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1];
+ gBattleCommunication[0] = gBattleResources->bufferB[gActiveBattler][1];
+ *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][1];
if (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
- *(gActiveBattler * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF;
- *(gActiveBattler * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0);
- *(gActiveBattler * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 1) = gBattleBufferB[gActiveBattler][3];
+ *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF;
+ *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleResources->bufferB[gActiveBattler][2] & 0xF0);
+ *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 1) = gBattleResources->bufferB[gActiveBattler][3];
- *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0);
- *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4;
- *((gActiveBattler ^ BIT_FLANK) * 3 + (u8*)(gBattleStruct->battlerPartyOrders) + 2) = gBattleBufferB[gActiveBattler][3];
+ *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0);
+ *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleResources->bufferB[gActiveBattler][2] & 0xF0) >> 4;
+ *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 2) = gBattleResources->bufferB[gActiveBattler][3];
}
else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
@@ -5175,14 +6310,29 @@ static void Cmd_switchhandleorder(void)
}
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species)
- PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, gActiveBattler, gBattleBufferB[gActiveBattler][1])
-
+ PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, gActiveBattler, gBattleResources->bufferB[gActiveBattler][1])
break;
}
gBattlescriptCurrInstr += 3;
}
+static void SetDmgHazardsBattlescript(u8 battlerId, u8 multistringId)
+{
+ gBattleMons[battlerId].status2 &= ~STATUS2_DESTINY_BOND;
+ gHitMarker &= ~HITMARKER_DESTINYBOND;
+ gBattleScripting.battler = battlerId;
+ gBattleCommunication[MULTISTRING_CHOOSER] = multistringId;
+
+ BattleScriptPushCursor();
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ gBattlescriptCurrInstr = BattleScript_DmgHazardsOnTarget;
+ else if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
+ gBattlescriptCurrInstr = BattleScript_DmgHazardsOnAttacker;
+ else
+ gBattlescriptCurrInstr = BattleScript_DmgHazardsOnFaintedBattler;
+}
+
static void Cmd_switchineffects(void)
{
s32 i;
@@ -5193,75 +6343,141 @@ static void Cmd_switchineffects(void)
gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler);
gSpecialStatuses[gActiveBattler].faintedHasReplacement = FALSE;
- if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED)
- && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES)
- && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
- && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE)
+ if (!IsBattlerAIControlled(gActiveBattler))
+ gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[gActiveBattler]];
+
+ // Neutralizing Gas announces itself before hazards
+ if (gBattleMons[gActiveBattler].ability == ABILITY_NEUTRALIZING_GAS && gSpecialStatuses[gActiveBattler].announceNeutralizingGas == 0)
{
- u8 spikesDmg;
-
- gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_SPIKES_DAMAGED;
-
- gBattleMons[gActiveBattler].status2 &= ~STATUS2_DESTINY_BOND;
- gHitMarker &= ~HITMARKER_DESTINYBOND;
-
- spikesDmg = (5 - gSideTimers[GetBattlerSide(gActiveBattler)].spikesAmount) * 2;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS;
+ gSpecialStatuses[gActiveBattler].announceNeutralizingGas = TRUE;
+ gBattlerAbility = gActiveBattler;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SwitchInAbilityMsgRet;
+ }
+ else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED)
+ && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES)
+ && GetBattlerAbility(gActiveBattler) != ABILITY_MAGIC_GUARD
+ && IsBattlerAffectedByHazards(gActiveBattler, FALSE)
+ && IsBattlerGrounded(gActiveBattler))
+ {
+ u8 spikesDmg = (5 - gSideTimers[GetBattlerSide(gActiveBattler)].spikesAmount) * 2;
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / (spikesDmg);
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
+ gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_SPIKES_DAMAGED;
+ SetDmgHazardsBattlescript(gActiveBattler, 0);
+ }
+ else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK_DAMAGED)
+ && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK)
+ && IsBattlerAffectedByHazards(gActiveBattler, FALSE)
+ && GetBattlerAbility(gActiveBattler) != ABILITY_MAGIC_GUARD)
+ {
+ gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_STEALTH_ROCK_DAMAGED;
+ gBattleMoveDamage = GetStealthHazardDamage(gBattleMoves[MOVE_STEALTH_ROCK].type, gActiveBattler);
+
+ if (gBattleMoveDamage != 0)
+ SetDmgHazardsBattlescript(gActiveBattler, 1);
+ }
+ else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES_DAMAGED)
+ && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES)
+ && IsBattlerGrounded(gActiveBattler))
+ {
+ gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_TOXIC_SPIKES_DAMAGED;
+ if (IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_POISON)) // Absorb the toxic spikes.
+ {
+ gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~SIDE_STATUS_TOXIC_SPIKES;
+ gSideTimers[GetBattlerSide(gActiveBattler)].toxicSpikesAmount = 0;
+ gBattleScripting.battler = gActiveBattler;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ToxicSpikesAbsorbed;
+ }
+ else if (IsBattlerAffectedByHazards(gActiveBattler, TRUE))
+ {
+ if (!(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)
+ && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)
+ && GetBattlerAbility(gActiveBattler) != ABILITY_IMMUNITY
+ && !(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SAFEGUARD)
+ && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN))
+ {
+ if (gSideTimers[GetBattlerSide(gActiveBattler)].toxicSpikesAmount >= 2)
+ gBattleMons[gActiveBattler].status1 |= STATUS1_TOXIC_POISON;
+ else
+ gBattleMons[gActiveBattler].status1 |= STATUS1_POISON;
+
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattleScripting.battler = gActiveBattler;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ToxicSpikesPoisoned;
+ }
+ }
+ }
+ else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STICKY_WEB_DAMAGED)
+ && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STICKY_WEB)
+ && IsBattlerAffectedByHazards(gActiveBattler, FALSE)
+ && IsBattlerGrounded(gActiveBattler))
+ {
+ gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_STICKY_WEB_DAMAGED;
+ gBattleScripting.battler = gActiveBattler;
+ SET_STATCHANGER(STAT_SPEED, 1, TRUE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_StickyWebOnSwitchIn;
+ }
+ else if (gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP && gBattleStruct->zmove.healReplacement)
+ {
+ gBattleStruct->zmove.healReplacement = FALSE;
+ gBattleMoveDamage = -1 * (gBattleMons[gActiveBattler].maxHP);
gBattleScripting.battler = gActiveBattler;
BattleScriptPushCursor();
-
- if (gBattlescriptCurrInstr[1] == BS_TARGET)
- gBattlescriptCurrInstr = BattleScript_SpikesOnTarget;
- else if (gBattlescriptCurrInstr[1] == BS_ATTACKER)
- gBattlescriptCurrInstr = BattleScript_SpikesOnAttacker;
- else
- gBattlescriptCurrInstr = BattleScript_SpikesOnFaintedBattler;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_HP_TRAP;
+ gBattlescriptCurrInstr = BattleScript_HealReplacementZMove;
+ return;
}
else
{
// There is a hack here to ensure the truant counter will be 0 when the battler's next turn starts.
// The truant counter is not updated in the case where a mon switches in after a lost judgement in the battle arena.
- if (gBattleMons[gActiveBattler].ability == ABILITY_TRUANT && !gDisableStructs[gActiveBattler].truantSwitchInHack)
+ if (GetBattlerAbility(gActiveBattler) == ABILITY_TRUANT
+ && gCurrentActionFuncId != B_ACTION_USE_MOVE
+ && !gDisableStructs[gActiveBattler].truantSwitchInHack)
gDisableStructs[gActiveBattler].truantCounter = 1;
gDisableStructs[gActiveBattler].truantSwitchInHack = 0;
- if (!AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0)
- && !ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE))
+ if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0)
+ || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE)
+ || AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE2, 0, 0, 0, 0)
+ || AbilityBattleEffects(ABILITYEFFECT_TRACE2, 0, 0, 0, 0)
+ || AbilityBattleEffects(ABILITYEFFECT_FORECAST, 0, 0, 0, 0))
+ return;
+
+ gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED | SIDE_STATUS_TOXIC_SPIKES_DAMAGED | SIDE_STATUS_STEALTH_ROCK_DAMAGED | SIDE_STATUS_STICKY_WEB_DAMAGED);
+
+ for (i = 0; i < gBattlersCount; i++)
{
- gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~SIDE_STATUS_SPIKES_DAMAGED;
+ if (gBattlerByTurnOrder[i] == gActiveBattler)
+ gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER;
- for (i = 0; i < gBattlersCount; i++)
- {
- if (gBattlerByTurnOrder[i] == gActiveBattler)
- gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER;
- }
-
- for (i = 0; i < gBattlersCount; i++)
- {
- u16* hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(i)];
- *hpOnSwitchout = gBattleMons[i].hp;
- }
-
- if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_1)
- {
- u32 hitmarkerFaintBits = gHitMarker >> 28;
-
- gBattlerFainted++;
- while (1)
- {
- if (hitmarkerFaintBits & gBitTable[gBattlerFainted] && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted]))
- break;
- if (gBattlerFainted >= gBattlersCount)
- break;
- gBattlerFainted++;
- }
- }
- gBattlescriptCurrInstr += 2;
+ gBattleStruct->hpOnSwitchout[GetBattlerSide(i)] = gBattleMons[i].hp;
}
+
+ if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_1)
+ {
+ u32 hitmarkerFaintBits = gHitMarker >> 28;
+
+ gBattlerFainted++;
+ while (1)
+ {
+ if (hitmarkerFaintBits & gBitTable[gBattlerFainted] && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted]))
+ break;
+ if (gBattlerFainted >= gBattlersCount)
+ break;
+ gBattlerFainted++;
+ }
+ }
+ gBattlescriptCurrInstr += 2;
}
}
@@ -5366,7 +6582,7 @@ static void Cmd_yesnoboxlearnmove(void)
switch (gBattleScripting.learnMoveState)
{
case 0:
- HandleBattleWindow(24, 8, 29, 13, 0);
+ HandleBattleWindow(YESNOBOX_X_Y, 0);
BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO);
gBattleScripting.learnMoveState++;
gBattleCommunication[CURSOR_POSITION] = 0;
@@ -5392,7 +6608,7 @@ static void Cmd_yesnoboxlearnmove(void)
PlaySE(SE_SELECT);
if (gBattleCommunication[1] == 0)
{
- HandleBattleWindow(24, 8, 29, 13, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
gBattleScripting.learnMoveState++;
}
@@ -5463,7 +6679,7 @@ static void Cmd_yesnoboxlearnmove(void)
}
break;
case 5:
- HandleBattleWindow(24, 8, 29, 13, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
gBattlescriptCurrInstr += 5;
break;
case 6:
@@ -5480,7 +6696,7 @@ static void Cmd_yesnoboxstoplearningmove(void)
switch (gBattleScripting.learnMoveState)
{
case 0:
- HandleBattleWindow(24, 8, 29, 13, 0);
+ HandleBattleWindow(YESNOBOX_X_Y, 0);
BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO);
gBattleScripting.learnMoveState++;
gBattleCommunication[CURSOR_POSITION] = 0;
@@ -5510,13 +6726,13 @@ static void Cmd_yesnoboxstoplearningmove(void)
else
gBattlescriptCurrInstr += 5;
- HandleBattleWindow(24, 8, 29, 13, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
}
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
- HandleBattleWindow(24, 8, 29, 13, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
}
break;
}
@@ -5530,7 +6746,7 @@ static void Cmd_hitanimation(void)
{
gBattlescriptCurrInstr += 2;
}
- else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE) || gDisableStructs[gActiveBattler].substituteHP == 0)
+ else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove)) || gDisableStructs[gActiveBattler].substituteHP == 0)
{
BtlController_EmitHitAnimation(BUFFER_A);
MarkBattlerForControllerExec(gActiveBattler);
@@ -5601,13 +6817,38 @@ static u32 GetTrainerMoneyToGive(u16 trainerId)
static void Cmd_getmoneyreward(void)
{
- u32 moneyReward = GetTrainerMoneyToGive(gTrainerBattleOpponent_A);
- if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
- moneyReward += GetTrainerMoneyToGive(gTrainerBattleOpponent_B);
+ u32 money;
+ u8 sPartyLevel = 1;
- AddMoney(&gSaveBlock1Ptr->money, moneyReward);
- PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, moneyReward);
+ if (gBattleOutcome == B_OUTCOME_WON)
+ {
+ money = GetTrainerMoneyToGive(gTrainerBattleOpponent_A);
+ if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
+ money += GetTrainerMoneyToGive(gTrainerBattleOpponent_B);
+ AddMoney(&gSaveBlock1Ptr->money, money);
+ }
+ else
+ {
+ s32 i, count;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) > sPartyLevel)
+ sPartyLevel = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
+ }
+ }
+ for (count = 0, i = 0; i < ARRAY_COUNT(sBadgeFlags); i++)
+ {
+ if (FlagGet(sBadgeFlags[i]) == TRUE)
+ ++count;
+ }
+ money = sWhiteOutBadgeMoney[count] * sPartyLevel;
+ RemoveMoney(&gSaveBlock1Ptr->money, money);
+ }
+ PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, money);
gBattlescriptCurrInstr++;
}
@@ -5627,7 +6868,7 @@ static void Cmd_updatebattlermoves(void)
if (gBattleControllerExecFlags == 0)
{
s32 i;
- struct BattlePokemon *bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBattler][4];
+ struct BattlePokemon *bufferPoke = (struct BattlePokemon *) &gBattleResources->bufferB[gActiveBattler][4];
for (i = 0; i < MAX_MON_MOVES; i++)
{
gBattleMons[gActiveBattler].moves[i] = bufferPoke->moves[i];
@@ -5776,7 +7017,7 @@ static void Cmd_yesnobox(void)
switch (gBattleCommunication[0])
{
case 0:
- HandleBattleWindow(24, 8, 29, 13, 0);
+ HandleBattleWindow(YESNOBOX_X_Y, 0);
BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO);
gBattleCommunication[0]++;
gBattleCommunication[CURSOR_POSITION] = 0;
@@ -5801,13 +7042,13 @@ static void Cmd_yesnobox(void)
{
gBattleCommunication[CURSOR_POSITION] = 1;
PlaySE(SE_SELECT);
- HandleBattleWindow(24, 8, 29, 13, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
gBattlescriptCurrInstr++;
}
else if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- HandleBattleWindow(24, 8, 29, 13, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
gBattlescriptCurrInstr++;
}
break;
@@ -5824,65 +7065,65 @@ static void Cmd_cancelallactions(void)
gBattlescriptCurrInstr++;
}
-static void Cmd_adjustsetdamage(void) // The same as adjustnormaldamage, except there's no random damage multiplier.
+static void Cmd_setgravity(void)
{
- u8 holdEffect, param;
-
- if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ if (gFieldStatuses & STATUS_FIELD_GRAVITY)
{
- holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
- param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
- param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ gFieldStatuses |= STATUS_FIELD_GRAVITY;
+ gFieldTimers.gravityTimer = 5;
+ gBattlescriptCurrInstr += 5;
}
+}
- gPotentialItemEffectBattler = gBattlerTarget;
-
- if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+static bool32 TryCheekPouch(u32 battlerId, u32 itemId)
+{
+ if (ItemId_GetPocket(itemId) == POCKET_BERRIES
+ && GetBattlerAbility(battlerId) == ABILITY_CHEEK_POUCH
+ && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK)
+ && gBattleStruct->ateBerry[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]
+ && !BATTLER_MAX_HP(battlerId))
{
- RecordItemEffectBattle(gBattlerTarget, holdEffect);
- gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / 3;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ gBattlerAbility = battlerId;
+ BattleScriptPush(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = BattleScript_CheekPouchActivates;
+ return TRUE;
}
- if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
- && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
- && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
- {
- gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
- if (gProtectStructs[gBattlerTarget].endured)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
- }
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
- gLastUsedItem = gBattleMons[gBattlerTarget].item;
- }
- }
- gBattlescriptCurrInstr++;
+ return FALSE;
}
static void Cmd_removeitem(void)
{
- u16* usedHeldItem;
+ u16 itemId = 0;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ itemId = gBattleMons[gActiveBattler].item;
- usedHeldItem = &gBattleStruct->usedHeldItems[gActiveBattler];
- *usedHeldItem = gBattleMons[gActiveBattler].item;
- gBattleMons[gActiveBattler].item = 0;
+ // Popped Air Balloon cannot be restored by any means.
+ if (GetBattlerHoldEffect(gActiveBattler, TRUE) != HOLD_EFFECT_AIR_BALLOON)
+ gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gActiveBattler]][GetBattlerSide(gActiveBattler)] = itemId; // Remember if switched out
+
+ gBattleMons[gActiveBattler].item = ITEM_NONE;
+ CheckSetUnburden(gActiveBattler);
BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].item), &gBattleMons[gActiveBattler].item);
MarkBattlerForControllerExec(gActiveBattler);
- gBattlescriptCurrInstr += 2;
+ ClearBattlerItemEffectHistory(gActiveBattler);
+ if (!TryCheekPouch(gActiveBattler, itemId))
+ gBattlescriptCurrInstr += 2;
}
static void Cmd_atknameinbuff1(void)
{
- PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker])
+ PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]);
gBattlescriptCurrInstr++;
}
@@ -6115,14 +7356,14 @@ static bool8 SlideOutLevelUpBanner(void)
static void PutMonIconOnLvlUpBanner(void)
{
u8 spriteId;
- const u16* iconPal;
+ const u16 *iconPal;
struct SpriteSheet iconSheet;
struct SpritePalette iconPalSheet;
u16 species = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPECIES);
u32 personality = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_PERSONALITY);
- const u8* iconPtr = GetMonIconPtr(species, personality);
+ const u8 *iconPtr = GetMonIconPtr(species, personality);
iconSheet.data = iconPtr;
iconSheet.size = 0x200;
iconSheet.tag = TAG_LVLUP_BANNER_MON_ICON;
@@ -6139,7 +7380,7 @@ static void PutMonIconOnLvlUpBanner(void)
gSprites[spriteId].sXOffset = gBattle_BG2_X;
}
-static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite* sprite)
+static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite)
{
sprite->x2 = sprite->sXOffset - gBattle_BG2_X;
@@ -6182,6 +7423,9 @@ static void Cmd_setatktoplayer0(void)
static void Cmd_makevisible(void)
{
+ if (gBattleControllerExecFlags)
+ return;
+
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitSpriteInvisibility(BUFFER_A, FALSE);
MarkBattlerForControllerExec(gActiveBattler);
@@ -6189,17 +7433,11 @@ static void Cmd_makevisible(void)
gBattlescriptCurrInstr += 2;
}
-static void Cmd_recordlastability(void)
+static void Cmd_recordability(void)
{
- gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
-
-#ifdef BUGFIX
- // This command occupies two bytes (one for the command id, and one for the battler id parameter).
+ u8 battler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ RecordAbilityBattle(battler, gBattleMons[battler].ability);
gBattlescriptCurrInstr += 2;
-#else
- gBattlescriptCurrInstr += 1;
-#endif
}
void BufferMoveToLearnIntoBattleTextBuff2(void)
@@ -6223,19 +7461,19 @@ static void Cmd_jumpifplayerran(void)
static void Cmd_hpthresholds(void)
{
- u8 opposingBank;
+ u8 opposingBattler;
s32 result;
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- opposingBank = gActiveBattler ^ BIT_SIDE;
+ opposingBattler = gActiveBattler ^ BIT_SIDE;
- result = gBattleMons[opposingBank].hp * 100 / gBattleMons[opposingBank].maxHP;
+ result = gBattleMons[opposingBattler].hp * 100 / gBattleMons[opposingBattler].maxHP;
if (result == 0)
result = 1;
- if (result > 69 || !gBattleMons[opposingBank].hp)
+ if (result > 69 || gBattleMons[opposingBattler].hp == 0)
gBattleStruct->hpScale = 0;
else if (result > 39)
gBattleStruct->hpScale = 1;
@@ -6250,18 +7488,18 @@ static void Cmd_hpthresholds(void)
static void Cmd_hpthresholds2(void)
{
- u8 opposingBank;
+ u8 opposingBattler;
s32 result;
u8 hpSwitchout;
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- opposingBank = gActiveBattler ^ BIT_SIDE;
- hpSwitchout = *(gBattleStruct->hpOnSwitchout + GetBattlerSide(opposingBank));
- result = (hpSwitchout - gBattleMons[opposingBank].hp) * 100 / hpSwitchout;
+ opposingBattler = gActiveBattler ^ BIT_SIDE;
+ hpSwitchout = *(gBattleStruct->hpOnSwitchout + GetBattlerSide(opposingBattler));
+ result = (hpSwitchout - gBattleMons[opposingBattler].hp) * 100 / hpSwitchout;
- if (gBattleMons[opposingBank].hp >= hpSwitchout)
+ if (gBattleMons[opposingBattler].hp >= hpSwitchout)
gBattleStruct->hpScale = 0;
else if (result <= 29)
gBattleStruct->hpScale = 1;
@@ -6278,25 +7516,530 @@ static void Cmd_useitemonopponent(void)
{
gBattlerInMenuId = gBattlerAttacker;
PokemonUseItemEffects(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, TRUE);
- gBattlescriptCurrInstr += 1;
+ gBattlescriptCurrInstr++;
+}
+
+static bool32 HasAttackerFaintedTarget(void)
+{
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMoves[gCurrentMove].power != 0
+ && (gLastHitBy[gBattlerTarget] == 0xFF || gLastHitBy[gBattlerTarget] == gBattlerAttacker)
+ && gBattleStruct->moveTarget[gBattlerAttacker] == gBattlerTarget
+ && gBattlerTarget != gBattlerAttacker
+ && gCurrentTurnActionNumber == GetBattlerTurnOrderNum(gBattlerAttacker)
+ && (gChosenMove == gChosenMoveByBattler[gBattlerAttacker] || gChosenMove == gBattleMons[gBattlerAttacker].moves[gChosenMovePos]))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void HandleTerrainMove(u16 move)
+{
+ u32 statusFlag = 0;
+ u8 *timer = NULL;
+
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_MISTY_TERRAIN:
+ statusFlag = STATUS_FIELD_MISTY_TERRAIN, timer = &gFieldTimers.terrainTimer;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ break;
+ case EFFECT_GRASSY_TERRAIN:
+ statusFlag = STATUS_FIELD_GRASSY_TERRAIN, timer = &gFieldTimers.terrainTimer;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ break;
+ case EFFECT_ELECTRIC_TERRAIN:
+ statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN, timer = &gFieldTimers.terrainTimer;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ break;
+ case EFFECT_PSYCHIC_TERRAIN:
+ statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.terrainTimer;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ break;
+ case EFFECT_DAMAGE_SET_TERRAIN:
+ switch (gBattleMoves[move].argument)
+ {
+ case 0: //genesis supernova
+ statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.terrainTimer;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ break;
+ case 1: //splintered stormshards
+ if (!(gFieldStatuses & (STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN)))
+ {
+ //no terrain to remove -> jump to battle script pointer
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ // remove all terrain
+ gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_PSYCHIC_TERRAIN);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ default:
+ break;
+ }
+ break;
+ }
+
+ if (gFieldStatuses & statusFlag || statusFlag == 0)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY;
+ gFieldStatuses |= statusFlag;
+ if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER)
+ *timer = 8;
+ else
+ *timer = 5;
+ gBattlescriptCurrInstr += 7;
+ }
+}
+
+bool32 CanPoisonType(u8 battlerAttacker, u8 battlerTarget)
+{
+ return ((GetBattlerAbility(battlerAttacker) == ABILITY_CORROSION && gBattleMoves[gCurrentMove].split == SPLIT_STATUS)
+ || !(IS_BATTLER_OF_TYPE(battlerTarget, TYPE_POISON) || IS_BATTLER_OF_TYPE(battlerTarget, TYPE_STEEL)));
+}
+
+bool32 CanParalyzeType(u8 battlerAttacker, u8 battlerTarget)
+{
+ return !(B_PARALYZE_ELECTRIC >= GEN_6 && IS_BATTLER_OF_TYPE(battlerTarget, TYPE_ELECTRIC));
+}
+
+bool32 CanUseLastResort(u8 battlerId)
+{
+ u32 i;
+ u32 knownMovesCount = 0, usedMovesCount = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[battlerId].moves[i] != MOVE_NONE)
+ knownMovesCount++;
+ if (i != gCurrMovePos && gDisableStructs[battlerId].usedMoves & gBitTable[i]) // Increment used move count for all moves except current Last Resort.
+ usedMovesCount++;
+ }
+
+ return (knownMovesCount >= 2 && usedMovesCount >= knownMovesCount - 1);
+}
+
+#define DEFOG_CLEAR(status, structField, battlescript, move)\
+{ \
+ if (*sideStatuses & status) \
+ { \
+ if (clear) \
+ { \
+ if (move) \
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, move);\
+ *sideStatuses &= ~status; \
+ sideTimer->structField = 0; \
+ BattleScriptPushCursor(); \
+ gBattlescriptCurrInstr = battlescript; \
+ } \
+ return TRUE; \
+ } \
+}
+
+static bool32 ClearDefogHazards(u8 battlerAtk, bool32 clear)
+{
+ s32 i;
+ for (i = 0; i < 2; i++)
+ {
+ struct SideTimer *sideTimer = &gSideTimers[i];
+ u32 *sideStatuses = &gSideStatuses[i];
+
+ gBattlerAttacker = i;
+ if (GetBattlerSide(battlerAtk) != i)
+ {
+ DEFOG_CLEAR(SIDE_STATUS_REFLECT, reflectTimer, BattleScript_SideStatusWoreOffReturn, MOVE_REFLECT);
+ DEFOG_CLEAR(SIDE_STATUS_LIGHTSCREEN, lightscreenTimer, BattleScript_SideStatusWoreOffReturn, MOVE_LIGHT_SCREEN);
+ DEFOG_CLEAR(SIDE_STATUS_MIST, mistTimer, BattleScript_SideStatusWoreOffReturn, MOVE_MIST);
+ DEFOG_CLEAR(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, BattleScript_SideStatusWoreOffReturn, MOVE_AURORA_VEIL);
+ DEFOG_CLEAR(SIDE_STATUS_SAFEGUARD, safeguardTimer, BattleScript_SideStatusWoreOffReturn, MOVE_SAFEGUARD);
+ }
+ DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesFree, 0);
+ DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockFree, 0);
+ DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesFree, 0);
+ DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebFree, 0);
+ }
+
+ return FALSE;
+}
+
+u32 IsFlowerVeilProtected(u32 battler)
+{
+ if (IS_BATTLER_OF_TYPE(battler, TYPE_GRASS))
+ return IsAbilityOnSide(battler, ABILITY_FLOWER_VEIL);
+ else
+ return 0;
+}
+
+u32 IsLeafGuardProtected(u32 battler)
+{
+ if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN))
+ return GetBattlerAbility(battler) == ABILITY_LEAF_GUARD;
+ else
+ return 0;
+}
+
+bool32 IsShieldsDownProtected(u32 battler)
+{
+ return (GetBattlerAbility(battler) == ABILITY_SHIELDS_DOWN
+ && GetFormIdFromFormSpeciesId(gBattleMons[battler].species) < GetFormIdFromFormSpeciesId(SPECIES_MINIOR_CORE_RED)); // Minior is not in core form
+}
+
+u32 IsAbilityStatusProtected(u32 battler)
+{
+ return IsFlowerVeilProtected(battler)
+ || IsLeafGuardProtected(battler)
+ || IsShieldsDownProtected(battler);
+}
+
+static void RecalcBattlerStats(u32 battler, struct Pokemon *mon)
+{
+ CalculateMonStats(mon);
+ gBattleMons[battler].level = GetMonData(mon, MON_DATA_LEVEL);
+ gBattleMons[battler].hp = GetMonData(mon, MON_DATA_HP);
+ gBattleMons[battler].maxHP = GetMonData(mon, MON_DATA_MAX_HP);
+ gBattleMons[battler].attack = GetMonData(mon, MON_DATA_ATK);
+ gBattleMons[battler].defense = GetMonData(mon, MON_DATA_DEF);
+ gBattleMons[battler].speed = GetMonData(mon, MON_DATA_SPEED);
+ gBattleMons[battler].spAttack = GetMonData(mon, MON_DATA_SPATK);
+ gBattleMons[battler].spDefense = GetMonData(mon, MON_DATA_SPDEF);
+ gBattleMons[battler].ability = GetMonAbility(mon);
+ gBattleMons[battler].type1 = gBaseStats[gBattleMons[battler].species].type1;
+ gBattleMons[battler].type2 = gBaseStats[gBattleMons[battler].species].type2;
+}
+
+static u32 GetHighestStatId(u32 battlerId)
+{
+ u32 i, highestId = STAT_ATK, highestStat = gBattleMons[battlerId].attack;
+
+ for (i = STAT_DEF; i < NUM_STATS; i++)
+ {
+ u16 *statVal = &gBattleMons[battlerId].attack + (i - 1);
+ if (*statVal > highestStat)
+ {
+ highestStat = *statVal;
+ highestId = i;
+ }
+ }
+ return highestId;
+}
+
+static bool32 IsRototillerAffected(u32 battlerId)
+{
+ if (!IsBattlerAlive(battlerId))
+ return FALSE;
+ if (!IsBattlerGrounded(battlerId))
+ return FALSE; // Only grounded battlers affected
+ if (!IS_BATTLER_OF_TYPE(battlerId, TYPE_GRASS))
+ return FALSE; // Only grass types affected
+ if (gStatuses3[battlerId] & STATUS3_SEMI_INVULNERABLE)
+ return FALSE; // Rototiller doesn't affected semi-invulnerable battlers
+ if (BlocksPrankster(MOVE_ROTOTILLER, gBattlerAttacker, battlerId, FALSE))
+ return FALSE;
+ return TRUE;
+}
+
+#define COURTCHANGE_SWAP(status, structField, temp) \
+{ \
+ temp = gSideStatuses[B_SIDE_PLAYER]; \
+ if (gSideStatuses[B_SIDE_OPPONENT] & status) \
+ gSideStatuses[B_SIDE_PLAYER] |= status; \
+ else \
+ gSideStatuses[B_SIDE_PLAYER] &= ~(status); \
+ if (temp & status) \
+ gSideStatuses[B_SIDE_OPPONENT] |= status; \
+ else \
+ gSideStatuses[B_SIDE_OPPONENT] &= ~(status); \
+ SWAP(sideTimerPlayer->structField, sideTimerOpp->structField, temp);\
+} \
+
+#define UPDATE_COURTCHANGED_BATTLER(structField)\
+{ \
+ sideTimerPlayer->structField ^= BIT_SIDE; \
+ sideTimerOpp->structField ^= BIT_SIDE; \
+} \
+
+static bool32 CourtChangeSwapSideStatuses(void)
+{
+ struct SideTimer *sideTimerPlayer = &gSideTimers[B_SIDE_PLAYER];
+ struct SideTimer *sideTimerOpp = &gSideTimers[B_SIDE_OPPONENT];
+ u32 temp;
+
+ // TODO: add Pledge-related effects
+ // TODO: add Gigantamax-related effects
+
+ // Swap timers and statuses
+ COURTCHANGE_SWAP(SIDE_STATUS_REFLECT, reflectTimer, temp)
+ COURTCHANGE_SWAP(SIDE_STATUS_LIGHTSCREEN, lightscreenTimer, temp)
+ COURTCHANGE_SWAP(SIDE_STATUS_MIST, mistTimer, temp);
+ COURTCHANGE_SWAP(SIDE_STATUS_SAFEGUARD, safeguardTimer, temp);
+ COURTCHANGE_SWAP(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, temp);
+ COURTCHANGE_SWAP(SIDE_STATUS_TAILWIND, tailwindTimer, temp);
+ // Lucky Chant doesn't exist in gen 8, but seems like it should be affected by Court Change
+ COURTCHANGE_SWAP(SIDE_STATUS_LUCKY_CHANT, luckyChantTimer, temp);
+ COURTCHANGE_SWAP(SIDE_STATUS_SPIKES, spikesAmount, temp);
+ COURTCHANGE_SWAP(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, temp);
+ COURTCHANGE_SWAP(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, temp);
+ COURTCHANGE_SWAP(SIDE_STATUS_STICKY_WEB, stickyWebAmount, temp);
+
+ // Change battler IDs of swapped effects. Needed for the correct string when they expire
+ // E.g. "Foe's Reflect wore off!"
+ UPDATE_COURTCHANGED_BATTLER(reflectBattlerId);
+ UPDATE_COURTCHANGED_BATTLER(lightscreenBattlerId);
+ UPDATE_COURTCHANGED_BATTLER(mistBattlerId);
+ UPDATE_COURTCHANGED_BATTLER(safeguardBattlerId);
+ UPDATE_COURTCHANGED_BATTLER(auroraVeilBattlerId);
+ UPDATE_COURTCHANGED_BATTLER(tailwindBattlerId);
+ UPDATE_COURTCHANGED_BATTLER(luckyChantBattlerId);
+
+ // For Mirror Armor only
+ gBattleStruct->stickyWebUser = gBattlerAttacker;
+
+ // Track which side originally set the Sticky Web
+ SWAP(sideTimerPlayer->stickyWebBattlerSide, sideTimerOpp->stickyWebBattlerSide, temp);
}
static void Cmd_various(void)
{
- u8 side;
- s32 i;
+ struct Pokemon *mon;
+ s32 i, j;
+ u8 data[10];
+ u32 side, bits;
+
+ if (gBattleControllerExecFlags)
+ return;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
switch (gBattlescriptCurrInstr[2])
{
+ // Roar will fail in a double wild battle when used by the player against one of the two alive wild mons.
+ // Also when an opposing wild mon uses it againt its partner.
+ case VARIOUS_JUMP_IF_ROAR_FAILS:
+ if (WILD_DOUBLE_BATTLE
+ && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER
+ && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT
+ && IS_WHOLE_SIDE_ALIVE(gBattlerTarget))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else if (WILD_DOUBLE_BATTLE
+ && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT
+ && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_JUMP_IF_ABSENT:
+ if (!IsBattlerAlive(gActiveBattler))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED:
+ if (IsShieldsDownProtected(gActiveBattler))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_JUMP_IF_NO_HOLD_EFFECT:
+ if (GetBattlerHoldEffect(gActiveBattler, TRUE) != gBattlescriptCurrInstr[3])
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4);
+ }
+ else
+ {
+ gLastUsedItem = gBattleMons[gActiveBattler].item; // For B_LAST_USED_ITEM
+ gBattlescriptCurrInstr += 8;
+ }
+ return;
+ case VARIOUS_JUMP_IF_NO_ALLY:
+ if (!IsBattlerAlive(BATTLE_PARTNER(gActiveBattler)))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_INFATUATE_WITH_BATTLER:
+ gBattleScripting.battler = gActiveBattler;
+ gBattleMons[gActiveBattler].status2 |= STATUS2_INFATUATED_WITH(GetBattlerForBattleScript(gBattlescriptCurrInstr[3]));
+ gBattlescriptCurrInstr += 4;
+ return;
+ case VARIOUS_SET_LAST_USED_ITEM:
+ gLastUsedItem = gBattleMons[gActiveBattler].item;
+ break;
+ case VARIOUS_TRY_FAIRY_LOCK:
+ if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gFieldStatuses |= STATUS_FIELD_FAIRY_LOCK;
+ gFieldTimers.fairyLockTimer = 2;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_GET_STAT_VALUE:
+ i = gBattlescriptCurrInstr[3];
+ gBattleMoveDamage = *(u16 *)(&gBattleMons[gActiveBattler].attack) + (i - 1);
+ gBattleMoveDamage *= gStatStageRatios[gBattleMons[gActiveBattler].statStages[i]][0];
+ gBattleMoveDamage /= gStatStageRatios[gBattleMons[gActiveBattler].statStages[i]][1];
+ gBattlescriptCurrInstr += 4;
+ return;
+ case VARIOUS_JUMP_IF_FULL_HP:
+ if (BATTLER_MAX_HP(gActiveBattler))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_TRY_FRISK:
+ while (gBattleStruct->friskedBattler < gBattlersCount)
+ {
+ gBattlerTarget = gBattleStruct->friskedBattler++;
+ if (GET_BATTLER_SIDE2(gActiveBattler) != GET_BATTLER_SIDE2(gBattlerTarget)
+ && IsBattlerAlive(gBattlerTarget)
+ && gBattleMons[gBattlerTarget].item != ITEM_NONE)
+ {
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ RecordItemEffectBattle(gBattlerTarget, GetBattlerHoldEffect(gBattlerTarget, FALSE));
+ BattleScriptPushCursor();
+ // If Frisk identifies two mons' items, show the pop-up only once.
+ if (gBattleStruct->friskedAbility)
+ {
+ gBattlescriptCurrInstr = BattleScript_FriskMsg;
+ }
+ else
+ {
+ gBattleStruct->friskedAbility = TRUE;
+ gBattlescriptCurrInstr = BattleScript_FriskMsgWithPopup;
+ }
+ return;
+ }
+ }
+ gBattleStruct->friskedBattler = 0;
+ gBattleStruct->friskedAbility = FALSE;
+ break;
+ case VARIOUS_POISON_TYPE_IMMUNITY:
+ if (!CanPoisonType(gActiveBattler, GetBattlerForBattleScript(gBattlescriptCurrInstr[3])))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4);
+ else
+ gBattlescriptCurrInstr += 8;
+ return;
+ case VARIOUS_PARALYZE_TYPE_IMMUNITY:
+ if (!CanParalyzeType(gActiveBattler, GetBattlerForBattleScript(gBattlescriptCurrInstr[3])))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4);
+ else
+ gBattlescriptCurrInstr += 8;
+ return;
+ case VARIOUS_TRACE_ABILITY:
+ gBattleMons[gActiveBattler].ability = gBattleStruct->tracedAbility[gActiveBattler];
+ RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability);
+ break;
+ case VARIOUS_TRY_ILLUSION_OFF:
+ if (GetIllusionMonPtr(gActiveBattler) != NULL)
+ {
+ gBattlescriptCurrInstr += 3;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_IllusionOff;
+ return;
+ }
+ break;
+ case VARIOUS_SET_SPRITEIGNORE0HP:
+ gBattleStruct->spriteIgnore0Hp = gBattlescriptCurrInstr[3];
+ gBattlescriptCurrInstr += 4;
+ return;
+ case VARIOUS_UPDATE_NICK:
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]];
+ else
+ mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]];
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_NICK);
+ break;
+ case VARIOUS_JUMP_IF_NOT_BERRY:
+ if (ItemId_GetPocket(gBattleMons[gActiveBattler].item) == POCKET_BERRIES)
+ gBattlescriptCurrInstr += 7;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ return;
+ case VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS:
+ if ((gStatuses3[gActiveBattler] & (STATUS3_SEMI_INVULNERABLE | STATUS3_HEAL_BLOCK))
+ || BATTLER_MAX_HP(gActiveBattler)
+ || !gBattleMons[gActiveBattler].hp
+ || !(IsBattlerGrounded(gActiveBattler)))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_GRAVITY_ON_AIRBORNE_MONS:
+ // Cancel all multiturn moves of IN_AIR Pokemon except those being targeted by Sky Drop.
+ if (gStatuses3[gActiveBattler] & STATUS3_ON_AIR && !(gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED))
+ CancelMultiTurnMoves(gActiveBattler);
+
+ gStatuses3[gActiveBattler] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR | STATUS3_SKY_DROPPED);
+ break;
+ case VARIOUS_SPECTRAL_THIEF:
+ // Raise stats
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleStruct->stolenStats[0] & gBitTable[i])
+ {
+ gBattleStruct->stolenStats[0] &= ~(gBitTable[i]);
+ SET_STATCHANGER(i, gBattleStruct->stolenStats[i], FALSE);
+ if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), i, MOVE_EFFECT_CERTAIN | MOVE_EFFECT_AFFECTS_USER, NULL) == STAT_CHANGE_WORKED)
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_StatUpMsg;
+ return;
+ }
+ }
+ }
+ break;
+ case VARIOUS_SET_POWDER:
+ gBattleMons[gActiveBattler].status2 |= STATUS2_POWDER;
+ break;
+ case VARIOUS_ACUPRESSURE:
+ bits = 0;
+ for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
+ {
+ if (CompareStat(gActiveBattler, i, MAX_STAT_STAGE, CMP_LESS_THAN))
+ bits |= gBitTable[i];
+ }
+ if (bits)
+ {
+ u32 statId;
+ do
+ {
+ statId = (Random() % (NUM_BATTLE_STATS - 1)) + 1;
+ } while (!(bits & gBitTable[statId]));
+
+ SET_STATCHANGER(statId, 2, FALSE);
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ return;
case VARIOUS_CANCEL_MULTI_TURN_MOVES:
CancelMultiTurnMoves(gActiveBattler);
break;
case VARIOUS_SET_MAGIC_COAT_TARGET:
gBattlerAttacker = gBattlerTarget;
side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
- if (gSideTimers[side].followmeTimer != 0 && gBattleMons[gSideTimers[side].followmeTarget].hp != 0)
+ if (IsAffectedByFollowMe(gBattlerAttacker, side, gCurrentMove))
gBattlerTarget = gSideTimers[side].followmeTarget;
else
gBattlerTarget = gActiveBattler;
@@ -6314,28 +8057,25 @@ static void Cmd_various(void)
gBattleCommunication[0] = FALSE;
break;
case VARIOUS_RESET_INTIMIDATE_TRACE_BITS:
- gSpecialStatuses[gActiveBattler].intimidatedMon = 0;
- gSpecialStatuses[gActiveBattler].traced = 0;
+ gSpecialStatuses[gActiveBattler].intimidatedMon = FALSE;
+ gSpecialStatuses[gActiveBattler].traced = FALSE;
+ gSpecialStatuses[gActiveBattler].switchInAbilityDone = FALSE;
break;
case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP:
if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId || gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId)
{
- u16 *choicedMove;
-
if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId)
gActiveBattler = 0;
else
gActiveBattler = 2;
- choicedMove = &gBattleStruct->choicedMove[gActiveBattler];
-
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleMons[gActiveBattler].moves[i] == *choicedMove)
+ if (gBattleMons[gActiveBattler].moves[i] == gBattleStruct->choicedMove[gActiveBattler])
break;
}
if (i == MAX_MON_MOVES)
- *choicedMove = 0;
+ gBattleStruct->choicedMove[gActiveBattler] = MOVE_NONE;
}
break;
case VARIOUS_RESET_PLAYER_FAINTED:
@@ -6351,7 +8091,6 @@ static void Cmd_various(void)
// Try and print end-of-turn Battle Palace flavor text (e.g. "A glint appears in mon's eyes")
gBattleCommunication[0] = FALSE; // whether or not msg should be printed
gBattleScripting.battler = gActiveBattler = gBattleCommunication[1];
-
if (!(gBattleStruct->palaceFlags & gBitTable[gActiveBattler])
&& gBattleMons[gActiveBattler].maxHP / 2 >= gBattleMons[gActiveBattler].hp
&& gBattleMons[gActiveBattler].hp != 0
@@ -6364,7 +8103,10 @@ static void Cmd_various(void)
break;
case VARIOUS_ARENA_JUDGMENT_WINDOW:
i = BattleArena_ShowJudgmentWindow(&gBattleCommunication[0]);
- if (i == 0)
+
+ // BattleArena_ShowJudgmentWindow's last state was an intermediate step.
+ // Return without advancing the current instruction so that it will be called again.
+ if (i == ARENA_RESULT_RUNNING)
return;
gBattleCommunication[1] = i;
@@ -6448,26 +8190,1483 @@ static void Cmd_various(void)
return;
break;
case VARIOUS_SET_TELEPORT_OUTCOME:
- if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ // Don't end the battle if one of the wild mons teleported from the wild double battle
+ // and its partner is still alive.
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gActiveBattler)))
+ {
+ gAbsentBattlerFlags |= gBitTable[gActiveBattler];
+ gHitMarker |= HITMARKER_FAINTED(gActiveBattler);
+ gBattleMons[gActiveBattler].hp = 0;
+ SetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP, &gBattleMons[gActiveBattler].hp);
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]);
+ FaintClearSetData();
+ }
+ else if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
+ {
gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED;
+ }
else
+ {
gBattleOutcome = B_OUTCOME_MON_TELEPORTED;
+ }
break;
case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC:
BtlController_EmitPlayFanfareOrBGM(BUFFER_A, MUS_VICTORY_TRAINER, TRUE);
MarkBattlerForControllerExec(gActiveBattler);
break;
+ case VARIOUS_STAT_TEXT_BUFFER:
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, gBattleCommunication[0]);
+ break;
+ case VARIOUS_SWITCHIN_ABILITIES:
+ gBattlescriptCurrInstr += 3;
+ AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, gActiveBattler, 0, 0, 0);
+ AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0);
+ AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE2, gActiveBattler, 0, 0, 0);
+ AbilityBattleEffects(ABILITYEFFECT_TRACE2, gActiveBattler, 0, 0, 0);
+ return;
+ case VARIOUS_SAVE_TARGET:
+ gBattleStruct->savedBattlerTarget = gBattlerTarget;
+ break;
+ case VARIOUS_RESTORE_TARGET:
+ gBattlerTarget = gBattleStruct->savedBattlerTarget;
+ break;
+ case VARIOUS_INSTANT_HP_DROP:
+ BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case VARIOUS_CLEAR_STATUS:
+ gBattleMons[gActiveBattler].status1 = 0;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case VARIOUS_RESTORE_PP:
+ for (i = 0; i < 4; i++)
+ {
+ gBattleMons[gActiveBattler].pp[i] = CalculatePPWithBonus(gBattleMons[gActiveBattler].moves[i], gBattleMons[gActiveBattler].ppBonuses, i);
+ data[i] = gBattleMons[gActiveBattler].pp[i];
+ }
+ data[i] = gBattleMons[gActiveBattler].ppBonuses;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_PP_DATA_BATTLE, 0, 5, data);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case VARIOUS_TRY_ACTIVATE_MOXIE: // and chilling neigh + as one ice rider
+ {
+ u16 battlerAbility = GetBattlerAbility(gActiveBattler);
+
+ if ((battlerAbility == ABILITY_MOXIE
+ || battlerAbility == ABILITY_CHILLING_NEIGH
+ || battlerAbility == ABILITY_AS_ONE_ICE_RIDER)
+ && HasAttackerFaintedTarget()
+ && !NoAliveMonsForEitherParty()
+ && CompareStat(gBattlerAttacker, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ gBattleMons[gBattlerAttacker].statStages[STAT_ATK]++;
+ SET_STATCHANGER(STAT_ATK, 1, FALSE);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
+ BattleScriptPush(gBattlescriptCurrInstr + 3);
+ gLastUsedAbility = battlerAbility;
+ if (battlerAbility == ABILITY_AS_ONE_ICE_RIDER)
+ gBattleScripting.abilityPopupOverwrite = gLastUsedAbility = ABILITY_CHILLING_NEIGH;
+ gBattlescriptCurrInstr = BattleScript_RaiseStatOnFaintingTarget;
+ return;
+ }
}
+ break;
+ case VARIOUS_TRY_ACTIVATE_GRIM_NEIGH: // and as one shadow rider
+ {
+ u16 battlerAbility = GetBattlerAbility(gActiveBattler);
+
+ if ((battlerAbility == ABILITY_GRIM_NEIGH
+ || battlerAbility == ABILITY_AS_ONE_SHADOW_RIDER)
+ && HasAttackerFaintedTarget()
+ && !NoAliveMonsForEitherParty()
+ && CompareStat(gBattlerAttacker, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]++;
+ SET_STATCHANGER(STAT_SPATK, 1, FALSE);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK);
+ BattleScriptPush(gBattlescriptCurrInstr + 3);
+ gLastUsedAbility = battlerAbility;
+ if (battlerAbility == ABILITY_AS_ONE_SHADOW_RIDER)
+ gBattleScripting.abilityPopupOverwrite = gLastUsedAbility = ABILITY_GRIM_NEIGH;
+ gBattlescriptCurrInstr = BattleScript_RaiseStatOnFaintingTarget;
+ return;
+ }
+ }
+ break;
+ case VARIOUS_TRY_ACTIVATE_RECEIVER: // Partner gets fainted's ally ability
+ gBattlerAbility = BATTLE_PARTNER(gActiveBattler);
+ i = GetBattlerAbility(gBattlerAbility);
+ if (IsBattlerAlive(gBattlerAbility)
+ && (i == ABILITY_RECEIVER || i == ABILITY_POWER_OF_ALCHEMY))
+ {
+ switch (gBattleMons[gActiveBattler].ability)
+ { // Can't copy these abilities.
+ case ABILITY_POWER_OF_ALCHEMY: case ABILITY_RECEIVER:
+ case ABILITY_FORECAST: case ABILITY_MULTITYPE:
+ case ABILITY_FLOWER_GIFT: case ABILITY_ILLUSION:
+ case ABILITY_WONDER_GUARD: case ABILITY_ZEN_MODE:
+ case ABILITY_STANCE_CHANGE: case ABILITY_IMPOSTER:
+ case ABILITY_POWER_CONSTRUCT: case ABILITY_BATTLE_BOND:
+ case ABILITY_SCHOOLING: case ABILITY_COMATOSE:
+ case ABILITY_SHIELDS_DOWN: case ABILITY_DISGUISE:
+ case ABILITY_RKS_SYSTEM: case ABILITY_TRACE:
+ break;
+ default:
+ gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[gActiveBattler].ability; // re-using the variable for trace
+ gBattleScripting.battler = gActiveBattler;
+ BattleScriptPush(gBattlescriptCurrInstr + 3);
+ gBattlescriptCurrInstr = BattleScript_ReceiverActivates;
+ return;
+ }
+ }
+ break;
+ case VARIOUS_TRY_ACTIVATE_BEAST_BOOST:
+ i = GetHighestStatId(gActiveBattler);
+ if (GetBattlerAbility(gActiveBattler) == ABILITY_BEAST_BOOST
+ && HasAttackerFaintedTarget()
+ && !NoAliveMonsForEitherParty()
+ && CompareStat(gBattlerAttacker, i, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ gBattleMons[gBattlerAttacker].statStages[i]++;
+ SET_STATCHANGER(i, 1, FALSE);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, i);
+ BattleScriptPush(gBattlescriptCurrInstr + 3);
+ gBattlescriptCurrInstr = BattleScript_AttackerAbilityStatRaise;
+ return;
+ }
+ break;
+ case VARIOUS_TRY_ACTIVATE_SOULHEART:
+ while (gBattleStruct->soulheartBattlerId < gBattlersCount)
+ {
+ gBattleScripting.battler = gBattleStruct->soulheartBattlerId++;
+ if (GetBattlerAbility(gBattleScripting.battler) == ABILITY_SOUL_HEART
+ && IsBattlerAlive(gBattleScripting.battler)
+ && !NoAliveMonsForEitherParty()
+ && CompareStat(gBattleScripting.battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ gBattleMons[gBattleScripting.battler].statStages[STAT_SPATK]++;
+ SET_STATCHANGER(STAT_SPATK, 1, FALSE);
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ScriptingAbilityStatRaise;
+ return;
+ }
+ }
+ gBattleStruct->soulheartBattlerId = 0;
+ break;
+ case VARIOUS_TRY_ACTIVATE_FELL_STINGER:
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_FELL_STINGER
+ && HasAttackerFaintedTarget()
+ && !NoAliveMonsForEitherParty()
+ && CompareStat(gBattlerAttacker, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ if (B_FELL_STINGER_STAT_RAISE >= GEN_7)
+ SET_STATCHANGER(STAT_ATK, 3, FALSE);
+ else
+ SET_STATCHANGER(STAT_ATK, 2, FALSE);
+
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
+ BattleScriptPush(gBattlescriptCurrInstr + 3);
+ gBattlescriptCurrInstr = BattleScript_FellStingerRaisesStat;
+ return;
+ }
+ break;
+ case VARIOUS_PLAY_MOVE_ANIMATION:
+ BtlController_EmitMoveAnimation(BUFFER_A, T1_READ_16(gBattlescriptCurrInstr + 3), gBattleScripting.animTurn, 0, 0, gBattleMons[gActiveBattler].friendship, &gDisableStructs[gActiveBattler], gMultiHitCounter);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 5;
+ return;
+ case VARIOUS_SET_LUCKY_CHANT:
+ if (!(gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] & SIDE_STATUS_LUCKY_CHANT))
+ {
+ gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] |= SIDE_STATUS_LUCKY_CHANT;
+ gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].luckyChantBattlerId = gActiveBattler;
+ gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].luckyChantTimer = 5;
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ return;
+ case VARIOUS_SUCKER_PUNCH_CHECK:
+ if (gProtectStructs[gBattlerTarget].obstructed)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else if (gBattleMoves[gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]]].power == 0)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_SET_SIMPLE_BEAM:
+ if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability)
+ || gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_NEUTRALIZING_GAS)
+ gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE;
+
+ gBattleMons[gBattlerTarget].ability = ABILITY_SIMPLE;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_TRY_ENTRAINMENT:
+ if (IsEntrainmentBannedAbilityAttacker(gBattleMons[gBattlerAttacker].ability)
+ || IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ return;
+ }
+
+ if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gBattleMons[gBattlerTarget].ability = gBattleMons[gBattlerAttacker].ability;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_SET_LAST_USED_ABILITY:
+ gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ break;
+ case VARIOUS_TRY_HEAL_PULSE:
+ if (BATTLER_MAX_HP(gActiveBattler))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MEGA_LAUNCHER && gBattleMoves[gCurrentMove].flags & FLAG_MEGA_LAUNCHER_BOOST)
+ gBattleMoveDamage = -(gBattleMons[gActiveBattler].maxHP * 75 / 100);
+ else
+ gBattleMoveDamage = -(gBattleMons[gActiveBattler].maxHP / 2);
+
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = -1;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_TRY_QUASH:
+ if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ for (i = 0; i < gBattlersCount; i++)
+ data[i] = gBattlerByTurnOrder[i];
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (data[i] == gBattlerTarget)
+ {
+ for (j = i + 1; j < gBattlersCount; j++)
+ data[i++] = data[j];
+ }
+ else
+ {
+ gBattlerByTurnOrder[i] = data[i];
+ }
+ }
+ gBattlerByTurnOrder[gBattlersCount - 1] = gBattlerTarget;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_INVERT_STAT_STAGES:
+ for (i = 0; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[gActiveBattler].statStages[i] < DEFAULT_STAT_STAGE) // Negative becomes positive.
+ gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE + (DEFAULT_STAT_STAGE - gBattleMons[gActiveBattler].statStages[i]);
+ else if (gBattleMons[gActiveBattler].statStages[i] > DEFAULT_STAT_STAGE) // Positive becomes negative.
+ gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE - (gBattleMons[gActiveBattler].statStages[i] - DEFAULT_STAT_STAGE);
+ }
+ break;
+ case VARIOUS_SET_TERRAIN:
+ HandleTerrainMove(gCurrentMove);
+ return;
+ case VARIOUS_TRY_ME_FIRST:
+ if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else if (gBattleMoves[gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]]].power == 0)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ {
+ u16 move = gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]];
+ switch (move)
+ {
+ case MOVE_STRUGGLE:
+ case MOVE_CHATTER:
+ case MOVE_FOCUS_PUNCH:
+ case MOVE_THIEF:
+ case MOVE_COVET:
+ case MOVE_COUNTER:
+ case MOVE_MIRROR_COAT:
+ case MOVE_METAL_BURST:
+ case MOVE_ME_FIRST:
+ case MOVE_BEAK_BLAST:
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ break;
+ default:
+ gCalledMove = move;
+ gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
+ gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE);
+ gStatuses3[gBattlerAttacker] |= STATUS3_ME_FIRST;
+ gBattlescriptCurrInstr += 7;
+ break;
+ }
+ }
+ return;
+ case VARIOUS_JUMP_IF_BATTLE_END:
+ if (NoAliveMonsForEitherParty())
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_TRY_ELECTRIFY:
+ if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gStatuses4[gBattlerTarget] |= STATUS4_ELECTRIFIED;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_TRY_REFLECT_TYPE:
+ if (gBattleMons[gBattlerTarget].species == SPECIES_ARCEUS || gBattleMons[gBattlerTarget].species == SPECIES_SILVALLY)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 != TYPE_MYSTERY)
+ {
+ gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type2;
+ gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2;
+ gBattlescriptCurrInstr += 7;
+ }
+ else if (gBattleMons[gBattlerTarget].type1 != TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY)
+ {
+ gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1;
+ gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type1;
+ gBattlescriptCurrInstr += 7;
+ }
+ else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1;
+ gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_TRY_SOAK:
+ if (gBattleMons[gBattlerTarget].type1 == gBattleMoves[gCurrentMove].type
+ && gBattleMons[gBattlerTarget].type2 == gBattleMoves[gCurrentMove].type)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ SET_BATTLER_TYPE(gBattlerTarget, gBattleMoves[gCurrentMove].type);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, gBattleMoves[gCurrentMove].type);
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_HANDLE_MEGA_EVO:
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]];
+ else
+ mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]];
+
+ // Change species.
+ if (gBattlescriptCurrInstr[3] == 0)
+ {
+ u16 megaSpecies;
+ gBattleStruct->mega.evolvedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species;
+ if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT
+ || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER))))
+ {
+ gBattleStruct->mega.playerEvolvedSpecies = gBattleStruct->mega.evolvedSpecies[gActiveBattler];
+ }
+ //Checks regular Mega Evolution
+ megaSpecies = GetMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item);
+ //Checks Wish Mega Evolution
+ if (megaSpecies == SPECIES_NONE)
+ {
+ megaSpecies = GetWishMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].moves[0], gBattleMons[gActiveBattler].moves[1], gBattleMons[gActiveBattler].moves[2], gBattleMons[gActiveBattler].moves[3]);
+ }
+
+ gBattleMons[gActiveBattler].species = megaSpecies;
+ PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species);
+
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ // Change stats.
+ else if (gBattlescriptCurrInstr[3] == 1)
+ {
+ RecalcBattlerStats(gActiveBattler, mon);
+ gBattleStruct->mega.alreadyEvolved[GetBattlerPosition(gActiveBattler)] = TRUE;
+ gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]];
+ }
+ // Update healthbox and elevation.
+ else
+ {
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL);
+ CreateMegaIndicatorSprite(gActiveBattler, 0);
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species);
+ }
+ gBattlescriptCurrInstr += 4;
+ return;
+ case VARIOUS_HANDLE_PRIMAL_REVERSION:
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]];
+ else
+ mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]];
+
+ // Change species.
+ if (gBattlescriptCurrInstr[3] == 0)
+ {
+ u16 primalSpecies;
+ gBattleStruct->mega.primalRevertedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species;
+ if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT
+ || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER))))
+ {
+ gBattleStruct->mega.playerPrimalRevertedSpecies = gBattleStruct->mega.primalRevertedSpecies[gActiveBattler];
+ }
+ // Checks Primal Reversion
+ primalSpecies = GetPrimalReversionSpecies(gBattleStruct->mega.primalRevertedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item);
+
+ gBattleMons[gActiveBattler].species = primalSpecies;
+ PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species);
+
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ // Change stats.
+ else if (gBattlescriptCurrInstr[3] == 1)
+ {
+ RecalcBattlerStats(gActiveBattler, mon);
+ gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]];
+ }
+ // Update healthbox and elevation.
+ else
+ {
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL);
+ CreateMegaIndicatorSprite(gActiveBattler, 0);
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species);
+ }
+ gBattlescriptCurrInstr += 4;
+ return;
+ case VARIOUS_HANDLE_FORM_CHANGE:
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
+ mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]];
+ else
+ mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]];
+
+ // Change species.
+ if (gBattlescriptCurrInstr[3] == 0)
+ {
+ if (!gBattleTextBuff1)
+ PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species);
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ // Change stats.
+ else if (gBattlescriptCurrInstr[3] == 1)
+ {
+ RecalcBattlerStats(gActiveBattler, mon);
+ }
+ // Update healthbox.
+ else
+ {
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL);
+ }
+ gBattlescriptCurrInstr += 4;
+ return;
+ case VARIOUS_TRY_LAST_RESORT:
+ if (CanUseLastResort(gActiveBattler))
+ gBattlescriptCurrInstr += 7;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ return;
+ case VARIOUS_ARGUMENT_STATUS_EFFECT:
+ switch (gBattleMoves[gCurrentMove].argument)
+ {
+ case STATUS1_SLEEP:
+ gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
+ break;
+ case STATUS1_BURN:
+ gBattleScripting.moveEffect = MOVE_EFFECT_BURN;
+ break;
+ case STATUS1_FREEZE:
+ gBattleScripting.moveEffect = MOVE_EFFECT_FREEZE;
+ break;
+ case STATUS1_PARALYSIS:
+ gBattleScripting.moveEffect = MOVE_EFFECT_PARALYSIS;
+ break;
+ case STATUS1_POISON:
+ gBattleScripting.moveEffect = MOVE_EFFECT_POISON;
+ break;
+ case STATUS1_TOXIC_POISON:
+ gBattleScripting.moveEffect = MOVE_EFFECT_TOXIC;
+ break;
+ default:
+ gBattleScripting.moveEffect = 0;
+ break;
+ }
+ if (gBattleScripting.moveEffect != 0)
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 3);
+ gBattlescriptCurrInstr = BattleScript_EffectWithChance;
+ return;
+ }
+ break;
+ case VARIOUS_TRY_HIT_SWITCH_TARGET:
+ if (IsBattlerAlive(gBattlerAttacker)
+ && IsBattlerAlive(gBattlerTarget)
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED)
+ {
+ gBattleScripting.switchCase = B_SWITCH_HIT;
+ gBattlescriptCurrInstr = BattleScript_ForceRandomSwitch;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ return;
+ case VARIOUS_TRY_AUTOTOMIZE:
+ if (GetBattlerWeight(gActiveBattler) > 1)
+ {
+ gDisableStructs[gActiveBattler].autotomizeCount++;
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ return;
+ case VARIOUS_TRY_COPYCAT:
+ if (gLastUsedMove == 0xFFFF || (sForbiddenMoves[gLastUsedMove] & FORBIDDEN_COPYCAT))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gCalledMove = gLastUsedMove;
+ gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
+ gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE);
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_TRY_INSTRUCT:
+ if ((sForbiddenMoves[gLastMoves[gBattlerTarget]] & FORBIDDEN_INSTRUCT)
+ || gLastMoves[gBattlerTarget] == 0xFFFF)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gSpecialStatuses[gBattlerTarget].instructedChosenTarget = *(gBattleStruct->moveTarget + gBattlerTarget) | 0x4;
+ gBattlerAttacker = gBattlerTarget;
+ gCalledMove = gLastMoves[gBattlerAttacker];
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[i] == gCalledMove)
+ {
+ gCurrMovePos = i;
+ i = 4;
+ break;
+ }
+ }
+ if (i != 4 || gBattleMons[gBattlerAttacker].pp[gCurrMovePos] == 0)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ {
+ gBattlerTarget = gBattleStruct->lastMoveTarget[gBattlerAttacker];
+ gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]);
+ gBattlescriptCurrInstr += 7;
+ }
+ }
+ return;
+ case VARIOUS_ABILITY_POPUP:
+ CreateAbilityPopUp(gActiveBattler, gBattleMons[gActiveBattler].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0);
+ break;
+ case VARIOUS_UPDATE_ABILITY_POPUP:
+ UpdateAbilityPopup(gActiveBattler);
+ break;
+ case VARIOUS_DEFOG:
+ if (T1_READ_8(gBattlescriptCurrInstr + 3)) // Clear
+ {
+ if (ClearDefogHazards(gEffectBattler, TRUE))
+ return;
+ else
+ gBattlescriptCurrInstr += 8;
+ }
+ else
+ {
+ if (ClearDefogHazards(gActiveBattler, FALSE))
+ gBattlescriptCurrInstr += 8;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4);
+ }
+ return;
+ case VARIOUS_JUMP_IF_TARGET_ALLY:
+ if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))
+ gBattlescriptCurrInstr += 7;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ return;
+ case VARIOUS_TRY_SYNCHRONOISE:
+ if (!DoBattlersShareType(gBattlerAttacker, gBattlerTarget))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_LOSE_TYPE:
+ for (i = 0; i < 3; i++)
+ {
+ if (*(u8 *)(&gBattleMons[gActiveBattler].type1 + i) == gBattlescriptCurrInstr[3])
+ *(u8 *)(&gBattleMons[gActiveBattler].type1 + i) = TYPE_MYSTERY;
+ }
+ gBattlescriptCurrInstr += 4;
+ return;
+ case VARIOUS_PSYCHO_SHIFT:
+ {
+ if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS && !CanBeParalyzed(gBattlerTarget))
+ || (gBattleMons[gBattlerAttacker].status1 & STATUS1_PSN_ANY && !CanBePoisoned(gBattlerAttacker, gBattlerTarget))
+ || (gBattleMons[gBattlerAttacker].status1 & STATUS1_BURN && !CanBeBurned(gBattlerTarget))
+ || (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && !CanSleep(gBattlerTarget)))
+ {
+ // fails
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ // Psycho shift works
+ gBattleMons[gBattlerTarget].status1 = gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY;
+ gActiveBattler = gBattlerTarget;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 7;
+ }
+ }
+ return;
+ case VARIOUS_CURE_STATUS:
+ gBattleMons[gActiveBattler].status1 = 0;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case VARIOUS_POWER_TRICK:
+ gStatuses3[gActiveBattler] ^= STATUS3_POWER_TRICK;
+ SWAP(gBattleMons[gActiveBattler].attack, gBattleMons[gActiveBattler].defense, i);
+ break;
+ case VARIOUS_AFTER_YOU:
+ if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)
+ || GetBattlerTurnOrderNum(gBattlerAttacker) == GetBattlerTurnOrderNum(gBattlerTarget) + 1)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ for (i = 0; i < gBattlersCount; i++)
+ data[i] = gBattlerByTurnOrder[i];
+ if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 2)
+ {
+ gBattlerByTurnOrder[1] = gBattlerTarget;
+ gBattlerByTurnOrder[2] = data[1];
+ gBattlerByTurnOrder[3] = data[3];
+ }
+ else if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 3)
+ {
+ gBattlerByTurnOrder[1] = gBattlerTarget;
+ gBattlerByTurnOrder[2] = data[1];
+ gBattlerByTurnOrder[3] = data[2];
+ }
+ else
+ {
+ gBattlerByTurnOrder[2] = gBattlerTarget;
+ gBattlerByTurnOrder[3] = data[2];
+ }
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_BESTOW:
+ if (gBattleMons[gBattlerAttacker].item == ITEM_NONE
+ || gBattleMons[gBattlerTarget].item != ITEM_NONE
+ || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item)
+ || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gLastUsedItem = gBattleMons[gBattlerAttacker].item;
+
+ gActiveBattler = gBattlerAttacker;
+ gBattleMons[gActiveBattler].item = ITEM_NONE;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].item), &gBattleMons[gActiveBattler].item);
+ MarkBattlerForControllerExec(gActiveBattler);
+ CheckSetUnburden(gBattlerAttacker);
+
+ gActiveBattler = gBattlerTarget;
+ gBattleMons[gActiveBattler].item = gLastUsedItem;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].item), &gBattleMons[gActiveBattler].item);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattleResources->flags->flags[gBattlerTarget] &= ~RESOURCE_FLAG_UNBURDEN;
+
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_ARGUMENT_TO_MOVE_EFFECT:
+ gBattleScripting.moveEffect = gBattleMoves[gCurrentMove].argument;
+ break;
+ case VARIOUS_JUMP_IF_NOT_GROUNDED:
+ if (!IsBattlerGrounded(gActiveBattler))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_HANDLE_TRAINER_SLIDE_MSG:
+ if (gBattlescriptCurrInstr[3] == 0)
+ {
+ gBattleScripting.savedDmg = gBattlerSpriteIds[gActiveBattler];
+ HideBattlerShadowSprite(gActiveBattler);
+ }
+ else if (gBattlescriptCurrInstr[3] == 1)
+ {
+ BtlController_EmitPrintString(BUFFER_A, STRINGID_TRAINERSLIDE);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else
+ {
+ gBattlerSpriteIds[gActiveBattler] = gBattleScripting.savedDmg;
+ if (gBattleMons[gActiveBattler].hp != 0)
+ {
+ SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species);
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
+ }
+ }
+ gBattlescriptCurrInstr += 4;
+ return;
+ case VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF:
+ if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_FIRST_DOWN))
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 3);
+ gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet;
+ return;
+ }
+ break;
+ case VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON:
+ if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_SWITCHIN))
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 3);
+ gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet;
+ return;
+ }
+ break;
+ case VARIOUS_SET_AURORA_VEIL:
+ if (gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] & SIDE_STATUS_AURORA_VEIL
+ || !(WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL))
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+ else
+ {
+ gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] |= SIDE_STATUS_AURORA_VEIL;
+ if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_LIGHT_CLAY)
+ gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].auroraVeilTimer = 8;
+ else
+ gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].auroraVeilTimer = 5;
+ gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].auroraVeilBattlerId = gActiveBattler;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 5;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = 5;
+ }
+ break;
+ case VARIOUS_TRY_THIRD_TYPE:
+ if (IS_BATTLER_OF_TYPE(gActiveBattler, gBattleMoves[gCurrentMove].argument))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gBattleMons[gActiveBattler].type3 = gBattleMoves[gCurrentMove].argument;
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, gBattleMoves[gCurrentMove].argument);
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_DESTROY_ABILITY_POPUP:
+ DestroyAbilityPopUp(gActiveBattler);
+ break;
+ case VARIOUS_TOTEM_BOOST:
+ gActiveBattler = gBattlerAttacker;
+ if (gTotemBoosts[gActiveBattler].stats == 0)
+ {
+ gBattlescriptCurrInstr += 7; // stats done, exit
+ }
+ else
+ {
+ for (i = 0; i < (NUM_BATTLE_STATS - 1); i++)
+ {
+ if (gTotemBoosts[gActiveBattler].stats & (1 << i))
+ {
+ if (gTotemBoosts[gActiveBattler].statChanges[i] <= -1)
+ SET_STATCHANGER(i + 1, abs(gTotemBoosts[gActiveBattler].statChanges[i]), TRUE);
+ else
+ SET_STATCHANGER(i + 1, gTotemBoosts[gActiveBattler].statChanges[i], FALSE);
+
+ gTotemBoosts[gActiveBattler].stats &= ~(1 << i);
+ gBattleScripting.battler = gActiveBattler;
+ gBattlerTarget = gActiveBattler;
+ if (gTotemBoosts[gActiveBattler].stats & 0x80)
+ {
+ gTotemBoosts[gActiveBattler].stats &= ~0x80; // set 'aura flared to life' flag
+ gBattlescriptCurrInstr = BattleScript_TotemFlaredToLife;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // do boost
+ }
+ return;
+ }
+ }
+ gBattlescriptCurrInstr += 7; // exit if loop failed (failsafe)
+ }
+ return;
+ case VARIOUS_SET_Z_EFFECT:
+ SetZEffect(); //handles battle script jumping internally
+ return;
+ case VARIOUS_MOVEEND_ITEM_EFFECTS:
+ if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, FALSE))
+ return;
+ break;
+ case VARIOUS_ROOM_SERVICE:
+ if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_ROOM_SERVICE && TryRoomService(gActiveBattler))
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ return;
+ case VARIOUS_TERRAIN_SEED:
+ if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_SEEDS)
+ {
+ u8 effect = 0;
+ u16 item = gBattleMons[gActiveBattler].item;
+ switch (GetBattlerHoldEffectParam(gActiveBattler))
+ {
+ case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN:
+ effect = TryHandleSeed(gActiveBattler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, item, FALSE);
+ break;
+ case HOLD_EFFECT_PARAM_GRASSY_TERRAIN:
+ effect = TryHandleSeed(gActiveBattler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, item, FALSE);
+ break;
+ case HOLD_EFFECT_PARAM_MISTY_TERRAIN:
+ effect = TryHandleSeed(gActiveBattler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, item, FALSE);
+ break;
+ case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN:
+ effect = TryHandleSeed(gActiveBattler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, item, FALSE);
+ break;
+ }
+
+ if (effect)
+ return;
+ }
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ return;
+ case VARIOUS_MAKE_INVISIBLE:
+ if (gBattleControllerExecFlags)
+ break;
+
+ BtlController_EmitSpriteInvisibility(BUFFER_A, TRUE);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case VARIOUS_JUMP_IF_TERRAIN_AFFECTED:
+ {
+ u32 flags = T1_READ_32(gBattlescriptCurrInstr + 3);
+ if (IsBattlerTerrainAffected(gActiveBattler, flags))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 7);
+ else
+ gBattlescriptCurrInstr += 11;
+ }
+ return;
+ case VARIOUS_EERIE_SPELL_PP_REDUCE:
+ if (gLastMoves[gActiveBattler] != 0 && gLastMoves[gActiveBattler] != 0xFFFF)
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (gLastMoves[gActiveBattler] == gBattleMons[gActiveBattler].moves[i])
+ break;
+ }
+
+ if (i != MAX_MON_MOVES && gBattleMons[gActiveBattler].pp[i] != 0)
+ {
+ s32 ppToDeduct = 3;
+
+ if (gBattleMons[gActiveBattler].pp[i] < ppToDeduct)
+ ppToDeduct = gBattleMons[gActiveBattler].pp[i];
+
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gActiveBattler])
+ ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1);
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct)
+ gBattleMons[gActiveBattler].pp[i] -= ppToDeduct;
+ if (!(gDisableStructs[gActiveBattler].mimickedMoves & gBitTable[i])
+ && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
+ {
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gActiveBattler].pp[i]), &gBattleMons[gActiveBattler].pp[i]);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+
+ if (gBattleMons[gActiveBattler].pp[i] == 0 && gBattleStruct->skyDropTargets[gActiveBattler] == 0xFF)
+ CancelMultiTurnMoves(gActiveBattler);
+
+ gBattlescriptCurrInstr += 7; // continue
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // cant reduce pp
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // cant reduce pp
+ }
+ return;
+ case VARIOUS_JUMP_IF_TEAM_HEALTHY:
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerAlive(BATTLE_PARTNER(gActiveBattler)))
+ {
+ u8 partner = BATTLE_PARTNER(gActiveBattler);
+ if ((gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY))
+ && (gBattleMons[partner].hp == gBattleMons[partner].maxHP && !(gBattleMons[partner].status1 & STATUS1_ANY)))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail
+ else
+ gBattlescriptCurrInstr += 7;
+ }
+ else // single battle
+ {
+ if (gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail
+ else
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_TRY_HEAL_QUARTER_HP:
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+
+ if (gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail
+ else
+ gBattlescriptCurrInstr += 7; // can heal
+ return;
+ case VARIOUS_REMOVE_TERRAIN:
+ gFieldTimers.terrainTimer = 0;
+ switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
+ {
+ case STATUS_FIELD_MISTY_TERRAIN:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ break;
+ case STATUS_FIELD_GRASSY_TERRAIN:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ break;
+ case STATUS_FIELD_ELECTRIC_TERRAIN:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ break;
+ case STATUS_FIELD_PSYCHIC_TERRAIN:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ break;
+ default:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 4; // failsafe
+ break;
+ }
+ gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain
+ TryToRevertMimicry(); // restore the types of Pokémon with Mimicry
+ break;
+ case VARIOUS_JUMP_IF_UNDER_200:
+ // If the Pokemon is less than 200 kg, or weighing less than 441 lbs, then Sky Drop will work. Otherwise, it will fail.
+ if (GetBattlerWeight(gBattlerTarget) < 2000)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_SET_SKY_DROP:
+ gStatuses3[gBattlerTarget] |= (STATUS3_SKY_DROPPED | STATUS3_ON_AIR);
+ /* skyDropTargets holds the information of who is in a particular instance of Sky Drop.
+ This is needed in the case that multiple Pokemon use Sky Drop in the same turn or if
+ the target of a Sky Drop faints while in the air.*/
+ gBattleStruct->skyDropTargets[gBattlerAttacker] = gBattlerTarget;
+ gBattleStruct->skyDropTargets[gBattlerTarget] = gBattlerAttacker;
+
+ // End any multiturn effects caused by the target except STATUS2_LOCK_CONFUSE
+ gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_MULTIPLETURNS);
+ gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_UPROAR);
+ gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_BIDE);
+ gDisableStructs[gBattlerTarget].rolloutTimer = 0;
+ gDisableStructs[gBattlerTarget].furyCutterCounter = 0;
+
+ // End any Follow Me/Rage Powder effects caused by the target
+ if (gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer != 0 && gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget == gBattlerTarget)
+ gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 0;
+
+ break;
+ case VARIOUS_CLEAR_SKY_DROP:
+ // Check to see if the initial target of this Sky Drop fainted before the 2nd turn of Sky Drop.
+ // If so, make the move fail. If not, clear all of the statuses and continue the move.
+ if (gBattleStruct->skyDropTargets[gBattlerAttacker] == 0xFF)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ {
+ gBattleStruct->skyDropTargets[gBattlerAttacker] = 0xFF;
+ gBattleStruct->skyDropTargets[gBattlerTarget] = 0xFF;
+ gStatuses3[gBattlerTarget] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR);
+ gBattlescriptCurrInstr += 7;
+ }
+
+ // Confuse target if they were in the middle of Petal Dance/Outrage/Thrash when targeted.
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_LOCK_CONFUSE)
+ gBattleScripting.moveEffect = (MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN);
+ return;
+ case VARIOUS_SKY_DROP_YAWN: // If the mon that's sleeping due to Yawn was holding a Pokemon in Sky Drop, release the target and clear Sky Drop data.
+ if (gBattleStruct->skyDropTargets[gEffectBattler] != 0xFF && !(gStatuses3[gEffectBattler] & STATUS3_SKY_DROPPED))
+ {
+ // Set the target of Sky Drop as gEffectBattler
+ gEffectBattler = gBattleStruct->skyDropTargets[gEffectBattler];
+
+ // Clear skyDropTargets data
+ gBattleStruct->skyDropTargets[gBattleStruct->skyDropTargets[gEffectBattler]] = 0xFF;
+ gBattleStruct->skyDropTargets[gEffectBattler] = 0xFF;
+
+ // If the target was in the middle of Outrage/Thrash/etc. when targeted by Sky Drop, confuse them on release and do proper animation
+ if (gBattleMons[gEffectBattler].status2 & STATUS2_LOCK_CONFUSE && CanBeConfused(gEffectBattler))
+ {
+ gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE);
+ gBattlerAttacker = gEffectBattler;
+ gBattleMons[gBattlerTarget].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2);
+ gBattlescriptCurrInstr = BattleScript_ThrashConfuses;
+ return;
+ }
+ }
+ break;
+ case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED:
+ if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gActiveBattler, TRUE))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER:
+ {
+ bool8 shouldNotClear = FALSE;
+
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ u32 ability = GetBattlerAbility(i);
+ if (((ability == ABILITY_DESOLATE_LAND && gBattleWeather & B_WEATHER_SUN_PRIMAL)
+ || (ability == ABILITY_PRIMORDIAL_SEA && gBattleWeather & B_WEATHER_RAIN_PRIMAL)
+ || (ability == ABILITY_DELTA_STREAM && gBattleWeather & B_WEATHER_STRONG_WINDS))
+ && IsBattlerAlive(i))
+ shouldNotClear = TRUE;
+ }
+ if (gBattleWeather & B_WEATHER_SUN_PRIMAL && !shouldNotClear)
+ {
+ gBattleWeather &= ~B_WEATHER_SUN_PRIMAL;
+ PrepareStringBattle(STRINGID_EXTREMESUNLIGHTFADED, gActiveBattler);
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+ else if (gBattleWeather & B_WEATHER_RAIN_PRIMAL && !shouldNotClear)
+ {
+ gBattleWeather &= ~B_WEATHER_RAIN_PRIMAL;
+ PrepareStringBattle(STRINGID_HEAVYRAINLIFTED, gActiveBattler);
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+ else if (gBattleWeather & B_WEATHER_STRONG_WINDS && !shouldNotClear)
+ {
+ gBattleWeather &= ~B_WEATHER_STRONG_WINDS;
+ PrepareStringBattle(STRINGID_STRONGWINDSDISSIPATED, gActiveBattler);
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+ break;
+ }
+ case VARIOUS_TRY_END_NEUTRALIZING_GAS:
+ if (gSpecialStatuses[gActiveBattler].neutralizingGasRemoved)
+ {
+ gSpecialStatuses[gActiveBattler].neutralizingGasRemoved = FALSE;
+ BattleScriptPush(gBattlescriptCurrInstr + 3);
+ gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits;
+ return;
+ }
+ break;
+ case VARIOUS_GET_ROTOTILLER_TARGETS:
+ // Gets the battlers to be affected by rototiller. If there are none, print 'But it failed!'
+ {
+ u32 count = 0;
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ gSpecialStatuses[i].rototillerAffected = FALSE;
+ if (IsRototillerAffected(i))
+ {
+ gSpecialStatuses[i].rototillerAffected = TRUE;
+ count++;
+ }
+ }
+
+ if (count == 0)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // Rototiller fails
+ else
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED:
+ if (gSpecialStatuses[gActiveBattler].rototillerAffected)
+ {
+ gSpecialStatuses[gActiveBattler].rototillerAffected = FALSE;
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // Unaffected by rototiller - print STRINGID_NOEFFECTONTARGET
+ }
+ return;
+ case VARIOUS_TRY_ACTIVATE_BATTLE_BOND:
+ if (gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_BATTLE_BOND
+ && HasAttackerFaintedTarget()
+ && CalculateEnemyPartyCount() > 1)
+ {
+ PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species);
+ gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerAttacker]] = gBattleMons[gBattlerAttacker].species;
+ gBattleMons[gBattlerAttacker].species = SPECIES_GRENINJA_ASH;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BattleBondActivatesOnMoveEndAttacker;
+ return;
+ }
+ break;
+ case VARIOUS_CONSUME_BERRY:
+ if (ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item) == HOLD_EFFECT_NONE)
+ {
+ gBattlescriptCurrInstr += 4;
+ return;
+ }
+
+ gBattleScripting.battler = gEffectBattler = gBattlerTarget = gActiveBattler; // Cover all berry effect battlerId cases. e.g. ChangeStatBuffs uses target ID
+ // Do move end berry effects for just a single battler, instead of looping through all battlers
+ if (ItemBattleEffects(ITEMEFFECT_BATTLER_MOVE_END, gActiveBattler, FALSE))
+ return;
+
+ if (gBattlescriptCurrInstr[3])
+ {
+ gBattleMons[gActiveBattler].item = gBattleStruct->changedItems[gActiveBattler];
+ gBattleStruct->changedItems[gActiveBattler] = ITEM_NONE;
+ gBattleResources->flags->flags[gActiveBattler] &= ~RESOURCE_FLAG_UNBURDEN;
+ }
+
+ gBattlescriptCurrInstr += 4;
+ return;
+ case VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL:
+ {
+ bool8 canDoPrimalReversion = FALSE;
+
+ for (i = 0; i < EVOS_PER_MON; i++)
+ {
+ if (gEvolutionTable[gBattleMons[gActiveBattler].species][i].method == EVO_PRIMAL_REVERSION
+ && gEvolutionTable[gBattleMons[gActiveBattler].species][i].param == gBattleMons[gActiveBattler].item)
+ canDoPrimalReversion = TRUE;
+ }
+ if (!canDoPrimalReversion)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ }
+ case VARIOUS_JUMP_IF_WEATHER_AFFECTED:
+ {
+ u32 weatherFlags = T1_READ_32(gBattlescriptCurrInstr + 3);
+ if (IsBattlerWeatherAffected(gActiveBattler, weatherFlags))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 7);
+ else
+ gBattlescriptCurrInstr += 11;
+ }
+ return;
+ case VARIOUS_APPLY_PLASMA_FISTS:
+ for (i = 0; i < gBattlersCount; i++)
+ gStatuses4[i] |= STATUS4_PLASMA_FISTS;
+ break;
+ case VARIOUS_JUMP_IF_SPECIES:
+ if (gBattleMons[gActiveBattler].species == T1_READ_16(gBattlescriptCurrInstr + 3))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5);
+ else
+ gBattlescriptCurrInstr += 9;
+ return;
+ case VARIOUS_PHOTON_GEYSER_CHECK:
+ gBattleStruct->swapDamageCategory = (GetSplitBasedOnStats(gActiveBattler) == SPLIT_SPECIAL);
+ break;
+ case VARIOUS_SHELL_SIDE_ARM_CHECK: // 0% chance GameFreak actually checks this way according to DaWobblefet, but this is the only functional explanation at the moment
+ {
+ u32 attackerAtkStat = gBattleMons[gBattlerAttacker].attack;
+ u32 targetDefStat = gBattleMons[gBattlerTarget].defense;
+ u32 attackerSpAtkStat = gBattleMons[gBattlerAttacker].spAttack;
+ u32 targetSpDefStat = gBattleMons[gBattlerTarget].spDefense;
+ u8 statStage;
+ u32 physical;
+ u32 special;
+
+ gBattleStruct->swapDamageCategory = FALSE;
+
+ statStage = gBattleMons[gBattlerAttacker].statStages[STAT_ATK];
+ attackerAtkStat *= gStatStageRatios[statStage][0];
+ attackerAtkStat /= gStatStageRatios[statStage][1];
+
+ statStage = gBattleMons[gBattlerTarget].statStages[STAT_DEF];
+ targetDefStat *= gStatStageRatios[statStage][0];
+ targetDefStat /= gStatStageRatios[statStage][1];
+
+ physical = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gBattleMoves[gCurrentMove].power * attackerAtkStat) / targetDefStat) / 50);
+
+ statStage = gBattleMons[gBattlerAttacker].statStages[STAT_SPATK];
+ attackerSpAtkStat *= gStatStageRatios[statStage][0];
+ attackerSpAtkStat /= gStatStageRatios[statStage][1];
+
+ statStage = gBattleMons[gBattlerTarget].statStages[STAT_SPDEF];
+ targetSpDefStat *= gStatStageRatios[statStage][0];
+ targetSpDefStat /= gStatStageRatios[statStage][1];
+
+ special = ((((2 * gBattleMons[gBattlerAttacker].level / 5 + 2) * gBattleMoves[gCurrentMove].power * attackerSpAtkStat) / targetSpDefStat) / 50);
+
+ if (((physical > special) || (physical == special && (Random() % 2) == 0)))
+ gBattleStruct->swapDamageCategory = TRUE;
+ break;
+ }
+ case VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED:
+ if (IsLeafGuardProtected(gActiveBattler))
+ {
+ gBattlerAbility = gActiveBattler;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_SET_ATTACKER_STICKY_WEB_USER:
+ // For Mirror Armor: "If the Pokémon with this Ability is affected by Sticky Web, the effect is reflected back to the Pokémon which set it up.
+ // If Pokémon which set up Sticky Web is not on the field, no Pokémon have their Speed lowered."
+ gBattlerAttacker = gBattlerTarget; // Initialize 'fail' condition
+ SET_STATCHANGER(STAT_SPEED, 1, TRUE);
+ if (gBattleStruct->stickyWebUser != 0xFF)
+ gBattlerAttacker = gBattleStruct->stickyWebUser;
+ break;
+ case VARIOUS_CUT_1_3_HP_RAISE_STATS:
+ {
+ bool8 atLeastOneStatBoosted = FALSE;
+ u16 hpFraction = max(1, gBattleMons[gBattlerAttacker].maxHP / 3);
+
+ for (i = 1; i < NUM_STATS; i++)
+ {
+ if (CompareStat(gBattlerAttacker, i, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ atLeastOneStatBoosted = TRUE;
+ break;
+ }
+ }
+ if (atLeastOneStatBoosted && gBattleMons[gBattlerAttacker].hp > hpFraction)
+ {
+ gBattleMoveDamage = hpFraction;
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ }
+ return;
+ case VARIOUS_SET_OCTOLOCK:
+ if (gDisableStructs[gActiveBattler].octolock)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gDisableStructs[gActiveBattler].octolock = TRUE;
+ gBattleMons[gActiveBattler].status2 |= STATUS2_ESCAPE_PREVENTION;
+ gDisableStructs[gActiveBattler].battlerPreventingEscape = gBattlerAttacker;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_CHECK_POLTERGEIST:
+ if (gBattleMons[gActiveBattler].item == ITEM_NONE
+ || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM
+ || GetBattlerAbility(gActiveBattler) == ABILITY_KLUTZ)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].item);
+ gLastUsedItem = gBattleMons[gActiveBattler].item;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_TRY_NO_RETREAT:
+ if (gDisableStructs[gActiveBattler].noRetreat)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ if (!(gBattleMons[gActiveBattler].status2 & STATUS2_ESCAPE_PREVENTION))
+ gDisableStructs[gActiveBattler].noRetreat = TRUE;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_TRY_TAR_SHOT:
+ if (gDisableStructs[gActiveBattler].tarShot)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ }
+ else
+ {
+ gDisableStructs[gActiveBattler].tarShot = TRUE;
+ gBattlescriptCurrInstr += 7;
+ }
+ return;
+ case VARIOUS_CAN_TAR_SHOT_WORK:
+ // Tar Shot will fail if it's already been used on the target and its speed can't be lowered further
+ if (!gDisableStructs[gActiveBattler].tarShot
+ && CompareStat(gActiveBattler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN))
+ gBattlescriptCurrInstr += 7;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ return;
+ case VARIOUS_TRY_TO_APPLY_MIMICRY:
+ {
+ bool8 isMimicryDone = FALSE;
+
+ if (GetBattlerAbility(gActiveBattler) == ABILITY_MIMICRY)
+ {
+ TryToApplyMimicry(gActiveBattler, TRUE);
+ isMimicryDone = TRUE;
+ }
+ if (!isMimicryDone)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ }
+ case VARIOUS_JUMP_IF_CANT_FLING:
+ if (!CanFling(gActiveBattler))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ else
+ gBattlescriptCurrInstr += 7;
+ return;
+ case VARIOUS_CURE_CERTAIN_STATUSES:
+ // Check infatuation
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_INFATUATION)
+ {
+ gBattleMons[gActiveBattler].status2 &= ~(STATUS2_INFATUATION);
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_INFATUATION; // STRINGID_TARGETGOTOVERINFATUATION
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ }
+ // Check taunt
+ if (gDisableStructs[gActiveBattler].tauntTimer != 0)
+ {
+ gDisableStructs[gActiveBattler].tauntTimer = gDisableStructs[gActiveBattler].tauntTimer2 = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT);
+ }
+ // Check encore
+ if (gDisableStructs[gActiveBattler].encoreTimer != 0)
+ {
+ gDisableStructs[gActiveBattler].encoredMove = 0;
+ gDisableStructs[gActiveBattler].encoreTimerStartValue = gDisableStructs[gActiveBattler].encoreTimer = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED
+ }
+ // Check torment
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_TORMENT)
+ {
+ gBattleMons[gActiveBattler].status2 &= ~(STATUS2_TORMENT);
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT;
+ }
+ // Check heal block
+ if (gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK)
+ {
+ gStatuses3[gActiveBattler] &= ~(STATUS3_HEAL_BLOCK);
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK;
+ }
+ // Check disable
+ if (gDisableStructs[gActiveBattler].disableTimer != 0)
+ {
+ gDisableStructs[gActiveBattler].disableTimer = gDisableStructs[gActiveBattler].disableTimerStartValue = 0;
+ gDisableStructs[gActiveBattler].disabledMove = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE;
+ }
+ gBattlescriptCurrInstr += 3;
+ return;
+ case VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES:
+ gActiveBattler = gBattlerTarget;
+ for (i = 0; i < NUM_BATTLE_STATS; i++)
+ if (gBattleMons[gActiveBattler].statStages[i] < DEFAULT_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE;
+ gBattlescriptCurrInstr += 3;
+ return;
+ case VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY:
+ if (ItemId_GetPocket(gLastUsedItem) == POCKET_BERRIES)
+ gBattlescriptCurrInstr += 7;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+ return;
+ case VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT:
+ if (ItemId_GetHoldEffect(gLastUsedItem) == gBattlescriptCurrInstr[3])
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4);
+ else
+ gBattlescriptCurrInstr += 8;
+ return;
+ case VARIOUS_SAVE_BATTLER_ITEM:
+ gBattleResources->battleHistory->heldItems[gActiveBattler] = gBattleMons[gActiveBattler].item;
+ break;
+ case VARIOUS_RESTORE_BATTLER_ITEM:
+ gBattleMons[gActiveBattler].item = gBattleResources->battleHistory->heldItems[gActiveBattler];
+ break;
+ case VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM:
+ gBattleMons[gActiveBattler].item = gLastUsedItem;
+ break;
+ case VARIOUS_SET_BEAK_BLAST:
+ gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE;
+ break;
+ case VARIOUS_SWAP_SIDE_STATUSES:
+ CourtChangeSwapSideStatuses();
+ break;
+ } // End of switch (gBattlescriptCurrInstr[2])
gBattlescriptCurrInstr += 3;
}
-static void Cmd_setprotectlike(void) // protect and endure
+static void Cmd_setprotectlike(void)
{
- bool8 notLastTurn = TRUE;
- u16 lastMove = gLastResultingMoves[gBattlerAttacker];
+ bool32 fail = TRUE;
+ bool32 notLastTurn = TRUE;
- if (lastMove != MOVE_PROTECT && lastMove != MOVE_DETECT && lastMove != MOVE_ENDURE)
+ if (!(gBattleMoves[gLastResultingMoves[gBattlerAttacker]].flags & FLAG_PROTECTION_MOVE))
gDisableStructs[gBattlerAttacker].protectUses = 0;
if (gCurrentTurnActionNumber == (gBattlersCount - 1))
@@ -6475,19 +9674,76 @@ static void Cmd_setprotectlike(void) // protect and endure
if (sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] >= Random() && notLastTurn)
{
- if (gBattleMoves[gCurrentMove].effect == EFFECT_PROTECT)
+ if (!gBattleMoves[gCurrentMove].argument) // Protects one mon only.
{
- gProtectStructs[gBattlerAttacker].protected = 1;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE)
+ {
+ gProtectStructs[gBattlerAttacker].endured = TRUE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BRACED_ITSELF;
+ }
+ else if (gCurrentMove == MOVE_DETECT || gCurrentMove == MOVE_PROTECT)
+ {
+ gProtectStructs[gBattlerAttacker].protected = TRUE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF;
+ }
+ else if (gCurrentMove == MOVE_SPIKY_SHIELD)
+ {
+ gProtectStructs[gBattlerAttacker].spikyShielded = TRUE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF;
+ }
+ else if (gCurrentMove == MOVE_KINGS_SHIELD)
+ {
+ gProtectStructs[gBattlerAttacker].kingsShielded = TRUE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF;
+ }
+ else if (gCurrentMove == MOVE_BANEFUL_BUNKER)
+ {
+ gProtectStructs[gBattlerAttacker].banefulBunkered = TRUE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF;
+ }
+ else if (gCurrentMove == MOVE_OBSTRUCT)
+ {
+ gProtectStructs[gBattlerAttacker].obstructed = TRUE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ }
+
+ gDisableStructs[gBattlerAttacker].protectUses++;
+ fail = FALSE;
}
- if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE)
+ else // Protects the whole side.
{
- gProtectStructs[gBattlerAttacker].endured = 1;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BRACED_ITSELF;
+ u8 side = GetBattlerSide(gBattlerAttacker);
+ if (gCurrentMove == MOVE_WIDE_GUARD && !(gSideStatuses[side] & SIDE_STATUS_WIDE_GUARD))
+ {
+ gSideStatuses[side] |= SIDE_STATUS_WIDE_GUARD;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM;
+ gDisableStructs[gBattlerAttacker].protectUses++;
+ fail = FALSE;
+ }
+ else if (gCurrentMove == MOVE_QUICK_GUARD && !(gSideStatuses[side] & SIDE_STATUS_QUICK_GUARD))
+ {
+ gSideStatuses[side] |= SIDE_STATUS_QUICK_GUARD;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM;
+ gDisableStructs[gBattlerAttacker].protectUses++;
+ fail = FALSE;
+ }
+ else if (gCurrentMove == MOVE_CRAFTY_SHIELD && !(gSideStatuses[side] & SIDE_STATUS_CRAFTY_SHIELD))
+ {
+ gSideStatuses[side] |= SIDE_STATUS_CRAFTY_SHIELD;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM;
+ gDisableStructs[gBattlerAttacker].protectUses++;
+ fail = FALSE;
+ }
+ else if (gCurrentMove == MOVE_MAT_BLOCK && !(gSideStatuses[side] & SIDE_STATUS_MAT_BLOCK))
+ {
+ gSideStatuses[side] |= SIDE_STATUS_MAT_BLOCK;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM;
+ fail = FALSE;
+ }
}
- gDisableStructs[gBattlerAttacker].protectUses++;
}
- else
+
+ if (fail)
{
gDisableStructs[gBattlerAttacker].protectUses = 0;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECT_FAILED;
@@ -6497,39 +9753,33 @@ static void Cmd_setprotectlike(void) // protect and endure
gBattlescriptCurrInstr++;
}
-static void Cmd_faintifabilitynotdamp(void)
+static void Cmd_tryexplosion(void)
{
if (gBattleControllerExecFlags)
return;
+ if ((gBattlerTarget = IsAbilityOnField(ABILITY_DAMP)))
+ {
+ // Failed, a battler has Damp
+ gLastUsedAbility = ABILITY_DAMP;
+ RecordAbilityBattle(--gBattlerTarget, ABILITY_DAMP);
+ gBattlescriptCurrInstr = BattleScript_DampStopsExplosion;
+ return;
+ }
+
+ gActiveBattler = gBattlerAttacker;
+ gBattleMoveDamage = gBattleMons[gActiveBattler].hp;
+ BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr++;
+
for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
{
- if (gBattleMons[gBattlerTarget].ability == ABILITY_DAMP)
+ if (gBattlerTarget == gBattlerAttacker)
+ continue;
+ if (IsBattlerAlive(gBattlerTarget))
break;
}
-
- if (gBattlerTarget == gBattlersCount)
- {
- gActiveBattler = gBattlerAttacker;
- gBattleMoveDamage = gBattleMons[gActiveBattler].hp;
- BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP);
- MarkBattlerForControllerExec(gActiveBattler);
- gBattlescriptCurrInstr++;
-
- for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
- {
- if (gBattlerTarget == gBattlerAttacker)
- continue;
- if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget]))
- break;
- }
- }
- else
- {
- gLastUsedAbility = ABILITY_DAMP;
- RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
- gBattlescriptCurrInstr = BattleScript_DampStopsExplosion;
- }
}
static void Cmd_setatkhptozero(void)
@@ -6549,30 +9799,23 @@ static void Cmd_jumpifnexttargetvalid(void)
{
const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ for (gBattlerTarget++; gBattlerTarget < gBattlersCount; gBattlerTarget++)
{
- for (gBattlerTarget++; ; gBattlerTarget++)
- {
- if (gBattlerTarget == gBattlerAttacker)
- continue;
- if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget]))
- break;
- }
+ if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER))
+ continue;
+ if (IsBattlerAlive(gBattlerTarget))
+ break;
+ }
- if (gBattlerTarget >= gBattlersCount)
- gBattlescriptCurrInstr += 5;
- else
- gBattlescriptCurrInstr = jumpPtr;
- }
- else
- {
+ if (gBattlerTarget >= gBattlersCount)
gBattlescriptCurrInstr += 5;
- }
+ else
+ gBattlescriptCurrInstr = jumpPtr;
}
static void Cmd_tryhealhalfhealth(void)
{
- const u8* failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gBattlescriptCurrInstr[5] == BS_ATTACKER)
gBattlerTarget = gBattlerAttacker;
@@ -6593,17 +9836,13 @@ static void Cmd_trymirrormove(void)
s32 validMovesCount;
s32 i;
u16 move;
- u16 validMoves[MAX_BATTLERS_COUNT];
-
- for (i = 0; i < (MAX_BATTLERS_COUNT - 1); i++) // -1 to exclude the user
- validMoves[i] = MOVE_NONE;
+ u16 validMoves[MAX_BATTLERS_COUNT] = {0};
for (validMovesCount = 0, i = 0; i < gBattlersCount; i++)
{
if (i != gBattlerAttacker)
{
- move = *(i * 2 + gBattlerAttacker * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 0)
- | (*(i * 2 + gBattlerAttacker * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) << 8);
+ move = gBattleStruct->lastTakenMoveFrom[gBattlerAttacker][i];
if (move != MOVE_NONE && move != MOVE_UNAVAILABLE)
{
@@ -6613,8 +9852,7 @@ static void Cmd_trymirrormove(void)
}
}
- move = *(gBattleStruct->lastTakenMove + gBattlerAttacker * 2 + 0)
- | (*(gBattleStruct->lastTakenMove + gBattlerAttacker * 2 + 1) << 8);
+ move = gBattleStruct->lastTakenMove[gBattlerAttacker];
if (move != MOVE_NONE && move != MOVE_UNAVAILABLE)
{
@@ -6640,16 +9878,14 @@ static void Cmd_trymirrormove(void)
static void Cmd_setrain(void)
{
- if (gBattleWeather & B_WEATHER_RAIN)
+ if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_RAIN, FALSE))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
}
else
{
- gBattleWeather = B_WEATHER_RAIN_TEMPORARY;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_RAIN;
- gWishFutureKnock.weatherDuration = 5;
}
gBattlescriptCurrInstr++;
}
@@ -6664,7 +9900,10 @@ static void Cmd_setreflect(void)
else
{
gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_REFLECT;
- gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectTimer = 5;
+ if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY)
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectTimer = 8;
+ else
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectTimer = 5;
gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].reflectBattlerId = gBattlerAttacker;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2)
@@ -6708,12 +9947,34 @@ static void Cmd_manipulatedamage(void)
gBattleMoveDamage /= 2;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- if ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage)
+ if (B_RECOIL_IF_MISS_DMG >= GEN_5)
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
+ if ((B_RECOIL_IF_MISS_DMG <= GEN_4) && ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage))
gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
break;
case DMG_DOUBLED:
gBattleMoveDamage *= 2;
break;
+ case DMG_1_8_TARGET_HP:
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ break;
+ case DMG_FULL_ATTACKER_HP:
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP;
+ break;
+ case DMG_CURR_ATTACKER_HP:
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].hp;
+ break;
+ case DMG_BIG_ROOT:
+ gBattleMoveDamage = GetDrainedBigRootHp(gBattlerAttacker, gBattleMoveDamage);
+ break;
+ case DMG_1_2_ATTACKER_HP:
+ gBattleMoveDamage = (gBattleMons[gBattlerAttacker].maxHP + 1) / 2; // Half of Max HP Rounded UP
+ break;
+ case DMG_RECOIL_FROM_IMMUNE:
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
+ break;
}
gBattlescriptCurrInstr += 2;
@@ -6729,6 +9990,14 @@ static void Cmd_trysetrest(void)
{
gBattlescriptCurrInstr = failJump;
}
+ else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN))
+ {
+ gBattlescriptCurrInstr = BattleScript_ElectricTerrainPrevents;
+ }
+ else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_MISTY_TERRAIN))
+ {
+ gBattlescriptCurrInstr = BattleScript_MistyTerrainPrevents;
+ }
else
{
if (gBattleMons[gBattlerTarget].status1 & ((u8)(~STATUS1_SLEEP)))
@@ -6745,7 +10014,7 @@ static void Cmd_trysetrest(void)
static void Cmd_jumpifnotfirstturn(void)
{
- const u8* failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].isFirstTurn)
gBattlescriptCurrInstr += 5;
@@ -6753,9 +10022,17 @@ static void Cmd_jumpifnotfirstturn(void)
gBattlescriptCurrInstr = failJump;
}
-static void Cmd_nop(void)
+static void Cmd_setmiracleeye(void)
{
- gBattlescriptCurrInstr++;
+ if (!(gStatuses3[gBattlerTarget] & STATUS3_MIRACLE_EYED))
+ {
+ gStatuses3[gBattlerTarget] |= STATUS3_MIRACLE_EYED;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
}
bool8 UproarWakeUpCheck(u8 battlerId)
@@ -6764,7 +10041,7 @@ bool8 UproarWakeUpCheck(u8 battlerId)
for (i = 0; i < gBattlersCount; i++)
{
- if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[battlerId].ability == ABILITY_SOUNDPROOF)
+ if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || GetBattlerAbility(battlerId) == ABILITY_SOUNDPROOF)
continue;
gBattleScripting.battler = i;
@@ -6788,15 +10065,15 @@ bool8 UproarWakeUpCheck(u8 battlerId)
static void Cmd_jumpifcantmakeasleep(void)
{
const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 ability = GetBattlerAbility(gBattlerTarget);
if (UproarWakeUpCheck(gBattlerTarget))
{
gBattlescriptCurrInstr = jumpPtr;
}
- else if (gBattleMons[gBattlerTarget].ability == ABILITY_INSOMNIA
- || gBattleMons[gBattlerTarget].ability == ABILITY_VITAL_SPIRIT)
+ else if (ability == ABILITY_INSOMNIA || ability == ABILITY_VITAL_SPIRIT)
{
- gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
+ gLastUsedAbility = ability;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAYED_AWAKE_USING;
gBattlescriptCurrInstr = jumpPtr;
RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
@@ -6809,25 +10086,38 @@ static void Cmd_jumpifcantmakeasleep(void)
static void Cmd_stockpile(void)
{
- if (gDisableStructs[gBattlerAttacker].stockpileCounter == 3)
+ switch (gBattlescriptCurrInstr[1])
{
- gMoveResultFlags |= MOVE_RESULT_MISSED;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_STOCKPILE;
+ case 0:
+ if (gDisableStructs[gBattlerAttacker].stockpileCounter >= 3)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_STOCKPILE;
+ }
+ else
+ {
+ gDisableStructs[gBattlerAttacker].stockpileCounter++;
+ gDisableStructs[gBattlerAttacker].stockpileBeforeDef = gBattleMons[gBattlerAttacker].statStages[STAT_DEF];
+ gDisableStructs[gBattlerAttacker].stockpileBeforeSpDef = gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF];
+ PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gBattlerAttacker].stockpileCounter);
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STOCKPILED;
+ }
+ break;
+ case 1: // Save def/sp def stats.
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gDisableStructs[gBattlerAttacker].stockpileDef += gBattleMons[gBattlerAttacker].statStages[STAT_DEF] - gDisableStructs[gBattlerAttacker].stockpileBeforeDef;
+ gDisableStructs[gBattlerAttacker].stockpileSpDef += gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] - gDisableStructs[gBattlerAttacker].stockpileBeforeSpDef;
+ }
+ break;
}
- else
- {
- gDisableStructs[gBattlerAttacker].stockpileCounter++;
- PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gBattlerAttacker].stockpileCounter)
-
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STOCKPILED;
- }
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr += 2;
}
static void Cmd_stockpiletobasedamage(void)
{
- const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0)
{
gBattlescriptCurrInstr = jumpPtr;
@@ -6835,75 +10125,153 @@ static void Cmd_stockpiletobasedamage(void)
else
{
if (gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED)
- {
- gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove,
- gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)], 0,
- 0, gBattlerAttacker, gBattlerTarget)
- * gDisableStructs[gBattlerAttacker].stockpileCounter;
gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter;
- if (gProtectStructs[gBattlerAttacker].helpingHand)
- gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
- }
-
gDisableStructs[gBattlerAttacker].stockpileCounter = 0;
+ // Restore stat changes from stockpile.
+ gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef;
+ gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef;
gBattlescriptCurrInstr += 5;
}
}
static void Cmd_stockpiletohpheal(void)
{
- const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0)
{
gBattlescriptCurrInstr = jumpPtr;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FAILED;
}
- else if (gBattleMons[gBattlerAttacker].maxHP == gBattleMons[gBattlerAttacker].hp)
- {
- gDisableStructs[gBattlerAttacker].stockpileCounter = 0;
- gBattlescriptCurrInstr = jumpPtr;
- gBattlerTarget = gBattlerAttacker;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FULL_HP;
- }
else
{
- gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter));
+ if (gBattleMons[gBattlerAttacker].maxHP == gBattleMons[gBattlerAttacker].hp)
+ {
+ gDisableStructs[gBattlerAttacker].stockpileCounter = 0;
+ gBattlescriptCurrInstr = jumpPtr;
+ gBattlerTarget = gBattlerAttacker;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FULL_HP;
+ }
+ else
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter));
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- gBattleMoveDamage *= -1;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
- gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter;
- gDisableStructs[gBattlerAttacker].stockpileCounter = 0;
- gBattlescriptCurrInstr += 5;
- gBattlerTarget = gBattlerAttacker;
+ gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter;
+ gDisableStructs[gBattlerAttacker].stockpileCounter = 0;
+ gBattlescriptCurrInstr += 5;
+ gBattlerTarget = gBattlerAttacker;
+ }
+
+ // Restore stat changes from stockpile.
+ gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef;
+ gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef;
}
}
-static void Cmd_negativedamage(void)
+// Sign change for drained HP handled in GetDrainedBigRootHp
+static void Cmd_setdrainedhp(void)
{
- gBattleMoveDamage = -(gHpDealt / 2);
+ if (gBattleMoves[gCurrentMove].argument != 0)
+ gBattleMoveDamage = (gHpDealt * gBattleMoves[gCurrentMove].argument / 100);
+ else
+ gBattleMoveDamage = (gHpDealt / 2);
+
if (gBattleMoveDamage == 0)
- gBattleMoveDamage = -1;
+ gBattleMoveDamage = 1;
gBattlescriptCurrInstr++;
}
-#define STAT_BUFF_WORKED 0
-#define STAT_BUFF_DIDNT_WORK 1
-
-static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
+static u16 ReverseStatChangeMoveEffect(u16 moveEffect)
{
- bool8 certain = FALSE;
- bool8 notProtectAffected = FALSE;
- u32 index;
+ switch (moveEffect)
+ {
+ // +1
+ case MOVE_EFFECT_ATK_PLUS_1:
+ return MOVE_EFFECT_ATK_MINUS_1;
+ case MOVE_EFFECT_DEF_PLUS_1:
+ return MOVE_EFFECT_DEF_MINUS_1;
+ case MOVE_EFFECT_SPD_PLUS_1:
+ return MOVE_EFFECT_SPD_MINUS_1;
+ case MOVE_EFFECT_SP_ATK_PLUS_1:
+ return MOVE_EFFECT_SP_ATK_MINUS_1;
+ case MOVE_EFFECT_SP_DEF_PLUS_1:
+ return MOVE_EFFECT_SP_DEF_MINUS_1;
+ case MOVE_EFFECT_ACC_PLUS_1:
+ return MOVE_EFFECT_ACC_MINUS_1;
+ case MOVE_EFFECT_EVS_PLUS_1:
+ return MOVE_EFFECT_EVS_MINUS_1;
+ // -1
+ case MOVE_EFFECT_ATK_MINUS_1:
+ return MOVE_EFFECT_ATK_PLUS_1;
+ case MOVE_EFFECT_DEF_MINUS_1:
+ return MOVE_EFFECT_DEF_PLUS_1;
+ case MOVE_EFFECT_SPD_MINUS_1:
+ return MOVE_EFFECT_SPD_PLUS_1;
+ case MOVE_EFFECT_SP_ATK_MINUS_1:
+ return MOVE_EFFECT_SP_ATK_PLUS_1;
+ case MOVE_EFFECT_SP_DEF_MINUS_1:
+ return MOVE_EFFECT_SP_DEF_PLUS_1;
+ case MOVE_EFFECT_ACC_MINUS_1:
+ return MOVE_EFFECT_ACC_PLUS_1;
+ case MOVE_EFFECT_EVS_MINUS_1:
+ // +2
+ case MOVE_EFFECT_ATK_PLUS_2:
+ return MOVE_EFFECT_ATK_MINUS_2;
+ case MOVE_EFFECT_DEF_PLUS_2:
+ return MOVE_EFFECT_DEF_MINUS_2;
+ case MOVE_EFFECT_SPD_PLUS_2:
+ return MOVE_EFFECT_SPD_MINUS_2;
+ case MOVE_EFFECT_SP_ATK_PLUS_2:
+ return MOVE_EFFECT_SP_ATK_MINUS_2;
+ case MOVE_EFFECT_SP_DEF_PLUS_2:
+ return MOVE_EFFECT_SP_DEF_MINUS_2;
+ case MOVE_EFFECT_ACC_PLUS_2:
+ return MOVE_EFFECT_ACC_MINUS_2;
+ case MOVE_EFFECT_EVS_PLUS_2:
+ return MOVE_EFFECT_EVS_MINUS_2;
+ // -2
+ case MOVE_EFFECT_ATK_MINUS_2:
+ return MOVE_EFFECT_ATK_PLUS_2;
+ case MOVE_EFFECT_DEF_MINUS_2:
+ return MOVE_EFFECT_DEF_PLUS_2;
+ case MOVE_EFFECT_SPD_MINUS_2:
+ return MOVE_EFFECT_SPD_PLUS_2;
+ case MOVE_EFFECT_SP_ATK_MINUS_2:
+ return MOVE_EFFECT_SP_ATK_PLUS_2;
+ case MOVE_EFFECT_SP_DEF_MINUS_2:
+ return MOVE_EFFECT_SP_DEF_PLUS_2;
+ case MOVE_EFFECT_ACC_MINUS_2:
+ return MOVE_EFFECT_ACC_PLUS_2;
+ case MOVE_EFFECT_EVS_MINUS_2:
+ return MOVE_EFFECT_EVS_PLUS_2;
+ }
+}
- if (flags & MOVE_EFFECT_AFFECTS_USER)
+#define STAT_CHANGE_WORKED 0
+#define STAT_CHANGE_DIDNT_WORK 1
+
+static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr)
+{
+ bool32 certain = FALSE;
+ bool32 notProtectAffected = FALSE;
+ u32 index;
+ bool32 affectsUser = (flags & MOVE_EFFECT_AFFECTS_USER);
+ u16 activeBattlerAbility;
+
+ if (affectsUser)
gActiveBattler = gBattlerAttacker;
else
gActiveBattler = gBattlerTarget;
+
+ activeBattlerAbility = GetBattlerAbility(gActiveBattler);
+
+ gSpecialStatuses[gActiveBattler].changedStatsBattlerId = gBattlerAttacker;
flags &= ~MOVE_EFFECT_AFFECTS_USER;
@@ -6911,18 +10279,34 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
certain++;
flags &= ~MOVE_EFFECT_CERTAIN;
- if (flags & STAT_BUFF_NOT_PROTECT_AFFECTED)
+ if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED)
notProtectAffected++;
- flags &= ~STAT_BUFF_NOT_PROTECT_AFFECTED;
+ flags &= ~STAT_CHANGE_NOT_PROTECT_AFFECTED;
- PREPARE_STAT_BUFFER(gBattleTextBuff1, statId)
+ if (activeBattlerAbility == ABILITY_CONTRARY)
+ {
+ statValue ^= STAT_BUFF_NEGATIVE;
+ gBattleScripting.statChanger ^= STAT_BUFF_NEGATIVE;
+ if (flags & STAT_CHANGE_UPDATE_MOVE_EFFECT)
+ {
+ flags &= ~STAT_CHANGE_UPDATE_MOVE_EFFECT;
+ gBattleScripting.moveEffect = ReverseStatChangeMoveEffect(gBattleScripting.moveEffect);
+ }
+ }
+ else if (activeBattlerAbility == ABILITY_SIMPLE)
+ {
+ statValue = (SET_STAT_BUFF_VALUE(GET_STAT_BUFF_VALUE(statValue) * 2)) | ((statValue <= -1) ? STAT_BUFF_NEGATIVE : 0);
+ }
+
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, statId);
if (statValue <= -1) // Stat decrease.
{
if (gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
- && !certain && gCurrentMove != MOVE_CURSE)
+ && !certain && gCurrentMove != MOVE_CURSE
+ && !(gActiveBattler == gBattlerTarget && GetBattlerAbility(gBattlerAttacker) == ABILITY_INFILTRATOR))
{
- if (flags == STAT_BUFF_ALLOW_PTR)
+ if (flags == STAT_CHANGE_ALLOW_PTR)
{
if (gSpecialStatuses[gActiveBattler].statLowered)
{
@@ -6933,22 +10317,23 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
BattleScriptPush(BS_ptr);
gBattleScripting.battler = gActiveBattler;
gBattlescriptCurrInstr = BattleScript_MistProtected;
- gSpecialStatuses[gActiveBattler].statLowered = 1;
+ gSpecialStatuses[gActiveBattler].statLowered = TRUE;
}
}
- return STAT_BUFF_DIDNT_WORK;
+ return STAT_CHANGE_DIDNT_WORK;
}
else if (gCurrentMove != MOVE_CURSE
&& notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(0))
{
gBattlescriptCurrInstr = BattleScript_ButItFailed;
- return STAT_BUFF_DIDNT_WORK;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if ((gBattleMons[gActiveBattler].ability == ABILITY_CLEAR_BODY
- || gBattleMons[gActiveBattler].ability == ABILITY_WHITE_SMOKE)
+ else if ((activeBattlerAbility == ABILITY_CLEAR_BODY
+ || activeBattlerAbility == ABILITY_FULL_METAL_BODY
+ || activeBattlerAbility == ABILITY_WHITE_SMOKE)
&& !certain && gCurrentMove != MOVE_CURSE)
{
- if (flags == STAT_BUFF_ALLOW_PTR)
+ if (flags == STAT_CHANGE_ALLOW_PTR)
{
if (gSpecialStatuses[gActiveBattler].statLowered)
{
@@ -6958,47 +10343,75 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
{
BattleScriptPush(BS_ptr);
gBattleScripting.battler = gActiveBattler;
+ gBattlerAbility = gActiveBattler;
gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss;
- gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ gLastUsedAbility = activeBattlerAbility;
RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
- gSpecialStatuses[gActiveBattler].statLowered = 1;
+ gSpecialStatuses[gActiveBattler].statLowered = TRUE;
}
}
- return STAT_BUFF_DIDNT_WORK;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if (gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE
- && !certain && statId == STAT_ACC)
+ else if ((index = IsFlowerVeilProtected(gActiveBattler)) && !certain)
{
- if (flags == STAT_BUFF_ALLOW_PTR)
+ if (flags == STAT_CHANGE_ALLOW_PTR)
+ {
+ if (gSpecialStatuses[gActiveBattler].statLowered)
+ {
+ gBattlescriptCurrInstr = BS_ptr;
+ }
+ else
+ {
+ BattleScriptPush(BS_ptr);
+ gBattleScripting.battler = gActiveBattler;
+ gBattlerAbility = index - 1;
+ gBattlescriptCurrInstr = BattleScript_FlowerVeilProtectsRet;
+ gLastUsedAbility = ABILITY_FLOWER_VEIL;
+ gSpecialStatuses[gActiveBattler].statLowered = TRUE;
+ }
+ }
+ return STAT_CHANGE_DIDNT_WORK;
+ }
+ else if (!certain
+ && ((activeBattlerAbility == ABILITY_KEEN_EYE && statId == STAT_ACC)
+ || (activeBattlerAbility == ABILITY_HYPER_CUTTER && statId == STAT_ATK)
+ || (activeBattlerAbility == ABILITY_BIG_PECKS && statId == STAT_DEF)))
+ {
+ if (flags == STAT_CHANGE_ALLOW_PTR)
{
BattleScriptPush(BS_ptr);
gBattleScripting.battler = gActiveBattler;
+ gBattlerAbility = gActiveBattler;
gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
- gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ gLastUsedAbility = activeBattlerAbility;
RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
}
- return STAT_BUFF_DIDNT_WORK;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if (gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER
- && !certain && statId == STAT_ATK)
+ else if (activeBattlerAbility == ABILITY_MIRROR_ARMOR && !affectsUser && gBattlerAttacker != gBattlerTarget && gActiveBattler == gBattlerTarget)
{
- if (flags == STAT_BUFF_ALLOW_PTR)
+ if (flags == STAT_CHANGE_ALLOW_PTR)
{
+ SET_STATCHANGER(statId, GET_STAT_BUFF_VALUE(statValue) | STAT_BUFF_NEGATIVE, TRUE);
BattleScriptPush(BS_ptr);
gBattleScripting.battler = gActiveBattler;
- gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss;
- gLastUsedAbility = gBattleMons[gActiveBattler].ability;
- RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
+ gBattlerAbility = gActiveBattler;
+ gBattlescriptCurrInstr = BattleScript_MirrorArmorReflect;
+ RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability);
}
- return STAT_BUFF_DIDNT_WORK;
+ return STAT_CHANGE_DIDNT_WORK;
}
- else if (gBattleMons[gActiveBattler].ability == ABILITY_SHIELD_DUST && flags == 0)
+ else if (activeBattlerAbility == ABILITY_SHIELD_DUST && flags == 0)
{
- return STAT_BUFF_DIDNT_WORK;
+ return STAT_CHANGE_DIDNT_WORK;
}
else // try to decrease
{
statValue = -GET_STAT_BUFF_VALUE(statValue);
+ if (gBattleMons[gActiveBattler].statStages[statId] == 1)
+ statValue = -1;
+ else if (gBattleMons[gActiveBattler].statStages[statId] == 2 && statValue < -2)
+ statValue = -2;
gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
index = 1;
if (statValue == -2)
@@ -7008,24 +10421,36 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
gBattleTextBuff2[3] = STRINGID_STATHARSHLY >> 8;
index = 4;
}
- gBattleTextBuff2[index] = B_BUFF_STRING;
- index++;
- gBattleTextBuff2[index] = STRINGID_STATFELL;
- index++;
- gBattleTextBuff2[index] = STRINGID_STATFELL >> 8;
- index++;
+ else if (statValue <= -3)
+ {
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_SEVERELY & 0xFF;
+ gBattleTextBuff2[3] = STRINGID_SEVERELY >> 8;
+ index = 4;
+ }
+ gBattleTextBuff2[index++] = B_BUFF_STRING;
+ gBattleTextBuff2[index++] = STRINGID_STATFELL;
+ gBattleTextBuff2[index++] = STRINGID_STATFELL >> 8;
gBattleTextBuff2[index] = B_BUFF_EOS;
-
+
if (gBattleMons[gActiveBattler].statStages[statId] == MIN_STAT_STAGE)
+ {
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_WONT_DECREASE;
+ }
else
+ {
+ gProtectStructs[gActiveBattler].statFell = TRUE; // Eject pack, lash out
gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler); // B_MSG_ATTACKER_STAT_FELL or B_MSG_DEFENDER_STAT_FELL
-
+ }
}
}
else // stat increase
{
statValue = GET_STAT_BUFF_VALUE(statValue);
+ if (gBattleMons[gActiveBattler].statStages[statId] == 11)
+ statValue = 1;
+ else if (gBattleMons[gActiveBattler].statStages[statId] == 10 && statValue > 2)
+ statValue = 2;
gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
index = 1;
if (statValue == 2)
@@ -7035,18 +10460,27 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8;
index = 4;
}
- gBattleTextBuff2[index] = B_BUFF_STRING;
- index++;
- gBattleTextBuff2[index] = STRINGID_STATROSE;
- index++;
- gBattleTextBuff2[index] = STRINGID_STATROSE >> 8;
- index++;
+ else if (statValue >= 3)
+ {
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_DRASTICALLY & 0xFF;
+ gBattleTextBuff2[3] = STRINGID_DRASTICALLY >> 8;
+ index = 4;
+ }
+ gBattleTextBuff2[index++] = B_BUFF_STRING;
+ gBattleTextBuff2[index++] = STRINGID_STATROSE;
+ gBattleTextBuff2[index++] = STRINGID_STATROSE >> 8;
gBattleTextBuff2[index] = B_BUFF_EOS;
if (gBattleMons[gActiveBattler].statStages[statId] == MAX_STAT_STAGE)
+ {
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_WONT_INCREASE;
+ }
else
- gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler); // B_MSG_ATTACKER_STAT_ROSE or B_MSG_DEFENDER_STAT_ROSE
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == gActiveBattler);
+ gProtectStructs[gActiveBattler].statRaised = TRUE;
+ }
}
gBattleMons[gActiveBattler].statStages[statId] += statValue;
@@ -7055,31 +10489,52 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
if (gBattleMons[gActiveBattler].statStages[statId] > MAX_STAT_STAGE)
gBattleMons[gActiveBattler].statStages[statId] = MAX_STAT_STAGE;
- if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && flags & STAT_BUFF_ALLOW_PTR)
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && flags & STAT_CHANGE_ALLOW_PTR)
gMoveResultFlags |= MOVE_RESULT_MISSED;
- if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && !(flags & STAT_BUFF_ALLOW_PTR))
- return STAT_BUFF_DIDNT_WORK;
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && !(flags & STAT_CHANGE_ALLOW_PTR))
+ return STAT_CHANGE_DIDNT_WORK;
- return STAT_BUFF_WORKED;
+ return STAT_CHANGE_WORKED;
}
static void Cmd_statbuffchange(void)
{
- const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
- if (ChangeStatBuffs(gBattleScripting.statChanger & 0xF0, GET_STAT_BUFF_ID(gBattleScripting.statChanger), gBattlescriptCurrInstr[1], jumpPtr) == STAT_BUFF_WORKED)
- gBattlescriptCurrInstr += 6;
+ u16 flags = T1_READ_16(gBattlescriptCurrInstr + 1);
+ const u8 *ptrBefore = gBattlescriptCurrInstr;
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
+
+ if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), GET_STAT_BUFF_ID(gBattleScripting.statChanger), flags, jumpPtr) == STAT_CHANGE_WORKED)
+ gBattlescriptCurrInstr += 7;
+ else if (gBattlescriptCurrInstr == ptrBefore) // Prevent infinite looping.
+ gBattlescriptCurrInstr = jumpPtr;
}
-static void Cmd_normalisebuffs(void) // haze
+bool32 TryResetBattlerStatChanges(u8 battler)
+{
+ u32 j;
+ bool32 ret = FALSE;
+
+ gDisableStructs[battler].stockpileDef = 0;
+ gDisableStructs[battler].stockpileSpDef = 0;
+ for (j = 0; j < NUM_BATTLE_STATS; j++)
+ {
+ if (gBattleMons[battler].statStages[j] != DEFAULT_STAT_STAGE)
+ ret = TRUE; // returns TRUE if any stat was reset
+
+ gBattleMons[battler].statStages[j] = DEFAULT_STAT_STAGE;
+ }
+
+ return ret;
+}
+
+// Haze
+static void Cmd_normalisebuffs(void)
{
s32 i, j;
for (i = 0; i < gBattlersCount; i++)
- {
- for (j = 0; j < NUM_BATTLE_STATS; j++)
- gBattleMons[i].statStages[j] = DEFAULT_STAT_STAGE;
- }
+ TryResetBattlerStatChanges(i);
gBattlescriptCurrInstr++;
}
@@ -7096,8 +10551,8 @@ static void Cmd_setbide(void)
static void Cmd_confuseifrepeatingattackends(void)
{
- if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE))
- gBattleCommunication[MOVE_EFFECT_BYTE] = (MOVE_EFFECT_THRASH | MOVE_EFFECT_AFFECTS_USER);
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) && !gSpecialStatuses[gBattlerAttacker].dancerUsedMove)
+ gBattleScripting.moveEffect = (MOVE_EFFECT_THRASH | MOVE_EFFECT_AFFECTS_USER);
gBattlescriptCurrInstr++;
}
@@ -7110,11 +10565,36 @@ static void Cmd_setmultihitcounter(void)
}
else
{
- gMultiHitCounter = Random() & 3;
- if (gMultiHitCounter > 1)
- gMultiHitCounter = (Random() & 3) + 2;
+ if (GetBattlerAbility(gBattlerAttacker) == ABILITY_SKILL_LINK)
+ {
+ gMultiHitCounter = 5;
+ }
+ else if (B_MULTI_HIT_CHANCE >= GEN_5)
+ {
+ // 2 and 3 hits: 33.3%
+ // 4 and 5 hits: 16.7%
+ gMultiHitCounter = Random() % 4;
+ if (gMultiHitCounter > 2)
+ {
+ gMultiHitCounter = (Random() % 3);
+ if (gMultiHitCounter < 2)
+ gMultiHitCounter = 2;
+ else
+ gMultiHitCounter = 3;
+ }
+ else
+ gMultiHitCounter += 3;
+ }
else
- gMultiHitCounter += 2;
+ {
+ // 2 and 3 hits: 37.5%
+ // 4 and 5 hits: 12.5%
+ gMultiHitCounter = Random() % 4;
+ if (gMultiHitCounter > 1)
+ gMultiHitCounter = (Random() % 4) + 2;
+ else
+ gMultiHitCounter += 2;
+ }
}
gBattlescriptCurrInstr += 2;
@@ -7127,27 +10607,6 @@ static void Cmd_initmultihitstring(void)
gBattlescriptCurrInstr++;
}
-static bool8 TryDoForceSwitchOut(void)
-{
- if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
- {
- *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget];
- }
- else
- {
- u16 random = Random() & 0xFF;
- if ((u32)((random * (gBattleMons[gBattlerAttacker].level + gBattleMons[gBattlerTarget].level) >> 8) + 1) <= (gBattleMons[gBattlerTarget].level / 4))
- {
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
- return FALSE;
- }
- *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget];
- }
-
- gBattlescriptCurrInstr = BattleScript_SuccessForceOut;
- return TRUE;
-}
-
static void Cmd_forcerandomswitch(void)
{
s32 i;
@@ -7157,32 +10616,84 @@ static void Cmd_forcerandomswitch(void)
s32 firstMonId;
s32 lastMonId = 0; // + 1
s32 monsCount;
- struct Pokemon* party = NULL;
+ struct Pokemon *party = NULL;
s32 validMons = 0;
s32 minNeeded;
-
- if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER))
+
+ bool32 redCardForcedSwitch = FALSE;
+
+ // Red card checks against wild pokemon. If we have reached here, the player has a mon to switch into
+ // Red card swaps attacker with target to get the animation correct, so here we check attacker which is really the target. Thanks GF...
+ if (gBattleScripting.switchCase == B_SWITCH_RED_CARD
+ && !(gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT) // Check opponent's red card activating
{
+ if (!WILD_DOUBLE_BATTLE)
+ {
+ // Wild mon with red card will end single battle
+ gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle;
+ return;
+ }
+ else
+ {
+ // Wild double battle, wild mon red card activation on player
+ if (IS_WHOLE_SIDE_ALIVE(gBattlerTarget))
+ {
+ // Both player's battlers are alive
+ redCardForcedSwitch = FALSE;
+ }
+ else
+ {
+ // Player has only one mon alive -> force red card switch before manually switching to other mon
+ redCardForcedSwitch = TRUE;
+ }
+ }
+ }
+
+ // Swapping pokemon happens in:
+ // trainer battles
+ // wild double battles when an opposing pokemon uses it against one of the two alive player mons
+ // wild double battle when a player pokemon uses it against its partner
+ if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ || (WILD_DOUBLE_BATTLE
+ && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT
+ && GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER
+ && IS_WHOLE_SIDE_ALIVE(gBattlerTarget))
+ || (WILD_DOUBLE_BATTLE
+ && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER
+ && GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ || redCardForcedSwitch
+ )
+ {
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
- if ((gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_LINK)
+ if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT)
+ {
+ firstMonId = 0;
+ lastMonId = 6;
+ monsCount = 6;
+ minNeeded = 2;
+ battler2PartyId = gBattlerPartyIndexes[gBattlerTarget];
+ battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
+ }
+ else if ((gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_LINK)
|| (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
|| (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER))
{
if ((gBattlerTarget & BIT_FLANK) != B_FLANK_LEFT)
{
- firstMonId = 3;
- lastMonId = 6;
+ firstMonId = PARTY_SIZE / 2;
+ lastMonId = PARTY_SIZE;
}
else
{
firstMonId = 0;
- lastMonId = 3;
+ lastMonId = PARTY_SIZE / 2;
}
- monsCount = 3;
+ monsCount = PARTY_SIZE / 2;
minNeeded = 1;
battler2PartyId = gBattlerPartyIndexes[gBattlerTarget];
battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
@@ -7192,15 +10703,15 @@ static void Cmd_forcerandomswitch(void)
{
if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == B_FLANK_RIGHT)
{
- firstMonId = 3;
- lastMonId = 6;
+ firstMonId = PARTY_SIZE / 2;
+ lastMonId = PARTY_SIZE;
}
else
{
firstMonId = 0;
- lastMonId = 3;
+ lastMonId = PARTY_SIZE / 2;
}
- monsCount = 3;
+ monsCount = PARTY_SIZE / 2;
minNeeded = 1;
battler2PartyId = gBattlerPartyIndexes[gBattlerTarget];
battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
@@ -7210,23 +10721,23 @@ static void Cmd_forcerandomswitch(void)
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
{
firstMonId = 0;
- lastMonId = 6;
- monsCount = 6;
+ lastMonId = PARTY_SIZE;
+ monsCount = PARTY_SIZE;
minNeeded = 2; // since there are two opponents, it has to be a double battle
}
else
{
if ((gBattlerTarget & BIT_FLANK) != B_FLANK_LEFT)
{
- firstMonId = 3;
- lastMonId = 6;
+ firstMonId = PARTY_SIZE / 2;
+ lastMonId = PARTY_SIZE;
}
else
{
firstMonId = 0;
- lastMonId = 3;
+ lastMonId = PARTY_SIZE / 2;
}
- monsCount = 3;
+ monsCount = PARTY_SIZE / 2;
minNeeded = 1;
}
battler2PartyId = gBattlerPartyIndexes[gBattlerTarget];
@@ -7235,8 +10746,8 @@ static void Cmd_forcerandomswitch(void)
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
firstMonId = 0;
- lastMonId = 6;
- monsCount = 6;
+ lastMonId = PARTY_SIZE;
+ monsCount = PARTY_SIZE;
minNeeded = 2;
battler2PartyId = gBattlerPartyIndexes[gBattlerTarget];
battler1PartyId = gBattlerPartyIndexes[gBattlerTarget ^ BIT_FLANK];
@@ -7244,8 +10755,8 @@ static void Cmd_forcerandomswitch(void)
else
{
firstMonId = 0;
- lastMonId = 6;
- monsCount = 6;
+ lastMonId = PARTY_SIZE;
+ monsCount = PARTY_SIZE;
minNeeded = 1;
battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one pokemon out in single battles
battler1PartyId = gBattlerPartyIndexes[gBattlerTarget];
@@ -7261,26 +10772,26 @@ static void Cmd_forcerandomswitch(void)
}
}
- if (validMons <= minNeeded)
+ if (!redCardForcedSwitch && validMons <= minNeeded)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- if (TryDoForceSwitchOut())
+ *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget];
+ gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch;
+
+ do
{
- do
- {
- do
- {
- i = Random() % monsCount;
- i += firstMonId;
- }
- while (i == battler2PartyId || i == battler1PartyId);
- } while (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE
- || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE
- || GetMonData(&party[i], MON_DATA_HP) == 0); //should be one while loop, but that doesn't match.
+ i = Random() % monsCount;
+ i += firstMonId;
}
+ while (i == battler2PartyId
+ || i == battler1PartyId
+ || GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE
+ || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE
+ || GetMonData(&party[i], MON_DATA_HP) == 0);
+
*(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i;
if (!IsMultiBattle())
@@ -7301,16 +10812,42 @@ static void Cmd_forcerandomswitch(void)
}
else
{
- TryDoForceSwitchOut();
+ // In normal wild doubles, Roar will always fail if the user's level is less than the target's.
+ if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle;
+ else
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
-static void Cmd_tryconversiontypechange(void) // randomly changes user's type to one of its moves' type
+static void Cmd_tryconversiontypechange(void)
{
u8 validMoves = 0;
u8 moveChecked;
u8 moveType;
+#if B_UPDATED_CONVERSION >= GEN_6
+ // Changes user's type to its first move's type
+ for (moveChecked = 0; moveChecked < MAX_MON_MOVES; moveChecked++)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[moveChecked] != MOVE_NONE)
+ {
+ moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type;
+ break;
+ }
+ }
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ SET_BATTLER_TYPE(gBattlerAttacker, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
+ gBattlescriptCurrInstr += 5;
+ }
+#else
+ // Randomly changes user's type to one of its moves' type
while (validMoves < MAX_MON_MOVES)
{
if (gBattleMons[gBattlerAttacker].moves[validMoves] == MOVE_NONE)
@@ -7331,7 +10868,8 @@ static void Cmd_tryconversiontypechange(void) // randomly changes user's type to
moveType = TYPE_NORMAL;
}
if (moveType != gBattleMons[gBattlerAttacker].type1
- && moveType != gBattleMons[gBattlerAttacker].type2)
+ && moveType != gBattleMons[gBattlerAttacker].type2
+ && moveType != gBattleMons[gBattlerAttacker].type3)
{
break;
}
@@ -7345,7 +10883,6 @@ static void Cmd_tryconversiontypechange(void) // randomly changes user's type to
{
do
{
-
while ((moveChecked = Random() & (MAX_MON_MOVES - 1)) >= validMoves);
moveType = gBattleMoves[gBattleMons[gBattlerAttacker].moves[moveChecked]].type;
@@ -7358,13 +10895,14 @@ static void Cmd_tryconversiontypechange(void) // randomly changes user's type to
moveType = TYPE_NORMAL;
}
}
- while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2);
+ while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2 || moveType == gBattleMons[gBattlerAttacker].type3);
SET_BATTLER_TYPE(gBattlerAttacker, moveType);
PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
gBattlescriptCurrInstr += 5;
}
+#endif
}
static void Cmd_givepaydaymoney(void)
@@ -7395,7 +10933,10 @@ static void Cmd_setlightscreen(void)
else
{
gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_LIGHTSCREEN;
- gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 5;
+ if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY)
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 8;
+ else
+ gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenTimer = 5;
gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_ATK_SIDE) == 2)
@@ -7409,66 +10950,59 @@ static void Cmd_setlightscreen(void)
static void Cmd_tryKO(void)
{
- u8 holdEffect, param;
-
- if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
- {
- holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
- param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
- param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
- }
+ bool32 lands = FALSE;
+ u32 holdEffect = GetBattlerHoldEffect(gBattlerTarget, TRUE);
+ u16 targetAbility = GetBattlerAbility(gBattlerTarget);
gPotentialItemEffectBattler = gBattlerTarget;
-
- if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND
+ && (Random() % 100) < GetBattlerHoldEffectParam(gBattlerTarget))
{
- RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_FOCUS_BAND);
- gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ gSpecialStatuses[gBattlerTarget].focusBanded = TRUE;
+ RecordItemEffectBattle(gBattlerTarget, holdEffect);
+ }
+ else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && BATTLER_MAX_HP(gBattlerTarget))
+ {
+ gSpecialStatuses[gBattlerTarget].focusSashed = TRUE;
+ RecordItemEffectBattle(gBattlerTarget, holdEffect);
}
- if (gBattleMons[gBattlerTarget].ability == ABILITY_STURDY)
+ if (targetAbility == ABILITY_STURDY)
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gLastUsedAbility = ABILITY_STURDY;
gBattlescriptCurrInstr = BattleScript_SturdyPreventsOHKO;
- RecordAbilityBattle(gBattlerTarget, ABILITY_STURDY);
+ gBattlerAbility = gBattlerTarget;
}
else
{
- u16 chance;
- if (!(gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS))
+ if ((((gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS)
+ && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
+ || GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD
+ || targetAbility == ABILITY_NO_GUARD)
+ && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
{
- chance = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level);
- if (Random() % 100 + 1 < chance && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
- chance = TRUE;
- else
- chance = FALSE;
- }
- else if (gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker
- && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
- {
- chance = TRUE;
+ lands = TRUE;
}
else
{
- chance = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level);
- if (Random() % 100 + 1 < chance && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
- chance = TRUE;
- else
- chance = FALSE;
+ u16 odds = gBattleMoves[gCurrentMove].accuracy + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level);
+ #if B_SHEER_COLD_ACC >= GEN_7
+ if (gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE))
+ odds -= 10;
+ #endif
+ if (Random() % 100 + 1 < odds && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level)
+ lands = TRUE;
}
- if (chance)
+
+ if (lands)
{
if (gProtectStructs[gBattlerTarget].endured)
{
gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
}
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded || gSpecialStatuses[gBattlerTarget].focusSashed)
{
gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
@@ -7493,7 +11027,8 @@ static void Cmd_tryKO(void)
}
}
-static void Cmd_damagetohalftargethp(void) // super fang
+// Super Fang
+static void Cmd_damagetohalftargethp(void)
{
gBattleMoveDamage = gBattleMons[gBattlerTarget].hp / 2;
if (gBattleMoveDamage == 0)
@@ -7504,68 +11039,68 @@ static void Cmd_damagetohalftargethp(void) // super fang
static void Cmd_setsandstorm(void)
{
- if (gBattleWeather & B_WEATHER_SANDSTORM)
+ if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SANDSTORM, FALSE))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
}
else
{
- gBattleWeather = B_WEATHER_SANDSTORM_TEMPORARY;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM;
- gWishFutureKnock.weatherDuration = 5;
}
gBattlescriptCurrInstr++;
}
static void Cmd_weatherdamage(void)
{
- if (WEATHER_HAS_EFFECT)
+ u32 ability = GetBattlerAbility(gBattlerAttacker);
+
+ gBattleMoveDamage = 0;
+ if (IsBattlerAlive(gBattlerAttacker) && WEATHER_HAS_EFFECT && ability != ABILITY_MAGIC_GUARD)
{
if (gBattleWeather & B_WEATHER_SANDSTORM)
{
- if (gBattleMons[gBattlerAttacker].type1 != TYPE_ROCK
- && gBattleMons[gBattlerAttacker].type1 != TYPE_STEEL
- && gBattleMons[gBattlerAttacker].type1 != TYPE_GROUND
- && gBattleMons[gBattlerAttacker].type2 != TYPE_ROCK
- && gBattleMons[gBattlerAttacker].type2 != TYPE_STEEL
- && gBattleMons[gBattlerAttacker].type2 != TYPE_GROUND
- && gBattleMons[gBattlerAttacker].ability != ABILITY_SAND_VEIL
- && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
- && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER))
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ROCK)
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GROUND)
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_STEEL)
+ && ability != ABILITY_SAND_VEIL
+ && ability != ABILITY_SAND_FORCE
+ && ability != ABILITY_SAND_RUSH
+ && ability != ABILITY_OVERCOAT
+ && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES)
{
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
}
- else
- {
- gBattleMoveDamage = 0;
- }
}
if (gBattleWeather & B_WEATHER_HAIL)
{
- if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)
- && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
- && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER))
+ if (ability == ABILITY_ICE_BODY
+ && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ && !BATTLER_MAX_HP(gBattlerAttacker)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK))
+ {
+ gBattlerAbility = gBattlerAttacker;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ }
+ else if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)
+ && ability != ABILITY_SNOW_CLOAK
+ && ability != ABILITY_OVERCOAT
+ && ability != ABILITY_ICE_BODY
+ && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES)
{
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
}
- else
- {
- gBattleMoveDamage = 0;
- }
}
}
- else
- {
- gBattleMoveDamage = 0;
- }
-
- if (gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
- gBattleMoveDamage = 0;
gBattlescriptCurrInstr++;
}
@@ -7592,9 +11127,9 @@ static void Cmd_tryinfatuating(void)
speciesTarget = GetMonData(monTarget, MON_DATA_SPECIES);
personalityTarget = GetMonData(monTarget, MON_DATA_PERSONALITY);
- if (gBattleMons[gBattlerTarget].ability == ABILITY_OBLIVIOUS)
+ if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS)
{
- gBattlescriptCurrInstr = BattleScript_ObliviousPreventsAttraction;
+ gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp;
gLastUsedAbility = ABILITY_OBLIVIOUS;
RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS);
}
@@ -7685,6 +11220,7 @@ static void Cmd_transformdataexecution(void)
gChosenMove = MOVE_UNAVAILABLE;
gBattlescriptCurrInstr++;
if (gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED
+ || gBattleStruct->illusion[gBattlerTarget].on
|| gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)
{
gMoveResultFlags |= MOVE_RESULT_FAILED;
@@ -7700,11 +11236,12 @@ static void Cmd_transformdataexecution(void)
gDisableStructs[gBattlerAttacker].disableTimer = 0;
gDisableStructs[gBattlerAttacker].transformedMonPersonality = gBattleMons[gBattlerTarget].personality;
gDisableStructs[gBattlerAttacker].mimickedMoves = 0;
+ gDisableStructs[gBattlerAttacker].usedMoves = 0;
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].species)
- battleMonAttacker = (u8*)(&gBattleMons[gBattlerAttacker]);
- battleMonTarget = (u8*)(&gBattleMons[gBattlerTarget]);
+ battleMonAttacker = (u8 *)(&gBattleMons[gBattlerAttacker]);
+ battleMonTarget = (u8 *)(&gBattleMons[gBattlerTarget]);
for (i = 0; i < offsetof(struct BattlePokemon, pp); i++)
battleMonAttacker[i] = battleMonTarget[i];
@@ -7751,22 +11288,10 @@ static void Cmd_setsubstitute(void)
gBattlescriptCurrInstr++;
}
-static bool8 IsMoveUncopyableByMimic(u16 move)
-{
- s32 i;
- for (i = 0; sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END
- && sMovesForbiddenToCopy[i] != move; i++);
-
- return (sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END);
-}
-
static void Cmd_mimicattackcopy(void)
{
- gChosenMove = MOVE_UNAVAILABLE;
-
- if (IsMoveUncopyableByMimic(gLastMoves[gBattlerTarget])
- || gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED
- || gLastMoves[gBattlerTarget] == MOVE_NONE
+ if ((sForbiddenMoves[gLastMoves[gBattlerTarget]] & FORBIDDEN_MIMIC)
+ || (gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)
|| gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -7783,13 +11308,13 @@ static void Cmd_mimicattackcopy(void)
if (i == MAX_MON_MOVES)
{
+ gChosenMove = 0xFFFF;
gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastMoves[gBattlerTarget];
if (gBattleMoves[gLastMoves[gBattlerTarget]].pp < 5)
gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gLastMoves[gBattlerTarget]].pp;
else
gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 5;
-
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget])
gDisableStructs[gBattlerAttacker].mimickedMoves |= gBitTable[gCurrMovePos];
@@ -7804,27 +11329,13 @@ static void Cmd_mimicattackcopy(void)
static void Cmd_metronome(void)
{
- while (1)
+ while (TRUE)
{
- s32 i;
-
- gCurrentMove = (Random() & 0x1FF) + 1;
- if (gCurrentMove >= MOVES_COUNT)
+ gCurrentMove = (Random() % (MOVES_COUNT - 1)) + 1;
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_PLACEHOLDER)
continue;
- for (i = 0; i < MAX_MON_MOVES; i++); // ?
-
- i = -1;
- while (1)
- {
- i++;
- if (sMovesForbiddenToCopy[i] == gCurrentMove)
- break;
- if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
- break;
- }
-
- if (sMovesForbiddenToCopy[i] == METRONOME_FORBIDDEN_END)
+ if (!(sForbiddenMoves[gCurrentMove] & FORBIDDEN_METRONOME))
{
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
@@ -7843,10 +11354,10 @@ static void Cmd_dmgtolevel(void)
static void Cmd_psywavedamageeffect(void)
{
s32 randDamage;
-
- while ((randDamage = Random() % 16) > 10);
-
- randDamage *= 10;
+ if (B_PSYWAVE_DMG >= GEN_6)
+ randDamage = (Random() % 101);
+ else
+ randDamage = (Random() % 11) * 10;
gBattleMoveDamage = gBattleMons[gBattlerAttacker].level * (randDamage + 50) / 100;
gBattlescriptCurrInstr++;
}
@@ -7862,7 +11373,7 @@ static void Cmd_counterdamagecalculator(void)
{
gBattleMoveDamage = gProtectStructs[gBattlerAttacker].physicalDmg * 2;
- if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp)
+ if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove))
gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
else
gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId;
@@ -7871,21 +11382,24 @@ static void Cmd_counterdamagecalculator(void)
}
else
{
- gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE;
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
-static void Cmd_mirrorcoatdamagecalculator(void) // a copy of Cmd with the physical -> special field changes
+// A copy of Cmd with the physical -> special field changes
+static void Cmd_mirrorcoatdamagecalculator(void)
{
u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId);
- if (gProtectStructs[gBattlerAttacker].specialDmg && sideAttacker != sideTarget && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp)
+ if (gProtectStructs[gBattlerAttacker].specialDmg
+ && sideAttacker != sideTarget
+ && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp)
{
gBattleMoveDamage = gProtectStructs[gBattlerAttacker].specialDmg * 2;
- if (gSideTimers[sideTarget].followmeTimer && gBattleMons[gSideTimers[sideTarget].followmeTarget].hp)
+ if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove))
gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
else
gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId;
@@ -7894,7 +11408,7 @@ static void Cmd_mirrorcoatdamagecalculator(void) // a copy of Cmd with the physi
}
else
{
- gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE;
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -7914,7 +11428,12 @@ static void Cmd_disablelastusedattack(void)
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].moves[i])
gDisableStructs[gBattlerTarget].disabledMove = gBattleMons[gBattlerTarget].moves[i];
- gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2;
+ if (B_DISABLE_TURNS == GEN_3)
+ gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2;
+ else if (B_DISABLE_TURNS == GEN_4)
+ gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 4;
+ else
+ gDisableStructs[gBattlerTarget].disableTimer = 4;
gDisableStructs[gBattlerTarget].disableTimerStartValue = gDisableStructs[gBattlerTarget].disableTimer; // used to save the random amount of turns?
gBattlescriptCurrInstr += 5;
}
@@ -7946,7 +11465,7 @@ static void Cmd_trysetencore(void)
{
gDisableStructs[gBattlerTarget].encoredMove = gBattleMons[gBattlerTarget].moves[i];
gDisableStructs[gBattlerTarget].encoredMovePos = i;
- gDisableStructs[gBattlerTarget].encoreTimer = (Random() & 3) + 3;
+ gDisableStructs[gBattlerTarget].encoreTimer = 3;
gDisableStructs[gBattlerTarget].encoreTimerStartValue = gDisableStructs[gBattlerTarget].encoreTimer;
gBattlescriptCurrInstr += 5;
}
@@ -7958,11 +11477,11 @@ static void Cmd_trysetencore(void)
static void Cmd_painsplitdmgcalc(void)
{
- if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE))
+ if (!(DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)))
{
s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + gBattleMons[gBattlerTarget].hp) / 2;
s32 painSplitHp = gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - hpDiff;
- u8* storeLoc = (void*)(&gBattleScripting.painSplitHp);
+ u8 *storeLoc = (void *)(&gBattleScripting.painSplitHp);
storeLoc[0] = (painSplitHp);
storeLoc[1] = (painSplitHp & 0x0000FF00) >> 8;
@@ -7980,7 +11499,8 @@ static void Cmd_painsplitdmgcalc(void)
}
}
-static void Cmd_settypetorandomresistance(void) // conversion 2
+// Conversion 2
+static void Cmd_settypetorandomresistance(void)
{
if (gLastLandedMoves[gBattlerAttacker] == MOVE_NONE
|| gLastLandedMoves[gBattlerAttacker] == MOVE_UNAVAILABLE)
@@ -7994,45 +11514,36 @@ static void Cmd_settypetorandomresistance(void) // conversion 2
}
else
{
- s32 i, j, rands;
+ u32 i, resistTypes = 0;
+ u32 hitByType = gLastHitByType[gBattlerAttacker];
- for (rands = 0; rands < 1000; rands++)
+ for (i = 0; i < NUMBER_OF_MON_TYPES; i++) // Find all types that resist.
{
- while (((i = Random() % 128) > sizeof(gTypeEffectiveness) / 3));
-
- i *= 3;
-
- if (TYPE_EFFECT_ATK_TYPE(i) == gLastHitByType[gBattlerAttacker]
- && TYPE_EFFECT_MULTIPLIER(i) <= TYPE_MUL_NOT_EFFECTIVE
- && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
+ switch (GetTypeModifier(hitByType, i))
{
- SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i));
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i));
-
- gBattlescriptCurrInstr += 5;
- return;
+ case UQ_4_12(0):
+ case UQ_4_12(0.5):
+ resistTypes |= gBitTable[i];
+ break;
}
}
- for (j = 0, rands = 0; rands < sizeof(gTypeEffectiveness); j += 3, rands += 3)
+ while (resistTypes != 0)
{
- switch (TYPE_EFFECT_ATK_TYPE(j))
+ i = Random() % NUMBER_OF_MON_TYPES;
+ if (resistTypes & gBitTable[i])
{
- case TYPE_ENDTABLE:
- case TYPE_FORESIGHT:
- break;
- default:
- if (TYPE_EFFECT_ATK_TYPE(j) == gLastHitByType[gBattlerAttacker]
- && TYPE_EFFECT_MULTIPLIER(j) <= 5
- && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i))
{
- SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(rands));
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(rands))
-
+ resistTypes &= ~(gBitTable[i]); // Type resists, but the user is already of this type.
+ }
+ else
+ {
+ SET_BATTLER_TYPE(gBattlerAttacker, i);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, i);
gBattlescriptCurrInstr += 5;
return;
}
- break;
}
}
@@ -8048,7 +11559,8 @@ static void Cmd_setalwayshitflag(void)
gBattlescriptCurrInstr++;
}
-static void Cmd_copymovepermanently(void) // sketch
+// Sketch
+static void Cmd_copymovepermanently(void)
{
gChosenMove = MOVE_UNAVAILABLE;
@@ -8104,38 +11616,26 @@ static void Cmd_copymovepermanently(void) // sketch
static bool8 IsTwoTurnsMove(u16 move)
{
if (gBattleMoves[move].effect == EFFECT_SKULL_BASH
- || gBattleMoves[move].effect == EFFECT_RAZOR_WIND
- || gBattleMoves[move].effect == EFFECT_SKY_ATTACK
+ || gBattleMoves[move].effect == EFFECT_TWO_TURNS_ATTACK
|| gBattleMoves[move].effect == EFFECT_SOLAR_BEAM
|| gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE
- || gBattleMoves[move].effect == EFFECT_BIDE)
- return TRUE;
- else
- return FALSE;
-}
-
-static bool8 IsInvalidForSleepTalkOrAssist(u16 move)
-{
- if (move == MOVE_NONE
- || move == MOVE_SLEEP_TALK
- || move == MOVE_ASSIST
- || move == MOVE_MIRROR_MOVE
- || move == MOVE_METRONOME)
+ || gBattleMoves[move].effect == EFFECT_BIDE
+ || gBattleMoves[move].effect == EFFECT_METEOR_BEAM)
return TRUE;
else
return FALSE;
}
+// unused
static u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a charging turn, otherwise 2
{
// first argument is unused
if (gBattleMoves[move].effect == EFFECT_SOLAR_BEAM
- && (gBattleWeather & B_WEATHER_SUN))
+ && IsBattlerWeatherAffected(battlerId, B_WEATHER_SUN))
return 2;
if (gBattleMoves[move].effect == EFFECT_SKULL_BASH
- || gBattleMoves[move].effect == EFFECT_RAZOR_WIND
- || gBattleMoves[move].effect == EFFECT_SKY_ATTACK
+ || gBattleMoves[move].effect == EFFECT_TWO_TURNS_ATTACK
|| gBattleMoves[move].effect == EFFECT_SOLAR_BEAM
|| gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE
|| gBattleMoves[move].effect == EFFECT_BIDE)
@@ -8148,19 +11648,15 @@ static u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a c
static void Cmd_trychoosesleeptalkmove(void)
{
- s32 i;
- u8 unusableMovesBits = 0;
+ u32 i, unusableMovesBits = 0, movePosition;
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (IsInvalidForSleepTalkOrAssist(gBattleMons[gBattlerAttacker].moves[i])
- || gBattleMons[gBattlerAttacker].moves[i] == MOVE_FOCUS_PUNCH
- || gBattleMons[gBattlerAttacker].moves[i] == MOVE_UPROAR
+ if ((sForbiddenMoves[gBattleMons[gBattlerAttacker].moves[i]] & FORBIDDEN_SLEEP_TALK)
|| IsTwoTurnsMove(gBattleMons[gBattlerAttacker].moves[i]))
{
unusableMovesBits |= gBitTable[i];
}
-
}
unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~MOVE_LIMITATION_PP);
@@ -8170,8 +11666,6 @@ static void Cmd_trychoosesleeptalkmove(void)
}
else // at least one move can be chosen
{
- u32 movePosition;
-
do
{
movePosition = Random() & (MAX_MON_MOVES - 1);
@@ -8209,19 +11703,21 @@ static void Cmd_trysetdestinybondtohappen(void)
gBattlescriptCurrInstr++;
}
-static void Cmd_remaininghptopower(void)
+static void Cmd_settailwind(void)
{
- s32 i;
- s32 hpFraction = GetScaledHPFraction(gBattleMons[gBattlerAttacker].hp, gBattleMons[gBattlerAttacker].maxHP, 48);
+ u8 side = GetBattlerSide(gBattlerAttacker);
- for (i = 0; i < (s32) sizeof(sFlailHpScaleToPowerTable); i += 2)
+ if (!(gSideStatuses[side] & SIDE_STATUS_TAILWIND))
{
- if (hpFraction <= sFlailHpScaleToPowerTable[i])
- break;
+ gSideStatuses[side] |= SIDE_STATUS_TAILWIND;
+ gSideTimers[side].tailwindBattlerId = gBattlerAttacker;
+ gSideTimers[side].tailwindTimer = (B_TAILWIND_TURNS >= GEN_5) ? 4 : 3;
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
-
- gDynamicBasePower = sFlailHpScaleToPowerTable[i + 1];
- gBattlescriptCurrInstr++;
}
static void Cmd_tryspiteppreduce(void)
@@ -8237,9 +11733,18 @@ static void Cmd_tryspiteppreduce(void)
break;
}
+ #if B_CAN_SPITE_FAIL <= GEN_3
if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] > 1)
+ #else
+ if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0)
+ #endif
{
+ #if B_PP_REDUCED_BY_SPITE <= GEN_3
s32 ppToDeduct = (Random() & 3) + 2;
+ #else
+ s32 ppToDeduct = 4;
+ #endif
+
if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct)
ppToDeduct = gBattleMons[gBattlerTarget].pp[i];
@@ -8262,7 +11767,8 @@ static void Cmd_tryspiteppreduce(void)
gBattlescriptCurrInstr += 5;
- if (gBattleMons[gBattlerTarget].pp[i] == 0)
+ // Don't cut off Sky Drop if pp is brought to zero.
+ if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)
CancelMultiTurnMoves(gBattlerTarget);
}
else
@@ -8293,7 +11799,7 @@ static void Cmd_healpartystatus(void)
else
party = gEnemyParty;
- if (gBattleMons[gBattlerAttacker].ability != ABILITY_SOUNDPROOF)
+ if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF)
{
gBattleMons[gBattlerAttacker].status1 = 0;
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE;
@@ -8309,7 +11815,7 @@ static void Cmd_healpartystatus(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
&& !(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
{
- if (gBattleMons[gActiveBattler].ability != ABILITY_SOUNDPROOF)
+ if (GetBattlerAbility(gActiveBattler) != ABILITY_SOUNDPROOF)
{
gBattleMons[gActiveBattler].status1 = 0;
gBattleMons[gActiveBattler].status2 &= ~STATUS2_NIGHTMARE;
@@ -8330,14 +11836,14 @@ static void Cmd_healpartystatus(void)
if (species != SPECIES_NONE && species != SPECIES_EGG)
{
- u8 ability;
+ u16 ability;
if (gBattlerPartyIndexes[gBattlerAttacker] == i)
- ability = gBattleMons[gBattlerAttacker].ability;
+ ability = GetBattlerAbility(gBattlerAttacker);
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
&& gBattlerPartyIndexes[gActiveBattler] == i
&& !(gAbsentBattlerFlags & gBitTable[gActiveBattler]))
- ability = gBattleMons[gActiveBattler].ability;
+ ability = GetBattlerAbility(gActiveBattler);
else
ability = GetAbilityBySpecies(species, abilityNum);
@@ -8397,7 +11903,7 @@ static void Cmd_trysetspikes(void)
if (gSideTimers[targetSide].spikesAmount == 3)
{
- gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE;
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
@@ -8422,7 +11928,8 @@ static void Cmd_trysetperishsong(void)
for (i = 0; i < gBattlersCount; i++)
{
if (gStatuses3[i] & STATUS3_PERISH_SONG
- || gBattleMons[i].ability == ABILITY_SOUNDPROOF)
+ || GetBattlerAbility(i) == ABILITY_SOUNDPROOF
+ || BlocksPrankster(gCurrentMove, gBattlerAttacker, i, TRUE))
{
notAffectedCount++;
}
@@ -8442,7 +11949,7 @@ static void Cmd_trysetperishsong(void)
gBattlescriptCurrInstr += 5;
}
-static void Cmd_rolloutdamagecalculation(void)
+static void Cmd_handlerollout(void)
{
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
@@ -8451,28 +11958,18 @@ static void Cmd_rolloutdamagecalculation(void)
}
else
{
- s32 i;
-
- if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) // first hit
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) // First hit.
{
gDisableStructs[gBattlerAttacker].rolloutTimer = 5;
gDisableStructs[gBattlerAttacker].rolloutTimerStartValue = 5;
gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS;
gLockedMoves[gBattlerAttacker] = gCurrentMove;
}
- if (--gDisableStructs[gBattlerAttacker].rolloutTimer == 0) // last hit
+ if (--gDisableStructs[gBattlerAttacker].rolloutTimer == 0) // Last hit.
{
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_MULTIPLETURNS;
}
- gDynamicBasePower = gBattleMoves[gCurrentMove].power;
-
- for (i = 1; i < (5 - gDisableStructs[gBattlerAttacker].rolloutTimer); i++)
- gDynamicBasePower *= 2;
-
- if (gBattleMons[gBattlerAttacker].status2 & STATUS2_DEFENSE_CURL)
- gDynamicBasePower *= 2;
-
gBattlescriptCurrInstr++;
}
}
@@ -8480,13 +11977,13 @@ static void Cmd_rolloutdamagecalculation(void)
static void Cmd_jumpifconfusedandstatmaxed(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION
- && gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == MAX_STAT_STAGE)
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
+ && !CompareStat(gBattlerTarget, gBattlescriptCurrInstr[1], MAX_STAT_STAGE, CMP_LESS_THAN))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); // Fails if we're confused AND stat cannot be raised
else
gBattlescriptCurrInstr += 6;
}
-static void Cmd_furycuttercalc(void)
+static void Cmd_handlefurycutter(void)
{
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
@@ -8495,40 +11992,43 @@ static void Cmd_furycuttercalc(void)
}
else
{
- s32 i;
-
if (gDisableStructs[gBattlerAttacker].furyCutterCounter != 5)
gDisableStructs[gBattlerAttacker].furyCutterCounter++;
- gDynamicBasePower = gBattleMoves[gCurrentMove].power;
-
- for (i = 1; i < gDisableStructs[gBattlerAttacker].furyCutterCounter; i++)
- gDynamicBasePower *= 2;
-
gBattlescriptCurrInstr++;
}
}
-static void Cmd_friendshiptodamagecalculation(void)
+static void Cmd_setembargo(void)
{
- if (gBattleMoves[gCurrentMove].effect == EFFECT_RETURN)
- gDynamicBasePower = 10 * (gBattleMons[gBattlerAttacker].friendship) / 25;
- else // EFFECT_FRUSTRATION
- gDynamicBasePower = 10 * (255 - gBattleMons[gBattlerAttacker].friendship) / 25;
-
- gBattlescriptCurrInstr++;
+ if (gStatuses3[gBattlerTarget] & STATUS3_EMBARGO)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gStatuses3[gBattlerTarget] |= STATUS3_EMBARGO;
+ gDisableStructs[gBattlerTarget].embargoTimer = 5;
+ gBattlescriptCurrInstr += 5;
+ }
}
static void Cmd_presentdamagecalculation(void)
{
- s32 rand = Random() & 0xFF;
+ u32 rand = Random() & 0xFF;
if (rand < 102)
- gDynamicBasePower = 40;
+ {
+ gBattleStruct->presentBasePower = 40;
+ }
else if (rand < 178)
- gDynamicBasePower = 80;
+ {
+ gBattleStruct->presentBasePower = 80;
+ }
else if (rand < 204)
- gDynamicBasePower = 120;
+ {
+ gBattleStruct->presentBasePower = 120;
+ }
else
{
gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 4;
@@ -8536,10 +12036,15 @@ static void Cmd_presentdamagecalculation(void)
gBattleMoveDamage = 1;
gBattleMoveDamage *= -1;
}
+
if (rand < 204)
+ {
gBattlescriptCurrInstr = BattleScript_HitFromCritCalc;
+ }
else if (gBattleMons[gBattlerTarget].maxHP == gBattleMons[gBattlerTarget].hp)
+ {
gBattlescriptCurrInstr = BattleScript_AlreadyAtFullHp;
+ }
else
{
gMoveResultFlags &= ~MOVE_RESULT_DOESNT_AFFECT_FOE;
@@ -8567,52 +12072,51 @@ static void Cmd_setsafeguard(void)
static void Cmd_magnitudedamagecalculation(void)
{
- s32 magnitude = Random() % 100;
+ u32 magnitude = Random() % 100;
if (magnitude < 5)
{
- gDynamicBasePower = 10;
+ gBattleStruct->magnitudeBasePower = 10;
magnitude = 4;
}
else if (magnitude < 15)
{
- gDynamicBasePower = 30;
+ gBattleStruct->magnitudeBasePower = 30;
magnitude = 5;
}
else if (magnitude < 35)
{
- gDynamicBasePower = 50;
+ gBattleStruct->magnitudeBasePower = 50;
magnitude = 6;
}
else if (magnitude < 65)
{
- gDynamicBasePower = 70;
+ gBattleStruct->magnitudeBasePower = 70;
magnitude = 7;
}
else if (magnitude < 85)
{
- gDynamicBasePower = 90;
+ gBattleStruct->magnitudeBasePower = 90;
magnitude = 8;
}
else if (magnitude < 95)
{
- gDynamicBasePower = 110;
+ gBattleStruct->magnitudeBasePower = 110;
magnitude = 9;
}
else
{
- gDynamicBasePower = 150;
+ gBattleStruct->magnitudeBasePower = 150;
magnitude = 10;
}
-
PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 2, magnitude)
for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
{
if (gBattlerTarget == gBattlerAttacker)
continue;
- if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) // a valid target was found
+ if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget])) // A valid target was found.
break;
}
@@ -8665,28 +12169,28 @@ static void Cmd_jumpifnopursuitswitchdmg(void)
static void Cmd_setsunny(void)
{
- if (gBattleWeather & B_WEATHER_SUN)
+ if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SUN, FALSE))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
}
else
{
- gBattleWeather = B_WEATHER_SUN_TEMPORARY;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT;
- gWishFutureKnock.weatherDuration = 5;
}
gBattlescriptCurrInstr++;
}
-static void Cmd_maxattackhalvehp(void) // belly drum
+// Belly Drum
+static void Cmd_maxattackhalvehp(void)
{
u32 halfHp = gBattleMons[gBattlerAttacker].maxHP / 2;
if (!(gBattleMons[gBattlerAttacker].maxHP / 2))
halfHp = 1;
-
+
+ // Belly Drum fails if the user's current HP is less than half its maximum, or if the user's Attack is already at +6 (even if the user has Contrary).
if (gBattleMons[gBattlerAttacker].statStages[STAT_ATK] < MAX_STAT_STAGE
&& gBattleMons[gBattlerAttacker].hp > halfHp)
{
@@ -8703,7 +12207,8 @@ static void Cmd_maxattackhalvehp(void) // belly drum
}
}
-static void Cmd_copyfoestats(void) // psych up
+// Psych Up
+static void Cmd_copyfoestats(void)
{
s32 i;
@@ -8717,18 +12222,14 @@ static void Cmd_copyfoestats(void) // psych up
static void Cmd_rapidspinfree(void)
{
+ u8 atkSide = GetBattlerSide(gBattlerAttacker);
+
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_WRAPPED)
{
gBattleScripting.battler = gBattlerTarget;
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_WRAPPED;
gBattlerTarget = *(gBattleStruct->wrappedBy + gBattlerAttacker);
-
- gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
- gBattleTextBuff1[1] = B_BUFF_MOVE;
- gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gBattlerAttacker * 2 + 0);
- gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gBattlerAttacker * 2 + 1);
- gBattleTextBuff1[4] = B_BUFF_EOS;
-
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[gBattlerAttacker]);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_WrapFree;
}
@@ -8739,13 +12240,34 @@ static void Cmd_rapidspinfree(void)
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_LeechSeedFree;
}
- else if (gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_SPIKES)
+ else if (gSideStatuses[atkSide] & SIDE_STATUS_SPIKES)
{
- gSideStatuses[GetBattlerSide(gBattlerAttacker)] &= ~SIDE_STATUS_SPIKES;
- gSideTimers[GetBattlerSide(gBattlerAttacker)].spikesAmount = 0;
+ gSideStatuses[atkSide] &= ~SIDE_STATUS_SPIKES;
+ gSideTimers[atkSide].spikesAmount = 0;
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SpikesFree;
}
+ else if (gSideStatuses[atkSide] & SIDE_STATUS_TOXIC_SPIKES)
+ {
+ gSideStatuses[atkSide] &= ~SIDE_STATUS_TOXIC_SPIKES;
+ gSideTimers[atkSide].toxicSpikesAmount = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ToxicSpikesFree;
+ }
+ else if (gSideStatuses[atkSide] & SIDE_STATUS_STICKY_WEB)
+ {
+ gSideStatuses[atkSide] &= ~SIDE_STATUS_STICKY_WEB;
+ gSideTimers[atkSide].stickyWebAmount = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_StickyWebFree;
+ }
+ else if (gSideStatuses[atkSide] & SIDE_STATUS_STEALTH_ROCK)
+ {
+ gSideStatuses[atkSide] &= ~SIDE_STATUS_STEALTH_ROCK;
+ gSideTimers[atkSide].stealthRockAmount = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_StealthRockFree;
+ }
else
{
gBattlescriptCurrInstr++;
@@ -8761,15 +12283,24 @@ static void Cmd_setdefensecurlbit(void)
static void Cmd_recoverbasedonsunlight(void)
{
gBattlerTarget = gBattlerAttacker;
-
if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP)
{
- if (gBattleWeather == 0 || !WEATHER_HAS_EFFECT)
- gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
- else if (gBattleWeather & B_WEATHER_SUN)
- gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30;
- else // not sunny weather
- gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4;
+ if (gCurrentMove == MOVE_SHORE_UP)
+ {
+ if (WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_SANDSTORM)
+ gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30;
+ else
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
+ }
+ else
+ {
+ if (!(gBattleWeather & B_WEATHER_ANY) || !WEATHER_HAS_EFFECT || GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA)
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 2;
+ else if (gBattleWeather & B_WEATHER_SUN)
+ gBattleMoveDamage = 20 * gBattleMons[gBattlerAttacker].maxHP / 30;
+ else // not sunny weather
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4;
+ }
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
@@ -8783,41 +12314,31 @@ static void Cmd_recoverbasedonsunlight(void)
}
}
-static void Cmd_hiddenpowercalc(void)
+static void Cmd_setstickyweb(void)
{
- u8 powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1)
- | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0)
- | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1)
- | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2)
- | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3)
- | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4);
+ u8 targetSide = GetBattlerSide(gBattlerTarget);
- u8 typeBits = ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0)
- | ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1)
- | ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2)
- | ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3)
- | ((gBattleMons[gBattlerAttacker].spAttackIV & 1) << 4)
- | ((gBattleMons[gBattlerAttacker].spDefenseIV & 1) << 5);
-
- gDynamicBasePower = (40 * powerBits) / 63 + 30;
-
- // Subtract 3 instead of 1 below because 2 types are excluded (TYPE_NORMAL and TYPE_MYSTERY)
- // The final + 1 skips past Normal, and the following conditional skips TYPE_MYSTERY
- gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 3) * typeBits) / 63 + 1;
- if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY)
- gBattleStruct->dynamicMoveType++;
- gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_1 | F_DYNAMIC_TYPE_2;
-
- gBattlescriptCurrInstr++;
+ if (gSideStatuses[targetSide] & SIDE_STATUS_STICKY_WEB)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gSideStatuses[targetSide] |= SIDE_STATUS_STICKY_WEB;
+ gSideTimers[targetSide].stickyWebBattlerSide = GetBattlerSide(gBattlerAttacker); // For Court Change/Defiant - set this to the user's side
+ gSideTimers[targetSide].stickyWebAmount = 1;
+ gBattleStruct->stickyWebUser = gBattlerAttacker; // For Mirror Armor
+ gBattlescriptCurrInstr += 5;
+ }
}
static void Cmd_selectfirstvalidtarget(void)
{
for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
{
- if (gBattlerTarget == gBattlerAttacker)
+ if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER))
continue;
- if (!(gAbsentBattlerFlags & gBitTable[gBattlerTarget]))
+ if (IsBattlerAlive(gBattlerTarget))
break;
}
gBattlescriptCurrInstr++;
@@ -8835,12 +12356,6 @@ static void Cmd_trysetfutureattack(void)
gWishFutureKnock.futureSightMove[gBattlerTarget] = gCurrentMove;
gWishFutureKnock.futureSightAttacker[gBattlerTarget] = gBattlerAttacker;
gWishFutureKnock.futureSightCounter[gBattlerTarget] = 3;
- gWishFutureKnock.futureSightDmg[gBattlerTarget] = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove,
- gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)], 0,
- 0, gBattlerAttacker, gBattlerTarget);
-
- if (gProtectStructs[gBattlerAttacker].helpingHand)
- gWishFutureKnock.futureSightDmg[gBattlerTarget] = gWishFutureKnock.futureSightDmg[gBattlerTarget] * 15 / 10;
if (gCurrentMove == MOVE_DOOM_DESIRE)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOOM_DESIRE;
@@ -8873,7 +12388,7 @@ static void Cmd_trydobeatup(void)
&& GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2)
&& GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG
&& !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS))
- break;
+ break;
}
if (gBattleCommunication[0] < PARTY_SIZE)
{
@@ -8904,6 +12419,7 @@ static void Cmd_setsemiinvulnerablebit(void)
{
case MOVE_FLY:
case MOVE_BOUNCE:
+ case MOVE_SKY_DROP:
gStatuses3[gBattlerAttacker] |= STATUS3_ON_AIR;
break;
case MOVE_DIG:
@@ -8912,6 +12428,10 @@ static void Cmd_setsemiinvulnerablebit(void)
case MOVE_DIVE:
gStatuses3[gBattlerAttacker] |= STATUS3_UNDERWATER;
break;
+ case MOVE_PHANTOM_FORCE:
+ case MOVE_SHADOW_FORCE:
+ gStatuses3[gBattlerAttacker] |= STATUS3_PHANTOM_FORCE;
+ break;
}
gBattlescriptCurrInstr++;
@@ -8919,20 +12439,7 @@ static void Cmd_setsemiinvulnerablebit(void)
static void Cmd_clearsemiinvulnerablebit(void)
{
- switch (gCurrentMove)
- {
- case MOVE_FLY:
- case MOVE_BOUNCE:
- gStatuses3[gBattlerAttacker] &= ~STATUS3_ON_AIR;
- break;
- case MOVE_DIG:
- gStatuses3[gBattlerAttacker] &= ~STATUS3_UNDERGROUND;
- break;
- case MOVE_DIVE:
- gStatuses3[gBattlerAttacker] &= ~STATUS3_UNDERWATER;
- break;
- }
-
+ gStatuses3[gBattlerAttacker] &= ~STATUS3_SEMI_INVULNERABLE;
gBattlescriptCurrInstr++;
}
@@ -8946,31 +12453,38 @@ static void Cmd_setminimize(void)
static void Cmd_sethail(void)
{
- if (gBattleWeather & B_WEATHER_HAIL)
+ if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_HAIL, FALSE))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
}
else
{
- gBattleWeather = B_WEATHER_HAIL_TEMPORARY;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL;
- gWishFutureKnock.weatherDuration = 5;
}
gBattlescriptCurrInstr++;
}
-static void Cmd_jumpifattackandspecialattackcannotfall(void) // memento
+static void Cmd_trymemento(void)
{
+ #if B_MEMENTO_FAIL == GEN_3
if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE
&& gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE
&& gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED)
+ #else
+ if (gBattleCommunication[MISS_TYPE] == B_MSG_PROTECTED
+ || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE
+ || IsBattlerProtected(gBattlerTarget, gCurrentMove)
+ || DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))
+ #endif
{
+ // Failed, unprotected target already has minimum Attack and Special Attack.
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
+ // Success, drop user's HP bar to 0
gActiveBattler = gBattlerAttacker;
gBattleMoveDamage = gBattleMons[gActiveBattler].hp;
BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP);
@@ -8979,10 +12493,12 @@ static void Cmd_jumpifattackandspecialattackcannotfall(void) // memento
}
}
-static void Cmd_setforcedtarget(void) // follow me
+// Follow Me
+static void Cmd_setforcedtarget(void)
{
- gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTimer = 1;
- gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTarget = gBattlerAttacker;
+ gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 1;
+ gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget = gBattlerTarget;
+ gSideTimers[GetBattlerSide(gBattlerTarget)].followmePowder = TestMoveFlags(gCurrentMove, FLAG_POWDER);
gBattlescriptCurrInstr++;
}
@@ -8994,16 +12510,33 @@ static void Cmd_setcharge(void)
gBattlescriptCurrInstr++;
}
-static void Cmd_callterrainattack(void) // nature power
+// Nature Power
+static void Cmd_callterrainattack(void)
{
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
- gCurrentMove = sNaturePowerMoves[gBattleTerrain];
+ gCurrentMove = GetNaturePowerMove();
gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
gBattlescriptCurrInstr++;
}
-static void Cmd_cureifburnedparalysedorpoisoned(void) // refresh
+u16 GetNaturePowerMove(void)
+{
+ if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
+ return MOVE_MOONBLAST;
+ else if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
+ return MOVE_THUNDERBOLT;
+ else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
+ return MOVE_ENERGY_BALL;
+ else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
+ return MOVE_PSYCHIC;
+ else if (sNaturePowerMoves == MOVE_NONE)
+ return MOVE_TRI_ATTACK;
+ return sNaturePowerMoves[gBattleTerrain];
+}
+
+// Refresh
+static void Cmd_cureifburnedparalysedorpoisoned(void)
{
if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON))
{
@@ -9042,10 +12575,28 @@ static void Cmd_jumpifnodamage(void)
static void Cmd_settaunt(void)
{
+#if B_OBLIVIOUS_TAUNT >= GEN_6
+ if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS)
+ {
+ gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp;
+ gLastUsedAbility = ABILITY_OBLIVIOUS;
+ RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS);
+ }
+ else
+#endif
if (gDisableStructs[gBattlerTarget].tauntTimer == 0)
{
- gDisableStructs[gBattlerTarget].tauntTimer = 2;
- gDisableStructs[gBattlerTarget].tauntTimer2 = 2;
+ #if B_TAUNT_TURNS >= GEN_5
+ u8 turns = 4;
+ if (GetBattlerTurnOrderNum(gBattlerTarget) > GetBattlerTurnOrderNum(gBattlerAttacker))
+ turns--; // If the target hasn't yet moved this turn, Taunt lasts for only three turns (source: Bulbapedia)
+ #elif B_TAUNT_TURNS == GEN_4
+ u8 turns = (Random() & 2) + 3;
+ #else
+ u8 turns = 2;
+ #endif
+
+ gDisableStructs[gBattlerTarget].tauntTimer = gDisableStructs[gBattlerTarget].tauntTimer2 = turns;
gBattlescriptCurrInstr += 5;
}
else
@@ -9063,7 +12614,7 @@ static void Cmd_trysethelpinghand(void)
&& !gProtectStructs[gBattlerAttacker].helpingHand
&& !gProtectStructs[gBattlerTarget].helpingHand)
{
- gProtectStructs[gBattlerTarget].helpingHand = 1;
+ gProtectStructs[gBattlerTarget].helpingHand = TRUE;
gBattlescriptCurrInstr += 5;
}
else
@@ -9072,7 +12623,8 @@ static void Cmd_trysethelpinghand(void)
}
}
-static void Cmd_tryswapitems(void) // trick
+// Trick
+static void Cmd_tryswapitems(void)
{
// opponent can't swap items with player in regular battles
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL
@@ -9081,7 +12633,11 @@ static void Cmd_tryswapitems(void) // trick
| BATTLE_TYPE_EREADER_TRAINER
| BATTLE_TYPE_FRONTIER
| BATTLE_TYPE_SECRET_BASE
- | BATTLE_TYPE_RECORDED_LINK))))
+ | BATTLE_TYPE_RECORDED_LINK
+ #if B_TRAINERS_KNOCK_OFF_ITEMS
+ | BATTLE_TYPE_TRAINER
+ #endif
+ ))))
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
@@ -9090,7 +12646,7 @@ static void Cmd_tryswapitems(void) // trick
u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
u8 sideTarget = GetBattlerSide(gBattlerTarget);
- // you can't swap items if they were knocked off in regular battles
+ // You can't swap items if they were knocked off in regular battles
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK
| BATTLE_TYPE_EREADER_TRAINER
| BATTLE_TYPE_FRONTIER
@@ -9104,15 +12660,15 @@ static void Cmd_tryswapitems(void) // trick
// can't swap if two pokemon don't have an item
// or if either of them is an enigma berry or a mail
else if ((gBattleMons[gBattlerAttacker].item == ITEM_NONE && gBattleMons[gBattlerTarget].item == ITEM_NONE)
- || gBattleMons[gBattlerAttacker].item == ITEM_ENIGMA_BERRY
- || gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY
- || IS_ITEM_MAIL(gBattleMons[gBattlerAttacker].item)
- || IS_ITEM_MAIL(gBattleMons[gBattlerTarget].item))
+ || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item)
+ || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerTarget].item)
+ || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerTarget].item)
+ || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item))
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
// check if ability prevents swapping
- else if (gBattleMons[gBattlerTarget].ability == ABILITY_STICKY_HOLD)
+ else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD)
{
gBattlescriptCurrInstr = BattleScript_StickyHoldActivates;
gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
@@ -9129,6 +12685,9 @@ static void Cmd_tryswapitems(void) // trick
gBattleMons[gBattlerAttacker].item = ITEM_NONE;
gBattleMons[gBattlerTarget].item = oldItemAtk;
+
+ RecordItemEffectBattle(gBattlerAttacker, 0);
+ RecordItemEffectBattle(gBattlerTarget, ItemId_GetHoldEffect(oldItemAtk));
gActiveBattler = gBattlerAttacker;
BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(*newItemAtk), newItemAtk);
@@ -9138,39 +12697,61 @@ static void Cmd_tryswapitems(void) // trick
BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item);
MarkBattlerForControllerExec(gBattlerTarget);
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerTarget]) + 0) = 0;
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerTarget]) + 1) = 0;
-
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerAttacker]) + 0) = 0;
- *(u8*)((u8*)(&gBattleStruct->choicedMove[gBattlerAttacker]) + 1) = 0;
+ gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE;
+ gBattleStruct->choicedMove[gBattlerAttacker] = MOVE_NONE;
gBattlescriptCurrInstr += 5;
PREPARE_ITEM_BUFFER(gBattleTextBuff1, *newItemAtk)
PREPARE_ITEM_BUFFER(gBattleTextBuff2, oldItemAtk)
+
+ if (!(sideAttacker == sideTarget && IsPartnerMonFromSameTrainer(gBattlerAttacker)))
+ {
+ // if targeting your own side and you aren't in a multi battle, don't save items as stolen
+ if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ TrySaveExchangedItem(gBattlerAttacker, oldItemAtk);
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ TrySaveExchangedItem(gBattlerTarget, *newItemAtk);
+ }
if (oldItemAtk != ITEM_NONE && *newItemAtk != ITEM_NONE)
+ {
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_BOTH; // attacker's item -> <- target's item
+ }
else if (oldItemAtk == ITEM_NONE && *newItemAtk != ITEM_NONE)
+ {
+ if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNBURDEN && gBattleResources->flags->flags[gBattlerAttacker] & RESOURCE_FLAG_UNBURDEN)
+ gBattleResources->flags->flags[gBattlerAttacker] &= ~RESOURCE_FLAG_UNBURDEN;
+
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_TAKEN; // nothing -> <- target's item
+ }
else
+ {
+ CheckSetUnburden(gBattlerAttacker);
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_GIVEN; // attacker's item -> <- nothing
+ }
}
}
}
-static void Cmd_trycopyability(void) // role play
+// Role Play
+static void Cmd_trycopyability(void)
{
- if (gBattleMons[gBattlerTarget].ability != ABILITY_NONE
- && gBattleMons[gBattlerTarget].ability != ABILITY_WONDER_GUARD)
+ u16 defAbility = gBattleMons[gBattlerTarget].ability;
+
+ if (gBattleMons[gBattlerAttacker].ability == defAbility
+ || defAbility == ABILITY_NONE
+ || IsRolePlayBannedAbilityAtk(gBattleMons[gBattlerAttacker].ability)
+ || IsRolePlayBannedAbility(defAbility))
{
- gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability;
- gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
- gBattlescriptCurrInstr += 5;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerAttacker].ability;
+ gBattleMons[gBattlerAttacker].ability = defAbility;
+ gLastUsedAbility = defAbility;
+ gBattlescriptCurrInstr += 5;
}
}
@@ -9182,7 +12763,7 @@ static void Cmd_trywish(void)
if (gWishFutureKnock.wishCounter[gBattlerAttacker] == 0)
{
gWishFutureKnock.wishCounter[gBattlerAttacker] = 2;
- gWishFutureKnock.wishMonId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker];
+ gWishFutureKnock.wishPartyId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker];
gBattlescriptCurrInstr += 6;
}
else
@@ -9191,13 +12772,17 @@ static void Cmd_trywish(void)
}
break;
case 1: // heal effect
- PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerTarget, gWishFutureKnock.wishMonId[gBattlerTarget])
-
- gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerTarget, gWishFutureKnock.wishPartyId[gBattlerTarget])
+ #if B_WISH_HP_SOURCE >= GEN_5
+ if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
+ gBattleMoveDamage = max(1, GetMonData(&gPlayerParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2);
+ else
+ gBattleMoveDamage = max(1, GetMonData(&gEnemyParty[gWishFutureKnock.wishPartyId[gBattlerTarget]], MON_DATA_MAX_HP) / 2);
+ #else
+ gBattleMoveDamage = max(1, gBattleMons[gBattlerTarget].maxHP / 2);
+ #endif
+
gBattleMoveDamage *= -1;
-
if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
@@ -9207,30 +12792,35 @@ static void Cmd_trywish(void)
}
}
-static void Cmd_trysetroots(void) // ingrain
+static void Cmd_settoxicspikes(void)
{
- if (gStatuses3[gBattlerAttacker] & STATUS3_ROOTED)
+ u8 targetSide = GetBattlerSide(gBattlerTarget);
+ if (gSideTimers[targetSide].toxicSpikesAmount >= 2)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- gStatuses3[gBattlerAttacker] |= STATUS3_ROOTED;
+ gSideTimers[targetSide].toxicSpikesAmount++;
+ gSideStatuses[targetSide] |= SIDE_STATUS_TOXIC_SPIKES;
gBattlescriptCurrInstr += 5;
}
}
-static void Cmd_doubledamagedealtifdamaged(void)
+static void Cmd_setgastroacid(void)
{
- if ((gProtectStructs[gBattlerAttacker].physicalDmg
- && gProtectStructs[gBattlerAttacker].physicalBattlerId == gBattlerTarget)
- || (gProtectStructs[gBattlerAttacker].specialDmg
- && gProtectStructs[gBattlerAttacker].specialBattlerId == gBattlerTarget))
+ if (IsGastroAcidBannedAbility(gBattleMons[gBattlerTarget].ability))
{
- gBattleScripting.dmgMultiplier = 2;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
+ else
+ {
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_NEUTRALIZING_GAS)
+ gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE;
- gBattlescriptCurrInstr++;
+ gStatuses3[gBattlerTarget] |= STATUS3_GASTRO_ACID;
+ gBattlescriptCurrInstr += 5;
+ }
}
static void Cmd_setyawn(void)
@@ -9240,6 +12830,18 @@ static void Cmd_setyawn(void)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
+ else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN))
+ {
+ // When Yawn is used while Electric Terrain is set and drowsiness is set from Yawn being used against target in the previous turn:
+ // "But it failed" will display first.
+ gBattlescriptCurrInstr = BattleScript_ElectricTerrainPrevents;
+ }
+ else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_MISTY_TERRAIN))
+ {
+ // When Yawn is used while Misty Terrain is set and drowsiness is set from Yawn being used against target in the previous turn:
+ // "But it failed" will display first.
+ gBattlescriptCurrInstr = BattleScript_MistyTerrainPrevents;
+ }
else
{
gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2);
@@ -9260,35 +12862,63 @@ static void Cmd_setdamagetohealthdifference(void)
}
}
-static void Cmd_scaledamagebyhealthratio(void)
+static void HandleRoomMove(u32 statusFlag, u8 *timer, u8 stringId)
{
- if (gDynamicBasePower == 0)
+ if (gFieldStatuses & statusFlag)
{
- u8 power = gBattleMoves[gCurrentMove].power;
- gDynamicBasePower = gBattleMons[gBattlerAttacker].hp * power / gBattleMons[gBattlerAttacker].maxHP;
- if (gDynamicBasePower == 0)
- gDynamicBasePower = 1;
+ gFieldStatuses &= ~statusFlag;
+ *timer = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = stringId + 1;
+ }
+ else
+ {
+ gFieldStatuses |= statusFlag;
+ *timer = 5;
+ gBattleCommunication[MULTISTRING_CHOOSER] = stringId;
+ }
+}
+
+static void Cmd_setroom(void)
+{
+ switch (gBattleMoves[gCurrentMove].effect)
+ {
+ case EFFECT_TRICK_ROOM:
+ HandleRoomMove(STATUS_FIELD_TRICK_ROOM, &gFieldTimers.trickRoomTimer, 0);
+ break;
+ case EFFECT_WONDER_ROOM:
+ HandleRoomMove(STATUS_FIELD_WONDER_ROOM, &gFieldTimers.wonderRoomTimer, 2);
+ break;
+ case EFFECT_MAGIC_ROOM:
+ HandleRoomMove(STATUS_FIELD_MAGIC_ROOM, &gFieldTimers.magicRoomTimer, 4);
+ break;
+ default:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 6;
+ break;
}
gBattlescriptCurrInstr++;
}
-static void Cmd_tryswapabilities(void) // skill swap
+// Skill Swap
+static void Cmd_tryswapabilities(void)
{
- if ((gBattleMons[gBattlerAttacker].ability == ABILITY_NONE
- && gBattleMons[gBattlerTarget].ability == ABILITY_NONE)
- || gBattleMons[gBattlerAttacker].ability == ABILITY_WONDER_GUARD
- || gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD
- || gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- {
- gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
- }
+ if (IsSkillSwapBannedAbility(gBattleMons[gBattlerAttacker].ability)
+ || IsSkillSwapBannedAbility(gBattleMons[gBattlerTarget].ability))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ return;
+ }
+
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
else
{
- u8 abilityAtk = gBattleMons[gBattlerAttacker].ability;
+ u16 abilityAtk = gBattleMons[gBattlerAttacker].ability;
gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability;
gBattleMons[gBattlerTarget].ability = abilityAtk;
- gBattlescriptCurrInstr += 5;
+ gBattlescriptCurrInstr += 5;
}
}
@@ -9329,47 +12959,51 @@ static void Cmd_tryimprison(void)
}
}
}
- if (battlerId == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes
+ if (battlerId == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes.
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
-static void Cmd_trysetgrudge(void)
+static void Cmd_setstealthrock(void)
{
- if (gStatuses3[gBattlerAttacker] & STATUS3_GRUDGE)
+ u8 targetSide = GetBattlerSide(gBattlerTarget);
+ if (gSideStatuses[targetSide] & SIDE_STATUS_STEALTH_ROCK)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- gStatuses3[gBattlerAttacker] |= STATUS3_GRUDGE;
+ gSideStatuses[targetSide] |= SIDE_STATUS_STEALTH_ROCK;
+ gSideTimers[targetSide].stealthRockAmount = 1;
gBattlescriptCurrInstr += 5;
}
}
-static void Cmd_weightdamagecalculation(void)
+static void Cmd_setuserstatus3(void)
{
- s32 i;
- for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2)
+ u32 flags = T1_READ_32(gBattlescriptCurrInstr + 1);
+
+ if (gStatuses3[gBattlerAttacker] & flags)
{
- if (sWeightToDamageTable[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), 1))
- break;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5);
}
-
- if (sWeightToDamageTable[i] != 0xFFFF)
- gDynamicBasePower = sWeightToDamageTable[i + 1];
else
- gDynamicBasePower = 120;
-
- gBattlescriptCurrInstr++;
+ {
+ gStatuses3[gBattlerAttacker] |= flags;
+ if (flags & STATUS3_MAGNET_RISE)
+ gDisableStructs[gBattlerAttacker].magnetRiseTimer = 5;
+ if (flags & STATUS3_LASER_FOCUS)
+ gDisableStructs[gBattlerAttacker].laserFocusTimer = 2;
+ gBattlescriptCurrInstr += 9;
+ }
}
static void Cmd_assistattackselect(void)
{
s32 chooseableMovesNo = 0;
- struct Pokemon* party;
+ struct Pokemon *party;
s32 monId, moveId;
- u16* validMoves = gBattleStruct->assistPossibleMoves;
+ u16 *validMoves = gBattleStruct->assistPossibleMoves;
if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER)
party = gEnemyParty;
@@ -9390,14 +13024,7 @@ static void Cmd_assistattackselect(void)
s32 i = 0;
u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId);
- if (IsInvalidForSleepTalkOrAssist(move))
- continue;
-
- for (; sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END && move != sMovesForbiddenToCopy[i]; i++);
-
- if (sMovesForbiddenToCopy[i] != ASSIST_FORBIDDEN_END)
- continue;
- if (move == MOVE_NONE)
+ if (sForbiddenMoves[move] & FORBIDDEN_ASSIST)
continue;
validMoves[chooseableMovesNo] = move;
@@ -9420,28 +13047,29 @@ static void Cmd_assistattackselect(void)
static void Cmd_trysetmagiccoat(void)
{
gBattlerTarget = gBattlerAttacker;
- gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE;
if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- gProtectStructs[gBattlerAttacker].bounceMove = 1;
+ gProtectStructs[gBattlerAttacker].bounceMove = TRUE;
gBattlescriptCurrInstr += 5;
}
}
-static void Cmd_trysetsnatch(void) // snatch
+// Snatch
+static void Cmd_trysetsnatch(void)
{
- gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE;
if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
- gProtectStructs[gBattlerAttacker].stealMove = 1;
+ gProtectStructs[gBattlerAttacker].stealMove = TRUE;
gBattlescriptCurrInstr += 5;
}
}
@@ -9472,20 +13100,39 @@ static void Cmd_trygetintimidatetarget(void)
static void Cmd_switchoutabilities(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
-
- switch (gBattleMons[gActiveBattler].ability)
+ if (gBattleMons[gActiveBattler].ability == ABILITY_NEUTRALIZING_GAS)
{
- case ABILITY_NATURAL_CURE:
- gBattleMons[gActiveBattler].status1 = 0;
- BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE,
- gBitTable[*(gBattleStruct->battlerPartyIndexes + gActiveBattler)],
- sizeof(gBattleMons[gActiveBattler].status1),
- &gBattleMons[gActiveBattler].status1);
- MarkBattlerForControllerExec(gActiveBattler);
- break;
+ gBattleMons[gActiveBattler].ability = ABILITY_NONE;
+ BattleScriptPush(gBattlescriptCurrInstr);
+ gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits;
}
+ else
+ {
+ switch (GetBattlerAbility(gActiveBattler))
+ {
+ case ABILITY_NATURAL_CURE:
+ gBattleMons[gActiveBattler].status1 = 0;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE,
+ gBitTable[*(gBattleStruct->battlerPartyIndexes + gActiveBattler)],
+ sizeof(gBattleMons[gActiveBattler].status1),
+ &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case ABILITY_REGENERATOR:
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 3;
+ gBattleMoveDamage += gBattleMons[gActiveBattler].hp;
+ if (gBattleMoveDamage > gBattleMons[gActiveBattler].maxHP)
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE,
+ gBitTable[*(gBattleStruct->battlerPartyIndexes + gActiveBattler)],
+ sizeof(gBattleMoveDamage),
+ &gBattleMoveDamage);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ }
- gBattlescriptCurrInstr += 2;
+ gBattlescriptCurrInstr += 2;
+ }
}
static void Cmd_jumpifhasnohp(void)
@@ -9500,44 +13147,120 @@ static void Cmd_jumpifhasnohp(void)
static void Cmd_getsecretpowereffect(void)
{
- switch (gBattleTerrain)
- {
- case BATTLE_TERRAIN_GRASS:
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_POISON;
- break;
- case BATTLE_TERRAIN_LONG_GRASS:
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_SLEEP;
- break;
- case BATTLE_TERRAIN_SAND:
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_ACC_MINUS_1;
- break;
- case BATTLE_TERRAIN_UNDERWATER:
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_DEF_MINUS_1;
- break;
- case BATTLE_TERRAIN_WATER:
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_ATK_MINUS_1;
- break;
- case BATTLE_TERRAIN_POND:
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_SPD_MINUS_1;
- break;
- case BATTLE_TERRAIN_MOUNTAIN:
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_CONFUSION;
- break;
- case BATTLE_TERRAIN_CAVE:
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_FLINCH;
- break;
- default:
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_PARALYSIS;
- break;
- }
+ gBattleScripting.moveEffect = GetSecretPowerMoveEffect();
gBattlescriptCurrInstr++;
}
+u16 GetSecretPowerMoveEffect(void)
+{
+ u16 moveEffect;
+ u32 fieldTerrain = gFieldStatuses & STATUS_FIELD_TERRAIN_ANY;
+ if (fieldTerrain)
+ {
+ switch (fieldTerrain)
+ {
+ case STATUS_FIELD_MISTY_TERRAIN:
+ moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1;
+ break;
+ case STATUS_FIELD_GRASSY_TERRAIN:
+ moveEffect = MOVE_EFFECT_SLEEP;
+ break;
+ case STATUS_FIELD_ELECTRIC_TERRAIN:
+ moveEffect = MOVE_EFFECT_PARALYSIS;
+ break;
+ case STATUS_FIELD_PSYCHIC_TERRAIN:
+ moveEffect = MOVE_EFFECT_SPD_MINUS_1;
+ break;
+ default:
+ moveEffect = MOVE_EFFECT_PARALYSIS;
+ break;
+ }
+ }
+ else
+ {
+ switch (gBattleTerrain)
+ {
+ case BATTLE_TERRAIN_GRASS:
+ #if B_SECRET_POWER_EFFECT >= GEN_4
+ moveEffect = MOVE_EFFECT_SLEEP;
+ #else
+ moveEffect = MOVE_EFFECT_POISON;
+ #endif
+ break;
+ case BATTLE_TERRAIN_LONG_GRASS:
+ moveEffect = MOVE_EFFECT_SLEEP;
+ break;
+ case BATTLE_TERRAIN_SAND:
+ moveEffect = MOVE_EFFECT_ACC_MINUS_1;
+ break;
+ case BATTLE_TERRAIN_UNDERWATER:
+ #if B_SECRET_POWER_EFFECT >= GEN_6
+ moveEffect = MOVE_EFFECT_ATK_MINUS_1;
+ #else
+ moveEffect = MOVE_EFFECT_DEF_MINUS_1;
+ #endif
+ break;
+ case BATTLE_TERRAIN_WATER:
+ moveEffect = MOVE_EFFECT_ATK_MINUS_1;
+ break;
+ case BATTLE_TERRAIN_POND:
+ #if B_SECRET_POWER_EFFECT >= GEN_4
+ moveEffect = MOVE_EFFECT_ATK_MINUS_1;
+ #else
+ moveEffect = MOVE_EFFECT_SPD_MINUS_1;
+ #endif
+ break;
+ case BATTLE_TERRAIN_MOUNTAIN:
+ #if B_SECRET_POWER_EFFECT >= GEN_5
+ moveEffect = MOVE_EFFECT_ACC_MINUS_1;
+ #elif B_SECRET_POWER_EFFECT == GEN_4
+ moveEffect = MOVE_EFFECT_FLINCH;
+ #else
+ moveEffect = MOVE_EFFECT_CONFUSION;
+ #endif
+ break;
+ case BATTLE_TERRAIN_CAVE:
+ case BATTLE_TERRAIN_BURIAL_GROUND:
+ case BATTLE_TERRAIN_SPACE:
+ moveEffect = MOVE_EFFECT_FLINCH;
+ break;
+ case BATTLE_TERRAIN_SOARING:
+ case BATTLE_TERRAIN_SKY_PILLAR:
+ case BATTLE_TERRAIN_MARSH:
+ case BATTLE_TERRAIN_SWAMP:
+ moveEffect = MOVE_EFFECT_SPD_MINUS_1;
+ break;
+ case BATTLE_TERRAIN_PUDDLE:
+ #if B_SECRET_POWER_EFFECT >= GEN_5
+ moveEffect = MOVE_EFFECT_SPD_MINUS_1;
+ #else
+ moveEffect = MOVE_EFFECT_ACC_MINUS_1;
+ #endif
+ break;
+ case BATTLE_TERRAIN_SNOW:
+ case BATTLE_TERRAIN_ICE:
+ moveEffect = MOVE_EFFECT_FREEZE;
+ break;
+ case BATTLE_TERRAIN_VOLCANO:
+ moveEffect = MOVE_EFFECT_BURN;
+ break;
+ case BATTLE_TERRAIN_ULTRA_SPACE:
+ moveEffect = MOVE_EFFECT_DEF_MINUS_1;
+ break;
+ default:
+ moveEffect = MOVE_EFFECT_PARALYSIS;
+ break;
+ }
+ }
+ return moveEffect;
+}
+
static void Cmd_pickup(void)
{
s32 i;
u16 species, heldItem;
- u8 ability;
+ u16 ability;
+ u8 lvlDivBy10;
if (InBattlePike())
{
@@ -9564,6 +13287,19 @@ static void Cmd_pickup(void)
heldItem = GetBattlePyramidPickupItemId();
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem);
}
+ #if (defined ITEM_HONEY)
+ else if (ability == ABILITY_HONEY_GATHER
+ && species != 0
+ && species != SPECIES_EGG
+ && heldItem == ITEM_NONE)
+ {
+ if ((lvlDivBy10 + 1 ) * 5 > Random() % 100)
+ {
+ heldItem = ITEM_HONEY;
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem);
+ }
+ }
+ #endif
}
}
else
@@ -9572,6 +13308,9 @@ static void Cmd_pickup(void)
{
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)-1) / 10; //Moving this here makes it easier to add in abilities like Honey Gather
+ if (lvlDivBy10 > 9)
+ lvlDivBy10 = 9;
if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM))
ability = gBaseStats[species].abilities[1];
@@ -9586,9 +13325,6 @@ static void Cmd_pickup(void)
{
s32 j;
s32 rand = Random() % 100;
- u8 lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) - 1) / 10;
- if (lvlDivBy10 > 9)
- lvlDivBy10 = 9;
for (j = 0; j < (int)ARRAY_COUNT(sPickupProbabilities); j++)
{
@@ -9604,6 +13340,19 @@ static void Cmd_pickup(void)
}
}
}
+ #if (defined ITEM_HONEY)
+ else if (ability == ABILITY_HONEY_GATHER
+ && species != 0
+ && species != SPECIES_EGG
+ && heldItem == ITEM_NONE)
+ {
+ if ((lvlDivBy10 + 1 ) * 5 > Random() % 100)
+ {
+ heldItem = ITEM_HONEY;
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem);
+ }
+ }
+ #endif
}
}
@@ -9628,7 +13377,7 @@ static void Cmd_trycastformdatachange(void)
u8 form;
gBattlescriptCurrInstr++;
- form = CastformDataTypeChange(gBattleScripting.battler);
+ form = TryWeatherFormChange(gBattleScripting.battler);
if (form)
{
BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
@@ -9636,27 +13385,48 @@ static void Cmd_trycastformdatachange(void)
}
}
-static void Cmd_settypebasedhalvers(void) // water and mud sport
+// Water and Mud Sport
+static void Cmd_settypebasedhalvers(void)
{
bool8 worked = FALSE;
if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT)
{
- if (!(gStatuses3[gBattlerAttacker] & STATUS3_MUDSPORT))
- {
- gStatuses3[gBattlerAttacker] |= STATUS3_MUDSPORT;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC;
- worked = TRUE;
- }
+ #if B_SPORT_TURNS >= GEN_6
+ if (!(gFieldStatuses & STATUS_FIELD_MUDSPORT))
+ {
+ gFieldStatuses |= STATUS_FIELD_MUDSPORT;
+ gFieldTimers.mudSportTimer = 5;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC;
+ worked = TRUE;
+ }
+ #else
+ if (!(gStatuses4[gBattlerAttacker] & STATUS4_MUD_SPORT))
+ {
+ gStatuses4[gBattlerAttacker] |= STATUS4_MUD_SPORT;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC;
+ worked = TRUE;
+ }
+ #endif
}
- else // water sport
+ else // Water Sport
{
- if (!(gStatuses3[gBattlerAttacker] & STATUS3_WATERSPORT))
- {
- gStatuses3[gBattlerAttacker] |= STATUS3_WATERSPORT;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE;
- worked = TRUE;
- }
+ #if B_SPORT_TURNS >= GEN_6
+ if (!(gFieldStatuses & STATUS_FIELD_WATERSPORT))
+ {
+ gFieldStatuses |= STATUS_FIELD_WATERSPORT;
+ gFieldTimers.waterSportTimer = 5;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE;
+ worked = TRUE;
+ }
+ #else
+ if (!(gStatuses4[gBattlerAttacker] & STATUS4_WATER_SPORT))
+ {
+ gStatuses4[gBattlerAttacker] |= v;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE;
+ worked = TRUE;
+ }
+ #endif
}
if (worked)
@@ -9665,25 +13435,38 @@ static void Cmd_settypebasedhalvers(void) // water and mud sport
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
-static void Cmd_setweatherballtype(void)
+bool32 DoesSubstituteBlockMove(u8 battlerAtk, u8 battlerDef, u32 move)
{
- if (WEATHER_HAS_EFFECT)
- {
- if (gBattleWeather & B_WEATHER_ANY)
- gBattleScripting.dmgMultiplier = 2;
- if (gBattleWeather & B_WEATHER_RAIN)
- *(&gBattleStruct->dynamicMoveType) = TYPE_WATER | F_DYNAMIC_TYPE_2;
- else if (gBattleWeather & B_WEATHER_SANDSTORM)
- *(&gBattleStruct->dynamicMoveType) = TYPE_ROCK | F_DYNAMIC_TYPE_2;
- else if (gBattleWeather & B_WEATHER_SUN)
- *(&gBattleStruct->dynamicMoveType) = TYPE_FIRE | F_DYNAMIC_TYPE_2;
- else if (gBattleWeather & B_WEATHER_HAIL)
- *(&gBattleStruct->dynamicMoveType) = TYPE_ICE | F_DYNAMIC_TYPE_2;
- else
- *(&gBattleStruct->dynamicMoveType) = TYPE_NORMAL | F_DYNAMIC_TYPE_2;
- }
+ if (!(gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE))
+ return FALSE;
+ else if (gBattleMoves[move].flags & FLAG_SOUND && B_SOUND_SUBSTITUTE >= GEN_6)
+ return FALSE;
+ else if (GetBattlerAbility(battlerAtk) == ABILITY_INFILTRATOR)
+ return FALSE;
+ else if (gBattleMoves[move].flags & FLAG_HIT_IN_SUBSTITUTE)
+ return FALSE;
+ else
+ return TRUE;
+}
- gBattlescriptCurrInstr++;
+bool32 DoesDisguiseBlockMove(u8 battlerAtk, u8 battlerDef, u32 move)
+{
+ if (GetBattlerAbility(battlerDef) != ABILITY_DISGUISE
+ || gBattleMons[battlerDef].species != SPECIES_MIMIKYU
+ || gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED
+ || gBattleMoves[move].power == 0
+ || gHitMarker & HITMARKER_IGNORE_DISGUISE)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void Cmd_jumpifsubstituteblocks(void)
+{
+ if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
}
static void Cmd_tryrecycleitem(void)
@@ -9691,7 +13474,7 @@ static void Cmd_tryrecycleitem(void)
u16 *usedHeldItem;
gActiveBattler = gBattlerAttacker;
- usedHeldItem = &gBattleStruct->usedHeldItems[gActiveBattler];
+ usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gActiveBattler]][GetBattlerSide(gActiveBattler)];
if (*usedHeldItem != ITEM_NONE && gBattleMons[gActiveBattler].item == ITEM_NONE)
{
gLastUsedItem = *usedHeldItem;
@@ -9709,12 +13492,39 @@ static void Cmd_tryrecycleitem(void)
}
}
+bool32 CanCamouflage(u8 battlerId)
+{
+ if (IS_BATTLER_OF_TYPE(battlerId, sTerrainToType[gBattleTerrain]))
+ return FALSE;
+ return TRUE;
+}
+
static void Cmd_settypetoterrain(void)
{
- if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]))
+ u8 terrainType;
+ switch(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
{
- SET_BATTLER_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]);
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain]);
+ case STATUS_FIELD_ELECTRIC_TERRAIN:
+ terrainType = TYPE_ELECTRIC;
+ break;
+ case STATUS_FIELD_GRASSY_TERRAIN:
+ terrainType = TYPE_GRASS;
+ break;
+ case STATUS_FIELD_MISTY_TERRAIN:
+ terrainType = TYPE_FAIRY;
+ break;
+ case STATUS_FIELD_PSYCHIC_TERRAIN:
+ terrainType = TYPE_PSYCHIC;
+ break;
+ default:
+ terrainType = sTerrainToType[gBattleTerrain];
+ break;
+ }
+
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, terrainType))
+ {
+ SET_BATTLER_TYPE(gBattlerAttacker, terrainType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, terrainType);
gBattlescriptCurrInstr += 5;
}
@@ -9738,7 +13548,7 @@ static void Cmd_pursuitdoubles(void)
gCurrentMove = MOVE_PURSUIT;
gBattlescriptCurrInstr += 5;
gBattleScripting.animTurn = 1;
- gBattleScripting.pursuitDoublesAttacker = gBattlerAttacker;
+ gBattleScripting.savedBattler = gBattlerAttacker;
gBattlerAttacker = gActiveBattler;
}
else
@@ -9760,16 +13570,36 @@ static void Cmd_snatchsetbattlers(void)
gBattlescriptCurrInstr++;
}
-static void Cmd_removelightscreenreflect(void) // brick break
+// Brick Break
+static void Cmd_removelightscreenreflect(void)
{
- u8 opposingSide = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
-
- if (gSideTimers[opposingSide].reflectTimer || gSideTimers[opposingSide].lightscreenTimer)
+ u8 side;
+ bool32 failed;
+
+ #if B_BRICK_BREAK >= GEN_4
+ // From Gen 4 onwards, Brick Break can remove screens on the user's side if used on an ally
+ side = GetBattlerSide(gBattlerTarget);
+ #else
+ side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
+ #endif
+
+ #if B_BRICK_BREAK >= GEN_5
+ failed = (gMoveResultFlags & MOVE_RESULT_NO_EFFECT);
+ #else
+ failed = FALSE;
+ #endif
+
+ if (!failed
+ && (gSideTimers[side].reflectTimer
+ || gSideTimers[side].lightscreenTimer
+ || gSideTimers[side].auroraVeilTimer))
{
- gSideStatuses[opposingSide] &= ~SIDE_STATUS_REFLECT;
- gSideStatuses[opposingSide] &= ~SIDE_STATUS_LIGHTSCREEN;
- gSideTimers[opposingSide].reflectTimer = 0;
- gSideTimers[opposingSide].lightscreenTimer = 0;
+ gSideStatuses[side] &= ~SIDE_STATUS_REFLECT;
+ gSideStatuses[side] &= ~SIDE_STATUS_LIGHTSCREEN;
+ gSideStatuses[side] &= ~SIDE_STATUS_AURORA_VEIL;
+ gSideTimers[side].reflectTimer = 0;
+ gSideTimers[side].lightscreenTimer = 0;
+ gSideTimers[side].auroraVeilTimer = 0;
gBattleScripting.animTurn = 1;
gBattleScripting.animTargetsHit = 1;
}
@@ -9782,15 +13612,24 @@ static void Cmd_removelightscreenreflect(void) // brick break
gBattlescriptCurrInstr++;
}
+u8 GetCatchingBattler(void)
+{
+ if (IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)))
+ return GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ else
+ return GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+}
+
static void Cmd_handleballthrow(void)
{
- u8 ballMultiplier = 0;
+ u8 ballMultiplier = 10;
+ s8 ballAddition = 0;
if (gBattleControllerExecFlags)
return;
gActiveBattler = gBattlerAttacker;
- gBattlerTarget = gBattlerAttacker ^ BIT_SIDE;
+ gBattlerTarget = GetCatchingBattler();
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
@@ -9806,61 +13645,192 @@ static void Cmd_handleballthrow(void)
}
else
{
- u32 odds;
+ u32 odds, i;
u8 catchRate;
-
- if (gLastUsedItem == ITEM_SAFARI_BALL)
+
+ gLastThrownBall = gLastUsedItem;
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
catchRate = gBattleStruct->safariCatchFactor * 1275 / 100;
else
catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate;
- if (gLastUsedItem > ITEM_SAFARI_BALL)
+ if (gBaseStats[gBattleMons[gBattlerTarget].species].flags & FLAG_ULTRA_BEAST)
+ {
+ if (gLastUsedItem == ITEM_BEAST_BALL)
+ ballMultiplier = 50;
+ else
+ ballMultiplier = 1;
+ }
+ else
{
switch (gLastUsedItem)
{
+ case ITEM_ULTRA_BALL:
+ ballMultiplier = 20;
+ case ITEM_GREAT_BALL:
+ case ITEM_SAFARI_BALL:
+ case ITEM_SPORT_BALL:
+ ballMultiplier = 15;
case ITEM_NET_BALL:
if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_BUG))
- ballMultiplier = 30;
- else
- ballMultiplier = 10;
+ #if B_NET_BALL_MODIFIER >= GEN_7
+ ballMultiplier = 50;
+ #else
+ ballMultiplier = 30;
+ #endif
break;
case ITEM_DIVE_BALL:
- if (GetCurrentMapType() == MAP_TYPE_UNDERWATER)
- ballMultiplier = 35;
- else
- ballMultiplier = 10;
+ #if B_DIVE_BALL_MODIFIER >= GEN_4
+ if (GetCurrentMapType() == MAP_TYPE_UNDERWATER || gIsFishingEncounter || gIsSurfingEncounter)
+ ballMultiplier = 35;
+ #else
+ if (GetCurrentMapType() == MAP_TYPE_UNDERWATER)
+ ballMultiplier = 35;
+ #endif
break;
case ITEM_NEST_BALL:
- if (gBattleMons[gBattlerTarget].level < 40)
- {
- ballMultiplier = 40 - gBattleMons[gBattlerTarget].level;
- if (ballMultiplier <= 9)
- ballMultiplier = 10;
- }
- else
- {
- ballMultiplier = 10;
- }
+ #if B_NEST_BALL_MODIFIER >= GEN_6
+ //((41 - Pokémon's level) ÷ 10)× if Pokémon's level is between 1 and 29, 1× otherwise.
+ if (gBattleMons[gBattlerTarget].level < 30)
+ ballMultiplier = 41 - gBattleMons[gBattlerTarget].level;
+ #elif B_NEST_BALL_MODIFIER == GEN_5
+ //((41 - Pokémon's level) ÷ 10)×, minimum 1×
+ if (gBattleMons[gBattlerTarget].level < 31)
+ ballMultiplier = 41 - gBattleMons[gBattlerTarget].level;
+ #else
+ //((40 - Pokémon's level) ÷ 10)×, minimum 1×
+ if (gBattleMons[gBattlerTarget].level < 40)
+ {
+ ballMultiplier = 40 - gBattleMons[gBattlerTarget].level;
+ if (ballMultiplier <= 9)
+ ballMultiplier = 10;
+ }
+ #endif
break;
case ITEM_REPEAT_BALL:
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), FLAG_GET_CAUGHT))
- ballMultiplier = 30;
- else
- ballMultiplier = 10;
+ #if B_REPEAT_BALL_MODIFIER >= GEN_7
+ ballMultiplier = 35;
+ #else
+ ballMultiplier = 30;
+ #endif
break;
case ITEM_TIMER_BALL:
- ballMultiplier = gBattleResults.battleTurnCounter + 10;
+ #if B_TIMER_BALL_MODIFIER >= GEN_5
+ ballMultiplier = (gBattleResults.battleTurnCounter * 3) + 10;
+ #else
+ ballMultiplier = gBattleResults.battleTurnCounter + 10;
+ #endif
if (ballMultiplier > 40)
ballMultiplier = 40;
break;
- case ITEM_LUXURY_BALL:
- case ITEM_PREMIER_BALL:
- ballMultiplier = 10;
+ case ITEM_DUSK_BALL:
+ RtcCalcLocalTime();
+ if ((gLocalTime.hours >= 20 && gLocalTime.hours <= 3) || gMapHeader.cave || gMapHeader.mapType == MAP_TYPE_UNDERGROUND)
+ #if B_DUSK_BALL_MODIFIER >= GEN_7
+ ballMultiplier = 30;
+ #else
+ ballMultiplier = 35;
+ #endif
+ break;
+ case ITEM_QUICK_BALL:
+ if (gBattleResults.battleTurnCounter == 0)
+ #if B_QUICK_BALL_MODIFIER >= GEN_5
+ ballMultiplier = 50;
+ #else
+ ballMultiplier = 40;
+ #endif
+ break;
+ case ITEM_LEVEL_BALL:
+ if (gBattleMons[gBattlerAttacker].level >= 4 * gBattleMons[gBattlerTarget].level)
+ ballMultiplier = 80;
+ else if (gBattleMons[gBattlerAttacker].level > 2 * gBattleMons[gBattlerTarget].level)
+ ballMultiplier = 40;
+ else if (gBattleMons[gBattlerAttacker].level > gBattleMons[gBattlerTarget].level)
+ ballMultiplier = 20;
+ break;
+ case ITEM_LURE_BALL:
+ if (gIsFishingEncounter)
+ #if B_LURE_BALL_MODIFIER >= GEN_7
+ ballMultiplier = 50;
+ #else
+ ballMultiplier = 30;
+ #endif
+ break;
+ case ITEM_MOON_BALL:
+ for (i = 0; i < EVOS_PER_MON; i++)
+ {
+ if (gEvolutionTable[gBattleMons[gBattlerTarget].species][i].method == EVO_ITEM
+ && gEvolutionTable[gBattleMons[gBattlerTarget].species][i].param == ITEM_MOON_STONE)
+ ballMultiplier = 40;
+ }
+ break;
+ case ITEM_LOVE_BALL:
+ if (gBattleMons[gBattlerTarget].species == gBattleMons[gBattlerAttacker].species)
+ {
+ u8 gender1 = GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]);
+ u8 gender2 = GetMonGender(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]);
+
+ if (gender1 != gender2 && gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS)
+ ballMultiplier = 80;
+ }
+ break;
+ case ITEM_FAST_BALL:
+ if (gBaseStats[gBattleMons[gBattlerTarget].species].baseSpeed >= 100)
+ ballMultiplier = 40;
+ break;
+ case ITEM_HEAVY_BALL:
+ i = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), 1);
+ #if B_HEAVY_BALL_MODIFIER >= GEN_7
+ if (i < 1000)
+ ballAddition = -20;
+ else if (i < 2000)
+ ballAddition = 0;
+ else if (i < 3000)
+ ballAddition = 20;
+ else
+ ballAddition = 30;
+ #elif B_HEAVY_BALL_MODIFIER >= GEN_4
+ if (i < 2048)
+ ballAddition = -20;
+ else if (i < 3072)
+ ballAddition = 20;
+ else if (i < 4096)
+ ballAddition = 30;
+ else
+ ballAddition = 40;
+ #else
+ if (i < 1024)
+ ballAddition = -20;
+ else if (i < 2048)
+ ballAddition = 0;
+ else if (i < 3072)
+ ballAddition = 20;
+ else if (i < 4096)
+ ballAddition = 30;
+ else
+ ballAddition = 40;
+ #endif
+ break;
+ case ITEM_DREAM_BALL:
+ #if B_DREAM_BALL_MODIFIER >= GEN_8
+ if (gBattleMons[gBattlerTarget].status1 & STATUS1_SLEEP || GetBattlerAbility(gBattlerTarget) == ABILITY_COMATOSE)
+ ballMultiplier = 40;
+ #else
+ ballMultiplier = 10;
+ #endif
+ break;
+ case ITEM_BEAST_BALL:
+ ballMultiplier = 1;
break;
}
}
+
+ // catchRate is unsigned, which means that it may potentially overflow if sum is applied directly.
+ if (catchRate < 21 && ballAddition == -20)
+ catchRate = 1;
else
- ballMultiplier = sBallCatchBonuses[gLastUsedItem - ITEM_ULTRA_BALL];
+ catchRate = catchRate + ballAddition;
odds = (catchRate * ballMultiplier / 10)
* (gBattleMons[gBattlerTarget].maxHP * 3 - gBattleMons[gBattlerTarget].hp * 2)
@@ -9871,23 +13841,14 @@ static void Cmd_handleballthrow(void)
if (gBattleMons[gBattlerTarget].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON))
odds = (odds * 15) / 10;
- if (gLastUsedItem != ITEM_SAFARI_BALL)
- {
- if (gLastUsedItem == ITEM_MASTER_BALL)
- {
- gBattleResults.usedMasterBall = TRUE;
- }
- else
- {
- if (gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL] < 255)
- gBattleResults.catchAttempts[gLastUsedItem - ITEM_ULTRA_BALL]++;
- }
- }
+ if (gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL] < 255)
+ gBattleResults.catchAttempts[gLastUsedItem - FIRST_BALL]++;
if (odds > 254) // mon caught
{
BtlController_EmitBallThrowAnim(BUFFER_A, BALL_3_SHAKES_SUCCESS);
MarkBattlerForControllerExec(gActiveBattler);
+ UndoFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FALSE);
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
@@ -9895,24 +13856,53 @@ static void Cmd_handleballthrow(void)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+
+ if (gLastUsedItem == ITEM_HEAL_BALL)
+ {
+ MonRestorePP(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]);
+ HealStatusConditions(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], gBattlerPartyIndexes[gBattlerTarget], STATUS1_ANY, gBattlerTarget);
+ gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP;
+ SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_HP, &gBattleMons[gBattlerTarget].hp);
+ }
}
else // mon may be caught, calculate shakes
{
u8 shakes;
+ u8 maxShakes;
- odds = Sqrt(Sqrt(16711680 / odds));
- odds = 1048560 / odds;
+ gBattleSpritesDataPtr->animationData->isCriticalCapture = 0;
+ gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = 0;
- for (shakes = 0; shakes < BALL_3_SHAKES_SUCCESS && Random() < odds; shakes++);
+ if (CriticalCapture(odds))
+ {
+ maxShakes = BALL_1_SHAKE; // critical capture doesn't guarantee capture
+ gBattleSpritesDataPtr->animationData->isCriticalCapture = 1;
+ }
+ else
+ {
+ maxShakes = BALL_3_SHAKES_SUCCESS;
+ }
if (gLastUsedItem == ITEM_MASTER_BALL)
- shakes = BALL_3_SHAKES_SUCCESS; // why calculate the shakes before that check?
+ {
+ shakes = maxShakes;
+ }
+ else
+ {
+ odds = Sqrt(Sqrt(16711680 / odds));
+ odds = 1048560 / odds;
+ for (shakes = 0; shakes < maxShakes && Random() < odds; shakes++);
+ }
BtlController_EmitBallThrowAnim(BUFFER_A, shakes);
MarkBattlerForControllerExec(gActiveBattler);
- if (shakes == BALL_3_SHAKES_SUCCESS) // mon caught, copy of the code above
+ if (shakes == maxShakes) // mon caught, copy of the code above
{
+ if (IsCriticalCapture())
+ gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = 1;
+
+ UndoFormChange(gBattlerPartyIndexes[gBattlerTarget], GET_BATTLER_SIDE(gBattlerTarget), FALSE);
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
@@ -9920,10 +13910,25 @@ static void Cmd_handleballthrow(void)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+
+ if (gLastUsedItem == ITEM_HEAL_BALL)
+ {
+ MonRestorePP(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]);
+ HealStatusConditions(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], gBattlerPartyIndexes[gBattlerTarget], STATUS1_ANY, gBattlerTarget);
+ gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP;
+ SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_HP, &gBattleMons[gBattlerTarget].hp);
+ }
}
else // not caught
{
- gBattleCommunication[MULTISTRING_CHOOSER] = shakes;
+ if (!gHasFetchedBall)
+ gLastUsedBall = gLastUsedItem;
+
+ if (IsCriticalCapture())
+ gBattleCommunication[MULTISTRING_CHOOSER] = BALL_3_SHAKES_FAIL;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = shakes;
+
gBattlescriptCurrInstr = BattleScript_ShakeBallThrow;
}
}
@@ -9932,18 +13937,18 @@ static void Cmd_handleballthrow(void)
static void Cmd_givecaughtmon(void)
{
- if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]]) != MON_GIVEN_TO_PARTY)
+ if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]]) != MON_GIVEN_TO_PARTY)
{
if (!ShouldShowBoxWasFullMessage())
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SENT_SOMEONES_PC;
StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2);
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_NICKNAME, gStringVar2);
}
else
{
StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); // box the mon was sent to
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2);
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_NICKNAME, gStringVar2);
StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); //box the mon was going to be sent to
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOMEONES_BOX_FULL;
}
@@ -9953,17 +13958,17 @@ static void Cmd_givecaughtmon(void)
gBattleCommunication[MULTISTRING_CHOOSER]++;
}
- gBattleResults.caughtMonSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_SPECIES, NULL);
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleResults.caughtMonNick);
- gBattleResults.caughtMonBall = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_POKEBALL, NULL);
+ gBattleResults.caughtMonSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_SPECIES, NULL);
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_NICKNAME, gBattleResults.caughtMonNick);
+ gBattleResults.caughtMonBall = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_POKEBALL, NULL);
gBattlescriptCurrInstr++;
}
static void Cmd_trysetcaughtmondexflags(void)
{
- u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
- u32 personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL);
+ u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_SPECIES, NULL);
+ u32 personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_PERSONALITY, NULL);
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
{
@@ -9978,7 +13983,7 @@ static void Cmd_trysetcaughtmondexflags(void)
static void Cmd_displaydexinfo(void)
{
- u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
+ u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_SPECIES, NULL);
switch (gBattleCommunication[0])
{
@@ -9991,8 +13996,8 @@ static void Cmd_displaydexinfo(void)
{
FreeAllWindowBuffers();
gBattleCommunication[TASK_ID] = DisplayCaughtMonDexPage(SpeciesToNationalPokedexNum(species),
- gBattleMons[gBattlerTarget].otId,
- gBattleMons[gBattlerTarget].personality);
+ gBattleMons[GetCatchingBattler()].otId,
+ gBattleMons[GetCatchingBattler()].personality);
gBattleCommunication[0]++;
}
break;
@@ -10029,7 +14034,7 @@ static void Cmd_displaydexinfo(void)
void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
{
- s32 destY, destX;
+ s32 destY, destX, bgId;
u16 var = 0;
for (destY = yStart; destY <= yEnd; destY++)
@@ -10067,10 +14072,8 @@ void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags)
if (flags & WINDOW_CLEAR)
var = 0;
- if (flags & WINDOW_BG1)
- CopyToBgTilemapBufferRect_ChangePalette(1, &var, destX, destY, 1, 1, 0x11);
- else
- CopyToBgTilemapBufferRect_ChangePalette(0, &var, destX, destY, 1, 1, 0x11);
+ bgId = (flags & WINDOW_BG1) ? 1 : 0;
+ CopyToBgTilemapBufferRect_ChangePalette(bgId, &var, destX, destY, 1, 1, 0x11);
}
}
}
@@ -10100,7 +14103,7 @@ static void Cmd_trygivecaughtmonnick(void)
switch (gBattleCommunication[MULTIUSE_STATE])
{
case 0:
- HandleBattleWindow(24, 8, 29, 13, 0);
+ HandleBattleWindow(YESNOBOX_X_Y, 0);
BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO);
gBattleCommunication[MULTIUSE_STATE]++;
gBattleCommunication[CURSOR_POSITION] = 0;
@@ -10143,22 +14146,22 @@ static void Cmd_trygivecaughtmonnick(void)
case 2:
if (!gPaletteFade.active)
{
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
FreeAllWindowBuffers();
DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gBattleStruct->caughtMonNick,
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_SPECIES),
- GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]]),
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_PERSONALITY, NULL),
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES),
+ GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]),
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_PERSONALITY, NULL),
BattleMainCB2);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
case 3:
- if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active )
+ if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
{
- SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
+ SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
break;
@@ -10202,3 +14205,182 @@ static void Cmd_trainerslideout(void)
gBattlescriptCurrInstr += 2;
}
+
+static const u16 sTelekinesisBanList[] =
+{
+ SPECIES_DIGLETT,
+ SPECIES_DUGTRIO,
+// #ifdef NEW_POKEMON
+ SPECIES_DIGLETT_ALOLAN,
+ SPECIES_DUGTRIO_ALOLAN,
+ SPECIES_SANDYGAST,
+ SPECIES_PALOSSAND,
+ SPECIES_GENGAR_MEGA,
+// #endif
+};
+
+bool32 IsTelekinesisBannedSpecies(u16 species)
+{
+ u32 i;
+
+ for (i = 0; i < ARRAY_COUNT(sTelekinesisBanList); i++)
+ {
+ if (species == sTelekinesisBanList[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void Cmd_settelekinesis(void)
+{
+ if (gStatuses3[gBattlerTarget] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN)
+ || gFieldStatuses & STATUS_FIELD_GRAVITY
+ || IsTelekinesisBannedSpecies(gBattleMons[gBattlerTarget].species))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gStatuses3[gBattlerTarget] |= STATUS3_TELEKINESIS;
+ gDisableStructs[gBattlerTarget].telekinesisTimer = 3;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void Cmd_swapstatstages(void)
+{
+ u8 statId = T1_READ_8(gBattlescriptCurrInstr + 1);
+ s8 atkStatStage = gBattleMons[gBattlerAttacker].statStages[statId];
+ s8 defStatStage = gBattleMons[gBattlerTarget].statStages[statId];
+
+ gBattleMons[gBattlerAttacker].statStages[statId] = defStatStage;
+ gBattleMons[gBattlerTarget].statStages[statId] = atkStatStage;
+
+ gBattlescriptCurrInstr += 2;
+}
+
+static void Cmd_averagestats(void)
+{
+ u8 statId = T1_READ_8(gBattlescriptCurrInstr + 1);
+ u16 atkStat = *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (statId - 1));
+ u16 defStat = *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (statId - 1));
+ u16 average = (atkStat + defStat) / 2;
+
+ *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (statId - 1)) = average;
+ *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (statId - 1)) = average;
+
+ gBattlescriptCurrInstr += 2;
+}
+
+static void Cmd_jumpifoppositegenders(void)
+{
+ u32 atkGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerAttacker].species, gBattleMons[gBattlerAttacker].personality);
+ u32 defGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerTarget].species, gBattleMons[gBattlerTarget].personality);
+
+ if ((atkGender == MON_MALE && defGender == MON_FEMALE) || (atkGender == MON_FEMALE && defGender == MON_MALE))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static void Cmd_trygetbaddreamstarget(void)
+{
+ u8 badDreamsMonSide = GetBattlerSide(gBattlerAttacker);
+ for (;gBattlerTarget < gBattlersCount; gBattlerTarget++)
+ {
+ if (GetBattlerSide(gBattlerTarget) == badDreamsMonSide)
+ continue;
+ if ((gBattleMons[gBattlerTarget].status1 & STATUS1_SLEEP || GetBattlerAbility(gBattlerTarget) == ABILITY_COMATOSE)
+ && IsBattlerAlive(gBattlerTarget))
+ break;
+ }
+
+ if (gBattlerTarget >= gBattlersCount)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else
+ gBattlescriptCurrInstr += 5;
+}
+
+static void Cmd_tryworryseed(void)
+{
+ if (IsWorrySeedBannedAbility(gBattleMons[gBattlerTarget].ability))
+ {
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ gBattleMons[gBattlerTarget].ability = ABILITY_INSOMNIA;
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+static void Cmd_metalburstdamagecalculator(void)
+{
+ u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
+ u8 sideTarget = 0;
+
+ if (gProtectStructs[gBattlerAttacker].physicalDmg
+ && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId))
+ && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp)
+ {
+ gBattleMoveDamage = gProtectStructs[gBattlerAttacker].physicalDmg * 150 / 100;
+
+ if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove))
+ gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
+ else
+ gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId;
+
+ gBattlescriptCurrInstr += 5;
+ }
+ else if (gProtectStructs[gBattlerAttacker].specialDmg
+ && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId))
+ && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp)
+ {
+ gBattleMoveDamage = gProtectStructs[gBattlerAttacker].specialDmg * 150 / 100;
+
+ if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove))
+ gBattlerTarget = gSideTimers[sideTarget].followmeTarget;
+ else
+ gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId;
+
+ gBattlescriptCurrInstr += 5;
+ }
+ else
+ {
+ gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE;
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+}
+
+static bool32 CriticalCapture(u32 odds)
+{
+ #if B_CRITICAL_CAPTURE == TRUE
+ u32 numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT);
+
+ if (numCaught <= (NATIONAL_DEX_COUNT * 30) / 650)
+ odds = 0;
+ else if (numCaught <= (NATIONAL_DEX_COUNT * 150) / 650)
+ odds /= 2;
+ else if (numCaught <= (NATIONAL_DEX_COUNT * 300) / 650)
+ ; // odds = (odds * 100) / 100;
+ else if (numCaught <= (NATIONAL_DEX_COUNT * 450) / 650)
+ odds = (odds * 150) / 100;
+ else if (numCaught <= (NATIONAL_DEX_COUNT * 600) / 650)
+ odds *= 2;
+ else
+ odds = (odds * 250) / 100;
+
+ #ifdef ITEM_CATCHING_CHARM
+ if (CheckBagHasItem(ITEM_CATCHING_CHARM, 1))
+ odds = (odds * (100 + B_CATCHING_CHARM_BOOST)) / 100;
+ #endif
+
+ odds /= 6;
+ if ((Random() % 255) < odds)
+ return TRUE;
+
+ return FALSE;
+ #else
+ return FALSE;
+ #endif
+}
diff --git a/src/battle_setup.c b/src/battle_setup.c
index be2f7e8591..b0b068ef39 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -73,11 +73,9 @@ struct TrainerBattleParameter
// this file's functions
static void DoBattlePikeWildBattle(void);
static void DoSafariBattle(void);
-static void DoStandardWildBattle(void);
+static void DoStandardWildBattle(bool32 isDouble);
static void CB2_EndWildBattle(void);
static void CB2_EndScriptedWildBattle(void);
-static u8 GetWildBattleTransition(void);
-static u8 GetTrainerBattleTransition(void);
static void TryUpdateGymLeaderRematchFromWild(void);
static void TryUpdateGymLeaderRematchFromTrainer(void);
static void CB2_GiveStarter(void);
@@ -390,7 +388,12 @@ void BattleSetup_StartWildBattle(void)
if (GetSafariZoneFlag())
DoSafariBattle();
else
- DoStandardWildBattle();
+ DoStandardWildBattle(FALSE);
+}
+
+void BattleSetup_StartDoubleWildBattle(void)
+{
+ DoStandardWildBattle(TRUE);
}
void BattleSetup_StartBattlePikeWildBattle(void)
@@ -398,13 +401,15 @@ void BattleSetup_StartBattlePikeWildBattle(void)
DoBattlePikeWildBattle();
}
-static void DoStandardWildBattle(void)
+static void DoStandardWildBattle(bool32 isDouble)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
StopPlayerAvatar();
gMain.savedCallback = CB2_EndWildBattle;
gBattleTypeFlags = 0;
+ if (isDouble)
+ gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
if (InBattlePyramid())
{
VarSet(VAR_TEMP_E, 0);
@@ -419,7 +424,7 @@ static void DoStandardWildBattle(void)
void BattleSetup_StartRoamerBattle(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
StopPlayerAvatar();
gMain.savedCallback = CB2_EndWildBattle;
@@ -433,7 +438,7 @@ void BattleSetup_StartRoamerBattle(void)
static void DoSafariBattle(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
StopPlayerAvatar();
gMain.savedCallback = CB2_EndSafariBattle;
@@ -443,7 +448,7 @@ static void DoSafariBattle(void)
static void DoBattlePikeWildBattle(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
StopPlayerAvatar();
gMain.savedCallback = CB2_EndWildBattle;
@@ -479,7 +484,7 @@ static void DoBattlePyramidTrainerHillBattle(void)
void StartWallyTutorialBattle(void)
{
CreateMaleMon(&gEnemyParty[0], SPECIES_RALTS, 5);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gMain.savedCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic;
gBattleTypeFlags = BATTLE_TYPE_WALLY_TUTORIAL;
CreateBattleStartTask(B_TRANSITION_SLICE, 0);
@@ -487,7 +492,7 @@ void StartWallyTutorialBattle(void)
void BattleSetup_StartScriptedWildBattle(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = 0;
CreateBattleStartTask(GetWildBattleTransition(), 0);
@@ -497,9 +502,21 @@ void BattleSetup_StartScriptedWildBattle(void)
TryUpdateGymLeaderRematchFromWild();
}
+void BattleSetup_StartScriptedDoubleWildBattle(void)
+{
+ LockPlayerFieldControls();
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
+ gBattleTypeFlags = BATTLE_TYPE_DOUBLE;
+ CreateBattleStartTask(GetWildBattleTransition(), 0);
+ IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
+ IncrementGameStat(GAME_STAT_WILD_BATTLES);
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
+}
+
void BattleSetup_StartLatiBattle(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
CreateBattleStartTask(GetWildBattleTransition(), 0);
@@ -511,7 +528,7 @@ void BattleSetup_StartLatiBattle(void)
void BattleSetup_StartLegendaryBattle(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
@@ -550,7 +567,7 @@ void BattleSetup_StartLegendaryBattle(void)
void StartGroudonKyogreBattle(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON;
@@ -570,7 +587,7 @@ void StartRegiBattle(void)
u8 transitionId;
u16 species;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI;
@@ -600,7 +617,7 @@ void StartRegiBattle(void)
static void CB2_EndWildBattle(void)
{
- CpuFill16(0, (void*)(BG_PLTT), BG_PLTT_SIZE);
+ CpuFill16(0, (void *)(BG_PLTT), BG_PLTT_SIZE);
ResetOamRange(0, 128);
if (IsPlayerDefeated(gBattleOutcome) == TRUE && !InBattlePyramid() && !InBattlePike())
@@ -616,7 +633,7 @@ static void CB2_EndWildBattle(void)
static void CB2_EndScriptedWildBattle(void)
{
- CpuFill16(0, (void*)(BG_PLTT), BG_PLTT_SIZE);
+ CpuFill16(0, (void *)(BG_PLTT), BG_PLTT_SIZE);
ResetOamRange(0, 128);
if (IsPlayerDefeated(gBattleOutcome) == TRUE)
@@ -786,7 +803,7 @@ static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons)
return sum;
}
-static u8 GetWildBattleTransition(void)
+u8 GetWildBattleTransition(void)
{
u8 transitionType = GetBattleTransitionTypeByMap();
u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
@@ -808,7 +825,7 @@ static u8 GetWildBattleTransition(void)
}
}
-static u8 GetTrainerBattleTransition(void)
+u8 GetTrainerBattleTransition(void)
{
u8 minPartyCount;
u8 transitionType;
@@ -1037,22 +1054,22 @@ static void InitTrainerBattleVariables(void)
static inline void SetU8(void *ptr, u8 value)
{
- *(u8*)(ptr) = value;
+ *(u8 *)(ptr) = value;
}
static inline void SetU16(void *ptr, u16 value)
{
- *(u16*)(ptr) = value;
+ *(u16 *)(ptr) = value;
}
static inline void SetU32(void *ptr, u32 value)
{
- *(u32*)(ptr) = value;
+ *(u32 *)(ptr) = value;
}
-static inline void SetPtr(const void *ptr, const void* value)
+static inline void SetPtr(const void *ptr, const void *value)
{
- *(const void**)(ptr) = value;
+ *(const void **)(ptr) = value;
}
static void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data)
@@ -1101,7 +1118,8 @@ void SetMapVarsToTrainer(void)
const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
{
- InitTrainerBattleVariables();
+ if (TrainerBattleLoadArg8(data) != TRAINER_BATTLE_SET_TRAINER_B)
+ InitTrainerBattleVariables();
sTrainerBattleMode = TrainerBattleLoadArg8(data);
switch (sTrainerBattleMode)
@@ -1158,10 +1176,10 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
return EventScript_TryDoNormalTrainerBattle;
case TRAINER_BATTLE_SET_TRAINER_A:
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
- return NULL;
+ return sTrainerBattleEndScript;
case TRAINER_BATTLE_SET_TRAINER_B:
TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data);
- return NULL;
+ return sTrainerBattleEndScript;
case TRAINER_BATTLE_HILL:
if (gApproachingTrainerId == 0)
{
@@ -1194,8 +1212,8 @@ void ConfigureAndSetUpOneTrainerBattle(u8 trainerObjEventId, const u8 *trainerSc
gSelectedObjectEvent = trainerObjEventId;
gSpecialVar_LastTalked = gObjectEvents[trainerObjEventId].localId;
BattleSetup_ConfigureTrainerBattle(trainerScript + 1);
- ScriptContext1_SetupScript(EventScript_StartTrainerApproach);
- ScriptContext2_Enable();
+ ScriptContext_SetupScript(EventScript_StartTrainerApproach);
+ LockPlayerFieldControls();
}
void ConfigureTwoTrainersBattle(u8 trainerObjEventId, const u8 *trainerScript)
@@ -1207,8 +1225,8 @@ void ConfigureTwoTrainersBattle(u8 trainerObjEventId, const u8 *trainerScript)
void SetUpTwoTrainersBattle(void)
{
- ScriptContext1_SetupScript(EventScript_StartTrainerApproach);
- ScriptContext2_Enable();
+ ScriptContext_SetupScript(EventScript_StartTrainerApproach);
+ LockPlayerFieldControls();
}
bool32 GetTrainerFlagFromScriptPointer(const u8 *data)
@@ -1320,7 +1338,7 @@ void BattleSetup_StartTrainerBattle(void)
else
DoTrainerBattle();
- ScriptContext1_Stop();
+ ScriptContext_Stop();
}
static void CB2_EndTrainerBattle(void)
@@ -1371,7 +1389,7 @@ void BattleSetup_StartRematchBattle(void)
gBattleTypeFlags = BATTLE_TYPE_TRAINER;
gMain.savedCallback = CB2_EndRematchBattle;
DoTrainerBattle();
- ScriptContext1_Stop();
+ ScriptContext_Stop();
}
void ShowTrainerIntroSpeech(void)
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 354a087c41..62479186ff 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -135,7 +135,7 @@ const u16 gBattleFrontierHeldItems[] =
ITEM_APICOT_BERRY,
ITEM_STARF_BERRY,
ITEM_LIECHI_BERRY,
- ITEM_STICK,
+ ITEM_LEEK,
ITEM_LAX_INCENSE,
ITEM_AGUAV_BERRY,
ITEM_FIGY_BERRY,
@@ -996,7 +996,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void)
winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode);
for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++)
{
- u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]);
+ u32 *record = (u32 *)(&gSaveBlock2Ptr->frontier.towerRecords[i]);
u32 recordHasData = 0;
u32 checksum = 0;
for (j = 0; j < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; j++) // - 4, because of the last field being the checksum itself.
@@ -1452,6 +1452,10 @@ u8 GetFrontierOpponentClass(u16 trainerId)
{
trainerClass = gTrainers[TRAINER_STEVEN].trainerClass;
}
+ else if (trainerId >= TRAINER_CUSTOM_PARTNER)
+ {
+ trainerClass = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerClass;
+ }
else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
trainerClass = gFacilityClassToTrainerClass[gFacilityTrainers[trainerId].facilityClass];
@@ -1533,6 +1537,11 @@ void GetFrontierTrainerName(u8 *dst, u16 trainerId)
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
dst[i] = gTrainers[TRAINER_STEVEN].trainerName[i];
}
+ else if (trainerId >= TRAINER_CUSTOM_PARTNER)
+ {
+ for (i = 0; gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName[i] != EOS; i++)
+ dst[i] = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName[i];
+ }
else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
@@ -1989,6 +1998,13 @@ static void HandleSpecialTrainerBattleEnd(void)
case SPECIAL_BATTLE_EREADER:
CopyEReaderTrainerFarewellMessage();
break;
+ case SPECIAL_BATTLE_MULTI:
+ for (i = 0; i < 3; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
+ gSaveBlock1Ptr->playerParty[i] = gPlayerParty[i];
+ }
+ break;
}
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
@@ -2131,6 +2147,34 @@ void DoSpecialTrainerBattle(void)
PlayMapChosenOrBattleBGM(0);
BattleTransition_StartOnField(B_TRANSITION_MAGMA);
break;
+ case SPECIAL_BATTLE_MULTI:
+ if (gSpecialVar_0x8005 & MULTI_BATTLE_2_VS_WILD) // Player + AI against wild mon
+ {
+ gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER;
+ }
+ else if (gSpecialVar_0x8005 & MULTI_BATTLE_2_VS_1) // Player + AI against one trainer
+ {
+ gTrainerBattleOpponent_B = 0xFFFF;
+ gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER;
+ }
+ else // MULTI_BATTLE_2_VS_2
+ {
+ gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER;
+ }
+
+ gPartnerSpriteId = VarGet(gSpecialVar_0x8007);
+ gPartnerTrainerId = VarGet(gSpecialVar_0x8006) + TRAINER_CUSTOM_PARTNER;
+ FillPartnerParty(gPartnerTrainerId);
+ CreateTask(Task_StartBattleAfterTransition, 1);
+ PlayMapChosenOrBattleBGM(0);
+ if (gSpecialVar_0x8005 & MULTI_BATTLE_2_VS_WILD)
+ BattleTransition_StartOnField(GetWildBattleTransition());
+ else
+ BattleTransition_StartOnField(GetTrainerBattleTransition());
+
+ if (gSpecialVar_0x8005 & MULTI_BATTLE_CHOOSE_MONS) // Skip mons restoring(done in the script)
+ gBattleScripting.specialTrainerBattleType = 0xFF;
+ break;
}
}
@@ -2374,7 +2418,7 @@ static void LoadMultiPartnerCandidatesData(void)
r10 = 0;
for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++)
{
- u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]);
+ u32 *record = (u32 *)(&gSaveBlock2Ptr->frontier.towerRecords[i]);
u32 recordHasData = 0;
u32 checksum = 0;
for (j = 0; j < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; j++) // - 4, because of the last field being the checksum itself.
@@ -2690,7 +2734,7 @@ static void SetTowerInterviewData(void)
static void ValidateBattleTowerRecordChecksums(void)
{
s32 i, j;
- u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerPlayer);
+ u32 *record = (u32 *)(&gSaveBlock2Ptr->frontier.towerPlayer);
u32 checksum = 0;
for (j = 0; j < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; j++) // - 4, because of the last field being the checksum itself.
@@ -2702,7 +2746,7 @@ static void ValidateBattleTowerRecordChecksums(void)
for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++)
{
- record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]);
+ record = (u32 *)(&gSaveBlock2Ptr->frontier.towerRecords[i]);
checksum = 0;
for (j = 0; j < (sizeof(struct EmeraldBattleTowerRecord) - 4) / 4; j++) // - 4, because of the last field being the checksum itself.
{
@@ -2963,7 +3007,7 @@ static void FillPartnerParty(u16 trainerId)
u32 friendship;
u16 monId;
u32 otID;
- u8 trainerName[PLAYER_NAME_LENGTH + 1];
+ u8 trainerName[(PLAYER_NAME_LENGTH * 3) + 1];
SetFacilityPtrsGetLevel();
if (trainerId == TRAINER_STEVEN_PARTNER)
@@ -2995,6 +3039,72 @@ static void FillPartnerParty(u16 trainerId)
CalculateMonStats(&gPlayerParty[MULTI_PARTY_SIZE + i]);
}
}
+ else if (trainerId >= TRAINER_CUSTOM_PARTNER)
+ {
+ otID = Random32();
+
+ for (i = 0; i < 3; i++)
+ ZeroMonData(&gPlayerParty[i + 3]);
+
+ for (i = 0; i < 3 && i < gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].partySize; i++)
+ {
+ do
+ {
+ j = Random32();
+ } while (IsShinyOtIdPersonality(otID, j));
+
+ switch (gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].partyFlags)
+ {
+ case 0:
+ {
+ const struct TrainerMonNoItemDefaultMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.NoItemDefaultMoves;
+
+ CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID);
+ break;
+ }
+ case F_TRAINER_PARTY_CUSTOM_MOVESET:
+ {
+ const struct TrainerMonNoItemCustomMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.NoItemCustomMoves;
+
+ CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID);
+
+ for (j = 0; j < 4; j++)
+ {
+ SetMonData(&gPlayerParty[i + 3], MON_DATA_MOVE1 + j, &partyData[i].moves[j]);
+ SetMonData(&gPlayerParty[i + 3], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp);
+ }
+ break;
+ }
+ case F_TRAINER_PARTY_HELD_ITEM:
+ {
+ const struct TrainerMonItemDefaultMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.ItemDefaultMoves;
+
+ CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID);
+
+ SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem);
+ break;
+ }
+ case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM:
+ {
+ const struct TrainerMonItemCustomMoves *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.ItemCustomMoves;
+
+ CreateMon(&gPlayerParty[i + 3], partyData[i].species, partyData[i].lvl, partyData[i].iv * 31 / 255, TRUE, j, TRUE, otID);
+
+ SetMonData(&gPlayerParty[i + 3], MON_DATA_HELD_ITEM, &partyData[i].heldItem);
+
+ for (j = 0; j < 4; j++)
+ {
+ SetMonData(&gPlayerParty[i + 3], MON_DATA_MOVE1 + j, &partyData[i].moves[j]);
+ SetMonData(&gPlayerParty[i + 3], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp);
+ }
+ break;
+ }
+ }
+
+ StringCopy(trainerName, gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName);
+ SetMonData(&gPlayerParty[i + 3], MON_DATA_OT_NAME, trainerName);
+ }
+ }
else if (trainerId == TRAINER_EREADER)
{
// Scrapped, lol.
@@ -3195,7 +3305,7 @@ static void ValidateApprenticesChecksums(void)
for (i = 0; i < APPRENTICE_COUNT; i++)
{
- u32 *data = (u32*) &gSaveBlock2Ptr->apprentices[i];
+ u32 *data = (u32 *) &gSaveBlock2Ptr->apprentices[i];
u32 checksum = 0;
for (j = 0; j < (sizeof(struct Apprentice) - 4) / 4; j++)
checksum += data[j];
@@ -3504,7 +3614,7 @@ u8 FacilityClassToGraphicsId(u8 facilityClass)
bool32 ValidateBattleTowerRecord(u8 recordId) // unused
{
s32 i;
- u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[recordId]);
+ 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.
diff --git a/src/battle_transition.c b/src/battle_transition.c
index c523cbe7b9..bc289efa7f 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -827,7 +827,7 @@ static const struct OamData sOam_UnusedBrendanLass =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -2186,7 +2186,7 @@ static bool8 Wave_Init(struct Task *task)
static bool8 Wave_Main(struct Task *task)
{
u8 i, sinIndex;
- u16* toStore;
+ u16 *toStore;
bool8 finished;
sTransitionData->VBlank_DMA = FALSE;
@@ -2347,7 +2347,7 @@ static bool8 Mugshot_SetGfx(struct Task *task)
static bool8 Mugshot_ShowBanner(struct Task *task)
{
u8 i, sinIndex;
- u16* toStore;
+ u16 *toStore;
s16 x;
s32 mergedValue;
@@ -2388,7 +2388,7 @@ static bool8 Mugshot_ShowBanner(struct Task *task)
if (task->tBottomBannerX < 0)
task->tBottomBannerX = 0;
- mergedValue = *(s32*)(&task->tTopBannerX);
+ mergedValue = *(s32 *)(&task->tTopBannerX);
if (mergedValue == DISPLAY_WIDTH)
task->tState++;
@@ -2401,7 +2401,7 @@ static bool8 Mugshot_ShowBanner(struct Task *task)
static bool8 Mugshot_StartOpponentSlide(struct Task *task)
{
u8 i;
- u16* toStore;
+ u16 *toStore;
sTransitionData->VBlank_DMA = FALSE;
@@ -3716,8 +3716,8 @@ static void SpriteCB_WhiteBarFade(struct Sprite *sprite)
else
{
u16 i;
- u16* ptr1 = &gScanlineEffectRegBuffers[0][sprite->y];
- u16* ptr2 = &gScanlineEffectRegBuffers[0][sprite->y + DISPLAY_HEIGHT];
+ u16 *ptr1 = &gScanlineEffectRegBuffers[0][sprite->y];
+ u16 *ptr2 = &gScanlineEffectRegBuffers[0][sprite->y + DISPLAY_HEIGHT];
for (i = 0; i < DISPLAY_HEIGHT / NUM_WHITE_BARS; i++)
{
ptr1[i] = sprite->sFade >> 8;
@@ -3783,7 +3783,7 @@ static bool8 GridSquares_Init(struct Task *task)
static bool8 GridSquares_Main(struct Task *task)
{
- u16* tileset;
+ u16 *tileset;
if (task->tDelay == 0)
{
@@ -4061,7 +4061,7 @@ static void GetBg0TilemapDst(u16 **tileset)
{
u16 charBase = REG_BG0CNT >> 2;
charBase <<= 14;
- *tileset = (u16*)(BG_VRAM + charBase);
+ *tileset = (u16 *)(BG_VRAM + charBase);
}
void GetBg0TilesDst(u16 **tilemap, u16 **tileset)
@@ -4072,8 +4072,8 @@ void GetBg0TilesDst(u16 **tilemap, u16 **tileset)
screenBase <<= 11;
charBase <<= 14;
- *tilemap = (u16*)(BG_VRAM + screenBase);
- *tileset = (u16*)(BG_VRAM + charBase);
+ *tilemap = (u16 *)(BG_VRAM + screenBase);
+ *tileset = (u16 *)(BG_VRAM + charBase);
}
static void FadeScreenBlack(void)
diff --git a/src/battle_transition_frontier.c b/src/battle_transition_frontier.c
index a1a39abdab..088865dbab 100644
--- a/src/battle_transition_frontier.c
+++ b/src/battle_transition_frontier.c
@@ -58,7 +58,7 @@ static const struct OamData sOamData_LogoCircles =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
diff --git a/src/battle_tv.c b/src/battle_tv.c
index b9008b47a7..b6647b1164 100644
--- a/src/battle_tv.c
+++ b/src/battle_tv.c
@@ -103,7 +103,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_SPECIAL_DEFENSE_UP] = 1,
[EFFECT_ACCURACY_UP] = 1,
[EFFECT_EVASION_UP] = 1,
- [EFFECT_ALWAYS_HIT] = 2,
+// [EFFECT_ALWAYS_HIT] = 2,
[EFFECT_ATTACK_DOWN] = 1,
[EFFECT_DEFENSE_DOWN] = 1,
[EFFECT_SPEED_DOWN] = 1,
@@ -125,16 +125,16 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_TRI_ATTACK] = 1,
[EFFECT_REST] = 7,
[EFFECT_OHKO] = 7,
- [EFFECT_RAZOR_WIND] = 1,
+// [EFFECT_RAZOR_WIND] = 1,
[EFFECT_SUPER_FANG] = 5,
[EFFECT_DRAGON_RAGE] = 2,
[EFFECT_TRAP] = 4,
- [EFFECT_HIGH_CRITICAL] = 1,
+// [EFFECT_HIGH_CRITICAL] = 1,
[EFFECT_DOUBLE_HIT] = 1,
[EFFECT_RECOIL_IF_MISS] = 1,
[EFFECT_MIST] = 5,
[EFFECT_FOCUS_ENERGY] = 1,
- [EFFECT_RECOIL] = 2,
+ [EFFECT_RECOIL_25] = 2,
[EFFECT_CONFUSE] = 4,
[EFFECT_ATTACK_UP_2] = 1,
[EFFECT_DEFENSE_UP_2] = 1,
@@ -161,7 +161,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_SPECIAL_DEFENSE_DOWN_HIT] = 1,
[EFFECT_ACCURACY_DOWN_HIT] = 1,
[EFFECT_EVASION_DOWN_HIT] = 1,
- [EFFECT_SKY_ATTACK] = 4,
+// [EFFECT_SKY_ATTACK] = 4,
[EFFECT_CONFUSE_HIT] = 1,
[EFFECT_TWINEEDLE] = 1,
[EFFECT_VITAL_THROW] = 1,
@@ -171,7 +171,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_MIMIC] = 4,
[EFFECT_METRONOME] = 1,
[EFFECT_LEECH_SEED] = 4,
- [EFFECT_SPLASH] = 1,
+ [EFFECT_DO_NOTHING] = 1,
[EFFECT_DISABLE] = 7,
[EFFECT_LEVEL_DAMAGE] = 2,
[EFFECT_PSYWAVE] = 1,
@@ -182,21 +182,21 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_CONVERSION_2] = 4,
[EFFECT_LOCK_ON] = 3,
[EFFECT_SKETCH] = 3,
- [EFFECT_UNUSED_60] = 3,
+// [EFFECT_UNUSED_60] = 3,
[EFFECT_SLEEP_TALK] = 3,
[EFFECT_DESTINY_BOND] = 3,
[EFFECT_FLAIL] = 2,
[EFFECT_SPITE] = 4,
[EFFECT_FALSE_SWIPE] = 1,
[EFFECT_HEAL_BELL] = 5,
- [EFFECT_QUICK_ATTACK] = 1,
+// [EFFECT_QUICK_ATTACK] = 1,
[EFFECT_TRIPLE_KICK] = 1,
[EFFECT_THIEF] = 4,
[EFFECT_MEAN_LOOK] = 5,
[EFFECT_NIGHTMARE] = 3,
[EFFECT_MINIMIZE] = 1,
[EFFECT_CURSE] = 2,
- [EFFECT_UNUSED_6E] = 1,
+// [EFFECT_UNUSED_6E] = 1,
[EFFECT_PROTECT] = 5,
[EFFECT_SPIKES] = 4,
[EFFECT_FORESIGHT] = 3,
@@ -211,13 +211,13 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_PRESENT] = 1,
[EFFECT_FRUSTRATION] = 1,
[EFFECT_SAFEGUARD] = 5,
- [EFFECT_THAW_HIT] = 1,
+// [EFFECT_THAW_HIT] = 1, Now unused
[EFFECT_MAGNITUDE] = 1,
[EFFECT_BATON_PASS] = 7,
[EFFECT_PURSUIT] = 2,
[EFFECT_RAPID_SPIN] = 2,
[EFFECT_SONICBOOM] = 1,
- [EFFECT_UNUSED_83] = 1,
+// [EFFECT_UNUSED_83] = 1,
[EFFECT_MORNING_SUN] = 4,
[EFFECT_SYNTHESIS] = 4,
[EFFECT_MOONLIGHT] = 4,
@@ -227,7 +227,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_DEFENSE_UP_HIT] = 1,
[EFFECT_ATTACK_UP_HIT] = 1,
[EFFECT_ALL_STATS_UP_HIT] = 1,
- [EFFECT_UNUSED_8D] = 1,
+// [EFFECT_UNUSED_8D] = 1,
[EFFECT_BELLY_DRUM] = 7,
[EFFECT_PSYCH_UP] = 7,
[EFFECT_MIRROR_COAT] = 6,
@@ -249,7 +249,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_STOCKPILE] = 3,
[EFFECT_SPIT_UP] = 3,
[EFFECT_SWALLOW] = 3,
- [EFFECT_UNUSED_A3] = 1,
+// [EFFECT_UNUSED_A3] = 1,
[EFFECT_HAIL] = 4,
[EFFECT_TORMENT] = 7,
[EFFECT_FLATTER] = 7,
@@ -284,9 +284,9 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_SNATCH] = 1,
[EFFECT_LOW_KICK] = 1,
[EFFECT_SECRET_POWER] = 1,
- [EFFECT_DOUBLE_EDGE] = 2,
+ [EFFECT_RECOIL_33] = 2,
[EFFECT_TEETER_DANCE] = 6,
- [EFFECT_BLAZE_KICK] = 1,
+// [EFFECT_BLAZE_KICK] = 1,
[EFFECT_MUD_SPORT] = 4,
[EFFECT_POISON_FANG] = 1,
[EFFECT_WEATHER_BALL] = 1,
@@ -295,7 +295,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_COSMIC_POWER] = 1,
[EFFECT_SKY_UPPERCUT] = 1,
[EFFECT_BULK_UP] = 1,
- [EFFECT_POISON_TAIL] = 1,
+// [EFFECT_POISON_TAIL] = 1,
[EFFECT_WATER_SPORT] = 4,
[EFFECT_CALM_MIND] = 1,
[EFFECT_DRAGON_DANCE] = 1,
@@ -1010,10 +1010,10 @@ void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruc
tvPtr->side[atkSide ^ BIT_SIDE].explosion = TRUE;
}
- AddMovePoints(PTS_REFLECT, gBattleMoves[move].type, gBattleMoves[move].power, 0);
- AddMovePoints(PTS_LIGHT_SCREEN, gBattleMoves[move].type, gBattleMoves[move].power, 0);
- AddMovePoints(PTS_WATER_SPORT, gBattleMoves[move].type, 0, 0);
- AddMovePoints(PTS_MUD_SPORT, gBattleMoves[move].type, 0, 0);
+ AddMovePoints(PTS_REFLECT, move, gBattleMoves[move].power, 0);
+ AddMovePoints(PTS_LIGHT_SCREEN, move, gBattleMoves[move].power, 0);
+ AddMovePoints(PTS_WATER_SPORT, move, 0, 0);
+ AddMovePoints(PTS_MUD_SPORT, move, 0, 0);
}
void BattleTv_SetDataBasedOnAnimation(u8 animationId)
@@ -1210,11 +1210,11 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
movePoints->points[arg1][arg2 * 4 + arg3] += sPointsArray[caseId][0];
break;
-#define type arg1
+#define move arg1
#define power arg2
case PTS_WATER_SPORT:
// If used fire move during Water Sport
- if (tvPtr->pos[defSide][0].waterSportMonId != -(tvPtr->pos[defSide][1].waterSportMonId) && type == TYPE_FIRE)
+ if (tvPtr->pos[defSide][0].waterSportMonId != -(tvPtr->pos[defSide][1].waterSportMonId) && gBattleMoves[move].type == TYPE_FIRE)
{
if (tvPtr->pos[defSide][0].waterSportMonId != 0)
{
@@ -1230,7 +1230,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
break;
case PTS_MUD_SPORT:
// If used Electric move during Mud Sport
- if (tvPtr->pos[defSide][0].mudSportMonId != -(tvPtr->pos[defSide][1].mudSportMonId) && type == TYPE_ELECTRIC)
+ if (tvPtr->pos[defSide][0].mudSportMonId != -(tvPtr->pos[defSide][1].mudSportMonId) && gBattleMoves[move].type == TYPE_ELECTRIC)
{
if (tvPtr->pos[defSide][0].mudSportMonId != 0)
{
@@ -1246,7 +1246,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
break;
case PTS_REFLECT:
// If hit Reflect with damaging physical move
- if (IS_TYPE_PHYSICAL(type) && power != 0 && tvPtr->side[defSide].reflectMonId != 0)
+ if (IS_MOVE_PHYSICAL(move) && power != 0 && tvPtr->side[defSide].reflectMonId != 0)
{
u32 id = (tvPtr->side[defSide].reflectMonId - 1) * 4;
movePoints->points[defSide][id + tvPtr->side[defSide].reflectMoveSlot] += sPointsArray[caseId][0];
@@ -1254,13 +1254,13 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
break;
case PTS_LIGHT_SCREEN:
// If hit Light Screen with damaging special move
- if (!IS_TYPE_PHYSICAL(type) && power != 0 && tvPtr->side[defSide].lightScreenMonId != 0)
+ if (IS_MOVE_SPECIAL(move) && power != 0 && tvPtr->side[defSide].lightScreenMonId != 0)
{
u32 id = (tvPtr->side[defSide].lightScreenMonId - 1) * 4;
movePoints->points[defSide][id + tvPtr->side[defSide].lightScreenMoveSlot] += sPointsArray[caseId][0];
}
break;
-#undef type
+#undef move
#undef power
}
}
@@ -1458,20 +1458,9 @@ static void TrySetBattleSeminarShow(void)
powerOverride = 0;
if (ShouldCalculateDamage(gCurrentMove, &dmgByMove[i], &powerOverride))
{
- u8 moveResultFlags;
- u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)];
- gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove,
- sideStatus, powerOverride,
- 0, gBattlerAttacker, gBattlerTarget);
-
- if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
- gBattleMoveDamage *= 2;
- if (gProtectStructs[gBattlerAttacker].helpingHand)
- gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
-
- moveResultFlags = TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
+ gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, gBattleMoves[gCurrentMove].type, powerOverride, FALSE, FALSE, FALSE);
dmgByMove[i] = gBattleMoveDamage;
- if (dmgByMove[i] == 0 && !(moveResultFlags & MOVE_RESULT_NO_EFFECT))
+ if (dmgByMove[i] == 0 && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
dmgByMove[i] = 1;
}
}
diff --git a/src/battle_util.c b/src/battle_util.c
index 865b0112ce..fd9b699b8e 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -4,6 +4,10 @@
#include "battle_arena.h"
#include "battle_pyramid.h"
#include "battle_util.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_setup.h"
+#include "party_menu.h"
#include "pokemon.h"
#include "international_string_util.h"
#include "item.h"
@@ -19,13 +23,18 @@
#include "trig.h"
#include "window.h"
#include "battle_message.h"
-#include "battle_ai_script_commands.h"
-#include "battle_controllers.h"
+#include "battle_ai_main.h"
+#include "battle_ai_util.h"
#include "event_data.h"
#include "link.h"
+#include "malloc.h"
+#include "berry.h"
+#include "pokedex.h"
+#include "mail.h"
#include "field_weather.h"
#include "constants/abilities.h"
#include "constants/battle_anim.h"
+#include "constants/battle_config.h"
#include "constants/battle_move_effects.h"
#include "constants/battle_script_commands.h"
#include "constants/battle_string_ids.h"
@@ -34,8 +43,11 @@
#include "constants/moves.h"
#include "constants/songs.h"
#include "constants/species.h"
+#include "constants/trainers.h"
#include "constants/weather.h"
+extern struct Evolution gEvolutionTable[][EVOS_PER_MON];
+
/*
NOTE: The data and functions in this file up until (but not including) sSoundMovesTable
are actually part of battle_main.c. They needed to be moved to this file in order to
@@ -43,8 +55,10 @@ match the ROM; this is also why sSoundMovesTable's declaration is in the middle
functions instead of at the top of the file with the other declarations.
*/
+static bool32 TryRemoveScreens(u8 battler);
+static bool32 IsUnnerveAbilityOnOpposingSide(u8 battlerId);
+
extern const u8 *const gBattleScriptsForMoveEffects[];
-extern const u8 *const gBattlescriptsForBallThrow[];
extern const u8 *const gBattlescriptsForRunningByItem[];
extern const u8 *const gBattlescriptsForUsingItem[];
extern const u8 *const gBattlescriptsForSafariActions[];
@@ -75,25 +89,169 @@ static const u8 sPkblToEscapeFactor[][3] = {
static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1};
static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4};
+static const u16 sSkillSwapBannedAbilities[] =
+{
+ ABILITY_WONDER_GUARD,
+ ABILITY_MULTITYPE,
+ ABILITY_ILLUSION,
+ ABILITY_STANCE_CHANGE,
+ ABILITY_SCHOOLING,
+ ABILITY_COMATOSE,
+ ABILITY_SHIELDS_DOWN,
+ ABILITY_DISGUISE,
+ ABILITY_RKS_SYSTEM,
+ ABILITY_BATTLE_BOND,
+ ABILITY_POWER_CONSTRUCT,
+ ABILITY_NEUTRALIZING_GAS,
+ ABILITY_ICE_FACE,
+ ABILITY_HUNGER_SWITCH,
+ ABILITY_GULP_MISSILE,
+};
+
+static const u16 sRolePlayBannedAbilities[] =
+{
+ ABILITY_TRACE,
+ ABILITY_WONDER_GUARD,
+ ABILITY_FORECAST,
+ ABILITY_FLOWER_GIFT,
+ ABILITY_MULTITYPE,
+ ABILITY_ILLUSION,
+ ABILITY_ZEN_MODE,
+ ABILITY_IMPOSTER,
+ ABILITY_STANCE_CHANGE,
+ ABILITY_POWER_OF_ALCHEMY,
+ ABILITY_RECEIVER,
+ ABILITY_SCHOOLING,
+ ABILITY_COMATOSE,
+ ABILITY_SHIELDS_DOWN,
+ ABILITY_DISGUISE,
+ ABILITY_RKS_SYSTEM,
+ ABILITY_BATTLE_BOND,
+ ABILITY_POWER_CONSTRUCT,
+ ABILITY_ICE_FACE,
+ ABILITY_HUNGER_SWITCH,
+ ABILITY_GULP_MISSILE,
+};
+
+static const u16 sRolePlayBannedAttackerAbilities[] =
+{
+ ABILITY_MULTITYPE,
+ ABILITY_ZEN_MODE,
+ ABILITY_STANCE_CHANGE,
+ ABILITY_SCHOOLING,
+ ABILITY_COMATOSE,
+ ABILITY_SHIELDS_DOWN,
+ ABILITY_DISGUISE,
+ ABILITY_RKS_SYSTEM,
+ ABILITY_BATTLE_BOND,
+ ABILITY_POWER_CONSTRUCT,
+ ABILITY_ICE_FACE,
+ ABILITY_GULP_MISSILE,
+};
+
+static const u16 sWorrySeedBannedAbilities[] =
+{
+ ABILITY_MULTITYPE,
+ ABILITY_STANCE_CHANGE,
+ ABILITY_SCHOOLING,
+ ABILITY_COMATOSE,
+ ABILITY_SHIELDS_DOWN,
+ ABILITY_DISGUISE,
+ ABILITY_RKS_SYSTEM,
+ ABILITY_BATTLE_BOND,
+ ABILITY_POWER_CONSTRUCT,
+ ABILITY_TRUANT,
+ ABILITY_ICE_FACE,
+ ABILITY_GULP_MISSILE,
+};
+
+static const u16 sGastroAcidBannedAbilities[] =
+{
+ ABILITY_AS_ONE_ICE_RIDER,
+ ABILITY_AS_ONE_SHADOW_RIDER,
+ ABILITY_BATTLE_BOND,
+ ABILITY_COMATOSE,
+ ABILITY_DISGUISE,
+ ABILITY_GULP_MISSILE,
+ ABILITY_ICE_FACE,
+ ABILITY_MULTITYPE,
+ ABILITY_POWER_CONSTRUCT,
+ ABILITY_RKS_SYSTEM,
+ ABILITY_SCHOOLING,
+ ABILITY_SHIELDS_DOWN,
+ ABILITY_STANCE_CHANGE,
+ ABILITY_ZEN_MODE,
+};
+
+static const u16 sEntrainmentBannedAttackerAbilities[] =
+{
+ ABILITY_TRACE,
+ ABILITY_FORECAST,
+ ABILITY_FLOWER_GIFT,
+ ABILITY_ZEN_MODE,
+ ABILITY_ILLUSION,
+ ABILITY_IMPOSTER,
+ ABILITY_POWER_OF_ALCHEMY,
+ ABILITY_RECEIVER,
+ ABILITY_DISGUISE,
+ ABILITY_POWER_CONSTRUCT,
+ ABILITY_NEUTRALIZING_GAS,
+ ABILITY_ICE_FACE,
+ ABILITY_HUNGER_SWITCH,
+ ABILITY_GULP_MISSILE,
+};
+
+static const u16 sEntrainmentTargetSimpleBeamBannedAbilities[] =
+{
+ ABILITY_TRUANT,
+ ABILITY_MULTITYPE,
+ ABILITY_STANCE_CHANGE,
+ ABILITY_SCHOOLING,
+ ABILITY_COMATOSE,
+ ABILITY_SHIELDS_DOWN,
+ ABILITY_DISGUISE,
+ ABILITY_RKS_SYSTEM,
+ ABILITY_BATTLE_BOND,
+ ABILITY_ICE_FACE,
+ ABILITY_GULP_MISSILE,
+};
+
+bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move)
+{
+ u32 ability = GetBattlerAbility(battlerAtk);
+
+ if (gSideTimers[defSide].followmeTimer == 0
+ || gBattleMons[gSideTimers[defSide].followmeTarget].hp == 0
+ || gBattleMoves[move].effect == EFFECT_SNIPE_SHOT
+ || gBattleMoves[move].effect == EFFECT_SKY_DROP
+ || ability == ABILITY_PROPELLER_TAIL || ability == ABILITY_STALWART)
+ return FALSE;
+
+ if (gSideTimers[defSide].followmePowder && !IsAffectedByPowder(battlerAtk, ability, GetBattlerHoldEffect(battlerAtk, TRUE)))
+ return FALSE;
+
+ return TRUE;
+}
+
+// Functions
void HandleAction_UseMove(void)
{
- u8 side;
- u8 var = 4;
+ u32 i, side, moveType, var = 4;
+ u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove);
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
-
- if (*(&gBattleStruct->absentBattlerFlags) & gBitTable[gBattlerAttacker])
+ if (gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker] || !IsBattlerAlive(gBattlerAttacker))
{
gCurrentActionFuncId = B_ACTION_FINISHED;
return;
}
- gCritMultiplier = 1;
- gBattleScripting.dmgMultiplier = 1;
+ gIsCriticalHit = FALSE;
gBattleStruct->atkCancellerTracker = 0;
gMoveResultFlags = 0;
gMultiHitCounter = 0;
- gBattleCommunication[6] = 0;
+ gBattleCommunication[MISS_TYPE] = 0;
+ gBattleScripting.savedMoveEffect = 0;
gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
// choose move
@@ -109,7 +267,7 @@ void HandleAction_UseMove(void)
gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker];
}
// encore forces you to use the same move
- else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
+ else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
&& gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
{
gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove;
@@ -117,8 +275,8 @@ void HandleAction_UseMove(void)
*(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
}
// check if the encored move wasn't overwritten
- else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
- && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
+ else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
+ && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
{
gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos;
gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos];
@@ -136,6 +294,12 @@ void HandleAction_UseMove(void)
{
gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos];
}
+
+ // check z move used
+ if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] != MOVE_NONE && !IS_MOVE_STATUS(gCurrentMove))
+ {
+ gCurrentMove = gBattleStruct->zmove.toBeUsed[gBattlerAttacker];
+ }
if (gBattleMons[gBattlerAttacker].hp != 0)
{
@@ -145,36 +309,42 @@ void HandleAction_UseMove(void)
gBattleResults.lastUsedMoveOpponent = gCurrentMove;
}
+ // Set dynamic move type.
+ SetTypeBeforeUsingMove(gChosenMove, gBattlerAttacker);
+ GET_MOVE_TYPE(gChosenMove, moveType);
+
// choose target
side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
- if (gSideTimers[side].followmeTimer != 0
- && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED
- && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget)
- && gBattleMons[gSideTimers[side].followmeTarget].hp != 0)
+ if (IsAffectedByFollowMe(gBattlerAttacker, side, gCurrentMove)
+ && moveTarget == MOVE_TARGET_SELECTED
+ && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget))
{
- gBattlerTarget = gSideTimers[side].followmeTarget;
+ gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = gSideTimers[side].followmeTarget; // follow me moxie fix
}
else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- && gSideTimers[side].followmeTimer == 0
- && (gBattleMoves[gCurrentMove].power != 0
- || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER)
- && gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD
- && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ && gSideTimers[side].followmeTimer == 0
+ && (gBattleMoves[gCurrentMove].power != 0 || moveTarget != MOVE_TARGET_USER)
+ && ((GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC)
+ || (GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_STORM_DRAIN && moveType == TYPE_WATER)))
{
side = GetBattlerSide(gBattlerAttacker);
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
if (side != GetBattlerSide(gActiveBattler)
&& *(gBattleStruct->moveTarget + gBattlerAttacker) != gActiveBattler
- && gBattleMons[gActiveBattler].ability == ABILITY_LIGHTNING_ROD
- && GetBattlerTurnOrderNum(gActiveBattler) < var)
+ && ((GetBattlerAbility(gActiveBattler) == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC)
+ || (GetBattlerAbility(gActiveBattler) == ABILITY_STORM_DRAIN && moveType == TYPE_WATER))
+ && GetBattlerTurnOrderNum(gActiveBattler) < var
+ && gBattleMoves[gCurrentMove].effect != EFFECT_SNIPE_SHOT
+ && (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL
+ || GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART))
{
var = GetBattlerTurnOrderNum(gActiveBattler);
}
}
if (var == 4)
{
- if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM)
+ if (moveTarget & MOVE_TARGET_RANDOM)
{
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
{
@@ -191,12 +361,22 @@ void HandleAction_UseMove(void)
gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
}
}
+ else if (moveTarget & MOVE_TARGET_FOES_AND_ALLY)
+ {
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
+ {
+ if (gBattlerTarget == gBattlerAttacker)
+ continue;
+ if (IsBattlerAlive(gBattlerTarget))
+ break;
+ }
+ }
else
{
gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker);
}
- if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
+ if (!IsBattlerAlive(gBattlerTarget))
{
if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))
{
@@ -205,21 +385,27 @@ void HandleAction_UseMove(void)
else
{
gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE);
- if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
+ if (!IsBattlerAlive(gBattlerTarget))
gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK);
}
}
}
else
{
+ u16 battlerAbility;
gActiveBattler = gBattlerByTurnOrder[var];
+ battlerAbility = GetBattlerAbility(gActiveBattler);
+
RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability);
- gSpecialStatuses[gActiveBattler].lightningRodRedirected = 1;
+ if (battlerAbility == ABILITY_LIGHTNING_ROD)
+ gSpecialStatuses[gActiveBattler].lightningRodRedirected = TRUE;
+ else if (battlerAbility == ABILITY_STORM_DRAIN)
+ gSpecialStatuses[gActiveBattler].stormDrainRedirected = TRUE;
gBattlerTarget = gActiveBattler;
}
}
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
- && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM)
+ && moveTarget & MOVE_TARGET_RANDOM)
{
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
{
@@ -242,10 +428,28 @@ void HandleAction_UseMove(void)
gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK);
}
}
+ else if (moveTarget == MOVE_TARGET_ALLY)
+ {
+ if (IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))
+ gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker);
+ else
+ gBattlerTarget = gBattlerAttacker;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && moveTarget == MOVE_TARGET_FOES_AND_ALLY)
+ {
+ for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
+ {
+ if (gBattlerTarget == gBattlerAttacker)
+ continue;
+ if (IsBattlerAlive(gBattlerTarget))
+ break;
+ }
+ }
else
{
gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker);
- if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
+ if (!IsBattlerAlive(gBattlerTarget))
{
if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))
{
@@ -254,7 +458,7 @@ void HandleAction_UseMove(void)
else
{
gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE);
- if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
+ if (!IsBattlerAlive(gBattlerTarget))
gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK);
}
}
@@ -288,6 +492,10 @@ void HandleAction_UseMove(void)
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
BattleArena_AddMindPoints(gBattlerAttacker);
+ // Record HP of each battler
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ gBattleStruct->hpBefore[i] = gBattleMons[i].hp;
+
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
}
@@ -307,6 +515,8 @@ void HandleAction_Switch(void)
if (gBattleResults.playerSwitchesCounter < 255)
gBattleResults.playerSwitchesCounter++;
+
+ UndoFormChange(gBattlerPartyIndexes[gBattlerAttacker], GetBattlerSide(gBattlerAttacker), TRUE);
}
void HandleAction_UseItem(void)
@@ -315,11 +525,12 @@ void HandleAction_UseItem(void)
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
ClearFuryCutterDestinyBondGrudge(gBattlerAttacker);
- gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8);
+
+ gLastUsedItem = gBattleResources->bufferB[gBattlerAttacker][1] | (gBattleResources->bufferB[gBattlerAttacker][2] << 8);
if (gLastUsedItem <= LAST_BALL) // is ball
{
- gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem];
+ gBattlescriptCurrInstr = BattleScript_BallThrow;
}
else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL)
{
@@ -407,7 +618,7 @@ bool8 TryRunFromBattle(u8 battler)
u8 pyramidMultiplier;
u8 speedVar;
- if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY)
+ if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER)
holdEffect = gEnigmaBerries[battler].holdEffect;
else
holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item);
@@ -420,7 +631,13 @@ bool8 TryRunFromBattle(u8 battler)
gProtectStructs[battler].fleeType = FLEE_ITEM;
effect++;
}
- else if (gBattleMons[battler].ability == ABILITY_RUN_AWAY)
+ #if B_GHOSTS_ESCAPE >= GEN_6
+ else if (IS_BATTLER_OF_TYPE(battler, TYPE_GHOST))
+ {
+ effect++;
+ }
+ #endif
+ else if (GetBattlerAbility(battler) == ABILITY_RUN_AWAY)
{
if (InBattlePyramid())
{
@@ -447,31 +664,32 @@ bool8 TryRunFromBattle(u8 battler)
}
else
{
- if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ u8 runningFromBattler = BATTLE_OPPOSITE(battler);
+ if (!IsBattlerAlive(runningFromBattler))
+ runningFromBattler |= BIT_FLANK;
+
+ if (InBattlePyramid())
{
- if (InBattlePyramid())
- {
- pyramidMultiplier = GetPyramidRunMultiplier();
- speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30);
- if (speedVar > (Random() & 0xFF))
- effect++;
- }
- else if (gBattleMons[battler].speed < gBattleMons[BATTLE_OPPOSITE(battler)].speed)
- {
- speedVar = (gBattleMons[battler].speed * 128) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30);
- if (speedVar > (Random() & 0xFF))
- effect++;
- }
- else // same speed or faster
- {
+ pyramidMultiplier = GetPyramidRunMultiplier();
+ speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[runningFromBattler].speed) + (gBattleStruct->runTries * 30);
+ if (speedVar > (Random() & 0xFF))
effect++;
- }
+ }
+ else if (gBattleMons[battler].speed < gBattleMons[runningFromBattler].speed)
+ {
+ speedVar = (gBattleMons[battler].speed * 128) / (gBattleMons[runningFromBattler].speed) + (gBattleStruct->runTries * 30);
+ if (speedVar > (Random() & 0xFF))
+ effect++;
+ }
+ else // same speed or faster
+ {
+ effect++;
}
gBattleStruct->runTries++;
}
- if (effect)
+ if (effect != 0)
{
gCurrentTurnActionNumber = gBattlersCount;
gBattleOutcome = B_OUTCOME_RAN;
@@ -519,7 +737,7 @@ void HandleAction_Run(void)
}
else
{
- if (gBattleMons[gBattlerAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
+ if (!CanBattlerEscape(gBattlerAttacker))
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ATTACKER_CANT_ESCAPE;
gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString;
@@ -550,7 +768,18 @@ void HandleAction_SafariZoneBallThrow(void)
gBattle_BG0_Y = 0;
gNumSafariBalls--;
gLastUsedItem = ITEM_SAFARI_BALL;
- gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL];
+ gBattlescriptCurrInstr = BattleScript_SafariBallThrow;
+ gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
+}
+
+void HandleAction_ThrowBall(void)
+{
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gLastUsedItem = gLastThrownBall;
+ RemoveBagItem(gLastUsedItem, 1);
+ gBattlescriptCurrInstr = BattleScript_BallThrow;
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
}
@@ -559,8 +788,8 @@ void HandleAction_ThrowPokeblock(void)
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBattlerAttacker][1] - 1;
- gLastUsedItem = gBattleBufferB[gBattlerAttacker][2];
+ gBattleCommunication[MULTISTRING_CHOOSER] = gBattleResources->bufferB[gBattlerAttacker][1] - 1;
+ gLastUsedItem = gBattleResources->bufferB[gBattlerAttacker][2];
if (gBattleResults.pokeblockThrows < 255)
gBattleResults.pokeblockThrows++;
@@ -645,23 +874,26 @@ void HandleAction_NothingIsFainted(void)
gCurrentTurnActionNumber++;
gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber];
gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED
- | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR
- | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_PASSIVE_DAMAGE
+ | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_PASSIVE_DAMAGE
| HITMARKER_OBEYS | HITMARKER_WAKE_UP_CLEAR | HITMARKER_SYNCHRONISE_EFFECT
| HITMARKER_CHARGING | HITMARKER_NEVER_SET);
}
void HandleAction_ActionFinished(void)
{
+ #if B_RECALC_TURN_AFTER_ACTIONS >= GEN_8
+ u8 i, j;
+ u8 battler1 = 0;
+ u8 battler2 = 0;
+ #endif
*(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = PARTY_SIZE;
gCurrentTurnActionNumber++;
gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber];
SpecialStatusesClear();
gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED
- | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR
- | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_PASSIVE_DAMAGE
+ | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_PASSIVE_DAMAGE
| HITMARKER_OBEYS | HITMARKER_WAKE_UP_CLEAR | HITMARKER_SYNCHRONISE_EFFECT
- | HITMARKER_CHARGING | HITMARKER_NEVER_SET);
+ | HITMARKER_CHARGING | HITMARKER_NEVER_SET | HITMARKER_IGNORE_DISGUISE);
gCurrentMove = 0;
gBattleMoveDamage = 0;
@@ -671,22 +903,373 @@ void HandleAction_ActionFinished(void)
gLastLandedMoves[gBattlerAttacker] = 0;
gLastHitByType[gBattlerAttacker] = 0;
gBattleStruct->dynamicMoveType = 0;
- gDynamicBasePower = 0;
+ gBattleScripting.moveendState = 0;
gBattleScripting.moveendState = 0;
gBattleCommunication[3] = 0;
gBattleCommunication[4] = 0;
gBattleScripting.multihitMoveEffect = 0;
gBattleResources->battleScriptsStack->size = 0;
+
+ #if B_RECALC_TURN_AFTER_ACTIONS >= GEN_8
+ // i starts at `gCurrentTurnActionNumber` because we don't want to recalculate turn order for mon that have already
+ // taken action. It's been previously increased, which we want in order to not recalculate the turn of the mon that just finished its action
+ for (i = gCurrentTurnActionNumber; i < gBattlersCount - 1; i++)
+ {
+ for (j = i + 1; j < gBattlersCount; j++)
+ {
+ u8 battler1 = gBattlerByTurnOrder[i];
+ u8 battler2 = gBattlerByTurnOrder[j];
+ // We recalculate order only for action of the same priority. If any action other than switch/move has been taken, they should
+ // have been executed before. The only recalculation needed is for moves/switch. Mega evolution is handled in src/battle_main.c/TryChangeOrder
+ if((gActionsByTurnOrder[i] == B_ACTION_USE_MOVE && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE))
+ {
+ if (GetWhoStrikesFirst(battler1, battler2, FALSE))
+ SwapTurnOrder(i, j);
+ }
+ else if ((gActionsByTurnOrder[i] == B_ACTION_SWITCH && gActionsByTurnOrder[j] == B_ACTION_SWITCH))
+ {
+ if (GetWhoStrikesFirst(battler1, battler2, TRUE)) // If the actions chosen are switching, we recalc order but ignoring the moves
+ SwapTurnOrder(i, j);
+ }
+ }
+ }
+ #endif
}
-#define SOUND_MOVES_END 0xFFFF
-
-static const u16 sSoundMovesTable[] =
+static const u8 sMovesNotAffectedByStench[] =
{
- MOVE_GROWL, MOVE_ROAR, MOVE_SING, MOVE_SUPERSONIC, MOVE_SCREECH, MOVE_SNORE,
- MOVE_UPROAR, MOVE_METAL_SOUND, MOVE_GRASS_WHISTLE, MOVE_HYPER_VOICE, SOUND_MOVES_END
+ [MOVE_AIR_SLASH] = 1,
+ [MOVE_ASTONISH] = 1,
+ [MOVE_BITE] = 1,
+ [MOVE_BONE_CLUB] = 1,
+ [MOVE_DARK_PULSE] = 1,
+ [MOVE_DOUBLE_IRON_BASH] = 1,
+ [MOVE_DRAGON_RUSH] = 1,
+ [MOVE_EXTRASENSORY] = 1,
+ [MOVE_FAKE_OUT] = 1,
+ [MOVE_FIERY_WRATH] = 1,
+ [MOVE_FIRE_FANG] = 1,
+ [MOVE_FLING] = 1,
+ [MOVE_FLOATY_FALL] = 1,
+ [MOVE_HEADBUTT] = 1,
+ [MOVE_HEART_STAMP] = 1,
+ [MOVE_HYPER_FANG] = 1,
+ [MOVE_ICE_FANG] = 1,
+ [MOVE_ICICLE_CRASH] = 1,
+ [MOVE_IRON_HEAD] = 1,
+ [MOVE_NEEDLE_ARM] = 1,
+ [MOVE_NONE] = 1,
+ [MOVE_ROCK_SLIDE] = 1,
+ [MOVE_ROLLING_KICK] = 1,
+ [MOVE_SECRET_POWER] = 1,
+ [MOVE_SKY_ATTACK] = 1,
+ [MOVE_SNORE] = 1,
+ [MOVE_STEAMROLLER] = 1,
+ [MOVE_STOMP] = 1,
+ [MOVE_THUNDER_FANG] = 1,
+ [MOVE_TWISTER] = 1,
+ [MOVE_WATERFALL] = 1,
+ [MOVE_ZEN_HEADBUTT] = 1,
+ [MOVE_ZING_ZAP] = 1,
};
+static const u8 sAbilitiesAffectedByMoldBreaker[] =
+{
+ [ABILITY_BATTLE_ARMOR] = 1,
+ [ABILITY_CLEAR_BODY] = 1,
+ [ABILITY_DAMP] = 1,
+ [ABILITY_DRY_SKIN] = 1,
+ [ABILITY_FILTER] = 1,
+ [ABILITY_FLASH_FIRE] = 1,
+ [ABILITY_FLOWER_GIFT] = 1,
+ [ABILITY_HEATPROOF] = 1,
+ [ABILITY_HYPER_CUTTER] = 1,
+ [ABILITY_IMMUNITY] = 1,
+ [ABILITY_INNER_FOCUS] = 1,
+ [ABILITY_INSOMNIA] = 1,
+ [ABILITY_KEEN_EYE] = 1,
+ [ABILITY_LEAF_GUARD] = 1,
+ [ABILITY_LEVITATE] = 1,
+ [ABILITY_LIGHTNING_ROD] = 1,
+ [ABILITY_LIMBER] = 1,
+ [ABILITY_MAGMA_ARMOR] = 1,
+ [ABILITY_MARVEL_SCALE] = 1,
+ [ABILITY_MOTOR_DRIVE] = 1,
+ [ABILITY_OBLIVIOUS] = 1,
+ [ABILITY_OWN_TEMPO] = 1,
+ [ABILITY_SAND_VEIL] = 1,
+ [ABILITY_SHELL_ARMOR] = 1,
+ [ABILITY_SHIELD_DUST] = 1,
+ [ABILITY_SIMPLE] = 1,
+ [ABILITY_SNOW_CLOAK] = 1,
+ [ABILITY_SOLID_ROCK] = 1,
+ [ABILITY_SOUNDPROOF] = 1,
+ [ABILITY_STICKY_HOLD] = 1,
+ [ABILITY_STORM_DRAIN] = 1,
+ [ABILITY_STURDY] = 1,
+ [ABILITY_SUCTION_CUPS] = 1,
+ [ABILITY_TANGLED_FEET] = 1,
+ [ABILITY_THICK_FAT] = 1,
+ [ABILITY_UNAWARE] = 1,
+ [ABILITY_VITAL_SPIRIT] = 1,
+ [ABILITY_VOLT_ABSORB] = 1,
+ [ABILITY_WATER_ABSORB] = 1,
+ [ABILITY_WATER_VEIL] = 1,
+ [ABILITY_WHITE_SMOKE] = 1,
+ [ABILITY_WONDER_GUARD] = 1,
+ [ABILITY_BIG_PECKS] = 1,
+ [ABILITY_CONTRARY] = 1,
+ [ABILITY_FRIEND_GUARD] = 1,
+ [ABILITY_HEAVY_METAL] = 1,
+ [ABILITY_LIGHT_METAL] = 1,
+ [ABILITY_MAGIC_BOUNCE] = 1,
+ [ABILITY_MULTISCALE] = 1,
+ [ABILITY_SAP_SIPPER] = 1,
+ [ABILITY_TELEPATHY] = 1,
+ [ABILITY_WONDER_SKIN] = 1,
+ [ABILITY_AROMA_VEIL] = 1,
+ [ABILITY_BULLETPROOF] = 1,
+ [ABILITY_FLOWER_VEIL] = 1,
+ [ABILITY_FUR_COAT] = 1,
+ [ABILITY_OVERCOAT] = 1,
+ [ABILITY_SWEET_VEIL] = 1,
+ [ABILITY_DAZZLING] = 1,
+ [ABILITY_DISGUISE] = 1,
+ [ABILITY_FLUFFY] = 1,
+ [ABILITY_QUEENLY_MAJESTY] = 1,
+ [ABILITY_WATER_BUBBLE] = 1,
+ [ABILITY_MIRROR_ARMOR] = 1,
+ [ABILITY_PUNK_ROCK] = 1,
+ [ABILITY_ICE_SCALES] = 1,
+ [ABILITY_ICE_FACE] = 1,
+ [ABILITY_PASTEL_VEIL] = 1,
+};
+
+static const u8 sAbilitiesNotTraced[ABILITIES_COUNT] =
+{
+ [ABILITY_AS_ONE_ICE_RIDER] = 1,
+ [ABILITY_AS_ONE_SHADOW_RIDER] = 1,
+ [ABILITY_BATTLE_BOND] = 1,
+ [ABILITY_COMATOSE] = 1,
+ [ABILITY_DISGUISE] = 1,
+ [ABILITY_FLOWER_GIFT] = 1,
+ [ABILITY_FORECAST] = 1,
+ [ABILITY_GULP_MISSILE] = 1,
+ [ABILITY_HUNGER_SWITCH] = 1,
+ [ABILITY_ICE_FACE] = 1,
+ [ABILITY_ILLUSION] = 1,
+ [ABILITY_IMPOSTER] = 1,
+ [ABILITY_MULTITYPE] = 1,
+ [ABILITY_NEUTRALIZING_GAS] = 1,
+ [ABILITY_NONE] = 1,
+ [ABILITY_POWER_CONSTRUCT] = 1,
+ [ABILITY_POWER_OF_ALCHEMY] = 1,
+ [ABILITY_RECEIVER] = 1,
+ [ABILITY_RKS_SYSTEM] = 1,
+ [ABILITY_SCHOOLING] = 1,
+ [ABILITY_SHIELDS_DOWN] = 1,
+ [ABILITY_STANCE_CHANGE] = 1,
+ [ABILITY_TRACE] = 1,
+ [ABILITY_ZEN_MODE] = 1,
+};
+
+static const u8 sHoldEffectToType[][2] =
+{
+ {HOLD_EFFECT_BUG_POWER, TYPE_BUG},
+ {HOLD_EFFECT_STEEL_POWER, TYPE_STEEL},
+ {HOLD_EFFECT_GROUND_POWER, TYPE_GROUND},
+ {HOLD_EFFECT_ROCK_POWER, TYPE_ROCK},
+ {HOLD_EFFECT_GRASS_POWER, TYPE_GRASS},
+ {HOLD_EFFECT_DARK_POWER, TYPE_DARK},
+ {HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING},
+ {HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC},
+ {HOLD_EFFECT_WATER_POWER, TYPE_WATER},
+ {HOLD_EFFECT_FLYING_POWER, TYPE_FLYING},
+ {HOLD_EFFECT_POISON_POWER, TYPE_POISON},
+ {HOLD_EFFECT_ICE_POWER, TYPE_ICE},
+ {HOLD_EFFECT_GHOST_POWER, TYPE_GHOST},
+ {HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC},
+ {HOLD_EFFECT_FIRE_POWER, TYPE_FIRE},
+ {HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON},
+ {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL},
+ {HOLD_EFFECT_FAIRY_POWER, TYPE_FAIRY},
+};
+
+// percent in UQ_4_12 format
+static const u16 sPercentToModifier[] =
+{
+ UQ_4_12(0.00), // 0
+ UQ_4_12(0.01), // 1
+ UQ_4_12(0.02), // 2
+ UQ_4_12(0.03), // 3
+ UQ_4_12(0.04), // 4
+ UQ_4_12(0.05), // 5
+ UQ_4_12(0.06), // 6
+ UQ_4_12(0.07), // 7
+ UQ_4_12(0.08), // 8
+ UQ_4_12(0.09), // 9
+ UQ_4_12(0.10), // 10
+ UQ_4_12(0.11), // 11
+ UQ_4_12(0.12), // 12
+ UQ_4_12(0.13), // 13
+ UQ_4_12(0.14), // 14
+ UQ_4_12(0.15), // 15
+ UQ_4_12(0.16), // 16
+ UQ_4_12(0.17), // 17
+ UQ_4_12(0.18), // 18
+ UQ_4_12(0.19), // 19
+ UQ_4_12(0.20), // 20
+ UQ_4_12(0.21), // 21
+ UQ_4_12(0.22), // 22
+ UQ_4_12(0.23), // 23
+ UQ_4_12(0.24), // 24
+ UQ_4_12(0.25), // 25
+ UQ_4_12(0.26), // 26
+ UQ_4_12(0.27), // 27
+ UQ_4_12(0.28), // 28
+ UQ_4_12(0.29), // 29
+ UQ_4_12(0.30), // 30
+ UQ_4_12(0.31), // 31
+ UQ_4_12(0.32), // 32
+ UQ_4_12(0.33), // 33
+ UQ_4_12(0.34), // 34
+ UQ_4_12(0.35), // 35
+ UQ_4_12(0.36), // 36
+ UQ_4_12(0.37), // 37
+ UQ_4_12(0.38), // 38
+ UQ_4_12(0.39), // 39
+ UQ_4_12(0.40), // 40
+ UQ_4_12(0.41), // 41
+ UQ_4_12(0.42), // 42
+ UQ_4_12(0.43), // 43
+ UQ_4_12(0.44), // 44
+ UQ_4_12(0.45), // 45
+ UQ_4_12(0.46), // 46
+ UQ_4_12(0.47), // 47
+ UQ_4_12(0.48), // 48
+ UQ_4_12(0.49), // 49
+ UQ_4_12(0.50), // 50
+ UQ_4_12(0.51), // 51
+ UQ_4_12(0.52), // 52
+ UQ_4_12(0.53), // 53
+ UQ_4_12(0.54), // 54
+ UQ_4_12(0.55), // 55
+ UQ_4_12(0.56), // 56
+ UQ_4_12(0.57), // 57
+ UQ_4_12(0.58), // 58
+ UQ_4_12(0.59), // 59
+ UQ_4_12(0.60), // 60
+ UQ_4_12(0.61), // 61
+ UQ_4_12(0.62), // 62
+ UQ_4_12(0.63), // 63
+ UQ_4_12(0.64), // 64
+ UQ_4_12(0.65), // 65
+ UQ_4_12(0.66), // 66
+ UQ_4_12(0.67), // 67
+ UQ_4_12(0.68), // 68
+ UQ_4_12(0.69), // 69
+ UQ_4_12(0.70), // 70
+ UQ_4_12(0.71), // 71
+ UQ_4_12(0.72), // 72
+ UQ_4_12(0.73), // 73
+ UQ_4_12(0.74), // 74
+ UQ_4_12(0.75), // 75
+ UQ_4_12(0.76), // 76
+ UQ_4_12(0.77), // 77
+ UQ_4_12(0.78), // 78
+ UQ_4_12(0.79), // 79
+ UQ_4_12(0.80), // 80
+ UQ_4_12(0.81), // 81
+ UQ_4_12(0.82), // 82
+ UQ_4_12(0.83), // 83
+ UQ_4_12(0.84), // 84
+ UQ_4_12(0.85), // 85
+ UQ_4_12(0.86), // 86
+ UQ_4_12(0.87), // 87
+ UQ_4_12(0.88), // 88
+ UQ_4_12(0.89), // 89
+ UQ_4_12(0.90), // 90
+ UQ_4_12(0.91), // 91
+ UQ_4_12(0.92), // 92
+ UQ_4_12(0.93), // 93
+ UQ_4_12(0.94), // 94
+ UQ_4_12(0.95), // 95
+ UQ_4_12(0.96), // 96
+ UQ_4_12(0.97), // 97
+ UQ_4_12(0.98), // 98
+ UQ_4_12(0.99), // 99
+ UQ_4_12(1.00), // 100
+};
+
+#define X UQ_4_12
+
+static const u16 sTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] =
+{
+// normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(0.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // normal
+ {X(2.0), X(1.0), X(0.5), X(0.5), X(1.0), X(2.0), X(0.5), X(0.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(2.0), X(0.5)}, // fight
+ {X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // flying
+ {X(1.0), X(1.0), X(1.0), X(0.5), X(0.5), X(0.5), X(1.0), X(0.5), X(0.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0)}, // poison
+ {X(1.0), X(1.0), X(0.0), X(2.0), X(1.0), X(2.0), X(0.5), X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // ground
+ {X(1.0), X(0.5), X(2.0), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0)}, // rock
+ {X(1.0), X(0.5), X(0.5), X(0.5), X(1.0), X(1.0), X(1.0), X(0.5), X(0.5), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(1.0), X(2.0), X(0.5)}, // bug
+ #if B_STEEL_RESISTANCES >= GEN_6
+ {X(0.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(1.0)}, // ghost
+ #else
+ {X(0.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(1.0)}, // ghost
+ #endif
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(1.0), X(0.5), X(0.5), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(2.0)}, // steel
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // mystery
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(2.0), X(1.0), X(0.5), X(0.5), X(2.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0)}, // fire
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(0.5), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0)}, // water
+ {X(1.0), X(1.0), X(0.5), X(0.5), X(2.0), X(2.0), X(0.5), X(1.0), X(0.5), X(1.0), X(0.5), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0)}, // grass
+ {X(1.0), X(1.0), X(2.0), X(1.0), X(0.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(0.5), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0)}, // electric
+ {X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(0.0), X(1.0)}, // psychic
+ {X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(0.5), X(0.5), X(2.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0)}, // ice
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(0.0)}, // dragon
+ #if B_STEEL_RESISTANCES >= GEN_6
+ {X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(0.5)}, // dark
+ #else
+ {X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(0.5), X(0.5)}, // dark
+ #endif
+ {X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(2.0), X(1.0)}, // fairy
+};
+
+static const u16 sInverseTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] =
+{
+// normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // normal
+ {X(0.5), X(1.0), X(2.0), X(2.0), X(1.0), X(0.5), X(2.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(0.5), X(2.0)}, // fight
+ {X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // flying
+ {X(1.0), X(1.0), X(1.0), X(2.0), X(2.0), X(2.0), X(1.0), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5)}, // poison
+ {X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(0.5), X(2.0), X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // ground
+ {X(1.0), X(2.0), X(0.5), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0)}, // rock
+ {X(1.0), X(2.0), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(2.0), X(2.0), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(1.0), X(0.5), X(2.0)}, // bug
+ #if B_STEEL_RESISTANCES >= GEN_6
+ {X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(1.0)}, // ghost
+ #else
+ {X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(1.0)}, // ghost
+ #endif
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(2.0), X(1.0), X(2.0), X(1.0), X(0.5), X(1.0), X(1.0), X(0.5)}, // steel
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0)}, // mystery
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(0.5), X(1.0), X(2.0), X(2.0), X(0.5), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0)}, // fire
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(2.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0)}, // water
+ {X(1.0), X(1.0), X(2.0), X(2.0), X(0.5), X(0.5), X(2.0), X(1.0), X(2.0), X(1.0), X(2.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0)}, // grass
+ {X(1.0), X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(2.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0)}, // electric
+ {X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(2.0), X(1.0)}, // psychic
+ {X(1.0), X(1.0), X(0.5), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(2.0), X(0.5), X(1.0), X(1.0), X(2.0), X(0.5), X(1.0), X(1.0)}, // ice
+ {X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(2.0)}, // dragon
+ #if B_STEEL_RESISTANCES >= GEN_6
+ {X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(2.0)}, // dark
+ #else
+ {X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(1.0), X(1.0), X(2.0), X(2.0)}, // dark
+ #endif
+ {X(1.0), X(0.5), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(2.0), X(1.0), X(2.0), X(1.0), X(1.0), X(1.0), X(1.0), X(1.0), X(0.5), X(0.5), X(1.0)}, // fairy
+};
+
+#undef X
+
+// code
u8 GetBattlerForBattleScript(u8 caseId)
{
u8 ret = 0;
@@ -716,7 +1299,7 @@ u8 GetBattlerForBattleScript(u8 caseId)
case BS_ATTACKER_WITH_PARTNER:
case BS_FAINTED_LINK_MULTIPLE_2:
case BS_ATTACKER_SIDE:
- case BS_NOT_ATTACKER_SIDE:
+ case BS_TARGET_SIDE:
case BS_PLAYER1:
ret = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
break;
@@ -729,6 +1312,9 @@ u8 GetBattlerForBattleScript(u8 caseId)
case BS_OPPONENT2:
ret = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
break;
+ case BS_ABILITY_BATTLER:
+ ret = gBattlerAbility;
+ break;
}
return ret;
}
@@ -737,7 +1323,7 @@ void PressurePPLose(u8 target, u8 attacker, u16 move)
{
int moveIndex;
- if (gBattleMons[target].ability != ABILITY_PRESSURE)
+ if (GetBattlerAbility(target) != ABILITY_PRESSURE)
return;
for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
@@ -768,7 +1354,7 @@ void PressurePPLoseOnUsingImprison(u8 attacker)
for (i = 0; i < gBattlersCount; i++)
{
- if (atkSide != GetBattlerSide(i) && gBattleMons[i].ability == ABILITY_PRESSURE)
+ if (atkSide != GetBattlerSide(i) && GetBattlerAbility(i) == ABILITY_PRESSURE)
{
for (j = 0; j < MAX_MON_MOVES; j++)
{
@@ -799,7 +1385,7 @@ void PressurePPLoseOnUsingPerishSong(u8 attacker)
for (i = 0; i < gBattlersCount; i++)
{
- if (gBattleMons[i].ability == ABILITY_PRESSURE && i != attacker)
+ if (GetBattlerAbility(i) == ABILITY_PRESSURE && i != attacker)
{
for (j = 0; j < MAX_MON_MOVES; j++)
{
@@ -823,7 +1409,8 @@ void PressurePPLoseOnUsingPerishSong(u8 attacker)
}
}
-void MarkAllBattlersForControllerExec(void) // unused
+// Unused
+static void MarkAllBattlersForControllerExec(void)
{
int i;
@@ -839,6 +1426,14 @@ void MarkAllBattlersForControllerExec(void) // unused
}
}
+bool32 IsBattlerMarkedForControllerExec(u8 battlerId)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ return (gBattleControllerExecFlags & (gBitTable[battlerId] << 0x1C)) != 0;
+ else
+ return (gBattleControllerExecFlags & (gBitTable[battlerId])) != 0;
+}
+
void MarkBattlerForControllerExec(u8 battlerId)
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
@@ -859,12 +1454,80 @@ void MarkBattlerReceivedLinkData(u8 battlerId)
void CancelMultiTurnMoves(u8 battler)
{
- gBattleMons[battler].status2 &= ~STATUS2_MULTIPLETURNS;
- gBattleMons[battler].status2 &= ~STATUS2_LOCK_CONFUSE;
- gBattleMons[battler].status2 &= ~STATUS2_UPROAR;
- gBattleMons[battler].status2 &= ~STATUS2_BIDE;
+ u8 i;
+ gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS);
+ gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE);
+ gBattleMons[battler].status2 &= ~(STATUS2_UPROAR);
+ gBattleMons[battler].status2 &= ~(STATUS2_BIDE);
- gStatuses3[battler] &= ~STATUS3_SEMI_INVULNERABLE;
+ // Clear battler's semi-invulnerable bits if they are not held by Sky Drop.
+ if (!(gStatuses3[battler] & STATUS3_SKY_DROPPED))
+ gStatuses3[battler] &= ~(STATUS3_SEMI_INVULNERABLE);
+
+ // Check to see if this Pokemon was in the middle of using Sky Drop. If so, release the target.
+ if (gBattleStruct->skyDropTargets[battler] != 0xFF && !(gStatuses3[battler] & STATUS3_SKY_DROPPED))
+ {
+ // Get the target's battler id
+ u8 otherSkyDropper = gBattleStruct->skyDropTargets[battler];
+
+ // Clears sky_dropped and on_air statuses
+ gStatuses3[otherSkyDropper] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR);
+
+ // Makes both attacker and target's sprites visible
+ gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
+ gSprites[gBattlerSpriteIds[otherSkyDropper]].invisible = FALSE;
+
+ // If target was sky dropped in the middle of Outrage/Thrash/Petal Dance,
+ // confuse them upon release and display "confused by fatigue" message & animation.
+ // Don't do this if this CancelMultiTurnMoves is caused by falling asleep via Yawn.
+ if (gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE && gBattleStruct->turnEffectsTracker != 24)
+ {
+ gBattleMons[otherSkyDropper].status2 &= ~(STATUS2_LOCK_CONFUSE);
+
+ // If the target can be confused, confuse them.
+ // Don't use CanBeConfused, can cause issues in edge cases.
+ if (!(GetBattlerAbility(otherSkyDropper) == ABILITY_OWN_TEMPO
+ || gBattleMons[otherSkyDropper].status2 & STATUS2_CONFUSION
+ || IsBattlerTerrainAffected(otherSkyDropper, STATUS_FIELD_MISTY_TERRAIN)))
+ {
+ // Set confused status
+ gBattleMons[otherSkyDropper].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2);
+
+ // If this CancelMultiTurnMoves is occuring due to attackcanceller
+ if (gBattlescriptCurrInstr[0] == 0x0)
+ {
+ gBattleStruct->skyDropTargets[battler] = 0xFE;
+ }
+ // If this CancelMultiTurnMoves is occuring due to VARIOUS_GRAVITY_ON_AIRBORNE_MONS
+ // Reapplying STATUS3_SKY_DROPPED allows for avoiding unecessary messages when Gravity is applied to the target.
+ else if (gBattlescriptCurrInstr[0] == 0x76 && gBattlescriptCurrInstr[2] == 76)
+ {
+ gBattleStruct->skyDropTargets[battler] = 0xFE;
+ gStatuses3[otherSkyDropper] |= STATUS3_SKY_DROPPED;
+ }
+ // If this CancelMultiTurnMoves is occuring due to cancelmultiturnmoves script
+ else if (gBattlescriptCurrInstr[0] == 0x76 && gBattlescriptCurrInstr[2] == 0)
+ {
+ gBattlerAttacker = otherSkyDropper;
+ gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 3;
+ }
+ // If this CancelMultiTurnMoves is occuring due to receiving Sleep/Freeze status
+ else if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT)
+ {
+ gBattlerAttacker = otherSkyDropper;
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_ThrashConfuses - 1;
+ }
+ }
+ }
+
+ // Clear skyDropTargets data, unless this CancelMultiTurnMoves is caused by Yawn, attackcanceler, or VARIOUS_GRAVITY_ON_AIRBORNE_MONS
+ if (!(gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE) && gBattleStruct->skyDropTargets[battler] < 4)
+ {
+ gBattleStruct->skyDropTargets[battler] = 0xFF;
+ gBattleStruct->skyDropTargets[otherSkyDropper] = 0xFF;
+ }
+ }
gDisableStructs[battler].rolloutTimer = 0;
gDisableStructs[battler].furyCutterCounter = 0;
@@ -873,14 +1536,17 @@ void CancelMultiTurnMoves(u8 battler)
bool8 WasUnableToUseMove(u8 battler)
{
if (gProtectStructs[battler].prlzImmobility
- || gProtectStructs[battler].targetNotAffected
|| gProtectStructs[battler].usedImprisonedMove
|| gProtectStructs[battler].loveImmobility
|| gProtectStructs[battler].usedDisabledMove
|| gProtectStructs[battler].usedTauntedMove
+ || gProtectStructs[battler].usedGravityPreventedMove
+ || gProtectStructs[battler].usedHealBlockedMove
|| gProtectStructs[battler].flag2Unknown
|| gProtectStructs[battler].flinchImmobility
- || gProtectStructs[battler].confusionSelfDmg)
+ || gProtectStructs[battler].confusionSelfDmg
+ || gProtectStructs[battler].powderSelfDmg
+ || gProtectStructs[battler].usedThroatChopPreventedMove)
return TRUE;
else
return FALSE;
@@ -888,6 +1554,50 @@ bool8 WasUnableToUseMove(u8 battler)
void PrepareStringBattle(u16 stringId, u8 battler)
{
+ u32 targetSide = GetBattlerSide(gBattlerTarget);
+ u16 battlerAbility = GetBattlerAbility(battler);
+ u16 targetAbility = GetBattlerAbility(gBattlerTarget);
+ // Support for Contrary ability.
+ // If a move attempted to raise stat - print "won't increase".
+ // If a move attempted to lower stat - print "won't decrease".
+ if (stringId == STRINGID_STATSWONTDECREASE && !(gBattleScripting.statChanger & STAT_BUFF_NEGATIVE))
+ stringId = STRINGID_STATSWONTINCREASE;
+ else if (stringId == STRINGID_STATSWONTINCREASE && gBattleScripting.statChanger & STAT_BUFF_NEGATIVE)
+ stringId = STRINGID_STATSWONTDECREASE;
+
+ else if (stringId == STRINGID_STATSWONTDECREASE2 && battlerAbility == ABILITY_CONTRARY)
+ stringId = STRINGID_STATSWONTINCREASE2;
+ else if (stringId == STRINGID_STATSWONTINCREASE2 && battlerAbility == ABILITY_CONTRARY)
+ stringId = STRINGID_STATSWONTDECREASE2;
+
+ // Check Defiant and Competitive stat raise whenever a stat is lowered.
+ else if ((stringId == STRINGID_DEFENDERSSTATFELL || stringId == STRINGID_PKMNCUTSATTACKWITH)
+ && ((targetAbility == ABILITY_DEFIANT && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN))
+ || (targetAbility == ABILITY_COMPETITIVE && CompareStat(gBattlerTarget, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)))
+ && gSpecialStatuses[gBattlerTarget].changedStatsBattlerId != BATTLE_PARTNER(gBattlerTarget)
+ && ((gSpecialStatuses[gBattlerTarget].changedStatsBattlerId != gBattlerTarget) || gBattleScripting.stickyWebStatDrop == 1)
+ && !(gBattleScripting.stickyWebStatDrop == 1 && gSideTimers[targetSide].stickyWebBattlerSide == targetSide)) // Sticky Web must have been set by the foe
+ {
+ gBattleScripting.stickyWebStatDrop = 0;
+ gBattlerAbility = gBattlerTarget;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityRaisesDefenderStat;
+ if (targetAbility == ABILITY_DEFIANT)
+ SET_STATCHANGER(STAT_ATK, 2, FALSE);
+ else
+ SET_STATCHANGER(STAT_SPATK, 2, FALSE);
+ }
+#if B_UPDATED_INTIMIDATE >= GEN_8
+ else if (stringId == STRINGID_PKMNCUTSATTACKWITH && targetAbility == ABILITY_RATTLED
+ && CompareStat(gBattlerTarget, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ gBattlerAbility = gBattlerTarget;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityRaisesDefenderStat;
+ SET_STATCHANGER(STAT_SPEED, 1, FALSE);
+ }
+#endif
+
gActiveBattler = battler;
BtlController_EmitPrintString(BUFFER_A, stringId);
MarkBattlerForControllerExec(gActiveBattler);
@@ -956,12 +1666,72 @@ void BattleScriptPop(void)
gBattlescriptCurrInstr = gBattleResources->battleScriptsStack->ptr[--gBattleResources->battleScriptsStack->size];
}
+static bool32 IsGravityPreventingMove(u32 move)
+{
+ if (!(gFieldStatuses & STATUS_FIELD_GRAVITY))
+ return FALSE;
+
+ switch (move)
+ {
+ case MOVE_BOUNCE:
+ case MOVE_FLY:
+ case MOVE_FLYING_PRESS:
+ case MOVE_HIGH_JUMP_KICK:
+ case MOVE_JUMP_KICK:
+ case MOVE_MAGNET_RISE:
+ case MOVE_SKY_DROP:
+ case MOVE_SPLASH:
+ case MOVE_TELEKINESIS:
+ case MOVE_FLOATY_FALL:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsHealBlockPreventingMove(u32 battler, u32 move)
+{
+ if (!(gStatuses3[battler] & STATUS3_HEAL_BLOCK))
+ return FALSE;
+
+ switch (gBattleMoves[move].effect)
+ {
+#if B_HEAL_BLOCKING >= GEN_6
+ case EFFECT_ABSORB:
+ case EFFECT_STRENGTH_SAP:
+ case EFFECT_DREAM_EATER:
+#endif
+ case EFFECT_MORNING_SUN:
+ case EFFECT_SYNTHESIS:
+ case EFFECT_MOONLIGHT:
+ case EFFECT_RESTORE_HP:
+ case EFFECT_REST:
+ case EFFECT_ROOST:
+ case EFFECT_HEALING_WISH:
+ case EFFECT_WISH:
+ case EFFECT_HEAL_PULSE:
+ case EFFECT_JUNGLE_HEALING:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+static bool32 IsBelchPreventingMove(u32 battler, u32 move)
+{
+ if (gBattleMoves[move].effect != EFFECT_BELCH)
+ return FALSE;
+
+ return !(gBattleStruct->ateBerry[battler & BIT_SIDE] & gBitTable[gBattlerPartyIndexes[battler]]);
+}
+
u8 TrySetCantSelectMoveBattleScript(void)
{
- u8 limitations = 0;
- u16 move = gBattleMons[gActiveBattler].moves[gBattleBufferB[gActiveBattler][2]];
- u8 holdEffect;
- u16* choicedMove = &gBattleStruct->choicedMove[gActiveBattler];
+ u32 limitations = 0;
+ u8 moveId = gBattleResources->bufferB[gActiveBattler][2] & ~RET_MEGA_EVOLUTION;
+ u32 move = gBattleMons[gActiveBattler].moves[moveId];
+ u32 holdEffect = GetBattlerHoldEffect(gActiveBattler, TRUE);
+ u16 *choicedMove = &gBattleStruct->choicedMove[gActiveBattler];
if (gDisableStructs[gActiveBattler].disabledMove == move && move != MOVE_NONE)
{
@@ -975,7 +1745,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
else
{
gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingDisabledMove;
- limitations = 1;
+ limitations++;
}
}
@@ -994,7 +1764,7 @@ u8 TrySetCantSelectMoveBattleScript(void)
}
}
- if (gDisableStructs[gActiveBattler].tauntTimer != 0 && gBattleMoves[move].power == 0)
+ if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].tauntTimer != 0 && gBattleMoves[move].power == 0)
{
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
@@ -1009,7 +1779,22 @@ u8 TrySetCantSelectMoveBattleScript(void)
}
}
- if (GetImprisonedMovesCount(gActiveBattler, move))
+ if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].throatChopTimer != 0 && gBattleMoves[move].flags & FLAG_SOUND)
+ {
+ gCurrentMove = move;
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveThroatChopInPalace;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
+ }
+ else
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveThroatChop;
+ limitations++;
+ }
+ }
+
+ if (!gBattleStruct->zmove.active && GetImprisonedMovesCount(gActiveBattler, move))
{
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
@@ -1024,14 +1809,68 @@ u8 TrySetCantSelectMoveBattleScript(void)
}
}
- if (gBattleMons[gActiveBattler].item == ITEM_ENIGMA_BERRY)
- holdEffect = gEnigmaBerries[gActiveBattler].holdEffect;
- else
- holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item);
+ if (!gBattleStruct->zmove.active && IsGravityPreventingMove(move))
+ {
+ gCurrentMove = move;
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveGravityInPalace;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
+ }
+ else
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveGravity;
+ limitations++;
+ }
+ }
+
+ if (!gBattleStruct->zmove.active && IsHealBlockPreventingMove(gActiveBattler, move))
+ {
+ gCurrentMove = move;
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveHealBlockInPalace;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
+ }
+ else
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveHealBlock;
+ limitations++;
+ }
+ }
+
+ if (!gBattleStruct->zmove.active && IsBelchPreventingMove(gActiveBattler, move))
+ {
+ gCurrentMove = move;
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedBelchInPalace;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
+ }
+ else
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedBelch;
+ limitations++;
+ }
+ }
+
+ if (move == MOVE_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[gActiveBattler].item) != POCKET_BERRIES)
+ {
+ gCurrentMove = move;
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ gPalaceSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedBelchInPalace;
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
+ }
+ else
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedStuffCheeks;
+ limitations++;
+ }
+ }
gPotentialItemEffectBattler = gActiveBattler;
-
- if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move)
+ if (HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move)
{
gCurrentMove = *choicedMove;
gLastUsedItem = gBattleMons[gActiveBattler].item;
@@ -1045,8 +1884,37 @@ u8 TrySetCantSelectMoveBattleScript(void)
limitations++;
}
}
+ else if (holdEffect == HOLD_EFFECT_ASSAULT_VEST && gBattleMoves[move].power == 0 && move != MOVE_ME_FIRST)
+ {
+ gCurrentMove = move;
+ gLastUsedItem = gBattleMons[gActiveBattler].item;
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
+ }
+ else
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveAssaultVest;
+ limitations++;
+ }
+ }
+ if ((GetBattlerAbility(gActiveBattler) == ABILITY_GORILLA_TACTICS) && *choicedMove != MOVE_NONE
+ && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move)
+ {
+ gCurrentMove = *choicedMove;
+ gLastUsedItem = gBattleMons[gActiveBattler].item;
+ if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
+ {
+ gProtectStructs[gActiveBattler].palaceUnableToUseMove = TRUE;
+ }
+ else
+ {
+ gSelectionBattleScripts[gActiveBattler] = BattleScript_SelectingNotAllowedMoveGorillaTactics;
+ limitations++;
+ }
+ }
- if (gBattleMons[gActiveBattler].pp[gBattleBufferB[gActiveBattler][2]] == 0)
+ if (gBattleMons[gActiveBattler].pp[moveId] == 0)
{
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
{
@@ -1064,15 +1932,10 @@ u8 TrySetCantSelectMoveBattleScript(void)
u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check)
{
- u8 holdEffect;
+ u8 holdEffect = GetBattlerHoldEffect(battlerId, TRUE);
u16 *choicedMove = &gBattleStruct->choicedMove[battlerId];
s32 i;
- if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
- holdEffect = gEnigmaBerries[battlerId].holdEffect;
- else
- holdEffect = ItemId_GetHoldEffect(gBattleMons[battlerId].item);
-
gPotentialItemEffectBattler = battlerId;
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -1081,25 +1944,46 @@ u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check)
if (gBattleMons[battlerId].moves[i] == MOVE_NONE && check & MOVE_LIMITATION_ZEROMOVE)
unusableMoves |= gBitTable[i];
// No PP
- if (gBattleMons[battlerId].pp[i] == 0 && check & MOVE_LIMITATION_PP)
+ else if (gBattleMons[battlerId].pp[i] == 0 && check & MOVE_LIMITATION_PP)
unusableMoves |= gBitTable[i];
// Disable
- if (gBattleMons[battlerId].moves[i] == gDisableStructs[battlerId].disabledMove && check & MOVE_LIMITATION_DISABLED)
+ else if (gBattleMons[battlerId].moves[i] == gDisableStructs[battlerId].disabledMove && check & MOVE_LIMITATION_DISABLED)
unusableMoves |= gBitTable[i];
// Torment
- if (gBattleMons[battlerId].moves[i] == gLastMoves[battlerId] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[battlerId].status2 & STATUS2_TORMENT)
+ else if (gBattleMons[battlerId].moves[i] == gLastMoves[battlerId] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[battlerId].status2 & STATUS2_TORMENT)
unusableMoves |= gBitTable[i];
// Taunt
- if (gDisableStructs[battlerId].tauntTimer && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[battlerId].moves[i]].power == 0)
+ else if (gDisableStructs[battlerId].tauntTimer && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[battlerId].moves[i]].power == 0)
unusableMoves |= gBitTable[i];
// Imprison
- if (GetImprisonedMovesCount(battlerId, gBattleMons[battlerId].moves[i]) && check & MOVE_LIMITATION_IMPRISON)
+ else if (GetImprisonedMovesCount(battlerId, gBattleMons[battlerId].moves[i]) && check & MOVE_LIMITATION_IMPRISON)
unusableMoves |= gBitTable[i];
// Encore
- if (gDisableStructs[battlerId].encoreTimer && gDisableStructs[battlerId].encoredMove != gBattleMons[battlerId].moves[i])
+ else if (gDisableStructs[battlerId].encoreTimer && gDisableStructs[battlerId].encoredMove != gBattleMons[battlerId].moves[i])
unusableMoves |= gBitTable[i];
- // Choice Band
- if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != gBattleMons[battlerId].moves[i])
+ // Choice Items
+ else if (HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != gBattleMons[battlerId].moves[i])
+ unusableMoves |= gBitTable[i];
+ // Assault Vest
+ else if (holdEffect == HOLD_EFFECT_ASSAULT_VEST && gBattleMoves[gBattleMons[battlerId].moves[i]].power == 0 && gBattleMons[battlerId].moves[i] != MOVE_ME_FIRST)
+ unusableMoves |= gBitTable[i];
+ // Gravity
+ else if (IsGravityPreventingMove(gBattleMons[battlerId].moves[i]))
+ unusableMoves |= gBitTable[i];
+ // Heal Block
+ else if (IsHealBlockPreventingMove(battlerId, gBattleMons[battlerId].moves[i]))
+ unusableMoves |= gBitTable[i];
+ // Belch
+ else if (IsBelchPreventingMove(battlerId, gBattleMons[battlerId].moves[i]))
+ unusableMoves |= gBitTable[i];
+ // Throat Chop
+ else if (gDisableStructs[battlerId].throatChopTimer && gBattleMoves[gBattleMons[battlerId].moves[i]].flags & FLAG_SOUND)
+ unusableMoves |= gBitTable[i];
+ // Stuff Cheeks
+ else if (gBattleMons[battlerId].moves[i] == MOVE_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[gActiveBattler].item) != POCKET_BERRIES)
+ unusableMoves |= gBitTable[i];
+ // Gorilla Tactics
+ else if (GetBattlerAbility(battlerId) == ABILITY_GORILLA_TACTICS && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != gBattleMons[battlerId].moves[i])
unusableMoves |= gBitTable[i];
}
return unusableMoves;
@@ -1108,8 +1992,7 @@ u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check)
#define ALL_MOVES_MASK ((1 << MAX_MON_MOVES) - 1)
bool8 AreAllMovesUnusable(void)
{
- u8 unusable;
- unusable = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL);
+ u8 unusable = CheckMoveLimitations(gActiveBattler, 0, MOVE_LIMITATIONS_ALL);
if (unusable == ALL_MOVES_MASK) // All moves are unusable.
{
@@ -1149,25 +2032,91 @@ u8 GetImprisonedMovesCount(u8 battlerId, u16 move)
return imprisonedMoves;
}
+void RestoreBattlerOriginalTypes(u8 battlerId)
+{
+ gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1;
+ gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2;
+}
+
+void TryToApplyMimicry(u8 battlerId, bool8 various)
+{
+ u32 moveType, move;
+
+ GET_MOVE_TYPE(move, moveType);
+ switch (gFieldStatuses)
+ {
+ case STATUS_FIELD_ELECTRIC_TERRAIN:
+ moveType = TYPE_ELECTRIC;
+ break;
+ case STATUS_FIELD_MISTY_TERRAIN:
+ moveType = TYPE_FAIRY;
+ break;
+ case STATUS_FIELD_GRASSY_TERRAIN:
+ moveType = TYPE_GRASS;
+ break;
+ case STATUS_FIELD_PSYCHIC_TERRAIN:
+ moveType = TYPE_PSYCHIC;
+ break;
+ default:
+ moveType = 0;
+ break;
+ }
+
+ if (moveType != 0 && !IS_BATTLER_OF_TYPE(battlerId, moveType))
+ {
+ SET_BATTLER_TYPE(battlerId, moveType);
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, battlerId, gBattlerPartyIndexes[battlerId])
+ PREPARE_TYPE_BUFFER(gBattleTextBuff2, moveType);
+ if (!various)
+ BattleScriptPushCursorAndCallback(BattleScript_MimicryActivatesEnd3);
+ }
+}
+
+void TryToRevertMimicry(void)
+{
+ s32 i;
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (GetBattlerAbility(i) == ABILITY_MIMICRY)
+ RestoreBattlerOriginalTypes(i);
+ }
+}
+
enum
{
ENDTURN_ORDER,
ENDTURN_REFLECT,
ENDTURN_LIGHT_SCREEN,
+ ENDTURN_AURORA_VEIL,
ENDTURN_MIST,
+ ENDTURN_LUCKY_CHANT,
ENDTURN_SAFEGUARD,
+ ENDTURN_TAILWIND,
ENDTURN_WISH,
ENDTURN_RAIN,
ENDTURN_SANDSTORM,
ENDTURN_SUN,
ENDTURN_HAIL,
+ ENDTURN_GRAVITY,
+ ENDTURN_WATER_SPORT,
+ ENDTURN_MUD_SPORT,
+ ENDTURN_TRICK_ROOM,
+ ENDTURN_WONDER_ROOM,
+ ENDTURN_MAGIC_ROOM,
+ ENDTURN_ELECTRIC_TERRAIN,
+ ENDTURN_MISTY_TERRAIN,
+ ENDTURN_GRASSY_TERRAIN,
+ ENDTURN_PSYCHIC_TERRAIN,
+ ENDTURN_ION_DELUGE,
+ ENDTURN_FAIRY_LOCK,
+ ENDTURN_RETALIATE,
ENDTURN_FIELD_COUNT,
};
u8 DoFieldEndTurnEffects(void)
{
u8 effect = 0;
- s32 i;
for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount && gAbsentBattlerFlags & gBitTable[gBattlerAttacker]; gBattlerAttacker++)
{
@@ -1178,6 +2127,7 @@ u8 DoFieldEndTurnEffects(void)
do
{
+ s32 i;
u8 side;
switch (gBattleStruct->turnCountersTracker)
@@ -1197,12 +2147,8 @@ u8 DoFieldEndTurnEffects(void)
}
}
- // It's stupid, but won't match without it
- {
- u8* var = &gBattleStruct->turnCountersTracker;
- (*var)++;
- gBattleStruct->turnSideTracker = 0;
- }
+ gBattleStruct->turnCountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
// fall through
case ENDTURN_REFLECT:
while (gBattleStruct->turnSideTracker < 2)
@@ -1220,10 +2166,10 @@ u8 DoFieldEndTurnEffects(void)
}
}
gBattleStruct->turnSideTracker++;
- if (effect)
+ if (effect != 0)
break;
}
- if (!effect)
+ if (effect == 0)
{
gBattleStruct->turnCountersTracker++;
gBattleStruct->turnSideTracker = 0;
@@ -1246,7 +2192,33 @@ u8 DoFieldEndTurnEffects(void)
}
}
gBattleStruct->turnSideTracker++;
- if (effect)
+ if (effect != 0)
+ break;
+ }
+ if (effect == 0)
+ {
+ gBattleStruct->turnCountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
+ }
+ break;
+ case ENDTURN_AURORA_VEIL:
+ while (gBattleStruct->turnSideTracker < 2)
+ {
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].auroraVeilBattlerId;
+ if (gSideStatuses[side] & SIDE_STATUS_AURORA_VEIL)
+ {
+ if (--gSideTimers[side].auroraVeilTimer == 0)
+ {
+ gSideStatuses[side] &= ~SIDE_STATUS_AURORA_VEIL;
+ BattleScriptExecute(BattleScript_SideStatusWoreOff);
+ gBattleCommunication[MULTISTRING_CHOOSER] = side;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_AURORA_VEIL);
+ effect++;
+ }
+ }
+ gBattleStruct->turnSideTracker++;
+ if (effect != 0)
break;
}
if (!effect)
@@ -1260,8 +2232,7 @@ u8 DoFieldEndTurnEffects(void)
{
side = gBattleStruct->turnSideTracker;
gActiveBattler = gBattlerAttacker = gSideTimers[side].mistBattlerId;
- if (gSideTimers[side].mistTimer != 0
- && --gSideTimers[side].mistTimer == 0)
+ if (gSideTimers[side].mistTimer != 0 && --gSideTimers[side].mistTimer == 0)
{
gSideStatuses[side] &= ~SIDE_STATUS_MIST;
BattleScriptExecute(BattleScript_SideStatusWoreOff);
@@ -1270,10 +2241,10 @@ u8 DoFieldEndTurnEffects(void)
effect++;
}
gBattleStruct->turnSideTracker++;
- if (effect)
+ if (effect != 0)
break;
}
- if (!effect)
+ if (effect == 0)
{
gBattleStruct->turnCountersTracker++;
gBattleStruct->turnSideTracker = 0;
@@ -1294,7 +2265,55 @@ u8 DoFieldEndTurnEffects(void)
}
}
gBattleStruct->turnSideTracker++;
- if (effect)
+ if (effect != 0)
+ break;
+ }
+ if (effect == 0)
+ {
+ gBattleStruct->turnCountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
+ }
+ break;
+ case ENDTURN_LUCKY_CHANT:
+ while (gBattleStruct->turnSideTracker < 2)
+ {
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].luckyChantBattlerId;
+ if (gSideStatuses[side] & SIDE_STATUS_LUCKY_CHANT)
+ {
+ if (--gSideTimers[side].luckyChantTimer == 0)
+ {
+ gSideStatuses[side] &= ~SIDE_STATUS_LUCKY_CHANT;
+ BattleScriptExecute(BattleScript_LuckyChantEnds);
+ effect++;
+ }
+ }
+ gBattleStruct->turnSideTracker++;
+ if (effect != 0)
+ break;
+ }
+ if (!effect)
+ {
+ gBattleStruct->turnCountersTracker++;
+ gBattleStruct->turnSideTracker = 0;
+ }
+ break;
+ case ENDTURN_TAILWIND:
+ while (gBattleStruct->turnSideTracker < 2)
+ {
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].tailwindBattlerId;
+ if (gSideStatuses[side] & SIDE_STATUS_TAILWIND)
+ {
+ if (--gSideTimers[side].tailwindTimer == 0)
+ {
+ gSideStatuses[side] &= ~SIDE_STATUS_TAILWIND;
+ BattleScriptExecute(BattleScript_TailwindEnds);
+ effect++;
+ }
+ }
+ gBattleStruct->turnSideTracker++;
+ if (effect != 0)
break;
}
if (!effect)
@@ -1316,10 +2335,10 @@ u8 DoFieldEndTurnEffects(void)
effect++;
}
gBattleStruct->turnSideTracker++;
- if (effect)
+ if (effect != 0)
break;
}
- if (!effect)
+ if (effect == 0)
{
gBattleStruct->turnCountersTracker++;
}
@@ -1327,7 +2346,8 @@ u8 DoFieldEndTurnEffects(void)
case ENDTURN_RAIN:
if (gBattleWeather & B_WEATHER_RAIN)
{
- if (!(gBattleWeather & B_WEATHER_RAIN_PERMANENT))
+ if (!(gBattleWeather & B_WEATHER_RAIN_PERMANENT)
+ && !(gBattleWeather & B_WEATHER_RAIN_PRIMAL))
{
if (--gWishFutureKnock.weatherDuration == 0)
{
@@ -1377,7 +2397,9 @@ u8 DoFieldEndTurnEffects(void)
case ENDTURN_SUN:
if (gBattleWeather & B_WEATHER_SUN)
{
- if (!(gBattleWeather & B_WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
+ if (!(gBattleWeather & B_WEATHER_SUN_PERMANENT)
+ && !(gBattleWeather & B_WEATHER_SUN_PRIMAL)
+ && --gWishFutureKnock.weatherDuration == 0)
{
gBattleWeather &= ~B_WEATHER_SUN_TEMPORARY;
gBattlescriptCurrInstr = BattleScript_SunlightFaded;
@@ -1395,7 +2417,7 @@ u8 DoFieldEndTurnEffects(void)
case ENDTURN_HAIL:
if (gBattleWeather & B_WEATHER_HAIL)
{
- if (--gWishFutureKnock.weatherDuration == 0)
+ if (!(gBattleWeather & B_WEATHER_HAIL_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
{
gBattleWeather &= ~B_WEATHER_HAIL_TEMPORARY;
gBattlescriptCurrInstr = BattleScript_SandStormHailEnds;
@@ -1412,17 +2434,142 @@ u8 DoFieldEndTurnEffects(void)
}
gBattleStruct->turnCountersTracker++;
break;
+ case ENDTURN_TRICK_ROOM:
+ if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && --gFieldTimers.trickRoomTimer == 0)
+ {
+ gFieldStatuses &= ~STATUS_FIELD_TRICK_ROOM;
+ BattleScriptExecute(BattleScript_TrickRoomEnds);
+ effect++;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_WONDER_ROOM:
+ if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM && --gFieldTimers.wonderRoomTimer == 0)
+ {
+ gFieldStatuses &= ~STATUS_FIELD_WONDER_ROOM;
+ BattleScriptExecute(BattleScript_WonderRoomEnds);
+ effect++;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_MAGIC_ROOM:
+ if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM && --gFieldTimers.magicRoomTimer == 0)
+ {
+ gFieldStatuses &= ~STATUS_FIELD_MAGIC_ROOM;
+ BattleScriptExecute(BattleScript_MagicRoomEnds);
+ effect++;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_ELECTRIC_TERRAIN:
+ if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN
+ && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0))
+ {
+ gFieldStatuses &= ~(STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT);
+ TryToRevertMimicry();
+ BattleScriptExecute(BattleScript_ElectricTerrainEnds);
+ effect++;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_MISTY_TERRAIN:
+ if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN
+ && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0))
+ {
+ gFieldStatuses &= ~STATUS_FIELD_MISTY_TERRAIN;
+ TryToRevertMimicry();
+ BattleScriptExecute(BattleScript_MistyTerrainEnds);
+ effect++;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_GRASSY_TERRAIN:
+ if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
+ {
+ if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT)
+ && (gFieldTimers.terrainTimer == 0 || --gFieldTimers.terrainTimer == 0))
+ {
+ gFieldStatuses &= ~STATUS_FIELD_GRASSY_TERRAIN;
+ TryToRevertMimicry();
+ }
+ BattleScriptExecute(BattleScript_GrassyTerrainHeals);
+ effect++;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_PSYCHIC_TERRAIN:
+ if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN
+ && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0))
+ {
+ gFieldStatuses &= ~STATUS_FIELD_PSYCHIC_TERRAIN;
+ TryToRevertMimicry();
+ BattleScriptExecute(BattleScript_PsychicTerrainEnds);
+ effect++;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_WATER_SPORT:
+ #if B_SPORT_TURNS >= GEN_6
+ if (gFieldStatuses & STATUS_FIELD_WATERSPORT && --gFieldTimers.waterSportTimer == 0)
+ {
+ gFieldStatuses &= ~STATUS_FIELD_WATERSPORT;
+ BattleScriptExecute(BattleScript_WaterSportEnds);
+ effect++;
+ }
+ #endif
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_MUD_SPORT:
+ #if B_SPORT_TURNS >= GEN_6
+ if (gFieldStatuses & STATUS_FIELD_MUDSPORT && --gFieldTimers.mudSportTimer == 0)
+ {
+ gFieldStatuses &= ~STATUS_FIELD_MUDSPORT;
+ BattleScriptExecute(BattleScript_MudSportEnds);
+ effect++;
+ }
+ #endif
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_GRAVITY:
+ if (gFieldStatuses & STATUS_FIELD_GRAVITY && --gFieldTimers.gravityTimer == 0)
+ {
+ gFieldStatuses &= ~STATUS_FIELD_GRAVITY;
+ BattleScriptExecute(BattleScript_GravityEnds);
+ effect++;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_ION_DELUGE:
+ gFieldStatuses &= ~STATUS_FIELD_ION_DELUGE;
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_FAIRY_LOCK:
+ if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK && --gFieldTimers.fairyLockTimer == 0)
+ {
+ gFieldStatuses &= ~STATUS_FIELD_FAIRY_LOCK;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
+ case ENDTURN_RETALIATE:
+ if (gSideTimers[B_SIDE_PLAYER].retaliateTimer > 0)
+ gSideTimers[B_SIDE_PLAYER].retaliateTimer--;
+ if (gSideTimers[B_SIDE_OPPONENT].retaliateTimer > 0)
+ gSideTimers[B_SIDE_OPPONENT].retaliateTimer--;
+ gBattleStruct->turnCountersTracker++;
+ break;
case ENDTURN_FIELD_COUNT:
effect++;
break;
}
} while (effect == 0);
+
return (gBattleMainFunc != BattleTurnPassed);
}
enum
{
ENDTURN_INGRAIN,
+ ENDTURN_AQUA_RING,
ENDTURN_ABILITIES,
ENDTURN_ITEMS1,
ENDTURN_LEECH_SEED,
@@ -1432,21 +2579,55 @@ enum
ENDTURN_NIGHTMARES,
ENDTURN_CURSE,
ENDTURN_WRAP,
+ ENDTURN_OCTOLOCK,
ENDTURN_UPROAR,
ENDTURN_THRASH,
+ ENDTURN_FLINCH,
ENDTURN_DISABLE,
ENDTURN_ENCORE,
+ ENDTURN_MAGNET_RISE,
+ ENDTURN_TELEKINESIS,
+ ENDTURN_HEALBLOCK,
+ ENDTURN_EMBARGO,
ENDTURN_LOCK_ON,
ENDTURN_CHARGE,
+ ENDTURN_LASER_FOCUS,
ENDTURN_TAUNT,
ENDTURN_YAWN,
ENDTURN_ITEMS2,
+ ENDTURN_ORBS,
+ ENDTURN_ROOST,
+ ENDTURN_ELECTRIFY,
+ ENDTURN_POWDER,
+ ENDTURN_THROAT_CHOP,
+ ENDTURN_SLOW_START,
+ ENDTURN_PLASMA_FISTS,
ENDTURN_BATTLER_COUNT
};
+// Ingrain, Leech Seed, Strength Sap and Aqua Ring
+s32 GetDrainedBigRootHp(u32 battler, s32 hp)
+{
+ if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_BIG_ROOT)
+ hp = (hp * 1300) / 1000;
+ if (hp == 0)
+ hp = 1;
+
+ return hp * -1;
+}
+
+#define MAGIC_GUARD_CHECK \
+if (ability == ABILITY_MAGIC_GUARD) \
+{\
+ RecordAbilityBattle(gActiveBattler, ability);\
+ gBattleStruct->turnEffectsTracker++;\
+ break;\
+}
+
+
u8 DoBattlerEndTurnEffects(void)
{
- u8 effect = 0;
+ u32 ability, i, effect = 0;
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK);
while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= ENDTURN_BATTLER_COUNT)
@@ -1455,58 +2636,93 @@ u8 DoBattlerEndTurnEffects(void)
if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
{
gBattleStruct->turnEffectsBattlerId++;
+ continue;
}
- else
+
+ ability = GetBattlerAbility(gActiveBattler);
+ switch (gBattleStruct->turnEffectsTracker)
{
- switch (gBattleStruct->turnEffectsTracker)
+ case ENDTURN_INGRAIN: // ingrain
+ if ((gStatuses3[gActiveBattler] & STATUS3_ROOTED)
+ && !BATTLER_MAX_HP(gActiveBattler)
+ && !(gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK)
+ && gBattleMons[gActiveBattler].hp != 0)
{
- case ENDTURN_INGRAIN: // ingrain
- if ((gStatuses3[gActiveBattler] & STATUS3_ROOTED)
- && gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP
- && gBattleMons[gActiveBattler].hp != 0)
+ gBattleMoveDamage = GetDrainedBigRootHp(gActiveBattler, gBattleMons[gActiveBattler].maxHP / 16);
+ BattleScriptExecute(BattleScript_IngrainTurnHeal);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_AQUA_RING: // aqua ring
+ if ((gStatuses3[gActiveBattler] & STATUS3_AQUA_RING)
+ && !BATTLER_MAX_HP(gActiveBattler)
+ && !(gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK)
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ gBattleMoveDamage = GetDrainedBigRootHp(gActiveBattler, gBattleMons[gActiveBattler].maxHP / 16);
+ BattleScriptExecute(BattleScript_AquaRingHeal);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_ABILITIES: // end turn abilities
+ if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBattler, 0, 0, 0))
+ effect++;
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_ITEMS1: // item effects
+ if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, FALSE))
+ effect++;
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_ITEMS2: // item effects again
+ if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, TRUE))
+ effect++;
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_ORBS:
+ if (ItemBattleEffects(ITEMEFFECT_ORBS, gActiveBattler, FALSE))
+ effect++;
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_LEECH_SEED: // leech seed
+ if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED)
+ && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ MAGIC_GUARD_CHECK;
+
+ gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver.
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleScripting.animArg1 = gBattlerTarget;
+ gBattleScripting.animArg2 = gBattlerAttacker;
+ BattleScriptExecute(BattleScript_LeechSeedTurnDrain);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_POISON: // poison
+ if ((gBattleMons[gActiveBattler].status1 & STATUS1_POISON)
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ MAGIC_GUARD_CHECK;
+
+ if (ability == ABILITY_POISON_HEAL)
{
- gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- gBattleMoveDamage *= -1;
- BattleScriptExecute(BattleScript_IngrainTurnHeal);
- effect++;
+ if (!BATTLER_MAX_HP(gActiveBattler) && !(gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK))
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ BattleScriptExecute(BattleScript_PoisonHealActivates);
+ effect++;
+ }
}
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_ABILITIES: // end turn abilities
- if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBattler, 0, 0, 0))
- effect++;
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_ITEMS1: // item effects
- if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, FALSE))
- effect++;
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_ITEMS2: // item effects again
- if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, TRUE))
- effect++;
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_LEECH_SEED: // leech seed
- if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED)
- && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0
- && gBattleMons[gActiveBattler].hp != 0)
- {
- gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver.
- gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- gBattleScripting.animArg1 = gBattlerTarget;
- gBattleScripting.animArg2 = gBattlerAttacker;
- BattleScriptExecute(BattleScript_LeechSeedTurnDrain);
- effect++;
- }
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_POISON: // poison
- if ((gBattleMons[gActiveBattler].status1 & STATUS1_POISON) && gBattleMons[gActiveBattler].hp != 0)
+ else
{
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
if (gBattleMoveDamage == 0)
@@ -1514,10 +2730,28 @@ u8 DoBattlerEndTurnEffects(void)
BattleScriptExecute(BattleScript_PoisonTurnDmg);
effect++;
}
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_BAD_POISON: // toxic poison
- if ((gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON) && gBattleMons[gActiveBattler].hp != 0)
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_BAD_POISON: // toxic poison
+ if ((gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON)
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ MAGIC_GUARD_CHECK;
+
+ if (ability == ABILITY_POISON_HEAL)
+ {
+ if (!BATTLER_MAX_HP(gActiveBattler) && !(gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK))
+ {
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ BattleScriptExecute(BattleScript_PoisonHealActivates);
+ effect++;
+ }
+ }
+ else
{
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
if (gBattleMoveDamage == 0)
@@ -1528,238 +2762,384 @@ u8 DoBattlerEndTurnEffects(void)
BattleScriptExecute(BattleScript_PoisonTurnDmg);
effect++;
}
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_BURN: // burn
- if ((gBattleMons[gActiveBattler].status1 & STATUS1_BURN) && gBattleMons[gActiveBattler].hp != 0)
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_BURN: // burn
+ if ((gBattleMons[gActiveBattler].status1 & STATUS1_BURN)
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ MAGIC_GUARD_CHECK;
+
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8);
+ if (ability == ABILITY_HEATPROOF)
{
- gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- BattleScriptExecute(BattleScript_BurnTurnDmg);
- effect++;
+ if (gBattleMoveDamage > (gBattleMoveDamage / 2) + 1) // Record ability if the burn takes less damage than it normally would.
+ RecordAbilityBattle(gActiveBattler, ABILITY_HEATPROOF);
+ gBattleMoveDamage /= 2;
}
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_NIGHTMARES: // spooky nightmares
- if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0)
- {
- // R/S does not perform this sleep check, which causes the nightmare effect to
- // persist even after the affected Pokemon has been awakened by Shed Skin.
- if (gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
- {
- gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- BattleScriptExecute(BattleScript_NightmareTurnDmg);
- effect++;
- }
- else
- {
- gBattleMons[gActiveBattler].status2 &= ~STATUS2_NIGHTMARE;
- }
- }
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_CURSE: // curse
- if ((gBattleMons[gActiveBattler].status2 & STATUS2_CURSED) && gBattleMons[gActiveBattler].hp != 0)
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_BurnTurnDmg);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_NIGHTMARES: // spooky nightmares
+ if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE)
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ MAGIC_GUARD_CHECK;
+ // R/S does not perform this sleep check, which causes the nightmare effect to
+ // persist even after the affected Pokemon has been awakened by Shed Skin.
+ if (gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
{
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- BattleScriptExecute(BattleScript_CurseTurnDmg);
+ BattleScriptExecute(BattleScript_NightmareTurnDmg);
effect++;
}
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_WRAP: // wrap
- if ((gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBattler].hp != 0)
+ else
{
- gBattleMons[gActiveBattler].status2 -= STATUS2_WRAPPED_TURN(1);
- if (gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) // damaged by wrap
- {
- // This is the only way I could get this array access to match.
- gBattleScripting.animArg1 = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 0);
- gBattleScripting.animArg2 = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 1);
- gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
- gBattleTextBuff1[1] = B_BUFF_MOVE;
- gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 0);
- gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 1);
- gBattleTextBuff1[4] = EOS;
- gBattlescriptCurrInstr = BattleScript_WrapTurnDmg;
- gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- }
- else // broke free
- {
- gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
- gBattleTextBuff1[1] = B_BUFF_MOVE;
- gBattleTextBuff1[2] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 0);
- gBattleTextBuff1[3] = *(gBattleStruct->wrappedMove + gActiveBattler * 2 + 1);
- gBattleTextBuff1[4] = EOS;
- gBattlescriptCurrInstr = BattleScript_WrapEnds;
- }
- BattleScriptExecute(gBattlescriptCurrInstr);
- effect++;
+ gBattleMons[gActiveBattler].status2 &= ~STATUS2_NIGHTMARE;
}
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_UPROAR: // uproar
- if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR)
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_CURSE: // curse
+ if ((gBattleMons[gActiveBattler].status2 & STATUS2_CURSED)
+ && gBattleMons[gActiveBattler].hp != 0)
+ {
+ MAGIC_GUARD_CHECK;
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_CurseTurnDmg);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_WRAP: // wrap
+ if ((gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBattler].hp != 0)
+ {
+ if (--gDisableStructs[gActiveBattler].wrapTurns != 0) // damaged by wrap
{
- for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++)
+ MAGIC_GUARD_CHECK;
+
+ gBattleScripting.animArg1 = gBattleStruct->wrappedMove[gActiveBattler];
+ gBattleScripting.animArg2 = gBattleStruct->wrappedMove[gActiveBattler] >> 8;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[gActiveBattler]);
+ gBattlescriptCurrInstr = BattleScript_WrapTurnDmg;
+ if (GetBattlerHoldEffect(gBattleStruct->wrappedBy[gActiveBattler], TRUE) == HOLD_EFFECT_BINDING_BAND)
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / ((B_BINDING_DAMAGE >= GEN_6) ? 6 : 8);
+ else
+ gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / ((B_BINDING_DAMAGE >= GEN_6) ? 8 : 16);
+
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+ else // broke free
+ {
+ gBattleMons[gActiveBattler].status2 &= ~STATUS2_WRAPPED;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[gActiveBattler]);
+ gBattlescriptCurrInstr = BattleScript_WrapEnds;
+ }
+ BattleScriptExecute(gBattlescriptCurrInstr);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_OCTOLOCK:
+ {
+ u16 battlerAbility = GetBattlerAbility(gActiveBattler);
+ if (gDisableStructs[gActiveBattler].octolock
+ && !(battlerAbility == ABILITY_CLEAR_BODY
+ || battlerAbility == ABILITY_FULL_METAL_BODY
+ || battlerAbility == ABILITY_WHITE_SMOKE))
+ {
+ gBattlerTarget = gActiveBattler;
+ BattleScriptExecute(BattleScript_OctolockEndTurn);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ }
+ break;
+ case ENDTURN_UPROAR: // uproar
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR)
+ {
+ for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++)
+ {
+ if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF)
{
- if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
- && gBattleMons[gBattlerAttacker].ability != ABILITY_SOUNDPROOF)
- {
- gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP;
- gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE;
- gBattleCommunication[MULTISTRING_CHOOSER] = 1;
- BattleScriptExecute(BattleScript_MonWokeUpInUproar);
- gActiveBattler = gBattlerAttacker;
- BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
- MarkBattlerForControllerExec(gActiveBattler);
- break;
- }
- }
- if (gBattlerAttacker != gBattlersCount)
- {
- effect = 2; // a pokemon was awaken
+ gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP;
+ gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ BattleScriptExecute(BattleScript_MonWokeUpInUproar);
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
break;
}
+ }
+ if (gBattlerAttacker != gBattlersCount)
+ {
+ effect = 2; // a pokemon was awaken
+ break;
+ }
+ else
+ {
+ gBattlerAttacker = gActiveBattler;
+ gBattleMons[gActiveBattler].status2 -= STATUS2_UPROAR_TURN(1); // uproar timer goes down
+ if (WasUnableToUseMove(gActiveBattler))
+ {
+ CancelMultiTurnMoves(gActiveBattler);
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_ENDS;
+ }
+ else if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_CONTINUES;
+ gBattleMons[gActiveBattler].status2 |= STATUS2_MULTIPLETURNS;
+ }
else
{
- gBattlerAttacker = gActiveBattler;
- gBattleMons[gActiveBattler].status2 -= STATUS2_UPROAR_TURN(1);
- if (WasUnableToUseMove(gActiveBattler))
- {
- CancelMultiTurnMoves(gActiveBattler);
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_ENDS;
- }
- else if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR)
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_CONTINUES;
- gBattleMons[gActiveBattler].status2 |= STATUS2_MULTIPLETURNS;
- }
- else
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_ENDS;
- CancelMultiTurnMoves(gActiveBattler);
- }
- BattleScriptExecute(BattleScript_PrintUproarOverTurns);
- effect = 1;
- }
- }
- if (effect != 2)
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_THRASH: // thrash
- if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
- {
- gBattleMons[gActiveBattler].status2 -= STATUS2_LOCK_CONFUSE_TURN(1);
- if (WasUnableToUseMove(gActiveBattler))
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_ENDS;
CancelMultiTurnMoves(gActiveBattler);
- else if (!(gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
- && (gBattleMons[gActiveBattler].status2 & STATUS2_MULTIPLETURNS))
- {
- gBattleMons[gActiveBattler].status2 &= ~STATUS2_MULTIPLETURNS;
- if (!(gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION))
- {
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER;
- SetMoveEffect(TRUE, 0);
- if (gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION)
- BattleScriptExecute(BattleScript_ThrashConfuses);
- effect++;
- }
}
+ BattleScriptExecute(BattleScript_PrintUproarOverTurns);
+ effect = 1;
}
+ }
+ if (effect != 2)
gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_DISABLE: // disable
- if (gDisableStructs[gActiveBattler].disableTimer != 0)
+ break;
+ case ENDTURN_THRASH: // thrash
+ // Don't decrement STATUS2_LOCK_CONFUSE if the target is held by Sky Drop
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE && !(gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED))
+ {
+ gBattleMons[gActiveBattler].status2 -= STATUS2_LOCK_CONFUSE_TURN(1);
+ if (WasUnableToUseMove(gActiveBattler))
+ CancelMultiTurnMoves(gActiveBattler);
+ else if (!(gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
+ && (gBattleMons[gActiveBattler].status2 & STATUS2_MULTIPLETURNS))
{
- s32 i;
- for (i = 0; i < MAX_MON_MOVES; i++)
+ gBattleMons[gActiveBattler].status2 &= ~STATUS2_MULTIPLETURNS;
+ if (!(gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION))
{
- if (gDisableStructs[gActiveBattler].disabledMove == gBattleMons[gActiveBattler].moves[i])
- break;
- }
- if (i == MAX_MON_MOVES) // pokemon does not have the disabled move anymore
- {
- gDisableStructs[gActiveBattler].disabledMove = 0;
- gDisableStructs[gActiveBattler].disableTimer = 0;
- }
- else if (--gDisableStructs[gActiveBattler].disableTimer == 0) // disable ends
- {
- gDisableStructs[gActiveBattler].disabledMove = 0;
- BattleScriptExecute(BattleScript_DisabledNoMore);
+ gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER;
+ SetMoveEffect(TRUE, 0);
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_CONFUSION)
+ BattleScriptExecute(BattleScript_ThrashConfuses);
effect++;
}
}
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_ENCORE: // encore
- if (gDisableStructs[gActiveBattler].encoreTimer != 0)
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_FLINCH: // reset flinch
+ gBattleMons[gActiveBattler].status2 &= ~STATUS2_FLINCHED;
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_DISABLE: // disable
+ if (gDisableStructs[gActiveBattler].disableTimer != 0)
+ {
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // pokemon does not have the encored move anymore
- {
- gDisableStructs[gActiveBattler].encoredMove = 0;
- gDisableStructs[gActiveBattler].encoreTimer = 0;
- }
- else if (--gDisableStructs[gActiveBattler].encoreTimer == 0
- || gBattleMons[gActiveBattler].pp[gDisableStructs[gActiveBattler].encoredMovePos] == 0)
- {
- gDisableStructs[gActiveBattler].encoredMove = 0;
- gDisableStructs[gActiveBattler].encoreTimer = 0;
- BattleScriptExecute(BattleScript_EncoredNoMore);
- effect++;
- }
+ if (gDisableStructs[gActiveBattler].disabledMove == gBattleMons[gActiveBattler].moves[i])
+ break;
}
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_LOCK_ON: // lock-on decrement
- if (gStatuses3[gActiveBattler] & STATUS3_ALWAYS_HITS)
- gStatuses3[gActiveBattler] -= STATUS3_ALWAYS_HITS_TURN(1);
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_CHARGE: // charge
- if (gDisableStructs[gActiveBattler].chargeTimer && --gDisableStructs[gActiveBattler].chargeTimer == 0)
- gStatuses3[gActiveBattler] &= ~STATUS3_CHARGED_UP;
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_TAUNT: // taunt
- if (gDisableStructs[gActiveBattler].tauntTimer)
- gDisableStructs[gActiveBattler].tauntTimer--;
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_YAWN: // yawn
- if (gStatuses3[gActiveBattler] & STATUS3_YAWN)
+ if (i == MAX_MON_MOVES) // pokemon does not have the disabled move anymore
{
- gStatuses3[gActiveBattler] -= STATUS3_YAWN_TURN(1);
- if (!(gStatuses3[gActiveBattler] & STATUS3_YAWN) && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)
- && gBattleMons[gActiveBattler].ability != ABILITY_VITAL_SPIRIT
- && gBattleMons[gActiveBattler].ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBattler))
+ gDisableStructs[gActiveBattler].disabledMove = 0;
+ gDisableStructs[gActiveBattler].disableTimer = 0;
+ }
+ else if (--gDisableStructs[gActiveBattler].disableTimer == 0) // disable ends
+ {
+ gDisableStructs[gActiveBattler].disabledMove = 0;
+ BattleScriptExecute(BattleScript_DisabledNoMore);
+ effect++;
+ }
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_ENCORE: // encore
+ if (gDisableStructs[gActiveBattler].encoreTimer != 0)
+ {
+ if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // pokemon does not have the encored move anymore
+ {
+ gDisableStructs[gActiveBattler].encoredMove = 0;
+ gDisableStructs[gActiveBattler].encoreTimer = 0;
+ }
+ else if (--gDisableStructs[gActiveBattler].encoreTimer == 0
+ || gBattleMons[gActiveBattler].pp[gDisableStructs[gActiveBattler].encoredMovePos] == 0)
+ {
+ gDisableStructs[gActiveBattler].encoredMove = 0;
+ gDisableStructs[gActiveBattler].encoreTimer = 0;
+ BattleScriptExecute(BattleScript_EncoredNoMore);
+ effect++;
+ }
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_LOCK_ON: // lock-on decrement
+ if (gStatuses3[gActiveBattler] & STATUS3_ALWAYS_HITS)
+ gStatuses3[gActiveBattler] -= STATUS3_ALWAYS_HITS_TURN(1);
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_CHARGE: // charge
+ if (gDisableStructs[gActiveBattler].chargeTimer && --gDisableStructs[gActiveBattler].chargeTimer == 0)
+ gStatuses3[gActiveBattler] &= ~STATUS3_CHARGED_UP;
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_TAUNT: // taunt
+ if (gDisableStructs[gActiveBattler].tauntTimer && --gDisableStructs[gActiveBattler].tauntTimer == 0)
+ {
+ BattleScriptExecute(BattleScript_BufferEndTurn);
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_YAWN: // yawn
+ if (gStatuses3[gActiveBattler] & STATUS3_YAWN)
+ {
+ u16 battlerAbility = GetBattlerAbility(gActiveBattler);
+ gStatuses3[gActiveBattler] -= STATUS3_YAWN_TURN(1);
+ if (!(gStatuses3[gActiveBattler] & STATUS3_YAWN) && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)
+ && battlerAbility != ABILITY_VITAL_SPIRIT
+ && battlerAbility != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBattler)
+ && !IsLeafGuardProtected(gActiveBattler))
+ {
+ CancelMultiTurnMoves(gActiveBattler);
+ gEffectBattler = gActiveBattler;
+ if (IsBattlerTerrainAffected(gActiveBattler, STATUS_FIELD_ELECTRIC_TERRAIN))
{
- CancelMultiTurnMoves(gActiveBattler);
- gBattleMons[gActiveBattler].status1 |= STATUS1_SLEEP_TURN((Random() & 3) + 2); // 2-5 turns of sleep
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINPREVENTS_ELECTRIC;
+ BattleScriptExecute(BattleScript_TerrainPreventsEnd2);
+ }
+ else if (IsBattlerTerrainAffected(gActiveBattler, STATUS_FIELD_MISTY_TERRAIN))
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINPREVENTS_MISTY;
+ BattleScriptExecute(BattleScript_TerrainPreventsEnd2);
+ }
+ else
+ {
+ gBattleMons[gActiveBattler].status1 |= (B_SLEEP_TURNS >= GEN_5) ? ((Random() % 3) + 2) : ((Random() % 4) + 3);
BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
MarkBattlerForControllerExec(gActiveBattler);
- gEffectBattler = gActiveBattler;
BattleScriptExecute(BattleScript_YawnMakesAsleep);
- effect++;
}
+ effect++;
}
- gBattleStruct->turnEffectsTracker++;
- break;
- case ENDTURN_BATTLER_COUNT: // done
- gBattleStruct->turnEffectsTracker = 0;
- gBattleStruct->turnEffectsBattlerId++;
- break;
}
- if (effect != 0)
- return effect;
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_LASER_FOCUS:
+ if (gStatuses3[gActiveBattler] & STATUS3_LASER_FOCUS)
+ {
+ if (gDisableStructs[gActiveBattler].laserFocusTimer == 0 || --gDisableStructs[gActiveBattler].laserFocusTimer == 0)
+ gStatuses3[gActiveBattler] &= ~STATUS3_LASER_FOCUS;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_EMBARGO:
+ if (gStatuses3[gActiveBattler] & STATUS3_EMBARGO)
+ {
+ if (gDisableStructs[gActiveBattler].embargoTimer == 0 || --gDisableStructs[gActiveBattler].embargoTimer == 0)
+ {
+ gStatuses3[gActiveBattler] &= ~STATUS3_EMBARGO;
+ BattleScriptExecute(BattleScript_EmbargoEndTurn);
+ effect++;
+ }
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_MAGNET_RISE:
+ if (gStatuses3[gActiveBattler] & STATUS3_MAGNET_RISE)
+ {
+ if (gDisableStructs[gActiveBattler].magnetRiseTimer == 0 || --gDisableStructs[gActiveBattler].magnetRiseTimer == 0)
+ {
+ gStatuses3[gActiveBattler] &= ~STATUS3_MAGNET_RISE;
+ BattleScriptExecute(BattleScript_BufferEndTurn);
+ PREPARE_STRING_BUFFER(gBattleTextBuff1, STRINGID_ELECTROMAGNETISM);
+ effect++;
+ }
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_TELEKINESIS:
+ if (gStatuses3[gActiveBattler] & STATUS3_TELEKINESIS)
+ {
+ if (gDisableStructs[gActiveBattler].telekinesisTimer == 0 || --gDisableStructs[gActiveBattler].telekinesisTimer == 0)
+ {
+ gStatuses3[gActiveBattler] &= ~STATUS3_TELEKINESIS;
+ BattleScriptExecute(BattleScript_TelekinesisEndTurn);
+ effect++;
+ }
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_HEALBLOCK:
+ if (gStatuses3[gActiveBattler] & STATUS3_HEAL_BLOCK)
+ {
+ if (gDisableStructs[gActiveBattler].healBlockTimer == 0 || --gDisableStructs[gActiveBattler].healBlockTimer == 0)
+ {
+ gStatuses3[gActiveBattler] &= ~STATUS3_HEAL_BLOCK;
+ BattleScriptExecute(BattleScript_BufferEndTurn);
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_HEAL_BLOCK);
+ effect++;
+ }
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_ROOST: // Return flying type.
+ if (gBattleResources->flags->flags[gActiveBattler] & RESOURCE_FLAG_ROOST)
+ {
+ gBattleResources->flags->flags[gActiveBattler] &= ~RESOURCE_FLAG_ROOST;
+ gBattleMons[gActiveBattler].type1 = gBattleStruct->roostTypes[gActiveBattler][0];
+ gBattleMons[gActiveBattler].type2 = gBattleStruct->roostTypes[gActiveBattler][1];
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_ELECTRIFY:
+ gStatuses4[gActiveBattler] &= ~STATUS4_ELECTRIFIED;
+ gBattleStruct->turnEffectsTracker++;
+ case ENDTURN_POWDER:
+ gBattleMons[gActiveBattler].status2 &= ~STATUS2_POWDER;
+ gBattleStruct->turnEffectsTracker++;
+ case ENDTURN_THROAT_CHOP:
+ if (gDisableStructs[gActiveBattler].throatChopTimer && --gDisableStructs[gActiveBattler].throatChopTimer == 0)
+ {
+ BattleScriptExecute(BattleScript_ThroatChopEndTurn);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_SLOW_START:
+ if (gDisableStructs[gActiveBattler].slowStartTimer
+ && --gDisableStructs[gActiveBattler].slowStartTimer == 0
+ && ability == ABILITY_SLOW_START)
+ {
+ BattleScriptExecute(BattleScript_SlowStartEnds);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_PLASMA_FISTS:
+ for (i = 0; i < gBattlersCount; i++)
+ gStatuses4[i] &= ~STATUS4_PLASMA_FISTS;
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ case ENDTURN_BATTLER_COUNT: // done
+ gBattleStruct->turnEffectsTracker = 0;
+ gBattleStruct->turnEffectsBattlerId++;
+ break;
}
+
+ if (effect != 0)
+ return effect;
+
}
gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_SKIP_DMG_TRACK);
return 0;
@@ -1795,8 +3175,9 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
gBattlerTarget = gActiveBattler;
gBattlerAttacker = gWishFutureKnock.futureSightAttacker[gActiveBattler];
- gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBattler];
gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF;
+ gCurrentMove = gWishFutureKnock.futureSightMove[gActiveBattler];
+ SetTypeBeforeUsingMove(gCurrentMove, gActiveBattler);
BattleScriptExecute(BattleScript_MonTookFutureAttack);
if (gWishFutureKnock.futureSightCounter[gActiveBattler] == 0
@@ -1807,12 +3188,8 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
return TRUE;
}
}
- // Why do I have to keep doing this to match?
- {
- u8 *state = &gBattleStruct->wishPerishSongState;
- *state = 1;
- gBattleStruct->wishPerishSongBattlerId = 0;
- }
+ gBattleStruct->wishPerishSongState = 1;
+ gBattleStruct->wishPerishSongBattlerId = 0;
// fall through
case 1:
while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount)
@@ -1913,8 +3290,27 @@ bool8 HandleFaintedMonActions(void)
gBattleStruct->faintedActionsState = 3;
else
gBattleStruct->faintedActionsState = 1;
+ #if B_FAINT_SWITCH_IN >= GEN_4
+ // Don't switch mons until all pokemon performed their actions or the battle's over.
+ if (gBattleOutcome == 0
+ && !NoAliveMonsForEitherParty()
+ && gCurrentTurnActionNumber != gBattlersCount)
+ {
+ gAbsentBattlerFlags |= gBitTable[gBattlerFainted];
+ return FALSE;
+ }
+ #endif
break;
case 3:
+ #if B_FAINT_SWITCH_IN >= GEN_4
+ // Don't switch mons until all pokemon performed their actions or the battle's over.
+ if (gBattleOutcome == 0
+ && !NoAliveMonsForEitherParty()
+ && gCurrentTurnActionNumber != gBattlersCount)
+ {
+ return FALSE;
+ }
+ #endif
gBattleStruct->faintedActionsBattlerId = 0;
gBattleStruct->faintedActionsState++;
// fall through
@@ -1939,10 +3335,7 @@ bool8 HandleFaintedMonActions(void)
gBattleStruct->faintedActionsState = 4;
break;
case 6:
- if (AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE1, 0, 0, 0, 0)
- || AbilityBattleEffects(ABILITYEFFECT_TRACE, 0, 0, 0, 0)
- || ItemBattleEffects(ITEMEFFECT_NORMAL, 0, TRUE)
- || AbilityBattleEffects(ABILITYEFFECT_FORECAST, 0, 0, 0, 0))
+ if (ItemBattleEffects(ITEMEFFECT_NORMAL, 0, TRUE))
return TRUE;
gBattleStruct->faintedActionsState++;
break;
@@ -1953,25 +3346,30 @@ bool8 HandleFaintedMonActions(void)
return FALSE;
}
-void TryClearRageStatuses(void)
+void TryClearRageAndFuryCutter(void)
{
s32 i;
for (i = 0; i < gBattlersCount; i++)
{
if ((gBattleMons[i].status2 & STATUS2_RAGE) && gChosenMoveByBattler[i] != MOVE_RAGE)
gBattleMons[i].status2 &= ~STATUS2_RAGE;
+ if (gDisableStructs[i].furyCutterCounter != 0 && gChosenMoveByBattler[i] != MOVE_FURY_CUTTER)
+ gDisableStructs[i].furyCutterCounter = 0;
}
}
enum
{
CANCELLER_FLAGS,
+ CANCELLER_SKY_DROP,
CANCELLER_ASLEEP,
CANCELLER_FROZEN,
CANCELLER_TRUANT,
CANCELLER_RECHARGE,
CANCELLER_FLINCH,
CANCELLER_DISABLED,
+ CANCELLER_GRAVITY,
+ CANCELLER_HEAL_BLOCKED,
CANCELLER_TAUNTED,
CANCELLER_IMPRISONED,
CANCELLER_CONFUSED,
@@ -1979,7 +3377,13 @@ enum
CANCELLER_IN_LOVE,
CANCELLER_BIDE,
CANCELLER_THAW,
+ CANCELLER_POWDER_MOVE,
+ CANCELLER_POWDER_STATUS,
+ CANCELLER_THROAT_CHOP,
+ CANCELLER_Z_MOVES,
CANCELLER_END,
+ CANCELLER_PSYCHIC_TERRAIN,
+ CANCELLER_END2,
};
u8 AtkCanceller_UnableToUseMove(void)
@@ -1995,6 +3399,16 @@ u8 AtkCanceller_UnableToUseMove(void)
gStatuses3[gBattlerAttacker] &= ~STATUS3_GRUDGE;
gBattleStruct->atkCancellerTracker++;
break;
+ case CANCELLER_SKY_DROP:
+ // If Pokemon is being held in Sky Drop
+ if (gStatuses3[gBattlerAttacker] & STATUS3_SKY_DROPPED)
+ {
+ gBattlescriptCurrInstr = BattleScript_MoveEnd;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ gBattleStruct->atkCancellerTracker++;
+ break;
case CANCELLER_ASLEEP: // check being asleep
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
{
@@ -2010,7 +3424,7 @@ u8 AtkCanceller_UnableToUseMove(void)
else
{
u8 toSub;
- if (gBattleMons[gBattlerAttacker].ability == ABILITY_EARLY_BIRD)
+ if (GetBattlerAbility(gBattlerAttacker) == ABILITY_EARLY_BIRD)
toSub = 2;
else
toSub = 1;
@@ -2020,7 +3434,7 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattleMons[gBattlerAttacker].status1 -= toSub;
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
{
- if (gCurrentMove != MOVE_SNORE && gCurrentMove != MOVE_SLEEP_TALK)
+ if (gChosenMove != MOVE_SNORE && gChosenMove != MOVE_SLEEP_TALK)
{
gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@@ -2040,20 +3454,12 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_FROZEN: // check being frozen
- if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
+ if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE && !(gBattleMoves[gCurrentMove].flags & FLAG_THAW_USER))
{
if (Random() % 5)
{
- if (gBattleMoves[gCurrentMove].effect != EFFECT_THAW_HIT) // unfreezing via a move effect happens in case 13
- {
- gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen;
- gHitMarker |= HITMARKER_NO_ATTACKSTRING;
- }
- else
- {
- gBattleStruct->atkCancellerTracker++;
- break;
- }
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen;
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
}
else // unfreeze
{
@@ -2067,12 +3473,13 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_TRUANT: // truant
- if (gBattleMons[gBattlerAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter)
+ if (GetBattlerAbility(gBattlerAttacker) == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter)
{
CancelMultiTurnMoves(gBattlerAttacker);
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LOAFING;
- gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround;
+ gBattlerAbility = gBattlerAttacker;
+ gBattlescriptCurrInstr = BattleScript_TruantLoafingAround;
gMoveResultFlags |= MOVE_RESULT_MISSED;
effect = 1;
}
@@ -2093,8 +3500,7 @@ u8 AtkCanceller_UnableToUseMove(void)
case CANCELLER_FLINCH: // flinch
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FLINCHED)
{
- gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_FLINCHED;
- gProtectStructs[gBattlerAttacker].flinchImmobility = 1;
+ gProtectStructs[gBattlerAttacker].flinchImmobility = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedFlinched;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@@ -2103,9 +3509,9 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_DISABLED: // disabled move
- if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != 0)
+ if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE)
{
- gProtectStructs[gBattlerAttacker].usedDisabledMove = 1;
+ gProtectStructs[gBattlerAttacker].usedDisabledMove = TRUE;
gBattleScripting.battler = gBattlerAttacker;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled;
@@ -2114,10 +3520,34 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
+ case CANCELLER_HEAL_BLOCKED:
+ if (gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove))
+ {
+ gProtectStructs[gBattlerAttacker].usedHealBlockedMove = TRUE;
+ gBattleScripting.battler = gBattlerAttacker;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedHealBlockPrevents;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ gBattleStruct->atkCancellerTracker++;
+ break;
+ case CANCELLER_GRAVITY:
+ if (gFieldStatuses & STATUS_FIELD_GRAVITY && IsGravityPreventingMove(gCurrentMove))
+ {
+ gProtectStructs[gBattlerAttacker].usedGravityPreventedMove = TRUE;
+ gBattleScripting.battler = gBattlerAttacker;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedGravityPrevents;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ gBattleStruct->atkCancellerTracker++;
+ break;
case CANCELLER_TAUNTED: // taunt
if (gDisableStructs[gBattlerAttacker].tauntTimer && gBattleMoves[gCurrentMove].power == 0)
{
- gProtectStructs[gBattlerAttacker].usedTauntedMove = 1;
+ gProtectStructs[gBattlerAttacker].usedTauntedMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsTaunted;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@@ -2128,7 +3558,7 @@ u8 AtkCanceller_UnableToUseMove(void)
case CANCELLER_IMPRISONED: // imprisoned
if (GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove))
{
- gProtectStructs[gBattlerAttacker].usedImprisonedMove = 1;
+ gProtectStructs[gBattlerAttacker].usedImprisonedMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsImprisoned;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@@ -2142,21 +3572,19 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattleMons[gBattlerAttacker].status2 -= STATUS2_CONFUSION_TURN(1);
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
{
- if (Random() & 1)
- {
- // The MULTISTRING_CHOOSER is used here as a bool to signal
- // to BattleScript_MoveUsedIsConfused whether or not damage was taken
- gBattleCommunication[MULTISTRING_CHOOSER] = FALSE;
- BattleScriptPushCursor();
- }
- else // confusion dmg
+ if (Random() % ((B_CONFUSION_SELF_DMG_CHANCE >= GEN_7) ? 3 : 2) == 0) // confusion dmg
{
gBattleCommunication[MULTISTRING_CHOOSER] = TRUE;
gBattlerTarget = gBattlerAttacker;
- gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerAttacker], MOVE_POUND, 0, 40, 0, gBattlerAttacker, gBattlerAttacker);
- gProtectStructs[gBattlerAttacker].confusionSelfDmg = 1;
+ gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE);
+ gProtectStructs[gBattlerAttacker].confusionSelfDmg = TRUE;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
}
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = FALSE;
+ BattleScriptPushCursor();
+ }
gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfused;
}
else // snapped out of confusion
@@ -2171,8 +3599,8 @@ u8 AtkCanceller_UnableToUseMove(void)
case CANCELLER_PARALYSED: // paralysis
if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0)
{
- gProtectStructs[gBattlerAttacker].prlzImmobility = 1;
- // This is removed in Emerald for some reason
+ gProtectStructs[gBattlerAttacker].prlzImmobility = TRUE;
+ // This is removed in FRLG and Emerald for some reason
//CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsParalyzed;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@@ -2192,7 +3620,7 @@ u8 AtkCanceller_UnableToUseMove(void)
{
BattleScriptPush(BattleScript_MoveUsedIsInLoveCantAttack);
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
- gProtectStructs[gBattlerAttacker].loveImmobility = 1;
+ gProtectStructs[gBattlerAttacker].loveImmobility = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
}
gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove;
@@ -2210,7 +3638,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
else
{
- // This is removed in Emerald for some reason
+ // This is removed in FRLG and Emerald for some reason
//gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_MULTIPLETURNS;
if (gTakenDmg[gBattlerAttacker])
{
@@ -2233,7 +3661,7 @@ u8 AtkCanceller_UnableToUseMove(void)
case CANCELLER_THAW: // move thawing
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
{
- if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT)
+ if (!(gBattleMoves[gCurrentMove].effect == EFFECT_BURN_UP && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE)))
{
gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_FREEZE;
BattleScriptPushCursor();
@@ -2244,11 +3672,85 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
+ case CANCELLER_POWDER_MOVE:
+ if ((gBattleMoves[gCurrentMove].flags & FLAG_POWDER) && (gBattlerAttacker != gBattlerTarget))
+ {
+ if ((B_POWDER_GRASS >= GEN_6 && IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS))
+ || GetBattlerAbility(gBattlerTarget) == ABILITY_OVERCOAT)
+ {
+ gBattlerAbility = gBattlerTarget;
+ effect = 1;
+ }
+ else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_SAFETY_GOGGLES)
+ {
+ RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_SAFETY_GOGGLES);
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ effect = 1;
+ }
+
+ if (effect != 0)
+ gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect;
+ }
+ gBattleStruct->atkCancellerTracker++;
+ break;
+ case CANCELLER_POWDER_STATUS:
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_POWDER)
+ {
+ u32 moveType;
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ if (moveType == TYPE_FIRE)
+ {
+ gProtectStructs[gBattlerAttacker].powderSelfDmg = TRUE;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4;
+ gBattlescriptCurrInstr = BattleScript_MoveUsedPowder;
+ effect = 1;
+ }
+ }
+ gBattleStruct->atkCancellerTracker++;
+ break;
+ case CANCELLER_THROAT_CHOP:
+ if (gDisableStructs[gBattlerAttacker].throatChopTimer && gBattleMoves[gCurrentMove].flags & FLAG_SOUND)
+ {
+ gProtectStructs[gBattlerAttacker].usedThroatChopPreventedMove = TRUE;
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedIsThroatChopPrevented;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ gBattleStruct->atkCancellerTracker++;
+ break;
+ case CANCELLER_Z_MOVES:
+ if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] != MOVE_NONE)
+ {
+ //attacker has a queued z move
+ gBattleStruct->zmove.active = TRUE;
+ gBattleStruct->zmove.activeSplit = gBattleStruct->zmove.splits[gBattlerAttacker];
+ RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_Z_CRYSTAL);
+ gBattleStruct->zmove.used[gBattlerAttacker] = TRUE;
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsPartnerMonFromSameTrainer(gBattlerAttacker))
+ gBattleStruct->zmove.used[BATTLE_PARTNER(gBattlerAttacker)] = TRUE; //if 1v1 double, set partner used flag as well
+
+ gBattleScripting.battler = gBattlerAttacker;
+ if (gBattleStruct->zmove.activeSplit == SPLIT_STATUS)
+ {
+ gBattleStruct->zmove.effect = gBattleMoves[gBattleStruct->zmove.baseMoves[gBattlerAttacker]].zMoveEffect;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ZMoveActivateStatus;
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ZMoveActivateDamaging;
+ }
+ effect = 1;
+ }
+ gBattleStruct->atkCancellerTracker++;
+ break;
case CANCELLER_END:
break;
}
- } while (gBattleStruct->atkCancellerTracker != CANCELLER_END && effect == 0);
+ } while (gBattleStruct->atkCancellerTracker != CANCELLER_END && gBattleStruct->atkCancellerTracker != CANCELLER_END2 && effect == 0);
if (effect == 2)
{
@@ -2259,31 +3761,86 @@ u8 AtkCanceller_UnableToUseMove(void)
return effect;
}
+// After Protean Activation.
+u8 AtkCanceller_UnableToUseMove2(void)
+{
+ u8 effect = 0;
+
+ do
+ {
+ switch (gBattleStruct->atkCancellerTracker)
+ {
+ case CANCELLER_END:
+ gBattleStruct->atkCancellerTracker++;
+ case CANCELLER_PSYCHIC_TERRAIN:
+ if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN
+ && IsBattlerGrounded(gBattlerTarget)
+ && GetChosenMovePriority(gBattlerAttacker) > 0
+ && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))
+ {
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gBattlescriptCurrInstr = BattleScript_MoveUsedPsychicTerrainPrevents;
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ effect = 1;
+ }
+ gBattleStruct->atkCancellerTracker++;
+ break;
+ case CANCELLER_END2:
+ break;
+ }
+
+ } while (gBattleStruct->atkCancellerTracker != CANCELLER_END2 && effect == 0);
+
+ return effect;
+}
+
bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
{
+ u8 playerId, flankId;
struct Pokemon *party;
- u8 id1, id2;
s32 i;
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
return FALSE;
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
+ if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ {
+ flankId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ party = gEnemyParty;
+
+ if (partyIdBattlerOn1 == PARTY_SIZE)
+ partyIdBattlerOn1 = gBattlerPartyIndexes[flankId];
+ if (partyIdBattlerOn2 == PARTY_SIZE)
+ partyIdBattlerOn2 = gBattlerPartyIndexes[playerId];
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG
+ && i != partyIdBattlerOn1 && i != partyIdBattlerOn2
+ && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId])
+ break;
+ }
+ return (i == PARTY_SIZE);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
- id1 = ((battler & BIT_FLANK) / 2);
- for (i = id1 * MULTI_PARTY_SIZE; i < id1 * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++)
+ playerId = ((battler & BIT_FLANK) / 2);
+ for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
break;
}
- return (i == id1 * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE);
+ return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE);
}
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
@@ -2292,76 +3849,76 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
{
party = gPlayerParty;
- id2 = GetBattlerMultiplayerId(battler);
- id1 = GetLinkTrainerFlankId(id2);
+ flankId = GetBattlerMultiplayerId(battler);
+ playerId = GetLinkTrainerFlankId(flankId);
}
else
{
party = gEnemyParty;
if (battler == 1)
- id1 = 0;
+ playerId = 0;
else
- id1 = 1;
+ playerId = 1;
}
}
else
{
- id2 = GetBattlerMultiplayerId(battler);
+ flankId = GetBattlerMultiplayerId(battler);
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
- id1 = GetLinkTrainerFlankId(id2);
+ playerId = GetLinkTrainerFlankId(flankId);
}
- for (i = id1 * MULTI_PARTY_SIZE; i < id1 * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++)
+ for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
break;
}
- return (i == id1 * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE);
+ return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE);
}
else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && GetBattlerSide(battler) == B_SIDE_OPPONENT)
{
party = gEnemyParty;
if (battler == 1)
- id1 = 0;
+ playerId = 0;
else
- id1 = MULTI_PARTY_SIZE;
+ playerId = MULTI_PARTY_SIZE;
- for (i = id1; i < id1 + MULTI_PARTY_SIZE; i++)
+ for (i = playerId; i < playerId + MULTI_PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
break;
}
- return (i == id1 + 3);
+ return (i == playerId + 3);
}
else
{
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
{
- id2 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- id1 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ flankId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
party = gEnemyParty;
}
else
{
- id2 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- id1 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ flankId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ playerId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
party = gPlayerParty;
}
if (partyIdBattlerOn1 == PARTY_SIZE)
- partyIdBattlerOn1 = gBattlerPartyIndexes[id2];
+ partyIdBattlerOn1 = gBattlerPartyIndexes[flankId];
if (partyIdBattlerOn2 == PARTY_SIZE)
- partyIdBattlerOn2 = gBattlerPartyIndexes[id1];
+ partyIdBattlerOn2 = gBattlerPartyIndexes[playerId];
for (i = 0; i < PARTY_SIZE; i++)
{
@@ -2369,817 +3926,2072 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG
&& i != partyIdBattlerOn1 && i != partyIdBattlerOn2
- && i != *(gBattleStruct->monToSwitchIntoId + id2) && i != id1[gBattleStruct->monToSwitchIntoId])
+ && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId])
break;
}
return (i == PARTY_SIZE);
}
}
-u8 CastformDataTypeChange(u8 battler)
+u8 TryWeatherFormChange(u8 battler)
{
- u8 formChange = 0;
- if (gBattleMons[battler].species != SPECIES_CASTFORM || gBattleMons[battler].ability != ABILITY_FORECAST || gBattleMons[battler].hp == 0)
- return 0; // No change
- if (!WEATHER_HAS_EFFECT && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
+ u8 ret = 0;
+ bool32 weatherEffect = WEATHER_HAS_EFFECT;
+ u16 holdEffect = GetBattlerHoldEffect(battler, TRUE);
+
+ if (gBattleMons[battler].species == SPECIES_CASTFORM)
{
- SET_BATTLER_TYPE(battler, TYPE_NORMAL);
- return CASTFORM_NORMAL + 1;
+ if (GetBattlerAbility(battler) != ABILITY_FORECAST || gBattleMons[battler].hp == 0)
+ {
+ ret = 0; // No change
+ }
+ else if (!weatherEffect && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
+ ret = CASTFORM_NORMAL + 1;
+ }
+ else if (!weatherEffect)
+ {
+ ret = 0; // No change
+ }
+ else if (holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || (!(gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SUN | B_WEATHER_HAIL)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL)))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
+ ret = CASTFORM_NORMAL + 1;
+ }
+ else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_FIRE);
+ ret = CASTFORM_FIRE + 1;
+ }
+ else if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_WATER);
+ ret = CASTFORM_WATER + 1;
+ }
+ else if (gBattleWeather & B_WEATHER_HAIL && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE))
+ {
+ SET_BATTLER_TYPE(battler, TYPE_ICE);
+ ret = CASTFORM_ICE + 1;
+ }
}
- if (!WEATHER_HAS_EFFECT)
- return 0; // No change
- if (!(gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SUN | B_WEATHER_HAIL)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
+ else if (gBattleMons[battler].species == SPECIES_CHERRIM)
{
- SET_BATTLER_TYPE(battler, TYPE_NORMAL);
- formChange = CASTFORM_NORMAL + 1;
+ if (GetBattlerAbility(battler) != ABILITY_FLOWER_GIFT || gBattleMons[battler].hp == 0)
+ ret = 0; // No change
+ else if (gBattleMonForms[battler] == 0 && weatherEffect && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA && gBattleWeather & B_WEATHER_SUN)
+ ret = CHERRIM_SUNSHINE + 1;
+ else if (gBattleMonForms[battler] != 0 && (!weatherEffect || holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA || !(gBattleWeather & B_WEATHER_SUN)))
+ ret = CHERRIM_OVERCAST + 1;
}
- if (gBattleWeather & B_WEATHER_SUN && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE))
- {
- SET_BATTLER_TYPE(battler, TYPE_FIRE);
- formChange = CASTFORM_FIRE + 1;
- }
- if (gBattleWeather & B_WEATHER_RAIN && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER))
- {
- SET_BATTLER_TYPE(battler, TYPE_WATER);
- formChange = CASTFORM_WATER + 1;
- }
- if (gBattleWeather & B_WEATHER_HAIL && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE))
- {
- SET_BATTLER_TYPE(battler, TYPE_ICE);
- formChange = CASTFORM_ICE + 1;
- }
- return formChange;
+
+ return ret;
}
-u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveArg)
+static const u16 sWeatherFlagsInfo[][3] =
+{
+ [ENUM_WEATHER_RAIN] = {B_WEATHER_RAIN_TEMPORARY, B_WEATHER_RAIN_PERMANENT, HOLD_EFFECT_DAMP_ROCK},
+ [ENUM_WEATHER_RAIN_PRIMAL] = {B_WEATHER_RAIN_PRIMAL, B_WEATHER_RAIN_PRIMAL, HOLD_EFFECT_DAMP_ROCK},
+ [ENUM_WEATHER_SUN] = {B_WEATHER_SUN_TEMPORARY, B_WEATHER_SUN_PERMANENT, HOLD_EFFECT_HEAT_ROCK},
+ [ENUM_WEATHER_SUN_PRIMAL] = {B_WEATHER_SUN_PRIMAL, B_WEATHER_SUN_PRIMAL, HOLD_EFFECT_HEAT_ROCK},
+ [ENUM_WEATHER_SANDSTORM] = {B_WEATHER_SANDSTORM_TEMPORARY, B_WEATHER_SANDSTORM_PERMANENT, HOLD_EFFECT_SMOOTH_ROCK},
+ [ENUM_WEATHER_HAIL] = {B_WEATHER_HAIL_TEMPORARY, B_WEATHER_HAIL_PERMANENT, HOLD_EFFECT_ICY_ROCK},
+ [ENUM_WEATHER_STRONG_WINDS] = {B_WEATHER_STRONG_WINDS, B_WEATHER_STRONG_WINDS, HOLD_EFFECT_NONE},
+};
+
+bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility)
+{
+ u16 battlerAbility = GetBattlerAbility(battler);
+
+ if (viaAbility && B_ABILITY_WEATHER <= GEN_5
+ && !(gBattleWeather & sWeatherFlagsInfo[weatherEnumId][1]))
+ {
+ gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]);
+ return TRUE;
+ }
+ else if (gBattleWeather & B_WEATHER_PRIMAL_ANY
+ && battlerAbility != ABILITY_DESOLATE_LAND
+ && battlerAbility != ABILITY_PRIMORDIAL_SEA
+ && battlerAbility != ABILITY_DELTA_STREAM)
+ {
+ return FALSE;
+ }
+ else if (!(gBattleWeather & (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1])))
+ {
+ gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0]);
+ if (GetBattlerHoldEffect(battler, TRUE) == sWeatherFlagsInfo[weatherEnumId][2])
+ gWishFutureKnock.weatherDuration = 8;
+ else
+ gWishFutureKnock.weatherDuration = 5;
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer)
+{
+ if (!(gFieldStatuses & statusFlag))
+ {
+ gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN | STATUS_FIELD_GRASSY_TERRAIN | EFFECT_ELECTRIC_TERRAIN | EFFECT_PSYCHIC_TERRAIN);
+ gFieldStatuses |= statusFlag;
+
+ if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER)
+ *timer = 8;
+ else
+ *timer = 5;
+
+ gBattlerAttacker = gBattleScripting.battler = battler;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool32 ShouldChangeFormHpBased(u32 battler)
+{
+ // Ability, form >, form <=, hp divided
+ static const u16 forms[][4] =
+ {
+ {ABILITY_ZEN_MODE, SPECIES_DARMANITAN, SPECIES_DARMANITAN_ZEN_MODE, 2},
+ {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, 2},
+ {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, 2},
+ {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, 2},
+ {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, 2},
+ {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, 2},
+ {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, 2},
+ {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, 2},
+ {ABILITY_SCHOOLING, SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, 4},
+ {ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GORGING, 2},
+ {ABILITY_GULP_MISSILE, SPECIES_CRAMORANT, SPECIES_CRAMORANT_GULPING, 1},
+ {ABILITY_ZEN_MODE, SPECIES_DARMANITAN_GALARIAN, SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, 2},
+ };
+ u32 i;
+ u16 battlerAbility = GetBattlerAbility(battler);
+
+ if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED)
+ return FALSE;
+
+ for (i = 0; i < ARRAY_COUNT(forms); i++)
+ {
+ if (battlerAbility == forms[i][0])
+ {
+ if (gBattleMons[battler].species == forms[i][2]
+ && gBattleMons[battler].hp > gBattleMons[battler].maxHP / forms[i][3])
+ {
+ gBattleMons[battler].species = forms[i][1];
+ return TRUE;
+ }
+ if (gBattleMons[battler].species == forms[i][1]
+ && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / forms[i][3])
+ {
+ gBattleMons[battler].species = forms[i][2];
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+static u8 ForewarnChooseMove(u32 battler)
+{
+ struct Forewarn {
+ u8 battlerId;
+ u8 power;
+ u16 moveId;
+ };
+ u32 i, j, bestId, count;
+ struct Forewarn *data = malloc(sizeof(struct Forewarn) * MAX_BATTLERS_COUNT * MAX_MON_MOVES);
+
+ // Put all moves
+ for (count = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (IsBattlerAlive(i) && GetBattlerSide(i) != GetBattlerSide(battler))
+ {
+ for (j = 0; j < MAX_MON_MOVES; j++)
+ {
+ if (gBattleMons[i].moves[j] == MOVE_NONE)
+ continue;
+ data[count].moveId = gBattleMons[i].moves[j];
+ data[count].battlerId = i;
+ switch (gBattleMoves[data[count].moveId].effect)
+ {
+ case EFFECT_OHKO:
+ data[count].power = 150;
+ break;
+ case EFFECT_COUNTER:
+ case EFFECT_MIRROR_COAT:
+ case EFFECT_METAL_BURST:
+ data[count].power = 120;
+ break;
+ default:
+ if (gBattleMoves[data[count].moveId].power == 1)
+ data[count].power = 80;
+ else
+ data[count].power = gBattleMoves[data[count].moveId].power;
+ break;
+ }
+ count++;
+ }
+ }
+ }
+
+ for (bestId = 0, i = 1; i < count; i++)
+ {
+ if (data[i].power > data[bestId].power)
+ bestId = i;
+ else if (data[i].power == data[bestId].power && Random() & 1)
+ bestId = i;
+ }
+
+ gBattlerTarget = data[bestId].battlerId;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, data[bestId].moveId)
+ RecordKnownMove(gBattlerTarget, data[bestId].moveId);
+
+ free(data);
+}
+
+u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 moveArg)
{
u8 effect = 0;
- struct Pokemon *pokeAtk;
- struct Pokemon *pokeDef;
- u16 speciesAtk;
- u16 speciesDef;
- u32 pidAtk;
- u32 pidDef;
+ u32 speciesAtk, speciesDef;
+ u32 pidAtk, pidDef;
+ u32 moveType, move;
+ u32 i, j;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ return 0;
if (gBattlerAttacker >= gBattlersCount)
gBattlerAttacker = battler;
- if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
- pokeAtk = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ speciesAtk = gBattleMons[gBattlerAttacker].species;
+ pidAtk = gBattleMons[gBattlerAttacker].personality;
+
+ speciesDef = gBattleMons[gBattlerTarget].species;
+ pidDef = gBattleMons[gBattlerTarget].personality;
+
+ if (special)
+ gLastUsedAbility = special;
else
- pokeAtk = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ gLastUsedAbility = GetBattlerAbility(battler);
- if (gBattlerTarget >= gBattlersCount)
- gBattlerTarget = battler;
-
- if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
- pokeDef = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
+ if (moveArg)
+ move = moveArg;
else
- pokeDef = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
+ move = gCurrentMove;
- speciesAtk = GetMonData(pokeAtk, MON_DATA_SPECIES);
- pidAtk = GetMonData(pokeAtk, MON_DATA_PERSONALITY);
+ GET_MOVE_TYPE(move, moveType);
- speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES);
- pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY);
-
- if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // Why isn't that check done at the beginning?
+ switch (caseID)
{
- u8 moveType;
- s32 i;
- u16 move;
- u8 side;
- u8 target1;
-
- if (special)
- gLastUsedAbility = special;
- else
- gLastUsedAbility = gBattleMons[battler].ability;
-
- if (moveArg)
- move = moveArg;
- else
- move = gCurrentMove;
-
- GET_MOVE_TYPE(move, moveType);
-
- switch (caseID)
+ case ABILITYEFFECT_ON_SWITCHIN: // 0
+ gBattleScripting.battler = battler;
+ switch (gLastUsedAbility)
{
- case ABILITYEFFECT_ON_SWITCHIN: // 0
- if (gBattlerAttacker >= gBattlersCount)
- gBattlerAttacker = battler;
- switch (gLastUsedAbility)
+ case ABILITYEFFECT_SWITCH_IN_TERRAIN:
+ if (VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY)
{
- case ABILITYEFFECT_SWITCH_IN_WEATHER:
- if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
+ u16 terrainFlags = VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY; // only works for status flag (1 << 15)
+ gFieldStatuses = terrainFlags | STATUS_FIELD_TERRAIN_PERMANENT; // terrain is permanent
+ switch (VarGet(VAR_TERRAIN) & STATUS_FIELD_TERRAIN_ANY)
{
- switch (GetCurrentWeather())
+ case STATUS_FIELD_ELECTRIC_TERRAIN:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ break;
+ case STATUS_FIELD_MISTY_TERRAIN:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ break;
+ case STATUS_FIELD_GRASSY_TERRAIN:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ break;
+ case STATUS_FIELD_PSYCHIC_TERRAIN:
+ gBattleCommunication[MULTISTRING_CHOOSER] = 3;
+ break;
+ }
+
+ BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain);
+ effect++;
+ }
+ #if B_THUNDERSTORM_TERRAIN == TRUE
+ else if (GetCurrentWeather() == WEATHER_RAIN_THUNDERSTORM && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN))
+ {
+ // overworld weather started rain, so just do electric terrain anim
+ gFieldStatuses = (STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT);
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain);
+ effect++;
+ }
+ #endif
+ break;
+ case ABILITYEFFECT_SWITCH_IN_WEATHER:
+ if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
+ {
+ switch (GetCurrentWeather())
+ {
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ if (!(gBattleWeather & B_WEATHER_RAIN))
{
- case WEATHER_RAIN:
- case WEATHER_RAIN_THUNDERSTORM:
- case WEATHER_DOWNPOUR:
- if (!(gBattleWeather & B_WEATHER_RAIN))
- {
- gBattleWeather = (B_WEATHER_RAIN_TEMPORARY | B_WEATHER_RAIN_PERMANENT);
- gBattleScripting.animArg1 = B_ANIM_RAIN_CONTINUES;
- gBattleScripting.battler = battler;
- effect++;
- }
- break;
- case WEATHER_SANDSTORM:
- if (!(gBattleWeather & B_WEATHER_SANDSTORM))
- {
- gBattleWeather = B_WEATHER_SANDSTORM;
- gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES;
- gBattleScripting.battler = battler;
- effect++;
- }
- break;
- case WEATHER_DROUGHT:
- if (!(gBattleWeather & B_WEATHER_SUN))
- {
- gBattleWeather = B_WEATHER_SUN;
- gBattleScripting.animArg1 = B_ANIM_SUN_CONTINUES;
- gBattleScripting.battler = battler;
- effect++;
- }
- break;
+ gBattleWeather = (B_WEATHER_RAIN_TEMPORARY | B_WEATHER_RAIN_PERMANENT);
+ gBattleScripting.animArg1 = B_ANIM_RAIN_CONTINUES;
+ effect++;
}
- }
- if (effect)
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather();
- BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts);
- }
- break;
- case ABILITY_DRIZZLE:
- if (!(gBattleWeather & B_WEATHER_RAIN_PERMANENT))
- {
- gBattleWeather = (B_WEATHER_RAIN_PERMANENT | B_WEATHER_RAIN_TEMPORARY);
- BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates);
- gBattleScripting.battler = battler;
- effect++;
- }
- break;
- case ABILITY_SAND_STREAM:
- if (!(gBattleWeather & B_WEATHER_SANDSTORM_PERMANENT))
- {
- gBattleWeather = B_WEATHER_SANDSTORM;
- BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates);
- gBattleScripting.battler = battler;
- effect++;
- }
- break;
- case ABILITY_DROUGHT:
- if (!(gBattleWeather & B_WEATHER_SUN_PERMANENT))
- {
- gBattleWeather = B_WEATHER_SUN;
- BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
- gBattleScripting.battler = battler;
- effect++;
- }
- break;
- case ABILITY_INTIMIDATE:
- if (!(gSpecialStatuses[battler].intimidatedMon))
- {
- gStatuses3[battler] |= STATUS3_INTIMIDATE_POKES;
- gSpecialStatuses[battler].intimidatedMon = 1;
- }
- break;
- case ABILITY_FORECAST:
- effect = CastformDataTypeChange(battler);
- if (effect)
- {
- BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- gBattleScripting.battler = battler;
- *(&gBattleStruct->formToChangeInto) = effect - 1;
- }
- break;
- case ABILITY_TRACE:
- if (!(gSpecialStatuses[battler].traced))
- {
- gStatuses3[battler] |= STATUS3_TRACE;
- gSpecialStatuses[battler].traced = 1;
- }
- break;
- case ABILITY_CLOUD_NINE:
- case ABILITY_AIR_LOCK:
- {
- // that's a weird choice for a variable, why not use i or battler?
- for (target1 = 0; target1 < gBattlersCount; target1++)
+ break;
+ case WEATHER_SANDSTORM:
+ if (!(gBattleWeather & B_WEATHER_SANDSTORM))
{
- effect = CastformDataTypeChange(target1);
- if (effect)
- {
- BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- gBattleScripting.battler = target1;
- *(&gBattleStruct->formToChangeInto) = effect - 1;
- break;
- }
+ gBattleWeather = B_WEATHER_SANDSTORM;
+ gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES;
+ effect++;
}
+ break;
+ case WEATHER_DROUGHT:
+ if (!(gBattleWeather & B_WEATHER_SUN))
+ {
+ gBattleWeather = (B_WEATHER_SUN_PERMANENT | B_WEATHER_SUN_TEMPORARY);
+ gBattleScripting.animArg1 = B_ANIM_SUN_CONTINUES;
+ effect++;
+ }
+ break;
}
- break;
+ }
+ if (effect != 0)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather();
+ BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts);
}
break;
- case ABILITYEFFECT_ENDTURN: // 1
- if (gBattleMons[battler].hp != 0)
+ case ABILITY_IMPOSTER:
+ if (IsBattlerAlive(BATTLE_OPPOSITE(battler))
+ && !(gBattleMons[BATTLE_OPPOSITE(battler)].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE))
+ && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)
+ && !(gBattleStruct->illusion[BATTLE_OPPOSITE(battler)].on)
+ && !(gStatuses3[BATTLE_OPPOSITE(battler)] & STATUS3_SEMI_INVULNERABLE))
{
gBattlerAttacker = battler;
- switch (gLastUsedAbility)
- {
- case ABILITY_RAIN_DISH:
- if (WEATHER_HAS_EFFECT && (gBattleWeather & B_WEATHER_RAIN)
- && gBattleMons[battler].maxHP > gBattleMons[battler].hp)
- {
- gLastUsedAbility = ABILITY_RAIN_DISH; // why
- BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates);
- gBattleMoveDamage = gBattleMons[battler].maxHP / 16;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- gBattleMoveDamage *= -1;
- effect++;
- }
- break;
- case ABILITY_SHED_SKIN:
- if ((gBattleMons[battler].status1 & STATUS1_ANY) && (Random() % 3) == 0)
- {
- if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON))
- StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
- if (gBattleMons[battler].status1 & STATUS1_SLEEP)
- StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
- if (gBattleMons[battler].status1 & STATUS1_PARALYSIS)
- StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
- if (gBattleMons[battler].status1 & STATUS1_BURN)
- StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
- if (gBattleMons[battler].status1 & STATUS1_FREEZE)
- StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
- gBattleMons[battler].status1 = 0;
- gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; // fix nightmare glitch
- gBattleScripting.battler = gActiveBattler = battler;
- BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates);
- BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
- MarkBattlerForControllerExec(gActiveBattler);
- effect++;
- }
- break;
- case ABILITY_SPEED_BOOST:
- if (gBattleMons[battler].statStages[STAT_SPEED] < MAX_STAT_STAGE && gDisableStructs[battler].isFirstTurn != 2)
- {
- gBattleMons[battler].statStages[STAT_SPEED]++;
- gBattleScripting.animArg1 = 14 + STAT_SPEED;
- gBattleScripting.animArg2 = 0;
- BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates);
- gBattleScripting.battler = battler;
- effect++;
- }
- break;
- case ABILITY_TRUANT:
- gDisableStructs[gBattlerAttacker].truantCounter ^= 1;
- break;
- }
+ gBattlerTarget = BATTLE_OPPOSITE(battler);
+ BattleScriptPushCursorAndCallback(BattleScript_ImposterActivates);
+ effect++;
}
break;
- case ABILITYEFFECT_MOVES_BLOCK: // 2
- if (gLastUsedAbility == ABILITY_SOUNDPROOF)
+ case ABILITY_MOLD_BREAKER:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
{
- for (i = 0; sSoundMovesTable[i] != SOUND_MOVES_END; i++)
- {
- if (sSoundMovesTable[i] == move)
- break;
- }
- if (sSoundMovesTable[i] != SOUND_MOVES_END)
- {
- if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)
- gHitMarker |= HITMARKER_NO_PPDEDUCT;
- gBattlescriptCurrInstr = BattleScript_SoundproofProtected;
- effect = 1;
- }
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_MOLDBREAKER;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
}
break;
- case ABILITYEFFECT_ABSORBING: // 3
- if (move)
+ case ABILITY_TERAVOLT:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
{
- switch (gLastUsedAbility)
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_TERAVOLT;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_TURBOBLAZE:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_TURBOBLAZE;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_SLOW_START:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gDisableStructs[battler].slowStartTimer = 5;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_SLOWSTART;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_UNNERVE:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_UNNERVE;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_AS_ONE_ICE_RIDER:
+ case ABILITY_AS_ONE_SHADOW_RIDER:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_ASONE;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_ActivateAsOne);
+ effect++;
+ }
+ break;
+ case ABILITY_CURIOUS_MEDICINE:
+ if (!gSpecialStatuses[battler].switchInAbilityDone && IsDoubleBattle()
+ && IsBattlerAlive(BATTLE_PARTNER(battler)) && TryResetBattlerStatChanges(BATTLE_PARTNER(battler)))
+ {
+ u32 i;
+ gEffectBattler = BATTLE_PARTNER(battler);
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_CURIOUS_MEDICINE;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_PASTEL_VEIL:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gBattlerTarget = battler;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_PASTEL_VEIL;
+ BattleScriptPushCursorAndCallback(BattleScript_PastelVeilActivates);
+ effect++;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ }
+ break;
+ case ABILITY_ANTICIPATION:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ u32 side = GetBattlerSide(battler);
+
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- case ABILITY_VOLT_ABSORB:
- if (moveType == TYPE_ELECTRIC && gBattleMoves[move].power != 0)
+ if (IsBattlerAlive(i) && side != GetBattlerSide(i))
{
- if (gProtectStructs[gBattlerAttacker].notFirstStrike)
- gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
- else
- gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
-
- effect = 1;
- }
- break;
- case ABILITY_WATER_ABSORB:
- if (moveType == TYPE_WATER && gBattleMoves[move].power != 0)
- {
- if (gProtectStructs[gBattlerAttacker].notFirstStrike)
- gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
- else
- gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
-
- effect = 1;
- }
- break;
- case ABILITY_FLASH_FIRE:
- if (moveType == TYPE_FIRE && !(gBattleMons[battler].status1 & STATUS1_FREEZE))
- {
- if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE))
+ for (j = 0; j < MAX_MON_MOVES; j++)
{
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_BOOST;
- if (gProtectStructs[gBattlerAttacker].notFirstStrike)
- gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
- else
- gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
-
- gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_FLASH_FIRE;
- effect = 2;
- }
- else
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_NO_BOOST;
- if (gProtectStructs[gBattlerAttacker].notFirstStrike)
- gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
- else
- gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
-
- effect = 2;
+ move = gBattleMons[i].moves[j];
+ GET_MOVE_TYPE(move, moveType);
+ if (CalcTypeEffectivenessMultiplier(move, moveType, i, battler, FALSE) >= UQ_4_12(2.0))
+ {
+ effect++;
+ break;
+ }
}
}
- break;
}
- if (effect == 1)
+
+ if (effect != 0)
{
- if (gBattleMons[battler].maxHP == gBattleMons[battler].hp)
- {
- if ((gProtectStructs[gBattlerAttacker].notFirstStrike))
- gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless;
- else
- gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless_PPLoss;
- }
- else
- {
- gBattleMoveDamage = gBattleMons[battler].maxHP / 4;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- gBattleMoveDamage *= -1;
- }
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_ANTICIPATION;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
}
}
break;
- case ABILITYEFFECT_ON_DAMAGE: // Contact abilities and Color Change
+ case ABILITY_FRISK:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_FriskActivates); // Try activate
+ effect++;
+ }
+ return effect; // Note: It returns effect as to not record the ability if Frisk does not activate.
+ case ABILITY_FOREWARN:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ ForewarnChooseMove(battler);
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_FOREWARN;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_DOWNLOAD:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ u32 statId, opposingBattler;
+ u32 opposingDef = 0, opposingSpDef = 0;
+
+ opposingBattler = BATTLE_OPPOSITE(battler);
+ for (i = 0; i < 2; opposingBattler ^= BIT_FLANK, i++)
+ {
+ if (IsBattlerAlive(opposingBattler))
+ {
+ opposingDef += gBattleMons[opposingBattler].defense
+ * gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_DEF]][0]
+ / gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_DEF]][1];
+ opposingSpDef += gBattleMons[opposingBattler].spDefense
+ * gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_SPDEF]][0]
+ / gStatStageRatios[gBattleMons[opposingBattler].statStages[STAT_SPDEF]][1];
+ }
+ }
+
+ if (opposingDef < opposingSpDef)
+ statId = STAT_ATK;
+ else
+ statId = STAT_SPATK;
+
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+
+ if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ gBattleMons[battler].statStages[statId]++;
+ SET_STATCHANGER(statId, 1, FALSE);
+ gBattlerAttacker = battler;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, statId);
+ BattleScriptPushCursorAndCallback(BattleScript_AttackerAbilityStatRaiseEnd3);
+ effect++;
+ }
+ }
+ break;
+ case ABILITY_PRESSURE:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_PRESSURE;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_DARK_AURA:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_DARKAURA;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_FAIRY_AURA:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_FAIRYAURA;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_AURA_BREAK:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_AURABREAK;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_COMATOSE:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_COMATOSE;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_SCREEN_CLEANER:
+ if (!gSpecialStatuses[battler].switchInAbilityDone && TryRemoveScreens(battler))
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_SCREENCLEANER;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+ break;
+ case ABILITY_DRIZZLE:
+ if (TryChangeBattleWeather(battler, ENUM_WEATHER_RAIN, TRUE))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates);
+ effect++;
+ }
+ else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3);
+ effect++;
+ }
+ break;
+ case ABILITY_SAND_STREAM:
+ if (TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates);
+ effect++;
+ }
+ else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3);
+ effect++;
+ }
+ break;
+ case ABILITY_DROUGHT:
+ if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN, TRUE))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
+ effect++;
+ }
+ else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3);
+ effect++;
+ }
+ break;
+ case ABILITY_SNOW_WARNING:
+ if (TryChangeBattleWeather(battler, ENUM_WEATHER_HAIL, TRUE))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivates);
+ effect++;
+ }
+ else if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT && !gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3);
+ effect++;
+ }
+ break;
+ case ABILITY_ELECTRIC_SURGE:
+ if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN, &gFieldTimers.terrainTimer))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_ElectricSurgeActivates);
+ effect++;
+ }
+ break;
+ case ABILITY_GRASSY_SURGE:
+ if (TryChangeBattleTerrain(battler, STATUS_FIELD_GRASSY_TERRAIN, &gFieldTimers.terrainTimer))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_GrassySurgeActivates);
+ effect++;
+ }
+ break;
+ case ABILITY_MISTY_SURGE:
+ if (TryChangeBattleTerrain(battler, STATUS_FIELD_MISTY_TERRAIN, &gFieldTimers.terrainTimer))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_MistySurgeActivates);
+ effect++;
+ }
+ break;
+ case ABILITY_PSYCHIC_SURGE:
+ if (TryChangeBattleTerrain(battler, STATUS_FIELD_PSYCHIC_TERRAIN, &gFieldTimers.terrainTimer))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_PsychicSurgeActivates);
+ effect++;
+ }
+ break;
+ case ABILITY_INTIMIDATE:
+ if (!(gSpecialStatuses[battler].intimidatedMon))
+ {
+ gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_INTIMIDATED;
+ gSpecialStatuses[battler].intimidatedMon = TRUE;
+ }
+ break;
+ case ABILITY_FORECAST:
+ case ABILITY_FLOWER_GIFT:
+ effect = TryWeatherFormChange(battler);
+ if (effect != 0)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
+ *(&gBattleStruct->formToChangeInto) = effect - 1;
+ }
+ break;
+ case ABILITY_TRACE:
+ if (!(gSpecialStatuses[battler].traced))
+ {
+ gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_TRACED;
+ gSpecialStatuses[battler].traced = TRUE;
+ }
+ break;
+ case ABILITY_CLOUD_NINE:
+ case ABILITY_AIR_LOCK:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_AnnounceAirLockCloudNine);
+ effect++;
+ }
+ break;
+ case ABILITY_SCHOOLING:
+ if (gBattleMons[battler].level < 20)
+ break;
+ case ABILITY_SHIELDS_DOWN:
+ if (ShouldChangeFormHpBased(battler))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3);
+ effect++;
+ }
+ break;
+ case ABILITY_INTREPID_SWORD:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ SET_STATCHANGER(STAT_ATK, 1, FALSE);
+ BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn);
+ effect++;
+ }
+ break;
+ case ABILITY_DAUNTLESS_SHIELD:
+ if (!gSpecialStatuses[battler].switchInAbilityDone)
+ {
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ SET_STATCHANGER(STAT_DEF, 1, FALSE);
+ BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn);
+ effect++;
+ }
+ break;
+ case ABILITY_DESOLATE_LAND:
+ if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN_PRIMAL, TRUE))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_DesolateLandActivates);
+ effect++;
+ }
+ break;
+ case ABILITY_PRIMORDIAL_SEA:
+ if (TryChangeBattleWeather(battler, ENUM_WEATHER_RAIN_PRIMAL, TRUE))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_PrimordialSeaActivates);
+ effect++;
+ }
+ break;
+ case ABILITY_DELTA_STREAM:
+ if (TryChangeBattleWeather(battler, ENUM_WEATHER_STRONG_WINDS, TRUE))
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_DeltaStreamActivates);
+ effect++;
+ }
+ break;
+ case ABILITY_MIMICRY:
+ if (gBattleMons[battler].hp != 0 && gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
+ {
+ TryToApplyMimicry(battler, FALSE);
+ effect++;
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_ENDTURN: // 1
+ if (gBattleMons[battler].hp != 0)
+ {
+ gBattlerAttacker = battler;
switch (gLastUsedAbility)
{
- case ABILITY_COLOR_CHANGE:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && move != MOVE_STRUGGLE
- && gBattleMoves[move].power != 0
- && TARGET_TURN_DAMAGED
- && !IS_BATTLER_OF_TYPE(battler, moveType)
- && gBattleMons[battler].hp != 0)
+ case ABILITY_HARVEST:
+ if ((IsBattlerWeatherAffected(battler, B_WEATHER_SUN) || Random() % 2 == 0)
+ && gBattleMons[battler].item == ITEM_NONE
+ && gBattleStruct->changedItems[battler] == ITEM_NONE // Will not inherit an item
+ && ItemId_GetPocket(GetUsedHeldItem(battler)) == POCKET_BERRIES)
{
- SET_BATTLER_TYPE(battler, moveType);
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_ColorChangeActivates;
+ gLastUsedItem = GetUsedHeldItem(battler);
+ BattleScriptPushCursorAndCallback(BattleScript_HarvestActivates);
effect++;
}
break;
- case ABILITY_ROUGH_SKIN:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
- && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && TARGET_TURN_DAMAGED
- && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT))
+ case ABILITY_DRY_SKIN:
+ if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN))
+ goto SOLAR_POWER_HP_DROP;
+ // Dry Skin works similarly to Rain Dish in Rain
+ case ABILITY_RAIN_DISH:
+ if (IsBattlerWeatherAffected(battler, B_WEATHER_RAIN)
+ && !BATTLER_MAX_HP(battler)
+ && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))
{
- gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
+ BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates);
+ gBattleMoveDamage = gBattleMons[battler].maxHP / (gLastUsedAbility == ABILITY_RAIN_DISH ? 16 : 8);
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_RoughSkinActivates;
+ gBattleMoveDamage *= -1;
effect++;
}
break;
- case ABILITY_EFFECT_SPORE:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
- && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && TARGET_TURN_DAMAGED
- && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
- && (Random() % 10) == 0)
+ case ABILITY_HYDRATION:
+ if (IsBattlerWeatherAffected(battler, B_WEATHER_RAIN)
+ && gBattleMons[battler].status1 & STATUS1_ANY)
{
- do
- {
- gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3;
- } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0);
-
- if (gBattleCommunication[MOVE_EFFECT_BYTE] == MOVE_EFFECT_BURN)
- gBattleCommunication[MOVE_EFFECT_BYTE] += 2; // 5 MOVE_EFFECT_PARALYSIS
-
- gBattleCommunication[MOVE_EFFECT_BYTE] += MOVE_EFFECT_AFFECTS_USER;
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
- gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
- effect++;
+ goto ABILITY_HEAL_MON_STATUS;
}
break;
- case ABILITY_POISON_POINT:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
- && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && TARGET_TURN_DAMAGED
- && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
- && (Random() % 3) == 0)
+ case ABILITY_SHED_SKIN:
+ if ((gBattleMons[battler].status1 & STATUS1_ANY) && (Random() % 3) == 0)
{
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON;
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
- gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
- effect++;
- }
- break;
- case ABILITY_STATIC:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
- && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && TARGET_TURN_DAMAGED
- && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
- && (Random() % 3) == 0)
- {
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS;
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
- gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
- effect++;
- }
- break;
- case ABILITY_FLAME_BODY:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
- && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
- && TARGET_TURN_DAMAGED
- && (Random() % 3) == 0)
- {
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN;
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect;
- gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
- effect++;
- }
- break;
- case ABILITY_CUTE_CHARM:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
- && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
- && TARGET_TURN_DAMAGED
- && gBattleMons[gBattlerTarget].hp != 0
- && (Random() % 3) == 0
- && gBattleMons[gBattlerAttacker].ability != ABILITY_OBLIVIOUS
- && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef)
- && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
- && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != MON_GENDERLESS
- && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != MON_GENDERLESS)
- {
- gBattleMons[gBattlerAttacker].status2 |= STATUS2_INFATUATED_WITH(gBattlerTarget);
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_CuteCharmActivates;
- effect++;
- }
- break;
- }
- break;
- case ABILITYEFFECT_IMMUNITY: // 5
- for (battler = 0; battler < gBattlersCount; battler++)
- {
- switch (gBattleMons[battler].ability)
- {
- case ABILITY_IMMUNITY:
- if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER))
- {
+ ABILITY_HEAL_MON_STATUS:
+ if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON))
StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
- effect = 1;
- }
- break;
- case ABILITY_OWN_TEMPO:
- if (gBattleMons[battler].status2 & STATUS2_CONFUSION)
- {
- StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
- effect = 2;
- }
- break;
- case ABILITY_LIMBER:
- if (gBattleMons[battler].status1 & STATUS1_PARALYSIS)
- {
- StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
- effect = 1;
- }
- break;
- case ABILITY_INSOMNIA:
- case ABILITY_VITAL_SPIRIT:
if (gBattleMons[battler].status1 & STATUS1_SLEEP)
- {
- gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE;
StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
- effect = 1;
- }
- break;
- case ABILITY_WATER_VEIL:
+ if (gBattleMons[battler].status1 & STATUS1_PARALYSIS)
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
if (gBattleMons[battler].status1 & STATUS1_BURN)
- {
StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
- effect = 1;
- }
- break;
- case ABILITY_MAGMA_ARMOR:
if (gBattleMons[battler].status1 & STATUS1_FREEZE)
- {
StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
- effect = 1;
- }
- break;
- case ABILITY_OBLIVIOUS:
- if (gBattleMons[battler].status2 & STATUS2_INFATUATION)
- {
- StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
- effect = 3;
- }
- break;
- }
- if (effect)
- {
- switch (effect)
- {
- case 1: // status cleared
- gBattleMons[battler].status1 = 0;
- break;
- case 2: // get rid of confusion
- gBattleMons[battler].status2 &= ~STATUS2_CONFUSION;
- break;
- case 3: // get rid of infatuation
- gBattleMons[battler].status2 &= ~STATUS2_INFATUATION;
- break;
- }
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
- gBattleScripting.battler = battler;
- gActiveBattler = battler;
- BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ gBattleMons[battler].status1 = 0;
+ gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE;
+ gBattleScripting.battler = gActiveBattler = battler;
+ BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates);
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
MarkBattlerForControllerExec(gActiveBattler);
- return effect;
+ effect++;
}
- }
- break;
- case ABILITYEFFECT_FORECAST: // 6
- for (battler = 0; battler < gBattlersCount; battler++)
- {
- if (gBattleMons[battler].ability == ABILITY_FORECAST)
+ break;
+ case ABILITY_SPEED_BOOST:
+ if (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) && gDisableStructs[battler].isFirstTurn != 2)
{
- effect = CastformDataTypeChange(battler);
- if (effect)
+ gBattleMons[battler].statStages[STAT_SPEED]++;
+ gBattleScripting.animArg1 = 14 + STAT_SPEED;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates);
+ gBattleScripting.battler = battler;
+ effect++;
+ }
+ break;
+ case ABILITY_MOODY:
+ if (gDisableStructs[battler].isFirstTurn != 2)
+ {
+ u32 validToRaise = 0, validToLower = 0;
+ u32 statsNum = (B_MOODY_ACC_EVASION != GEN_8) ? NUM_BATTLE_STATS : NUM_STATS;
+
+ for (i = STAT_ATK; i < statsNum; i++)
{
- BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- gBattleScripting.battler = battler;
- *(&gBattleStruct->formToChangeInto) = effect - 1;
- return effect;
+ if (CompareStat(battler, i, MIN_STAT_STAGE, CMP_GREATER_THAN))
+ validToLower |= gBitTable[i];
+ if (CompareStat(battler, i, MAX_STAT_STAGE, CMP_LESS_THAN))
+ validToRaise |= gBitTable[i];
+ }
+
+ if (validToLower != 0 || validToRaise != 0) // Can lower one stat, or can raise one stat
+ {
+ gBattleScripting.statChanger = gBattleScripting.savedStatChanger = 0; // for raising and lowering stat respectively
+ if (validToRaise != 0) // Find stat to raise
+ {
+ do
+ {
+ i = (Random() % statsNum) + STAT_ATK;
+ } while (!(validToRaise & gBitTable[i]));
+ SET_STATCHANGER(i, 2, FALSE);
+ validToLower &= ~(gBitTable[i]); // Can't lower the same stat as raising.
+ }
+ if (validToLower != 0) // Find stat to lower
+ {
+ do
+ {
+ i = (Random() % statsNum) + STAT_ATK;
+ } while (!(validToLower & gBitTable[i]));
+ SET_STATCHANGER2(gBattleScripting.savedStatChanger, i, 1, TRUE);
+ }
+ BattleScriptPushCursorAndCallback(BattleScript_MoodyActivates);
+ effect++;
}
}
- }
- break;
- case ABILITYEFFECT_SYNCHRONIZE: // 7
- if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
- {
- gHitMarker &= ~HITMARKER_SYNCHRONISE_EFFECT;
- gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
- if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC)
- gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON;
-
- gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchronizeMoveEffect + MOVE_EFFECT_AFFECTS_USER;
- gBattleScripting.battler = gBattlerTarget;
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
- gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
- effect++;
- }
- break;
- case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8
- if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
- {
- gHitMarker &= ~HITMARKER_SYNCHRONISE_EFFECT;
- gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
- if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC)
- gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON;
-
- gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchronizeMoveEffect;
- gBattleScripting.battler = gBattlerAttacker;
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
- gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
- effect++;
- }
- break;
- case ABILITYEFFECT_INTIMIDATE1: // 9
- for (i = 0; i < gBattlersCount; i++)
- {
- if (gBattleMons[i].ability == ABILITY_INTIMIDATE && gStatuses3[i] & STATUS3_INTIMIDATE_POKES)
+ break;
+ case ABILITY_TRUANT:
+ gDisableStructs[gBattlerAttacker].truantCounter ^= 1;
+ break;
+ case ABILITY_BAD_DREAMS:
+ if (gBattleMons[battler].status1 & STATUS1_SLEEP
+ || gBattleMons[BATTLE_OPPOSITE(battler)].status1 & STATUS1_SLEEP
+ || GetBattlerAbility(battler) == ABILITY_COMATOSE
+ || GetBattlerAbility(BATTLE_OPPOSITE(battler)) == ABILITY_COMATOSE)
{
- gLastUsedAbility = ABILITY_INTIMIDATE;
- gStatuses3[i] &= ~STATUS3_INTIMIDATE_POKES;
- BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivatesEnd3);
- gBattleStruct->intimidateBattler = i;
+ BattleScriptPushCursorAndCallback(BattleScript_BadDreamsActivates);
effect++;
- break;
}
- }
- break;
- case ABILITYEFFECT_TRACE: // 11
- for (i = 0; i < gBattlersCount; i++)
- {
- if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE))
+ break;
+ SOLAR_POWER_HP_DROP:
+ case ABILITY_SOLAR_POWER:
+ if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN))
{
- u8 target2;
- side = (GetBattlerPosition(i) ^ BIT_SIDE) & BIT_SIDE; // side of the opposing pokemon
- target1 = GetBattlerAtPosition(side);
- target2 = GetBattlerAtPosition(side + BIT_FLANK);
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ BattleScriptPushCursorAndCallback(BattleScript_SolarPowerActivates);
+ gBattleMoveDamage = gBattleMons[battler].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ effect++;
+ }
+ break;
+ case ABILITY_HEALER:
+ gBattleScripting.battler = BATTLE_PARTNER(battler);
+ if (IsBattlerAlive(gBattleScripting.battler)
+ && gBattleMons[gBattleScripting.battler].status1 & STATUS1_ANY
+ && (Random() % 100) < 30)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_HealerActivates);
+ effect++;
+ }
+ break;
+ case ABILITY_SCHOOLING:
+ if (gBattleMons[battler].level < 20)
+ break;
+ case ABILITY_ZEN_MODE:
+ case ABILITY_SHIELDS_DOWN:
+ if ((effect = ShouldChangeFormHpBased(battler)))
+ BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3);
+ break;
+ case ABILITY_POWER_CONSTRUCT:
+ if ((gBattleMons[battler].species == SPECIES_ZYGARDE || gBattleMons[battler].species == SPECIES_ZYGARDE_10)
+ && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 2)
+ {
+ gBattleStruct->changedSpecies[gBattlerPartyIndexes[battler]] = gBattleMons[battler].species;
+ gBattleMons[battler].species = SPECIES_ZYGARDE_COMPLETE;
+ BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3);
+ effect++;
+ }
+ break;
+ case ABILITY_BALL_FETCH:
+ if (gBattleMons[battler].item == ITEM_NONE
+ && gBattleResults.catchAttempts[gLastUsedBall - ITEM_ULTRA_BALL] >= 1
+ && !gHasFetchedBall)
+ {
+ gBattleScripting.battler = battler;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedBall);
+ MarkBattlerForControllerExec(battler);
+ gHasFetchedBall = TRUE;
+ gLastUsedItem = gLastUsedBall;
+ BattleScriptPushCursorAndCallback(BattleScript_BallFetch);
+ effect++;
+ }
+ break;
+ case ABILITY_HUNGER_SWITCH:
+ if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
+ {
+ if (gBattleMons[battler].species == SPECIES_MORPEKO)
{
- if (gBattleMons[target1].ability != ABILITY_NONE && gBattleMons[target1].hp != 0
- && gBattleMons[target2].ability != ABILITY_NONE && gBattleMons[target2].hp != 0)
- {
- gActiveBattler = GetBattlerAtPosition(((Random() & 1) * 2) | side);
- gBattleMons[i].ability = gBattleMons[gActiveBattler].ability;
- gLastUsedAbility = gBattleMons[gActiveBattler].ability;
- effect++;
- }
- else if (gBattleMons[target1].ability != ABILITY_NONE && gBattleMons[target1].hp != 0)
- {
- gActiveBattler = target1;
- gBattleMons[i].ability = gBattleMons[gActiveBattler].ability;
- gLastUsedAbility = gBattleMons[gActiveBattler].ability;
- effect++;
- }
- else if (gBattleMons[target2].ability != ABILITY_NONE && gBattleMons[target2].hp != 0)
- {
- gActiveBattler = target2;
- gBattleMons[i].ability = gBattleMons[gActiveBattler].ability;
- gLastUsedAbility = gBattleMons[gActiveBattler].ability;
- effect++;
- }
+ gBattleMons[battler].species = SPECIES_MORPEKO_HANGRY;
+ BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup);
+ }
+ else if (gBattleMons[battler].species == SPECIES_MORPEKO_HANGRY)
+ {
+ gBattleMons[battler].species = SPECIES_MORPEKO;
+ BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup);
+ }
+ effect++;
+ }
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_MOVES_BLOCK: // 2
+ {
+ u16 moveTarget = GetBattlerMoveTargetType(battler, move);
+
+ if ((gLastUsedAbility == ABILITY_SOUNDPROOF && gBattleMoves[move].flags & FLAG_SOUND && !(moveTarget & MOVE_TARGET_USER))
+ || (gLastUsedAbility == ABILITY_BULLETPROOF && gBattleMoves[move].flags & FLAG_BALLISTIC))
+ {
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)
+ gHitMarker |= HITMARKER_NO_PPDEDUCT;
+ gBattlescriptCurrInstr = BattleScript_SoundproofProtected;
+ effect = 1;
+ }
+ else if ((((gLastUsedAbility == ABILITY_DAZZLING || gLastUsedAbility == ABILITY_QUEENLY_MAJESTY
+ || (IsBattlerAlive(battler ^= BIT_FLANK)
+ && ((GetBattlerAbility(battler) == ABILITY_DAZZLING) || GetBattlerAbility(battler) == ABILITY_QUEENLY_MAJESTY)))
+ ))
+ && GetChosenMovePriority(gBattlerAttacker) > 0
+ && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler))
+ {
+ if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)
+ gHitMarker |= HITMARKER_NO_PPDEDUCT;
+ gBattlescriptCurrInstr = BattleScript_DazzlingProtected;
+ effect = 1;
+ }
+ else if (BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE)
+ && !(IS_MOVE_STATUS(move) && GetBattlerAbility(gBattlerTarget) == ABILITY_MAGIC_BOUNCE))
+ {
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)))
+ CancelMultiTurnMoves(gBattlerAttacker); // Don't cancel moves that can hit two targets bc one target might not be protected
+ gBattleScripting.battler = gBattlerAbility = gBattlerTarget;
+ gBattlescriptCurrInstr = BattleScript_DarkTypePreventsPrankster;
+ effect = 1;
+ }
+ break;
+ }
+ case ABILITYEFFECT_ABSORBING: // 3
+ if (move != MOVE_NONE)
+ {
+ u8 statId;
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_VOLT_ABSORB:
+ if (moveType == TYPE_ELECTRIC)
+ effect = 1;
+ break;
+ case ABILITY_WATER_ABSORB:
+ case ABILITY_DRY_SKIN:
+ if (moveType == TYPE_WATER)
+ effect = 1;
+ break;
+ case ABILITY_MOTOR_DRIVE:
+ if (moveType == TYPE_ELECTRIC)
+ effect = 2, statId = STAT_SPEED;
+ break;
+ case ABILITY_LIGHTNING_ROD:
+ if (moveType == TYPE_ELECTRIC)
+ effect = 2, statId = STAT_SPATK;
+ break;
+ case ABILITY_STORM_DRAIN:
+ if (moveType == TYPE_WATER)
+ effect = 2, statId = STAT_SPATK;
+ break;
+ case ABILITY_SAP_SIPPER:
+ if (moveType == TYPE_GRASS)
+ effect = 2, statId = STAT_ATK;
+ break;
+ case ABILITY_FLASH_FIRE:
+ if (moveType == TYPE_FIRE && !((gBattleMons[battler].status1 & STATUS1_FREEZE) && B_FLASH_FIRE_FROZEN <= GEN_4))
+ {
+ if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE))
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_BOOST;
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
+
+ gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_FLASH_FIRE;
+ effect = 3;
}
else
{
- gActiveBattler = target1;
- if (gBattleMons[target1].ability && gBattleMons[target1].hp)
- {
- gBattleMons[i].ability = gBattleMons[target1].ability;
- gLastUsedAbility = gBattleMons[target1].ability;
- effect++;
- }
- }
- if (effect)
- {
- BattleScriptPushCursorAndCallback(BattleScript_TraceActivates);
- gStatuses3[i] &= ~STATUS3_TRACE;
- gBattleScripting.battler = i;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_NO_BOOST;
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
- PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
- PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility)
- break;
+ effect = 3;
}
}
+ break;
+ }
+
+ if (effect == 1) // Drain Hp ability.
+ {
+#if B_HEAL_BLOCKING >= GEN_5
+ if (BATTLER_MAX_HP(battler) || gStatuses3[battler] & STATUS3_HEAL_BLOCK)
+#else
+ if (BATTLER_MAX_HP(battler))
+#endif
+ {
+ if ((gProtectStructs[gBattlerAttacker].notFirstStrike))
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless;
+ else
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless_PPLoss;
+ }
+ else
+ {
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain;
+ else
+ gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss;
+
+ gBattleMoveDamage = gBattleMons[battler].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ }
+ }
+ else if (effect == 2) // Boost Stat ability;
+ {
+ if (!CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ if ((gProtectStructs[gBattlerAttacker].notFirstStrike))
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless;
+ else
+ gBattlescriptCurrInstr = BattleScript_MonMadeMoveUseless_PPLoss;
+ }
+ else
+ {
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_MoveStatDrain;
+ else
+ gBattlescriptCurrInstr = BattleScript_MoveStatDrain_PPLoss;
+
+ SET_STATCHANGER(statId, 1, FALSE);
+ gBattleMons[battler].statStages[statId]++;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, statId);
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_MOVE_END: // Think contact abilities.
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_JUSTIFIED:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ && moveType == TYPE_DARK
+ && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ SET_STATCHANGER(STAT_ATK, 1, FALSE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd;
+ effect++;
}
break;
- case ABILITYEFFECT_INTIMIDATE2: // 10
- for (i = 0; i < gBattlersCount; i++)
+ case ABILITY_RATTLED:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ && (moveType == TYPE_DARK || moveType == TYPE_BUG || moveType == TYPE_GHOST)
+ && CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN))
{
- if (gBattleMons[i].ability == ABILITY_INTIMIDATE && (gStatuses3[i] & STATUS3_INTIMIDATE_POKES))
+ SET_STATCHANGER(STAT_SPEED, 1, FALSE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd;
+ effect++;
+ }
+ break;
+ case ABILITY_WATER_COMPACTION:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ && moveType == TYPE_WATER
+ && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ SET_STATCHANGER(STAT_DEF, 2, FALSE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd;
+ effect++;
+ }
+ break;
+ case ABILITY_STAMINA:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ SET_STATCHANGER(STAT_DEF, 1, FALSE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd;
+ effect++;
+ }
+ break;
+ case ABILITY_BERSERK:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ // Had more than half of hp before, now has less
+ && gBattleStruct->hpBefore[battler] > gBattleMons[battler].maxHP / 2
+ && gBattleMons[battler].hp < gBattleMons[battler].maxHP / 2
+ && (gMultiHitCounter == 0 || gMultiHitCounter == 1)
+ && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove))
+ && CompareStat(battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ SET_STATCHANGER(STAT_SPATK, 1, FALSE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd;
+ effect++;
+ }
+ break;
+ case ABILITY_EMERGENCY_EXIT:
+ case ABILITY_WIMP_OUT:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ // Had more than half of hp before, now has less
+ && gBattleStruct->hpBefore[battler] > gBattleMons[battler].maxHP / 2
+ && gBattleMons[battler].hp < gBattleMons[battler].maxHP / 2
+ && (gMultiHitCounter == 0 || gMultiHitCounter == 1)
+ && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove))
+ && (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER))
+ && !(gBattleTypeFlags & BATTLE_TYPE_ARENA)
+ && CountUsablePartyMons(battler) > 0
+ // Not currently held by Sky Drop
+ && !(gStatuses3[battler] & STATUS3_SKY_DROPPED))
+ {
+ gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_EMERGENCY_EXIT;
+ effect++;
+ }
+ break;
+ case ABILITY_WEAK_ARMOR:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ && IS_MOVE_PHYSICAL(gCurrentMove)
+ && (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) // Don't activate if speed cannot be raised
+ || CompareStat(battler, STAT_DEF, MIN_STAT_STAGE, CMP_GREATER_THAN))) // Don't activate if defense cannot be lowered
+ {
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_HIT_ESCAPE && CanBattlerSwitch(gBattlerAttacker))
+ gProtectStructs[battler].disableEjectPack = TRUE; // Set flag for target
+
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_WeakArmorActivates;
+ effect++;
+ }
+ break;
+ case ABILITY_CURSED_BODY:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && gDisableStructs[gBattlerAttacker].disabledMove == MOVE_NONE
+ && IsBattlerAlive(gBattlerAttacker)
+ && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL)
+ && gBattleMons[gBattlerAttacker].pp[gChosenMovePos] != 0
+ && (Random() % 3) == 0)
+ {
+ gDisableStructs[gBattlerAttacker].disabledMove = gChosenMove;
+ gDisableStructs[gBattlerAttacker].disableTimer = 4;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, gChosenMove);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_CursedBodyActivates;
+ effect++;
+ }
+ break;
+ case ABILITY_MUMMY:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && IsBattlerAlive(gBattlerAttacker)
+ && TARGET_TURN_DAMAGED
+ && (IsMoveMakingContact(move, gBattlerAttacker)))
+ {
+ switch (gBattleMons[gBattlerAttacker].ability)
{
- gLastUsedAbility = ABILITY_INTIMIDATE;
- gStatuses3[i] &= ~STATUS3_INTIMIDATE_POKES;
+ case ABILITY_MUMMY:
+ case ABILITY_BATTLE_BOND:
+ case ABILITY_COMATOSE:
+ case ABILITY_DISGUISE:
+ case ABILITY_MULTITYPE:
+ case ABILITY_POWER_CONSTRUCT:
+ case ABILITY_RKS_SYSTEM:
+ case ABILITY_SCHOOLING:
+ case ABILITY_SHIELDS_DOWN:
+ case ABILITY_STANCE_CHANGE:
+ break;
+ default:
+ gLastUsedAbility = gBattleMons[gBattlerAttacker].ability = ABILITY_MUMMY;
BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_IntimidateActivates;
- gBattleStruct->intimidateBattler = i;
+ gBattlescriptCurrInstr = BattleScript_MummyActivates;
effect++;
break;
}
}
break;
- case ABILITYEFFECT_CHECK_OTHER_SIDE: // 12
- side = GetBattlerSide(battler);
- for (i = 0; i < gBattlersCount; i++)
+ case ABILITY_WANDERING_SPIRIT:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && IsBattlerAlive(gBattlerAttacker)
+ && TARGET_TURN_DAMAGED
+ && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT))
{
- if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability)
+ switch (gBattleMons[gBattlerAttacker].ability)
{
- gLastUsedAbility = ability;
- effect = i + 1;
+ case ABILITY_DISGUISE:
+ case ABILITY_FLOWER_GIFT:
+ case ABILITY_GULP_MISSILE:
+ case ABILITY_HUNGER_SWITCH:
+ case ABILITY_ICE_FACE:
+ case ABILITY_ILLUSION:
+ case ABILITY_IMPOSTER:
+ case ABILITY_RECEIVER:
+ case ABILITY_RKS_SYSTEM:
+ case ABILITY_SCHOOLING:
+ case ABILITY_STANCE_CHANGE:
+ case ABILITY_WONDER_GUARD:
+ case ABILITY_ZEN_MODE:
+ break;
+ default:
+ gLastUsedAbility = gBattleMons[gBattlerAttacker].ability;
+ gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability;
+ gBattleMons[gBattlerTarget].ability = gLastUsedAbility;
+ RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability);
+ RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_WanderingSpiritActivates;
+ effect++;
+ break;
}
}
break;
- case ABILITYEFFECT_CHECK_BATTLER_SIDE: // 13
- side = GetBattlerSide(battler);
- for (i = 0; i < gBattlersCount; i++)
+ case ABILITY_ANGER_POINT:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gIsCriticalHit
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN))
{
- if (GetBattlerSide(i) == side && gBattleMons[i].ability == ability)
+ SET_STATCHANGER(STAT_ATK, MAX_STAT_STAGE - gBattleMons[battler].statStages[STAT_ATK], FALSE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetsStatWasMaxedOut;
+ effect++;
+ }
+ break;
+ case ABILITY_COLOR_CHANGE:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && move != MOVE_STRUGGLE
+ && gBattleMoves[move].power != 0
+ && TARGET_TURN_DAMAGED
+ && !IS_BATTLER_OF_TYPE(battler, moveType)
+ && gBattleMons[battler].hp != 0)
+ {
+ SET_BATTLER_TYPE(battler, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ColorChangeActivates;
+ effect++;
+ }
+ break;
+ case ABILITY_GOOEY:
+ case ABILITY_TANGLING_HAIR:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && (CompareStat(gBattlerAttacker, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN) || GetBattlerAbility(gBattlerAttacker) == ABILITY_MIRROR_ARMOR)
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && IsMoveMakingContact(move, gBattlerAttacker))
+ {
+ SET_STATCHANGER(STAT_SPEED, 1, TRUE);
+ gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_GooeyActivates;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITY_ROUGH_SKIN:
+ case ABILITY_IRON_BARBS:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && IsMoveMakingContact(move, gBattlerAttacker))
+ {
+ #if B_ROUGH_SKIN_DMG >= GEN_4
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8;
+ #else
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
+ #endif
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_RoughSkinActivates;
+ effect++;
+ }
+ break;
+ case ABILITY_AFTERMATH:
+ if (!IsAbilityOnField(ABILITY_DAMP)
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerTarget].hp == 0
+ && IsBattlerAlive(gBattlerAttacker)
+ && IsMoveMakingContact(move, gBattlerAttacker))
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AftermathDmg;
+ effect++;
+ }
+ break;
+ case ABILITY_INNARDS_OUT:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerTarget].hp == 0
+ && IsBattlerAlive(gBattlerAttacker))
+ {
+ gBattleMoveDamage = gSpecialStatuses[gBattlerTarget].dmg;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AftermathDmg;
+ effect++;
+ }
+ break;
+ case ABILITY_EFFECT_SPORE:
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GRASS)
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_OVERCOAT
+ && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES)
+ {
+ i = Random() % 3;
+ if (i == 0)
+ goto POISON_POINT;
+ if (i == 1)
+ goto STATIC;
+ // Sleep
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && CanSleep(gBattlerAttacker)
+ && IsMoveMakingContact(move, gBattlerAttacker)
+ && (Random() % 3) == 0)
{
- gLastUsedAbility = ability;
- effect = i + 1;
+ gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_SLEEP;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
}
}
break;
- case ABILITYEFFECT_FIELD_SPORT: // 14
- switch (gLastUsedAbility)
+ POISON_POINT:
+ case ABILITY_POISON_POINT:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && CanBePoisoned(gBattlerAttacker, gBattlerTarget)
+ && IsMoveMakingContact(move, gBattlerAttacker)
+ && (Random() % 3) == 0)
{
- case ABILITYEFFECT_MUD_SPORT:
- for (i = 0; i < gBattlersCount; i++)
+ gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ STATIC:
+ case ABILITY_STATIC:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && CanBeParalyzed(gBattlerAttacker)
+ && IsMoveMakingContact(move, gBattlerAttacker)
+ && (Random() % 3) == 0)
+ {
+ gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITY_FLAME_BODY:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && (IsMoveMakingContact(move, gBattlerAttacker))
+ && TARGET_TURN_DAMAGED
+ && CanBeBurned(gBattlerAttacker)
+ && (Random() % 3) == 0)
+ {
+ gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITY_CUTE_CHARM:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && (IsMoveMakingContact(move, gBattlerAttacker))
+ && TARGET_TURN_DAMAGED
+ && gBattleMons[gBattlerTarget].hp != 0
+ && (Random() % 3) == 0
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS
+ && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL)
+ && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef)
+ && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
+ && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != MON_GENDERLESS
+ && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != MON_GENDERLESS)
+ {
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_INFATUATED_WITH(gBattlerTarget);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_CuteCharmActivates;
+ effect++;
+ }
+ break;
+ case ABILITY_ILLUSION:
+ if (gBattleStruct->illusion[gBattlerTarget].on && !gBattleStruct->illusion[gBattlerTarget].broken && TARGET_TURN_DAMAGED)
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_IllusionOff;
+ effect++;
+ }
+ break;
+ case ABILITY_COTTON_DOWN:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED)
+ {
+ gEffectBattler = gBattlerTarget;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_CottonDownActivates;
+ effect++;
+ }
+ break;
+ case ABILITY_STEAM_ENGINE:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ && CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)
+ && (moveType == TYPE_FIRE || moveType == TYPE_WATER))
+ {
+ SET_STATCHANGER(STAT_SPEED, 6, FALSE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseOnMoveEnd;
+ effect++;
+ }
+ break;
+ case ABILITY_SAND_SPIT:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && !(gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT))
+ {
+ if (gBattleWeather & B_WEATHER_PRIMAL_ANY && WEATHER_HAS_EFFECT)
{
- if (gStatuses3[i] & STATUS3_MUDSPORT)
- effect = i + 1;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BlockedByPrimalWeatherRet;
+ effect++;
}
- break;
- case ABILITYEFFECT_WATER_SPORT:
- for (i = 0; i < gBattlersCount; i++)
+ else if (TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE))
{
- if (gStatuses3[i] & STATUS3_WATERSPORT)
- effect = i + 1;
+ gBattleScripting.battler = gActiveBattler = battler;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SandSpitActivates;
+ effect++;
}
- break;
- default:
- for (i = 0; i < gBattlersCount; i++)
+ }
+ break;
+ case ABILITY_PERISH_BODY:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler)
+ && (IsMoveMakingContact(move, gBattlerAttacker))
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_PERISH_SONG))
+ {
+ if (!(gStatuses3[battler] & STATUS3_PERISH_SONG))
{
- if (gBattleMons[i].ability == ability)
+ gStatuses3[battler] |= STATUS3_PERISH_SONG;
+ gDisableStructs[battler].perishSongTimer = 3;
+ gDisableStructs[battler].perishSongTimerStartValue = 3;
+ }
+ gStatuses3[gBattlerAttacker] |= STATUS3_PERISH_SONG;
+ gDisableStructs[gBattlerAttacker].perishSongTimer = 3;
+ gDisableStructs[gBattlerAttacker].perishSongTimerStartValue = 3;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_PerishBodyActivates;
+ effect++;
+ }
+ break;
+ case ABILITY_GULP_MISSILE:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && IsBattlerAlive(battler))
+ {
+ if (gBattleMons[gBattlerTarget].species == SPECIES_CRAMORANT_GORGING)
+ {
+ gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerTarget]] = gBattleMons[gBattlerTarget].species;
+ gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT;
+ if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
{
- gLastUsedAbility = ability;
- effect = i + 1;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
}
- }
- break;
- }
- break;
- case ABILITYEFFECT_CHECK_ON_FIELD: // 19
- for (i = 0; i < gBattlersCount; i++)
- {
- if (gBattleMons[i].ability == ability && gBattleMons[i].hp != 0)
- {
- gLastUsedAbility = ability;
- effect = i + 1;
- }
- }
- break;
- case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER: // 15
- for (i = 0; i < gBattlersCount; i++)
- {
- if (gBattleMons[i].ability == ability && i != battler)
- {
- gLastUsedAbility = ability;
- effect = i + 1;
- }
- }
- break;
- case ABILITYEFFECT_COUNT_OTHER_SIDE: // 16
- side = GetBattlerSide(battler);
- for (i = 0; i < gBattlersCount; i++)
- {
- if (GetBattlerSide(i) != side && gBattleMons[i].ability == ability)
- {
- gLastUsedAbility = ability;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_GulpMissileGorging;
effect++;
}
- }
- break;
- case ABILITYEFFECT_COUNT_BATTLER_SIDE: // 17
- side = GetBattlerSide(battler);
- for (i = 0; i < gBattlersCount; i++)
- {
- if (GetBattlerSide(i) == side && gBattleMons[i].ability == ability)
+ else if (gBattleMons[gBattlerTarget].species == SPECIES_CRAMORANT_GULPING)
{
- gLastUsedAbility = ability;
- effect++;
- }
- }
- break;
- case ABILITYEFFECT_COUNT_ON_FIELD: // 18
- for (i = 0; i < gBattlersCount; i++)
- {
- if (gBattleMons[i].ability == ability && i != battler)
- {
- gLastUsedAbility = ability;
+ gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerTarget]] = gBattleMons[gBattlerTarget].species;
+ gBattleMons[gBattlerTarget].species = SPECIES_CRAMORANT;
+ if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_GulpMissileGulping;
effect++;
}
}
break;
}
+ break;
+ case ABILITYEFFECT_MOVE_END_ATTACKER: // Same as above, but for attacker
+ switch (gLastUsedAbility)
+ {
+ case ABILITY_POISON_TOUCH:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerTarget].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && CanBePoisoned(gBattlerAttacker, gBattlerTarget)
+ && IsMoveMakingContact(move, gBattlerAttacker)
+ && TARGET_TURN_DAMAGED // Need to actually hit the target
+ && (Random() % 3) == 0)
+ {
+ gBattleScripting.moveEffect = MOVE_EFFECT_POISON;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ break;
+ case ABILITY_STENCH:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[gBattlerTarget].hp != 0
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && (Random() % 10) == 0
+ && !IS_MOVE_STATUS(move)
+ && !sMovesNotAffectedByStench[gCurrentMove])
+ {
+ gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH;
+ BattleScriptPushCursor();
+ SetMoveEffect(FALSE, 0);
+ BattleScriptPop();
+ effect++;
+ }
+ break;
+ case ABILITY_GULP_MISSILE:
+ if (((gCurrentMove == MOVE_SURF && TARGET_TURN_DAMAGED) || gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER)
+ && (effect = ShouldChangeFormHpBased(gBattlerAttacker)))
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AttackerFormChange;
+ effect++;
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_MOVE_END_OTHER: // Abilities that activate on *another* battler's moveend: Dancer, Soul-Heart, Receiver, Symbiosis
+ switch (GetBattlerAbility(battler))
+ {
+ case ABILITY_DANCER:
+ if (IsBattlerAlive(battler)
+ && (gBattleMoves[gCurrentMove].flags & FLAG_DANCE)
+ && !gSpecialStatuses[battler].dancerUsedMove
+ && gBattlerAttacker != battler)
+ {
+ // Set bit and save Dancer mon's original target
+ gSpecialStatuses[battler].dancerUsedMove = TRUE;
+ gSpecialStatuses[battler].dancerOriginalTarget = *(gBattleStruct->moveTarget + battler) | 0x4;
+ gBattleStruct->atkCancellerTracker = 0;
+ gBattlerAttacker = gBattlerAbility = battler;
+ gCalledMove = gCurrentMove;
- if (effect && caseID < ABILITYEFFECT_CHECK_OTHER_SIDE && gLastUsedAbility != 0xFF)
- RecordAbilityBattle(battler, gLastUsedAbility);
+ // Set the target to the original target of the mon that first used a Dance move
+ gBattlerTarget = gBattleScripting.savedBattler & 0x3;
+
+ // Make sure that the target isn't an ally - if it is, target the original user
+ if (GetBattlerSide(gBattlerTarget) == GetBattlerSide(gBattlerAttacker))
+ gBattlerTarget = (gBattleScripting.savedBattler & 0xF0) >> 4;
+ gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
+ BattleScriptExecute(BattleScript_DancerActivates);
+ effect++;
+ }
+ break;
+ }
+ break;
+ case ABILITYEFFECT_IMMUNITY: // 5
+ for (battler = 0; battler < gBattlersCount; battler++)
+ {
+ switch (GetBattlerAbility(battler))
+ {
+ case ABILITY_IMMUNITY:
+ if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER))
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OWN_TEMPO:
+ if (gBattleMons[battler].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ effect = 2;
+ }
+ break;
+ case ABILITY_LIMBER:
+ if (gBattleMons[battler].status1 & STATUS1_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_INSOMNIA:
+ case ABILITY_VITAL_SPIRIT:
+ if (gBattleMons[battler].status1 & STATUS1_SLEEP)
+ {
+ gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE;
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_WATER_VEIL:
+ case ABILITY_WATER_BUBBLE:
+ if (gBattleMons[battler].status1 & STATUS1_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_MAGMA_ARMOR:
+ if (gBattleMons[battler].status1 & STATUS1_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ effect = 1;
+ }
+ break;
+ case ABILITY_OBLIVIOUS:
+ if (gBattleMons[battler].status2 & STATUS2_INFATUATION)
+ effect = 3;
+ else if (gDisableStructs[battler].tauntTimer != 0)
+ effect = 4;
+ break;
+ }
+ if (effect != 0)
+ {
+ switch (effect)
+ {
+ case 1: // status cleared
+ gBattleMons[battler].status1 = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
+ break;
+ case 2: // get rid of confusion
+ gBattleMons[battler].status2 &= ~STATUS2_CONFUSION;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
+ break;
+ case 3: // get rid of infatuation
+ gBattleMons[battler].status2 &= ~STATUS2_INFATUATION;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BattlerGotOverItsInfatuation;
+ break;
+ case 4: // get rid of taunt
+ gDisableStructs[battler].tauntTimer = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BattlerShookOffTaunt;
+ break;
+ }
+
+ gBattleScripting.battler = gActiveBattler = gBattlerAbility = battler;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ return effect;
+ }
+ }
+ break;
+ case ABILITYEFFECT_FORECAST: // 6
+ for (battler = 0; battler < gBattlersCount; battler++)
+ {
+ u16 battlerAbility = GetBattlerAbility(battler);
+ if (battlerAbility == ABILITY_FORECAST || battlerAbility == ABILITY_FLOWER_GIFT)
+ {
+ effect = TryWeatherFormChange(battler);
+ if (effect != 0)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
+ gBattleScripting.battler = battler;
+ gBattleStruct->formToChangeInto = effect - 1;
+ return effect;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_SYNCHRONIZE:
+ if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
+ {
+ gHitMarker &= ~HITMARKER_SYNCHRONISE_EFFECT;
+
+ if (!(gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY))
+ {
+ gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ #if B_SYNCHRONIZE_TOXIC < GEN_5
+ if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC)
+ gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON;
+ #endif
+
+ gBattleScripting.moveEffect = gBattleStruct->synchronizeMoveEffect + MOVE_EFFECT_AFFECTS_USER;
+ gBattleScripting.battler = gBattlerAbility = gBattlerTarget;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, ABILITY_SYNCHRONIZE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ }
+ break;
+ case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8
+ if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
+ {
+ gHitMarker &= ~HITMARKER_SYNCHRONISE_EFFECT;
+
+ if (!(gBattleMons[gBattlerTarget].status1 & STATUS1_ANY))
+ {
+ gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN);
+ if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC)
+ gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON;
+
+ gBattleScripting.moveEffect = gBattleStruct->synchronizeMoveEffect;
+ gBattleScripting.battler = gBattlerAbility = gBattlerAttacker;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, ABILITY_SYNCHRONIZE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SynchronizeActivates;
+ gHitMarker |= HITMARKER_IGNORE_SAFEGUARD;
+ effect++;
+ }
+ }
+ break;
+ case ABILITYEFFECT_INTIMIDATE1:
+ case ABILITYEFFECT_INTIMIDATE2:
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (GetBattlerAbility(i) == ABILITY_INTIMIDATE && gBattleResources->flags->flags[i] & RESOURCE_FLAG_INTIMIDATED
+ && (IsBattlerAlive(BATTLE_OPPOSITE(i)) || IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(i))))) // At least one opposing mon has to be alive.
+ {
+ gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_INTIMIDATED;
+ gLastUsedAbility = ABILITY_INTIMIDATE;
+ if (caseID == ABILITYEFFECT_INTIMIDATE1)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivatesEnd3);
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_IntimidateActivates;
+ }
+ battler = gBattlerAbility = gBattleStruct->intimidateBattler = i;
+ effect++;
+ break;
+ }
+ }
+ break;
+ case ABILITYEFFECT_TRACE1:
+ case ABILITYEFFECT_TRACE2:
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattleMons[i].ability == ABILITY_TRACE && (gBattleResources->flags->flags[i] & RESOURCE_FLAG_TRACED))
+ {
+ u8 side = (GetBattlerPosition(i) ^ BIT_SIDE) & BIT_SIDE; // side of the opposing pokemon
+ u8 target1 = GetBattlerAtPosition(side);
+ u8 target2 = GetBattlerAtPosition(side + BIT_FLANK);
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0
+ && !sAbilitiesNotTraced[gBattleMons[target2].ability] && gBattleMons[target2].hp != 0)
+ gActiveBattler = GetBattlerAtPosition(((Random() & 1) * 2) | side), effect++;
+ else if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0)
+ gActiveBattler = target1, effect++;
+ else if (!sAbilitiesNotTraced[gBattleMons[target2].ability] && gBattleMons[target2].hp != 0)
+ gActiveBattler = target2, effect++;
+ }
+ else
+ {
+ if (!sAbilitiesNotTraced[gBattleMons[target1].ability] && gBattleMons[target1].hp != 0)
+ gActiveBattler = target1, effect++;
+ }
+
+ if (effect != 0)
+ {
+ if (caseID == ABILITYEFFECT_TRACE1)
+ {
+ BattleScriptPushCursorAndCallback(BattleScript_TraceActivatesEnd3);
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TraceActivates;
+ }
+ gBattleResources->flags->flags[i] &= ~RESOURCE_FLAG_TRACED;
+ gBattleStruct->tracedAbility[i] = gLastUsedAbility = gBattleMons[gActiveBattler].ability;
+ battler = gBattlerAbility = gBattleScripting.battler = i;
+
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility)
+ break;
+ }
+ }
+ }
+ break;
+ case ABILITYEFFECT_NEUTRALIZINGGAS:
+ // Prints message only. separate from ABILITYEFFECT_ON_SWITCHIN bc activates before entry hazards
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattleMons[i].ability == ABILITY_NEUTRALIZING_GAS && !(gBattleResources->flags->flags[i] & RESOURCE_FLAG_NEUTRALIZING_GAS))
+ {
+ gBattleResources->flags->flags[i] |= RESOURCE_FLAG_NEUTRALIZING_GAS;
+ gBattlerAbility = i;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS;
+ BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
+ effect++;
+ }
+
+ if (effect != 0)
+ break;
+ }
+ break;
+ case ABILITYEFFECT_FIELD_SPORT:
+ switch (gLastUsedAbility)
+ {
+ case ABILITYEFFECT_MUD_SPORT:
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gStatuses4[i] & STATUS4_MUD_SPORT)
+ effect = i + 1;
+ }
+ break;
+ case ABILITYEFFECT_WATER_SPORT:
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gStatuses4[i] & STATUS4_WATER_SPORT)
+ effect = i + 1;
+ }
+ break;
+ default:
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattleMons[i].ability == ability)
+ {
+ gLastUsedAbility = ability;
+ effect = i + 1;
+ }
+ }
+ break;
+ }
+ break;
}
+ if (effect && gLastUsedAbility != 0xFF)
+ RecordAbilityBattle(battler, gLastUsedAbility);
+ if (effect && caseID <= ABILITYEFFECT_MOVE_END)
+ gBattlerAbility = battler;
+
return effect;
}
+bool32 IsNeutralizingGasBannedAbility(u32 ability)
+{
+ switch (ability)
+ {
+ case ABILITY_MULTITYPE:
+ case ABILITY_ZEN_MODE:
+ case ABILITY_STANCE_CHANGE:
+ case ABILITY_POWER_CONSTRUCT:
+ case ABILITY_SCHOOLING:
+ case ABILITY_RKS_SYSTEM:
+ case ABILITY_SHIELDS_DOWN:
+ case ABILITY_COMATOSE:
+ case ABILITY_DISGUISE:
+ case ABILITY_GULP_MISSILE:
+ case ABILITY_ICE_FACE:
+ case ABILITY_AS_ONE_ICE_RIDER:
+ case ABILITY_AS_ONE_SHADOW_RIDER:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+bool32 IsNeutralizingGasOnField(void)
+{
+ u32 i;
+
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (IsBattlerAlive(i) && gBattleMons[i].ability == ABILITY_NEUTRALIZING_GAS && !(gStatuses3[i] & STATUS3_GASTRO_ACID))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+u32 GetBattlerAbility(u8 battlerId)
+{
+ if (gStatuses3[battlerId] & STATUS3_GASTRO_ACID)
+ return ABILITY_NONE;
+
+ if (IsNeutralizingGasOnField() && !IsNeutralizingGasBannedAbility(gBattleMons[battlerId].ability))
+ return ABILITY_NONE;
+
+ if ((((gBattleMons[gBattlerAttacker].ability == ABILITY_MOLD_BREAKER
+ || gBattleMons[gBattlerAttacker].ability == ABILITY_TERAVOLT
+ || gBattleMons[gBattlerAttacker].ability == ABILITY_TURBOBLAZE)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_GASTRO_ACID))
+ || gBattleMoves[gCurrentMove].flags & FLAG_TARGET_ABILITY_IGNORED)
+ && sAbilitiesAffectedByMoldBreaker[gBattleMons[battlerId].ability]
+ && gBattlerByTurnOrder[gCurrentTurnActionNumber] == gBattlerAttacker
+ && gActionsByTurnOrder[gBattlerByTurnOrder[gBattlerAttacker]] == B_ACTION_USE_MOVE
+ && gCurrentTurnActionNumber < gBattlersCount)
+ return ABILITY_NONE;
+
+ return gBattleMons[battlerId].ability;
+}
+
+u32 IsAbilityOnSide(u32 battlerId, u32 ability)
+{
+ if (IsBattlerAlive(battlerId) && GetBattlerAbility(battlerId) == ability)
+ return battlerId + 1;
+ else if (IsBattlerAlive(BATTLE_PARTNER(battlerId)) && GetBattlerAbility(BATTLE_PARTNER(battlerId)) == ability)
+ return BATTLE_PARTNER(battlerId) + 1;
+ else
+ return 0;
+}
+
+u32 IsAbilityOnOpposingSide(u32 battlerId, u32 ability)
+{
+ return IsAbilityOnSide(BATTLE_OPPOSITE(battlerId), ability);
+}
+
+u32 IsAbilityOnField(u32 ability)
+{
+ u32 i;
+
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (IsBattlerAlive(i) && GetBattlerAbility(i) == ability)
+ return i + 1;
+ }
+
+ return 0;
+}
+
+u32 IsAbilityOnFieldExcept(u32 battlerId, u32 ability)
+{
+ u32 i;
+
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (i != battlerId && IsBattlerAlive(i) && GetBattlerAbility(i) == ability)
+ return i + 1;
+ }
+
+ return 0;
+}
+
+u32 IsAbilityPreventingEscape(u32 battlerId)
+{
+ u32 id;
+ #if B_GHOSTS_ESCAPE >= GEN_6
+ if (IS_BATTLER_OF_TYPE(battlerId, TYPE_GHOST))
+ return 0;
+ #endif
+ #if B_SHADOW_TAG_ESCAPE >= GEN_4
+ if ((id = IsAbilityOnOpposingSide(battlerId, ABILITY_SHADOW_TAG)) && GetBattlerAbility(battlerId) != ABILITY_SHADOW_TAG)
+ #else
+ if (id = IsAbilityOnOpposingSide(battlerId, ABILITY_SHADOW_TAG))
+ #endif
+ return id;
+ if ((id = IsAbilityOnOpposingSide(battlerId, ABILITY_ARENA_TRAP)) && IsBattlerGrounded(battlerId))
+ return id;
+ if ((id = IsAbilityOnOpposingSide(battlerId, ABILITY_MAGNET_PULL)) && IS_BATTLER_OF_TYPE(battlerId, TYPE_STEEL))
+ return id;
+
+ return 0;
+}
+
+bool32 CanBattlerEscape(u32 battlerId) // no ability check
+{
+ if (GetBattlerHoldEffect(battlerId, TRUE) == HOLD_EFFECT_SHED_SHELL)
+ return TRUE;
+ else if ((B_GHOSTS_ESCAPE >= GEN_6 && !IS_BATTLER_OF_TYPE(battlerId, TYPE_GHOST)) && gBattleMons[battlerId].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED))
+ return FALSE;
+ else if (gStatuses3[battlerId] & STATUS3_ROOTED)
+ return FALSE;
+ else if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK)
+ return FALSE;
+ else if (gStatuses3[battlerId] & STATUS3_SKY_DROPPED)
+ return FALSE;
+ else
+ return TRUE;
+}
+
void BattleScriptExecute(const u8 *BS_ptr)
{
gBattlescriptCurrInstr = BS_ptr;
@@ -3206,160 +6018,447 @@ enum
ITEM_STATS_CHANGE,
};
-#define TRY_EAT_CONFUSE_BERRY(flavor) \
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn) \
- { \
- PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, flavor); \
- gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam; \
- if (gBattleMoveDamage == 0) \
- gBattleMoveDamage = 1; \
- if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP) \
- gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp; \
- gBattleMoveDamage *= -1; \
- if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, flavor) < 0) \
- BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); \
- else \
- BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); \
- effect = ITEM_HP_CHANGE; \
+bool32 IsBattlerTerrainAffected(u8 battlerId, u32 terrainFlag)
+{
+ if (!(gFieldStatuses & terrainFlag))
+ return FALSE;
+ else if (gStatuses3[battlerId] & STATUS3_SEMI_INVULNERABLE)
+ return FALSE;
+
+ return IsBattlerGrounded(battlerId);
+}
+
+bool32 CanSleep(u8 battlerId)
+{
+ u16 ability = GetBattlerAbility(battlerId);
+ if (ability == ABILITY_INSOMNIA
+ || ability == ABILITY_VITAL_SPIRIT
+ || ability == ABILITY_COMATOSE
+ || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD
+ || gBattleMons[battlerId].status1 & STATUS1_ANY
+ || IsAbilityOnSide(battlerId, ABILITY_SWEET_VEIL)
+ || IsAbilityStatusProtected(battlerId)
+ || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_MISTY_TERRAIN))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget)
+{
+ u16 ability = GetBattlerAbility(battlerTarget);
+
+ if (!(CanPoisonType(battlerAttacker, battlerTarget))
+ || gSideStatuses[GetBattlerSide(battlerTarget)] & SIDE_STATUS_SAFEGUARD
+ || gBattleMons[battlerTarget].status1 & STATUS1_ANY
+ || ability == ABILITY_IMMUNITY
+ || ability == ABILITY_COMATOSE
+ || IsAbilityOnSide(battlerTarget, ABILITY_PASTEL_VEIL)
+ || gBattleMons[battlerTarget].status1 & STATUS1_ANY
+ || IsAbilityStatusProtected(battlerTarget)
+ || IsBattlerTerrainAffected(battlerTarget, STATUS_FIELD_MISTY_TERRAIN))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 CanBeBurned(u8 battlerId)
+{
+ u16 ability = GetBattlerAbility(battlerId);
+ if (IS_BATTLER_OF_TYPE(battlerId, TYPE_FIRE)
+ || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD
+ || gBattleMons[battlerId].status1 & STATUS1_ANY
+ || ability == ABILITY_WATER_VEIL
+ || ability == ABILITY_WATER_BUBBLE
+ || ability == ABILITY_COMATOSE
+ || IsAbilityStatusProtected(battlerId)
+ || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 CanBeParalyzed(u8 battlerId)
+{
+ u16 ability = GetBattlerAbility(battlerId);
+ if ((B_PARALYZE_ELECTRIC >= GEN_6 && IS_BATTLER_OF_TYPE(battlerId, TYPE_ELECTRIC))
+ || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD
+ || ability == ABILITY_LIMBER
+ || ability == ABILITY_COMATOSE
+ || gBattleMons[battlerId].status1 & STATUS1_ANY
+ || IsAbilityStatusProtected(battlerId)
+ || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 CanBeFrozen(u8 battlerId)
+{
+ u16 ability = GetBattlerAbility(battlerId);
+ if (IS_BATTLER_OF_TYPE(battlerId, TYPE_ICE)
+ || IsBattlerWeatherAffected(battlerId, B_WEATHER_SUN)
+ || gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_SAFEGUARD
+ || ability == ABILITY_MAGMA_ARMOR
+ || ability == ABILITY_COMATOSE
+ || gBattleMons[battlerId].status1 & STATUS1_ANY
+ || IsAbilityStatusProtected(battlerId)
+ || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 CanBeConfused(u8 battlerId)
+{
+ if (GetBattlerAbility(gEffectBattler) == ABILITY_OWN_TEMPO
+ || gBattleMons[gEffectBattler].status2 & STATUS2_CONFUSION
+ || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN))
+ return FALSE;
+ return TRUE;
+}
+
+// second argument is 1/X of current hp compared to max hp
+bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId)
+{
+ bool32 isBerry = (ItemId_GetPocket(itemId) == POCKET_BERRIES);
+
+ if (gBattleMons[battlerId].hp == 0)
+ return FALSE;
+ if (gBattleScripting.overrideBerryRequirements)
+ return TRUE;
+ // Unnerve prevents consumption of opponents' berries.
+ if (isBerry && IsUnnerveAbilityOnOpposingSide(battlerId))
+ return FALSE;
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / hpFraction)
+ return TRUE;
+
+ if (hpFraction <= 4 && GetBattlerAbility(battlerId) == ABILITY_GLUTTONY && isBerry
+ && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2)
+ {
+ RecordAbilityBattle(battlerId, ABILITY_GLUTTONY);
+ return TRUE;
}
-#define TRY_EAT_STAT_UP_BERRY(stat) \
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam \
- && !moveTurn && gBattleMons[battlerId].statStages[stat] < MAX_STAT_STAGE) \
- { \
- PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); \
- gEffectBattler = battlerId; \
- SET_STATCHANGER(stat, 1, FALSE); \
- gBattleScripting.animArg1 = 14 + (stat); \
- gBattleScripting.animArg2 = 0; \
- BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); \
- effect = ITEM_STATS_CHANGE; \
+ return FALSE;
+}
+
+#if B_CONFUSE_BERRIES_HEAL >= GEN_7
+ #define CONFUSE_BERRY_HP_FRACTION 4
+#else
+ #define CONFUSE_BERRY_HP_FRACTION 2
+#endif
+
+static u8 HealConfuseBerry(u32 battlerId, u32 itemId, u8 flavorId, bool32 end2)
+{
+#if B_HEAL_BLOCKING >= GEN_5
+ if (HasEnoughHpToEatBerry(battlerId, CONFUSE_BERRY_HP_FRACTION, itemId) && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK))
+#else
+ if (HasEnoughHpToEatBerry(battlerId, CONFUSE_BERRY_HP_FRACTION, itemId))
+#endif
+ {
+ PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, flavorId);
+
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / GetBattlerHoldEffectParam(battlerId);
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+
+ if (GetBattlerAbility(battlerId) == ABILITY_RIPEN)
+ {
+ gBattleMoveDamage *= 2;
+ gBattlerAbility = battlerId;
+ }
+ gBattleScripting.battler = battlerId;
+ if (end2)
+ {
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, flavorId) < 0)
+ BattleScriptExecute(BattleScript_BerryConfuseHealEnd2);
+ else
+ BattleScriptExecute(BattleScript_ItemHealHP_RemoveItemEnd2);
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ if (GetFlavorRelationByPersonality(gBattleMons[battlerId].personality, flavorId) < 0)
+ gBattlescriptCurrInstr = BattleScript_BerryConfuseHealRet;
+ else
+ gBattlescriptCurrInstr = BattleScript_ItemHealHP_RemoveItemRet;
+ }
+
+ return ITEM_HP_CHANGE;
}
+ return 0;
+}
+
+#undef CONFUSE_BERRY_HP_FRACTION
+
+static u8 StatRaiseBerry(u32 battlerId, u32 itemId, u32 statId, bool32 end2)
+{
+ if (CompareStat(battlerId, statId, MAX_STAT_STAGE, CMP_LESS_THAN) && HasEnoughHpToEatBerry(battlerId, GetBattlerHoldEffectParam(battlerId), itemId))
+ {
+ BufferStatChange(battlerId, statId, STRINGID_STATROSE);
+ gEffectBattler = battlerId;
+ if (GetBattlerAbility(battlerId) == ABILITY_RIPEN)
+ SET_STATCHANGER(statId, 2, FALSE);
+ else
+ SET_STATCHANGER(statId, 1, FALSE);
+
+ gBattleScripting.animArg1 = 14 + statId;
+ gBattleScripting.animArg2 = 0;
+
+ if (end2)
+ {
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet;
+ }
+ return ITEM_STATS_CHANGE;
+ }
+ return 0;
+}
+
+static u8 RandomStatRaiseBerry(u32 battlerId, u32 itemId, bool32 end2)
+{
+ s32 i;
+ u16 stringId;
+
+ for (i = 0; i < NUM_STATS - 1; i++)
+ {
+ if (CompareStat(battlerId, STAT_ATK + i, MAX_STAT_STAGE, CMP_LESS_THAN))
+ break;
+ }
+ if (i != NUM_STATS - 1 && HasEnoughHpToEatBerry(battlerId, GetBattlerHoldEffectParam(battlerId), itemId))
+ {
+ u16 battlerAbility = GetBattlerAbility(battlerId);
+ do
+ {
+ i = Random() % (NUM_STATS - 1);
+ } while (!CompareStat(battlerId, STAT_ATK + i, MAX_STAT_STAGE, CMP_LESS_THAN));
+
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1);
+ stringId = (battlerAbility == ABILITY_CONTRARY) ? STRINGID_STATFELL : STRINGID_STATROSE;
+ gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
+ gBattleTextBuff2[1] = B_BUFF_STRING;
+ gBattleTextBuff2[2] = STRINGID_STATSHARPLY;
+ gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8;
+ gBattleTextBuff2[4] = B_BUFF_STRING;
+ gBattleTextBuff2[5] = stringId;
+ gBattleTextBuff2[6] = stringId >> 8;
+ gBattleTextBuff2[7] = EOS;
+ gEffectBattler = battlerId;
+ if (battlerAbility == ABILITY_RIPEN)
+ SET_STATCHANGER(i + 1, 4, FALSE);
+ else
+ SET_STATCHANGER(i + 1, 2, FALSE);
+
+ gBattleScripting.animArg1 = 0x21 + i + 6;
+ gBattleScripting.animArg2 = 0;
+ if (end2)
+ {
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet;
+ }
+
+ return ITEM_STATS_CHANGE;
+ }
+ return 0;
+}
+
+static u8 TrySetMicleBerry(u32 battlerId, u32 itemId, bool32 end2)
+{
+ if (HasEnoughHpToEatBerry(battlerId, 4, itemId))
+ {
+ gProtectStructs[battlerId].usedMicleBerry = TRUE; // battler's next attack has increased accuracy
+
+ if (end2)
+ {
+ BattleScriptExecute(BattleScript_MicleBerryActivateEnd2);
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MicleBerryActivateRet;
+ }
+ return ITEM_EFFECT_OTHER;
+ }
+ return 0;
+}
+
+static u8 DamagedStatBoostBerryEffect(u8 battlerId, u8 statId, u8 split)
+{
+ if (IsBattlerAlive(battlerId)
+ && TARGET_TURN_DAMAGED
+ && CompareStat(battlerId, statId, MAX_STAT_STAGE, CMP_LESS_THAN)
+ && !DoesSubstituteBlockMove(gBattlerAttacker, battlerId, gCurrentMove)
+ && GetBattleMoveSplit(gCurrentMove) == split)
+ {
+ BufferStatChange(battlerId, statId, STRINGID_STATROSE);
+
+ gEffectBattler = battlerId;
+ if (GetBattlerAbility(battlerId) == ABILITY_RIPEN)
+ SET_STATCHANGER(statId, 2, FALSE);
+ else
+ SET_STATCHANGER(statId, 1, FALSE);
+
+ gBattleScripting.animArg1 = 14 + statId;
+ gBattleScripting.animArg2 = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet;
+ return ITEM_STATS_CHANGE;
+ }
+ return 0;
+}
+
+u8 TryHandleSeed(u8 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute)
+{
+ if (gFieldStatuses & terrainFlag && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ BufferStatChange(battler, statId, STRINGID_STATROSE);
+ gLastUsedItem = itemId; // For surge abilities
+ gEffectBattler = gBattleScripting.battler = battler;
+ SET_STATCHANGER(statId, 1, FALSE);
+ gBattleScripting.animArg1 = 14 + statId;
+ gBattleScripting.animArg2 = 0;
+ if (execute)
+ {
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_BerryStatRaiseRet;
+ }
+ return ITEM_STATS_CHANGE;
+ }
+ return 0;
+}
+
+static u8 ItemHealHp(u32 battlerId, u32 itemId, bool32 end2, bool32 percentHeal)
+{
+#if B_HEAL_BLOCKING >= GEN_5
+ if (HasEnoughHpToEatBerry(battlerId, 2, itemId) && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK)
+#else
+ if (HasEnoughHpToEatBerry(battlerId, 2, itemId)
+#endif
+ && !(gBattleScripting.overrideBerryRequirements && gBattleMons[battlerId].hp == gBattleMons[battlerId].maxHP))
+ {
+ if (percentHeal)
+ gBattleMoveDamage = (gBattleMons[battlerId].maxHP * GetBattlerHoldEffectParam(battlerId) / 100) * -1;
+ else
+ gBattleMoveDamage = GetBattlerHoldEffectParam(battlerId) * -1;
+
+ // check ripen
+ if (ItemId_GetPocket(itemId) == POCKET_BERRIES && GetBattlerAbility(battlerId) == ABILITY_RIPEN)
+ gBattleMoveDamage *= 2;
+
+ gBattlerAbility = battlerId; // in SWSH, berry juice shows ability pop up but has no effect. This is mimicked here
+ if (end2)
+ {
+ BattleScriptExecute(BattleScript_ItemHealHP_RemoveItemEnd2);
+ }
+ else
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ItemHealHP_RemoveItemRet;
+ }
+ return ITEM_HP_CHANGE;
+ }
+ return 0;
+}
+
+static bool32 UnnerveOn(u32 battlerId, u32 itemId)
+{
+ if (ItemId_GetPocket(itemId) == POCKET_BERRIES && IsUnnerveAbilityOnOpposingSide(battlerId))
+ return TRUE;
+ return FALSE;
+}
+
+static bool32 GetMentalHerbEffect(u8 battlerId)
+{
+ bool32 ret = FALSE;
+
+ // Check infatuation
+ if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION)
+ {
+ gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_INFATUATION; // STRINGID_TARGETGOTOVERINFATUATION
+ StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ ret = TRUE;
+ }
+ #if B_MENTAL_HERB >= GEN_5
+ // Check taunt
+ if (gDisableStructs[battlerId].tauntTimer != 0)
+ {
+ gDisableStructs[battlerId].tauntTimer = gDisableStructs[battlerId].tauntTimer2 = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT;
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT);
+ ret = TRUE;
+ }
+ // Check encore
+ if (gDisableStructs[battlerId].encoreTimer != 0)
+ {
+ gDisableStructs[battlerId].encoredMove = 0;
+ gDisableStructs[battlerId].encoreTimerStartValue = gDisableStructs[battlerId].encoreTimer = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED
+ ret = TRUE;
+ }
+ // Check torment
+ if (gBattleMons[battlerId].status2 & STATUS2_TORMENT)
+ {
+ gBattleMons[battlerId].status2 &= ~STATUS2_TORMENT;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT;
+ ret = TRUE;
+ }
+ // Check heal block
+ if (gStatuses3[battlerId] & STATUS3_HEAL_BLOCK)
+ {
+ gStatuses3[battlerId] &= ~STATUS3_HEAL_BLOCK;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK;
+ ret = TRUE;
+ }
+ // Check disable
+ if (gDisableStructs[battlerId].disableTimer != 0)
+ {
+ gDisableStructs[battlerId].disableTimer = gDisableStructs[battlerId].disableTimerStartValue = 0;
+ gDisableStructs[battlerId].disabledMove = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE;
+ ret = TRUE;
+ }
+ #endif
+ return ret;
+}
u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
- int i = 0;
+ int i = 0, moveType;
u8 effect = ITEM_NO_EFFECT;
u8 changedPP = 0;
- u8 battlerHoldEffect, atkHoldEffect, defHoldEffect;
- u8 battlerHoldEffectParam, atkHoldEffectParam, defHoldEffectParam;
- u16 atkItem, defItem;
+ u8 battlerHoldEffect, atkHoldEffect;
+ u8 atkHoldEffectParam;
+ u16 atkItem;
gLastUsedItem = gBattleMons[battlerId].item;
- if (gLastUsedItem == ITEM_ENIGMA_BERRY)
- {
- battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect;
- battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam;
- }
- else
- {
- battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
- battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem);
- }
+ battlerHoldEffect = GetBattlerHoldEffect(battlerId, TRUE);
atkItem = gBattleMons[gBattlerAttacker].item;
- if (atkItem == ITEM_ENIGMA_BERRY)
- {
- atkHoldEffect = gEnigmaBerries[gBattlerAttacker].holdEffect;
- atkHoldEffectParam = gEnigmaBerries[gBattlerAttacker].holdEffectParam;
- }
- else
- {
- atkHoldEffect = ItemId_GetHoldEffect(atkItem);
- atkHoldEffectParam = ItemId_GetHoldEffectParam(atkItem);
- }
-
- // def variables are unused
- defItem = gBattleMons[gBattlerTarget].item;
- if (defItem == ITEM_ENIGMA_BERRY)
- {
- defHoldEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
- defHoldEffectParam = gEnigmaBerries[gBattlerTarget].holdEffectParam;
- }
- else
- {
- defHoldEffect = ItemId_GetHoldEffect(defItem);
- defHoldEffectParam = ItemId_GetHoldEffectParam(defItem);
- }
+ atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE);
+ atkHoldEffectParam = GetBattlerHoldEffectParam(gBattlerAttacker);
switch (caseID)
{
case ITEMEFFECT_ON_SWITCH_IN:
- switch (battlerHoldEffect)
- {
- case HOLD_EFFECT_DOUBLE_PRIZE:
- if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
- gBattleStruct->moneyMultiplier = 2;
- break;
- case HOLD_EFFECT_RESTORE_STATS:
- for (i = 0; i < NUM_BATTLE_STATS; i++)
- {
- if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)
- {
- gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
- effect = ITEM_STATS_CHANGE;
- }
- }
- if (effect)
- {
- gBattleScripting.battler = battlerId;
- gPotentialItemEffectBattler = battlerId;
- gActiveBattler = gBattlerAttacker = battlerId;
- BattleScriptExecute(BattleScript_WhiteHerbEnd2);
- }
- break;
- }
- break;
- case ITEMEFFECT_NORMAL:
- if (gBattleMons[battlerId].hp)
+ if (!gSpecialStatuses[battlerId].switchInItemDone)
{
switch (battlerHoldEffect)
{
- case HOLD_EFFECT_RESTORE_HP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
+ case HOLD_EFFECT_DOUBLE_PRIZE:
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER && !gBattleStruct->moneyMultiplierItem)
{
- gBattleMoveDamage = battlerHoldEffectParam;
- if (gBattleMons[battlerId].hp + battlerHoldEffectParam > gBattleMons[battlerId].maxHP)
- gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
- gBattleMoveDamage *= -1;
- BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
- effect = ITEM_HP_CHANGE;
- }
- break;
- case HOLD_EFFECT_RESTORE_PP:
- if (!moveTurn)
- {
- struct Pokemon *mon;
- u8 ppBonuses;
- u16 move;
-
- if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
- mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
- else
- mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- move = GetMonData(mon, MON_DATA_MOVE1 + i);
- changedPP = GetMonData(mon, MON_DATA_PP1 + i);
- ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
- if (move && changedPP == 0)
- break;
- }
- if (i != MAX_MON_MOVES)
- {
- u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i);
- if (changedPP + battlerHoldEffectParam > maxPP)
- changedPP = maxPP;
- else
- changedPP = changedPP + battlerHoldEffectParam;
-
- PREPARE_MOVE_BUFFER(gBattleTextBuff1, move);
-
- BattleScriptExecute(BattleScript_BerryPPHealEnd2);
- BtlController_EmitSetMonData(BUFFER_A, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP);
- MarkBattlerForControllerExec(gActiveBattler);
- effect = ITEM_PP_CHANGE;
- }
+ gBattleStruct->moneyMultiplier *= 2;
+ gBattleStruct->moneyMultiplierItem = 1;
}
break;
case HOLD_EFFECT_RESTORE_STATS:
@@ -3371,7 +6470,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
effect = ITEM_STATS_CHANGE;
}
}
- if (effect)
+ if (effect != 0)
{
gBattleScripting.battler = battlerId;
gPotentialItemEffectBattler = battlerId;
@@ -3379,64 +6478,48 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
}
break;
- case HOLD_EFFECT_LEFTOVERS:
- if (gBattleMons[battlerId].hp < gBattleMons[battlerId].maxHP && !moveTurn)
- {
- gBattleMoveDamage = gBattleMons[battlerId].maxHP / 16;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
- gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
- gBattleMoveDamage *= -1;
- BattleScriptExecute(BattleScript_ItemHealHP_End2);
- effect = ITEM_HP_CHANGE;
- RecordItemEffectBattle(battlerId, battlerHoldEffect);
- }
- break;
case HOLD_EFFECT_CONFUSE_SPICY:
- TRY_EAT_CONFUSE_BERRY(FLAVOR_SPICY);
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SPICY, TRUE);
break;
case HOLD_EFFECT_CONFUSE_DRY:
- TRY_EAT_CONFUSE_BERRY(FLAVOR_DRY);
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_DRY, TRUE);
break;
case HOLD_EFFECT_CONFUSE_SWEET:
- TRY_EAT_CONFUSE_BERRY(FLAVOR_SWEET);
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SWEET, TRUE);
break;
case HOLD_EFFECT_CONFUSE_BITTER:
- TRY_EAT_CONFUSE_BERRY(FLAVOR_BITTER);
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_BITTER, TRUE);
break;
case HOLD_EFFECT_CONFUSE_SOUR:
- TRY_EAT_CONFUSE_BERRY(FLAVOR_SOUR);
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SOUR, TRUE);
break;
case HOLD_EFFECT_ATTACK_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam
- && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < MAX_STAT_STAGE)
- {
- PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
- 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.animArg2 = 0;
- BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
- effect = ITEM_STATS_CHANGE;
- }
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_ATK, TRUE);
break;
case HOLD_EFFECT_DEFENSE_UP:
- TRY_EAT_STAT_UP_BERRY(STAT_DEF);
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_DEF, TRUE);
break;
case HOLD_EFFECT_SPEED_UP:
- TRY_EAT_STAT_UP_BERRY(STAT_SPEED);
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPEED, TRUE);
break;
case HOLD_EFFECT_SP_ATTACK_UP:
- TRY_EAT_STAT_UP_BERRY(STAT_SPATK);
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPATK, TRUE);
break;
case HOLD_EFFECT_SP_DEFENSE_UP:
- TRY_EAT_STAT_UP_BERRY(STAT_SPDEF);
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPDEF, TRUE);
break;
case HOLD_EFFECT_CRITICAL_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn
- && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
+ if (B_BERRIES_INSTANT >= GEN_4 && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY) && HasEnoughHpToEatBerry(battlerId, GetBattlerHoldEffectParam(battlerId), gLastUsedItem))
{
gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY;
BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2);
@@ -3444,42 +6527,11 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_RANDOM_STAT_UP:
- if (!moveTurn && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam)
- {
- for (i = 0; i < NUM_STATS - 1; i++)
- {
- if (gBattleMons[battlerId].statStages[STAT_ATK + i] < MAX_STAT_STAGE)
- break;
- }
- if (i != NUM_STATS - 1)
- {
- do
- {
- i = Random() % (NUM_STATS - 1);
- } while (gBattleMons[battlerId].statStages[STAT_ATK + i] == MAX_STAT_STAGE);
-
- PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1);
-
- gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
- gBattleTextBuff2[1] = B_BUFF_STRING;
- gBattleTextBuff2[2] = STRINGID_STATSHARPLY;
- gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8;
- gBattleTextBuff2[4] = B_BUFF_STRING;
- gBattleTextBuff2[5] = STRINGID_STATROSE;
- gBattleTextBuff2[6] = STRINGID_STATROSE >> 8;
- gBattleTextBuff2[7] = EOS;
-
- gEffectBattler = battlerId;
- SET_STATCHANGER(i + 1, 2, FALSE);
- gBattleScripting.animArg1 = 0x21 + i + 6;
- gBattleScripting.animArg2 = 0;
- BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
- effect = ITEM_STATS_CHANGE;
- }
- }
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = RandomStatRaiseBerry(battlerId, gLastUsedItem, TRUE);
break;
case HOLD_EFFECT_CURE_PAR:
- if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
+ if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_PARALYSIS && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~STATUS1_PARALYSIS;
BattleScriptExecute(BattleScript_BerryCurePrlzEnd2);
@@ -3487,7 +6539,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_PSN:
- if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
+ if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_PSN_ANY && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
BattleScriptExecute(BattleScript_BerryCurePsnEnd2);
@@ -3495,7 +6547,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_BRN:
- if (gBattleMons[battlerId].status1 & STATUS1_BURN)
+ if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_BURN && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~STATUS1_BURN;
BattleScriptExecute(BattleScript_BerryCureBrnEnd2);
@@ -3503,7 +6555,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_FRZ:
- if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
+ if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_FREEZE && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~STATUS1_FREEZE;
BattleScriptExecute(BattleScript_BerryCureFrzEnd2);
@@ -3511,7 +6563,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_SLP:
- if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ if (B_BERRIES_INSTANT >= GEN_4 && gBattleMons[battlerId].status1 & STATUS1_SLEEP && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~STATUS1_SLEEP;
gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE;
@@ -3519,16 +6571,8 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
effect = ITEM_STATUS_CHANGE;
}
break;
- case HOLD_EFFECT_CURE_CONFUSION:
- if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
- {
- gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION;
- BattleScriptExecute(BattleScript_BerryCureConfusionEnd2);
- effect = ITEM_EFFECT_OTHER;
- }
- break;
case HOLD_EFFECT_CURE_STATUS:
- if (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ if (B_BERRIES_INSTANT >= GEN_4 && (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION) && !UnnerveOn(battlerId, gLastUsedItem))
{
i = 0;
if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
@@ -3572,22 +6616,68 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
effect = ITEM_STATUS_CHANGE;
}
break;
- case HOLD_EFFECT_CURE_ATTRACT:
- if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION)
+ case HOLD_EFFECT_RESTORE_HP:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = ItemHealHp(battlerId, gLastUsedItem, TRUE, FALSE);
+ break;
+ case HOLD_EFFECT_RESTORE_PCT_HP:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = ItemHealHp(battlerId, gLastUsedItem, TRUE, TRUE);
+ break;
+ case HOLD_EFFECT_AIR_BALLOON:
+ effect = ITEM_EFFECT_OTHER;
+ gBattleScripting.battler = battlerId;
+ BattleScriptPushCursorAndCallback(BattleScript_AirBaloonMsgIn);
+ RecordItemEffectBattle(battlerId, HOLD_EFFECT_AIR_BALLOON);
+ break;
+ case HOLD_EFFECT_ROOM_SERVICE:
+ if (TryRoomService(battlerId))
{
- gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION;
- StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
- BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2);
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM;
- effect = ITEM_EFFECT_OTHER;
+ BattleScriptExecute(BattleScript_BerryStatRaiseEnd2);
+ effect = ITEM_STATS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_SEEDS:
+ switch (GetBattlerHoldEffectParam(battlerId))
+ {
+ case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN:
+ effect = TryHandleSeed(battlerId, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, gLastUsedItem, TRUE);
+ break;
+ case HOLD_EFFECT_PARAM_GRASSY_TERRAIN:
+ effect = TryHandleSeed(battlerId, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, gLastUsedItem, TRUE);
+ break;
+ case HOLD_EFFECT_PARAM_MISTY_TERRAIN:
+ effect = TryHandleSeed(battlerId, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, gLastUsedItem, TRUE);
+ break;
+ case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN:
+ effect = TryHandleSeed(battlerId, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, gLastUsedItem, TRUE);
+ break;
+ }
+ break;
+ case HOLD_EFFECT_EJECT_PACK:
+ if (gProtectStructs[battlerId].statFell
+ && gProtectStructs[battlerId].disableEjectPack == 0
+ && !(gCurrentMove == MOVE_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker))) // Does not activate if attacker used Parting Shot and can switch out
+ {
+ gProtectStructs[battlerId].statFell = FALSE;
+ gActiveBattler = gBattleScripting.battler = battlerId;
+ effect = ITEM_STATS_CHANGE;
+ if (moveTurn)
+ {
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_EjectPackActivate_Ret;
+ }
+ else
+ {
+ BattleScriptExecute(BattleScript_EjectPackActivate_End2);
+ }
}
break;
}
- if (effect)
+ if (effect != 0)
{
- gBattleScripting.battler = battlerId;
- gPotentialItemEffectBattler = battlerId;
- gActiveBattler = gBattlerAttacker = battlerId;
+ gSpecialStatuses[battlerId].switchInItemDone = TRUE;
+ gActiveBattler = gBattlerAttacker = gPotentialItemEffectBattler = gBattleScripting.battler = battlerId;
switch (effect)
{
case ITEM_STATUS_CHANGE:
@@ -3602,26 +6692,356 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
}
break;
- case ITEMEFFECT_DUMMY:
+ case ITEMEFFECT_NORMAL:
+ if (gBattleMons[battlerId].hp)
+ {
+ switch (battlerHoldEffect)
+ {
+ case HOLD_EFFECT_RESTORE_HP:
+ if (!moveTurn)
+ effect = ItemHealHp(battlerId, gLastUsedItem, TRUE, FALSE);
+ break;
+ case HOLD_EFFECT_RESTORE_PCT_HP:
+ if (!moveTurn)
+ effect = ItemHealHp(battlerId, gLastUsedItem, TRUE, TRUE);
+ break;
+ case HOLD_EFFECT_RESTORE_PP:
+ if (!moveTurn)
+ {
+ struct Pokemon *mon;
+ u8 ppBonuses;
+ u16 move;
+
+ mon = GetBattlerPartyData(battlerId);
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ move = GetMonData(mon, MON_DATA_MOVE1 + i);
+ changedPP = GetMonData(mon, MON_DATA_PP1 + i);
+ ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
+ if (move && changedPP == 0)
+ break;
+ }
+ if (i != MAX_MON_MOVES)
+ {
+ u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i);
+ u8 ppRestored = GetBattlerHoldEffectParam(battlerId);
+
+ if (GetBattlerAbility(battlerId) == ABILITY_RIPEN)
+ {
+ ppRestored *= 2;
+ gBattlerAbility = battlerId;
+ }
+ if (changedPP + ppRestored > maxPP)
+ changedPP = maxPP;
+ else
+ changedPP = changedPP + ppRestored;
+
+ PREPARE_MOVE_BUFFER(gBattleTextBuff1, move);
+
+ BattleScriptExecute(BattleScript_BerryPPHealEnd2);
+ BtlController_EmitSetMonData(BUFFER_A, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP);
+ MarkBattlerForControllerExec(gActiveBattler);
+ effect = ITEM_PP_CHANGE;
+ }
+ }
+ break;
+ case HOLD_EFFECT_RESTORE_STATS:
+ for (i = 0; i < NUM_BATTLE_STATS; i++)
+ {
+ if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE)
+ {
+ gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
+ effect = ITEM_STATS_CHANGE;
+ }
+ }
+ if (effect != 0)
+ {
+ gBattleScripting.battler = battlerId;
+ gPotentialItemEffectBattler = battlerId;
+ gActiveBattler = gBattlerAttacker = battlerId;
+ BattleScriptExecute(BattleScript_WhiteHerbEnd2);
+ }
+ break;
+ case HOLD_EFFECT_BLACK_SLUDGE:
+ if (IS_BATTLER_OF_TYPE(battlerId, TYPE_POISON))
+ {
+ goto LEFTOVERS;
+ }
+ else if (GetBattlerAbility(battlerId) != ABILITY_MAGIC_GUARD && !moveTurn)
+ {
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_ItemHurtEnd2);
+ effect = ITEM_HP_CHANGE;
+ RecordItemEffectBattle(battlerId, battlerHoldEffect);
+ PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem);
+ }
+ break;
+ case HOLD_EFFECT_LEFTOVERS:
+ LEFTOVERS:
+#if B_HEAL_BLOCKING >= GEN_5
+ if (gBattleMons[battlerId].hp < gBattleMons[battlerId].maxHP && !moveTurn && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK))
+#else
+ if (gBattleMons[battlerId].hp < gBattleMons[battlerId].maxHP && !moveTurn)
+#endif
+ {
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ gBattleMoveDamage *= -1;
+ BattleScriptExecute(BattleScript_ItemHealHP_End2);
+ effect = ITEM_HP_CHANGE;
+ RecordItemEffectBattle(battlerId, battlerHoldEffect);
+ }
+ break;
+ case HOLD_EFFECT_CONFUSE_SPICY:
+ if (!moveTurn)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SPICY, TRUE);
+ break;
+ case HOLD_EFFECT_CONFUSE_DRY:
+ if (!moveTurn)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_DRY, TRUE);
+ break;
+ case HOLD_EFFECT_CONFUSE_SWEET:
+ if (!moveTurn)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SWEET, TRUE);
+ break;
+ case HOLD_EFFECT_CONFUSE_BITTER:
+ if (!moveTurn)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_BITTER, TRUE);
+ break;
+ case HOLD_EFFECT_CONFUSE_SOUR:
+ if (!moveTurn)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SOUR, TRUE);
+ break;
+ case HOLD_EFFECT_ATTACK_UP:
+ if (!moveTurn)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_ATK, TRUE);
+ break;
+ case HOLD_EFFECT_DEFENSE_UP:
+ if (!moveTurn)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_DEF, TRUE);
+ break;
+ case HOLD_EFFECT_SPEED_UP:
+ if (!moveTurn)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPEED, TRUE);
+ break;
+ case HOLD_EFFECT_SP_ATTACK_UP:
+ if (!moveTurn)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPATK, TRUE);
+ break;
+ case HOLD_EFFECT_SP_DEFENSE_UP:
+ if (!moveTurn)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPDEF, TRUE);
+ break;
+ case HOLD_EFFECT_CRITICAL_UP:
+ if (!moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY)
+ && HasEnoughHpToEatBerry(battlerId, GetBattlerHoldEffectParam(battlerId), gLastUsedItem))
+ {
+ gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY;
+ BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2);
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_RANDOM_STAT_UP:
+ if (!moveTurn)
+ effect = RandomStatRaiseBerry(battlerId, gLastUsedItem, TRUE);
+ break;
+ case HOLD_EFFECT_CURE_PAR:
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS && !UnnerveOn(battlerId, gLastUsedItem))
+ {
+ gBattleMons[battlerId].status1 &= ~STATUS1_PARALYSIS;
+ BattleScriptExecute(BattleScript_BerryCurePrlzEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_PSN:
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY && !UnnerveOn(battlerId, gLastUsedItem))
+ {
+ gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
+ BattleScriptExecute(BattleScript_BerryCurePsnEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_BRN:
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN && !UnnerveOn(battlerId, gLastUsedItem))
+ {
+ gBattleMons[battlerId].status1 &= ~STATUS1_BURN;
+ BattleScriptExecute(BattleScript_BerryCureBrnEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_FRZ:
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE && !UnnerveOn(battlerId, gLastUsedItem))
+ {
+ gBattleMons[battlerId].status1 &= ~STATUS1_FREEZE;
+ BattleScriptExecute(BattleScript_BerryCureFrzEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_SLP:
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP && !UnnerveOn(battlerId, gLastUsedItem))
+ {
+ gBattleMons[battlerId].status1 &= ~STATUS1_SLEEP;
+ gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE;
+ BattleScriptExecute(BattleScript_BerryCureSlpEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_CURE_CONFUSION:
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION && !UnnerveOn(battlerId, gLastUsedItem))
+ {
+ gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION;
+ BattleScriptExecute(BattleScript_BerryCureConfusionEnd2);
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_CURE_STATUS:
+ if ((gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION) && !UnnerveOn(battlerId, gLastUsedItem))
+ {
+ i = 0;
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
+ i++;
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ {
+ gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE;
+ StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn);
+ i++;
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn);
+ i++;
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn);
+ i++;
+ }
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn);
+ i++;
+ }
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ {
+ StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn);
+ i++;
+ }
+ if (i <= 1)
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS;
+ gBattleMons[battlerId].status1 = 0;
+ gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION;
+ BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_MENTAL_HERB:
+ if (GetMentalHerbEffect(battlerId))
+ {
+ gBattleScripting.savedBattler = gBattlerAttacker;
+ gBattlerAttacker = battlerId;
+ BattleScriptExecute(BattleScript_MentalHerbCureEnd2);
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
+ case HOLD_EFFECT_MICLE_BERRY:
+ if (!moveTurn)
+ effect = TrySetMicleBerry(battlerId, gLastUsedItem, TRUE);
+ break;
+ }
+
+ if (effect != 0)
+ {
+ gActiveBattler = gBattlerAttacker = gPotentialItemEffectBattler = gBattleScripting.battler = battlerId;
+ switch (effect)
+ {
+ case ITEM_STATUS_CHANGE:
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battlerId].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case ITEM_PP_CHANGE:
+ if (MOVE_IS_PERMANENT(battlerId, i))
+ gBattleMons[battlerId].pp[i] = changedPP;
+ break;
+ }
+ }
+ }
break;
+ case ITEMEFFECT_BATTLER_MOVE_END:
+ goto DO_ITEMEFFECT_MOVE_END; // this hurts a bit to do, but is an easy solution
case ITEMEFFECT_MOVE_END:
for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
{
gLastUsedItem = gBattleMons[battlerId].item;
- if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
- {
- battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect;
- battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam;
- }
- else
- {
- battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
- battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem);
- }
+ battlerHoldEffect = GetBattlerHoldEffect(battlerId, TRUE);
+ DO_ITEMEFFECT_MOVE_END:
switch (battlerHoldEffect)
{
+ case HOLD_EFFECT_MICLE_BERRY:
+ if (B_HP_BERRIES >= GEN_4)
+ effect = TrySetMicleBerry(battlerId, gLastUsedItem, FALSE);
+ break;
+ case HOLD_EFFECT_RESTORE_HP:
+ if (B_HP_BERRIES >= GEN_4)
+ effect = ItemHealHp(battlerId, gLastUsedItem, FALSE, FALSE);
+ break;
+ case HOLD_EFFECT_RESTORE_PCT_HP:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = ItemHealHp(battlerId, gLastUsedItem, FALSE, TRUE);
+ break;
+ case HOLD_EFFECT_CONFUSE_SPICY:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SPICY, FALSE);
+ break;
+ case HOLD_EFFECT_CONFUSE_DRY:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_DRY, FALSE);
+ break;
+ case HOLD_EFFECT_CONFUSE_SWEET:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SWEET, FALSE);
+ break;
+ case HOLD_EFFECT_CONFUSE_BITTER:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_BITTER, FALSE);
+ break;
+ case HOLD_EFFECT_CONFUSE_SOUR:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = HealConfuseBerry(battlerId, gLastUsedItem, FLAVOR_SOUR, FALSE);
+ break;
+ case HOLD_EFFECT_ATTACK_UP:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_ATK, FALSE);
+ break;
+ case HOLD_EFFECT_DEFENSE_UP:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_DEF, FALSE);
+ break;
+ case HOLD_EFFECT_SPEED_UP:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPEED, FALSE);
+ break;
+ case HOLD_EFFECT_SP_ATTACK_UP:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPATK, FALSE);
+ break;
+ case HOLD_EFFECT_SP_DEFENSE_UP:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = StatRaiseBerry(battlerId, gLastUsedItem, STAT_SPDEF, FALSE);
+ break;
+ case HOLD_EFFECT_RANDOM_STAT_UP:
+ if (B_BERRIES_INSTANT >= GEN_4)
+ effect = RandomStatRaiseBerry(battlerId, gLastUsedItem, FALSE);
+ break;
case HOLD_EFFECT_CURE_PAR:
- if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
+ if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~STATUS1_PARALYSIS;
BattleScriptPushCursor();
@@ -3630,7 +7050,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_PSN:
- if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
+ if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
BattleScriptPushCursor();
@@ -3639,7 +7059,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_BRN:
- if (gBattleMons[battlerId].status1 & STATUS1_BURN)
+ if (gBattleMons[battlerId].status1 & STATUS1_BURN && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~STATUS1_BURN;
BattleScriptPushCursor();
@@ -3648,7 +7068,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_FRZ:
- if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
+ if (gBattleMons[battlerId].status1 & STATUS1_FREEZE && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~STATUS1_FREEZE;
BattleScriptPushCursor();
@@ -3657,7 +7077,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_SLP:
- if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
+ if (gBattleMons[battlerId].status1 & STATUS1_SLEEP && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status1 &= ~STATUS1_SLEEP;
gBattleMons[battlerId].status2 &= ~STATUS2_NIGHTMARE;
@@ -3667,7 +7087,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CURE_CONFUSION:
- if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ if (gBattleMons[battlerId].status2 & STATUS2_CONFUSION && !UnnerveOn(battlerId, gLastUsedItem))
{
gBattleMons[battlerId].status2 &= ~STATUS2_CONFUSION;
BattleScriptPushCursor();
@@ -3675,19 +7095,18 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
effect = ITEM_EFFECT_OTHER;
}
break;
- case HOLD_EFFECT_CURE_ATTRACT:
- if (gBattleMons[battlerId].status2 & STATUS2_INFATUATION)
+ case HOLD_EFFECT_MENTAL_HERB:
+ if (GetMentalHerbEffect(battlerId))
{
- gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION;
- StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
+ gBattleScripting.savedBattler = gBattlerAttacker;
+ gBattlerAttacker = battlerId;
BattleScriptPushCursor();
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM;
- gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet;
+ gBattlescriptCurrInstr = BattleScript_MentalHerbCureRet;
effect = ITEM_EFFECT_OTHER;
}
break;
case HOLD_EFFECT_CURE_STATUS:
- if (gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION)
+ if ((gBattleMons[battlerId].status1 & STATUS1_ANY || gBattleMons[battlerId].status2 & STATUS2_CONFUSION) && !UnnerveOn(battlerId, gLastUsedItem))
{
if (gBattleMons[battlerId].status1 & STATUS1_PSN_ANY)
StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn);
@@ -3727,7 +7146,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
effect = ITEM_STATS_CHANGE;
}
}
- if (effect)
+ if (effect != 0)
{
gBattleScripting.battler = battlerId;
gPotentialItemEffectBattler = battlerId;
@@ -3737,60 +7156,314 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
}
- if (effect)
+ if (effect != 0)
{
- gBattleScripting.battler = battlerId;
- gPotentialItemEffectBattler = battlerId;
- gActiveBattler = battlerId;
- BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
- MarkBattlerForControllerExec(gActiveBattler);
+ gActiveBattler = gPotentialItemEffectBattler = gBattleScripting.battler = battlerId;
+ if (effect == ITEM_STATUS_CHANGE)
+ {
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
break;
}
}
break;
- case ITEMEFFECT_KINGSROCK_SHELLBELL:
- if (gBattleMoveDamage)
+ case ITEMEFFECT_KINGSROCK:
+ // Occur on each hit of a multi-strike move
+ switch (atkHoldEffect)
{
- switch (atkHoldEffect)
+ case HOLD_EFFECT_FLINCH:
+ #if B_SERENE_GRACE_BOOST >= GEN_5
+ if (GetBattlerAbility(gBattlerAttacker) == ABILITY_SERENE_GRACE)
+ atkHoldEffectParam *= 2;
+ #endif
+ if (gBattleMoveDamage != 0 // Need to have done damage
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && TARGET_TURN_DAMAGED
+ && (Random() % 100) < atkHoldEffectParam
+ && gBattleMoves[gCurrentMove].flags & FLAG_KINGS_ROCK_AFFECTED
+ && gBattleMons[gBattlerTarget].hp)
{
- case HOLD_EFFECT_FLINCH:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && TARGET_TURN_DAMAGED
- && (Random() % 100) < atkHoldEffectParam
- && gBattleMoves[gCurrentMove].flags & FLAG_KINGS_ROCK_AFFECTED
- && gBattleMons[gBattlerTarget].hp)
+ gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH;
+ BattleScriptPushCursor();
+ SetMoveEffect(FALSE, 0);
+ BattleScriptPop();
+ }
+ break;
+ case HOLD_EFFECT_BLUNDER_POLICY:
+ if (gBattleStruct->blunderPolicy
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && CompareStat(gBattlerAttacker, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN))
+ {
+ gBattleStruct->blunderPolicy = FALSE;
+ gLastUsedItem = atkItem;
+ gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPEED, 2, FALSE);
+ effect = ITEM_STATS_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AttackerItemStatRaise;
+ }
+ break;
+ }
+ break;
+ case ITEMEFFECT_LIFEORB_SHELLBELL:
+ // Occur after the final hit of a multi-strike move
+ switch (atkHoldEffect)
+ {
+ case HOLD_EFFECT_SHELL_BELL:
+ if (gSpecialStatuses[gBattlerAttacker].damagedMons // Need to have done damage
+ && gBattlerAttacker != gBattlerTarget
+ && gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP
+#if B_HEAL_BLOCKING >= GEN_5
+ && gBattleMons[gBattlerAttacker].hp != 0 && !(gStatuses3[battlerId] & STATUS3_HEAL_BLOCK))
+#else
+ && gBattleMons[gBattlerAttacker].hp != 0)
+#endif
+ {
+ gLastUsedItem = atkItem;
+ gPotentialItemEffectBattler = gBattlerAttacker;
+ gBattleScripting.battler = gBattlerAttacker;
+ gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkHoldEffectParam) * -1;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = -1;
+ gSpecialStatuses[gBattlerTarget].dmg = 0;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret;
+ effect = ITEM_HP_CHANGE;
+ }
+ break;
+ case HOLD_EFFECT_LIFE_ORB:
+ if (IsBattlerAlive(gBattlerAttacker)
+ && !(TestSheerForceFlag(gBattlerAttacker, gCurrentMove))
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD
+ && gSpecialStatuses[gBattlerAttacker].damagedMons)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 10;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ effect = ITEM_HP_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_ItemHurtRet;
+ gLastUsedItem = gBattleMons[gBattlerAttacker].item;
+ }
+ break;
+ case HOLD_EFFECT_THROAT_SPRAY: // Does NOT need to be a damaging move
+ if (gProtectStructs[gBattlerAttacker].targetAffected
+ && gBattleMons[gBattlerAttacker].hp != 0
+ && gBattleMoves[gCurrentMove].flags & FLAG_SOUND
+ && CompareStat(gBattlerAttacker, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)
+ && !NoAliveMonsForEitherParty()) // Don't activate if battle will end
+ {
+ gLastUsedItem = atkItem;
+ gBattleScripting.battler = gBattlerAttacker;
+ gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPATK, 1, FALSE);
+ effect = ITEM_STATS_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AttackerItemStatRaise;
+ }
+ break;
+ }
+ break;
+ case ITEMEFFECT_TARGET:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ switch (battlerHoldEffect)
+ {
+ case HOLD_EFFECT_AIR_BALLOON:
+ if (TARGET_TURN_DAMAGED)
{
- gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_FLINCH;
+ effect = ITEM_EFFECT_OTHER;
BattleScriptPushCursor();
- SetMoveEffect(FALSE, 0);
- BattleScriptPop();
+ gBattlescriptCurrInstr = BattleScript_AirBaloonMsgPop;
}
break;
- case HOLD_EFFECT_SHELL_BELL:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gSpecialStatuses[gBattlerTarget].dmg != 0
- && gSpecialStatuses[gBattlerTarget].dmg != 0xFFFF
- && gBattlerAttacker != gBattlerTarget
- && gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP
- && gBattleMons[gBattlerAttacker].hp != 0)
+ case HOLD_EFFECT_ROCKY_HELMET:
+ if (TARGET_TURN_DAMAGED
+ && IsMoveMakingContact(gCurrentMove, gBattlerAttacker)
+ && IsBattlerAlive(gBattlerAttacker)
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
{
- gLastUsedItem = atkItem;
- gPotentialItemEffectBattler = gBattlerAttacker;
- gBattleScripting.battler = gBattlerAttacker;
- gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkHoldEffectParam) * -1;
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 6;
if (gBattleMoveDamage == 0)
- gBattleMoveDamage = -1;
- gSpecialStatuses[gBattlerTarget].dmg = 0;
+ gBattleMoveDamage = 1;
+ effect = ITEM_HP_CHANGE;
BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret;
- effect++;
+ gBattlescriptCurrInstr = BattleScript_RockyHelmetActivates;
+ PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem);
+ RecordItemEffectBattle(battlerId, HOLD_EFFECT_ROCKY_HELMET);
+ }
+ break;
+ case HOLD_EFFECT_WEAKNESS_POLICY:
+ if (IsBattlerAlive(battlerId)
+ && TARGET_TURN_DAMAGED
+ && gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ {
+ effect = ITEM_STATS_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_WeaknessPolicy;
+ }
+ break;
+ case HOLD_EFFECT_SNOWBALL:
+ if (IsBattlerAlive(battlerId)
+ && TARGET_TURN_DAMAGED
+ && moveType == TYPE_ICE)
+ {
+ effect = ITEM_STATS_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise;
+ gBattleScripting.statChanger = SET_STATCHANGER(STAT_ATK, 1, FALSE);
+ }
+ break;
+ case HOLD_EFFECT_LUMINOUS_MOSS:
+ if (IsBattlerAlive(battlerId)
+ && TARGET_TURN_DAMAGED
+ && moveType == TYPE_WATER)
+ {
+ effect = ITEM_STATS_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise;
+ gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPDEF, 1, FALSE);
+ }
+ break;
+ case HOLD_EFFECT_CELL_BATTERY:
+ if (IsBattlerAlive(battlerId)
+ && TARGET_TURN_DAMAGED
+ && moveType == TYPE_ELECTRIC)
+ {
+ effect = ITEM_STATS_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise;
+ gBattleScripting.statChanger = SET_STATCHANGER(STAT_ATK, 1, FALSE);
+ }
+ break;
+ case HOLD_EFFECT_ABSORB_BULB:
+ if (IsBattlerAlive(battlerId)
+ && TARGET_TURN_DAMAGED
+ && moveType == TYPE_WATER)
+ {
+ effect = ITEM_STATS_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise;
+ gBattleScripting.statChanger = SET_STATCHANGER(STAT_SPATK, 1, FALSE);
+ }
+ break;
+ case HOLD_EFFECT_JABOCA_BERRY: // consume and damage attacker if used physical move
+ if (IsBattlerAlive(battlerId)
+ && TARGET_TURN_DAMAGED
+ && !DoesSubstituteBlockMove(gBattlerAttacker, battlerId, gCurrentMove)
+ && IS_MOVE_PHYSICAL(gCurrentMove)
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (GetBattlerAbility(battlerId) == ABILITY_RIPEN)
+ gBattleMoveDamage *= 2;
+
+ effect = ITEM_HP_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates;
+ PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem);
+ RecordItemEffectBattle(battlerId, HOLD_EFFECT_ROCKY_HELMET);
+ }
+ break;
+ case HOLD_EFFECT_ROWAP_BERRY: // consume and damage attacker if used special move
+ if (IsBattlerAlive(battlerId)
+ && TARGET_TURN_DAMAGED
+ && !DoesSubstituteBlockMove(gBattlerAttacker, battlerId, gCurrentMove)
+ && IS_MOVE_SPECIAL(gCurrentMove)
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ if (GetBattlerAbility(battlerId) == ABILITY_RIPEN)
+ gBattleMoveDamage *= 2;
+
+ effect = ITEM_HP_CHANGE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates;
+ PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem);
+ RecordItemEffectBattle(battlerId, HOLD_EFFECT_ROCKY_HELMET);
+ }
+ break;
+ case HOLD_EFFECT_KEE_BERRY: // consume and boost defense if used physical move
+ effect = DamagedStatBoostBerryEffect(battlerId, STAT_DEF, SPLIT_PHYSICAL);
+ break;
+ case HOLD_EFFECT_MARANGA_BERRY: // consume and boost sp. defense if used special move
+ effect = DamagedStatBoostBerryEffect(battlerId, STAT_SPDEF, SPLIT_SPECIAL);
+ break;
+ case HOLD_EFFECT_STICKY_BARB:
+ if (TARGET_TURN_DAMAGED
+ && (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ && IsMoveMakingContact(gCurrentMove, gBattlerAttacker)
+ && !DoesSubstituteBlockMove(gBattlerAttacker, battlerId, gCurrentMove)
+ && IsBattlerAlive(gBattlerAttacker)
+ && CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item)
+ && gBattleMons[gBattlerAttacker].item == ITEM_NONE)
+ {
+ // No sticky hold checks.
+ gEffectBattler = battlerId; // gEffectBattler = target
+ StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker takes target's barb
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_StickyBarbTransfer;
+ effect = ITEM_EFFECT_OTHER;
}
break;
}
}
break;
+ case ITEMEFFECT_ORBS:
+ {
+ u16 battlerAbility = GetBattlerAbility(battlerId);
+ switch (battlerHoldEffect)
+ {
+ case HOLD_EFFECT_TOXIC_ORB:
+ if (IsBattlerAlive(battlerId) && CanBePoisoned(battlerId, battlerId))
+ {
+ effect = ITEM_STATUS_CHANGE;
+ gBattleMons[battlerId].status1 = STATUS1_TOXIC_POISON;
+ BattleScriptExecute(BattleScript_ToxicOrb);
+ RecordItemEffectBattle(battlerId, battlerHoldEffect);
+ }
+ break;
+ case HOLD_EFFECT_FLAME_ORB:
+ if (IsBattlerAlive(battlerId) && CanBeBurned(battlerId))
+ {
+ effect = ITEM_STATUS_CHANGE;
+ gBattleMons[battlerId].status1 = STATUS1_BURN;
+ BattleScriptExecute(BattleScript_FlameOrb);
+ RecordItemEffectBattle(battlerId, battlerHoldEffect);
+ }
+ break;
+ case HOLD_EFFECT_STICKY_BARB: // Not an orb per se, but similar effect, and needs to NOT activate with pickpocket
+ if (battlerAbility != ABILITY_MAGIC_GUARD)
+ {
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / 8;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_ItemHurtEnd2);
+ effect = ITEM_HP_CHANGE;
+ RecordItemEffectBattle(battlerId, battlerHoldEffect);
+ PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem);
+ }
+ break;
+ }
+
+ if (effect == ITEM_STATUS_CHANGE)
+ {
+ gActiveBattler = battlerId;
+ BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battlerId].status1);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ break;
}
+ // Berry was successfully used on a Pokemon.
+ if (effect && (gLastUsedItem >= FIRST_BERRY_INDEX && gLastUsedItem <= LAST_BERRY_INDEX))
+ gBattleStruct->ateBerry[battlerId & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[battlerId]];
+
return effect;
}
@@ -3807,37 +7480,69 @@ void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands
gBattleScriptingCommandsTable[*gBattlescriptCurrInstr]();
}
-u8 GetMoveTarget(u16 move, u8 setTarget)
+u32 SetRandomTarget(u32 battlerId)
+{
+ u32 target;
+ static const u8 targets[2][2] =
+ {
+ [B_SIDE_PLAYER] = {B_POSITION_OPPONENT_LEFT, B_POSITION_OPPONENT_RIGHT},
+ [B_SIDE_OPPONENT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT},
+ };
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ target = GetBattlerAtPosition(targets[GetBattlerSide(battlerId)][Random() % 2]);
+ if (!IsBattlerAlive(target))
+ target ^= BIT_FLANK;
+ }
+ else
+ {
+ target = GetBattlerAtPosition(targets[GetBattlerSide(battlerId)][0]);
+ }
+
+ return target;
+}
+
+u32 GetMoveTarget(u16 move, u8 setTarget)
{
u8 targetBattler = 0;
- u8 moveTarget;
- u8 side;
+ u32 i, moveTarget, side;
if (setTarget != NO_TARGET_OVERRIDE)
moveTarget = setTarget - 1;
else
- moveTarget = gBattleMoves[move].target;
+ moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move);
+
+ // Special cases
+ if (move == MOVE_CURSE && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
+ moveTarget = MOVE_TARGET_USER;
switch (moveTarget)
{
case MOVE_TARGET_SELECTED:
side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
- if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
+ if (IsAffectedByFollowMe(gBattlerAttacker, side, move))
+ {
targetBattler = gSideTimers[side].followmeTarget;
+ }
else
{
- side = GetBattlerSide(gBattlerAttacker);
- do
- {
- targetBattler = Random() % gBattlersCount;
- } while (targetBattler == gBattlerAttacker || side == GetBattlerSide(targetBattler) || gAbsentBattlerFlags & gBitTable[targetBattler]);
+ targetBattler = SetRandomTarget(gBattlerAttacker);
if (gBattleMoves[move].type == TYPE_ELECTRIC
- && AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_LIGHTNING_ROD, 0, 0)
- && gBattleMons[targetBattler].ability != ABILITY_LIGHTNING_ROD)
+ && IsAbilityOnOpposingSide(gBattlerAttacker, ABILITY_LIGHTNING_ROD)
+ && GetBattlerAbility(targetBattler) != ABILITY_LIGHTNING_ROD)
{
targetBattler ^= BIT_FLANK;
RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability);
- gSpecialStatuses[targetBattler].lightningRodRedirected = 1;
+ gSpecialStatuses[targetBattler].lightningRodRedirected = TRUE;
+ }
+ else if (gBattleMoves[move].type == TYPE_WATER
+ && IsAbilityOnOpposingSide(gBattlerAttacker, ABILITY_STORM_DRAIN)
+ && GetBattlerAbility(targetBattler) != ABILITY_STORM_DRAIN)
+ {
+ targetBattler ^= BIT_FLANK;
+ RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability);
+ gSpecialStatuses[targetBattler].stormDrainRedirected = TRUE;
}
}
break;
@@ -3846,39 +7551,29 @@ u8 GetMoveTarget(u16 move, u8 setTarget)
case MOVE_TARGET_FOES_AND_ALLY:
case MOVE_TARGET_OPPONENTS_FIELD:
targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
- if (gAbsentBattlerFlags & gBitTable[targetBattler])
+ if (!IsBattlerAlive(targetBattler))
targetBattler ^= BIT_FLANK;
break;
case MOVE_TARGET_RANDOM:
side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
- if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
+ if (IsAffectedByFollowMe(gBattlerAttacker, side, move))
targetBattler = gSideTimers[side].followmeTarget;
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM)
- {
- if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
- {
- if (Random() & 1)
- targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- else
- targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
- }
- else
- {
- if (Random() & 1)
- targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- else
- targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
- }
- if (gAbsentBattlerFlags & gBitTable[targetBattler])
- targetBattler ^= BIT_FLANK;
- }
+ targetBattler = SetRandomTarget(gBattlerAttacker);
else
targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
break;
case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_USER:
+ default:
targetBattler = gBattlerAttacker;
break;
+ case MOVE_TARGET_ALLY:
+ if (IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))
+ targetBattler = BATTLE_PARTNER(gBattlerAttacker);
+ else
+ targetBattler = gBattlerAttacker;
+ break;
}
*(gBattleStruct->moveTarget + gBattlerAttacker) = targetBattler;
@@ -3978,7 +7673,7 @@ u8 IsMonDisobedient(void)
obedienceLevel = gBattleMons[gBattlerAttacker].level - obedienceLevel;
calc = (Random() & 255);
- if (calc < obedienceLevel && !(gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY) && gBattleMons[gBattlerAttacker].ability != ABILITY_VITAL_SPIRIT && gBattleMons[gBattlerAttacker].ability != ABILITY_INSOMNIA)
+ if (calc < obedienceLevel && CanSleep(gBattlerAttacker))
{
// try putting asleep
int i;
@@ -3996,7 +7691,7 @@ u8 IsMonDisobedient(void)
calc -= obedienceLevel;
if (calc < obedienceLevel)
{
- gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerAttacker], MOVE_POUND, 0, 40, 0, gBattlerAttacker, gBattlerAttacker);
+ gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE);
gBattlerTarget = gBattlerAttacker;
gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@@ -4012,3 +7707,2502 @@ u8 IsMonDisobedient(void)
}
}
}
+
+u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating)
+{
+ if (checkNegating)
+ {
+ if (gStatuses3[battlerId] & STATUS3_EMBARGO)
+ return HOLD_EFFECT_NONE;
+ if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM)
+ return HOLD_EFFECT_NONE;
+ if (GetBattlerAbility(battlerId) == ABILITY_KLUTZ)
+ return HOLD_EFFECT_NONE;
+ }
+
+ gPotentialItemEffectBattler = battlerId;
+
+ if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId] != 0 && gBattleMons[battlerId].item)
+ return gBattleStruct->debugHoldEffects[battlerId];
+ else if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
+ return gEnigmaBerries[battlerId].holdEffect;
+ else
+ return ItemId_GetHoldEffect(gBattleMons[battlerId].item);
+}
+
+u32 GetBattlerHoldEffectParam(u8 battlerId)
+{
+ if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
+ return gEnigmaBerries[battlerId].holdEffectParam;
+ else
+ return ItemId_GetHoldEffectParam(gBattleMons[battlerId].item);
+}
+
+bool32 IsMoveMakingContact(u16 move, u8 battlerAtk)
+{
+ if (!(gBattleMoves[move].flags & FLAG_MAKES_CONTACT))
+ {
+ if (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ else if (GetBattlerAbility(battlerAtk) == ABILITY_LONG_REACH)
+ {
+ return FALSE;
+ }
+ else if (GetBattlerHoldEffect(battlerAtk, TRUE) == HOLD_EFFECT_PROTECTIVE_PADS)
+ {
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+bool32 IsBattlerProtected(u8 battlerId, u16 move)
+{
+ // Decorate bypasses protect and detect, but not crafty shield
+ if (move == MOVE_DECORATE)
+ {
+ if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD)
+ return TRUE;
+ else if (gProtectStructs[battlerId].protected)
+ return FALSE;
+ }
+
+ // Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here.
+ // This means extra logic is needed to handle Shell Side Arm.
+ if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST
+ && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT || (gBattleMoves[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->swapDamageCategory)))
+ return FALSE;
+ else if (!(gBattleMoves[move].flags & FLAG_PROTECT_AFFECTED))
+ return FALSE;
+ else if (gBattleMoves[move].effect == MOVE_EFFECT_FEINT)
+ return FALSE;
+ else if (gProtectStructs[battlerId].protected)
+ return TRUE;
+ else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD
+ && GetBattlerMoveTargetType(gBattlerAttacker, move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))
+ return TRUE;
+ else if (gProtectStructs[battlerId].banefulBunkered)
+ return TRUE;
+ else if (gProtectStructs[battlerId].obstructed && !IS_MOVE_STATUS(move))
+ return TRUE;
+ else if (gProtectStructs[battlerId].spikyShielded)
+ return TRUE;
+ else if (gProtectStructs[battlerId].kingsShielded && gBattleMoves[move].power != 0)
+ return TRUE;
+ else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_QUICK_GUARD
+ && GetChosenMovePriority(gBattlerAttacker) > 0)
+ return TRUE;
+ else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD
+ && IS_MOVE_STATUS(move))
+ return TRUE;
+ else if (gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_MAT_BLOCK
+ && !IS_MOVE_STATUS(move))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+// Only called directly when calculating damage type effectiveness
+static bool32 IsBattlerGrounded2(u8 battlerId, bool32 considerInverse)
+{
+ if (GetBattlerHoldEffect(battlerId, TRUE) == HOLD_EFFECT_IRON_BALL)
+ return TRUE;
+ if (gFieldStatuses & STATUS_FIELD_GRAVITY)
+ return TRUE;
+#if B_ROOTED_GROUNDING >= GEN_4
+ if (gStatuses3[battlerId] & STATUS3_ROOTED)
+ return TRUE;
+#endif
+ if (gStatuses3[battlerId] & STATUS3_SMACKED_DOWN)
+ return TRUE;
+ if (gStatuses3[battlerId] & STATUS3_TELEKINESIS)
+ return FALSE;
+ if (gStatuses3[battlerId] & STATUS3_MAGNET_RISE)
+ return FALSE;
+ if (GetBattlerHoldEffect(battlerId, TRUE) == HOLD_EFFECT_AIR_BALLOON)
+ return FALSE;
+ if (GetBattlerAbility(battlerId) == ABILITY_LEVITATE)
+ return FALSE;
+ if (IS_BATTLER_OF_TYPE(battlerId, TYPE_FLYING) && (!considerInverse || !FlagGet(B_FLAG_INVERSE_BATTLE)))
+ return FALSE;
+ return TRUE;
+}
+
+bool32 IsBattlerGrounded(u8 battlerId)
+{
+ IsBattlerGrounded2(battlerId, FALSE);
+}
+
+bool32 IsBattlerAlive(u8 battlerId)
+{
+ if (gBattleMons[battlerId].hp == 0)
+ return FALSE;
+ else if (battlerId >= gBattlersCount)
+ return FALSE;
+ else if (gAbsentBattlerFlags & gBitTable[battlerId])
+ return FALSE;
+ else
+ return TRUE;
+}
+
+u8 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u16 move)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (battleMon->moves[i] == move)
+ break;
+ }
+ return i;
+}
+
+u32 GetBattlerWeight(u8 battlerId)
+{
+ u32 i;
+ u32 weight = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[battlerId].species), 1);
+ u32 ability = GetBattlerAbility(battlerId);
+ u32 holdEffect = GetBattlerHoldEffect(battlerId, TRUE);
+
+ if (ability == ABILITY_HEAVY_METAL)
+ weight *= 2;
+ else if (ability == ABILITY_LIGHT_METAL)
+ weight /= 2;
+
+ if (holdEffect == HOLD_EFFECT_FLOAT_STONE)
+ weight /= 2;
+
+ for (i = 0; i < gDisableStructs[battlerId].autotomizeCount; i++)
+ {
+ if (weight > 1000)
+ {
+ weight -= 1000;
+ }
+ else if (weight <= 1000)
+ {
+ weight = 1;
+ break;
+ }
+ }
+
+ if (weight == 0)
+ weight = 1;
+
+ return weight;
+}
+
+u32 CountBattlerStatIncreases(u8 battlerId, bool32 countEvasionAcc)
+{
+ u32 i;
+ u32 count = 0;
+
+ for (i = 0; i < NUM_BATTLE_STATS; i++)
+ {
+ if ((i == STAT_ACC || i == STAT_EVASION) && !countEvasionAcc)
+ continue;
+ if (gBattleMons[battlerId].statStages[i] > DEFAULT_STAT_STAGE) // Stat is increased.
+ count += gBattleMons[battlerId].statStages[i] - DEFAULT_STAT_STAGE;
+ }
+
+ return count;
+}
+
+u32 GetMoveTargetCount(u16 move, u8 battlerAtk, u8 battlerDef)
+{
+ switch (GetBattlerMoveTargetType(gBattlerAttacker, move))
+ {
+ case MOVE_TARGET_BOTH:
+ return IsBattlerAlive(battlerDef)
+ + IsBattlerAlive(BATTLE_PARTNER(battlerDef));
+ case MOVE_TARGET_FOES_AND_ALLY:
+ return IsBattlerAlive(battlerDef)
+ + IsBattlerAlive(BATTLE_PARTNER(battlerDef))
+ + IsBattlerAlive(BATTLE_PARTNER(battlerAtk));
+ case MOVE_TARGET_OPPONENTS_FIELD:
+ return 1;
+ case MOVE_TARGET_DEPENDS:
+ case MOVE_TARGET_SELECTED:
+ case MOVE_TARGET_RANDOM:
+ case MOVE_TARGET_USER_OR_SELECTED:
+ return IsBattlerAlive(battlerDef);
+ case MOVE_TARGET_USER:
+ return IsBattlerAlive(battlerAtk);
+ default:
+ return 0;
+ }
+}
+
+static void MulModifier(u16 *modifier, u16 val)
+{
+ *modifier = UQ_4_12_TO_INT((*modifier * val) + UQ_4_12_ROUND);
+}
+
+static u32 ApplyModifier(u16 modifier, u32 val)
+{
+ return UQ_4_12_TO_INT((modifier * val) + UQ_4_12_ROUND);
+}
+
+static const u8 sFlailHpScaleToPowerTable[] =
+{
+ 1, 200,
+ 4, 150,
+ 9, 100,
+ 16, 80,
+ 32, 40,
+ 48, 20
+};
+
+// format: min. weight (hectograms), base power
+static const u16 sWeightToDamageTable[] =
+{
+ 100, 20,
+ 250, 40,
+ 500, 60,
+ 1000, 80,
+ 2000, 100,
+ 0xFFFF, 0xFFFF
+};
+
+static const u8 sSpeedDiffPowerTable[] = {40, 60, 80, 120, 150};
+static const u8 sHeatCrashPowerTable[] = {40, 40, 60, 80, 100, 120};
+static const u8 sTrumpCardPowerTable[] = {200, 80, 60, 50, 40};
+
+const struct TypePower gNaturalGiftTable[] =
+{
+ [ITEM_TO_BERRY(ITEM_CHERI_BERRY)] = {TYPE_FIRE, 80},
+ [ITEM_TO_BERRY(ITEM_CHESTO_BERRY)] = {TYPE_WATER, 80},
+ [ITEM_TO_BERRY(ITEM_PECHA_BERRY)] = {TYPE_ELECTRIC, 80},
+ [ITEM_TO_BERRY(ITEM_RAWST_BERRY)] = {TYPE_GRASS, 80},
+ [ITEM_TO_BERRY(ITEM_ASPEAR_BERRY)] = {TYPE_ICE, 80},
+ [ITEM_TO_BERRY(ITEM_LEPPA_BERRY)] = {TYPE_FIGHTING, 80},
+ [ITEM_TO_BERRY(ITEM_ORAN_BERRY)] = {TYPE_POISON, 80},
+ [ITEM_TO_BERRY(ITEM_PERSIM_BERRY)] = {TYPE_GROUND, 80},
+ [ITEM_TO_BERRY(ITEM_LUM_BERRY)] = {TYPE_FLYING, 80},
+ [ITEM_TO_BERRY(ITEM_SITRUS_BERRY)] = {TYPE_PSYCHIC, 80},
+ [ITEM_TO_BERRY(ITEM_FIGY_BERRY)] = {TYPE_BUG, 80},
+ [ITEM_TO_BERRY(ITEM_WIKI_BERRY)] = {TYPE_ROCK, 80},
+ [ITEM_TO_BERRY(ITEM_MAGO_BERRY)] = {TYPE_GHOST, 80},
+ [ITEM_TO_BERRY(ITEM_AGUAV_BERRY)] = {TYPE_DRAGON, 80},
+ [ITEM_TO_BERRY(ITEM_IAPAPA_BERRY)] = {TYPE_DARK, 80},
+ [ITEM_TO_BERRY(ITEM_RAZZ_BERRY)] = {TYPE_STEEL, 80},
+ [ITEM_TO_BERRY(ITEM_OCCA_BERRY)] = {TYPE_FIRE, 80},
+ [ITEM_TO_BERRY(ITEM_PASSHO_BERRY)] = {TYPE_WATER, 80},
+ [ITEM_TO_BERRY(ITEM_WACAN_BERRY)] = {TYPE_ELECTRIC, 80},
+ [ITEM_TO_BERRY(ITEM_RINDO_BERRY)] = {TYPE_GRASS, 80},
+ [ITEM_TO_BERRY(ITEM_YACHE_BERRY)] = {TYPE_ICE, 80},
+ [ITEM_TO_BERRY(ITEM_CHOPLE_BERRY)] = {TYPE_FIGHTING, 80},
+ [ITEM_TO_BERRY(ITEM_KEBIA_BERRY)] = {TYPE_POISON, 80},
+ [ITEM_TO_BERRY(ITEM_SHUCA_BERRY)] = {TYPE_GROUND, 80},
+ [ITEM_TO_BERRY(ITEM_COBA_BERRY)] = {TYPE_FLYING, 80},
+ [ITEM_TO_BERRY(ITEM_PAYAPA_BERRY)] = {TYPE_PSYCHIC, 80},
+ [ITEM_TO_BERRY(ITEM_TANGA_BERRY)] = {TYPE_BUG, 80},
+ [ITEM_TO_BERRY(ITEM_CHARTI_BERRY)] = {TYPE_ROCK, 80},
+ [ITEM_TO_BERRY(ITEM_KASIB_BERRY)] = {TYPE_GHOST, 80},
+ [ITEM_TO_BERRY(ITEM_HABAN_BERRY)] = {TYPE_DRAGON, 80},
+ [ITEM_TO_BERRY(ITEM_COLBUR_BERRY)] = {TYPE_DARK, 80},
+ [ITEM_TO_BERRY(ITEM_BABIRI_BERRY)] = {TYPE_STEEL, 80},
+ [ITEM_TO_BERRY(ITEM_CHILAN_BERRY)] = {TYPE_NORMAL, 80},
+ [ITEM_TO_BERRY(ITEM_ROSELI_BERRY)] = {TYPE_FAIRY, 80},
+ [ITEM_TO_BERRY(ITEM_BLUK_BERRY)] = {TYPE_FIRE, 90},
+ [ITEM_TO_BERRY(ITEM_NANAB_BERRY)] = {TYPE_WATER, 90},
+ [ITEM_TO_BERRY(ITEM_WEPEAR_BERRY)] = {TYPE_ELECTRIC, 90},
+ [ITEM_TO_BERRY(ITEM_PINAP_BERRY)] = {TYPE_GRASS, 90},
+ [ITEM_TO_BERRY(ITEM_POMEG_BERRY)] = {TYPE_ICE, 90},
+ [ITEM_TO_BERRY(ITEM_KELPSY_BERRY)] = {TYPE_FIGHTING, 90},
+ [ITEM_TO_BERRY(ITEM_QUALOT_BERRY)] = {TYPE_POISON, 90},
+ [ITEM_TO_BERRY(ITEM_HONDEW_BERRY)] = {TYPE_GROUND, 90},
+ [ITEM_TO_BERRY(ITEM_GREPA_BERRY)] = {TYPE_FLYING, 90},
+ [ITEM_TO_BERRY(ITEM_TAMATO_BERRY)] = {TYPE_PSYCHIC, 90},
+ [ITEM_TO_BERRY(ITEM_CORNN_BERRY)] = {TYPE_BUG, 90},
+ [ITEM_TO_BERRY(ITEM_MAGOST_BERRY)] = {TYPE_ROCK, 90},
+ [ITEM_TO_BERRY(ITEM_RABUTA_BERRY)] = {TYPE_GHOST, 90},
+ [ITEM_TO_BERRY(ITEM_NOMEL_BERRY)] = {TYPE_DRAGON, 90},
+ [ITEM_TO_BERRY(ITEM_SPELON_BERRY)] = {TYPE_DARK, 90},
+ [ITEM_TO_BERRY(ITEM_PAMTRE_BERRY)] = {TYPE_STEEL, 90},
+ [ITEM_TO_BERRY(ITEM_WATMEL_BERRY)] = {TYPE_FIRE, 100},
+ [ITEM_TO_BERRY(ITEM_DURIN_BERRY)] = {TYPE_WATER, 100},
+ [ITEM_TO_BERRY(ITEM_BELUE_BERRY)] = {TYPE_ELECTRIC, 100},
+ [ITEM_TO_BERRY(ITEM_LIECHI_BERRY)] = {TYPE_GRASS, 100},
+ [ITEM_TO_BERRY(ITEM_GANLON_BERRY)] = {TYPE_ICE, 100},
+ [ITEM_TO_BERRY(ITEM_SALAC_BERRY)] = {TYPE_FIGHTING, 100},
+ [ITEM_TO_BERRY(ITEM_PETAYA_BERRY)] = {TYPE_POISON, 100},
+ [ITEM_TO_BERRY(ITEM_APICOT_BERRY)] = {TYPE_GROUND, 100},
+ [ITEM_TO_BERRY(ITEM_LANSAT_BERRY)] = {TYPE_FLYING, 100},
+ [ITEM_TO_BERRY(ITEM_STARF_BERRY)] = {TYPE_PSYCHIC, 100},
+ [ITEM_TO_BERRY(ITEM_ENIGMA_BERRY)] = {TYPE_BUG, 100},
+ [ITEM_TO_BERRY(ITEM_MICLE_BERRY)] = {TYPE_ROCK, 100},
+ [ITEM_TO_BERRY(ITEM_CUSTAP_BERRY)] = {TYPE_GHOST, 100},
+ [ITEM_TO_BERRY(ITEM_JABOCA_BERRY)] = {TYPE_DRAGON, 100},
+ [ITEM_TO_BERRY(ITEM_ROWAP_BERRY)] = {TYPE_DARK, 100},
+ [ITEM_TO_BERRY(ITEM_KEE_BERRY)] = {TYPE_FAIRY, 100},
+ [ITEM_TO_BERRY(ITEM_MARANGA_BERRY)] = {TYPE_DARK, 100},
+};
+
+static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef)
+{
+ u32 i;
+ u16 basePower = gBattleMoves[move].power;
+ u32 weight, hpFraction, speed;
+
+ if (gBattleStruct->zmove.active)
+ return gBattleMoves[gBattleStruct->zmove.baseMoves[battlerAtk]].zMovePower;
+
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_PLEDGE:
+ // todo
+ break;
+ case EFFECT_FLING:
+ basePower = ItemId_GetFlingPower(gBattleMons[battlerAtk].item);
+ break;
+ case EFFECT_ERUPTION:
+ basePower = gBattleMons[battlerAtk].hp * basePower / gBattleMons[battlerAtk].maxHP;
+ break;
+ case EFFECT_FLAIL:
+ hpFraction = GetScaledHPFraction(gBattleMons[battlerAtk].hp, gBattleMons[battlerAtk].maxHP, 48);
+ for (i = 0; i < sizeof(sFlailHpScaleToPowerTable); i += 2)
+ {
+ if (hpFraction <= sFlailHpScaleToPowerTable[i])
+ break;
+ }
+ basePower = sFlailHpScaleToPowerTable[i + 1];
+ break;
+ case EFFECT_RETURN:
+ basePower = 10 * (gBattleMons[battlerAtk].friendship) / 25;
+ break;
+ case EFFECT_FRUSTRATION:
+ basePower = 10 * (255 - gBattleMons[battlerAtk].friendship) / 25;
+ break;
+ case EFFECT_FURY_CUTTER:
+ for (i = 1; i < gDisableStructs[battlerAtk].furyCutterCounter; i++)
+ basePower *= 2;
+ break;
+ case EFFECT_ROLLOUT:
+ for (i = 1; i < (5 - gDisableStructs[battlerAtk].rolloutTimer); i++)
+ basePower *= 2;
+ if (gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL)
+ basePower *= 2;
+ break;
+ case EFFECT_MAGNITUDE:
+ basePower = gBattleStruct->magnitudeBasePower;
+ break;
+ case EFFECT_PRESENT:
+ basePower = gBattleStruct->presentBasePower;
+ break;
+ case EFFECT_TRIPLE_KICK:
+ basePower += gBattleScripting.tripleKickPower;
+ break;
+ case EFFECT_SPIT_UP:
+ basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter;
+ break;
+ case EFFECT_REVENGE:
+ if ((gProtectStructs[battlerAtk].physicalDmg
+ && gProtectStructs[battlerAtk].physicalBattlerId == battlerDef)
+ || (gProtectStructs[battlerAtk].specialDmg
+ && gProtectStructs[battlerAtk].specialBattlerId == battlerDef))
+ basePower *= 2;
+ break;
+ case EFFECT_WEATHER_BALL:
+ if (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT)
+ basePower *= 2;
+ break;
+ case EFFECT_PURSUIT:
+ if (gActionsByTurnOrder[GetBattlerTurnOrderNum(gBattlerTarget)] == B_ACTION_SWITCH)
+ basePower *= 2;
+ break;
+ case EFFECT_NATURAL_GIFT:
+ basePower = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].power;
+ break;
+ case EFFECT_WAKE_UP_SLAP:
+ if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP || GetBattlerAbility(battlerDef) == ABILITY_COMATOSE)
+ basePower *= 2;
+ break;
+ case EFFECT_SMELLINGSALT:
+ if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS)
+ basePower *= 2;
+ break;
+ case EFFECT_WRING_OUT:
+ basePower = 120 * gBattleMons[battlerDef].hp / gBattleMons[battlerDef].maxHP;
+ break;
+ case EFFECT_HEX:
+ if (gBattleMons[battlerDef].status1 & STATUS1_ANY || GetBattlerAbility(battlerDef) == ABILITY_COMATOSE)
+ basePower *= 2;
+ break;
+ case EFFECT_ASSURANCE:
+ if (gProtectStructs[battlerDef].physicalDmg != 0 || gProtectStructs[battlerDef].specialDmg != 0 || gProtectStructs[battlerDef].confusionSelfDmg)
+ basePower *= 2;
+ break;
+ case EFFECT_TRUMP_CARD:
+ i = GetBattleMonMoveSlot(&gBattleMons[battlerAtk], move);
+ if (i != 4)
+ {
+ if (gBattleMons[battlerAtk].pp[i] >= ARRAY_COUNT(sTrumpCardPowerTable))
+ basePower = sTrumpCardPowerTable[ARRAY_COUNT(sTrumpCardPowerTable) - 1];
+ else
+ basePower = sTrumpCardPowerTable[gBattleMons[battlerAtk].pp[i]];
+ }
+ break;
+ case EFFECT_ACROBATICS:
+ if (gBattleMons[battlerAtk].item == ITEM_NONE
+ // Edge case, because removal of items happens after damage calculation.
+ || (gSpecialStatuses[battlerAtk].gemBoost && GetBattlerHoldEffect(battlerAtk, FALSE) == HOLD_EFFECT_GEMS))
+ basePower *= 2;
+ break;
+ case EFFECT_LOW_KICK:
+ weight = GetBattlerWeight(battlerDef);
+ for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2)
+ {
+ if (sWeightToDamageTable[i] > weight)
+ break;
+ }
+ if (sWeightToDamageTable[i] != 0xFFFF)
+ basePower = sWeightToDamageTable[i + 1];
+ else
+ basePower = 120;
+ break;
+ case EFFECT_HEAT_CRASH:
+ weight = GetBattlerWeight(battlerAtk) / GetBattlerWeight(battlerDef);
+ if (weight >= ARRAY_COUNT(sHeatCrashPowerTable))
+ basePower = sHeatCrashPowerTable[ARRAY_COUNT(sHeatCrashPowerTable) - 1];
+ else
+ basePower = sHeatCrashPowerTable[weight];
+ break;
+ case EFFECT_PUNISHMENT:
+ basePower = 60 + (CountBattlerStatIncreases(battlerDef, FALSE) * 20);
+ if (basePower > 200)
+ basePower = 200;
+ break;
+ case EFFECT_STORED_POWER:
+ basePower += (CountBattlerStatIncreases(battlerAtk, TRUE) * 20);
+ break;
+ case EFFECT_ELECTRO_BALL:
+ speed = GetBattlerTotalSpeedStat(battlerAtk) / GetBattlerTotalSpeedStat(battlerDef);
+ if (speed >= ARRAY_COUNT(sSpeedDiffPowerTable))
+ speed = ARRAY_COUNT(sSpeedDiffPowerTable) - 1;
+ basePower = sSpeedDiffPowerTable[speed];
+ break;
+ case EFFECT_GYRO_BALL:
+ basePower = ((25 * GetBattlerTotalSpeedStat(battlerDef)) / GetBattlerTotalSpeedStat(battlerAtk)) + 1;
+ if (basePower > 150)
+ basePower = 150;
+ break;
+ case EFFECT_ECHOED_VOICE:
+ // gBattleStruct->sameMoveTurns incremented in ppreduce
+ if (gBattleStruct->sameMoveTurns[battlerAtk] != 0)
+ {
+ basePower += (basePower * gBattleStruct->sameMoveTurns[battlerAtk]);
+ if (basePower > 200)
+ basePower = 200;
+ }
+ break;
+ case EFFECT_PAYBACK:
+ if (GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef)
+ && (gDisableStructs[battlerDef].isFirstTurn != 2 || B_PAYBACK_SWITCH_BOOST < GEN_5))
+ basePower *= 2;
+ break;
+ case EFFECT_BOLT_BEAK:
+ if (GetBattlerTurnOrderNum(battlerAtk) < GetBattlerTurnOrderNum(battlerDef)
+ || gDisableStructs[battlerDef].isFirstTurn == 2)
+ basePower *= 2;
+ break;
+ case EFFECT_ROUND:
+ if (gChosenMoveByBattler[BATTLE_PARTNER(battlerAtk)] == MOVE_ROUND && !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)]))
+ basePower *= 2;
+ break;
+ case EFFECT_FUSION_COMBO:
+ if (gBattleMoves[gLastUsedMove].effect == EFFECT_FUSION_COMBO && move != gLastUsedMove)
+ basePower *= 2;
+ break;
+ case EFFECT_LASH_OUT:
+ if (gProtectStructs[battlerAtk].statFell)
+ basePower *= 2;
+ break;
+ case EFFECT_EXPLOSION:
+ if (move == MOVE_MISTY_EXPLOSION && gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN && IsBattlerGrounded(battlerAtk))
+ MulModifier(&basePower, UQ_4_12(1.5));
+ break;
+ case EFFECT_DYNAMAX_DOUBLE_DMG:
+ #ifdef B_DYNAMAX
+ if (IsDynamaxed(battlerDef))
+ basePower *= 2;
+ #endif
+ break;
+ case EFFECT_HIDDEN_POWER:
+ {
+ #if B_HIDDEN_POWER_DMG < GEN_6
+ u8 powerBits;
+
+ powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1)
+ | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0)
+ | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1)
+ | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2)
+ | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3)
+ | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4);
+
+ basePower = (40 * powerBits) / 63 + 30;
+ #endif
+ break;
+ }
+ case EFFECT_GRAV_APPLE:
+ if (gFieldStatuses & STATUS_FIELD_GRAVITY)
+ MulModifier(&basePower, UQ_4_12(1.5));
+ break;
+ case EFFECT_TERRAIN_PULSE:
+ if ((gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
+ && IsBattlerGrounded(gBattlerAttacker))
+ basePower *= 2;
+ break;
+ case EFFECT_EXPANDING_FORCE:
+ if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_PSYCHIC_TERRAIN))
+ MulModifier(&basePower, UQ_4_12(1.5));
+ break;
+ case EFFECT_RISING_VOLTAGE:
+ if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN))
+ basePower *= 2;
+ break;
+ }
+
+ // Move-specific base power changes
+ switch (move)
+ {
+ case MOVE_WATER_SHURIKEN:
+ if (gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)
+ basePower = 20;
+ break;
+ }
+
+ if (basePower == 0)
+ basePower = 1;
+ return basePower;
+}
+
+static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 updateFlags)
+{
+ u32 i, ability;
+ u32 holdEffectAtk, holdEffectParamAtk;
+ u16 basePower = CalcMoveBasePower(move, battlerAtk, battlerDef);
+ u16 holdEffectModifier;
+ u16 modifier = UQ_4_12(1.0);
+ u32 atkSide = GET_BATTLER_SIDE(battlerAtk);
+
+ // attacker's abilities
+ switch (GetBattlerAbility(battlerAtk))
+ {
+ case ABILITY_TECHNICIAN:
+ if (basePower <= 60)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_FLARE_BOOST:
+ if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IS_MOVE_SPECIAL(move))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_TOXIC_BOOST:
+ if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY && IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_RECKLESS:
+ if (gBattleMoves[move].flags & FLAG_RECKLESS_BOOST)
+ MulModifier(&modifier, UQ_4_12(1.2));
+ break;
+ case ABILITY_IRON_FIST:
+ if (gBattleMoves[move].flags & FLAG_IRON_FIST_BOOST)
+ MulModifier(&modifier, UQ_4_12(1.2));
+ break;
+ case ABILITY_SHEER_FORCE:
+ if (gBattleMoves[move].flags & FLAG_SHEER_FORCE_BOOST)
+ MulModifier(&modifier, UQ_4_12(1.3));
+ break;
+ case ABILITY_SAND_FORCE:
+ if ((moveType == TYPE_STEEL || moveType == TYPE_ROCK || moveType == TYPE_GROUND)
+ && gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT)
+ MulModifier(&modifier, UQ_4_12(1.3));
+ break;
+ case ABILITY_RIVALRY:
+ if (GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality) != MON_GENDERLESS
+ && GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality) != MON_GENDERLESS)
+ {
+ if (GetGenderFromSpeciesAndPersonality(gBattleMons[battlerAtk].species, gBattleMons[battlerAtk].personality)
+ == GetGenderFromSpeciesAndPersonality(gBattleMons[battlerDef].species, gBattleMons[battlerDef].personality))
+ MulModifier(&modifier, UQ_4_12(1.25));
+ else
+ MulModifier(&modifier, UQ_4_12(0.75));
+ }
+ break;
+ case ABILITY_ANALYTIC:
+ if (GetBattlerTurnOrderNum(battlerAtk) == gBattlersCount - 1 && move != MOVE_FUTURE_SIGHT && move != MOVE_DOOM_DESIRE)
+ MulModifier(&modifier, UQ_4_12(1.3));
+ break;
+ case ABILITY_TOUGH_CLAWS:
+ if (IsMoveMakingContact(move, battlerAtk))
+ MulModifier(&modifier, UQ_4_12(1.3));
+ break;
+ case ABILITY_STRONG_JAW:
+ if (gBattleMoves[move].flags & FLAG_STRONG_JAW_BOOST)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_MEGA_LAUNCHER:
+ if (gBattleMoves[move].flags & FLAG_MEGA_LAUNCHER_BOOST)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_WATER_BUBBLE:
+ if (moveType == TYPE_WATER)
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case ABILITY_STEELWORKER:
+ if (moveType == TYPE_STEEL)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_PIXILATE:
+ if (moveType == TYPE_FAIRY && gBattleStruct->ateBoost[battlerAtk])
+ MulModifier(&modifier, UQ_4_12(1.2));
+ break;
+ case ABILITY_GALVANIZE:
+ if (moveType == TYPE_ELECTRIC && gBattleStruct->ateBoost[battlerAtk])
+ MulModifier(&modifier, UQ_4_12(1.2));
+ break;
+ case ABILITY_REFRIGERATE:
+ if (moveType == TYPE_ICE && gBattleStruct->ateBoost[battlerAtk])
+ MulModifier(&modifier, UQ_4_12(1.2));
+ break;
+ case ABILITY_AERILATE:
+ if (moveType == TYPE_FLYING && gBattleStruct->ateBoost[battlerAtk])
+ MulModifier(&modifier, UQ_4_12(1.2));
+ break;
+ case ABILITY_NORMALIZE:
+ if (moveType == TYPE_NORMAL && gBattleStruct->ateBoost[battlerAtk])
+ MulModifier(&modifier, UQ_4_12(1.2));
+ break;
+ case ABILITY_PUNK_ROCK:
+ if (gBattleMoves[move].flags & FLAG_SOUND)
+ MulModifier(&modifier, UQ_4_12(1.3));
+ break;
+ case ABILITY_STEELY_SPIRIT:
+ if (moveType == TYPE_STEEL)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_TRANSISTOR:
+ if (moveType == TYPE_ELECTRIC)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_DRAGONS_MAW:
+ if (moveType == TYPE_DRAGON)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_GORILLA_TACTICS:
+ if (IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ }
+
+ // field abilities
+ if ((IsAbilityOnField(ABILITY_DARK_AURA) && moveType == TYPE_DARK)
+ || (IsAbilityOnField(ABILITY_FAIRY_AURA) && moveType == TYPE_FAIRY))
+ {
+ if (IsAbilityOnField(ABILITY_AURA_BREAK))
+ MulModifier(&modifier, UQ_4_12(0.75));
+ else
+ MulModifier(&modifier, UQ_4_12(1.33));
+ }
+
+ // attacker partner's abilities
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)))
+ {
+ switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk)))
+ {
+ case ABILITY_BATTERY:
+ if (IS_MOVE_SPECIAL(move))
+ MulModifier(&modifier, UQ_4_12(1.3));
+ break;
+ case ABILITY_POWER_SPOT:
+ MulModifier(&modifier, UQ_4_12(1.3));
+ break;
+ case ABILITY_STEELY_SPIRIT:
+ if (moveType == TYPE_STEEL)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ }
+ }
+
+ // target's abilities
+ ability = GetBattlerAbility(battlerDef);
+ switch (ability)
+ {
+ case ABILITY_HEATPROOF:
+ case ABILITY_WATER_BUBBLE:
+ if (moveType == TYPE_FIRE)
+ {
+ MulModifier(&modifier, UQ_4_12(0.5));
+ if (updateFlags)
+ RecordAbilityBattle(battlerDef, ability);
+ }
+ break;
+ case ABILITY_DRY_SKIN:
+ if (moveType == TYPE_FIRE)
+ MulModifier(&modifier, UQ_4_12(1.25));
+ break;
+ case ABILITY_FLUFFY:
+ if (IsMoveMakingContact(move, battlerAtk))
+ {
+ MulModifier(&modifier, UQ_4_12(0.5));
+ if (updateFlags)
+ RecordAbilityBattle(battlerDef, ability);
+ }
+ if (moveType == TYPE_FIRE)
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ }
+
+ holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE);
+ holdEffectParamAtk = GetBattlerHoldEffectParam(battlerAtk);
+ if (holdEffectParamAtk > 100)
+ holdEffectParamAtk = 100;
+
+ holdEffectModifier = UQ_4_12(1.0) + sPercentToModifier[holdEffectParamAtk];
+
+ // attacker's hold effect
+ switch (holdEffectAtk)
+ {
+ case HOLD_EFFECT_MUSCLE_BAND:
+ if (IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, holdEffectModifier);
+ break;
+ case HOLD_EFFECT_WISE_GLASSES:
+ if (IS_MOVE_SPECIAL(move))
+ MulModifier(&modifier, holdEffectModifier);
+ break;
+ case HOLD_EFFECT_LUSTROUS_ORB:
+ if (gBattleMons[battlerAtk].species == SPECIES_PALKIA && (moveType == TYPE_WATER || moveType == TYPE_DRAGON))
+ MulModifier(&modifier, holdEffectModifier);
+ break;
+ case HOLD_EFFECT_ADAMANT_ORB:
+ if (gBattleMons[battlerAtk].species == SPECIES_DIALGA && (moveType == TYPE_STEEL || moveType == TYPE_DRAGON))
+ MulModifier(&modifier, holdEffectModifier);
+ break;
+ case HOLD_EFFECT_GRISEOUS_ORB:
+ if (gBattleMons[battlerAtk].species == SPECIES_GIRATINA && (moveType == TYPE_GHOST || moveType == TYPE_DRAGON))
+ MulModifier(&modifier, holdEffectModifier);
+ break;
+ case HOLD_EFFECT_SOUL_DEW:
+ #if B_SOUL_DEW_BOOST >= GEN_7
+ if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) && (moveType == TYPE_PSYCHIC || moveType == TYPE_DRAGON))
+ #else
+ if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && IS_MOVE_SPECIAL(move))
+ #endif
+ MulModifier(&modifier, holdEffectModifier);
+ break;
+ case HOLD_EFFECT_GEMS:
+ if (gSpecialStatuses[battlerAtk].gemBoost && gBattleMons[battlerAtk].item)
+ MulModifier(&modifier, UQ_4_12(1.0) + sPercentToModifier[gSpecialStatuses[battlerAtk].gemParam]);
+ break;
+ case HOLD_EFFECT_BUG_POWER:
+ case HOLD_EFFECT_STEEL_POWER:
+ case HOLD_EFFECT_GROUND_POWER:
+ case HOLD_EFFECT_ROCK_POWER:
+ case HOLD_EFFECT_GRASS_POWER:
+ case HOLD_EFFECT_DARK_POWER:
+ case HOLD_EFFECT_FIGHTING_POWER:
+ case HOLD_EFFECT_ELECTRIC_POWER:
+ case HOLD_EFFECT_WATER_POWER:
+ case HOLD_EFFECT_FLYING_POWER:
+ case HOLD_EFFECT_POISON_POWER:
+ case HOLD_EFFECT_ICE_POWER:
+ case HOLD_EFFECT_GHOST_POWER:
+ case HOLD_EFFECT_PSYCHIC_POWER:
+ case HOLD_EFFECT_FIRE_POWER:
+ case HOLD_EFFECT_DRAGON_POWER:
+ case HOLD_EFFECT_NORMAL_POWER:
+ case HOLD_EFFECT_FAIRY_POWER:
+ for (i = 0; i < ARRAY_COUNT(sHoldEffectToType); i++)
+ {
+ if (holdEffectAtk == sHoldEffectToType[i][0])
+ {
+ if (moveType == sHoldEffectToType[i][1])
+ MulModifier(&modifier, holdEffectModifier);
+ break;
+ }
+ }
+ break;
+ case HOLD_EFFECT_PLATE:
+ if (moveType == ItemId_GetSecondaryId(gBattleMons[battlerAtk].item))
+ MulModifier(&modifier, holdEffectModifier);
+ break;
+ }
+
+ // move effect
+ switch (gBattleMoves[move].effect)
+ {
+ case EFFECT_FACADE:
+ if (gBattleMons[battlerAtk].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_PARALYSIS))
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case EFFECT_BRINE:
+ if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2))
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case EFFECT_VENOSHOCK:
+ if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case EFFECT_RETALIATE:
+ if (gSideTimers[atkSide].retaliateTimer == 1)
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case EFFECT_SOLAR_BEAM:
+ if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN)))
+ MulModifier(&modifier, UQ_4_12(0.5));
+ break;
+ case EFFECT_STOMPING_TANTRUM:
+ if (gBattleStruct->lastMoveFailed & gBitTable[battlerAtk])
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case EFFECT_BULLDOZE:
+ case EFFECT_MAGNITUDE:
+ case EFFECT_EARTHQUAKE:
+ if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE))
+ MulModifier(&modifier, UQ_4_12(0.5));
+ break;
+ case EFFECT_KNOCK_OFF:
+ #if B_KNOCK_OFF_DMG >= GEN_6
+ if (gBattleMons[battlerDef].item != ITEM_NONE
+ && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ #endif
+ break;
+ }
+
+ // various effecs
+ if (gProtectStructs[battlerAtk].helpingHand)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP && moveType == TYPE_ELECTRIC)
+ MulModifier(&modifier, UQ_4_12(2.0));
+ if (gStatuses3[battlerAtk] & STATUS3_ME_FIRST)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && moveType == TYPE_GRASS && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE))
+ MulModifier(&modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8) ? UQ_4_12(1.3) : UQ_4_12(1.5));
+ if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN && moveType == TYPE_DRAGON && IsBattlerGrounded(battlerDef) && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE))
+ MulModifier(&modifier, UQ_4_12(0.5));
+ if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && moveType == TYPE_ELECTRIC && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE))
+ MulModifier(&modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8) ? UQ_4_12(1.3) : UQ_4_12(1.5));
+ if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN && moveType == TYPE_PSYCHIC && IsBattlerGrounded(battlerAtk) && !(gStatuses3[battlerAtk] & STATUS3_SEMI_INVULNERABLE))
+ MulModifier(&modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8) ? UQ_4_12(1.3) : UQ_4_12(1.5));
+ #if B_SPORT_TURNS >= GEN_6
+ if ((gFieldStatuses & STATUS_FIELD_MUDSPORT && moveType == TYPE_ELECTRIC)
+ || (gFieldStatuses & STATUS_FIELD_WATERSPORT && moveType == TYPE_FIRE))
+ MulModifier(&modifier, (B_SPORT_DMG_REDUCTION >= GEN_5) ? UQ_4_12(0.23) : UQ_4_12(0.5));
+ #else
+ if ((moveType == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_MUD_SPORT, 0))
+ || (moveType == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_WATER_SPORT, 0)))
+ MulModifier(&modifier, (B_SPORT_DMG_REDUCTION >= GEN_5) ? UQ_4_12(0.23) : UQ_4_12(0.5));
+ #endif
+ return ApplyModifier(modifier, basePower);
+}
+
+static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 isCrit, bool32 updateFlags)
+{
+ u8 atkStage;
+ u32 atkStat;
+ u16 modifier;
+ u16 atkBaseSpeciesId;
+
+ atkBaseSpeciesId = GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species);
+
+ if (gBattleMoves[move].effect == EFFECT_FOUL_PLAY)
+ {
+ if (IS_MOVE_PHYSICAL(move))
+ {
+ atkStat = gBattleMons[battlerDef].attack;
+ atkStage = gBattleMons[battlerDef].statStages[STAT_ATK];
+ }
+ else
+ {
+ atkStat = gBattleMons[battlerDef].spAttack;
+ atkStage = gBattleMons[battlerDef].statStages[STAT_SPATK];
+ }
+ }
+ else if (gBattleMoves[move].effect == EFFECT_BODY_PRESS)
+ {
+ atkStat = gBattleMons[battlerAtk].defense;
+ atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF];
+ }
+ else
+ {
+ if (IS_MOVE_PHYSICAL(move))
+ {
+ atkStat = gBattleMons[battlerAtk].attack;
+ atkStage = gBattleMons[battlerAtk].statStages[STAT_ATK];
+ }
+ else
+ {
+ atkStat = gBattleMons[battlerAtk].spAttack;
+ atkStage = gBattleMons[battlerAtk].statStages[STAT_SPATK];
+ }
+ }
+
+ // critical hits ignore attack stat's stage drops
+ if (isCrit && atkStage < DEFAULT_STAT_STAGE)
+ atkStage = DEFAULT_STAT_STAGE;
+ // pokemon with unaware ignore attack stat changes while taking damage
+ if (GetBattlerAbility(battlerDef) == ABILITY_UNAWARE)
+ atkStage = DEFAULT_STAT_STAGE;
+
+ atkStat *= gStatStageRatios[atkStage][0];
+ atkStat /= gStatStageRatios[atkStage][1];
+
+ // apply attack stat modifiers
+ modifier = UQ_4_12(1.0);
+
+ // attacker's abilities
+ switch (GetBattlerAbility(battlerAtk))
+ {
+ case ABILITY_HUGE_POWER:
+ case ABILITY_PURE_POWER:
+ if (IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case ABILITY_SLOW_START:
+ if (gDisableStructs[battlerAtk].slowStartTimer != 0)
+ MulModifier(&modifier, UQ_4_12(0.5));
+ break;
+ case ABILITY_SOLAR_POWER:
+ if (IS_MOVE_SPECIAL(move) && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_DEFEATIST:
+ if (gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 2))
+ MulModifier(&modifier, UQ_4_12(0.5));
+ break;
+ case ABILITY_FLASH_FIRE:
+ if (moveType == TYPE_FIRE && gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_FLASH_FIRE)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_SWARM:
+ if (moveType == TYPE_BUG && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_TORRENT:
+ if (moveType == TYPE_WATER && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_BLAZE:
+ if (moveType == TYPE_FIRE && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_OVERGROW:
+ if (moveType == TYPE_GRASS && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ #if B_PLUS_MINUS_INTERACTION >= GEN_5
+ case ABILITY_PLUS:
+ case ABILITY_MINUS:
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)))
+ {
+ u32 partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk));
+ if (partnerAbility == ABILITY_PLUS || partnerAbility == ABILITY_MINUS)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ }
+ break;
+ #else
+ case ABILITY_PLUS:
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_MINUS)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_MINUS:
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && GetBattlerAbility(BATTLE_PARTNER(battlerAtk)) == ABILITY_PLUS)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ #endif
+ case ABILITY_FLOWER_GIFT:
+ if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_HUSTLE:
+ if (IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_STAKEOUT:
+ if (gDisableStructs[battlerDef].isFirstTurn == 2) // just switched in
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case ABILITY_GUTS:
+ if (gBattleMons[battlerAtk].status1 & STATUS1_ANY && IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ }
+
+ // target's abilities
+ switch (GetBattlerAbility(battlerDef))
+ {
+ case ABILITY_THICK_FAT:
+ if (moveType == TYPE_FIRE || moveType == TYPE_ICE)
+ {
+ MulModifier(&modifier, UQ_4_12(0.5));
+ if (updateFlags)
+ RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT);
+ }
+ break;
+ case ABILITY_ICE_SCALES:
+ if (IS_MOVE_SPECIAL(move))
+ MulModifier(&modifier, UQ_4_12(0.5));
+ break;
+ }
+
+ // ally's abilities
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk)))
+ {
+ switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk)))
+ {
+ case ABILITY_FLOWER_GIFT:
+ if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerAtk), B_WEATHER_SUN) && IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ }
+ }
+
+ // attacker's hold effect
+ switch (GetBattlerHoldEffect(battlerAtk, TRUE))
+ {
+ case HOLD_EFFECT_THICK_CLUB:
+ if ((atkBaseSpeciesId == SPECIES_CUBONE || atkBaseSpeciesId == SPECIES_MAROWAK) && IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case HOLD_EFFECT_DEEP_SEA_TOOTH:
+ if (gBattleMons[battlerAtk].species == SPECIES_CLAMPERL && IS_MOVE_SPECIAL(move))
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case HOLD_EFFECT_LIGHT_BALL:
+ if (atkBaseSpeciesId == SPECIES_PIKACHU)
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case HOLD_EFFECT_CHOICE_BAND:
+ if (IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case HOLD_EFFECT_CHOICE_SPECS:
+ if (IS_MOVE_SPECIAL(move))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ }
+
+ // The offensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 1st badge and 7th badges.
+ // Having the 1st badge boosts physical attack while having the 7th badge boosts special attack.
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerAtk) && IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(1.1));
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerAtk) && IS_MOVE_SPECIAL(move))
+ MulModifier(&modifier, UQ_4_12(1.1));
+
+ return ApplyModifier(modifier, atkStat);
+}
+
+static bool32 CanEvolve(u32 species)
+{
+ u32 i;
+
+ for (i = 0; i < EVOS_PER_MON; i++)
+ {
+ if (gEvolutionTable[species][i].method
+ && gEvolutionTable[species][i].method != EVO_MEGA_EVOLUTION
+ && gEvolutionTable[species][i].method != EVO_MOVE_MEGA_EVOLUTION
+ && gEvolutionTable[species][i].method != EVO_PRIMAL_REVERSION)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 isCrit, bool32 updateFlags)
+{
+ bool32 usesDefStat;
+ u8 defStage;
+ u32 defStat, def, spDef;
+ u16 modifier;
+
+ if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped
+ {
+ def = gBattleMons[battlerDef].spDefense;
+ spDef = gBattleMons[battlerDef].defense;
+ }
+ else
+ {
+ def = gBattleMons[battlerDef].defense;
+ spDef = gBattleMons[battlerDef].spDefense;
+ }
+
+ if (gBattleMoves[move].effect == EFFECT_PSYSHOCK || IS_MOVE_PHYSICAL(move)) // uses defense stat instead of sp.def
+ {
+ defStat = def;
+ defStage = gBattleMons[battlerDef].statStages[STAT_DEF];
+ usesDefStat = TRUE;
+ }
+ else // is special
+ {
+ defStat = spDef;
+ defStage = gBattleMons[battlerDef].statStages[STAT_SPDEF];
+ usesDefStat = FALSE;
+ }
+
+ #if B_EXPLOSION_DEFENSE <= GEN_4
+ // Self-destruct / Explosion cut defense in half
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION)
+ defStat /= 2;
+ #endif
+
+ // critical hits ignore positive stat changes
+ if (isCrit && defStage > DEFAULT_STAT_STAGE)
+ defStage = DEFAULT_STAT_STAGE;
+ // pokemon with unaware ignore defense stat changes while dealing damage
+ if (GetBattlerAbility(battlerAtk) == ABILITY_UNAWARE)
+ defStage = DEFAULT_STAT_STAGE;
+ // certain moves also ignore stat changes
+ if (gBattleMoves[move].flags & FLAG_STAT_STAGES_IGNORED)
+ defStage = DEFAULT_STAT_STAGE;
+
+ defStat *= gStatStageRatios[defStage][0];
+ defStat /= gStatStageRatios[defStage][1];
+
+ // apply defense stat modifiers
+ modifier = UQ_4_12(1.0);
+
+ // target's abilities
+ switch (GetBattlerAbility(battlerDef))
+ {
+ case ABILITY_MARVEL_SCALE:
+ if (gBattleMons[battlerDef].status1 & STATUS1_ANY && usesDefStat)
+ {
+ MulModifier(&modifier, UQ_4_12(1.5));
+ if (updateFlags)
+ RecordAbilityBattle(battlerDef, ABILITY_MARVEL_SCALE);
+ }
+ break;
+ case ABILITY_FUR_COAT:
+ if (usesDefStat)
+ {
+ MulModifier(&modifier, UQ_4_12(2.0));
+ if (updateFlags)
+ RecordAbilityBattle(battlerDef, ABILITY_FUR_COAT);
+ }
+ break;
+ case ABILITY_GRASS_PELT:
+ if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && usesDefStat)
+ {
+ MulModifier(&modifier, UQ_4_12(1.5));
+ if (updateFlags)
+ RecordAbilityBattle(battlerDef, ABILITY_GRASS_PELT);
+ }
+ break;
+ case ABILITY_FLOWER_GIFT:
+ if (gBattleMons[battlerDef].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_PUNK_ROCK:
+ if (gBattleMoves[move].flags & FLAG_SOUND)
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ }
+
+ // ally's abilities
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerDef)))
+ {
+ switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef)))
+ {
+ case ABILITY_FLOWER_GIFT:
+ if (gBattleMons[BATTLE_PARTNER(battlerDef)].species == SPECIES_CHERRIM && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerDef), B_WEATHER_SUN) && !usesDefStat)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ }
+ }
+
+ // target's hold effects
+ switch (GetBattlerHoldEffect(battlerDef, TRUE))
+ {
+ case HOLD_EFFECT_DEEP_SEA_SCALE:
+ if (gBattleMons[battlerDef].species == SPECIES_CLAMPERL && !usesDefStat)
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case HOLD_EFFECT_METAL_POWDER:
+ if (gBattleMons[battlerDef].species == SPECIES_DITTO && usesDefStat && !(gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED))
+ MulModifier(&modifier, UQ_4_12(2.0));
+ break;
+ case HOLD_EFFECT_EVIOLITE:
+ if (CanEvolve(gBattleMons[battlerDef].species))
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+ case HOLD_EFFECT_ASSAULT_VEST:
+ if (!usesDefStat)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+#if B_SOUL_DEW_BOOST <= GEN_6
+ case HOLD_EFFECT_SOUL_DEW:
+ if ((gBattleMons[battlerDef].species == SPECIES_LATIAS || gBattleMons[battlerDef].species == SPECIES_LATIOS)
+ && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
+ && !usesDefStat)
+ MulModifier(&modifier, UQ_4_12(1.5));
+ break;
+#endif
+ }
+
+ // sandstorm sp.def boost for rock types
+ if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT && !usesDefStat)
+ MulModifier(&modifier, UQ_4_12(1.5));
+
+ // The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges.
+ // Having the 5th badge boosts physical defense while having the 7th badge boosts special defense.
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerDef) && IS_MOVE_PHYSICAL(move))
+ MulModifier(&modifier, UQ_4_12(1.1));
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerDef) && IS_MOVE_SPECIAL(move))
+ MulModifier(&modifier, UQ_4_12(1.1));
+
+ return ApplyModifier(modifier, defStat);
+}
+
+static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, u16 typeEffectivenessModifier, bool32 isCrit, bool32 updateFlags)
+{
+ u32 percentBoost;
+ u32 abilityAtk = GetBattlerAbility(battlerAtk);
+ u32 abilityDef = GetBattlerAbility(battlerDef);
+ u32 defSide = GET_BATTLER_SIDE(battlerDef);
+ u16 finalModifier = UQ_4_12(1.0);
+ u16 itemDef = gBattleMons[battlerDef].item;
+
+ // check multiple targets in double battle
+ if (GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2)
+ MulModifier(&finalModifier, UQ_4_12(0.75));
+
+ // take type effectiveness
+ MulModifier(&finalModifier, typeEffectivenessModifier);
+
+ // check crit
+ if (isCrit)
+ dmg = ApplyModifier((B_CRIT_MULTIPLIER >= GEN_6 ? UQ_4_12(1.5) : UQ_4_12(2.0)), dmg);
+
+ // check burn
+ if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IS_MOVE_PHYSICAL(move)
+ && (gBattleMoves[move].effect != EFFECT_FACADE || B_BURN_FACADE_DMG < GEN_6)
+ && abilityAtk != ABILITY_GUTS)
+ dmg = ApplyModifier(UQ_4_12(0.5), dmg);
+
+ // check sunny/rain weather
+ if (IsBattlerWeatherAffected(battlerAtk, B_WEATHER_RAIN))
+ {
+ if (moveType == TYPE_FIRE)
+ dmg = ApplyModifier(UQ_4_12(0.5), dmg);
+ else if (moveType == TYPE_WATER)
+ dmg = ApplyModifier(UQ_4_12(1.5), dmg);
+ }
+ else if (IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN))
+ {
+ if (moveType == TYPE_FIRE)
+ dmg = ApplyModifier(UQ_4_12(1.5), dmg);
+ else if (moveType == TYPE_WATER)
+ dmg = ApplyModifier(UQ_4_12(0.5), dmg);
+ }
+
+ // check stab
+ if (IS_BATTLER_OF_TYPE(battlerAtk, moveType) && move != MOVE_STRUGGLE && move != MOVE_NONE)
+ {
+ if (abilityAtk == ABILITY_ADAPTABILITY)
+ MulModifier(&finalModifier, UQ_4_12(2.0));
+ else
+ MulModifier(&finalModifier, UQ_4_12(1.5));
+ }
+
+ // reflect, light screen, aurora veil
+ if (((gSideStatuses[defSide] & SIDE_STATUS_REFLECT && IS_MOVE_PHYSICAL(move))
+ || (gSideStatuses[defSide] & SIDE_STATUS_LIGHTSCREEN && IS_MOVE_SPECIAL(move))
+ || (gSideStatuses[defSide] & SIDE_STATUS_AURORA_VEIL))
+ && abilityAtk != ABILITY_INFILTRATOR
+ && !(isCrit)
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ MulModifier(&finalModifier, UQ_4_12(0.66));
+ else
+ MulModifier(&finalModifier, UQ_4_12(0.5));
+ }
+
+ // attacker's abilities
+ switch (abilityAtk)
+ {
+ case ABILITY_TINTED_LENS:
+ if (typeEffectivenessModifier <= UQ_4_12(0.5))
+ MulModifier(&finalModifier, UQ_4_12(2.0));
+ break;
+ case ABILITY_SNIPER:
+ if (isCrit)
+ MulModifier(&finalModifier, UQ_4_12(1.5));
+ break;
+ case ABILITY_NEUROFORCE:
+ if (typeEffectivenessModifier >= UQ_4_12(2.0))
+ MulModifier(&finalModifier, UQ_4_12(1.25));
+ break;
+ }
+
+ // target's abilities
+ switch (abilityDef)
+ {
+ case ABILITY_MULTISCALE:
+ case ABILITY_SHADOW_SHIELD:
+ if (BATTLER_MAX_HP(battlerDef))
+ MulModifier(&finalModifier, UQ_4_12(0.5));
+ break;
+ case ABILITY_FILTER:
+ case ABILITY_SOLID_ROCK:
+ case ABILITY_PRISM_ARMOR:
+ if (typeEffectivenessModifier >= UQ_4_12(2.0))
+ MulModifier(&finalModifier, UQ_4_12(0.75));
+ break;
+ }
+
+ // target's ally's abilities
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerDef)))
+ {
+ switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef)))
+ {
+ case ABILITY_FRIEND_GUARD:
+ MulModifier(&finalModifier, UQ_4_12(0.75));
+ break;
+ }
+ }
+
+ // attacker's hold effect
+ switch (GetBattlerHoldEffect(battlerAtk, TRUE))
+ {
+ case HOLD_EFFECT_METRONOME:
+ percentBoost = min((gBattleStruct->sameMoveTurns[battlerAtk] * GetBattlerHoldEffectParam(battlerAtk)), 100);
+ MulModifier(&finalModifier, UQ_4_12(1.0) + sPercentToModifier[percentBoost]);
+ break;
+ case HOLD_EFFECT_EXPERT_BELT:
+ if (typeEffectivenessModifier >= UQ_4_12(2.0))
+ MulModifier(&finalModifier, UQ_4_12(1.2));
+ break;
+ case HOLD_EFFECT_LIFE_ORB:
+ MulModifier(&finalModifier, UQ_4_12(1.3));
+ break;
+ }
+
+ // target's hold effect
+ switch (GetBattlerHoldEffect(battlerDef, TRUE))
+ {
+ // berries reducing dmg
+ case HOLD_EFFECT_RESIST_BERRY:
+ if (moveType == GetBattlerHoldEffectParam(battlerDef)
+ && (moveType == TYPE_NORMAL || typeEffectivenessModifier >= UQ_4_12(2.0))
+ && !UnnerveOn(battlerDef, itemDef))
+ {
+ if (abilityDef == ABILITY_RIPEN)
+ MulModifier(&finalModifier, UQ_4_12(0.25));
+ else
+ MulModifier(&finalModifier, UQ_4_12(0.5));
+ if (updateFlags)
+ gSpecialStatuses[battlerDef].berryReduced = TRUE;
+ }
+ break;
+ }
+
+ if (gBattleMoves[move].flags & FLAG_DMG_MINIMIZE && gStatuses3[battlerDef] & STATUS3_MINIMIZED)
+ MulModifier(&finalModifier, UQ_4_12(2.0));
+ if (gBattleMoves[move].flags & FLAG_DMG_UNDERGROUND && gStatuses3[battlerDef] & STATUS3_UNDERGROUND)
+ MulModifier(&finalModifier, UQ_4_12(2.0));
+ if (gBattleMoves[move].flags & FLAG_DMG_UNDERWATER && gStatuses3[battlerDef] & STATUS3_UNDERWATER)
+ MulModifier(&finalModifier, UQ_4_12(2.0));
+ if (gBattleMoves[move].flags & FLAG_DMG_2X_IN_AIR && gStatuses3[battlerDef] & STATUS3_ON_AIR)
+ MulModifier(&finalModifier, UQ_4_12(2.0));
+
+ dmg = ApplyModifier(finalModifier, dmg);
+ if (dmg == 0)
+ dmg = 1;
+
+ return dmg;
+}
+
+static s32 DoMoveDamageCalc(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower,
+ bool32 isCrit, bool32 randomFactor, bool32 updateFlags, u16 typeEffectivenessModifier)
+{
+ s32 dmg;
+
+ // Don't calculate damage if the move has no effect on target.
+ if (typeEffectivenessModifier == UQ_4_12(0))
+ return 0;
+
+ if (fixedBasePower)
+ gBattleMovePower = fixedBasePower;
+ else
+ gBattleMovePower = CalcMoveBasePowerAfterModifiers(move, battlerAtk, battlerDef, moveType, updateFlags);
+
+ // long dmg basic formula
+ dmg = ((gBattleMons[battlerAtk].level * 2) / 5) + 2;
+ dmg *= gBattleMovePower;
+ dmg *= CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags);
+ dmg /= CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags);
+ dmg = (dmg / 50) + 2;
+
+ // Calculate final modifiers.
+ dmg = CalcFinalDmg(dmg, move, battlerAtk, battlerDef, moveType, typeEffectivenessModifier, isCrit, updateFlags);
+
+ // Add a random factor.
+ if (randomFactor)
+ {
+ dmg *= 100 - (Random() % 16);
+ dmg /= 100;
+ }
+
+ if (dmg == 0)
+ dmg = 1;
+
+ return dmg;
+}
+
+s32 CalculateMoveDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags)
+{
+ return DoMoveDamageCalc(move, battlerAtk, battlerDef, moveType, fixedBasePower, isCrit, randomFactor,
+ updateFlags, CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, updateFlags));
+}
+
+// for AI - get move damage and effectiveness with one function call
+s32 CalculateMoveDamageAndEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, u16 *typeEffectivenessModifier)
+{
+ *typeEffectivenessModifier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE);
+ return DoMoveDamageCalc(move, battlerAtk, battlerDef, moveType, 0, FALSE, FALSE, FALSE, *typeEffectivenessModifier);
+}
+
+static void MulByTypeEffectiveness(u16 *modifier, u16 move, u8 moveType, u8 battlerDef, u8 defType, u8 battlerAtk, bool32 recordAbilities)
+{
+ u16 mod = GetTypeModifier(moveType, defType);
+
+ if (mod == UQ_4_12(0.0) && GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_RING_TARGET)
+ {
+ mod = UQ_4_12(1.0);
+ if (recordAbilities)
+ RecordItemEffectBattle(battlerDef, HOLD_EFFECT_RING_TARGET);
+ }
+ else if ((moveType == TYPE_FIGHTING || moveType == TYPE_NORMAL) && defType == TYPE_GHOST && gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT && mod == UQ_4_12(0.0))
+ {
+ mod = UQ_4_12(1.0);
+ }
+ else if ((moveType == TYPE_FIGHTING || moveType == TYPE_NORMAL) && defType == TYPE_GHOST && GetBattlerAbility(battlerAtk) == ABILITY_SCRAPPY && mod == UQ_4_12(0.0))
+ {
+ mod = UQ_4_12(1.0);
+ if (recordAbilities)
+ RecordAbilityBattle(battlerAtk, ABILITY_SCRAPPY);
+ }
+
+ if (moveType == TYPE_PSYCHIC && defType == TYPE_DARK && gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED && mod == UQ_4_12(0.0))
+ mod = UQ_4_12(1.0);
+ if (gBattleMoves[move].effect == EFFECT_FREEZE_DRY && defType == TYPE_WATER)
+ mod = UQ_4_12(2.0);
+ if (moveType == TYPE_GROUND && defType == TYPE_FLYING && IsBattlerGrounded(battlerDef) && mod == UQ_4_12(0.0))
+ mod = UQ_4_12(1.0);
+ if (moveType == TYPE_FIRE && gDisableStructs[battlerDef].tarShot)
+ mod = UQ_4_12(2.0);
+
+ // B_WEATHER_STRONG_WINDS weakens Super Effective moves against Flying-type Pokémon
+ if (gBattleWeather & B_WEATHER_STRONG_WINDS && WEATHER_HAS_EFFECT)
+ {
+ if (defType == TYPE_FLYING && mod >= UQ_4_12(2.0))
+ mod = UQ_4_12(1.0);
+ }
+
+ MulModifier(modifier, mod);
+}
+
+static void UpdateMoveResultFlags(u16 modifier)
+{
+ if (modifier == UQ_4_12(0.0))
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ gMoveResultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE);
+ }
+ else if (modifier == UQ_4_12(1.0))
+ {
+ gMoveResultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ }
+ else if (modifier > UQ_4_12(1.0))
+ {
+ gMoveResultFlags |= MOVE_RESULT_SUPER_EFFECTIVE;
+ gMoveResultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ }
+ else //if (modifier < UQ_4_12(1.0))
+ {
+ gMoveResultFlags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ gMoveResultFlags &= ~(MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ }
+}
+
+static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities, u16 modifier)
+{
+ u16 defAbility = GetBattlerAbility(battlerDef);
+
+ MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type1, battlerAtk, recordAbilities);
+ if (gBattleMons[battlerDef].type2 != gBattleMons[battlerDef].type1)
+ MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type2, battlerAtk, recordAbilities);
+ if (gBattleMons[battlerDef].type3 != TYPE_MYSTERY && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type2
+ && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1)
+ MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities);
+
+ if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING))
+ {
+ modifier = UQ_4_12(0.0);
+ if (recordAbilities && defAbility == ABILITY_LEVITATE)
+ {
+ gLastUsedAbility = ABILITY_LEVITATE;
+ gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ gLastLandedMoves[battlerDef] = 0;
+ gBattleCommunication[MISS_TYPE] = B_MSG_GROUND_MISS;
+ RecordAbilityBattle(battlerDef, ABILITY_LEVITATE);
+ }
+ }
+ else if (B_SHEER_COLD_IMMUNITY >= GEN_7 && move == MOVE_SHEER_COLD && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE))
+ {
+ modifier = UQ_4_12(0.0);
+ }
+ else if (B_GLARE_GHOST >= GEN_4 && move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST))
+ {
+ modifier = UQ_4_12(1.0);
+ }
+
+ // Thousand Arrows ignores type modifiers for flying mons
+ if (!IsBattlerGrounded(battlerDef) && (gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING)
+ && (gBattleMons[battlerDef].type1 == TYPE_FLYING || gBattleMons[battlerDef].type2 == TYPE_FLYING || gBattleMons[battlerDef].type3 == TYPE_FLYING))
+ {
+ modifier = UQ_4_12(1.0);
+ }
+
+ if (((defAbility == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0))
+ || (defAbility == ABILITY_TELEPATHY && battlerDef == BATTLE_PARTNER(battlerAtk)))
+ && gBattleMoves[move].power)
+ {
+ modifier = UQ_4_12(0.0);
+ if (recordAbilities)
+ {
+ gLastUsedAbility = gBattleMons[battlerDef].ability;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gLastLandedMoves[battlerDef] = 0;
+ gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_DMG;
+ RecordAbilityBattle(battlerDef, gBattleMons[battlerDef].ability);
+ }
+ }
+
+ return modifier;
+}
+
+u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities)
+{
+ u16 modifier = UQ_4_12(1.0);
+
+ if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY)
+ {
+ modifier = CalcTypeEffectivenessMultiplierInternal(move, moveType, battlerAtk, battlerDef, recordAbilities, modifier);
+ if (gBattleMoves[move].effect == EFFECT_TWO_TYPED_MOVE)
+ modifier = CalcTypeEffectivenessMultiplierInternal(move, gBattleMoves[move].argument, battlerAtk, battlerDef, recordAbilities, modifier);
+ }
+
+ if (recordAbilities)
+ UpdateMoveResultFlags(modifier);
+ return modifier;
+}
+
+u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef)
+{
+ u16 modifier = UQ_4_12(1.0);
+ u8 moveType = gBattleMoves[move].type;
+
+ if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY)
+ {
+ MulByTypeEffectiveness(&modifier, move, moveType, 0, gBaseStats[speciesDef].type1, 0, FALSE);
+ if (gBaseStats[speciesDef].type2 != gBaseStats[speciesDef].type1)
+ MulByTypeEffectiveness(&modifier, move, moveType, 0, gBaseStats[speciesDef].type2, 0, FALSE);
+
+ if (moveType == TYPE_GROUND && abilityDef == ABILITY_LEVITATE && !(gFieldStatuses & STATUS_FIELD_GRAVITY))
+ modifier = UQ_4_12(0.0);
+ if (abilityDef == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0) && gBattleMoves[move].power)
+ modifier = UQ_4_12(0.0);
+ }
+
+ UpdateMoveResultFlags(modifier);
+ return modifier;
+}
+
+u16 GetTypeModifier(u8 atkType, u8 defType)
+{
+ if (B_FLAG_INVERSE_BATTLE != 0 && FlagGet(B_FLAG_INVERSE_BATTLE))
+ return sInverseTypeEffectivenessTable[atkType][defType];
+ else
+ return sTypeEffectivenessTable[atkType][defType];
+}
+
+s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId)
+{
+ u8 type1 = gBattleMons[battlerId].type1;
+ u8 type2 = gBattleMons[battlerId].type2;
+ u32 maxHp = gBattleMons[battlerId].maxHP;
+ s32 dmg = 0;
+ u16 modifier = UQ_4_12(1.0);
+
+ MulModifier(&modifier, GetTypeModifier(hazardType, type1));
+ if (type2 != type1)
+ MulModifier(&modifier, GetTypeModifier(hazardType, type2));
+
+ switch (modifier)
+ {
+ case UQ_4_12(0.0):
+ dmg = 0;
+ break;
+ case UQ_4_12(0.25):
+ dmg = maxHp / 32;
+ if (dmg == 0)
+ dmg = 1;
+ break;
+ case UQ_4_12(0.5):
+ dmg = maxHp / 16;
+ if (dmg == 0)
+ dmg = 1;
+ break;
+ case UQ_4_12(1.0):
+ dmg = maxHp / 8;
+ if (dmg == 0)
+ dmg = 1;
+ break;
+ case UQ_4_12(2.0):
+ dmg = maxHp / 4;
+ if (dmg == 0)
+ dmg = 1;
+ break;
+ case UQ_4_12(4.0):
+ dmg = maxHp / 2;
+ if (dmg == 0)
+ dmg = 1;
+ break;
+ }
+
+ return dmg;
+}
+
+bool32 IsPartnerMonFromSameTrainer(u8 battlerId)
+{
+ if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
+ return FALSE;
+ else if (GetBattlerSide(battlerId) == B_SIDE_PLAYER && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
+ return FALSE;
+ else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+u16 GetMegaEvolutionSpecies(u16 preEvoSpecies, u16 heldItemId)
+{
+ u32 i;
+
+ for (i = 0; i < EVOS_PER_MON; i++)
+ {
+ if (gEvolutionTable[preEvoSpecies][i].method == EVO_MEGA_EVOLUTION
+ && gEvolutionTable[preEvoSpecies][i].param == heldItemId)
+ return gEvolutionTable[preEvoSpecies][i].targetSpecies;
+ }
+ return SPECIES_NONE;
+}
+
+u16 GetPrimalReversionSpecies(u16 preEvoSpecies, u16 heldItemId)
+{
+ u32 i;
+
+ for (i = 0; i < EVOS_PER_MON; i++)
+ {
+ if (gEvolutionTable[preEvoSpecies][i].method == EVO_PRIMAL_REVERSION
+ && gEvolutionTable[preEvoSpecies][i].param == heldItemId)
+ return gEvolutionTable[preEvoSpecies][i].targetSpecies;
+ }
+ return SPECIES_NONE;
+}
+
+u16 GetWishMegaEvolutionSpecies(u16 preEvoSpecies, u16 moveId1, u16 moveId2, u16 moveId3, u16 moveId4)
+{
+ u32 i, par;
+
+ for (i = 0; i < EVOS_PER_MON; i++)
+ {
+ if (gEvolutionTable[preEvoSpecies][i].method == EVO_MOVE_MEGA_EVOLUTION)
+ {
+ par = gEvolutionTable[preEvoSpecies][i].param;
+ if (par == moveId1 || par == moveId2 || par == moveId3 || par == moveId4)
+ return gEvolutionTable[preEvoSpecies][i].targetSpecies;
+ }
+ }
+ return SPECIES_NONE;
+}
+
+bool32 CanMegaEvolve(u8 battlerId)
+{
+ u32 itemId, holdEffect, species;
+ struct Pokemon *mon;
+ u8 battlerPosition = GetBattlerPosition(battlerId);
+ u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battlerId));
+ struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]))->mega);
+
+ // Check if Player has a Mega Ring
+ if ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT))
+ && !CheckBagHasItem(ITEM_MEGA_RING, 1))
+ return FALSE;
+
+ // Check if trainer already mega evolved a pokemon.
+ if (mega->alreadyEvolved[battlerPosition])
+ return FALSE;
+
+ // Cannot use z move and mega evolve on same turn
+ if (gBattleStruct->zmove.toBeUsed[battlerId])
+ return FALSE;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && IsPartnerMonFromSameTrainer(battlerId)
+ && (mega->alreadyEvolved[partnerPosition] || (mega->toEvolve & gBitTable[BATTLE_PARTNER(battlerId)])))
+ return FALSE;
+
+ // Check if mon is currently held by Sky Drop
+ if (gStatuses3[battlerId] & STATUS3_SKY_DROPPED)
+ return FALSE;
+
+ // Gets mon data.
+ if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
+ mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
+ else
+ mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
+
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ itemId = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ // Check if there is an entry in the evolution table for regular Mega Evolution.
+ if (GetMegaEvolutionSpecies(species, itemId) != SPECIES_NONE)
+ {
+ if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId])
+ holdEffect = gBattleStruct->debugHoldEffects[battlerId];
+ else if (itemId == ITEM_ENIGMA_BERRY_E_READER)
+ holdEffect = gEnigmaBerries[battlerId].holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(itemId);
+
+ // Can Mega Evolve via Mega Stone.
+ if (holdEffect == HOLD_EFFECT_MEGA_STONE)
+ {
+ gBattleStruct->mega.isWishMegaEvo = FALSE;
+ return TRUE;
+ }
+ }
+
+ // Check if there is an entry in the evolution table for Wish Mega Evolution.
+ if (GetWishMegaEvolutionSpecies(species, GetMonData(mon, MON_DATA_MOVE1), GetMonData(mon, MON_DATA_MOVE2), GetMonData(mon, MON_DATA_MOVE3), GetMonData(mon, MON_DATA_MOVE4)))
+ {
+ gBattleStruct->mega.isWishMegaEvo = TRUE;
+ return TRUE;
+ }
+
+ // No checks passed, the mon CAN'T mega evolve.
+ return FALSE;
+}
+
+void UndoMegaEvolution(u32 monId)
+{
+ u16 baseSpecies = GET_BASE_SPECIES_ID(GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES));
+
+ if (gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] & gBitTable[monId])
+ {
+ gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->mega.playerEvolvedSpecies);
+ CalculateMonStats(&gPlayerParty[monId]);
+ }
+ else if (gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] & gBitTable[monId])
+ {
+ gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]);
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &baseSpecies);
+ CalculateMonStats(&gPlayerParty[monId]);
+ }
+ // While not exactly a mega evolution, Zygarde follows the same rules.
+ else if (GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL) == SPECIES_ZYGARDE_COMPLETE)
+ {
+ SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[monId]);
+ gBattleStruct->changedSpecies[monId] = 0;
+ CalculateMonStats(&gPlayerParty[monId]);
+ }
+}
+
+void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut)
+{
+ u32 i, currSpecies;
+ struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
+ static const u16 species[][3] =
+ {
+ // Changed Form ID Default Form ID Should change on switch
+ {SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU, FALSE},
+ {SPECIES_GRENINJA_ASH, SPECIES_GRENINJA_BATTLE_BOND, FALSE},
+ {SPECIES_MELOETTA_PIROUETTE, SPECIES_MELOETTA, FALSE},
+ {SPECIES_AEGISLASH_BLADE, SPECIES_AEGISLASH, TRUE},
+ {SPECIES_DARMANITAN_ZEN_MODE, SPECIES_DARMANITAN, TRUE},
+ {SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, TRUE},
+ {SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, TRUE},
+ {SPECIES_MINIOR_METEOR_GREEN, SPECIES_MINIOR_CORE_GREEN, TRUE},
+ {SPECIES_MINIOR_METEOR_INDIGO, SPECIES_MINIOR_CORE_INDIGO, TRUE},
+ {SPECIES_MINIOR_METEOR_ORANGE, SPECIES_MINIOR_CORE_ORANGE, TRUE},
+ {SPECIES_MINIOR_METEOR_VIOLET, SPECIES_MINIOR_CORE_VIOLET, TRUE},
+ {SPECIES_MINIOR_METEOR_YELLOW, SPECIES_MINIOR_CORE_YELLOW, TRUE},
+ {SPECIES_WISHIWASHI_SCHOOL, SPECIES_WISHIWASHI, TRUE},
+ {SPECIES_CRAMORANT_GORGING, SPECIES_CRAMORANT, TRUE},
+ {SPECIES_CRAMORANT_GULPING, SPECIES_CRAMORANT, TRUE},
+ {SPECIES_MORPEKO_HANGRY, SPECIES_MORPEKO, TRUE},
+ {SPECIES_DARMANITAN_ZEN_MODE_GALARIAN, SPECIES_DARMANITAN_GALARIAN, TRUE},
+ };
+
+ currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL);
+ for (i = 0; i < ARRAY_COUNT(species); i++)
+ {
+ if (currSpecies == species[i][0] && (!isSwitchingOut || species[i][2] == TRUE))
+ {
+ SetMonData(&party[monId], MON_DATA_SPECIES, &species[i][1]);
+ CalculateMonStats(&party[monId]);
+ break;
+ }
+ }
+}
+
+bool32 DoBattlersShareType(u32 battler1, u32 battler2)
+{
+ s32 i;
+ u8 types1[3] = {gBattleMons[battler1].type1, gBattleMons[battler1].type2, gBattleMons[battler1].type3};
+ u8 types2[3] = {gBattleMons[battler2].type1, gBattleMons[battler2].type2, gBattleMons[battler2].type3};
+
+ if (types1[2] == TYPE_MYSTERY)
+ types1[2] = types1[0];
+ if (types2[2] == TYPE_MYSTERY)
+ types2[2] = types2[0];
+
+ for (i = 0; i < 3; i++)
+ {
+ if (types1[i] == types2[0] || types1[i] == types2[1] || types1[i] == types2[2])
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId)
+{
+ u16 species = gBattleMons[battlerId].species;
+ u16 holdEffect = ItemId_GetHoldEffect(itemId);
+
+ // Mail can be stolen now
+ if (itemId == ITEM_ENIGMA_BERRY_E_READER)
+ return FALSE;
+ // Primal Reversion inducing items cannot be lost if pokemon's base species can undergo primal reversion with it.
+ else if (holdEffect == HOLD_EFFECT_PRIMAL_ORB && (GetPrimalReversionSpecies(GET_BASE_SPECIES_ID(species), itemId) != SPECIES_NONE))
+ return FALSE;
+ // Mega stone cannot be lost if pokemon's base species can mega evolve with it.
+ else if (holdEffect == HOLD_EFFECT_MEGA_STONE && (GetMegaEvolutionSpecies(GET_BASE_SPECIES_ID(species), itemId) != SPECIES_NONE))
+ return FALSE;
+ else if (GET_BASE_SPECIES_ID(species) == SPECIES_GIRATINA && itemId == ITEM_GRISEOUS_ORB)
+ return FALSE;
+ else if (GET_BASE_SPECIES_ID(species) == SPECIES_GENESECT && holdEffect == HOLD_EFFECT_DRIVE)
+ return FALSE;
+ else if (GET_BASE_SPECIES_ID(species) == SPECIES_SILVALLY && holdEffect == HOLD_EFFECT_MEMORY)
+ return FALSE;
+ else if (GET_BASE_SPECIES_ID(species) == SPECIES_ARCEUS && holdEffect == HOLD_EFFECT_PLATE)
+ return FALSE;
+#ifdef HOLD_EFFECT_Z_CRYSTAL
+ else if (holdEffect == HOLD_EFFECT_Z_CRYSTAL)
+ return FALSE;
+#endif
+ else
+ return TRUE;
+}
+
+struct Pokemon *GetIllusionMonPtr(u32 battlerId)
+{
+ if (gBattleStruct->illusion[battlerId].broken)
+ return NULL;
+ if (!gBattleStruct->illusion[battlerId].set)
+ {
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ SetIllusionMon(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ else
+ SetIllusionMon(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ }
+ if (!gBattleStruct->illusion[battlerId].on)
+ return NULL;
+
+ return gBattleStruct->illusion[battlerId].mon;
+}
+
+void ClearIllusionMon(u32 battlerId)
+{
+ memset(&gBattleStruct->illusion[battlerId], 0, sizeof(gBattleStruct->illusion[battlerId]));
+}
+
+bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId)
+{
+ struct Pokemon *party, *partnerMon;
+ s32 i, id;
+
+ gBattleStruct->illusion[battlerId].set = 1;
+ if (GetMonAbility(mon) != ABILITY_ILLUSION)
+ return FALSE;
+
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ if (IsBattlerAlive(BATTLE_PARTNER(battlerId)))
+ partnerMon = &party[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]];
+ else
+ partnerMon = mon;
+
+ // Find last alive non-egg pokemon.
+ for (i = PARTY_SIZE - 1; i >= 0; i--)
+ {
+ id = i;
+ if (GetMonData(&party[id], MON_DATA_SANITY_HAS_SPECIES)
+ && GetMonData(&party[id], MON_DATA_HP)
+ && !GetMonData(&party[id], MON_DATA_IS_EGG)
+ && &party[id] != mon
+ && &party[id] != partnerMon)
+ {
+ gBattleStruct->illusion[battlerId].on = 1;
+ gBattleStruct->illusion[battlerId].broken = 0;
+ gBattleStruct->illusion[battlerId].partyId = id;
+ gBattleStruct->illusion[battlerId].mon = &party[id];
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId)
+{
+ if (B_BADGE_BOOST != GEN_3)
+ return FALSE;
+ else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER))
+ return FALSE;
+ else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ return FALSE;
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
+ return FALSE;
+ else if (FlagGet(badgeFlag))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+u8 GetBattleMoveSplit(u32 moveId)
+{
+ if (gBattleStruct != NULL && gBattleStruct->zmove.active && !IS_MOVE_STATUS(moveId))
+ return gBattleStruct->zmove.activeSplit;
+ if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky
+ return SPLIT_PHYSICAL;
+ else if (IS_MOVE_STATUS(moveId) || B_PHYSICAL_SPECIAL_SPLIT >= GEN_4)
+ return gBattleMoves[moveId].split;
+ else if (gBattleMoves[moveId].type < TYPE_MYSTERY)
+ return SPLIT_PHYSICAL;
+ else
+ return SPLIT_SPECIAL;
+}
+
+static bool32 TryRemoveScreens(u8 battler)
+{
+ bool32 removed = FALSE;
+ u8 battlerSide = GetBattlerSide(battler);
+ u8 enemySide = GetBattlerSide(BATTLE_OPPOSITE(battler));
+
+ // try to remove from battler's side
+ if (gSideStatuses[battlerSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL))
+ {
+ gSideStatuses[battlerSide] &= ~(SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL);
+ gSideTimers[battlerSide].reflectTimer = 0;
+ gSideTimers[battlerSide].lightscreenTimer = 0;
+ gSideTimers[battlerSide].auroraVeilTimer = 0;
+ removed = TRUE;
+ }
+
+ // try to remove from battler opponent's side
+ if (gSideStatuses[enemySide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL))
+ {
+ gSideStatuses[enemySide] &= ~(SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL);
+ gSideTimers[enemySide].reflectTimer = 0;
+ gSideTimers[enemySide].lightscreenTimer = 0;
+ gSideTimers[enemySide].auroraVeilTimer = 0;
+ removed = TRUE;
+ }
+
+ return removed;
+}
+
+static bool32 IsUnnerveAbilityOnOpposingSide(u8 battlerId)
+{
+ if (IsAbilityOnOpposingSide(battlerId, ABILITY_UNNERVE)
+ || IsAbilityOnOpposingSide(battlerId, ABILITY_AS_ONE_ICE_RIDER)
+ || IsAbilityOnOpposingSide(battlerId, ABILITY_AS_ONE_SHADOW_RIDER))
+ return TRUE;
+ return FALSE;
+}
+
+// Photon geyser & light that burns the sky
+u8 GetSplitBasedOnStats(u8 battlerId)
+{
+ u32 attack = gBattleMons[battlerId].attack;
+ u32 spAttack = gBattleMons[battlerId].spAttack;
+
+ attack = attack * gStatStageRatios[gBattleMons[battlerId].statStages[STAT_ATK]][0];
+ attack = attack / gStatStageRatios[gBattleMons[battlerId].statStages[STAT_ATK]][1];
+
+ spAttack = spAttack * gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPATK]][0];
+ spAttack = spAttack / gStatStageRatios[gBattleMons[battlerId].statStages[STAT_SPATK]][1];
+
+ if (spAttack >= attack)
+ return SPLIT_SPECIAL;
+ else
+ return SPLIT_PHYSICAL;
+}
+
+bool32 TestMoveFlags(u16 move, u32 flag)
+{
+ if (gBattleMoves[move].flags & flag)
+ return TRUE;
+ return FALSE;
+}
+
+struct Pokemon *GetBattlerPartyData(u8 battlerId)
+{
+ struct Pokemon *mon;
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
+ else
+ mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
+
+ return mon;
+}
+
+// Make sure the input bank is any bank on the specific mon's side
+bool32 CanFling(u8 battlerId)
+{
+ u16 item = gBattleMons[battlerId].item;
+ u16 itemEffect = ItemId_GetHoldEffect(item);
+
+ if (item == ITEM_NONE
+ #if B_KLUTZ_FLING_INTERACTION >= GEN_5
+ || GetBattlerAbility(battlerId) == ABILITY_KLUTZ
+ #endif
+ || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM
+ || gDisableStructs[battlerId].embargoTimer != 0
+ || ItemId_GetFlingPower(item) != 0
+ || !CanBattlerGetOrLoseItem(battlerId, item))
+ return FALSE;
+
+ return TRUE;
+}
+
+// Ability checks
+bool32 IsRolePlayBannedAbilityAtk(u16 ability)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sRolePlayBannedAttackerAbilities); i++)
+ {
+ if (ability == sRolePlayBannedAttackerAbilities[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 IsRolePlayBannedAbility(u16 ability)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sRolePlayBannedAbilities); i++)
+ {
+ if (ability == sRolePlayBannedAbilities[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 IsSkillSwapBannedAbility(u16 ability)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sSkillSwapBannedAbilities); i++)
+ {
+ if (ability == sSkillSwapBannedAbilities[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 IsWorrySeedBannedAbility(u16 ability)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sWorrySeedBannedAbilities); i++)
+ {
+ if (ability == sWorrySeedBannedAbilities[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 IsGastroAcidBannedAbility(u16 ability)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sGastroAcidBannedAbilities); i++)
+ {
+ if (ability == sGastroAcidBannedAbilities[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 IsEntrainmentBannedAbilityAttacker(u16 ability)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sEntrainmentBannedAttackerAbilities); i++)
+ {
+ if (ability == sEntrainmentBannedAttackerAbilities[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability)
+{
+ u32 i;
+ for (i = 0; i < ARRAY_COUNT(sEntrainmentTargetSimpleBeamBannedAbilities); i++)
+ {
+ if (ability == sEntrainmentTargetSimpleBeamBannedAbilities[i])
+ return TRUE;
+ }
+ return FALSE;
+}
+
+// Sort an array of battlers by speed
+// Useful for effects like pickpocket, eject button, red card, dancer
+void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast)
+{
+ int i, j, currSpeed, currBattler;
+ u16 speeds[4] = {0};
+
+ for (i = 0; i < gBattlersCount; i++)
+ speeds[i] = GetBattlerTotalSpeedStat(battlers[i]);
+
+ for (i = 1; i < gBattlersCount; i++)
+ {
+ currBattler = battlers[i];
+ currSpeed = speeds[i];
+ j = i - 1;
+
+ if (slowToFast)
+ {
+ while (j >= 0 && speeds[j] > currSpeed)
+ {
+ battlers[j + 1] = battlers[j];
+ speeds[j + 1] = speeds[j];
+ j = j - 1;
+ }
+ }
+ else
+ {
+ while (j >= 0 && speeds[j] < currSpeed)
+ {
+ battlers[j + 1] = battlers[j];
+ speeds[j + 1] = speeds[j];
+ j = j - 1;
+ }
+ }
+
+ battlers[j + 1] = currBattler;
+ speeds[j + 1] = currSpeed;
+ }
+}
+
+void TryRestoreStolenItems(void)
+{
+ u32 i;
+ u16 stolenItem = ITEM_NONE;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (gBattleStruct->itemStolen[i].stolen)
+ {
+ stolenItem = gBattleStruct->itemStolen[i].originalItem;
+ if (stolenItem != ITEM_NONE && ItemId_GetPocket(stolenItem) != POCKET_BERRIES)
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &stolenItem); // Restore stolen non-berry items
+ }
+ }
+}
+
+bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item)
+{
+ u8 stealerSide = GetBattlerSide(battlerStealing);
+
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
+ return FALSE;
+
+ // Check if the battler trying to steal should be able to
+ if (stealerSide == B_SIDE_OPPONENT
+ && !(gBattleTypeFlags &
+ (BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_FRONTIER
+ | BATTLE_TYPE_LINK
+ | BATTLE_TYPE_RECORDED_LINK
+ | BATTLE_TYPE_SECRET_BASE
+ #if B_TRAINERS_KNOCK_OFF_ITEMS
+ | BATTLE_TYPE_TRAINER
+ #endif
+ )))
+ {
+ return FALSE;
+ }
+ else if (!(gBattleTypeFlags &
+ (BATTLE_TYPE_EREADER_TRAINER
+ | BATTLE_TYPE_FRONTIER
+ | BATTLE_TYPE_LINK
+ | BATTLE_TYPE_RECORDED_LINK
+ | BATTLE_TYPE_SECRET_BASE))
+ && (gWishFutureKnock.knockedOffMons[stealerSide] & gBitTable[gBattlerPartyIndexes[battlerStealing]]))
+ {
+ return FALSE;
+ }
+
+ if (!CanBattlerGetOrLoseItem(battlerItem, item) // Battler with item cannot have it stolen
+ ||!CanBattlerGetOrLoseItem(battlerStealing, item)) // Stealer cannot take the item
+ return FALSE;
+
+ return TRUE;
+}
+
+void TrySaveExchangedItem(u8 battlerId, u16 stolenItem)
+{
+ // Because BtlController_EmitSetMonData does SetMonData, we need to save the stolen item only if it matches the battler's original
+ // So, if the player steals an item during battle and has it stolen from it, it will not end the battle with it (naturally)
+ #if B_TRAINERS_KNOCK_OFF_ITEMS == TRUE
+ // If regular trainer battle and mon's original item matches what is being stolen, save it to be restored at end of battle
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER
+ && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
+ && GetBattlerSide(battlerId) == B_SIDE_PLAYER
+ && stolenItem == gBattleStruct->itemStolen[gBattlerPartyIndexes[battlerId]].originalItem)
+ gBattleStruct->itemStolen[gBattlerPartyIndexes[battlerId]].stolen = TRUE;
+ #endif
+}
+
+bool32 IsBattlerAffectedByHazards(u8 battlerId, bool32 toxicSpikes)
+{
+ bool32 ret = TRUE;
+ u32 holdEffect = GetBattlerHoldEffect(gActiveBattler, TRUE);
+ if (toxicSpikes && holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS && !IS_BATTLER_OF_TYPE(battlerId, TYPE_POISON))
+ {
+ ret = FALSE;
+ RecordItemEffectBattle(battlerId, holdEffect);
+ }
+ else if (holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS)
+ {
+ ret = FALSE;
+ RecordItemEffectBattle(battlerId, holdEffect);
+ }
+ return ret;
+}
+
+bool32 TestSheerForceFlag(u8 battler, u16 move)
+{
+ if (GetBattlerAbility(battler) == ABILITY_SHEER_FORCE && gBattleMoves[move].flags & FLAG_SHEER_FORCE_BOOST)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+// This function is the body of "jumpifstat", but can be used dynamically in a function
+bool32 CompareStat(u8 battlerId, u8 statId, u8 cmpTo, u8 cmpKind)
+{
+ bool8 ret = FALSE;
+ u8 statValue = gBattleMons[battlerId].statStages[statId];
+
+ // Because this command is used as a way of checking if a stat can be lowered/raised,
+ // we need to do some modification at run-time.
+ if (GetBattlerAbility(battlerId) == ABILITY_CONTRARY)
+ {
+ if (cmpKind == CMP_GREATER_THAN)
+ cmpKind = CMP_LESS_THAN;
+ else if (cmpKind == CMP_LESS_THAN)
+ cmpKind = CMP_GREATER_THAN;
+
+ if (cmpTo == MIN_STAT_STAGE)
+ cmpTo = MAX_STAT_STAGE;
+ else if (cmpTo == MAX_STAT_STAGE)
+ cmpTo = MIN_STAT_STAGE;
+ }
+
+ switch (cmpKind)
+ {
+ case CMP_EQUAL:
+ if (statValue == cmpTo)
+ ret = TRUE;
+ break;
+ case CMP_NOT_EQUAL:
+ if (statValue != cmpTo)
+ ret = TRUE;
+ break;
+ case CMP_GREATER_THAN:
+ if (statValue > cmpTo)
+ ret = TRUE;
+ break;
+ case CMP_LESS_THAN:
+ if (statValue < cmpTo)
+ ret = TRUE;
+ break;
+ case CMP_COMMON_BITS:
+ if (statValue & cmpTo)
+ ret = TRUE;
+ break;
+ case CMP_NO_COMMON_BITS:
+ if (!(statValue & cmpTo))
+ ret = TRUE;
+ break;
+ }
+
+ return ret;
+}
+
+void BufferStatChange(u8 battlerId, u8 statId, u8 stringId)
+{
+ bool8 hasContrary = (GetBattlerAbility(battlerId) == ABILITY_CONTRARY);
+
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, statId);
+ if (stringId == STRINGID_STATFELL)
+ {
+ if (hasContrary)
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE)
+ else
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATFELL)
+ }
+ else if (stringId == STRINGID_STATROSE)
+ {
+ if (hasContrary)
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATFELL)
+ else
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE)
+ }
+ else
+ {
+ PREPARE_STRING_BUFFER(gBattleTextBuff2, stringId)
+ }
+}
+
+bool32 TryRoomService(u8 battlerId)
+{
+ if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && CompareStat(battlerId, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN))
+ {
+ BufferStatChange(battlerId, STAT_SPEED, STRINGID_STATFELL);
+ gEffectBattler = gBattleScripting.battler = battlerId;
+ SET_STATCHANGER(STAT_SPEED, 1, TRUE);
+ gBattleScripting.animArg1 = 14 + STAT_SPEED;
+ gBattleScripting.animArg2 = 0;
+ gLastUsedItem = gBattleMons[battlerId].item;
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void DoBurmyFormChange(u32 monId)
+{
+ u16 newSpecies, currSpecies;
+ struct Pokemon *party = gPlayerParty;
+
+ currSpecies = GetMonData(&party[monId], MON_DATA_SPECIES, NULL);
+
+ if ((GET_BASE_SPECIES_ID(currSpecies) == SPECIES_BURMY)
+ && (gBattleStruct->appearedInBattle & gBitTable[monId]) // Burmy appeared in battle
+ && GetMonData(&party[monId], MON_DATA_HP, NULL) != 0) // Burmy isn't fainted
+ {
+ switch (gBattleTerrain)
+ {
+ case BATTLE_TERRAIN_GRASS:
+ case BATTLE_TERRAIN_LONG_GRASS:
+ case BATTLE_TERRAIN_POND:
+ case BATTLE_TERRAIN_MOUNTAIN:
+ case BATTLE_TERRAIN_PLAIN:
+ newSpecies = SPECIES_BURMY;
+ break;
+ case BATTLE_TERRAIN_CAVE:
+ case BATTLE_TERRAIN_SAND:
+ newSpecies = SPECIES_BURMY_SANDY_CLOAK;
+ break;
+ case BATTLE_TERRAIN_BUILDING:
+ newSpecies = SPECIES_BURMY_TRASH_CLOAK;
+ break;
+ default: // Don't change form if last battle was water-related
+ newSpecies = SPECIES_NONE;
+ break;
+ }
+
+ if (newSpecies != SPECIES_NONE)
+ {
+ SetMonData(&party[monId], MON_DATA_SPECIES, &newSpecies);
+ CalculateMonStats(&party[monId]);
+ }
+ }
+}
+
+bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u8 battlerDef, bool32 checkTarget)
+{
+ #if B_PRANKSTER_DARK_TYPES >= GEN_7
+ if (!gProtectStructs[battlerPrankster].pranksterElevated)
+ return FALSE;
+ if (GetBattlerSide(battlerPrankster) == GetBattlerSide(battlerDef))
+ return FALSE;
+ if (checkTarget && (GetBattlerMoveTargetType(battlerPrankster, move) & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_DEPENDS)))
+ return FALSE;
+ if (!IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK))
+ return FALSE;
+ if (gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)
+ return FALSE;
+
+ return TRUE;
+ #endif
+ return FALSE;
+}
+
+u16 GetUsedHeldItem(u8 battler)
+{
+ return gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)];
+}
+
+bool32 IsBattlerWeatherAffected(u8 battlerId, u32 weatherFlags)
+{
+ if (gBattleWeather & weatherFlags && WEATHER_HAS_EFFECT)
+ {
+ // given weather is active -> check if its sun, rain against utility umbrella ( since only 1 weather can be active at once)
+ if (gBattleWeather & (B_WEATHER_SUN | B_WEATHER_RAIN) && GetBattlerHoldEffect(battlerId, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA)
+ return FALSE; // utility umbrella blocks sun, rain effects
+
+ return TRUE;
+ }
+ return FALSE;
+}
+
+// Gets move target before redirection effects etc. are applied
+// Possible return values are defined in battle.h following MOVE_TARGET_SELECTED
+u32 GetBattlerMoveTargetType(u8 battlerId, u16 move)
+{
+ u32 target;
+
+ if (gBattleMoves[move].effect == EFFECT_EXPANDING_FORCE
+ && IsBattlerTerrainAffected(battlerId, STATUS_FIELD_PSYCHIC_TERRAIN))
+ return MOVE_TARGET_BOTH;
+ else
+ return gBattleMoves[move].target;
+}
+
+bool32 CanTargetBattler(u8 battlerAtk, u8 battlerDef, u16 move)
+{
+ if (gBattleMoves[move].effect == EFFECT_HIT_ENEMY_HEAL_ALLY
+ && GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef)
+ && gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK)
+ return FALSE; // Pokémon affected by Heal Block cannot target allies with Pollen Puff
+ return TRUE;
+}
diff --git a/src/battle_util2.c b/src/battle_util2.c
index 767e314927..7bc1459d89 100644
--- a/src/battle_util2.c
+++ b/src/battle_util2.c
@@ -14,8 +14,6 @@
void AllocateBattleResources(void)
{
- gBattleResources = gBattleResources; // something dumb needed to match
-
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
InitTrainerHillBattleStruct();
@@ -28,8 +26,8 @@ void AllocateBattleResources(void)
gBattleResources->battleCallbackStack = AllocZeroed(sizeof(*gBattleResources->battleCallbackStack));
gBattleResources->beforeLvlUp = AllocZeroed(sizeof(*gBattleResources->beforeLvlUp));
gBattleResources->ai = AllocZeroed(sizeof(*gBattleResources->ai));
+ gBattleResources->aiData = AllocZeroed(sizeof(*gBattleResources->aiData));
gBattleResources->battleHistory = AllocZeroed(sizeof(*gBattleResources->battleHistory));
- gBattleResources->AI_ScriptsStack = AllocZeroed(sizeof(*gBattleResources->AI_ScriptsStack));
gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
@@ -49,6 +47,7 @@ void FreeBattleResources(void)
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
FreeTrainerHillBattleStruct();
+ gFieldStatuses = 0;
if (gBattleResources != NULL)
{
FREE_AND_SET_NULL(gBattleStruct);
@@ -59,8 +58,8 @@ void FreeBattleResources(void)
FREE_AND_SET_NULL(gBattleResources->battleCallbackStack);
FREE_AND_SET_NULL(gBattleResources->beforeLvlUp);
FREE_AND_SET_NULL(gBattleResources->ai);
+ FREE_AND_SET_NULL(gBattleResources->aiData);
FREE_AND_SET_NULL(gBattleResources->battleHistory);
- FREE_AND_SET_NULL(gBattleResources->AI_ScriptsStack);
FREE_AND_SET_NULL(gBattleResources);
FREE_AND_SET_NULL(gLinkBattleSendBuffer);
@@ -109,12 +108,12 @@ void SwitchPartyOrderInGameMulti(u8 battlerId, u8 arg1)
{
s32 i;
for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
- gBattlePartyCurrentOrder[i] = *(0 * 3 + i + (u8*)(gBattleStruct->battlerPartyOrders));
+ gBattlePartyCurrentOrder[i] = *(0 * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders));
SwitchPartyMonSlots(GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battlerId]), GetPartyIdFromBattlePartyId(arg1));
for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
- *(0 * 3 + i + (u8*)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
+ *(0 * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i];
}
}
@@ -145,7 +144,7 @@ u32 BattlePalace_TryEscapeStatus(u8 battlerId)
{
u32 toSub;
- if (gBattleMons[battlerId].ability == ABILITY_EARLY_BIRD)
+ if (GetBattlerAbility(battlerId) == ABILITY_EARLY_BIRD)
toSub = 2;
else
toSub = 1;
diff --git a/src/battle_z_move.c b/src/battle_z_move.c
new file mode 100644
index 0000000000..efa1e6e18c
--- /dev/null
+++ b/src/battle_z_move.c
@@ -0,0 +1,679 @@
+#include "global.h"
+#include "malloc.h"
+#include "battle.h"
+#include "pokemon.h"
+#include "battle_ai_main.h"
+#include "battle_ai_util.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_message.h"
+#include "battle_z_move.h"
+#include "battle_scripts.h"
+#include "graphics.h"
+#include "sprite.h"
+#include "window.h"
+#include "string_util.h"
+#include "text.h"
+#include "item.h"
+#include "strings.h"
+#include "sound.h"
+#include "constants/songs.h"
+#include "decompress.h"
+#include "task.h"
+#include "util.h"
+#include "gpu_regs.h"
+#include "battle_message.h"
+#include "pokedex.h"
+#include "palette.h"
+#include "international_string_util.h"
+#include "safari_zone.h"
+#include "battle_anim.h"
+#include "constants/battle_anim.h"
+#include "constants/rgb.h"
+#include "battle_debug.h"
+#include "constants/battle_config.h"
+#include "data.h"
+#include "pokemon_summary_screen.h"
+#include "constants/songs.h"
+#include "constants/items.h"
+#include "constants/species.h"
+#include "constants/hold_effects.h"
+#include "constants/battle_string_ids.h"
+#include "constants/battle_move_effects.h"
+#include "constants/abilities.h"
+#include "constants/moves.h"
+
+#define STAT_STAGE(battler, stat) (gBattleMons[battler].statStages[stat - 1])
+
+// Function Declarations
+static void SpriteCB_ZMoveTrigger(struct Sprite *sprite);
+static u16 GetSignatureZMove(u16 move, u16 species, u16 item);
+static u16 GetTypeBasedZMove(u16 move, u8 battler);
+static void ZMoveSelectionDisplayPpNumber(void);
+static void ZMoveSelectionDisplayPower(u16 move, u16 zMove);
+static void ShowZMoveTriggerSprite(void);
+static bool32 AreStatsMaxed(u8 battlerId, u8 n);
+static u8 GetZMoveScore(u8 battlerAtk, u8 battlerDef, u16 baseMove, u16 zMove);
+
+// Const Data
+static const struct SignatureZMove sSignatureZMoves[] =
+{
+// #ifdef NEW_POKEMON
+ {SPECIES_PIKACHU_COSPLAY, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA},
+ {SPECIES_PIKACHU_ROCK_STAR, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA},
+ {SPECIES_PIKACHU_BELLE, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA},
+ {SPECIES_PIKACHU_POP_STAR, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA},
+ {SPECIES_PIKACHU_PH_D, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA},
+ {SPECIES_PIKACHU_LIBRE, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA},
+
+ {SPECIES_RAICHU_ALOLAN, ITEM_ALORAICHIUM_Z, MOVE_THUNDERBOLT, MOVE_STOKED_SPARKSURFER},
+ {SPECIES_DECIDUEYE, ITEM_DECIDIUM_Z, MOVE_SPIRIT_SHACKLE, MOVE_SINISTER_ARROW_RAID},
+ {SPECIES_INCINEROAR, ITEM_INCINIUM_Z, MOVE_DARKEST_LARIAT, MOVE_MALICIOUS_MOONSAULT},
+ {SPECIES_KOMMO_O, ITEM_KOMMONIUM_Z, MOVE_CLANGING_SCALES, MOVE_CLANGOROUS_SOULBLAZE},
+ {SPECIES_LUNALA, ITEM_LUNALIUM_Z, MOVE_MOONGEIST_BEAM, MOVE_MENACING_MOONRAZE_MAELSTROM},
+ {SPECIES_NECROZMA_DAWN_WINGS, ITEM_LUNALIUM_Z, MOVE_MOONGEIST_BEAM, MOVE_MENACING_MOONRAZE_MAELSTROM},
+ {SPECIES_LYCANROC, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS},
+ {SPECIES_LYCANROC_MIDNIGHT, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS},
+
+ {SPECIES_LYCANROC_DUSK, ITEM_LYCANIUM_Z, MOVE_STONE_EDGE, MOVE_SPLINTERED_STORMSHARDS},
+ {SPECIES_MARSHADOW, ITEM_MARSHADIUM_Z, MOVE_SPECTRAL_THIEF, MOVE_SOUL_STEALING_7_STAR_STRIKE},
+ {SPECIES_MIMIKYU, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER},
+ {SPECIES_MIMIKYU_BUSTED, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER},
+ {SPECIES_PIKACHU_ORIGINAL_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT},
+ {SPECIES_PIKACHU_HOENN_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT},
+ {SPECIES_PIKACHU_SINNOH_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT},
+ {SPECIES_PIKACHU_UNOVA_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT},
+ {SPECIES_PIKACHU_KALOS_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT},
+ {SPECIES_PIKACHU_ALOLA_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT},
+ {SPECIES_PIKACHU_PARTNER_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT},
+ {SPECIES_PIKACHU_WORLD_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT},
+ {SPECIES_PRIMARINA, ITEM_PRIMARIUM_Z, MOVE_SPARKLING_ARIA, MOVE_OCEANIC_OPERETTA},
+ {SPECIES_SOLGALEO, ITEM_SOLGANIUM_Z, MOVE_SUNSTEEL_STRIKE, MOVE_SEARING_SUNRAZE_SMASH},
+ {SPECIES_NECROZMA_DUSK_MANE, ITEM_SOLGANIUM_Z, MOVE_SUNSTEEL_STRIKE, MOVE_SEARING_SUNRAZE_SMASH},
+ {SPECIES_TAPU_KOKO, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA},
+ {SPECIES_TAPU_BULU, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA},
+ {SPECIES_TAPU_LELE, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA},
+ {SPECIES_TAPU_FINI, ITEM_TAPUNIUM_Z, MOVE_NATURES_MADNESS, MOVE_GUARDIAN_OF_ALOLA},
+ {SPECIES_NECROZMA_ULTRA, ITEM_ULTRANECROZIUM_Z, MOVE_PHOTON_GEYSER, MOVE_LIGHT_THAT_BURNS_THE_SKY},
+// #endif
+ {SPECIES_MEW, ITEM_MEWNIUM_Z, MOVE_PSYCHIC, MOVE_GENESIS_SUPERNOVA},
+ {SPECIES_PIKACHU, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA},
+ {SPECIES_EEVEE, ITEM_EEVIUM_Z, MOVE_LAST_RESORT, MOVE_EXTREME_EVOBOOST},
+ {SPECIES_SNORLAX, ITEM_SNORLIUM_Z, MOVE_GIGA_IMPACT, MOVE_PULVERIZING_PANCAKE},
+};
+
+static const u8 sText_ResetStats[] = _("Reset Lowered Stats");
+static const u8 sText_StatsPlus[] = _("+ All Stats");
+static const u8 sText_StatsPlus2[] = _("++ All Stats");
+static const u8 sText_CritHitsPlus[] = _("+ Critical Hit Chance");
+static const u8 sText_FollowMe[] = _("Follow Me");
+static const u8 sText_RecoverHP[] = _("Recover HP");
+static const u8 sText_HealAllyHP[] = _("Heal Replacement HP");
+static const u8 sText_PowerColon[] = _("Power: ");
+
+static const u32 sZMoveTriggerGfx[] = INCBIN_U32("graphics/battle_interface/z_move_trigger.4bpp.lz");
+static const u16 sZMoveTriggerPal[] = INCBIN_U16("graphics/battle_interface/z_move_trigger.gbapal");
+
+static const struct CompressedSpriteSheet sSpriteSheet_ZMoveTrigger = {
+ sZMoveTriggerGfx, (32 * 32) / 2, TAG_ZMOVE_TRIGGER_TILE
+};
+
+static const struct SpritePalette sSpritePalette_ZMoveTrigger = {
+ sZMoveTriggerPal, TAG_ZMOVE_TRIGGER_PAL
+};
+
+static const struct OamData sOamData_ZMoveTrigger =
+{
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .priority = 1,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_ZMoveTrigger =
+{
+ .tileTag = TAG_ZMOVE_TRIGGER_TILE,
+ .paletteTag = TAG_ZMOVE_TRIGGER_PAL,
+ .oam = &sOamData_ZMoveTrigger,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_ZMoveTrigger
+};
+
+// Functions
+bool8 IsZMove(u16 move)
+{
+ return move >= FIRST_Z_MOVE && move <= LAST_Z_MOVE;
+}
+
+void QueueZMove(u8 battlerId, u16 baseMove)
+{
+ gBattleStruct->zmove.toBeUsed[battlerId] = gBattleStruct->zmove.chosenZMove;
+ gBattleStruct->zmove.baseMoves[battlerId] = baseMove;
+ if (gBattleStruct->zmove.chosenZMove == MOVE_LIGHT_THAT_BURNS_THE_SKY)
+ gBattleStruct->zmove.splits[battlerId] = GetSplitBasedOnStats(battlerId);
+ else
+ gBattleStruct->zmove.splits[battlerId] = gBattleMoves[baseMove].split;
+}
+
+bool32 IsViableZMove(u8 battlerId, u16 move)
+{
+ struct Pokemon *mon;
+ struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]))->mega);
+ u8 battlerPosition = GetBattlerPosition(battlerId);
+ u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battlerId));
+ u32 item;
+ u16 holdEffect;
+ u16 species;
+
+ if (gBattleStruct->zmove.used[battlerId])
+ return FALSE;
+
+ species = gBattleMons[battlerId].species;
+ item = gBattleMons[battlerId].item;
+ if (gBattleTypeFlags & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FRONTIER))
+ return FALSE;
+
+ #ifdef ITEM_Z_RING
+ if ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)) && !CheckBagHasItem(ITEM_Z_RING, 1))
+ return FALSE;
+ #endif
+
+ if (mega->alreadyEvolved[battlerPosition])
+ return FALSE; // Trainer has mega evolved
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ if (IsPartnerMonFromSameTrainer(battlerId) && (mega->alreadyEvolved[partnerPosition] || (mega->toEvolve & gBitTable[BATTLE_PARTNER(battlerId)])))
+ return FALSE; // Partner has mega evolved or is about to mega evolve
+ }
+
+ if (B_ENABLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId])
+ holdEffect = gBattleStruct->debugHoldEffects[battlerId];
+ else if (item == ITEM_ENIGMA_BERRY)
+ return FALSE; // HoldEffect = gEnigmaBerries[battlerId].holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(item);
+
+ #ifdef ITEM_ULTRANECROZIUM_Z
+ if (holdEffect == HOLD_EFFECT_Z_CRYSTAL || item == ITEM_ULTRANECROZIUM_Z)
+ #else
+ if (holdEffect == HOLD_EFFECT_Z_CRYSTAL)
+ #endif
+ {
+ u16 zMove = GetSignatureZMove(move, gBattleMons[battlerId].species, item);
+ if (zMove != MOVE_NONE)
+ {
+ gBattleStruct->zmove.chosenZMove = zMove; // Signature z move exists
+ return TRUE;
+ }
+
+ if (move != MOVE_NONE && zMove != MOVE_Z_STATUS && gBattleMoves[move].type == ItemId_GetSecondaryId(item))
+ {
+ if (IS_MOVE_STATUS(move))
+ gBattleStruct->zmove.chosenZMove = move;
+ else
+ gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, battlerId);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+void GetUsableZMoves(u8 battlerId, u16 *moves)
+{
+ u32 i;
+ gBattleStruct->zmove.possibleZMoves[battlerId] = 0;
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE && IsViableZMove(battlerId, moves[i]))
+ gBattleStruct->zmove.possibleZMoves[battlerId] |= (1 << i);
+ }
+}
+
+bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex)
+{
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsPartnerMonFromSameTrainer(battlerId) && gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(battlerId)] != MOVE_NONE)
+ return FALSE; // Player's other mon has a z move queued up already
+ if (gBattleStruct->zmove.possibleZMoves[battlerId] & (1 << moveIndex))
+ return TRUE;
+ return FALSE;
+}
+
+bool32 TryChangeZIndicator(u8 battlerId, u8 moveIndex)
+{
+ bool32 viableZMove = IsZMoveUsable(battlerId, moveIndex);
+
+ if (gBattleStruct->zmove.viable && !viableZMove)
+ HideZMoveTriggerSprite(); // Was a viable z move, now is not -> slide out
+ else if (!gBattleStruct->zmove.viable && viableZMove)
+ ShowZMoveTriggerSprite(); // Was not a viable z move, now is -> slide back in
+}
+
+#define SINGLES_Z_TRIGGER_POS_X_OPTIMAL (29)
+#define SINGLES_Z_TRIGGER_POS_X_PRIORITY (29)
+#define SINGLES_Z_TRIGGER_POS_X_SLIDE (15)
+#define SINGLES_Z_TRIGGER_POS_Y_DIFF (-10)
+
+#define DOUBLES_Z_TRIGGER_POS_X_OPTIMAL SINGLES_Z_TRIGGER_POS_X_OPTIMAL
+#define DOUBLES_Z_TRIGGER_POS_X_PRIORITY SINGLES_Z_TRIGGER_POS_X_PRIORITY
+#define DOUBLES_Z_TRIGGER_POS_X_SLIDE SINGLES_Z_TRIGGER_POS_X_SLIDE
+#define DOUBLES_Z_TRIGGER_POS_Y_DIFF (-4)
+
+#define tBattler data[0]
+#define tHide data[1]
+
+void CreateZMoveTriggerSprite(u8 battlerId, bool8 viable)
+{
+ s16 x, y;
+
+ LoadSpritePalette(&sSpritePalette_ZMoveTrigger);
+ if (GetSpriteTileStartByTag(TAG_ZMOVE_TRIGGER_TILE) == 0xFFFF)
+ LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_ZMoveTrigger);
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ x = gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_Z_TRIGGER_POS_X_SLIDE;
+ y = gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_Z_TRIGGER_POS_Y_DIFF;
+ }
+ else
+ {
+ x = gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_Z_TRIGGER_POS_X_SLIDE;
+ y = gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_Z_TRIGGER_POS_Y_DIFF, 0;
+ }
+
+ if (gBattleStruct->zmove.triggerSpriteId == 0xFF)
+ gBattleStruct->zmove.triggerSpriteId = CreateSprite(&sSpriteTemplate_ZMoveTrigger, x, y, 0);
+
+ gSprites[gBattleStruct->zmove.triggerSpriteId].tBattler = battlerId;
+ gSprites[gBattleStruct->zmove.triggerSpriteId].tHide = (viable == TRUE) ? FALSE : TRUE;
+}
+
+static void SpriteCB_ZMoveTrigger(struct Sprite *sprite)
+{
+ s32 xSlide, xPriority, xOptimal;
+ s32 yDiff;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ xSlide = DOUBLES_Z_TRIGGER_POS_X_SLIDE;
+ xPriority = DOUBLES_Z_TRIGGER_POS_X_PRIORITY;
+ xOptimal = DOUBLES_Z_TRIGGER_POS_X_OPTIMAL;
+ yDiff = DOUBLES_Z_TRIGGER_POS_Y_DIFF;
+ }
+ else
+ {
+ xSlide = SINGLES_Z_TRIGGER_POS_X_SLIDE;
+ xPriority = SINGLES_Z_TRIGGER_POS_X_PRIORITY;
+ xOptimal = SINGLES_Z_TRIGGER_POS_X_OPTIMAL;
+ yDiff = SINGLES_Z_TRIGGER_POS_Y_DIFF;
+ }
+
+ if (sprite->tHide)
+ {
+ if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
+ sprite->x++;
+
+ if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
+ sprite->oam.priority = 2;
+ else
+ sprite->oam.priority = 1;
+
+ sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
+ sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
+ if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
+ DestroyZMoveTriggerSprite();
+ }
+ else
+ {
+ if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal)
+ {
+ sprite->x--;
+ sprite->oam.priority = 2;
+ }
+ else
+ {
+ sprite->oam.priority = 1;
+ }
+ sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
+ sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
+ }
+}
+
+bool32 IsZMoveTriggerSpriteActive(void)
+{
+ if (GetSpriteTileStartByTag(TAG_ZMOVE_TRIGGER_TILE) == 0xFFFF)
+ return FALSE;
+ else if (IndexOfSpritePaletteTag(TAG_ZMOVE_TRIGGER_PAL) != 0xFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void HideZMoveTriggerSprite(void)
+{
+ struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId];
+ sprite->tHide = TRUE;
+ gBattleStruct->zmove.viable = FALSE;
+}
+
+static void ShowZMoveTriggerSprite(void)
+{
+ struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId];
+ gBattleStruct->zmove.viable = TRUE;
+ CreateZMoveTriggerSprite(sprite->tBattler, TRUE);
+}
+
+void DestroyZMoveTriggerSprite(void)
+{
+ FreeSpritePaletteByTag(TAG_ZMOVE_TRIGGER_PAL);
+ FreeSpriteTilesByTag(TAG_ZMOVE_TRIGGER_TILE);
+ if (gBattleStruct->zmove.triggerSpriteId != 0xFF)
+ DestroySprite(&gSprites[gBattleStruct->zmove.triggerSpriteId]);
+
+ gBattleStruct->zmove.triggerSpriteId = 0xFF;
+}
+
+static u16 GetSignatureZMove(u16 move, u16 species, u16 item)
+{
+ u32 i;
+
+ // Check signature z move
+ for (i = 0; i < ARRAY_COUNT(sSignatureZMoves); ++i)
+ {
+ if (sSignatureZMoves[i].item == item && sSignatureZMoves[i].species == species && sSignatureZMoves[i].move == move)
+ return sSignatureZMoves[i].zmove;
+ }
+
+ return MOVE_NONE;
+}
+
+static u16 GetTypeBasedZMove(u16 move, u8 battler)
+{
+ u8 moveType = gBattleMoves[move].type;
+
+ // Get z move from type
+ if (moveType < TYPE_FIRE)
+ return MOVE_BREAKNECK_BLITZ + moveType;
+ else if (moveType >= TYPE_FAIRY)
+ return MOVE_TWINKLE_TACKLE + (moveType - TYPE_FAIRY);
+ else
+ return MOVE_BREAKNECK_BLITZ + (moveType - 1);
+}
+
+bool32 MoveSelectionDisplayZMove(u16 zmove)
+{
+ u32 i;
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
+ u16 move = moveInfo->moves[gMoveSelectionCursor[gActiveBattler]];
+
+ PlaySE(SE_SELECT);
+ gBattleStruct->zmove.viewing = TRUE;
+ if (zmove != MOVE_NONE)
+ {
+ // Clear move slots
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ MoveSelectionDestroyCursorAt(i);
+ StringCopy(gDisplayedStringBattle, gText_EmptyString2);
+ BattlePutTextOnWindow(gDisplayedStringBattle, i + 3);
+ }
+
+ if (IS_MOVE_STATUS(move))
+ {
+ u8 zEffect = gBattleMoves[move].zMoveEffect;
+
+ gDisplayedStringBattle[0] = EOS;
+
+ if (zEffect == Z_EFFECT_CURSE)
+ {
+ if (moveInfo->monType1 == TYPE_GHOST || moveInfo->monType2 == TYPE_GHOST || moveInfo->monType3 == TYPE_GHOST)
+ zEffect = Z_EFFECT_RECOVER_HP;
+ else
+ zEffect = Z_EFFECT_ATK_UP_1;
+ }
+
+ switch (zEffect)
+ {
+ case Z_EFFECT_RESET_STATS:
+ StringCopy(gDisplayedStringBattle, sText_ResetStats);
+ break;
+ case Z_EFFECT_ALL_STATS_UP_1:
+ StringCopy(gDisplayedStringBattle, sText_StatsPlus);
+ break;
+ case Z_EFFECT_BOOST_CRITS:
+ StringCopy(gDisplayedStringBattle, sText_CritHitsPlus);
+ break;
+ case Z_EFFECT_FOLLOW_ME:
+ StringCopy(gDisplayedStringBattle, sText_FollowMe);
+ break;
+ case Z_EFFECT_RECOVER_HP:
+ StringCopy(gDisplayedStringBattle, sText_RecoverHP);
+ break;
+ case Z_EFFECT_RESTORE_REPLACEMENT_HP:
+ StringCopy(gDisplayedStringBattle, sText_HealAllyHP);
+ break;
+ case Z_EFFECT_ATK_UP_1:
+ case Z_EFFECT_DEF_UP_1:
+ case Z_EFFECT_SPD_UP_1:
+ case Z_EFFECT_SPATK_UP_1:
+ case Z_EFFECT_SPDEF_UP_1:
+ case Z_EFFECT_ACC_UP_1:
+ case Z_EFFECT_EVSN_UP_1:
+ gDisplayedStringBattle[0] = CHAR_PLUS;
+ gDisplayedStringBattle[1] = 0;
+ gDisplayedStringBattle[2] = EOS;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_1 + 1);
+ ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 2);
+ break;
+ case Z_EFFECT_ATK_UP_2:
+ case Z_EFFECT_DEF_UP_2:
+ case Z_EFFECT_SPD_UP_2:
+ case Z_EFFECT_SPATK_UP_2:
+ case Z_EFFECT_SPDEF_UP_2:
+ case Z_EFFECT_ACC_UP_2:
+ case Z_EFFECT_EVSN_UP_2:
+ gDisplayedStringBattle[0] = CHAR_PLUS;
+ gDisplayedStringBattle[1] = CHAR_PLUS;
+ gDisplayedStringBattle[2] = 0;
+ gDisplayedStringBattle[3] = EOS;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_2 + 1);
+ ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 3);
+ break;
+ case Z_EFFECT_ATK_UP_3:
+ case Z_EFFECT_DEF_UP_3:
+ case Z_EFFECT_SPD_UP_3:
+ case Z_EFFECT_SPATK_UP_3:
+ case Z_EFFECT_SPDEF_UP_3:
+ case Z_EFFECT_ACC_UP_3:
+ case Z_EFFECT_EVSN_UP_3:
+ gDisplayedStringBattle[0] = CHAR_PLUS;
+ gDisplayedStringBattle[1] = CHAR_PLUS;
+ gDisplayedStringBattle[2] = CHAR_PLUS;
+ gDisplayedStringBattle[3] = 0;
+ gDisplayedStringBattle[4] = EOS;
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_3 + 1);
+ ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 4);
+ break;
+ }
+
+ BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_3);
+ gDisplayedStringBattle[0] = CHAR_Z;
+ gDisplayedStringBattle[1] = CHAR_HYPHEN;
+ StringCopy(gDisplayedStringBattle + 2, gMoveNames[move]);
+ }
+ else if (zmove == MOVE_EXTREME_EVOBOOST)
+ {
+ // Damaging move -> status z move
+ StringCopy(gDisplayedStringBattle, sText_StatsPlus2);
+ BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_3);
+ StringCopy(gDisplayedStringBattle, GetZMoveName(zmove));
+ }
+ else
+ {
+ ZMoveSelectionDisplayPower(move, zmove);
+ StringCopy(gDisplayedStringBattle, GetZMoveName(zmove));
+ }
+ BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_1);
+
+ ZMoveSelectionDisplayPpNumber();
+ MoveSelectionCreateCursorAt(0, 0);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void ZMoveSelectionDisplayPower(u16 move, u16 zMove)
+{
+ u8 *txtPtr;
+ u16 power = gBattleMoves[move].zMovePower;
+
+ if (zMove >= MOVE_CATASTROPIKA)
+ power = gBattleMoves[zMove].power;
+
+ if (gBattleMoves[move].split != SPLIT_STATUS)
+ {
+ txtPtr = StringCopy(gDisplayedStringBattle, sText_PowerColon);
+ ConvertIntToDecimalStringN(txtPtr, power, STR_CONV_MODE_LEFT_ALIGN, 3);
+ BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_3);
+ }
+}
+
+static void ZMoveSelectionDisplayPpNumber(void)
+{
+ u8 *txtPtr;
+ struct ChooseMoveStruct *moveInfo;
+
+ if (gBattleResources->bufferA[gActiveBattler][2] == TRUE) // Check if we didn't want to display pp number
+ return;
+
+ SetPpNumbersPaletteInMoveSelection();
+ moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]);
+ txtPtr = ConvertIntToDecimalStringN(gDisplayedStringBattle, 1, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ *(txtPtr)++ = CHAR_SLASH;
+ ConvertIntToDecimalStringN(txtPtr, 1, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_PP_REMAINING);
+}
+
+const u8 *GetZMoveName(u16 move)
+{
+ if (IsZMove(move))
+ return gZMoveNames[move - FIRST_Z_MOVE];
+ else
+ return gZMoveNames[0]; // Failsafe
+}
+
+#define Z_EFFECT_BS_LENGTH 3
+// This function kinda cheats by setting a return battle script to after the setzeffect various command
+// and then jumping to a z effect script
+void SetZEffect(void)
+{
+ u32 i;
+
+ gBattleStruct->zmove.zStatusActive = TRUE;
+ if (gBattleStruct->zmove.effect == Z_EFFECT_CURSE)
+ {
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
+ gBattleStruct->zmove.effect = Z_EFFECT_RECOVER_HP;
+ else
+ gBattleStruct->zmove.effect = Z_EFFECT_ATK_UP_1;
+ }
+
+ gBattleScripting.savedStatChanger = gBattleScripting.statChanger; // Save used move's stat changer (e.g. for Z-Growl)
+ gBattleScripting.battler = gBattlerAttacker;
+
+ switch (gBattleStruct->zmove.effect)
+ {
+ case Z_EFFECT_RESET_STATS:
+ for (i = 0; i < NUM_BATTLE_STATS - 1; i++)
+ {
+ if (gBattleMons[gBattlerAttacker].statStages[i] < DEFAULT_STAT_STAGE)
+ gBattleMons[gBattlerAttacker].statStages[i] = DEFAULT_STAT_STAGE;
+ }
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_RESET_STATS;
+ BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
+ gBattlescriptCurrInstr = BattleScript_ZEffectPrintString;
+ break;
+ case Z_EFFECT_ALL_STATS_UP_1:
+ if (!AreStatsMaxed(gBattlerAttacker, STAT_SPDEF))
+ {
+ for (i = 0; i < STAT_ACC - 1; i++) // Doesn't increase Acc or Evsn
+ {
+ if (gBattleMons[gBattlerAttacker].statStages[i] < 12)
+ ++gBattleMons[gBattlerAttacker].statStages[i];
+ }
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_ALL_STATS_UP;
+ BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
+ gBattlescriptCurrInstr = BattleScript_ZEffectPrintString;
+ }
+ break;
+ case Z_EFFECT_BOOST_CRITS:
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY))
+ {
+ gBattleMons[gBattlerAttacker].status2 |= STATUS2_FOCUS_ENERGY;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_BOOST_CRITS;
+ BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
+ gBattlescriptCurrInstr = BattleScript_ZEffectPrintString;
+ }
+ break;
+ case Z_EFFECT_FOLLOW_ME:
+ gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTimer = 1;
+ gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTarget = gBattlerAttacker;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_FOLLOW_ME;
+ BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
+ gBattlescriptCurrInstr = BattleScript_ZEffectPrintString;
+ break;
+ case Z_EFFECT_RECOVER_HP:
+ if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP)
+ {
+ gBattleMoveDamage = (-1) * gBattleMons[gBattlerAttacker].maxHP;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_RECOVER_HP;
+ BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
+ gBattlescriptCurrInstr = BattleScript_RecoverHPZMove;
+ }
+ break;
+ case Z_EFFECT_RESTORE_REPLACEMENT_HP:
+ gBattleStruct->zmove.healReplacement = TRUE;
+ BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_HP_TRAP;
+ gBattlescriptCurrInstr = BattleScript_ZEffectPrintString;
+ break;
+ case Z_EFFECT_ATK_UP_1 ... Z_EFFECT_EVSN_UP_1:
+ SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_1 + 1, 1, FALSE);
+ BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
+ gBattlescriptCurrInstr = BattleScript_StatUpZMove;
+ break;
+ case Z_EFFECT_ATK_UP_2 ... Z_EFFECT_EVSN_UP_2:
+ SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_2 + 1, 2, FALSE);
+ BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
+ gBattlescriptCurrInstr = BattleScript_StatUpZMove;
+ break;
+ case Z_EFFECT_ATK_UP_3 ... Z_EFFECT_EVSN_UP_3:
+ SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_3 + 1, 3, FALSE);
+ BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
+ gBattlescriptCurrInstr = BattleScript_StatUpZMove;
+ break;
+ default:
+ gBattlescriptCurrInstr += 3;
+ break;
+ }
+
+ gBattleStruct->zmove.zStatusActive = FALSE;
+}
+
+static bool32 AreStatsMaxed(u8 battlerId, u8 n)
+{
+ u32 i;
+ for (i = STAT_ATK; i <= n; i++)
+ {
+ if (STAT_STAGE(battlerId, i) < MAX_STAT_STAGE)
+ return FALSE;
+ }
+ return TRUE;
+}
+
diff --git a/src/berry.c b/src/berry.c
index d56ec801ca..e6ee039f40 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -26,97 +26,145 @@ static u16 GetStageDurationByBerryType(u8);
//.rodata
static const u8 sBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers.");
-static const u8 sBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy.");
-static const u8 sBerryDescriptionPart1_Chesto[] = _("The BERRY's thick skin and fruit are");
+static const u8 sBerryDescriptionPart2_Cheri[] = _("The bright red Berry is very spicy.");
+static const u8 sBerryDescriptionPart1_Chesto[] = _("The Berry's thick skin and fruit are");
static const u8 sBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over.");
static const u8 sBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious.");
static const u8 sBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care.");
static const u8 sBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,");
-static const u8 sBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter.");
-static const u8 sBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich");
+static const u8 sBerryDescriptionPart2_Rawst[] = _("the Berry seems to grow very bitter.");
+static const u8 sBerryDescriptionPart1_Aspear[] = _("The hard Berry is dense with a rich");
static const u8 sBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour.");
-static const u8 sBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others.");
-static const u8 sBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier.");
-static const u8 sBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors.");
-static const u8 sBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day.");
-static const u8 sBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY's color");
+static const u8 sBerryDescriptionPart1_Leppa[] = _("Grows slower than Cheri and others.");
+static const u8 sBerryDescriptionPart2_Leppa[] = _("The smaller the Berry, the tastier.");
+static const u8 sBerryDescriptionPart1_Oran[] = _("A peculiar Berry with a mix of flavors.");
+static const u8 sBerryDescriptionPart2_Oran[] = _("Berries grow in half a day.");
+static const u8 sBerryDescriptionPart1_Persim[] = _("Loves sunlight. The Berry's color");
static const u8 sBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun.");
static const u8 sBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving");
-static const u8 sBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES.");
-static const u8 sBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large");
-static const u8 sBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor.");
-static const u8 sBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,");
+static const u8 sBerryDescriptionPart2_Lum[] = _("care, it may grow two Berries.");
+static const u8 sBerryDescriptionPart1_Sitrus[] = _("Closely related to Oran. The large");
+static const u8 sBerryDescriptionPart2_Sitrus[] = _("Berry has a well-rounded flavor.");
+static const u8 sBerryDescriptionPart1_Figy[] = _("The Berry, which looks chewed up,");
static const u8 sBerryDescriptionPart2_Figy[] = _("brims with spicy substances.");
-static const u8 sBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy");
-static const u8 sBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it.");
-static const u8 sBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows.");
+static const u8 sBerryDescriptionPart1_Wiki[] = _("The Berry is said to have grown lumpy");
+static const u8 sBerryDescriptionPart2_Wiki[] = _("to help Pokémon grip it.");
+static const u8 sBerryDescriptionPart1_Mago[] = _("The Berry turns curvy as it grows.");
static const u8 sBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier.");
static const u8 sBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its");
static const u8 sBerryDescriptionPart2_Aguav[] = _("ability to grow without light.");
-static const u8 sBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour.");
+static const u8 sBerryDescriptionPart1_Iapapa[] = _("The Berry is very big and sour.");
static const u8 sBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow.");
-static const u8 sBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy.");
+static const u8 sBerryDescriptionPart1_Razz[] = _("The red Berry tastes slightly spicy.");
static const u8 sBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours.");
-static const u8 sBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but");
+static const u8 sBerryDescriptionPart1_Bluk[] = _("The Berry is blue on the outside, but");
static const u8 sBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten.");
-static const u8 sBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh");
+static const u8 sBerryDescriptionPart1_Nanab[] = _("This Berry was the seventh");
static const u8 sBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet.");
static const u8 sBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a");
static const u8 sBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour.");
static const u8 sBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold.");
static const u8 sBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour.");
static const u8 sBerryDescriptionPart1_Pomeg[] = _("However much it is watered,");
-static const u8 sBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES.");
+static const u8 sBerryDescriptionPart2_Pomeg[] = _("it only grows up to six Berries.");
static const u8 sBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root.");
static const u8 sBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower.");
static const u8 sBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in");
static const u8 sBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall.");
-static const u8 sBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and");
+static const u8 sBerryDescriptionPart1_Hondew[] = _("A Berry that is very valuable and");
static const u8 sBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious.");
static const u8 sBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round");
-static const u8 sBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour.");
-static const u8 sBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy.");
+static const u8 sBerryDescriptionPart2_Grepa[] = _("shape, the Berry is unimaginably sour.");
+static const u8 sBerryDescriptionPart1_Tamato[] = _("The Berry is lip-bendingly spicy.");
static const u8 sBerryDescriptionPart2_Tamato[] = _("It takes time to grow.");
-static const u8 sBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not");
+static const u8 sBerryDescriptionPart1_Cornn[] = _("A Berry from an ancient era. May not");
static const u8 sBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity.");
-static const u8 sBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have");
+static const u8 sBerryDescriptionPart1_Magost[] = _("A Berry that is widely said to have");
static const u8 sBerryDescriptionPart2_Magost[] = _("a finely balanced flavor.");
static const u8 sBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with");
static const u8 sBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter.");
static const u8 sBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it");
static const u8 sBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days.");
-static const u8 sBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy.");
+static const u8 sBerryDescriptionPart1_Spelon[] = _("The vividly red Berry is very spicy.");
static const u8 sBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance.");
static const u8 sBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere.");
static const u8 sBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere.");
-static const u8 sBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20");
+static const u8 sBerryDescriptionPart1_Watmel[] = _("A huge Berry, with some over 20");
static const u8 sBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet.");
static const u8 sBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so");
static const u8 sBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is.");
static const u8 sBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but");
static const u8 sBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow.");
-static const u8 sBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to");
+static const u8 sBerryDescriptionPart1_Chilan[] = _("It can be made into a whistle that");
+static const u8 sBerryDescriptionPart2_Chilan[] = _("produces an indescribable sound.");
+static const u8 sBerryDescriptionPart1_Occa[] = _("Said to grow in the tropics once,");
+static const u8 sBerryDescriptionPart2_Occa[] = _("it boasts an intensely hot spiciness.");
+static const u8 sBerryDescriptionPart1_Passho[] = _("Its flesh is dotted with many tiny");
+static const u8 sBerryDescriptionPart2_Passho[] = _("bubbles that keep it afloat in water.");
+static const u8 sBerryDescriptionPart1_Wacan[] = _("Energy drawn from lightning strikes");
+static const u8 sBerryDescriptionPart2_Wacan[] = _("makes this Berry grow big and rich.");
+static const u8 sBerryDescriptionPart1_Rindo[] = _("This berry has a vegetable-like flavor,");
+static const u8 sBerryDescriptionPart2_Rindo[] = _("but is rich in health-promoting fiber.");
+static const u8 sBerryDescriptionPart1_Yache[] = _("This Berry has a refreshing dry and");
+static const u8 sBerryDescriptionPart2_Yache[] = _("sour flavor. Tastes better chilled.");
+static const u8 sBerryDescriptionPart1_Chople[] = _("Contains a substance that generates");
+static const u8 sBerryDescriptionPart2_Chople[] = _("heat. Can even fire up a chilly heart.");
+static const u8 sBerryDescriptionPart1_Kebia[] = _("Brilliant green on the outside, inside");
+static const u8 sBerryDescriptionPart2_Kebia[] = _("it is packed with black-colored flesh.");
+static const u8 sBerryDescriptionPart1_Shuca[] = _("The sweet pulp has just the hint of a");
+static const u8 sBerryDescriptionPart2_Shuca[] = _("a hard-edged and fragrant bite to it.");
+static const u8 sBerryDescriptionPart1_Coba[] = _("This Berry is said to be a cross of");
+static const u8 sBerryDescriptionPart2_Coba[] = _("two Berries blown in from far away.");
+static const u8 sBerryDescriptionPart1_Payapa[] = _("Said to sense human emotions, it swells");
+static const u8 sBerryDescriptionPart2_Payapa[] = _("roundly when a person approaches.");
+static const u8 sBerryDescriptionPart1_Tanga[] = _("It grows a flower at the tip that lures");
+static const u8 sBerryDescriptionPart2_Tanga[] = _("Bug Pokémon with its stringy petals.");
+static const u8 sBerryDescriptionPart1_Charti[] = _("Often used for pickles because of its");
+static const u8 sBerryDescriptionPart2_Charti[] = _("dry flavor. Sometimes eaten raw.");
+static const u8 sBerryDescriptionPart1_Kasib[] = _("Old superstitions say it has an odd");
+static const u8 sBerryDescriptionPart2_Kasib[] = _("power. A popular good-luck charm.");
+static const u8 sBerryDescriptionPart1_Haban[] = _("Less bitter if enough of this Berry");
+static const u8 sBerryDescriptionPart2_Haban[] = _("is boiled down. Makes a good jam.");
+static const u8 sBerryDescriptionPart1_Colbur[] = _("Tiny hooks on the surface latch onto");
+static const u8 sBerryDescriptionPart2_Colbur[] = _("Pokémon to reach far-off places.");
+static const u8 sBerryDescriptionPart1_Babiri[] = _("Very tough with a strong flavor. It");
+static const u8 sBerryDescriptionPart2_Babiri[] = _("was used to make medicine in the past.");
+static const u8 sBerryDescriptionPart1_Roseli[] = _("In nature, they grow in wide rings");
+static const u8 sBerryDescriptionPart2_Roseli[] = _("for reasons that are still unknown.");
+static const u8 sBerryDescriptionPart1_Liechi[] = _("A mysterious Berry. It is rumored to");
static const u8 sBerryDescriptionPart2_Liechi[] = _("contain the power of the sea.");
-static const u8 sBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to");
+static const u8 sBerryDescriptionPart1_Ganlon[] = _("A mysterious Berry. It is rumored to");
static const u8 sBerryDescriptionPart2_Ganlon[] = _("contain the power of the land.");
-static const u8 sBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to");
+static const u8 sBerryDescriptionPart1_Salac[] = _("A mysterious Berry. It is rumored to");
static const u8 sBerryDescriptionPart2_Salac[] = _("contain the power of the sky.");
-static const u8 sBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to");
+static const u8 sBerryDescriptionPart1_Petaya[] = _("A mysterious Berry. It is rumored to");
static const u8 sBerryDescriptionPart2_Petaya[] = _("contain the power of all living things.");
-static const u8 sBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling");
+static const u8 sBerryDescriptionPart1_Apicot[] = _("A very mystifying Berry. No telling");
static const u8 sBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used.");
-static const u8 sBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY.");
+static const u8 sBerryDescriptionPart1_Lansat[] = _("Said to be a legendary Berry.");
static const u8 sBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy.");
static const u8 sBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the");
static const u8 sBerryDescriptionPart2_Starf[] = _("world's edge. Considered a mirage.");
-static const u8 sBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY.");
+static const u8 sBerryDescriptionPart1_Enigma[] = _("A completely enigmatic Berry.");
static const u8 sBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars.");
+static const u8 sBerryDescriptionPart1_Micle[] = _("It makes other food eaten at the");
+static const u8 sBerryDescriptionPart2_Micle[] = _("same time taste sweet.");
+static const u8 sBerryDescriptionPart1_Custap[] = _("The flesh underneath the Custap");
+static const u8 sBerryDescriptionPart2_Custap[] = _("Berry's skin is sweet and creamy soft.");
+static const u8 sBerryDescriptionPart1_Jaboca[] = _("The drupelets that make up this berry");
+static const u8 sBerryDescriptionPart2_Jaboca[] = _("pop rythmically if handled roughly.");
+static const u8 sBerryDescriptionPart1_Rowap[] = _("People once worked top-shaped pieces");
+static const u8 sBerryDescriptionPart2_Rowap[] = _("of this berry free to use as toys.");
+static const u8 sBerryDescriptionPart1_Kee[] = _("A berry that is incredibly spicy at");
+static const u8 sBerryDescriptionPart2_Kee[] = _("first, then extremely bitter.");
+static const u8 sBerryDescriptionPart1_Maranga[] = _("Its outside is very bitter, but its");
+static const u8 sBerryDescriptionPart2_Maranga[] = _("inside tastes like a sweet drink.");
const struct Berry gBerries[] =
{
[ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("CHERI"),
+ .name = _("Cheri"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 20,
.maxYield = 3,
@@ -134,7 +182,7 @@ const struct Berry gBerries[] =
[ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("CHESTO"),
+ .name = _("Chesto"),
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 80,
.maxYield = 3,
@@ -152,7 +200,7 @@ const struct Berry gBerries[] =
[ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("PECHA"),
+ .name = _("Pecha"),
.firmness = BERRY_FIRMNESS_VERY_SOFT,
.size = 40,
.maxYield = 3,
@@ -170,7 +218,7 @@ const struct Berry gBerries[] =
[ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("RAWST"),
+ .name = _("Rawst"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 32,
.maxYield = 3,
@@ -188,7 +236,7 @@ const struct Berry gBerries[] =
[ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("ASPEAR"),
+ .name = _("Aspear"),
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 50,
.maxYield = 3,
@@ -206,7 +254,7 @@ const struct Berry gBerries[] =
[ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("LEPPA"),
+ .name = _("Leppa"),
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 28,
.maxYield = 3,
@@ -224,7 +272,7 @@ const struct Berry gBerries[] =
[ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("ORAN"),
+ .name = _("Oran"),
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 35,
.maxYield = 3,
@@ -242,7 +290,7 @@ const struct Berry gBerries[] =
[ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("PERSIM"),
+ .name = _("Persim"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 47,
.maxYield = 3,
@@ -260,7 +308,7 @@ const struct Berry gBerries[] =
[ITEM_LUM_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("LUM"),
+ .name = _("Lum"),
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 34,
.maxYield = 2,
@@ -278,7 +326,7 @@ const struct Berry gBerries[] =
[ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("SITRUS"),
+ .name = _("Sitrus"),
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 95,
.maxYield = 3,
@@ -296,7 +344,7 @@ const struct Berry gBerries[] =
[ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("FIGY"),
+ .name = _("Figy"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 100,
.maxYield = 3,
@@ -314,7 +362,7 @@ const struct Berry gBerries[] =
[ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("WIKI"),
+ .name = _("Wiki"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 115,
.maxYield = 3,
@@ -332,7 +380,7 @@ const struct Berry gBerries[] =
[ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("MAGO"),
+ .name = _("Mago"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 126,
.maxYield = 3,
@@ -350,7 +398,7 @@ const struct Berry gBerries[] =
[ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("AGUAV"),
+ .name = _("Aguav"),
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 64,
.maxYield = 3,
@@ -368,7 +416,7 @@ const struct Berry gBerries[] =
[ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("IAPAPA"),
+ .name = _("Iapapa"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 223,
.maxYield = 3,
@@ -386,7 +434,7 @@ const struct Berry gBerries[] =
[ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("RAZZ"),
+ .name = _("Razz"),
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 120,
.maxYield = 6,
@@ -404,7 +452,7 @@ const struct Berry gBerries[] =
[ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("BLUK"),
+ .name = _("Bluk"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 108,
.maxYield = 6,
@@ -422,7 +470,7 @@ const struct Berry gBerries[] =
[ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("NANAB"),
+ .name = _("Nanab"),
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 77,
.maxYield = 6,
@@ -440,7 +488,7 @@ const struct Berry gBerries[] =
[ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("WEPEAR"),
+ .name = _("Wepear"),
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 74,
.maxYield = 6,
@@ -458,7 +506,7 @@ const struct Berry gBerries[] =
[ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("PINAP"),
+ .name = _("Pinap"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 80,
.maxYield = 6,
@@ -476,7 +524,7 @@ const struct Berry gBerries[] =
[ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("POMEG"),
+ .name = _("Pomeg"),
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 135,
.maxYield = 6,
@@ -494,7 +542,7 @@ const struct Berry gBerries[] =
[ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("KELPSY"),
+ .name = _("Kelpsy"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 150,
.maxYield = 6,
@@ -512,7 +560,7 @@ const struct Berry gBerries[] =
[ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("QUALOT"),
+ .name = _("Qualot"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 110,
.maxYield = 6,
@@ -530,7 +578,7 @@ const struct Berry gBerries[] =
[ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("HONDEW"),
+ .name = _("Hondew"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 162,
.maxYield = 6,
@@ -548,7 +596,7 @@ const struct Berry gBerries[] =
[ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("GREPA"),
+ .name = _("Grepa"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 149,
.maxYield = 6,
@@ -566,7 +614,7 @@ const struct Berry gBerries[] =
[ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("TAMATO"),
+ .name = _("Tamato"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 200,
.maxYield = 4,
@@ -584,7 +632,7 @@ const struct Berry gBerries[] =
[ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("CORNN"),
+ .name = _("Cornn"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 75,
.maxYield = 4,
@@ -602,7 +650,7 @@ const struct Berry gBerries[] =
[ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("MAGOST"),
+ .name = _("Magost"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 140,
.maxYield = 4,
@@ -620,7 +668,7 @@ const struct Berry gBerries[] =
[ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("RABUTA"),
+ .name = _("Rabuta"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 226,
.maxYield = 4,
@@ -638,7 +686,7 @@ const struct Berry gBerries[] =
[ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("NOMEL"),
+ .name = _("Nomel"),
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 285,
.maxYield = 4,
@@ -656,7 +704,7 @@ const struct Berry gBerries[] =
[ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("SPELON"),
+ .name = _("Spelon"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 133,
.maxYield = 2,
@@ -674,7 +722,7 @@ const struct Berry gBerries[] =
[ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("PAMTRE"),
+ .name = _("Pamtre"),
.firmness = BERRY_FIRMNESS_VERY_SOFT,
.size = 244,
.maxYield = 2,
@@ -692,7 +740,7 @@ const struct Berry gBerries[] =
[ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("WATMEL"),
+ .name = _("Watmel"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 250,
.maxYield = 2,
@@ -710,7 +758,7 @@ const struct Berry gBerries[] =
[ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("DURIN"),
+ .name = _("Durin"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 280,
.maxYield = 2,
@@ -728,7 +776,7 @@ const struct Berry gBerries[] =
[ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("BELUE"),
+ .name = _("Belue"),
.firmness = BERRY_FIRMNESS_VERY_SOFT,
.size = 300,
.maxYield = 2,
@@ -744,9 +792,333 @@ const struct Berry gBerries[] =
.smoothness = 70,
},
+ [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Chilan"),
+ .firmness = BERRY_FIRMNESS_VERY_SOFT,
+ .size = 34,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Chilan,
+ .description2 = sBerryDescriptionPart2_Chilan,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 25,
+ .sweet = 10,
+ .bitter = 0,
+ .sour = 0,
+ .smoothness = 35,
+ },
+
+ [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Occa"),
+ .firmness = BERRY_FIRMNESS_SUPER_HARD,
+ .size = 90,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Occa,
+ .description2 = sBerryDescriptionPart2_Occa,
+ .stageDuration = 18,
+ .spicy = 15,
+ .dry = 0,
+ .sweet = 10,
+ .bitter = 0,
+ .sour = 0,
+ .smoothness = 30,
+ },
+
+ [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Passho"),
+ .firmness = BERRY_FIRMNESS_SOFT,
+ .size = 33,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Passho,
+ .description2 = sBerryDescriptionPart2_Passho,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 15,
+ .sweet = 0,
+ .bitter = 10,
+ .sour = 0,
+ .smoothness = 30,
+ },
+
+ [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Wacan"),
+ .firmness = BERRY_FIRMNESS_VERY_SOFT,
+ .size = 250,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Wacan,
+ .description2 = sBerryDescriptionPart2_Wacan,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 0,
+ .sweet = 15,
+ .bitter = 0,
+ .sour = 10,
+ .smoothness = 30,
+ },
+
+ [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Rindo"),
+ .firmness = BERRY_FIRMNESS_SOFT,
+ .size = 156,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Rindo,
+ .description2 = sBerryDescriptionPart2_Rindo,
+ .stageDuration = 18,
+ .spicy = 10,
+ .dry = 0,
+ .sweet = 0,
+ .bitter = 15,
+ .sour = 0,
+ .smoothness = 30,
+ },
+
+ [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Yache"),
+ .firmness = BERRY_FIRMNESS_VERY_HARD,
+ .size = 135,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Yache,
+ .description2 = sBerryDescriptionPart2_Yache,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 10,
+ .sweet = 0,
+ .bitter = 0,
+ .sour = 15,
+ .smoothness = 30,
+ },
+
+ [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Chople"),
+ .firmness = BERRY_FIRMNESS_SOFT,
+ .size = 77,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Chople,
+ .description2 = sBerryDescriptionPart2_Chople,
+ .stageDuration = 18,
+ .spicy = 15,
+ .dry = 0,
+ .sweet = 0,
+ .bitter = 10,
+ .sour = 0,
+ .smoothness = 30,
+ },
+
+ [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Kebia"),
+ .firmness = BERRY_FIRMNESS_HARD,
+ .size = 90,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Kebia,
+ .description2 = sBerryDescriptionPart2_Kebia,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 15,
+ .sweet = 0,
+ .bitter = 0,
+ .sour = 10,
+ .smoothness = 30,
+ },
+
+ [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Shuca"),
+ .firmness = BERRY_FIRMNESS_SOFT,
+ .size = 42,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Shuca,
+ .description2 = sBerryDescriptionPart2_Shuca,
+ .stageDuration = 18,
+ .spicy = 10,
+ .dry = 0,
+ .sweet = 15,
+ .bitter = 0,
+ .sour = 0,
+ .smoothness = 30,
+ },
+
+ [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Coba"),
+ .firmness = BERRY_FIRMNESS_VERY_HARD,
+ .size = 278,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Coba,
+ .description2 = sBerryDescriptionPart2_Coba,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 10,
+ .sweet = 0,
+ .bitter = 15,
+ .sour = 0,
+ .smoothness = 30,
+ },
+
+ [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Payapa"),
+ .firmness = BERRY_FIRMNESS_SOFT,
+ .size = 252,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Payapa,
+ .description2 = sBerryDescriptionPart2_Payapa,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 0,
+ .sweet = 10,
+ .bitter = 0,
+ .sour = 15,
+ .smoothness = 30,
+ },
+
+ [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Tanga"),
+ .firmness = BERRY_FIRMNESS_VERY_SOFT,
+ .size = 42,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Tanga,
+ .description2 = sBerryDescriptionPart2_Tanga,
+ .stageDuration = 18,
+ .spicy = 20,
+ .dry = 0,
+ .sweet = 0,
+ .bitter = 0,
+ .sour = 10,
+ .smoothness = 35,
+ },
+
+ [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Charti"),
+ .firmness = BERRY_FIRMNESS_VERY_SOFT,
+ .size = 28,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Charti,
+ .description2 = sBerryDescriptionPart2_Charti,
+ .stageDuration = 18,
+ .spicy = 10,
+ .dry = 20,
+ .sweet = 0,
+ .bitter = 0,
+ .sour = 0,
+ .smoothness = 35,
+ },
+
+ [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Kasib"),
+ .firmness = BERRY_FIRMNESS_HARD,
+ .size = 144,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Kasib,
+ .description2 = sBerryDescriptionPart2_Kasib,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 10,
+ .sweet = 20,
+ .bitter = 0,
+ .sour = 0,
+ .smoothness = 35,
+ },
+
+ [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Haban"),
+ .firmness = BERRY_FIRMNESS_SOFT,
+ .size = 23,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Haban,
+ .description2 = sBerryDescriptionPart2_Haban,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 0,
+ .sweet = 10,
+ .bitter = 20,
+ .sour = 0,
+ .smoothness = 35,
+ },
+
+ [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Colbur"),
+ .firmness = BERRY_FIRMNESS_SUPER_HARD,
+ .size = 39,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Colbur,
+ .description2 = sBerryDescriptionPart2_Colbur,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 0,
+ .sweet = 0,
+ .bitter = 10,
+ .sour = 20,
+ .smoothness = 35,
+ },
+
+ [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Babiri"),
+ .firmness = BERRY_FIRMNESS_SUPER_HARD,
+ .size = 265,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Babiri,
+ .description2 = sBerryDescriptionPart2_Babiri,
+ .stageDuration = 18,
+ .spicy = 25,
+ .dry = 10,
+ .sweet = 0,
+ .bitter = 0,
+ .sour = 0,
+ .smoothness = 35,
+ },
+
+ [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Roseli"),
+ .firmness = BERRY_FIRMNESS_HARD,
+ .size = 35,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Roseli,
+ .description2 = sBerryDescriptionPart2_Roseli,
+ .stageDuration = 18,
+ .spicy = 0,
+ .dry = 0,
+ .sweet = 25,
+ .bitter = 10,
+ .sour = 0,
+ .smoothness = 35,
+ },
+
[ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("LIECHI"),
+ .name = _("Liechi"),
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 111,
.maxYield = 2,
@@ -764,7 +1136,7 @@ const struct Berry gBerries[] =
[ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("GANLON"),
+ .name = _("Ganlon"),
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 33,
.maxYield = 2,
@@ -782,7 +1154,7 @@ const struct Berry gBerries[] =
[ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("SALAC"),
+ .name = _("Salac"),
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 95,
.maxYield = 2,
@@ -800,7 +1172,7 @@ const struct Berry gBerries[] =
[ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("PETAYA"),
+ .name = _("Petaya"),
.firmness = BERRY_FIRMNESS_VERY_HARD,
.size = 237,
.maxYield = 2,
@@ -818,7 +1190,7 @@ const struct Berry gBerries[] =
[ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("APICOT"),
+ .name = _("Apicot"),
.firmness = BERRY_FIRMNESS_HARD,
.size = 75,
.maxYield = 2,
@@ -836,7 +1208,7 @@ const struct Berry gBerries[] =
[ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("LANSAT"),
+ .name = _("Lansat"),
.firmness = BERRY_FIRMNESS_SOFT,
.size = 97,
.maxYield = 2,
@@ -854,7 +1226,7 @@ const struct Berry gBerries[] =
[ITEM_STARF_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("STARF"),
+ .name = _("Starf"),
.firmness = BERRY_FIRMNESS_SUPER_HARD,
.size = 153,
.maxYield = 2,
@@ -872,7 +1244,133 @@ const struct Berry gBerries[] =
[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] =
{
- .name = _("ENIGMA"),
+ .name = _("Enigma"),
+ .firmness = BERRY_FIRMNESS_HARD,
+ .size = 155,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Enigma,
+ .description2 = sBerryDescriptionPart2_Enigma,
+ .stageDuration = 24,
+ .spicy = 40,
+ .dry = 10,
+ .sweet = 0,
+ .bitter = 0,
+ .sour = 0,
+ .smoothness = 60,
+ },
+
+ [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Micle"),
+ .firmness = BERRY_FIRMNESS_SOFT,
+ .size = 41,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Micle,
+ .description2 = sBerryDescriptionPart2_Micle,
+ .stageDuration = 24,
+ .spicy = 0,
+ .dry = 40,
+ .sweet = 10,
+ .bitter = 0,
+ .sour = 0,
+ .smoothness = 60,
+ },
+
+ [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Custap"),
+ .firmness = BERRY_FIRMNESS_SUPER_HARD,
+ .size = 267,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Custap,
+ .description2 = sBerryDescriptionPart2_Custap,
+ .stageDuration = 24,
+ .spicy = 0,
+ .dry = 0,
+ .sweet = 40,
+ .bitter = 10,
+ .sour = 0,
+ .smoothness = 60,
+ },
+
+ [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Jaboca"),
+ .firmness = BERRY_FIRMNESS_SOFT,
+ .size = 33,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Jaboca,
+ .description2 = sBerryDescriptionPart2_Jaboca,
+ .stageDuration = 24,
+ .spicy = 0,
+ .dry = 0,
+ .sweet = 0,
+ .bitter = 40,
+ .sour = 10,
+ .smoothness = 60,
+ },
+
+ [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Rowap"),
+ .firmness = BERRY_FIRMNESS_VERY_SOFT,
+ .size = 52,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Rowap,
+ .description2 = sBerryDescriptionPart2_Rowap,
+ .stageDuration = 24,
+ .spicy = 10,
+ .dry = 0,
+ .sweet = 0,
+ .bitter = 0,
+ .sour = 40,
+ .smoothness = 60,
+ },
+
+ [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Kee"),
+ .firmness = BERRY_FIRMNESS_UNKNOWN,
+ .size = 0,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Kee,
+ .description2 = sBerryDescriptionPart2_Kee,
+ .stageDuration = 24,
+ .spicy = 30,
+ .dry = 30,
+ .sweet = 10,
+ .bitter = 10,
+ .sour = 10,
+ .smoothness = 60,
+ },
+
+ [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Marnga"), // "Maranga" is too long
+ .firmness = BERRY_FIRMNESS_UNKNOWN,
+ .size = 0,
+ .maxYield = 5,
+ .minYield = 2,
+ .description1 = sBerryDescriptionPart1_Maranga,
+ .description2 = sBerryDescriptionPart2_Maranga,
+ .stageDuration = 24,
+ .spicy = 10,
+ .dry = 10,
+ .sweet = 30,
+ .bitter = 30,
+ .sour = 10,
+ .smoothness = 60,
+ },
+
+ [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] =
+ {
+ .name = _("Enigma"),
.firmness = BERRY_FIRMNESS_UNKNOWN,
.size = 0,
.maxYield = 2,
@@ -890,49 +1388,49 @@ const struct Berry gBerries[] =
};
const struct BerryCrushBerryData gBerryCrush_BerryData[] = {
- [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
- [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
- [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
- [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
- [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
- [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
- [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
- [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
- [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
- [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
- [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
- [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
- [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
- [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
- [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
- [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
- [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
- [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
- [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
- [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
- [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
- [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
- [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
- [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
- [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
- [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
- [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
- [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
- [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
- [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
- [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
- [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
- [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
- [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
- [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
- [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
- [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
- [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
- [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
- [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
- [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750},
- [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750},
- [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 150, .powder = 200}
+ [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
+ [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
+ [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
+ [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
+ [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20},
+ [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
+ [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
+ [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
+ [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
+ [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30},
+ [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
+ [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
+ [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
+ [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
+ [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50},
+ [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
+ [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
+ [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
+ [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
+ [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70},
+ [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
+ [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
+ [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
+ [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
+ [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100},
+ [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
+ [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
+ [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
+ [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
+ [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 150},
+ [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
+ [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
+ [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
+ [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
+ [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250},
+ [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
+ [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
+ [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
+ [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
+ [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500},
+ [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750},
+ [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750},
+ [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = {.difficulty = 150, .powder = 200}
};
const struct BerryTree gBlankBerryTree = {};
@@ -946,7 +1444,7 @@ void ClearEnigmaBerries(void)
void SetEnigmaBerry(u8 *src)
{
u32 i;
- u8 *dest = (u8*)&gSaveBlock1Ptr->enigmaBerry;
+ u8 *dest = (u8 *)&gSaveBlock1Ptr->enigmaBerry;
for (i = 0; i < sizeof(gSaveBlock1Ptr->enigmaBerry); i++)
dest[i] = src[i];
@@ -958,7 +1456,7 @@ static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
u32 checksum;
u8 *dest;
- dest = (u8*)enigmaBerry;
+ dest = (u8 *)enigmaBerry;
checksum = 0;
for (i = 0; i < sizeof(gSaveBlock1Ptr->enigmaBerry) - sizeof(gSaveBlock1Ptr->enigmaBerry.checksum); i++)
checksum += dest[i];
@@ -979,8 +1477,8 @@ bool32 IsEnigmaBerryValid(void)
const struct Berry *GetBerryInfo(u8 berry)
{
- if (berry == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid())
- return (struct Berry*)(&gSaveBlock1Ptr->enigmaBerry.berry);
+ if (berry == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY_E_READER) && IsEnigmaBerryValid())
+ return (struct Berry *)(&gSaveBlock1Ptr->enigmaBerry.berry);
else
{
if (berry == BERRY_NONE || berry > ITEM_TO_BERRY(LAST_BERRY_INDEX))
@@ -1172,7 +1670,7 @@ void GetBerryNameByBerryType(u8 berry, u8 *string)
string[BERRY_NAME_LENGTH] = EOS;
}
-void GetBerryCountStringByBerryType(u8 berry, u8* dest, u32 berryCount)
+void GetBerryCountStringByBerryType(u8 berry, u8 *dest, u32 berryCount)
{
GetBerryCountString(dest, GetBerryInfo(berry)->name, berryCount);
}
@@ -1300,7 +1798,7 @@ void ObjectEventInteractionPlantBerryTree(void)
{
u8 berry = ItemIdToBerryType(gSpecialVar_ItemId);
- PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE);
+ PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), berry, BERRY_STAGE_PLANTED, TRUE);
ObjectEventInteractionGetBerryTreeData();
}
diff --git a/src/berry_blender.c b/src/berry_blender.c
index bdf7858cee..6ff17931b3 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -215,7 +215,7 @@ static void SetPlayerBerryData(u8, u16);
static void Blender_AddTextPrinter(u8, const u8 *, u8, u8, s32, s32);
static void ResetLinkCmds(void);
static void CreateParticleSprites(void);
-static void ShakeBgCoordForHit(s16*, u16);
+static void ShakeBgCoordForHit(s16 *, u16);
static void TryUpdateProgressBar(u16, u16);
static void UpdateRPM(u16);
static void RestoreBgCoords(void);
@@ -265,7 +265,7 @@ static const u8 sText_Master[] = _("MASTER");
static const u8 sText_Dude[] = _("DUDE");
static const u8 sText_Miss[] = _("MISS");
-static const u8* const sBlenderOpponentsNames[] =
+static const u8 *const sBlenderOpponentsNames[] =
{
[BLENDER_MISTER] = sText_Mister,
[BLENDER_LADDIE] = sText_Laddie,
@@ -456,7 +456,7 @@ static const struct OamData sOam_PlayerArrow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -599,7 +599,7 @@ static const struct OamData sOam_ScoreSymbols =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -668,7 +668,7 @@ static const struct OamData sOam_Particles =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -755,7 +755,7 @@ static const struct OamData sOam_CountdownNumbers =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -813,7 +813,7 @@ static const struct OamData sOam_Start =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -1145,7 +1145,7 @@ static void CB2_LoadBerryBlender(void)
#define sYDownSpeed data[7]
// For throwing berries into the machine
-static void SpriteCB_Berry(struct Sprite* sprite)
+static void SpriteCB_Berry(struct Sprite *sprite)
{
sprite->sX += sprite->sXSpeed;
sprite->sY -= sprite->sYUpSpeed;
@@ -1166,7 +1166,7 @@ static void SpriteCB_Berry(struct Sprite* sprite)
sprite->y = sprite->sY;
}
-static void SetBerrySpriteData(struct Sprite* sprite, s16 x, s16 y, s16 bounceSpeed, s16 xSpeed, s16 ySpeed)
+static void SetBerrySpriteData(struct Sprite *sprite, s16 x, s16 y, s16 bounceSpeed, s16 xSpeed, s16 ySpeed)
{
sprite->sTargetY = y;
sprite->sX = x;
@@ -1538,7 +1538,7 @@ static void SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum, struct B
u16 berryMasterDiff;
u16 i;
- if (playerBerryItemId == ITEM_ENIGMA_BERRY)
+ if (playerBerryItemId == ITEM_ENIGMA_BERRY_E_READER)
{
for (i = 0; i < FLAVOR_COUNT; i++)
{
@@ -2260,7 +2260,7 @@ static bool8 AreBlenderBerriesSame(struct BlenderBerry* berries, u8 a, u8 b)
return FALSE;
}
-static u32 CalculatePokeblockColor(struct BlenderBerry* berries, s16* _flavors, u8 numPlayers, u8 negativeFlavors)
+static u32 CalculatePokeblockColor(struct BlenderBerry* berries, s16 *_flavors, u8 numPlayers, u8 negativeFlavors)
{
s16 flavors[FLAVOR_COUNT + 1];
s32 i, j;
@@ -2286,7 +2286,7 @@ static u32 CalculatePokeblockColor(struct BlenderBerry* berries, s16* _flavors,
for (j = 0; j < numPlayers; j++)
{
if (berries[i].itemId == berries[j].itemId && i != j
- && (berries[i].itemId != ITEM_ENIGMA_BERRY || AreBlenderBerriesSame(berries, i, j)))
+ && (berries[i].itemId != ITEM_ENIGMA_BERRY_E_READER || AreBlenderBerriesSame(berries, i, j)))
return PBLOCK_CLR_BLACK;
}
}
@@ -2494,7 +2494,7 @@ static void CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *p
}
// Unused
-static void Debug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 numPlayers, u8* flavors, u16 maxRPM)
+static void Debug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 numPlayers, u8 *flavors, u16 maxRPM)
{
CalculatePokeblock(berries, pokeblock, numPlayers, flavors, maxRPM);
}
@@ -2628,7 +2628,7 @@ static void CB2_EndBlenderGame(void)
if (gReceivedRemoteLinkPlayers && gWirelessCommType)
{
- struct BlenderGameBlock *receivedBlock = (struct BlenderGameBlock*)(&gBlockRecvBuffer);
+ struct BlenderGameBlock *receivedBlock = (struct BlenderGameBlock *)(&gBlockRecvBuffer);
sBerryBlender->maxRPM = receivedBlock->timeRPM.maxRPM;
sBerryBlender->gameFrameTime = receivedBlock->timeRPM.time;
@@ -2641,7 +2641,7 @@ static void CB2_EndBlenderGame(void)
}
else
{
- struct TimeAndRPM *receivedBlock = (struct TimeAndRPM*)(&gBlockRecvBuffer);
+ struct TimeAndRPM *receivedBlock = (struct TimeAndRPM *)(&gBlockRecvBuffer);
sBerryBlender->maxRPM = receivedBlock->maxRPM;
sBerryBlender->gameFrameTime = receivedBlock->time;
@@ -3159,7 +3159,7 @@ static void SetBgPos(void)
SetGpuReg(REG_OFFSET_BG0VOFS, sBerryBlender->bg_Y);
}
-static void SpriteCB_Particle(struct Sprite* sprite)
+static void SpriteCB_Particle(struct Sprite *sprite)
{
sprite->data[2] += sprite->data[0];
sprite->data[3] += sprite->data[1];
@@ -3194,7 +3194,7 @@ static void CreateParticleSprites(void)
}
}
-static void SpriteCB_ScoreSymbol(struct Sprite* sprite)
+static void SpriteCB_ScoreSymbol(struct Sprite *sprite)
{
sprite->data[0]++;
sprite->y2 = -(sprite->data[0] / 3);
@@ -3203,7 +3203,7 @@ static void SpriteCB_ScoreSymbol(struct Sprite* sprite)
DestroySprite(sprite);
}
-static void SpriteCB_ScoreSymbolBest(struct Sprite* sprite)
+static void SpriteCB_ScoreSymbolBest(struct Sprite *sprite)
{
sprite->data[0]++;
sprite->y2 = -(sprite->data[0] * 2);
@@ -3225,7 +3225,7 @@ static void SetPlayerBerryData(u8 playerId, u16 itemId)
#define sDelay data[2]
#define sAnimId data[3]
-static void SpriteCB_CountdownNumber(struct Sprite* sprite)
+static void SpriteCB_CountdownNumber(struct Sprite *sprite)
{
switch (sprite->sState)
{
@@ -3272,7 +3272,7 @@ static void SpriteCB_CountdownNumber(struct Sprite* sprite)
#undef sDelay
#undef sAnimId
-static void SpriteCB_Start(struct Sprite* sprite)
+static void SpriteCB_Start(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -3318,7 +3318,7 @@ static void UpdateProgressBar(u16 value, u16 limit)
s32 amountFilled, maxFilledSegment, subSegmentsFilled, i;
u16 *vram;
- vram = (u16*)(BG_SCREEN_ADDR(12));
+ vram = (u16 *)(BG_SCREEN_ADDR(12));
amountFilled = (value * 64) / limit;
maxFilledSegment = amountFilled / 8;
@@ -3368,22 +3368,22 @@ static void UpdateRPM(u16 speed)
digits[i] = currentRPM % 10;
currentRPM /= 10;
}
- *((u16*)(BG_SCREEN_ADDR(12) + 0x458)) = digits[4] + RPM_DIGIT;
- *((u16*)(BG_SCREEN_ADDR(12) + 0x45A)) = digits[3] + RPM_DIGIT;
- *((u16*)(BG_SCREEN_ADDR(12) + 0x45C)) = digits[2] + RPM_DIGIT;
- *((u16*)(BG_SCREEN_ADDR(12) + 0x460)) = digits[1] + RPM_DIGIT;
- *((u16*)(BG_SCREEN_ADDR(12) + 0x462)) = digits[0] + RPM_DIGIT;
+ *((u16 *)(BG_SCREEN_ADDR(12) + 0x458)) = digits[4] + RPM_DIGIT;
+ *((u16 *)(BG_SCREEN_ADDR(12) + 0x45A)) = digits[3] + RPM_DIGIT;
+ *((u16 *)(BG_SCREEN_ADDR(12) + 0x45C)) = digits[2] + RPM_DIGIT;
+ *((u16 *)(BG_SCREEN_ADDR(12) + 0x460)) = digits[1] + RPM_DIGIT;
+ *((u16 *)(BG_SCREEN_ADDR(12) + 0x462)) = digits[0] + RPM_DIGIT;
}
// Passed a pointer to the bg x/y
// Used when hitting a Best at high RPM
-static void ShakeBgCoordForHit(s16* coord, u16 speed)
+static void ShakeBgCoordForHit(s16 *coord, u16 speed)
{
if (*coord == 0)
*coord = (Random() % speed) - (speed / 2);
}
-static void RestoreBgCoord(s16* coord)
+static void RestoreBgCoord(s16 *coord)
{
if (*coord < 0)
(*coord)++;
@@ -3398,7 +3398,7 @@ static void RestoreBgCoords(void)
RestoreBgCoord(&sBerryBlender->bg_Y);
}
-static void BlenderLandShakeBgCoord(s16* coord, u16 timer)
+static void BlenderLandShakeBgCoord(s16 *coord, u16 timer)
{
s32 strength;
@@ -3443,7 +3443,7 @@ static bool8 UpdateBlenderLandScreenShake(void)
return FALSE;
}
-static void SpriteCB_PlayerArrow(struct Sprite* sprite)
+static void SpriteCB_PlayerArrow(struct Sprite *sprite)
{
sprite->x2 = -(sBerryBlender->bg_X);
sprite->y2 = -(sBerryBlender->bg_Y);
@@ -3553,7 +3553,7 @@ static bool8 PrintBlendingResults(void)
sBerryBlender->mainState++;
break;
case 5:
- ClearStdWindowAndFrameToTransparent(5, 1);
+ ClearStdWindowAndFrameToTransparent(5, TRUE);
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
@@ -3692,7 +3692,7 @@ static bool8 PrintBlendingRanking(void)
}
break;
case 3:
- DrawStdFrameWithCustomTileAndPalette(5, 0, 1, 0xD);
+ DrawStdFrameWithCustomTileAndPalette(5, FALSE, 1, 0xD);
xPos = GetStringCenterAlignXOffset(FONT_NORMAL, sText_Ranking, 168);
Blender_AddTextPrinter(5, sText_Ranking, xPos, 1, TEXT_SKIP_DRAW, 0);
@@ -3764,7 +3764,7 @@ void ShowBerryBlenderRecordWindow(void)
winTemplate = sBlenderRecordWindowTemplate;
gRecordsWindowId = AddWindow(&winTemplate);
- DrawStdWindowFrame(gRecordsWindowId, 0);
+ DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gText_BlenderMaxSpeedRecord, 144);
diff --git a/src/berry_crush.c b/src/berry_crush.c
index e6e2d87427..eff0a20737 100755
--- a/src/berry_crush.c
+++ b/src/berry_crush.c
@@ -874,7 +874,7 @@ static const struct DigitObjUtilTemplate sDigitObjTemplates[] =
.xDelta = 8,
.x = 156,
.y = 0,
- .spriteSheet = (void*) &sSpriteSheets[3],
+ .spriteSheet = (void *) &sSpriteSheets[3],
.spritePal = &sSpritePals[2],
},
{ // Seconds
@@ -886,7 +886,7 @@ static const struct DigitObjUtilTemplate sDigitObjTemplates[] =
.xDelta = 8,
.x = 180,
.y = 0,
- .spriteSheet = (void*) &sSpriteSheets[3],
+ .spriteSheet = (void *) &sSpriteSheets[3],
.spritePal = &sSpritePals[2],
},
{ // 1/60ths of a second
@@ -898,7 +898,7 @@ static const struct DigitObjUtilTemplate sDigitObjTemplates[] =
.xDelta = 8,
.x = 204,
.y = 0,
- .spriteSheet = (void*) &sSpriteSheets[3],
+ .spriteSheet = (void *) &sSpriteSheets[3],
.spritePal = &sSpritePals[2],
}
};
@@ -914,7 +914,7 @@ static const u8 *const sResultsTexts[] =
[RESULTS_PAGE_POWER + NUM_RESULTS_PAGES] = gText_PressingPowerRankings,
};
-static u32 (*const sBerryCrushCommands[])(struct BerryCrushGame * game, u8 * data) =
+static u32 (*const sBerryCrushCommands[])(struct BerryCrushGame * game, u8 *data) =
{
[CMD_NONE] = NULL,
[CMD_FADE] = Cmd_BeginNormalPaletteFade,
@@ -1752,7 +1752,7 @@ static bool32 OpenResultsWindow(struct BerryCrushGame *game, struct BerryCrushGa
break;
case 2:
LoadUserWindowBorderGfx_(gfx->resultsWindowId, 541, 208);
- DrawStdFrameWithCustomTileAndPalette(gfx->resultsWindowId, 0, 541, 13);
+ DrawStdFrameWithCustomTileAndPalette(gfx->resultsWindowId, FALSE, 541, 13);
break;
case 3:
playerCountIdx = game->playerCount - 2;
@@ -1788,7 +1788,7 @@ static bool32 OpenResultsWindow(struct BerryCrushGame *game, struct BerryCrushGa
static void CloseResultsWindow(struct BerryCrushGame *game)
{
- ClearStdWindowAndFrameToTransparent(game->gfx.resultsWindowId, 1);
+ ClearStdWindowAndFrameToTransparent(game->gfx.resultsWindowId, TRUE);
RemoveWindow(game->gfx.resultsWindowId);
DrawPlayerNameWindows(game);
}
@@ -1810,7 +1810,7 @@ static void Task_ShowRankings(u8 taskId)
PutWindowTilemap(tWindowId);
FillWindowPixelBuffer(tWindowId, PIXEL_FILL(0));
LoadUserWindowBorderGfx_(tWindowId, 541, 208);
- DrawStdFrameWithCustomTileAndPalette(tWindowId, 0, 541, 13);
+ DrawStdFrameWithCustomTileAndPalette(tWindowId, FALSE, 541, 13);
break;
case 1:
// Print header text
@@ -1849,12 +1849,12 @@ static void Task_ShowRankings(u8 taskId)
else
return;
case 3:
- ClearStdWindowAndFrameToTransparent(tWindowId, 1);
+ ClearStdWindowAndFrameToTransparent(tWindowId, TRUE);
ClearWindowTilemap(tWindowId);
RemoveWindow(tWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
- ScriptContext2_Disable();
+ ScriptContext_Enable();
+ UnlockPlayerFieldControls();
tState = 0;
return;
}
@@ -1865,7 +1865,7 @@ void ShowBerryCrushRankings(void)
{
u8 taskId;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
taskId = CreateTask(Task_ShowRankings, 0);
gTasks[taskId].tPressingSpeeds(0) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[0];
gTasks[taskId].tPressingSpeeds(1) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[1];
@@ -1885,9 +1885,9 @@ static void HideTimer(struct BerryCrushGame_Gfx *gfx)
{
gfx->timerSprites[0]->invisible = TRUE;
gfx->timerSprites[1]->invisible = TRUE;
- DigitObjUtil_HideOrShow(2, 1);
- DigitObjUtil_HideOrShow(1, 1);
- DigitObjUtil_HideOrShow(0, 1);
+ DigitObjUtil_HideOrShow(2, TRUE);
+ DigitObjUtil_HideOrShow(1, TRUE);
+ DigitObjUtil_HideOrShow(0, TRUE);
}
static void CreatePlayerNameWindows(struct BerryCrushGame *game)
@@ -1947,7 +1947,7 @@ static void DrawPlayerNameWindows(struct BerryCrushGame *game)
static void CopyPlayerNameWindowGfxToBg(struct BerryCrushGame *game)
{
u8 i = 0;
- u8 * windowGfx;
+ u8 *windowGfx;
LZ77UnCompWram(gBerryCrush_TextWindows_Tilemap, gDecompressionBuffer);
@@ -2258,11 +2258,11 @@ static u32 Cmd_PrintMessage(struct BerryCrushGame *game, u8 *args)
if (args[1] & F_MSG_EXPAND)
{
StringExpandPlaceholders(gStringVar4, sMessages[args[0]]);
- AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, game->textSpeed, 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
else
{
- AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[args[0]], game->textSpeed, 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[args[0]], game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
CopyWindowToVram(0, COPYWIN_FULL);
break;
@@ -2282,7 +2282,7 @@ static u32 Cmd_PrintMessage(struct BerryCrushGame *game, u8 *args)
break;
case 3:
if (args[1] & F_MSG_CLEAR)
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
RunOrScheduleCommand(game->nextCmd, SCHEDULE_CMD, NULL);
game->cmdState = args[4];
return 0;
@@ -2402,7 +2402,7 @@ static u32 Cmd_WaitForOthersToPickBerries(struct BerryCrushGame *game, u8 *args)
game->targetDepth = MathUtil_Div32(Q_24_8(game->targetAPresses), Q_24_8(32));
break;
case 5:
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
RunOrScheduleCommand(CMD_DROP_BERRIES, SCHEDULE_CMD, NULL);
game->gameState = STATE_DROP_BERRIES;
game->cmdState = 0;
@@ -3242,7 +3242,7 @@ static u32 Cmd_SaveGame(struct BerryCrushGame *game, u8 *args)
if (!IsLinkTaskFinished())
return 0;
DrawDialogueFrame(0, FALSE);
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
CopyWindowToVram(0, COPYWIN_FULL);
CreateTask(Task_LinkFullSave, 0);
break;
@@ -3295,7 +3295,7 @@ static u32 Cmd_AskPlayAgain(struct BerryCrushGame *game, u8 *args)
}
// Close Yes/No and start communication
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
SetPrintMessageArgs(args, MSG_COMM_STANDBY, 0, 0, 0);
game->nextCmd = CMD_COMM_PLAY_AGAIN;
RunOrScheduleCommand(CMD_PRINT_MSG, SCHEDULE_CMD, NULL);
@@ -3367,7 +3367,7 @@ static u32 Cmd_PlayAgain(struct BerryCrushGame *game, u8 *args)
return 0;
break;
case 2:
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
ResetCrusherPos(game);
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
UpdatePaletteFade();
@@ -3391,9 +3391,9 @@ static u32 Cmd_StopGame(struct BerryCrushGame *game, u8 *args)
case 0:
DrawDialogueFrame(0, FALSE);
if (game->playAgainState == PLAY_AGAIN_NO_BERRIES)
- AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_NO_BERRIES], game->textSpeed, 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_NO_BERRIES], game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
else
- AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_DROPPED], game->textSpeed, 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_DROPPED], game->textSpeed, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
CopyWindowToVram(0, COPYWIN_FULL);
break;
case 1:
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index 219454ab26..d359a0fc1b 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -276,7 +276,7 @@ static bool8 InitBerryTagScreen(void)
gMain.state++;
break;
case 14:
- BlendPalettes(PALETTES_ALL, 0x10, 0);
+ BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK);
gMain.state++;
break;
case 15:
@@ -550,7 +550,7 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
s16 *data = gTasks[taskId].data;
s16 currPocketPosition = gBagPosition.scrollPosition[BERRIES_POCKET] + gBagPosition.cursorPosition[BERRIES_POCKET];
u32 newPocketPosition = currPocketPosition + toMove;
- if (newPocketPosition < ITEM_TO_BERRY(MAX_BERRY_INDEX) && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != ITEM_NONE)
+ if (newPocketPosition < ITEM_TO_BERRY(LAST_BERRY_INDEX) && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != ITEM_NONE)
{
if (toMove < 0)
data[1] = 2;
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c
index 876e6b4a73..6b5d66d315 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -86,7 +86,7 @@ void DoBrailleDigEffect(void)
DrawWholeMapView();
PlaySE(SE_BANG);
FlagSet(FLAG_SYS_BRAILLE_DIG);
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
}
bool8 CheckRelicanthWailord(void)
@@ -152,7 +152,7 @@ static void Task_SealedChamberShakingEffect(u8 taskId)
if (task->tShakeCounter == task->tNumShakes)
{
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
InstallCameraPanAheadCallback();
}
}
@@ -213,7 +213,7 @@ static void DoBrailleRegirockEffect(void)
DrawWholeMapView();
PlaySE(SE_BANG);
FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED);
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
}
bool8 ShouldDoBrailleRegisteelEffect(void)
@@ -252,7 +252,7 @@ static void DoBrailleRegisteelEffect(void)
DrawWholeMapView();
PlaySE(SE_BANG);
FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED);
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
}
// theory: another commented out DoBrailleWait and Task_BrailleWait.
diff --git a/src/cable_car.c b/src/cable_car.c
index c81764728b..562e9eceb7 100644
--- a/src/cable_car.c
+++ b/src/cable_car.c
@@ -245,7 +245,7 @@ static void Task_LoadCableCar(u8 taskId)
void CableCar(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
CreateTask(Task_LoadCableCar, 1);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB(0, 0, 0));
}
diff --git a/src/cable_club.c b/src/cable_club.c
index 4ee2797f4d..913a1b7287 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -97,7 +97,7 @@ static void PrintNumPlayersInLink(u16 windowId, u32 numPlayers)
u8 xPos;
ConvertIntToDecimalStringN(gStringVar1, numPlayers, STR_CONV_MODE_LEFT_ALIGN, 1);
- SetStandardWindowBorderStyle(windowId, 0);
+ SetStandardWindowBorderStyle(windowId, FALSE);
StringExpandPlaceholders(gStringVar4, gText_NumPlayerLink);
xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 88);
AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, xPos, 1, TEXT_SKIP_DRAW, NULL);
@@ -486,7 +486,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
{
// Successful battle tower linkup
ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
}
@@ -494,7 +494,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
{
// Successful linkup
ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
}
@@ -531,7 +531,7 @@ static void Task_StopLinkup(u8 taskId)
if (!gReceivedRemoteLinkPlayers)
{
ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
}
@@ -543,7 +543,7 @@ static void Task_LinkupFailed(u8 taskId)
ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
StopFieldMessage();
RemoveWindow(gTasks[taskId].tWindowId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
@@ -553,7 +553,7 @@ static void Task_LinkupConnectionError(u8 taskId)
ClearLinkPlayerCountWindow(gTasks[taskId].tWindowId);
RemoveWindow(gTasks[taskId].tWindowId);
HideFieldMessageBox();
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
@@ -688,13 +688,13 @@ static void Task_ValidateMixingGameLanguage(u8 taskId)
return;
}
}
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
break;
case 1:
if (!gReceivedRemoteLinkPlayers)
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
break;
@@ -833,7 +833,7 @@ static void SetLinkBattleTypeFlags(int linkService)
static void Task_StartWiredCableClubBattle(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch (task->tState)
{
@@ -879,7 +879,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId)
static void Task_StartWirelessCableClubBattle(u8 taskId)
{
int i;
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
switch (tState)
{
@@ -1042,7 +1042,7 @@ void ExitLinkRoom(void)
// Note: gSpecialVar_0x8005 contains the id of the seat the player entered
static void Task_EnterCableClubSeat(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch (task->tState)
{
@@ -1080,7 +1080,7 @@ static void Task_EnterCableClubSeat(u8 taskId)
SetLinkWaitingForScript();
EraseFieldMessageBox(TRUE);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
break;
}
}
@@ -1089,7 +1089,7 @@ void CreateTask_EnterCableClubSeat(TaskFunc followupFunc)
{
u8 taskId = CreateTask(Task_EnterCableClubSeat, 80);
SetTaskFuncWithFollowupFunc(taskId, Task_EnterCableClubSeat, followupFunc);
- ScriptContext1_Stop();
+ ScriptContext_Stop();
}
static void Task_StartWiredTrade(u8 taskId)
@@ -1099,7 +1099,7 @@ static void Task_StartWiredTrade(u8 taskId)
switch (task->tState)
{
case 0:
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeScreen(FADE_TO_BLACK, 0);
ClearLinkCallback_2();
task->tState++;
@@ -1132,7 +1132,7 @@ static void Task_StartWirelessTrade(u8 taskId)
switch (tState)
{
case 0:
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeScreen(FADE_TO_BLACK, 0);
ClearLinkRfuCallback();
tState++;
@@ -1176,7 +1176,7 @@ static void CreateTask_StartWiredTrade(void)
void Script_StartWiredTrade(void)
{
// CreateTask_StartWiredTrade();
- // ScriptContext1_Stop();
+ // ScriptContext_Stop();
}
void ColosseumPlayerSpotTriggered(void)
@@ -1193,7 +1193,7 @@ void ColosseumPlayerSpotTriggered(void)
static void CreateTask_EnterCableClubSeatNoFollowup(void)
{
u8 taskId = CreateTask(Task_EnterCableClubSeat, 80);
- ScriptContext1_Stop();
+ ScriptContext_Stop();
}
void Script_ShowLinkTrainerCard(void)
@@ -1257,7 +1257,7 @@ static void Task_WaitExitToScript(u8 taskId)
{
if (!gReceivedRemoteLinkPlayers)
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
}
diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c
index 9bde45e97b..9b79b48f1f 100644
--- a/src/clear_save_data_screen.c
+++ b/src/clear_save_data_screen.c
@@ -79,7 +79,7 @@ void CB2_InitClearSaveDataScreen(void)
static void Task_DoClearSaveDataScreenYesNo(u8 taskId)
{
- DrawStdFrameWithCustomTileAndPalette(0, 0, 2, 14);
+ DrawStdFrameWithCustomTileAndPalette(0, FALSE, 2, 14);
AddTextPrinterParameterized(0, FONT_NORMAL, gText_ClearAllSaveData, 0, 1, 0, 0);
CreateYesNoMenu(sClearSaveYesNo, 2, 14, 1);
gTasks[taskId].func = Task_ClearSaveDataScreenYesNoChoice;
diff --git a/src/contest.c b/src/contest.c
index c0456e48a6..0c525ed3ab 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -388,7 +388,7 @@ static const struct OamData sOam_SliderHeart =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -473,7 +473,7 @@ static const struct OamData sOam_NextTurn =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
@@ -859,19 +859,19 @@ static const struct CompressedSpriteSheet sSpriteSheets_ContestantsTurnBlinkEffe
static const struct SpritePalette sSpritePalettes_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
{
{
- .data = (u16*)(gHeap + 0x1A0A4),
+ .data = (u16 *)(gHeap + 0x1A0A4),
.tag = TAG_BLINK_EFFECT_CONTESTANT0
},
{
- .data = (u16*)(gHeap + 0x1A0C4),
+ .data = (u16 *)(gHeap + 0x1A0C4),
.tag = TAG_BLINK_EFFECT_CONTESTANT1
},
{
- .data = (u16*)(gHeap + 0x1A0E4),
+ .data = (u16 *)(gHeap + 0x1A0E4),
.tag = TAG_BLINK_EFFECT_CONTESTANT2
},
{
- .data = (u16*)(gHeap + 0x1A104),
+ .data = (u16 *)(gHeap + 0x1A104),
.tag = TAG_BLINK_EFFECT_CONTESTANT3
}
};
@@ -1396,7 +1396,7 @@ static void Task_RaiseCurtainAtStart(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 1:
- *(s16*)&gBattle_BG1_Y += 7;
+ *(s16 *)&gBattle_BG1_Y += 7;
if ((s16)gBattle_BG1_Y <= DISPLAY_HEIGHT)
break;
gTasks[taskId].data[0]++;
@@ -1582,7 +1582,7 @@ static void Task_HandleMoveSelectInput(u8 taskId)
StringCopy(gDisplayedStringBattle, gText_AppealNumButItCantParticipate);
ContestClearGeneralTextWindow();
StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
- Contest_StartTextPrinter(gStringVar4, 0);
+ Contest_StartTextPrinter(gStringVar4, FALSE);
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
gTasks[taskId].func = Task_TryShowMoveSelectScreen;
@@ -1814,7 +1814,7 @@ static void Task_DoAppeals(u8 taskId)
else
StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[contestant].moveCategory]);
StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove);
- Contest_StartTextPrinter(gStringVar4, 1);
+ Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].tState = APPEALSTATE_WAIT_USED_MOVE_MSG;
}
return;
@@ -2076,7 +2076,7 @@ static void Task_DoAppeals(u8 taskId)
ContestClearGeneralTextWindow();
StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_MonCantAppealNextTurn);
- Contest_StartTextPrinter(gStringVar4, 1);
+ Contest_StartTextPrinter(gStringVar4, TRUE);
}
gTasks[taskId].tState = APPEALSTATE_WAIT_SKIP_NEXT_TURN_MSG;
}
@@ -2118,7 +2118,7 @@ static void Task_DoAppeals(u8 taskId)
ContestClearGeneralTextWindow();
StringCopy(gStringVar1, gContestMons[contestant].nickname);
StringExpandPlaceholders(gStringVar4, gText_JudgeLookedAtMonExpectantly);
- Contest_StartTextPrinter(gStringVar4, 1);
+ Contest_StartTextPrinter(gStringVar4, TRUE);
DoJudgeSpeechBubble(JUDGE_SYMBOL_ONE_EXCLAMATION);
gTasks[taskId].tCounter = 0;
gTasks[taskId].tState = APPEALSTATE_WAIT_JUDGE_COMBO;
@@ -2231,7 +2231,7 @@ static void Task_DoAppeals(u8 taskId)
StringExpandPlaceholders(gStringVar4, gText_MonsXWentOverGreat);
else
StringExpandPlaceholders(gStringVar4, gText_MonsXGotTheCrowdGoing);
- Contest_StartTextPrinter(gStringVar4, 1);
+ Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].tCounter = 0;
gTasks[taskId].data[11] = 0;
if (r3 < 0)
@@ -2753,8 +2753,8 @@ static void Task_ContestReturnToField(u8 taskId)
static void FieldCB_ContestReturnToField(void)
{
- ScriptContext2_Disable();
- EnableBothScriptContexts();
+ UnlockPlayerFieldControls();
+ ScriptContext_Enable();
}
static void TryPutPlayerLast(void)
@@ -2853,7 +2853,7 @@ void SetContestants(u8 contestType, u8 rank)
u8 opponentsCount = 0;
u8 opponents[100];
bool8 allowPostgameContestants = FALSE;
- const u8 * filter;
+ const u8 *filter;
TryPutPlayerLast();
@@ -3009,7 +3009,7 @@ static void DrawContestantWindowText(void)
static u8 *Contest_CopyStringWithColor(const u8 *string, u8 color)
{
- u8 * ptr = StringCopy(gDisplayedStringBattle, gText_ColorTransparent);
+ u8 *ptr = StringCopy(gDisplayedStringBattle, gText_ColorTransparent);
ptr[-1] = color; // Overwrites the "{COLOR TRANSPARENT}" part of the string.
ptr = StringCopy(ptr, string);
@@ -3663,7 +3663,7 @@ static void ContestPrintLinkStandby(void)
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
ContestClearGeneralTextWindow();
- Contest_StartTextPrinter(gText_LinkStandby4, 0);
+ Contest_StartTextPrinter(gText_LinkStandby4, FALSE);
}
static void FillContestantWindowBgs(void)
@@ -4574,7 +4574,7 @@ static void PrintAppealMoveResultText(u8 contestant, u8 stringId)
StringCopy(gStringVar3, gText_Contest_Fear);
StringExpandPlaceholders(gStringVar4, sAppealResultTexts[stringId]);
ContestClearGeneralTextWindow();
- Contest_StartTextPrinter(gStringVar4, 1);
+ Contest_StartTextPrinter(gStringVar4, TRUE);
}
void MakeContestantNervous(u8 p)
@@ -5385,7 +5385,7 @@ static void SetBattleTargetSpritePosition(void)
static void SetMoveTargetPosition(u16 move)
{
- switch (gBattleMoves[move].target)
+ switch (GetBattlerMoveTargetType(gBattlerAttacker, move))
{
case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_USER:
diff --git a/src/contest_effect.c b/src/contest_effect.c
index 864805a54f..1d70b8d128 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -59,22 +59,22 @@ static s16 RoundUp(s16);
bool8 AreMovesContestCombo(u16 lastMove, u16 nextMove)
{
- u8 nextMoveComboMoves[4];
+ int i;
u8 lastMoveComboStarterId = gContestMoves[lastMove].comboStarterId;
- nextMoveComboMoves[0] = gContestMoves[nextMove].comboMoves[0];
- nextMoveComboMoves[1] = gContestMoves[nextMove].comboMoves[1];
- nextMoveComboMoves[2] = gContestMoves[nextMove].comboMoves[2];
- nextMoveComboMoves[3] = gContestMoves[nextMove].comboMoves[3];
if (lastMoveComboStarterId == 0)
+ {
return FALSE;
- else if (lastMoveComboStarterId == nextMoveComboMoves[0]
- || lastMoveComboStarterId == nextMoveComboMoves[1]
- || lastMoveComboStarterId == nextMoveComboMoves[2]
- || lastMoveComboStarterId == nextMoveComboMoves[3])
- return gComboStarterLookupTable[lastMoveComboStarterId];
+ }
else
+ {
+ for (i = 0; i < MAX_COMBO_MOVES; i++)
+ {
+ if (lastMoveComboStarterId == gContestMoves[nextMove].comboMoves[i])
+ return TRUE;
+ }
return FALSE;
+ }
}
// A highly appealing move.
@@ -132,7 +132,7 @@ static void ContestEffect_UserLessEasilyStartled(void)
SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_STOPPED_CARING);
}
-// Slightly startles the POKéMON in front.
+// Slightly startles the POKMON in front.
static void ContestEffect_StartleFrontMon(void)
{
u8 idx = 0;
@@ -179,7 +179,7 @@ static void ContestEffect_StartlePrevMons(void)
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
-// Startles the POKéMON that appealed before the user.
+// Startles the POKMON that appealed before the user.
static void ContestEffect_StartlePrevMon2(void)
{
u8 rval = Random() % 10;
@@ -196,7 +196,7 @@ static void ContestEffect_StartlePrevMon2(void)
ContestEffect_StartleFrontMon();
}
-// Startles all POKéMON that appealed before the user.
+// Startles all POKMON that appealed before the user.
static void ContestEffect_StartlePrevMons2(void)
{
u8 numStartled = 0;
@@ -272,7 +272,7 @@ static void ContestEffect_ShiftJudgeAttention(void)
}
}
-// Startles the POKéMON that has the JUDGE's attention.
+// Startles the POKMON that has the JUDGE's attention.
static void ContestEffect_StartleMonWithJudgesAttention(void)
{
u8 numStartled = 0;
@@ -310,7 +310,7 @@ static void ContestEffect_JamsOthersButMissOneTurn(void)
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
-// Startles POKéMON that made a same-type appeal.
+// Startles POKMON that made a same-type appeal.
static void ContestEffect_StartleMonsSameTypeAppeal(void)
{
u16 move = eContestantStatus[eContestAppealResults.contestant].currMove;
@@ -318,42 +318,42 @@ static void ContestEffect_StartleMonsSameTypeAppeal(void)
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
-// Badly startles POKéMON that made COOL appeals.
+// Badly startles POKMON that made COOL appeals.
static void ContestEffect_StartleMonsCoolAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_COOL);
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
-// Badly startles POKéMON that made BEAUTY appeals.
+// Badly startles POKMON that made BEAUTY appeals.
static void ContestEffect_StartleMonsBeautyAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_BEAUTY);
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
-// Badly startles POKéMON that made CUTE appeals.
+// Badly startles POKMON that made CUTE appeals.
static void ContestEffect_StartleMonsCuteAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_CUTE);
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
-// Badly startles POKéMON that made SMART appeals.
+// Badly startles POKMON that made SMART appeals.
static void ContestEffect_StartleMonsSmartAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_SMART);
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
-// Badly startles POKéMON that made TOUGH appeals.
+// Badly startles POKMON that made TOUGH appeals.
static void ContestEffect_StartleMonsToughAppeal(void)
{
JamByMoveCategory(CONTEST_CATEGORY_TOUGH);
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE);
}
-// Makes one POKéMON after the user nervous.
+// Makes one POKMON after the user nervous.
static void ContestEffect_MakeFollowingMonNervous(void)
{
bool32 hitAny = FALSE;
@@ -385,7 +385,7 @@ static void ContestEffect_MakeFollowingMonNervous(void)
SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2);
}
-// Makes all POKéMON after the user nervous.
+// Makes all POKMON after the user nervous.
static void ContestEffect_MakeFollowingMonsNervous(void)
{
u8 numUnnerved = 0;
@@ -427,7 +427,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (eContestantStatus[i].hasJudgesAttention && IsContestantAllowedToCombo(i))
- oddsMod[i] = gComboStarterLookupTable[gContestMoves[eContestantStatus[i].prevMove].comboStarterId] * 10;
+ oddsMod[i] = gContestMoves[eContestantStatus[i].prevMove].comboStarterId == 0 ? 0 : 10;
else
oddsMod[i] = 0;
oddsMod[i] -= (eContestantStatus[i].condition / 10) * 10;
@@ -492,7 +492,7 @@ static void ContestEffect_WorsenConditionOfPrevMons(void)
SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED);
}
-// Badly startles POKéMON in good condition.
+// Badly startles POKMON in good condition.
static void ContestEffect_BadlyStartlesMonsInGoodCondition(void)
{
u8 numHit = 0;
@@ -891,7 +891,7 @@ static void ContestEffect_ExciteAudienceInAnyContest(void)
}
}
-// Badly startles all POKéMON that made good appeals.
+// Badly startles all POKMON that made good appeals.
static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void)
{
int i;
diff --git a/src/contest_util.c b/src/contest_util.c
index 5fc39a792d..79bf09eb2e 100644
--- a/src/contest_util.c
+++ b/src/contest_util.c
@@ -196,7 +196,7 @@ static const struct OamData sOamData_ResultsTextWindow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -242,7 +242,7 @@ static const struct OamData sOamData_Confetti =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -365,7 +365,7 @@ static const struct OamData sOamData_WirelessIndicatorWindow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -1180,7 +1180,7 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId)
spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + OBJ_VRAM0);
for (i = 1; i < (int)ARRAY_COUNT(spriteTilePtrs); i++)
- spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0);
+ spriteTilePtrs[i] = (void *)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0);
for (i = 0; i < (int)ARRAY_COUNT(spriteTilePtrs); i++)
CpuFill32(0, spriteTilePtrs[i], 0x400);
@@ -2113,7 +2113,7 @@ static void Task_StartContest(u8 taskId)
void StartContest(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
CreateTask(Task_StartContest, 10);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
}
@@ -2134,7 +2134,7 @@ static void Task_StartShowContestResults(u8 taskId)
void ShowContestResults(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
CreateTask(Task_StartShowContestResults, 10);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
}
@@ -2147,7 +2147,7 @@ void GetContestPlayerId(void)
void ContestLinkTransfer(u8 category)
{
u8 newTaskId;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
newTaskId = CreateTask(Task_LinkContest_Init, 0);
SetTaskFuncWithFollowupFunc(newTaskId, Task_LinkContest_Init, Task_StartCommunication);
gTasks[newTaskId].data[9] = category;
@@ -2249,8 +2249,8 @@ void Task_LinkContest_FinalizeConnection(u8 taskId)
DestroyTask(taskId);
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, WARP_ID_NONE);
- ScriptContext2_Disable();
- EnableBothScriptContexts();
+ UnlockPlayerFieldControls();
+ ScriptContext_Enable();
}
}
@@ -2265,8 +2265,8 @@ static void Task_LinkContest_WaitDisconnect(u8 taskId)
if (!gReceivedRemoteLinkPlayers)
{
DestroyTask(taskId);
- ScriptContext2_Disable();
- EnableBothScriptContexts();
+ UnlockPlayerFieldControls();
+ ScriptContext_Enable();
}
}
@@ -2620,7 +2620,7 @@ static void Task_ShowContestEntryMonPic(u8 taskId)
break;
case 1:
task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
- SetStandardWindowBorderStyle(task->data[5], 1);
+ SetStandardWindowBorderStyle(task->data[5], TRUE);
task->data[0]++;
break;
case 2:
@@ -2707,7 +2707,7 @@ static void Task_LinkContestWaitForConnection(u8 taskId)
default:
if (IsLinkTaskFinished() == 1)
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
break;
diff --git a/src/credits.c b/src/credits.c
index 138ae30df6..958639e465 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -287,7 +287,7 @@ static const struct OamData sOamData_MonBg =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h
index 58b990c738..62f3802a5c 100644
--- a/src/data/battle_anim.h
+++ b/src/data/battle_anim.h
@@ -1014,8 +1014,16 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_Pencil, 0x0200, ANIM_TAG_PENCIL},
{gBattleAnimSpriteGfx_AirWave, 0x0100, ANIM_TAG_AIR_WAVE},
{gBattleAnimSpriteGfx_Orb, 0x0200, ANIM_TAG_ORB},
+ #if B_NEW_SWORD_PARTICLE
+ {gBattleAnimSpriteGfx_NewSword, 0x0400, ANIM_TAG_SWORD},
+ #else
{gBattleAnimSpriteGfx_Sword, 0x0400, ANIM_TAG_SWORD},
+ #endif
+ #if B_NEW_LEECH_SEED_PARTICLE
+ {gBattleAnimSpriteGfx_NewLeechSeed, 0x0180, ANIM_TAG_SEED},
+ #else
{gBattleAnimSpriteGfx_Seed, 0x0180, ANIM_TAG_SEED},
+ #endif
{gBattleAnimSpriteGfx_Explosion6, 0x0800, ANIM_TAG_EXPLOSION_6},
{gBattleAnimSpriteGfx_PinkOrb, 0x0020, ANIM_TAG_PINK_ORB},
{gBattleAnimSpriteGfx_Gust, 0x0400, ANIM_TAG_GUST},
@@ -1038,7 +1046,11 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_HitDuplicate, 0x0A00, ANIM_TAG_HIT_DUPLICATE},
{gBattleAnimSpriteGfx_Leer, 0x0A00, ANIM_TAG_LEER},
{gBattleAnimSpriteGfx_BlueBurst, 0x0A00, ANIM_TAG_BLUE_BURST},
+ #if B_NEW_EMBER_PARTICLES
+ {gBattleAnimSpriteGfx_NewEmbers, 0x0A00, ANIM_TAG_SMALL_EMBER},
+ #else
{gBattleAnimSpriteGfx_SmallEmber, 0x0A00, ANIM_TAG_SMALL_EMBER},
+ #endif
{gBattleAnimSpriteGfx_GraySmoke, 0x0A00, ANIM_TAG_GRAY_SMOKE},
{gBattleAnimSpriteGfx_BlueStar, 0x0E00, ANIM_TAG_BLUE_STAR},
{gBattleAnimSpriteGfx_BubbleBurst, 0x0380, ANIM_TAG_BUBBLE_BURST},
@@ -1067,12 +1079,20 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_RedFist, 0x0200, ANIM_TAG_RED_FIST},
{gBattleAnimSpriteGfx_SlamHit, 0x1000, ANIM_TAG_SLAM_HIT},
{gBattleAnimSpriteGfx_Ring, 0x0180, ANIM_TAG_RING},
+ #if NEW_ROCKS_PARTICLE
+ {gBattleAnimSpriteGfx_NewRocks, 0x0C00, ANIM_TAG_ROCKS},
+ #else
{gBattleAnimSpriteGfx_Rocks, 0x0C00, ANIM_TAG_ROCKS},
+ #endif
{gBattleAnimSpriteGfx_Z, 0x0100, ANIM_TAG_Z},
{gBattleAnimSpriteGfx_YellowUnk2, 0x0040, ANIM_TAG_YELLOW_UNK_2},
{gBattleAnimSpriteGfx_AirSlash, 0x0180, ANIM_TAG_AIR_SLASH},
{gBattleAnimSpriteGfx_SpinningGreenOrbs, 0x0800, ANIM_TAG_SPINNING_GREEN_ORBS},
+ #if B_NEW_LEAF_PARTICLE
+ {gBattleAnimSpriteGfx_NewLeaf, 0x0480, ANIM_TAG_LEAF},
+ #else
{gBattleAnimSpriteGfx_Leaf, 0x0480, ANIM_TAG_LEAF},
+ #endif
{gBattleAnimSpriteGfx_Finger, 0x0200, ANIM_TAG_FINGER},
{gBattleAnimSpriteGfx_PoisonPowder, 0x0200, ANIM_TAG_POISON_POWDER},
{gBattleAnimSpriteGfx_BrownTriangle, 0x0100, ANIM_TAG_BROWN_TRIANGLE},
@@ -1136,7 +1156,11 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_Shock2, 0x0600, ANIM_TAG_SHOCK_2},
{gBattleAnimSpriteGfx_ClosingEye2, 0x0200, ANIM_TAG_CLOSING_EYE_2},
{gBattleAnimSpriteGfx_MetalBall, 0x0080, ANIM_TAG_METAL_BALL},
+ #if NEW_SUBSTITUTE_PARTICLE
+ {gBattleAnimSpriteGfx_NewSubstituteFront, 0x0200, ANIM_TAG_MONSTER_DOLL},
+ #else
{gBattleAnimSpriteGfx_MonsterDoll, 0x0200, ANIM_TAG_MONSTER_DOLL},
+ #endif
{gBattleAnimSpriteGfx_Whirlwind, 0x0800, ANIM_TAG_WHIRLWIND},
{gBattleAnimSpriteGfx_Whirlwind2, 0x0080, ANIM_TAG_WHIRLWIND_2},
{gBattleAnimSpriteGfx_Explosion4, 0x0a00, ANIM_TAG_EXPLOSION_4},
@@ -1148,11 +1172,19 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_CircleImpact, 0x0020, ANIM_TAG_CIRCLE_IMPACT},
{gBattleAnimSpriteGfx_Scratch, 0x0a00, ANIM_TAG_SCRATCH},
{gBattleAnimSpriteGfx_Cut, 0x0800, ANIM_TAG_CUT},
+ #if B_NEW_TEETH_PARTICLE
+ {gBattleAnimSpriteGfx_NewTeeth, 0x0800, ANIM_TAG_SHARP_TEETH},
+ #else
{gBattleAnimSpriteGfx_SharpTeeth, 0x0800, ANIM_TAG_SHARP_TEETH},
+ #endif
{gBattleAnimSpriteGfx_RainbowRings, 0x00c0, ANIM_TAG_RAINBOW_RINGS},
{gBattleAnimSpriteGfx_IceCrystals, 0x01c0, ANIM_TAG_ICE_CRYSTALS},
{gBattleAnimSpriteGfx_IceSpikes, 0x0100, ANIM_TAG_ICE_SPIKES},
+ #if B_NEW_HANDS_FEET_PARTICLE
+ {gBattleAnimSpriteGfx_NewHandsAndFeet, 0x0800, ANIM_TAG_HANDS_AND_FEET},
+ #else
{gBattleAnimSpriteGfx_HandsAndFeet, 0x0800, ANIM_TAG_HANDS_AND_FEET},
+ #endif
{gBattleAnimSpriteGfx_MistCloud, 0x0200, ANIM_TAG_MIST_CLOUD},
{gBattleAnimSpriteGfx_Clamp, 0x0800, ANIM_TAG_CLAMP},
{gBattleAnimSpriteGfx_Bubble, 0x0180, ANIM_TAG_BUBBLE},
@@ -1161,11 +1193,19 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_WaterOrb, 0x0200, ANIM_TAG_WATER_ORB},
{gBattleAnimSpriteGfx_PoisonBubble, 0x0180, ANIM_TAG_POISON_BUBBLE},
{gBattleAnimSpriteGfx_ToxicBubble, 0x0400, ANIM_TAG_TOXIC_BUBBLE},
+ #if B_NEW_SPIKES_PARTICLE
+ {gBattleAnimSpriteGfx_NewSpikes, 0x0080, ANIM_TAG_SPIKES},
+ #else
{gBattleAnimSpriteGfx_Spikes, 0x0080, ANIM_TAG_SPIKES},
+ #endif
{gBattleAnimSpriteGfx_HornHit2, 0x0100, ANIM_TAG_HORN_HIT_2},
{gBattleAnimSpriteGfx_AirWave2, 0x0100, ANIM_TAG_AIR_WAVE_2},
{gBattleAnimSpriteGfx_SmallBubbles, 0x0140, ANIM_TAG_SMALL_BUBBLES},
+ #if B_NEW_FLY_BUBBLE_PARTICLE
+ {gBattleAnimSpriteGfx_NewFly, 0x0800, ANIM_TAG_ROUND_SHADOW},
+ #else
{gBattleAnimSpriteGfx_RoundShadow, 0x0800, ANIM_TAG_ROUND_SHADOW},
+ #endif
{gBattleAnimSpriteGfx_Sunlight, 0x0200, ANIM_TAG_SUNLIGHT},
{gBattleAnimSpriteGfx_Spore, 0x0100, ANIM_TAG_SPORE},
{gBattleAnimSpriteGfx_Flower, 0x00a0, ANIM_TAG_FLOWER},
@@ -1196,7 +1236,11 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_FocusEnergy, 0x0400, ANIM_TAG_FOCUS_ENERGY},
{gBattleAnimSpriteGfx_SphereToCube, 0x0a00, ANIM_TAG_SPHERE_TO_CUBE},
{gBattleAnimSpriteGfx_Tendrils, 0x1000, ANIM_TAG_TENDRILS},
+ #if B_NEW_MEAN_LOOK_PARTICLE
+ {gBattleAnimSpriteGfx_NewEye, 0x0800, ANIM_TAG_EYE},
+ #else
{gBattleAnimSpriteGfx_Eye, 0x0800, ANIM_TAG_EYE},
+ #endif
{gBattleAnimSpriteGfx_WhiteShadow, 0x0400, ANIM_TAG_WHITE_SHADOW},
{gBattleAnimSpriteGfx_TealAlert, 0x0200, ANIM_TAG_TEAL_ALERT},
{gBattleAnimSpriteGfx_OpeningEye, 0x0800, ANIM_TAG_OPENING_EYE},
@@ -1208,7 +1252,11 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_Spiral, 0x0800, ANIM_TAG_SPIRAL},
{gBattleAnimSpriteGfx_SnoreZ, 0x0200, ANIM_TAG_SNORE_Z},
{gBattleAnimSpriteGfx_Explosion, 0x0800, ANIM_TAG_EXPLOSION},
+ #if B_NEW_CURSE_NAIL_PARTICLE
+ {gBattleAnimSpriteGfx_NewNail, 0x0400, ANIM_TAG_NAIL},
+ #else
{gBattleAnimSpriteGfx_Nail, 0x0400, ANIM_TAG_NAIL},
+ #endif
{gBattleAnimSpriteGfx_GhostlySpirit, 0x0200, ANIM_TAG_GHOSTLY_SPIRIT},
{gBattleAnimSpriteGfx_WarmRock, 0x0a80, ANIM_TAG_WARM_ROCK},
{gBattleAnimSpriteGfx_BreakingEgg, 0x0600, ANIM_TAG_BREAKING_EGG},
@@ -1235,7 +1283,11 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_Roots, 0x0800, ANIM_TAG_ROOTS},
{gBattleAnimSpriteGfx_ItemBag, 0x0200, ANIM_TAG_ITEM_BAG},
{gBattleAnimSpriteGfx_JaggedMusicNote, 0x0400, ANIM_TAG_JAGGED_MUSIC_NOTE},
+ #if B_NEW_BATON_PASS_BALL_PARTICLE
+ {gBattleAnimSpriteGfx_NewPokeball, 0x0080, ANIM_TAG_POKEBALL},
+ #else
{gBattleAnimSpriteGfx_Pokeball, 0x0080, ANIM_TAG_POKEBALL},
+ #endif
{gBattleAnimSpriteGfx_Spotlight, 0x0800, ANIM_TAG_SPOTLIGHT},
{gBattleAnimSpriteGfx_LetterZ, 0x0200, ANIM_TAG_LETTER_Z},
{gBattleAnimSpriteGfx_RapidSpin, 0x0300, ANIM_TAG_RAPID_SPIN},
@@ -1250,7 +1302,11 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_PinkPetal, 0x0080, ANIM_TAG_PINK_PETAL},
{gBattleAnimSpriteGfx_PainSplit, 0x0180, ANIM_TAG_PAIN_SPLIT},
{gBattleAnimSpriteGfx_Confetti, 0x0180, ANIM_TAG_CONFETTI},
+ #if B_NEW_MORNING_SUN_STAR_PARTICLE
+ {gBattleAnimSpriteGfx_NewGreenStar, 0x0200, ANIM_TAG_GREEN_STAR},
+ #else
{gBattleAnimSpriteGfx_GreenStar, 0x0200, ANIM_TAG_GREEN_STAR},
+ #endif
{gBattleAnimSpriteGfx_PinkCloud, 0x0200, ANIM_TAG_PINK_CLOUD},
{gBattleAnimSpriteGfx_SweatDrop, 0x0020, ANIM_TAG_SWEAT_DROP},
{gBattleAnimSpriteGfx_GuardRing, 0x0400, ANIM_TAG_GUARD_RING},
@@ -1298,6 +1354,104 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_Slash, 0x0800, ANIM_TAG_SLASH_2},
{gBattleAnimSpriteGfx_SlamHit, 0x1000, ANIM_TAG_WHIP_HIT},
{gBattleAnimSpriteGfx_GoldRing, 0x0100, ANIM_TAG_BLUE_RING_2},
+ {gBattleAnimSpriteGfx_WhiteStreak, 0x0200, ANIM_TAG_WHITE_STREAK},
+ {gBattleAnimSpriteGfx_PurpleJab, 0x0100, ANIM_TAG_PURPLE_JAB},
+ {gBattleAnimSpriteGfx_Spikes, 0x0080, ANIM_TAG_TOXIC_SPIKES},
+ {gBattleAnimSpriteGfx_EnergyBall, 0x0200, ANIM_TAG_ENERGY_BALL},
+ {gBattleAnimSpriteGfx_SeedBrown, 0x0080, ANIM_TAG_SEED_BROWN},
+ {gBattleAnimSpriteGfx_Feint, 0x0800, ANIM_TAG_FEINT},
+ {gBattleAnimSpriteGfx_MegaStone, 0x800, ANIM_TAG_MEGA_STONE},
+ {gBattleAnimSpriteGfx_MegaSymbol, 0x0200, ANIM_TAG_MEGA_SYMBOL},
+ {gBattleAnimSpriteGfx_MegaParticles, 0x0180, ANIM_TAG_MEGA_PARTICLES},
+ {gBattleAnimSpriteGfx_TrumpCard, 0x0180, ANIM_TAG_TRUMP_CARD},
+ {gBattleAnimSpriteGfx_TrumpCardParticles, 0x0060, ANIM_TAG_TRUMP_CARD_PARTICLES},
+ {gBattleAnimSpriteGfx_Accupressure, 0x0200, ANIM_TAG_ACCUPRESSURE},
+ {gBattleAnimSpriteGfx_WringOut, 0x0200, ANIM_TAG_WRING_OUT},
+ {gBattleAnimSpriteGfx_ColoredOrbs, 0x0300, ANIM_TAG_COLORED_ORBS},
+ {gBattleAnimSpriteGfx_WorrySeed, 0x0080, ANIM_TAG_WORRY_SEED},
+ {gBattleAnimSpriteGfx_SmallCloud, 0x0080, ANIM_TAG_SMALL_CLOUD},
+ {gBattleAnimSpriteGfx_AttackOrder, 0x0480, ANIM_TAG_ATTACK_ORDER},
+ {gBattleAnimSpriteGfx_DragonPulse, 0x0100, ANIM_TAG_DRAGON_PULSE},
+ {gBattleAnimSpriteGfx_WoodHammer, 0x0C00, ANIM_TAG_WOOD_HAMMER},
+ {gBattleAnimSpriteGfx_PsychoCut, 0x0200, ANIM_TAG_PSYCHO_CUT},
+ {gBattleAnimSpriteGfx_PowerGem, 0x0080, ANIM_TAG_POWER_GEM},
+ {gBattleAnimSpriteGfx_StoneEdge, 0x0A00, ANIM_TAG_STONE_EDGE},
+ {gBattleAnimSpriteGfx_StealthRock, 0x0080, ANIM_TAG_STEALTH_ROCK},
+ {gBattleAnimSpriteGfx_PoisonJab, 0x0080, ANIM_TAG_POISON_JAB},
+ {gBattleAnimSpriteGfx_PoisonBubble, 0x0180, ANIM_TAG_GREEN_POISON_BUBBLE},
+ {gBattleAnimSpriteGfx_FlashCannonBall, 0x200, ANIM_TAG_FLASH_CANNON_BALL},
+ {gBattleAnimSpriteGfx_WaterGun, 0x180, ANIM_TAG_WATER_GUN},
+ {gBattleAnimSpriteGfx_Punishment, 0xa00, ANIM_TAG_PUNISHMENT_BLADES},
+ {gBattleAnimSpriteGfx_QuickGuard, 0x200, ANIM_TAG_QUICK_GUARD_HAND},
+ {gBattleAnimSpriteGfx_ShellRight, 0x800, ANIM_TAG_SHELL_RIGHT},
+ {gBattleAnimSpriteGfx_ShellLeft, 0x800, ANIM_TAG_SHELL_LEFT},
+ {gBattleAnimSpriteGfx_RazorShell, 0x200, ANIM_TAG_RAZOR_SHELL},
+ {gBattleAnimSpriteGfx_HydroPump, 0x200, ANIM_TAG_HYDRO_PUMP},
+ {gBattleAnimSpriteGfx_Brine, 0xc00, ANIM_TAG_BRINE},
+ {gBattleAnimSpriteGfx_Gear, 0x200, ANIM_TAG_GEAR},
+ {gBattleAnimSpriteGfx_AssuranceHand, 0x200, ANIM_TAG_ASSURANCE_HAND},
+ {gBattleAnimSpriteGfx_AcupressureFinger, 0x200, ANIM_TAG_ACUPRESSURE_FINGER},
+ {gBattleAnimSpriteGfx_Fishies, 0x480, ANIM_TAG_WISHIWASHI_FISH},
+ {gBattleAnimSpriteGfx_ZygardeHexes, 0x480, ANIM_TAG_ZYGARDE_HEXES},
+ {gBattleAnimSpriteGfx_AuraSphere, 0x200, ANIM_TAG_AURA_SPHERE},
+ {gBattleAnimSpriteGfx_OmegaStone, 0x800, ANIM_TAG_OMEGA_STONE},
+ {gBattleAnimSpriteGfx_AlphaStone, 0x800, ANIM_TAG_ALPHA_STONE},
+ {gBattleAnimSpriteGfx_BerryNormal, 0x400, ANIM_TAG_BERRY_NORMAL},
+ {gBattleAnimSpriteGfx_BerryEaten, 0x200, ANIM_TAG_BERRY_EATEN},
+ {gBattleAnimSpriteGfx_PurpleDrake, 0x800, ANIM_TAG_DRAGON_ASCENT},
+ {gBattleAnimSpriteGfx_PinkDiamond, 0x40, ANIM_TAG_PINK_DIAMOND},
+ {gBattleAnimSpriteGfx_SteamEruption, 0xa00, ANIM_TAG_STEAM_ERUPTION},
+ {gBattleAnimSpriteGfx_Confide, 0x800, ANIM_TAG_CONFIDE},
+ {gBattleAnimSpriteGfx_Arrows, 0x480, ANIM_TAG_VERTICAL_HEX},
+ {NULL, 0x0, ANIM_TAG_UNAVAILABLE_1},
+ {NULL, 0x0, ANIM_TAG_UNAVAILABLE_2},
+ {gBattleAnimSpriteGfx_PowerTrick, 0x800, ANIM_TAG_POWER_TRICK},
+ {gBattleAnimSpriteGfx_ChainLink, 0x200, ANIM_TAG_CHAIN_LINK},
+ {gBattleAnimSpriteGfx_Anchor, 0x200, ANIM_TAG_ANCHOR},
+ {gBattleAnimSpriteGfx_HorseshoeFist, 0x800, ANIM_TAG_HORSESHOE_SIDE_FIST},
+ {gBattleAnimSpriteGfx_PurpleDrake, 0x800, ANIM_TAG_DRAGON_ASCENT_FOE},
+ {gBattleAnimSpriteGfx_CraftyShield, 0x80, ANIM_TAG_CRAFTY_SHIELD},
+ {gBattleAnimSpriteGfx_BlacephalonHead, 0x200, ANIM_TAG_BLACEPHALON_HEAD},
+ {gBattleAnimSpriteGfx_FairyLockChains, 0x400, ANIM_TAG_FAIRY_LOCK_CHAINS},
+ {gBattleAnimSpriteGfx_LightningRain, 0x700, ANIM_TAG_IONS},
+ {gBattleAnimSpriteGfx_Chop, 0x200, ANIM_TAG_CHOP},
+ {gBattleAnimSpriteGfx_HeartStamp, 0x400, ANIM_TAG_HEART_STAMP},
+ {gBattleAnimSpriteGfx_HornLeech, 0x200, ANIM_TAG_HORN_LEECH},
+ {gBattleAnimSpriteGfx_Steamroller, 0x800, ANIM_TAG_STEAMROLLER},
+ {gBattleAnimSpriteGfx_HoopaHand, 0x80, ANIM_TAG_HOOPA_HAND},
+ {gBattleAnimSpriteGfx_HoopaRing, 0x200, ANIM_TAG_HOOPA_RING},
+ {gBattleAnimSpriteGfx_MetalBits, 0x140, ANIM_TAG_METAL_BITS},
+ {gBattleAnimSpriteGfx_RocksSmall, 0x140, ANIM_TAG_SMALL_ROCK},
+ {gBattleAnimSpriteGfx_SpiritShackleArrow, 0x200, ANIM_TAG_SPIRIT_ARROW},
+ {gBattleAnimSpriteGfx_NecrozmaStar, 0x200, ANIM_TAG_ULTRA_BURST_SYMBOL},
+ {gBattleAnimSpriteGfx_ZMoveSymbol, 0x800, ANIM_TAG_Z_MOVE_SYMBOL},
+ {gBattleAnimSpriteGfx_BigRock, 0x800, ANIM_TAG_REALLY_BIG_ROCK},
+ {gBattleAnimSpriteGfx_Cacoon, 0x800, ANIM_TAG_COCOON},
+ {gBattleAnimSpriteGfx_Drill, 0x800, ANIM_TAG_CORKSCREW},
+ {gBattleAnimSpriteGfx_GigavoltHavocSpear, 0x800, ANIM_TAG_HAVOC_SPEAR},
+ {gBattleAnimSpriteGfx_PurpleDrake, 0x800, ANIM_TAG_PURPLE_DRAKE},
+ {gBattleAnimSpriteGfx_MudBomb, 0x800, ANIM_TAG_MUD_BOMB},
+ {gBattleAnimSpriteGfx_Branch, 0x200, ANIM_TAG_BRANCH},
+ {gBattleAnimSpriteGfx_Apple, 0x200, ANIM_TAG_APPLE},
+ {gBattleAnimSpriteGfx_Obstruct, 0x200, ANIM_TAG_OBSTRUCT_CROSS},
+ {gBattleAnimSpriteGfx_PoisonColumn, 0x2000, ANIM_TAG_POISON_COLUMN},
+ {gBattleAnimSpriteGfx_PoisonColumn, 0x2000, ANIM_TAG_GARBAGE_COLUMN},
+ {gBattleAnimSpriteGfx_LargeSpike, 0x1000, ANIM_TAG_LARGE_SPIKE},
+ {gBattleAnimSpriteGfx_DragonPulseRing, 0x200, ANIM_TAG_DRAGON_PULSE_RING},
+ {gBattleAnimSpriteGfx_StonePillar, 0x2000, ANIM_TAG_STONE_PILLAR},
+ {gBattleAnimSpriteGfx_Mushroom, 0x800, ANIM_TAG_MUSHROOM},
+ {gBattleAnimSpriteGfx_GoldenApple, 0x800, ANIM_TAG_GOLDEN_APPLE},
+ {gBattleAnimSpriteGfx_IceRock, 0x2800, ANIM_TAG_ICE_ROCK},
+ {gBattleAnimSpriteGfx_Tornado, 0x1800, ANIM_TAG_TORNADO},
+ {gBattleAnimSpriteGfx_StraightBeam, 0x180, ANIM_TAG_STRAIGHT_BEAM},
+ {gBattleAnimSpriteGfx_DreepyMissile, 0x200, ANIM_TAG_DREEPY},
+ {gBattleAnimSpriteGfx_IceRock, 0x1800, ANIM_TAG_ICE_ROCK_SINGLE},
+ {gBattleAnimSpriteGfx_StonePillar, 0x1800, ANIM_TAG_STONE_PILLAR_MULTI},
+ {gBattleAnimSpriteGfx_AlphaSymbol, 0x0200, ANIM_TAG_ALPHA_SYMBOL},
+ {gBattleAnimSpriteGfx_OmegaSymbol, 0x0200, ANIM_TAG_OMEGA_SYMBOL},
+ {gBattleAnimSpriteGfx_PrimalParticles, 0x0180, ANIM_TAG_PRIMAL_PARTICLES},
+ {gBattleAnimSpriteGfx_Orbs, 0x0180, ANIM_TAG_STEEL_BEAM},
+ {gBattleAnimSpriteGfx_AuraSphere, 0x200, ANIM_TAG_POLTERGEIST},
};
const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
@@ -1307,8 +1461,16 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_Pencil, ANIM_TAG_PENCIL},
{gBattleAnimSpritePal_AirWave, ANIM_TAG_AIR_WAVE},
{gBattleAnimSpritePal_Orb, ANIM_TAG_ORB},
+ #if B_NEW_SWORD_PARTICLE
+ {gBattleAnimSpritePal_NewSword, ANIM_TAG_SWORD},
+ #else
{gBattleAnimSpritePal_Sword, ANIM_TAG_SWORD},
+ #endif
+ #if B_NEW_LEECH_SEED_PARTICLE
+ {gBattleAnimSpritePal_NewLeechSeed, ANIM_TAG_SEED},
+ #else
{gBattleAnimSpritePal_Seed, ANIM_TAG_SEED},
+ #endif
{gBattleAnimSpritePal_Explosion6, ANIM_TAG_EXPLOSION_6},
{gBattleAnimSpritePal_PinkOrb, ANIM_TAG_PINK_ORB},
{gBattleAnimSpritePal_Gust, ANIM_TAG_GUST},
@@ -1322,7 +1484,11 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_BlackSmoke, ANIM_TAG_BLACK_BALL},
{gBattleAnimSpritePal_Conversion, ANIM_TAG_CONVERSION},
{gBattleAnimSpritePal_Glass, ANIM_TAG_GLASS},
+ #if B_NEW_HORN_ATTACK_PARTICLE
+ {gBattleAnimSpritePal_NewHornHit, ANIM_TAG_HORN_HIT},
+ #else
{gBattleAnimSpritePal_HornHit, ANIM_TAG_HORN_HIT},
+ #endif
{gBattleAnimSpritePal_Hit, ANIM_TAG_HIT},
{gBattleAnimSpritePal_Hit2, ANIM_TAG_HIT_2},
{gBattleAnimSpritePal_BlueShards, ANIM_TAG_BLUE_SHARDS},
@@ -1331,7 +1497,11 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_HitDuplicate, ANIM_TAG_HIT_DUPLICATE},
{gBattleAnimSpritePal_Leer, ANIM_TAG_LEER},
{gBattleAnimSpritePal_BlueBurst, ANIM_TAG_BLUE_BURST},
+ #if B_NEW_EMBER_PARTICLES
+ {gBattleAnimSpritePal_NewEmbers, ANIM_TAG_SMALL_EMBER},
+ #else
{gBattleAnimSpritePal_SmallEmber, ANIM_TAG_SMALL_EMBER},
+ #endif
{gBattleAnimSpritePal_GraySmoke, ANIM_TAG_GRAY_SMOKE},
{gBattleAnimSpritePal_BlueStar, ANIM_TAG_BLUE_STAR},
{gBattleAnimSpritePal_BubbleBurst, ANIM_TAG_BUBBLE_BURST},
@@ -1360,12 +1530,20 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_HumanoidFoot, ANIM_TAG_RED_FIST},
{gBattleAnimSpritePal_SlamHit, ANIM_TAG_SLAM_HIT},
{gBattleAnimSpritePal_Ring, ANIM_TAG_RING},
+ #if NEW_ROCKS_PARTICLE
+ {gBattleAnimSpritePal_NewRocks, ANIM_TAG_ROCKS},
+ #else
{gBattleAnimSpritePal_Rocks, ANIM_TAG_ROCKS},
+ #endif
{gBattleAnimSpritePal_Z, ANIM_TAG_Z},
{gBattleAnimSpritePal_YellowUnk2, ANIM_TAG_YELLOW_UNK_2},
{gBattleAnimSpritePal_AirSlash, ANIM_TAG_AIR_SLASH},
{gBattleAnimSpritePal_SpinningGreenOrbs, ANIM_TAG_SPINNING_GREEN_ORBS},
+ #if B_NEW_LEAF_PARTICLE
+ {gBattleAnimSpritePal_NewLeaf, ANIM_TAG_LEAF},
+ #else
{gBattleAnimSpritePal_Leaf, ANIM_TAG_LEAF},
+ #endif
{gBattleAnimSpritePal_Finger, ANIM_TAG_FINGER},
{gBattleAnimSpritePal_PoisonPowder, ANIM_TAG_POISON_POWDER},
{gBattleAnimSpritePal_BrownTriangle, ANIM_TAG_BROWN_TRIANGLE},
@@ -1429,7 +1607,11 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_Shock2, ANIM_TAG_SHOCK_2},
{gBattleAnimSpritePal_ClosingEye2, ANIM_TAG_CLOSING_EYE_2},
{gBattleAnimSpritePal_MetalBall, ANIM_TAG_METAL_BALL},
+ #if NEW_SUBSTITUTE_PARTICLE
+ {gBattleAnimSpritePal_NewSubstituteFront, ANIM_TAG_MONSTER_DOLL},
+ #else
{gBattleAnimSpritePal_MonsterDoll, ANIM_TAG_MONSTER_DOLL},
+ #endif
{gBattleAnimSpritePal_Whirlwind, ANIM_TAG_WHIRLWIND},
{gBattleAnimSpritePal_Whirlwind, ANIM_TAG_WHIRLWIND_2},
{gBattleAnimSpritePal_Explosion4, ANIM_TAG_EXPLOSION_4},
@@ -1437,15 +1619,27 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_Tongue, ANIM_TAG_TONGUE},
{gBattleAnimSpritePal_Smoke, ANIM_TAG_SMOKE},
{gBattleAnimSpritePal_Smoke, ANIM_TAG_SMOKE_2},
+ #if B_NEW_IMPACT_PALETTE
+ {gBattleAnimSpritePal_NewImpact, ANIM_TAG_IMPACT},
+ #else
{gBattleAnimSpritePal_Impact, ANIM_TAG_IMPACT},
+ #endif
{gBattleAnimSpritePal_CircleImpact, ANIM_TAG_CIRCLE_IMPACT},
{gBattleAnimSpritePal_Impact, ANIM_TAG_SCRATCH},
{gBattleAnimSpritePal_Impact, ANIM_TAG_CUT},
+ #if B_NEW_TEETH_PARTICLE
+ {gBattleAnimSpritePal_NewTeeth, ANIM_TAG_SHARP_TEETH},
+ #else
{gBattleAnimSpritePal_SharpTeeth, ANIM_TAG_SHARP_TEETH},
+ #endif
{gBattleAnimSpritePal_RainbowRings, ANIM_TAG_RAINBOW_RINGS},
{gBattleAnimSpritePal_IceCrystals, ANIM_TAG_ICE_CRYSTALS},
{gBattleAnimSpritePal_IceCrystals, ANIM_TAG_ICE_SPIKES},
+ #if B_NEW_HANDS_FEET_PARTICLE
+ {gBattleAnimSpritePal_NewHandsAndFeet, ANIM_TAG_HANDS_AND_FEET},
+ #else
{gBattleAnimSpritePal_HandsAndFeet, ANIM_TAG_HANDS_AND_FEET},
+ #endif
{gBattleAnimSpritePal_MistCloud, ANIM_TAG_MIST_CLOUD},
{gBattleAnimSpritePal_SharpTeeth, ANIM_TAG_CLAMP},
{gBattleAnimSpritePal_RainDrops, ANIM_TAG_BUBBLE},
@@ -1454,11 +1648,19 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_WaterImpact, ANIM_TAG_WATER_ORB},
{gBattleAnimSpritePal_PoisonBubble, ANIM_TAG_POISON_BUBBLE},
{gBattleAnimSpritePal_PoisonBubble, ANIM_TAG_TOXIC_BUBBLE},
+ #if B_NEW_SPIKES_PARTICLE
+ {gBattleAnimSpritePal_NewSpikes, ANIM_TAG_SPIKES},
+ #else
{gBattleAnimSpritePal_Spikes, ANIM_TAG_SPIKES},
+ #endif
{gBattleAnimSpritePal_HornHit2, ANIM_TAG_HORN_HIT_2},
{gBattleAnimSpritePal_AirWave2, ANIM_TAG_AIR_WAVE_2},
{gBattleAnimSpritePal_SmallBubbles, ANIM_TAG_SMALL_BUBBLES},
+ #if B_NEW_FLY_BUBBLE_PARTICLE
+ {gBattleAnimSpritePal_NewFly, ANIM_TAG_ROUND_SHADOW},
+ #else
{gBattleAnimSpritePal_RoundShadow, ANIM_TAG_ROUND_SHADOW},
+ #endif
{gBattleAnimSpritePal_Sunlight, ANIM_TAG_SUNLIGHT},
{gBattleAnimSpritePal_Spore, ANIM_TAG_SPORE},
{gBattleAnimSpritePal_Flower, ANIM_TAG_FLOWER},
@@ -1489,7 +1691,11 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_FocusEnergy, ANIM_TAG_FOCUS_ENERGY},
{gBattleAnimSpritePal_SphereToCube, ANIM_TAG_SPHERE_TO_CUBE},
{gBattleAnimSpritePal_Tendrils, ANIM_TAG_TENDRILS},
+ #if B_NEW_MEAN_LOOK_PARTICLE
+ {gBattleAnimSpritePal_NewEye, ANIM_TAG_EYE},
+ #else
{gBattleAnimSpritePal_Eye, ANIM_TAG_EYE},
+ #endif
{gBattleAnimSpritePal_WhiteShadow, ANIM_TAG_WHITE_SHADOW},
{gBattleAnimSpritePal_TealAlert, ANIM_TAG_TEAL_ALERT},
{gBattleAnimSpritePal_OpeningEye, ANIM_TAG_OPENING_EYE},
@@ -1528,7 +1734,11 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_Roots, ANIM_TAG_ROOTS},
{gBattleAnimSpritePal_ItemBag, ANIM_TAG_ITEM_BAG},
{gBattleAnimSpritePal_JaggedMusicNote, ANIM_TAG_JAGGED_MUSIC_NOTE},
+ #if B_NEW_BATON_PASS_BALL_PARTICLE
+ {gBattleAnimSpritePal_NewPokeball, ANIM_TAG_POKEBALL},
+ #else
{gBattleAnimSpritePal_Pokeball, ANIM_TAG_POKEBALL},
+ #endif
{gBattleAnimSpritePal_Pokeball, ANIM_TAG_SPOTLIGHT},
{gBattleAnimSpritePal_LetterZ, ANIM_TAG_LETTER_Z},
{gBattleAnimSpritePal_RapidSpin, ANIM_TAG_RAPID_SPIN},
@@ -1543,7 +1753,11 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_PinkPetal, ANIM_TAG_PINK_PETAL},
{gBattleAnimSpritePal_PainSplit, ANIM_TAG_PAIN_SPLIT},
{gBattleAnimSpritePal_Confetti, ANIM_TAG_CONFETTI},
+ #if B_NEW_MORNING_SUN_STAR_PARTICLE
+ {gBattleAnimSpritePal_NewGreenStar, ANIM_TAG_GREEN_STAR},
+ #else
{gBattleAnimSpritePal_GreenStar, ANIM_TAG_GREEN_STAR},
+ #endif
{gBattleAnimSpritePal_PinkCloud, ANIM_TAG_PINK_CLOUD},
{gBattleAnimSpritePal_SweatDrop, ANIM_TAG_SWEAT_DROP},
{gBattleAnimSpritePal_GuardRing, ANIM_TAG_GUARD_RING},
@@ -1591,35 +1805,188 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_Slash2, ANIM_TAG_SLASH_2},
{gBattleAnimSpritePal_WhipHit, ANIM_TAG_WHIP_HIT},
{gBattleAnimSpritePal_BlueRing2, ANIM_TAG_BLUE_RING_2},
+ {gBattleAnimSpritePal_WhiteStreak, ANIM_TAG_WHITE_STREAK},
+ {gBattleAnimSpritePal_PurpleJab, ANIM_TAG_PURPLE_JAB},
+ //new particles
+ {gBattleAnimSpritePal_ToxicSpikes, ANIM_TAG_TOXIC_SPIKES},
+ {gBattleAnimSpritePal_EnergyBall, ANIM_TAG_ENERGY_BALL},
+ {gBattleAnimSpritePal_SeedBrown, ANIM_TAG_SEED_BROWN},
+ {gBattleAnimSpritePal_Feint, ANIM_TAG_FEINT},
+ {gBattleAnimSpritePal_MegaStone, ANIM_TAG_MEGA_STONE},
+ {gBattleAnimSpritePal_MegaSymbol, ANIM_TAG_MEGA_SYMBOL},
+ {gBattleAnimSpritePal_MegaParticles, ANIM_TAG_MEGA_PARTICLES},
+ {gBattleAnimSpritePal_TrumpCard, ANIM_TAG_TRUMP_CARD},
+ {gBattleAnimSpritePal_TrumpCardParticles, ANIM_TAG_TRUMP_CARD_PARTICLES},
+ {gBattleAnimSpritePal_Accupressure, ANIM_TAG_ACCUPRESSURE},
+ {gBattleAnimSpritePal_WringOut, ANIM_TAG_WRING_OUT},
+ {gBattleAnimSpritePal_ColoredOrbs, ANIM_TAG_COLORED_ORBS},
+ {gBattleAnimSpritePal_WorrySeed, ANIM_TAG_WORRY_SEED},
+ {gBattleAnimSpritePal_SmallCloud, ANIM_TAG_SMALL_CLOUD},
+ {gBattleAnimSpritePal_AttackOrder, ANIM_TAG_ATTACK_ORDER},
+ {gBattleAnimSpritePal_DragonPulse, ANIM_TAG_DRAGON_PULSE},
+ {gBattleAnimSpritePal_WoodHammer, ANIM_TAG_WOOD_HAMMER},
+ {gBattleAnimSpritePal_PsychoCut, ANIM_TAG_PSYCHO_CUT},
+ {gBattleAnimSpritePal_PowerGem, ANIM_TAG_POWER_GEM},
+ {gBattleAnimSpritePal_StoneEdge, ANIM_TAG_STONE_EDGE},
+ {gBattleAnimSpritePal_StealthRock, ANIM_TAG_STEALTH_ROCK},
+ {gBattleAnimSpritePal_PoisonJab, ANIM_TAG_POISON_JAB},
+ {gBattleAnimSpritePal_Vine, ANIM_TAG_GREEN_POISON_BUBBLE},
+ {gBattleAnimSpritePal_FlashCannonBall, ANIM_TAG_FLASH_CANNON_BALL},
+ {gBattleAnimSpritePal_WaterGun, ANIM_TAG_WATER_GUN},
+ {gBattleAnimSpritePal_Punishment, ANIM_TAG_PUNISHMENT_BLADES},
+ {gBattleAnimSpritePal_QuickGuard, ANIM_TAG_QUICK_GUARD_HAND},
+ {gBattleAnimSpritePal_ShellLeft, ANIM_TAG_SHELL_RIGHT},
+ {gBattleAnimSpritePal_ShellLeft, ANIM_TAG_SHELL_LEFT},
+ {gBattleAnimSpritePal_RazorShell, ANIM_TAG_RAZOR_SHELL},
+ {gBattleAnimSpritePal_HydroPump, ANIM_TAG_HYDRO_PUMP},
+ {gBattleAnimSpritePal_Brine, ANIM_TAG_BRINE},
+ {gBattleAnimSpritePal_Gear, ANIM_TAG_GEAR},
+ {gBattleAnimSpritePal_AssuranceHand, ANIM_TAG_ASSURANCE_HAND},
+ {gBattleAnimSpritePal_AcupressureFinger, ANIM_TAG_ACUPRESSURE_FINGER},
+ {gBattleAnimSpritePal_Fishies, ANIM_TAG_WISHIWASHI_FISH},
+ {gBattleAnimSpritePal_ZygardeHexes, ANIM_TAG_ZYGARDE_HEXES},
+ {gBattleAnimSpritePal_AuraSphere, ANIM_TAG_AURA_SPHERE},
+ {gBattleAnimSpritePal_OmegaStone, ANIM_TAG_OMEGA_STONE},
+ {gBattleAnimSpritePal_AlphaStone, ANIM_TAG_ALPHA_STONE},
+ {gBattleAnimSpritePal_BerryNormal, ANIM_TAG_BERRY_NORMAL},
+ {gBattleAnimSpritePal_SpacialRendSlices, ANIM_TAG_BERRY_EATEN},
+ {gBattleAnimSpritePal_GreenDrake, ANIM_TAG_DRAGON_ASCENT},
+ {gBattleAnimSpritePal_PinkDiamond, ANIM_TAG_PINK_DIAMOND},
+ {gBattleAnimSpritePal_SteamEruption, ANIM_TAG_STEAM_ERUPTION},
+ {gBattleAnimSpritePal_Confide, ANIM_TAG_CONFIDE},
+ {gBattleAnimSpritePal_FusionFlare, ANIM_TAG_VERTICAL_HEX},
+ {NULL, ANIM_TAG_UNAVAILABLE_1},
+ {NULL, ANIM_TAG_UNAVAILABLE_2},
+ {gBattleAnimSpritePal_PowerTrick, ANIM_TAG_POWER_TRICK},
+ {gBattleAnimSpritePal_ChainLink, ANIM_TAG_CHAIN_LINK},
+ {gBattleAnimSpritePal_NaturalGiftRing, ANIM_TAG_ANCHOR},
+ {gBattleAnimSpritePal_HorseshoeFist, ANIM_TAG_HORSESHOE_SIDE_FIST},
+ {gBattleAnimSpritePal_AvalancheRocks, ANIM_TAG_DRAGON_ASCENT_FOE},
+ {gBattleAnimSpritePal_CraftyShield, ANIM_TAG_CRAFTY_SHIELD},
+ {gBattleAnimSpritePal_BlacephalonHead, ANIM_TAG_BLACEPHALON_HEAD},
+ {gBattleAnimSpritePal_DracoMeteor, ANIM_TAG_FAIRY_LOCK_CHAINS},
+ {gBattleAnimSpritePal_LightningRain, ANIM_TAG_IONS},
+ {gBattleAnimSpritePal_Chop, ANIM_TAG_CHOP},
+ [ANIM_TAG_HEART_STAMP - ANIM_SPRITES_START] = {gBattleAnimSpritePal_HeartStamp, ANIM_TAG_HEART_STAMP},
+ {gBattleAnimSpritePal_HornLeech, ANIM_TAG_HORN_LEECH},
+ {gBattleAnimSpritePal_Steamroller, ANIM_TAG_STEAMROLLER},
+ {gBattleAnimSpritePal_HoopaHand, ANIM_TAG_HOOPA_HAND},
+ {gBattleAnimSpritePal_HoopaRing, ANIM_TAG_HOOPA_RING},
+ {gBattleAnimSpritePal_BlueFlare, ANIM_TAG_METAL_BITS},
+ {gBattleAnimSpritePal_NewRocks, ANIM_TAG_SMALL_ROCK},
+ {gBattleAnimSpritePal_SpiritShackleArrow, ANIM_TAG_SPIRIT_ARROW},
+ {gBattleAnimSpritePal_NecrozmaStar, ANIM_TAG_ULTRA_BURST_SYMBOL},
+ {gBattleAnimSpritePal_ZMoveSymbol, ANIM_TAG_Z_MOVE_SYMBOL},
+ {gBattleAnimSpritePal_BigRock, ANIM_TAG_REALLY_BIG_ROCK},
+ {gBattleAnimSpritePal_Cacoon, ANIM_TAG_COCOON},
+ {gBattleAnimSpritePal_Drill, ANIM_TAG_CORKSCREW},
+ {gBattleAnimSpritePal_GigavoltHavocSpear, ANIM_TAG_HAVOC_SPEAR},
+ {gBattleAnimSpritePal_PurpleDrake, ANIM_TAG_PURPLE_DRAKE},
+ {gBattleAnimSpritePal_MudBomb, ANIM_TAG_MUD_BOMB},
+ {gBattleAnimSpritePal_Branch, ANIM_TAG_BRANCH},
+ {gBattleAnimSpritePal_Apple, ANIM_TAG_APPLE},
+ {gBattleAnimSpritePal_Obstruct, ANIM_TAG_OBSTRUCT_CROSS},
+ {gBattleAnimSpritePal_PoisonColumn, ANIM_TAG_POISON_COLUMN},
+ {gBattleAnimSpritePal_GarbagePoisonPillar, ANIM_TAG_GARBAGE_COLUMN},
+ {gBattleAnimSpritePal_LargeSpike, ANIM_TAG_LARGE_SPIKE},
+ {gBattleAnimSpritePal_DragonPulseRing, ANIM_TAG_DRAGON_PULSE_RING},
+ {gBattleAnimSpritePal_StonePillar, ANIM_TAG_STONE_PILLAR},
+ {gBattleAnimSpritePal_Mushroom, ANIM_TAG_MUSHROOM},
+ {gBattleAnimSpritePal_GoldenApple, ANIM_TAG_GOLDEN_APPLE},
+ {gBattleAnimSpritePal_IceRock, ANIM_TAG_ICE_ROCK},
+ {gBattleAnimSpritePal_Tornado, ANIM_TAG_TORNADO},
+ {gBattleAnimSpritePal_StraightBeam, ANIM_TAG_STRAIGHT_BEAM},
+ {gBattleAnimSpritePal_DreepyMissile, ANIM_TAG_DREEPY},
+ {gBattleAnimSpritePal_IceRock, ANIM_TAG_ICE_ROCK_SINGLE},
+ {gBattleAnimSpritePal_StonePillar, ANIM_TAG_STONE_PILLAR_MULTI},
+ {gBattleAnimSpritePal_AlphaSymbol, ANIM_TAG_ALPHA_SYMBOL},
+ {gBattleAnimSpritePal_OmegaSymbol, ANIM_TAG_OMEGA_SYMBOL},
+ {gBattleAnimSpritePal_PrimalParticles, ANIM_TAG_PRIMAL_PARTICLES},
+ {gBattleAnimSpritePal_SteelBeam, ANIM_TAG_STEEL_BEAM},
+ {gBattleAnimSpritePal_Poltergeist, ANIM_TAG_POLTERGEIST},
};
const struct BattleAnimBackground gBattleAnimBackgroundTable[] =
{
- [BG_NONE] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark},
- [BG_DARK] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark},
- [BG_GHOST] = {gBattleAnimBgImage_Ghost, gBattleAnimBgPalette_Ghost, gBattleAnimBgTilemap_Ghost},
- [BG_PSYCHIC] = {gBattleAnimBgImage_Psychic, gBattleAnimBgPalette_Psychic, gBattleAnimBgTilemap_Psychic},
- [BG_IMPACT_OPPONENT] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactOpponent},
- [BG_IMPACT_PLAYER] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactPlayer},
- [BG_IMPACT_CONTESTS] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactContests},
- [BG_DRILL] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Drill, gBattleAnimBgTilemap_Drill},
- [BG_DRILL_CONTESTS] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Drill, gBattleAnimBgTilemap_DrillContests},
- [BG_HIGHSPEED_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Highspeed, gBattleAnimBgTilemap_HighspeedOpponent},
- [BG_HIGHSPEED_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Highspeed, gBattleAnimBgTilemap_HighspeedPlayer},
- [BG_THUNDER] = {gBattleAnimBgImage_Thunder, gBattleAnimBgPalette_Thunder, gBattleAnimBgTilemap_Thunder},
- [BG_GUILLOTINE_OPPONENT] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotineOpponent},
- [BG_GUILLOTINE_PLAYER] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotinePlayer},
- [BG_GUILLOTINE_CONTESTS] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotineContests},
- [BG_ICE] = {gBattleAnimBgImage_Ice, gBattleAnimBgPalette_Ice, gBattleAnimBgTilemap_Ice},
- [BG_COSMIC] = {gBattleAnimBgImage_Cosmic, gBattleAnimBgPalette_Cosmic, gBattleAnimBgTilemap_Cosmic},
- [BG_IN_AIR] = {gBattleAnimBgImage_InAir, gBattleAnimBgPalette_InAir, gBattleAnimBgTilemap_InAir},
- [BG_SKY] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Sky, gBattleAnimBgTilemap_Drill},
- [BG_SKY_CONTESTS] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Sky, gBattleAnimBgTilemap_DrillContests},
- [BG_AURORA] = {gBattleAnimBgImage_Aurora, gBattleAnimBgPalette_Aurora, gBattleAnimBgTilemap_Aurora},
- [BG_FISSURE] = {gBattleAnimBgImage_Fissure, gBattleAnimBgPalette_Fissure, gBattleAnimBgTilemap_Fissure},
- [BG_BUG_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Bug, gBattleAnimBgTilemap_HighspeedOpponent},
- [BG_BUG_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Bug, gBattleAnimBgTilemap_HighspeedPlayer},
- [BG_SOLAR_BEAM_OPPONENT] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_SolarBeam, gBattleAnimBgTilemap_ImpactOpponent},
- [BG_SOLAR_BEAM_PLAYER] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_SolarBeam, gBattleAnimBgTilemap_ImpactPlayer},
- [BG_SOLAR_BEAM_CONTESTS] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_SolarBeam, gBattleAnimBgTilemap_ImpactContests},
+ [BG_NONE] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark},
+ [BG_DARK] = {gBattleAnimBgImage_Dark, gBattleAnimBgPalette_Dark, gBattleAnimBgTilemap_Dark},
+ [BG_GHOST] = {gBattleAnimBgImage_Ghost, gBattleAnimBgPalette_Ghost, gBattleAnimBgTilemap_Ghost},
+ [BG_PSYCHIC] = {gBattleAnimBgImage_Psychic, gBattleAnimBgPalette_Psychic, gBattleAnimBgTilemap_Psychic},
+ [BG_IMPACT_OPPONENT] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactOpponent},
+ [BG_IMPACT_PLAYER] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactPlayer},
+ [BG_IMPACT_CONTESTS] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_Impact, gBattleAnimBgTilemap_ImpactContests},
+ [BG_DRILL] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Drill, gBattleAnimBgTilemap_Drill},
+ [BG_DRILL_CONTESTS] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Drill, gBattleAnimBgTilemap_DrillContests},
+ [BG_HIGHSPEED_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Highspeed, gBattleAnimBgTilemap_HighspeedOpponent},
+ [BG_HIGHSPEED_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Highspeed, gBattleAnimBgTilemap_HighspeedPlayer},
+ [BG_THUNDER] = {gBattleAnimBgImage_Thunder, gBattleAnimBgPalette_Thunder, gBattleAnimBgTilemap_Thunder},
+ [BG_GUILLOTINE_OPPONENT] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotineOpponent},
+ [BG_GUILLOTINE_PLAYER] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotinePlayer},
+ [BG_GUILLOTINE_CONTESTS] = {gBattleAnimBgImage_Guillotine, gBattleAnimBgPalette_Guillotine, gBattleAnimBgTilemap_GuillotineContests},
+ [BG_ICE] = {gBattleAnimBgImage_Ice, gBattleAnimBgPalette_Ice, gBattleAnimBgTilemap_Ice},
+ [BG_COSMIC] = {gBattleAnimBgImage_Cosmic, gBattleAnimBgPalette_Cosmic, gBattleAnimBgTilemap_Cosmic},
+ [BG_IN_AIR] = {gBattleAnimBgImage_InAir, gBattleAnimBgPalette_InAir, gBattleAnimBgTilemap_InAir},
+ [BG_SKY] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Sky, gBattleAnimBgTilemap_Drill},
+ [BG_SKY_CONTESTS] = {gBattleAnimBgImage_Drill, gBattleAnimBgPalette_Sky, gBattleAnimBgTilemap_DrillContests},
+ [BG_AURORA] = {gBattleAnimBgImage_Aurora, gBattleAnimBgPalette_Aurora, gBattleAnimBgTilemap_Aurora},
+ [BG_FISSURE] = {gBattleAnimBgImage_Fissure, gBattleAnimBgPalette_Fissure, gBattleAnimBgTilemap_Fissure},
+ [BG_BUG_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Bug, gBattleAnimBgTilemap_HighspeedOpponent},
+ [BG_BUG_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_Bug, gBattleAnimBgTilemap_HighspeedPlayer},
+ [BG_SOLAR_BEAM_OPPONENT] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_SolarBeam, gBattleAnimBgTilemap_ImpactOpponent},
+ [BG_SOLAR_BEAM_PLAYER] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_SolarBeam, gBattleAnimBgTilemap_ImpactPlayer},
+ [BG_SOLAR_BEAM_CONTESTS] = {gBattleAnimBgImage_Impact, gBattleAnimBgPalette_SolarBeam, gBattleAnimBgTilemap_ImpactContests},
+ //new bgs
+ [BG_MAGMA_STORM] = {gBattleAnimBgImage_InAir, gBattleAnimBgPalette_MagmaStorm, gBattleAnimBgTilemap_InAir},
+ [BG_GIGA_IMPACT_OPPONENT] = {gBattleAnimBgImage_GigaImpact, gBattleAnimBgPalette_GigaImpact, gBattleAnimBgTilemap_GigaImpactOpponent},
+ [BG_GIGA_IMPACT_PLAYER] = {gBattleAnimBgImage_GigaImpact, gBattleAnimBgPalette_GigaImpact, gBattleAnimBgTilemap_GigaImpactPlayer},
+ [BG_GIGA_IMPACT_CONTEST] = {gBattleAnimBgImage_GigaImpact, gBattleAnimBgPalette_GigaImpact, gBattleAnimBgTilemap_GigaImpactContest},
+ [BG_TRICK_ROOM] = {gBattleAnimBgImage_TrickRoom, gBattleAnimBgPalette_TrickRoom, gBattleAnimBgTilemap_TrickRoom},
+ [BG_ROCK_WRECKER] = {gBattleAnimBgImage_Hurricane, gBattleAnimBgPalette_RockWrecker, gBattleAnimBgTilemap_Hurricane},
+ [BG_SPACIAL_REND_ON_OPPONENT] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_GigaImpactOpponent},
+ [BG_SPACIAL_REND_ON_PLAYER] = {gBattleAnimBgImage_SpacialRend, gBattleAnimBgPalette_SpacialRend, gBattleAnimBgTilemap_GigaImpactPlayer},
+ [BG_DARK_VOID] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_DarkVoid, gBattleAnimBgTilemap_DarkVoid},
+ [BG_WATER] = {gBattleAnimBgImage_HydroPump, gBattleAnimBgPalette_HydroPump, gBattleAnimBgTilemap_HydroPump},
+ [BG_NIGHTMARE] = {gBattleAnimBgImage_Nightmare, gBattleAnimBgPalette_Nightmare, gBattleAnimBgTilemap_Nightmare},
+ [BG_LEAF_STORM] = {gBattleAnimBgImage_LeafStorm, gBattleAnimBgPalette_LeafStorm, gBattleAnimBgTilemap_LeafStorm},
+ [BG_FIRE] = {gBattleAnimBgImage_Fire1, gBattleAnimBgPalette_Fire1, gBattleAnimBgTilemap_Fire1},
+ [BG_FIRE_2] = {gBattleAnimBgImage_Fire1, gBattleAnimBgPalette_Fire2, gBattleAnimBgTilemap_Fire1},
+ [BG_WATER_2] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_Waterfall, gBattleAnimBgTilemap_Waterfall},
+ [BG_POISON] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_PoisonFalls, gBattleAnimBgTilemap_Waterfall},
+ [BG_AEROBLAST] = {gBattleAnimBgImage_Aeroblast, gBattleAnimBgPalette_Aeroblast, gBattleAnimBgTilemap_Aeroblast},
+ [BG_HURRICANE] = {gBattleAnimBgImage_Hurricane, gBattleAnimBgPalette_Hurricane, gBattleAnimBgTilemap_Hurricane},
+ [BG_ELECTRIC_TERRAIN] = {gBattleAnimBgImage_ElectricTerrain, gBattleAnimBgPalette_ElectricTerrain, gBattleAnimBgTilemap_ElectricTerrain},
+ [BG_GRASSY_TERRAIN] = {gBattleAnimBgImage_GrassyTerrain, gBattleAnimBgPalette_GrassyTerrain, gBattleAnimBgTilemap_GrassyTerrain},
+ [BG_MISTY_TERRAIN] = {gBattleAnimBgImage_MistyTerrain, gBattleAnimBgPalette_MistyTerrain, gBattleAnimBgTilemap_MistyTerrain},
+ [BG_PSYCHIC_TERRAIN] = {gBattleAnimBgImage_PsychicTerrain, gBattleAnimBgPalette_PsychicTerrain, gBattleAnimBgTilemap_PsychicTerrain},
+ [BG_FOCUS_BLAST] = {gBattleAnimBgImage_FocusBlast, gBattleAnimBgPalette_FocusBlast, gBattleAnimBgTilemap_FocusBlast},
+ [BG_GUNK_SHOT] = {gBattleAnimBgImage_FocusBlast, gBattleAnimBgPalette_GunkShot, gBattleAnimBgTilemap_FocusBlast},
+ [BG_HYDRO_CANNON] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_HydroCannon, gBattleAnimBgTilemap_HydroCannon},
+ [BG_WONDER_ROOM] = {gBattleAnimBgImage_TrickRoom, gBattleAnimBgPalette_WonderRoom, gBattleAnimBgTilemap_TrickRoom},
+ [BG_MAGIC_ROOM] = {gBattleAnimBgImage_TrickRoom, gBattleAnimBgPalette_MagicRoom, gBattleAnimBgTilemap_TrickRoom},
+ [BG_HYPERSPACE_FURY] = {gBattleAnimBgImage_Psychic, gBattleAnimBgPalette_HyperspaceFury, gBattleAnimBgTilemap_Psychic},
+ [BG_BOLT_STRIKE] = {gBattleAnimBgImage_BoltStrike, gBattleAnimBgPalette_BoltStrike, gBattleAnimBgTilemap_BoltStrike},
+ [BG_ZMOVE_ACTIVATE] = {gBattleAnimBgImage_ZMoveActivate, gBattleAnimBgPalette_ZMoveActivate, gBattleAnimBgTilemap_ZMoveActivate},
+ [BG_TECTONIC_RAGE] = {gBattleAnimBgImage_InAir, gBattleAnimBgPalette_TectonicRage, gBattleAnimBgTilemap_InAir},
+ [BG_BLUE_SKY_DAY] = {gBattleAnimBgImage_SkyDay, gBattleAnimBgPalette_SkyDay, gBattleAnimBgTilemap_SkyDay},
+ [BG_BLUE_SKY_AFTERNOON] = {gBattleAnimBgImage_SkyDay, gBattleAnimBgPalette_SkyAfternoon, gBattleAnimBgTilemap_SkyDay},
+ [BG_BLUE_SKY_NIGHT] = {gBattleAnimBgImage_SkyDay, gBattleAnimBgPalette_SkyNight, gBattleAnimBgTilemap_SkyDay},
+ [BG_ZMOVE_MOUNTAIN] = {gBattleAnimBgImage_ZMoveMountain, gBattleAnimBgPalette_ZMoveMountain, gBattleAnimBgTilemap_ZMoveMountain},
+ [BG_NEVERENDING_NIGHTMARE] = {gBattleAnimBgImage_NeverendingNightmare, gBattleAnimBgPalette_NeverendingNightmare, gBattleAnimBgTilemap_NeverendingNightmare},
+ [BG_WATER_PULSE] = {gBattleAnimBgImage_WaterPulse, gBattleAnimBgPalette_WaterPulse, gBattleAnimBgTilemap_WaterPulse},
+ [BG_INFERNO_OVERDRIVE] = {gBattleAnimBgImage_InfernoOverdrive, gBattleAnimBgPalette_InfernoOverdrive, gBattleAnimBgTilemap_InfernoOverdrive},
+ [BG_BLOOM_DOOM] = {gBattleAnimBgImage_BloomDoom, gBattleAnimBgPalette_BloomDoom, gBattleAnimBgTilemap_BloomDoom},
+ [BG_SHATTERED_PSYCHE] = {gBattleAnimBgImage_ShatteredPsyche, gBattleAnimBgPalette_ShatteredPsyche, gBattleAnimBgTilemap_ShatteredPsyche},
+ [BG_TWINKLE_TACKLE] = {gBattleAnimBgImage_TwinkleTackle, gBattleAnimBgPalette_TwinkleTackle, gBattleAnimBgTilemap_TwinkleTackle},
+ [BG_BLACKHOLE_ECLIPSE] = {gBattleAnimBgImage_BlackholeEclipse, gBattleAnimBgPalette_BlackholeEclipse, gBattleAnimBgTilemap_BlackholeEclipse},
+ [BG_SOULSTEALING_7STAR_STRIKE] = {gBattleAnimBgImage_SoulStealing7StarStrike, gBattleAnimBgPalette_SoulStealing7StarStrike, gBattleAnimBgTilemap_SoulStealing7StarStrike},
+ [BG_MALICIOUS_MOONSAULT] = {gBattleAnimBgImage_MaliciousMoonsault, gBattleAnimBgPalette_MaliciousMoonsault, gBattleAnimBgTilemap_MaliciousMoonsault},
+ [BG_CLANGOROUS_SOULBLAZE] = {gBattleAnimBgImage_ClangorousSoulblaze, gBattleAnimBgPalette_ClangorousSoulblaze, gBattleAnimBgTilemap_ClangorousSoulblaze},
+ [BG_SNUGGLE_FOREVER] = {gBattleAnimBgImage_SnuggleForever, gBattleAnimBgPalette_SnuggleForever, gBattleAnimBgTilemap_SnuggleForever},
+ [BG_MAX_LIGHTNING] = {gBattleAnimBgImage_MaxLightning, gBattleAnimBgPalette_MaxLightning, gBattleAnimBgTilemap_MaxLightning},
+ [BG_GARBAGE_FALLS] = {gBattleAnimBgImage_Waterfall, gBattleAnimBgPalette_GarbageFalls, gBattleAnimBgTilemap_Waterfall},
+ [BG_HYPER_BEAM] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_HyperBeam, gBattleAnimBgTilemap_HydroCannon},
+ [BG_DYNAMAX_CANNON] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_DynamaxCannon, gBattleAnimBgTilemap_HydroCannon},
+ [BG_AURA_SPHERE] = {gBattleAnimBgImage_FocusBlast, gBattleAnimBgPalette_AuraSphere, gBattleAnimBgTilemap_FocusBlast},
+ [BG_STEEL_BEAM_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedOpponent},
+ [BG_STEEL_BEAM_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedPlayer},
};
diff --git a/src/data/battle_frontier/battle_frontier_mons.h b/src/data/battle_frontier/battle_frontier_mons.h
index e5e992794f..df0a7d9b27 100644
--- a/src/data/battle_frontier/battle_frontier_mons.h
+++ b/src/data/battle_frontier/battle_frontier_mons.h
@@ -962,7 +962,7 @@ const struct FacilityMon gBattleFrontierMons[NUM_FRONTIER_MONS] =
[FRONTIER_MON_FARFETCHD] = {
.species = SPECIES_FARFETCHD,
.moves = {MOVE_SLASH, MOVE_KNOCK_OFF, MOVE_SWORDS_DANCE, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_STICK,
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEEK,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h
index ce8c2fd3dd..f3795325d9 100644
--- a/src/data/battle_moves.h
+++ b/src/data/battle_moves.h
@@ -1,4 +1,4 @@
-const struct BattleMove gBattleMoves[MOVES_COUNT] =
+const struct BattleMove gBattleMoves[MOVES_COUNT_Z] =
{
[MOVE_NONE] =
{
@@ -11,6 +11,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
+ .split = SPLIT_PHYSICAL,
},
[MOVE_POUND] =
@@ -24,11 +25,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_KARATE_CHOP] =
{
- .effect = EFFECT_HIGH_CRITICAL,
+ .effect = EFFECT_HIT,
.power = 50,
.type = TYPE_FIGHTING,
.accuracy = 100,
@@ -36,7 +40,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DOUBLE_SLAP] =
@@ -50,6 +57,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_COMET_PUNCH] =
@@ -62,7 +72,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MEGA_PUNCH] =
@@ -75,7 +88,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_PAY_DAY] =
@@ -89,6 +105,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FIRE_PUNCH] =
@@ -101,7 +120,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ICE_PUNCH] =
@@ -114,7 +136,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_THUNDER_PUNCH] =
@@ -127,7 +152,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SCRATCH] =
@@ -141,6 +169,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_VISE_GRIP] =
@@ -154,6 +185,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_GUILLOTINE] =
@@ -167,11 +201,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_RAZOR_WIND] =
{
- .effect = EFFECT_RAZOR_WIND,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #endif
+ .effect = EFFECT_TWO_TURNS_ATTACK,
.power = 80,
.type = TYPE_NORMAL,
.accuracy = 100,
@@ -179,20 +221,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SWORDS_DANCE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 20,
+ #else
+ .pp = 30,
+ #endif
.effect = EFFECT_ATTACK_UP_2,
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 0,
- .pp = 30,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
- .flags = FLAG_SNATCH_AFFECTED,
+ .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_CUT] =
@@ -206,6 +257,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_GUST] =
@@ -218,7 +272,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_2X_IN_AIR,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_WING_ATTACK] =
@@ -232,25 +289,45 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_WHIRLWIND] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .accuracy = 0,
+ .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .accuracy = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .accuracy = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_ROAR,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = -6,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_FLY] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .power = 90,
+ .zMovePower = 175,
+ #else
+ .power = 70,
+ .zMovePower = 140,
+ #endif
.effect = EFFECT_SEMI_INVULNERABLE,
- .power = 70,
.type = TYPE_FLYING,
.accuracy = 95,
.pp = 15,
@@ -258,19 +335,28 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BIND] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .accuracy = 85,
+ #else
+ .accuracy = 75,
+ #endif
.effect = EFFECT_TRAP,
.power = 15,
.type = TYPE_NORMAL,
- .accuracy = 75,
.pp = 20,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SLAM] =
@@ -284,24 +370,38 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_VINE_WHIP] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 45,
+ .pp = 25,
+ #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5
+ .power = 35,
+ .pp = 15,
+ #else
+ .power = 35,
+ .pp = 10,
+ #endif
.effect = EFFECT_HIT,
- .power = 35,
.type = TYPE_GRASS,
.accuracy = 100,
- .pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_STOMP] =
{
- .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ .effect = EFFECT_FLINCH_HIT,
.power = 65,
.type = TYPE_NORMAL,
.accuracy = 100,
@@ -309,7 +409,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DOUBLE_KICK] =
@@ -322,7 +425,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MEGA_KICK] =
@@ -336,23 +442,44 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_JUMP_KICK] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 100,
+ .pp = 10,
+ .zMovePower = 180,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .power = 85,
+ .pp = 25,
+ .zMovePower = 160,
+ #else
+ .power = 70,
+ .pp = 25,
+ .zMovePower = 140,
+ #endif
.effect = EFFECT_RECOIL_IF_MISS,
- .power = 70,
.type = TYPE_FIGHTING,
.accuracy = 95,
- .pp = 25,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ROLLING_KICK] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
.effect = EFFECT_FLINCH_HIT,
.power = 60,
.type = TYPE_FIGHTING,
@@ -361,7 +488,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SAND_ATTACK] =
@@ -375,6 +504,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_EVSN_UP_1,
},
[MOVE_HEADBUTT] =
@@ -387,7 +519,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_HORN_ATTACK] =
@@ -401,6 +536,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FURY_ATTACK] =
@@ -414,6 +552,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_HORN_DRILL] =
@@ -427,23 +568,42 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_TACKLE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .power = 40,
+ .accuracy = 100,
+ #elif B_UPDATED_MOVE_DATA == GEN_5 || B_UPDATED_MOVE_DATA == GEN_6
+ .power = 50,
+ .accuracy = 100,
+ #else
+ .power = 35,
+ .accuracy = 95,
+ #endif
.effect = EFFECT_HIT,
- .power = 35,
.type = TYPE_NORMAL,
- .accuracy = 95,
.pp = 35,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BODY_SLAM] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
.effect = EFFECT_PARALYZE_HIT,
.power = 85,
.type = TYPE_NORMAL,
@@ -452,25 +612,34 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_WRAP] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .accuracy = 90,
+ #else
+ .accuracy = 85,
+ #endif
.effect = EFFECT_TRAP,
.power = 15,
.type = TYPE_NORMAL,
- .accuracy = 85,
.pp = 20,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_TAKE_DOWN] =
{
- .effect = EFFECT_RECOIL,
+ .effect = EFFECT_RECOIL_25,
.power = 90,
.type = TYPE_NORMAL,
.accuracy = 85,
@@ -478,25 +647,37 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_THRASH] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 120,
+ .pp = 10,
+ .zMovePower = 190,
+ #else
+ .power = 90,
+ .pp = 20,
+ .zMovePower = 175,
+ #endif
.effect = EFFECT_RAMPAGE,
- .power = 90,
.type = TYPE_NORMAL,
.accuracy = 100,
- .pp = 20,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_RANDOM,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DOUBLE_EDGE] =
{
- .effect = EFFECT_DOUBLE_EDGE,
+ .effect = EFFECT_RECOIL_33,
.power = 120,
.type = TYPE_NORMAL,
.accuracy = 100,
@@ -504,7 +685,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_TAIL_WHIP] =
@@ -518,6 +702,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_BOTH,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_POISON_STING] =
@@ -530,7 +717,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_TWINEEDLE] =
@@ -543,20 +733,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_PIN_MISSILE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 25,
+ .accuracy = 95,
+ #else
+ .power = 14,
+ .accuracy = 85,
+ #endif
.effect = EFFECT_MULTI_HIT,
- .power = 14,
.type = TYPE_BUG,
- .accuracy = 85,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_LEER] =
@@ -570,6 +771,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_BOTH,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_BITE] =
@@ -582,7 +786,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_GROWL] =
@@ -595,20 +802,34 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_ROAR] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .accuracy = 0,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_MAGIC_COAT_AFFECTED,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .accuracy = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_MAGIC_COAT_AFFECTED,
+ #else
+ .accuracy = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ #endif
.effect = EFFECT_ROAR,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = -6,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_SING] =
@@ -621,7 +842,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_SUPERSONIC] =
@@ -634,7 +858,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_SONIC_BOOM] =
@@ -648,24 +875,42 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DISABLE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .accuracy = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .accuracy = 80,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .accuracy = 55,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_DISABLE,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 55,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_ACID] =
{
- .effect = EFFECT_DEFENSE_DOWN_HIT,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ #else
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ #endif
.power = 40,
.type = TYPE_POISON,
.accuracy = 100,
@@ -673,7 +918,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_EMBER] =
@@ -686,20 +934,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FLAMETHROWER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 90,
+ #else
+ .power = 95,
+ #endif
.effect = EFFECT_BURN_HIT,
- .power = 95,
.type = TYPE_FIRE,
.accuracy = 100,
.pp = 15,
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MIST] =
@@ -713,6 +971,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_WATER_GUN] =
@@ -726,12 +987,21 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_HYDRO_PUMP] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 110,
+ .zMovePower = 185,
+ #else
+ .power = 120,
+ .zMovePower = 190,
+ #endif
.effect = EFFECT_HIT,
- .power = 120,
.type = TYPE_WATER,
.accuracy = 80,
.pp = 5,
@@ -739,45 +1009,73 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SURF] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 90,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5
+ .power = 95,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ #else
+ .power = 95,
+ .target = MOVE_TARGET_BOTH,
+ #endif
.effect = EFFECT_HIT,
- .power = 95,
.type = TYPE_WATER,
.accuracy = 100,
.pp = 15,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ICE_BEAM] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 90,
+ #else
+ .power = 95,
+ #endif
.effect = EFFECT_FREEZE_HIT,
- .power = 95,
.type = TYPE_ICE,
.accuracy = 100,
.pp = 10,
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BLIZZARD] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 110,
+ .zMovePower = 185,
+ #else
+ .power = 120,
+ .zMovePower = 190,
+ #endif
.effect = EFFECT_FREEZE_HIT,
- .power = 120,
.type = TYPE_ICE,
.accuracy = 70,
.pp = 5,
.secondaryEffectChance = 10,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_PSYBEAM] =
@@ -790,7 +1088,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BUBBLE_BEAM] =
@@ -803,7 +1104,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_AURORA_BEAM] =
@@ -816,7 +1120,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_HYPER_BEAM] =
@@ -830,6 +1137,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_PECK] =
@@ -843,6 +1153,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DRILL_PECK] =
@@ -856,19 +1169,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SUBMISSION] =
{
- .effect = EFFECT_RECOIL,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 20,
+ #else
+ .pp = 25,
+ #endif
+ .effect = EFFECT_RECOIL_25,
.power = 80,
.type = TYPE_FIGHTING,
.accuracy = 80,
- .pp = 25,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_LOW_KICK] =
@@ -882,10 +1205,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_COUNTER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .flags = FLAG_MAKES_CONTACT,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_COUNTER,
.power = 1,
.type = TYPE_FIGHTING,
@@ -894,7 +1227,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_DEPENDS,
.priority = -5,
- .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SEISMIC_TOSS] =
@@ -908,6 +1243,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_STRENGTH] =
@@ -921,32 +1259,49 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ABSORB] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .pp = 25,
+ #else
+ .pp = 20,
+ #endif
.effect = EFFECT_ABSORB,
.power = 20,
.type = TYPE_GRASS,
.accuracy = 100,
- .pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MEGA_DRAIN] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .pp = 15,
+ #else
+ .pp = 10,
+ #endif
.effect = EFFECT_ABSORB,
.power = 40,
.type = TYPE_GRASS,
.accuracy = 100,
- .pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_LEECH_SEED] =
@@ -960,24 +1315,38 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_GROWTH] =
{
- .effect = EFFECT_SPECIAL_ATTACK_UP,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 20,
+ #else
+ .pp = 40,
+ #endif
+ #if B_GROWTH_STAT_RAISE >= GEN_5
+ .effect = EFFECT_GROWTH,
+ #else
+ .effect = EFFECT_SPECIAL_ATTACK_UP,
+ #endif
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 0,
- .pp = 40,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
},
[MOVE_RAZOR_LEAF] =
{
- .effect = EFFECT_HIGH_CRITICAL,
+ .effect = EFFECT_HIT,
.power = 55,
.type = TYPE_GRASS,
.accuracy = 95,
@@ -985,7 +1354,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SOLAR_BEAM] =
@@ -999,6 +1371,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_POISON_POWDER] =
@@ -1011,7 +1386,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_STUN_SPORE] =
@@ -1024,7 +1402,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_SLEEP_POWDER] =
@@ -1037,25 +1418,45 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_PETAL_DANCE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 120,
+ .pp = 10,
+ .zMovePower = 190,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .power = 90,
+ .pp = 20,
+ .zMovePower = 175,
+ #else
+ .power = 70,
+ .pp = 20,
+ .zMovePower = 140,
+ #endif
.effect = EFFECT_RAMPAGE,
- .power = 70,
.type = TYPE_GRASS,
.accuracy = 100,
- .pp = 20,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_RANDOM,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_STRING_SHOT] =
{
- .effect = EFFECT_SPEED_DOWN,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .effect = EFFECT_SPEED_DOWN_2,
+ #else
+ .effect = EFFECT_SPEED_DOWN,
+ #endif
.power = 0,
.type = TYPE_BUG,
.accuracy = 95,
@@ -1064,6 +1465,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_BOTH,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_DRAGON_RAGE] =
@@ -1077,19 +1481,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FIRE_SPIN] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 35,
+ .accuracy = 85,
+ #else
+ .power = 15,
+ .accuracy = 70,
+ #endif
.effect = EFFECT_TRAP,
- .power = 15,
.type = TYPE_FIRE,
- .accuracy = 70,
.pp = 15,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+
},
[MOVE_THUNDER_SHOCK] =
@@ -1102,46 +1518,71 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_THUNDERBOLT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 90,
+ #else
+ .power = 95,
+ #endif
.effect = EFFECT_PARALYZE_HIT,
- .power = 95,
.type = TYPE_ELECTRIC,
.accuracy = 100,
.pp = 15,
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_THUNDER_WAVE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .accuracy = 90,
+ #else
+ .accuracy = 100,
+ #endif
.effect = EFFECT_PARALYZE,
.power = 0,
.type = TYPE_ELECTRIC,
- .accuracy = 100,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_THUNDER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 110,
+ .zMovePower = 185,
+ #else
+ .power = 120,
+ .zMovePower = 190,
+ #endif
.effect = EFFECT_THUNDER,
- .power = 120,
.type = TYPE_ELECTRIC,
.accuracy = 70,
.pp = 10,
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ROCK_THROW] =
@@ -1155,6 +1596,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_EARTHQUAKE] =
@@ -1167,7 +1611,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_FOES_AND_ALLY,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FISSURE] =
@@ -1180,13 +1627,22 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_UNDERGROUND,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DIG] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .power = 80,
+ .zMovePower = 160,
+ #else
+ .power = 60,
+ .zMovePower = 120,
+ #endif
.effect = EFFECT_SEMI_INVULNERABLE,
- .power = 60,
.type = TYPE_GROUND,
.accuracy = 100,
.pp = 10,
@@ -1194,19 +1650,28 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_TOXIC] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .accuracy = 90,
+ #else
+ .accuracy = 85,
+ #endif
.effect = EFFECT_TOXIC,
.power = 0,
.type = TYPE_POISON,
- .accuracy = 85,
.pp = 10,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_CONFUSION] =
@@ -1219,7 +1684,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_PSYCHIC] =
@@ -1232,7 +1700,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_HYPNOSIS] =
@@ -1246,6 +1717,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_MEDITATE] =
@@ -1259,6 +1733,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_AGILITY] =
@@ -1272,11 +1749,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_QUICK_ATTACK] =
{
- .effect = EFFECT_QUICK_ATTACK,
+ .effect = EFFECT_HIT,
.power = 40,
.type = TYPE_NORMAL,
.accuracy = 100,
@@ -1285,6 +1765,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 1,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_RAGE] =
@@ -1298,6 +1781,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_TELEPORT] =
@@ -1309,8 +1795,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
- .priority = 0,
+ .priority = -6,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_NIGHT_SHADE] =
@@ -1324,6 +1813,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MIMIC] =
@@ -1331,12 +1823,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.effect = EFFECT_MIMIC,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ACC_UP_1,
},
[MOVE_SCREECH] =
@@ -1349,7 +1844,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_DOUBLE_TEAM] =
@@ -1363,19 +1861,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_RECOVER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .pp = 10,
+ #else
+ .pp = 20,
+ #endif
.effect = EFFECT_RESTORE_HP,
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 0,
- .pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_HARDEN] =
@@ -1389,19 +1897,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_MINIMIZE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 10,
+ #else
+ .pp = 20,
+ #endif
.effect = EFFECT_MINIMIZE,
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 0,
- .pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_SMOKESCREEN] =
@@ -1415,6 +1933,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_EVSN_UP_1,
},
[MOVE_CONFUSE_RAY] =
@@ -1428,6 +1949,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
},
[MOVE_WITHDRAW] =
@@ -1441,6 +1965,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_DEFENSE_CURL] =
@@ -1454,19 +1981,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ACC_UP_1,
},
[MOVE_BARRIER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 20,
+ #else
+ .pp = 30,
+ #endif
.effect = EFFECT_DEFENSE_UP_2,
.power = 0,
.type = TYPE_PSYCHIC,
.accuracy = 0,
- .pp = 30,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_LIGHT_SCREEN] =
@@ -1480,6 +2017,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_HAZE] =
@@ -1490,9 +2030,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 0,
.pp = 30,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_USER,
+ .target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_REFLECT] =
@@ -1506,6 +2049,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_FOCUS_ENERGY] =
@@ -1519,19 +2065,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ACC_UP_1,
},
[MOVE_BIDE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .accuracy = 0,
+ .priority = 1,
+ #else
+ .accuracy = 100,
+ .priority = 0,
+ #endif
.effect = EFFECT_BIDE,
.power = 1,
.type = TYPE_NORMAL,
- .accuracy = 100,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
- .priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_METRONOME] =
@@ -1545,6 +2102,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_DEPENDS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MIRROR_MOVE] =
@@ -1558,6 +2118,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_DEPENDS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_2,
},
[MOVE_SELF_DESTRUCT] =
@@ -1571,6 +2134,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_FOES_AND_ALLY,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_EGG_BOMB] =
@@ -1583,33 +2149,50 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_LICK] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 30,
+ #else
+ .power = 20,
+ #endif
.effect = EFFECT_PARALYZE_HIT,
- .power = 20,
.type = TYPE_GHOST,
.accuracy = 100,
.pp = 30,
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SMOG] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 30,
+ #else
+ .power = 20,
+ #endif
.effect = EFFECT_POISON_HIT,
- .power = 20,
.type = TYPE_POISON,
.accuracy = 70,
.pp = 20,
.secondaryEffectChance = 40,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SLUDGE] =
@@ -1622,7 +2205,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BONE_CLUB] =
@@ -1635,51 +2221,81 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FIRE_BLAST] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 110,
+ .zMovePower = 185,
+ #else
+ .power = 120,
+ .zMovePower = 190,
+ #endif
.effect = EFFECT_BURN_HIT,
- .power = 120,
.type = TYPE_FIRE,
.accuracy = 85,
.pp = 5,
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_WATERFALL] =
{
- .effect = EFFECT_HIT,
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .effect = EFFECT_FLINCH_HIT,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .effect = EFFECT_FLINCH_HIT,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .effect = EFFECT_HIT,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
.power = 80,
.type = TYPE_WATER,
.accuracy = 100,
.pp = 15,
- .secondaryEffectChance = 0,
+ .secondaryEffectChance = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_CLAMP] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .accuracy = 85,
+ .pp = 15,
+ #else
+ .accuracy = 75,
+ .pp = 10,
+ #endif
.effect = EFFECT_TRAP,
.power = 35,
.type = TYPE_WATER,
- .accuracy = 75,
- .pp = 10,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SWIFT] =
{
- .effect = EFFECT_ALWAYS_HIT,
+ .effect = EFFECT_HIT,
.power = 60,
.type = TYPE_NORMAL,
.accuracy = 0,
@@ -1688,19 +2304,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_BOTH,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SKULL_BASH] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 130,
+ .pp = 10,
+ .zMovePower = 195,
+ #else
+ .power = 100,
+ .pp = 15,
+ .zMovePower = 180,
+ #endif
.effect = EFFECT_SKULL_BASH,
- .power = 100,
.type = TYPE_NORMAL,
.accuracy = 100,
- .pp = 15,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SPIKE_CANNON] =
@@ -1714,6 +2342,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_CONSTRICT] =
@@ -1726,7 +2357,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_AMNESIA] =
@@ -1740,10 +2374,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_KINESIS] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_ACCURACY_DOWN,
.power = 0,
.type = TYPE_PSYCHIC,
@@ -1752,7 +2394,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_EVSN_UP_1,
},
[MOVE_SOFT_BOILED] =
@@ -1766,32 +2410,57 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_HIGH_JUMP_KICK] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 130,
+ .pp = 10,
+ .zMovePower = 195,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .power = 100,
+ .pp = 20,
+ .zMovePower = 180,
+ #else
+ .power = 85,
+ .pp = 20,
+ .zMovePower = 60,
+ #endif
.effect = EFFECT_RECOIL_IF_MISS,
- .power = 85,
.type = TYPE_FIGHTING,
.accuracy = 90,
- .pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_GLARE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .accuracy = 100,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .accuracy = 90,
+ #else
+ .accuracy = 75,
+ #endif
.effect = EFFECT_PARALYZE,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 75,
.pp = 30,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_DREAM_EATER] =
@@ -1805,19 +2474,33 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_POISON_GAS] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .accuracy = 90,
+ .target = MOVE_TARGET_BOTH,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .accuracy = 80,
+ .target = MOVE_TARGET_BOTH,
+ #else
+ .accuracy = 55,
+ .target = MOVE_TARGET_SELECTED,
+ #endif
.effect = EFFECT_POISON,
.power = 0,
.type = TYPE_POISON,
- .accuracy = 55,
.pp = 40,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_BARRAGE] =
@@ -1830,20 +2513,32 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_LEECH_LIFE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .power = 80,
+ .pp = 10,
+ .zMovePower = 160,
+ #else
+ .power = 20,
+ .pp = 15,
+ .zMovePower = 100,
+ #endif
.effect = EFFECT_ABSORB,
- .power = 20,
.type = TYPE_BUG,
.accuracy = 100,
- .pp = 15,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_LOVELY_KISS] =
@@ -1857,11 +2552,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_SKY_ATTACK] =
{
- .effect = EFFECT_SKY_ATTACK,
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
+ .effect = EFFECT_TWO_TURNS_ATTACK,
.power = 140,
.type = TYPE_FLYING,
.accuracy = 90,
@@ -1869,7 +2572,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .argument = MOVE_EFFECT_FLINCH,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_TRANSFORM] =
@@ -1883,19 +2589,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_BUBBLE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 40,
+ #else
+ .power = 20,
+ #endif
.effect = EFFECT_SPEED_DOWN_HIT,
- .power = 20,
.type = TYPE_WATER,
.accuracy = 100,
.pp = 30,
.secondaryEffectChance = 10,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DIZZY_PUNCH] =
@@ -1908,7 +2624,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SPORE] =
@@ -1921,38 +2640,55 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_FLASH] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .accuracy = 100,
+ #else
+ .accuracy = 70,
+ #endif
.effect = EFFECT_ACCURACY_DOWN,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 70,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_EVSN_UP_1,
},
[MOVE_PSYWAVE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .accuracy = 100,
+ #else
+ .accuracy = 80,
+ #endif
.effect = EFFECT_PSYWAVE,
.power = 1,
.type = TYPE_PSYCHIC,
- .accuracy = 80,
.pp = 15,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SPLASH] =
{
- .effect = EFFECT_SPLASH,
+ .effect = EFFECT_DO_NOTHING,
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 0,
@@ -1961,32 +2697,55 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_3,
},
[MOVE_ACID_ARMOR] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 20,
+ #else
+ .pp = 40,
+ #endif
.effect = EFFECT_DEFENSE_UP_2,
.power = 0,
.type = TYPE_POISON,
.accuracy = 0,
- .pp = 40,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_CRABHAMMER] =
{
- .effect = EFFECT_HIGH_CRITICAL,
- .power = 90,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 100,
+ .accuracy = 90,
+ .zMovePower = 180,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .power = 90,
+ .accuracy = 90,
+ .zMovePower = 175,
+ #else
+ .power = 90,
+ .accuracy = 85,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_HIT,
.type = TYPE_WATER,
- .accuracy = 85,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_EXPLOSION] =
@@ -2000,6 +2759,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_FOES_AND_ALLY,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FURY_SWIPES] =
@@ -2013,6 +2775,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BONEMERANG] =
@@ -2025,7 +2790,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_REST] =
@@ -2039,6 +2807,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_ROCK_SLIDE] =
@@ -2051,7 +2822,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_HYPER_FANG] =
@@ -2064,7 +2838,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_STRONG_JAW_BOOST | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SHARPEN] =
@@ -2078,10 +2855,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_CONVERSION] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
.effect = EFFECT_CONVERSION,
.power = 0,
.type = TYPE_NORMAL,
@@ -2090,7 +2875,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
- .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1,
},
[MOVE_TRI_ATTACK] =
@@ -2103,7 +2890,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SUPER_FANG] =
@@ -2117,11 +2907,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SLASH] =
{
- .effect = EFFECT_HIGH_CRITICAL,
+ .effect = EFFECT_HIT,
.power = 70,
.type = TYPE_NORMAL,
.accuracy = 100,
@@ -2129,7 +2922,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SUBSTITUTE] =
@@ -2143,19 +2939,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_STRUGGLE] =
{
- .effect = EFFECT_RECOIL,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .accuracy = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .effect = EFFECT_RECOIL_HP_25,
+ #else
+ .accuracy = 100,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .effect = EFFECT_RECOIL_25,
+ #endif
.power = 50,
.type = TYPE_NORMAL,
- .accuracy = 100,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SKETCH] =
@@ -2169,6 +2977,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1,
},
[MOVE_TRIPLE_KICK] =
@@ -2182,63 +2993,96 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_THIEF] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 60,
+ .pp = 25,
+ .zMovePower = 120,
+ #else
+ .power = 40,
+ .pp = 10,
+ .zMovePower = 100,
+ #endif
.effect = EFFECT_THIEF,
- .power = 40,
.type = TYPE_DARK,
.accuracy = 100,
- .pp = 10,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SPIDER_WEB] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_MEAN_LOOK,
.power = 0,
.type = TYPE_BUG,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_MIND_READER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .accuracy = 0,
+ #else
+ .accuracy = 100,
+ #endif
.effect = EFFECT_LOCK_ON,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
.pp = 5,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
},
[MOVE_NIGHTMARE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .accuracy = 100,
+ #else
+ .accuracy = 0,
+ #endif
.effect = EFFECT_NIGHTMARE,
.power = 0,
.type = TYPE_GHOST,
- .accuracy = 100,
.pp = 15,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
},
[MOVE_FLAME_WHEEL] =
{
- .effect = EFFECT_THAW_HIT,
+ .effect = EFFECT_BURN_HIT,
.power = 60,
.type = TYPE_FIRE,
.accuracy = 100,
@@ -2246,33 +3090,54 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SNORE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 50,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .power = 40,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
+ #else
+ .power = 40,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
+ #endif
.effect = EFFECT_SNORE,
- .power = 40,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 15,
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_CURSE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .type = TYPE_GHOST,
+ #else
+ .type = TYPE_MYSTERY,
+ #endif
.effect = EFFECT_CURSE,
.power = 0,
- .type = TYPE_MYSTERY,
.accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_CURSE,
},
[MOVE_FLAIL] =
@@ -2286,6 +3151,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_CONVERSION_2] =
@@ -2293,17 +3161,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.effect = EFFECT_CONVERSION_2,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 30,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_AEROBLAST] =
{
- .effect = EFFECT_HIGH_CRITICAL,
+ .effect = EFFECT_HIT,
.power = 100,
.type = TYPE_FLYING,
.accuracy = 95,
@@ -2311,20 +3182,34 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_COTTON_SPORE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .accuracy = 100,
+ .target = MOVE_TARGET_BOTH,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .accuracy = 100,
+ .target = MOVE_TARGET_SELECTED,
+ #else
+ .accuracy = 85,
+ .target = MOVE_TARGET_SELECTED,
+ #endif
.effect = EFFECT_SPEED_DOWN_2,
.power = 0,
.type = TYPE_GRASS,
- .accuracy = 85,
.pp = 40,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_REVERSAL] =
@@ -2338,10 +3223,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SPITE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_SPITE,
.power = 0,
.type = TYPE_GHOST,
@@ -2350,7 +3243,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_POWDER_SNOW] =
@@ -2363,11 +3258,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_PROTECT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .priority = 4,
+ #else
+ .priority = 3,
+ #endif
.effect = EFFECT_PROTECT,
.power = 0,
.type = TYPE_NORMAL,
@@ -2375,13 +3278,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
- .priority = 3,
- .flags = 0,
+ .flags = FLAG_PROTECTION_MOVE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_MACH_PUNCH] =
{
- .effect = EFFECT_QUICK_ATTACK,
+ .effect = EFFECT_HIT,
.power = 40,
.type = TYPE_FIGHTING,
.accuracy = 100,
@@ -2389,25 +3294,40 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 1,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SCARY_FACE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .accuracy = 100,
+ #else
+ .accuracy = 90,
+ #endif
.effect = EFFECT_SPEED_DOWN_2,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 90,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_FEINT_ATTACK] =
{
- .effect = EFFECT_ALWAYS_HIT,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #endif
+ .effect = EFFECT_HIT,
.power = 60,
.type = TYPE_DARK,
.accuracy = 0,
@@ -2415,20 +3335,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SWEET_KISS] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .type = TYPE_FAIRY,
+ #else
+ .type = TYPE_NORMAL,
+ #endif
.effect = EFFECT_CONFUSE,
.power = 0,
- .type = TYPE_NORMAL,
.accuracy = 75,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
},
[MOVE_BELLY_DRUM] =
@@ -2442,6 +3371,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_SLUDGE_BOMB] =
@@ -2454,7 +3386,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MUD_SLAP] =
@@ -2467,7 +3402,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_OCTAZOOKA] =
@@ -2480,11 +3418,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 50,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SPIKES] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_MAGIC_COAT_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
.effect = EFFECT_SPIKES,
.power = 0,
.type = TYPE_GROUND,
@@ -2493,33 +3439,54 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_OPPONENTS_FIELD,
.priority = 0,
- .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_ZAP_CANNON] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .power = 120,
+ .zMovePower = 190,
+ #else
+ .power = 100,
+ .zMovePower = 180,
+ #endif
.effect = EFFECT_PARALYZE_HIT,
- .power = 100,
.type = TYPE_ELECTRIC,
.accuracy = 50,
.pp = 5,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FORESIGHT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .accuracy = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .accuracy = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .accuracy = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_FORESIGHT,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
.pp = 40,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_BOOST_CRITS,
},
[MOVE_DESTINY_BOND] =
@@ -2533,6 +3500,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_FOLLOW_ME,
},
[MOVE_PERISH_SONG] =
@@ -2543,9 +3513,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 0,
.pp = 5,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_USER,
+ .target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
- .flags = 0,
+ .flags = FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_ICY_WIND] =
@@ -2558,11 +3531,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 100,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DETECT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .priority = 4,
+ #else
+ .priority = 3,
+ #endif
.effect = EFFECT_PROTECT,
.power = 0,
.type = TYPE_FIGHTING,
@@ -2570,47 +3551,76 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.pp = 5,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
- .priority = 3,
- .flags = 0,
+ .flags = FLAG_PROTECTION_MOVE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_EVSN_UP_1,
},
[MOVE_BONE_RUSH] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .accuracy = 90,
+ #else
+ .accuracy = 80,
+ #endif
.effect = EFFECT_MULTI_HIT,
.power = 25,
.type = TYPE_GROUND,
- .accuracy = 80,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_LOCK_ON] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .accuracy = 0,
+ #else
+ .accuracy = 100,
+ #endif
.effect = EFFECT_LOCK_ON,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
.pp = 5,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_OUTRAGE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 120,
+ .pp = 10,
+ .zMovePower = 190,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .power = 120,
+ .pp = 15,
+ .zMovePower = 190,
+ #else
+ .power = 90,
+ .pp = 15,
+ .zMovePower = 175,
+ #endif
.effect = EFFECT_RAMPAGE,
- .power = 90,
.type = TYPE_DRAGON,
.accuracy = 100,
- .pp = 15,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_RANDOM,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SANDSTORM] =
@@ -2621,26 +3631,47 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_USER,
+ .target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_GIGA_DRAIN] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 75,
+ .pp = 10,
+ .zMovePower = 140,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .power = 60,
+ .pp = 10,
+ .zMovePower = 120,
+ #else
+ .power = 60,
+ .pp = 5,
+ .zMovePower = 120,
+ #endif
.effect = EFFECT_ABSORB,
- .power = 60,
.type = TYPE_GRASS,
.accuracy = 100,
- .pp = 5,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ENDURE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .priority = 4,
+ #else
+ .priority = 3,
+ #endif
.effect = EFFECT_ENDURE,
.power = 0,
.type = TYPE_NORMAL,
@@ -2648,21 +3679,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
- .priority = 3,
- .flags = 0,
+ .flags = FLAG_PROTECTION_MOVE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_CHARM] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .type = TYPE_FAIRY,
+ #else
+ .type = TYPE_NORMAL,
+ #endif
.effect = EFFECT_ATTACK_DOWN_2,
.power = 0,
- .type = TYPE_NORMAL,
.accuracy = 100,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_ROLLOUT] =
@@ -2676,6 +3716,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FALSE_SWIPE] =
@@ -2689,19 +3732,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SWAGGER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .accuracy = 85,
+ #else
+ .accuracy = 90,
+ #endif
.effect = EFFECT_SWAGGER,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 90,
.pp = 15,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_MILK_DRINK] =
@@ -2715,6 +3768,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_SPARK] =
@@ -2727,13 +3783,22 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FURY_CUTTER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 40,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .power = 20,
+ #else
+ .power = 10,
+ #endif
.effect = EFFECT_FURY_CUTTER,
- .power = 10,
.type = TYPE_BUG,
.accuracy = 95,
.pp = 20,
@@ -2741,6 +3806,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_STEEL_WING] =
@@ -2753,20 +3821,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MEAN_LOOK] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_MEAN_LOOK,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 5,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_ATTRACT] =
@@ -2780,6 +3858,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_SLEEP_TALK] =
@@ -2793,10 +3874,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_DEPENDS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_BOOST_CRITS,
},
[MOVE_HEAL_BELL] =
{
+ #if B_UPDATED_MOVE_DATA != GEN_5
+ .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND,
+ #else
+ .flags = FLAG_SNATCH_AFFECTED,
+ #endif
.effect = EFFECT_HEAL_BELL,
.power = 0,
.type = TYPE_NORMAL,
@@ -2805,7 +3894,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
- .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_RETURN] =
@@ -2819,6 +3910,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_PRESENT] =
@@ -2832,6 +3926,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FRUSTRATION] =
@@ -2845,6 +3942,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SAFEGUARD] =
@@ -2858,6 +3958,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_PAIN_SPLIT] =
@@ -2865,17 +3968,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.effect = EFFECT_PAIN_SPLIT,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_SACRED_FIRE] =
{
- .effect = EFFECT_THAW_HIT,
+ .effect = EFFECT_BURN_HIT,
.power = 100,
.type = TYPE_FIRE,
.accuracy = 95,
@@ -2883,7 +3989,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 50,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MAGNITUDE] =
@@ -2896,7 +4005,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_FOES_AND_ALLY,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DYNAMIC_PUNCH] =
@@ -2909,7 +4021,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MEGAHORN] =
@@ -2923,6 +4038,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DRAGON_BREATH] =
@@ -2935,7 +4053,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BATON_PASS] =
@@ -2949,10 +4070,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_ENCORE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_ENCORE,
.power = 0,
.type = TYPE_NORMAL,
@@ -2961,7 +4090,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_PURSUIT] =
@@ -2975,12 +4106,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_RAPID_SPIN] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 50,
+ #else
+ .power = 20,
+ #endif
.effect = EFFECT_RAPID_SPIN,
- .power = 20,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 40,
@@ -2988,11 +4126,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SWEET_SCENT] =
{
- .effect = EFFECT_EVASION_DOWN,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .effect = EFFECT_EVASION_DOWN_2,
+ #else
+ .effect = EFFECT_EVASION_DOWN,
+ #endif
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 100,
@@ -3001,6 +4146,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_BOTH,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ACC_UP_1,
},
[MOVE_IRON_TAIL] =
@@ -3013,7 +4161,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_METAL_CLAW] =
@@ -3026,7 +4177,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_VITAL_THROW] =
@@ -3034,12 +4188,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.effect = EFFECT_VITAL_THROW,
.power = 70,
.type = TYPE_FIGHTING,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = -1,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MORNING_SUN] =
@@ -3053,6 +4210,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_SYNTHESIS] =
@@ -3066,25 +4226,39 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_MOONLIGHT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .type = TYPE_FAIRY,
+ #else
+ .type = TYPE_NORMAL,
+ #endif
.effect = EFFECT_MOONLIGHT,
.power = 0,
- .type = TYPE_NORMAL,
.accuracy = 0,
.pp = 5,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_HIDDEN_POWER] =
{
+ #if B_HIDDEN_POWER_DMG >= GEN_6
+ .power = 60,
+ #else
+ .power = 1,
+ #endif
.effect = EFFECT_HIDDEN_POWER,
- .power = 1,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 15,
@@ -3092,11 +4266,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_CROSS_CHOP] =
{
- .effect = EFFECT_HIGH_CRITICAL,
+ .effect = EFFECT_HIT,
.power = 100,
.type = TYPE_FIGHTING,
.accuracy = 80,
@@ -3104,11 +4281,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_TWISTER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_2X_IN_AIR,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_2X_IN_AIR,
+ #endif
.effect = EFFECT_TWISTER,
.power = 40,
.type = TYPE_DRAGON,
@@ -3117,7 +4302,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 20,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_RAIN_DANCE] =
@@ -3128,9 +4315,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 0,
.pp = 5,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_USER,
+ .target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_SUNNY_DAY] =
@@ -3141,14 +4331,21 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 0,
.pp = 5,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_USER,
+ .target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_CRUNCH] =
{
- .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ #else
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ #endif
.power = 80,
.type = TYPE_DARK,
.accuracy = 100,
@@ -3156,11 +4353,21 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MIRROR_COAT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .flags = 0,
+ #else
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_MIRROR_COAT,
.power = 1,
.type = TYPE_PSYCHIC,
@@ -3169,11 +4376,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_DEPENDS,
.priority = -5,
- .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_PSYCH_UP] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = 0,
+ #else
+ .flags = FLAG_SNATCH_AFFECTED,
+ #endif
.effect = EFFECT_PSYCH_UP,
.power = 0,
.type = TYPE_NORMAL,
@@ -3182,24 +4396,38 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_EXTREME_SPEED] =
{
- .effect = EFFECT_QUICK_ATTACK,
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .priority = 2,
+ #else
+ .priority = 1,
+ #endif
+ .effect = EFFECT_HIT,
.power = 80,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 5,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
- .priority = 1,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ANCIENT_POWER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
.effect = EFFECT_ALL_STATS_UP_HIT,
.power = 60,
.type = TYPE_ROCK,
@@ -3208,7 +4436,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SHADOW_BALL] =
@@ -3221,52 +4451,89 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FUTURE_SIGHT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 120,
+ .accuracy = 100,
+ .pp = 10,
+ .zMovePower = 190,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .power = 100,
+ .accuracy = 100,
+ .pp = 10,
+ .zMovePower = 180,
+ #else
+ .power = 80,
+ .accuracy = 90,
+ .pp = 15,
+ .zMovePower = 160,
+ #endif
.effect = EFFECT_FUTURE_SIGHT,
- .power = 80,
.type = TYPE_PSYCHIC,
- .accuracy = 90,
- .pp = 15,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ROCK_SMASH] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .power = 40,
+ #else
+ .power = 20,
+ #endif
.effect = EFFECT_DEFENSE_DOWN_HIT,
- .power = 20,
.type = TYPE_FIGHTING,
.accuracy = 100,
.pp = 15,
.secondaryEffectChance = 50,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_WHIRLPOOL] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 35,
+ .accuracy = 85,
+ #else
+ .power = 15,
+ .accuracy = 70,
+ #endif
.effect = EFFECT_TRAP,
- .power = 15,
.type = TYPE_WATER,
- .accuracy = 70,
.pp = 15,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BEAT_UP] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 1,
+ #else
+ .power = 10,
+ #endif
.effect = EFFECT_BEAT_UP,
- .power = 10,
.type = TYPE_DARK,
.accuracy = 100,
.pp = 10,
@@ -3274,51 +4541,84 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FAKE_OUT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .priority = 3,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .priority = 1,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
.effect = EFFECT_FAKE_OUT,
.power = 40,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 10,
- .secondaryEffectChance = 0,
+ .secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
- .priority = 1,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_UPROAR] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 90,
+ .zMovePower = 175,
+ #else
+ .power = 50,
+ .zMovePower = 100,
+ #endif
.effect = EFFECT_UPROAR,
- .power = 50,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 10,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_RANDOM,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_STOCKPILE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .pp = 20,
+ #else
+ .pp = 10,
+ #endif
.effect = EFFECT_STOCKPILE,
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 0,
- .pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_SPIT_UP] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .power = 1,
+ #else
+ .power = 100,
+ #endif
.effect = EFFECT_SPIT_UP,
- .power = 100,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 10,
@@ -3326,6 +4626,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SWALLOW] =
@@ -3339,19 +4642,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_HEAT_WAVE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 95,
+ .zMovePower = 175,
+ #else
+ .power = 100,
+ .zMovePower = 180,
+ #endif
.effect = EFFECT_BURN_HIT,
- .power = 100,
.type = TYPE_FIRE,
.accuracy = 90,
.pp = 10,
.secondaryEffectChance = 10,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_HAIL] =
@@ -3362,13 +4676,21 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_USER,
+ .target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_TORMENT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_TORMENT,
.power = 0,
.type = TYPE_DARK,
@@ -3377,7 +4699,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_FLATTER] =
@@ -3391,19 +4715,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_WILL_O_WISP] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .accuracy = 85,
+ #else
+ .accuracy = 75,
+ #endif
.effect = EFFECT_WILL_O_WISP,
.power = 0,
.type = TYPE_FIRE,
- .accuracy = 75,
.pp = 15,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_MEMENTO] =
@@ -3417,6 +4751,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP,
},
[MOVE_FACADE] =
@@ -3430,6 +4767,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FOCUS_PUNCH] =
@@ -3442,13 +4782,22 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = -3,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SMELLING_SALTS] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 70,
+ .zMovePower = 140,
+ #else
+ .power = 60,
+ .zMovePower = 120,
+ #endif
.effect = EFFECT_SMELLINGSALT,
- .power = 60,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 10,
@@ -3456,10 +4805,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .argument = STATUS1_PARALYSIS,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FOLLOW_ME] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .priority = 2,
+ #else
+ .priority = 3,
+ #endif
.effect = EFFECT_FOLLOW_ME,
.power = 0,
.type = TYPE_NORMAL,
@@ -3467,8 +4824,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
- .priority = 3,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_NATURE_POWER] =
@@ -3476,12 +4835,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.effect = EFFECT_NATURE_POWER,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 95,
+ .accuracy = 0,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_DEPENDS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_CHARGE] =
@@ -3495,10 +4857,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_TAUNT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED,
+ #endif
.effect = EFFECT_TAUNT,
.power = 0,
.type = TYPE_DARK,
@@ -3507,20 +4879,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_HELPING_HAND] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .target = MOVE_TARGET_ALLY,
+ #else
+ .target = MOVE_TARGET_USER,
+ #endif
.effect = EFFECT_HELPING_HAND,
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 100,
.pp = 20,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_USER,
.priority = 5,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_TRICK] =
@@ -3534,6 +4915,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_2,
},
[MOVE_ROLE_PLAY] =
@@ -3541,25 +4925,35 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.effect = EFFECT_ROLE_PLAY,
.power = 0,
.type = TYPE_PSYCHIC,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_WISH] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
.effect = EFFECT_WISH,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_ASSIST] =
@@ -3573,6 +4967,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_DEPENDS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_INGRAIN] =
@@ -3586,6 +4983,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_SUPERPOWER] =
@@ -3599,6 +4999,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MAGIC_COAT] =
@@ -3612,10 +5015,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_DEPENDS,
.priority = 4,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_2,
},
[MOVE_RECYCLE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
.effect = EFFECT_RECYCLE,
.power = 0,
.type = TYPE_NORMAL,
@@ -3624,7 +5035,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
- .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_2,
},
[MOVE_REVENGE] =
@@ -3638,6 +5051,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = -4,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BRICK_BREAK] =
@@ -3651,6 +5067,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_YAWN] =
@@ -3658,18 +5077,27 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.effect = EFFECT_YAWN,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_KNOCK_OFF] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 65,
+ .zMovePower = 120,
+ #else
+ .power = 20,
+ .zMovePower = 100,
+ #endif
.effect = EFFECT_KNOCK_OFF,
- .power = 20,
.type = TYPE_DARK,
.accuracy = 100,
.pp = 20,
@@ -3677,6 +5105,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ENDEAVOR] =
@@ -3690,6 +5120,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ERUPTION] =
@@ -3703,6 +5136,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_BOTH,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SKILL_SWAP] =
@@ -3710,16 +5146,24 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.effect = EFFECT_SKILL_SWAP,
.power = 0,
.type = TYPE_PSYCHIC,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_IMPRISON] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED,
+ #endif
.effect = EFFECT_IMPRISON,
.power = 0,
.type = TYPE_PSYCHIC,
@@ -3728,7 +5172,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_2,
},
[MOVE_REFRESH] =
@@ -3742,6 +5188,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_GRUDGE] =
@@ -3755,6 +5204,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_FOLLOW_ME,
},
[MOVE_SNATCH] =
@@ -3768,6 +5220,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_DEPENDS,
.priority = 4,
.flags = FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_2,
},
[MOVE_SECRET_POWER] =
@@ -3780,13 +5235,22 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DIVE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .power = 80,
+ .zMovePower = 160,
+ #else
+ .power = 60,
+ .zMovePower = 120,
+ #endif
.effect = EFFECT_SEMI_INVULNERABLE,
- .power = 60,
.type = TYPE_WATER,
.accuracy = 100,
.pp = 10,
@@ -3794,6 +5258,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ARM_THRUST] =
@@ -3807,6 +5273,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_CAMOUFLAGE] =
@@ -3820,19 +5289,29 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_EVSN_UP_1,
},
[MOVE_TAIL_GLOW] =
{
- .effect = EFFECT_SPECIAL_ATTACK_UP_2,
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .effect = EFFECT_SPECIAL_ATTACK_UP_3,
+ #else
+ .effect = EFFECT_SPECIAL_ATTACK_UP_2,
+ #endif
.power = 0,
.type = TYPE_BUG,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 20,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_LUSTER_PURGE] =
@@ -3845,7 +5324,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 50,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MIST_BALL] =
@@ -3858,7 +5340,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 50,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FEATHER_DANCE] =
@@ -3871,11 +5356,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DANCE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_TEETER_DANCE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DANCE,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_DANCE,
+ #endif
.effect = EFFECT_TEETER_DANCE,
.power = 0,
.type = TYPE_NORMAL,
@@ -3884,12 +5377,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_FOES_AND_ALLY,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
},
[MOVE_BLAZE_KICK] =
{
- .effect = EFFECT_BLAZE_KICK,
+ .effect = EFFECT_BURN_HIT,
.power = 85,
.type = TYPE_FIRE,
.accuracy = 90,
@@ -3897,7 +5392,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MUD_SPORT] =
@@ -3908,9 +5406,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 100,
.pp = 15,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_USER,
+ .target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_ICE_BALL] =
@@ -3923,12 +5424,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_NEEDLE_ARM] =
{
- .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE,
+ #endif
+ .effect = EFFECT_FLINCH_HIT,
.power = 60,
.type = TYPE_GRASS,
.accuracy = 100,
@@ -3936,7 +5445,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SLACK_OFF] =
@@ -3950,6 +5461,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_HYPER_VOICE] =
@@ -3962,20 +5476,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_POISON_FANG] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .secondaryEffectChance = 50,
+ #else
+ .secondaryEffectChance = 30,
+ #endif
.effect = EFFECT_POISON_FANG,
.power = 50,
.type = TYPE_POISON,
.accuracy = 100,
.pp = 15,
- .secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_CRUSH_CLAW] =
@@ -3988,7 +5512,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 50,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BLAST_BURN] =
@@ -4002,6 +5529,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_HYDRO_CANNON] =
@@ -4015,24 +5545,41 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_METEOR_MASH] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 90,
+ .accuracy = 90,
+ .zMovePower = 175,
+ #else
+ .power = 100,
+ .accuracy = 85,
+ .zMovePower = 180,
+ #endif
.effect = EFFECT_ATTACK_UP_HIT,
- .power = 100,
.type = TYPE_STEEL,
- .accuracy = 85,
.pp = 10,
.secondaryEffectChance = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ASTONISH] =
{
- .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE,
+ #endif
+ .effect = EFFECT_FLINCH_HIT,
.power = 30,
.type = TYPE_GHOST,
.accuracy = 100,
@@ -4040,7 +5587,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_WEATHER_BALL] =
@@ -4053,7 +5602,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_AROMATHERAPY] =
@@ -4067,6 +5619,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RECOVER_HP,
},
[MOVE_FAKE_TEARS] =
@@ -4080,58 +5635,103 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
},
[MOVE_AIR_CUTTER] =
{
- .effect = EFFECT_HIGH_CRITICAL,
- .power = 55,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 60,
+ .zMovePower = 120,
+ #else
+ .power = 55,
+ .zMovePower = 100,
+ #endif
+ .effect = EFFECT_HIT,
.type = TYPE_FLYING,
.accuracy = 95,
.pp = 25,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_OVERHEAT] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 130,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 195,
+ #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5
+ .power = 140,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 200,
+ #else
+ .power = 140,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 200,
+ #endif
.effect = EFFECT_OVERHEAT,
- .power = 140,
.type = TYPE_FIRE,
.accuracy = 90,
.pp = 5,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ODOR_SLEUTH] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .accuracy = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .accuracy = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .accuracy = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_FORESIGHT,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
.pp = 40,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_ROCK_TOMB] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 60,
+ .accuracy = 95,
+ .pp = 15,
+ .zMovePower = 120,
+ #else
+ .power = 50,
+ .accuracy = 80,
+ .pp = 10,
+ .zMovePower = 100,
+ #endif
.effect = EFFECT_SPEED_DOWN_HIT,
- .power = 50,
.type = TYPE_ROCK,
- .accuracy = 80,
- .pp = 10,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SILVER_WIND] =
@@ -4144,7 +5744,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_METAL_SOUND] =
@@ -4157,7 +5760,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
},
[MOVE_GRASS_WHISTLE] =
@@ -4170,7 +5776,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
},
[MOVE_TICKLE] =
@@ -4184,6 +5793,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_COSMIC_POWER] =
@@ -4197,6 +5809,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_WATER_SPOUT] =
@@ -4210,6 +5825,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_BOTH,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SIGNAL_BEAM] =
@@ -4222,12 +5840,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SHADOW_PUNCH] =
{
- .effect = EFFECT_ALWAYS_HIT,
+ .effect = EFFECT_HIT,
.power = 60,
.type = TYPE_GHOST,
.accuracy = 0,
@@ -4235,20 +5856,34 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_EXTRASENSORY] =
{
- .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 20,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5
+ .pp = 30,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .pp = 30,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE,
+ #endif
+ .effect = EFFECT_FLINCH_HIT,
.power = 80,
.type = TYPE_PSYCHIC,
.accuracy = 100,
- .pp = 30,
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SKY_UPPERCUT] =
@@ -4261,20 +5896,31 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_DMG_IN_AIR,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SAND_TOMB] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 35,
+ .accuracy = 85,
+ #else
+ .power = 15,
+ .accuracy = 70,
+ #endif
.effect = EFFECT_TRAP,
- .power = 15,
.type = TYPE_GROUND,
- .accuracy = 70,
.pp = 15,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SHEER_COLD] =
@@ -4288,37 +5934,54 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MUDDY_WATER] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 90,
+ #else
+ .power = 95,
+ #endif
.effect = EFFECT_ACCURACY_DOWN_HIT,
- .power = 95,
.type = TYPE_WATER,
.accuracy = 85,
.pp = 10,
.secondaryEffectChance = 30,
.target = MOVE_TARGET_BOTH,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BULLET_SEED] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 25,
+ #else
+ .power = 10,
+ #endif
.effect = EFFECT_MULTI_HIT,
- .power = 10,
.type = TYPE_GRASS,
.accuracy = 100,
.pp = 30,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_AERIAL_ACE] =
{
- .effect = EFFECT_ALWAYS_HIT,
+ .effect = EFFECT_HIT,
.power = 60,
.type = TYPE_FLYING,
.accuracy = 0,
@@ -4327,12 +5990,19 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_ICICLE_SPEAR] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 25,
+ #else
+ .power = 10,
+ #endif
.effect = EFFECT_MULTI_HIT,
- .power = 10,
.type = TYPE_ICE,
.accuracy = 100,
.pp = 30,
@@ -4340,6 +6010,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_IRON_DEFENSE] =
@@ -4353,23 +6026,38 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_BLOCK] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
.effect = EFFECT_MEAN_LOOK,
.power = 0,
.type = TYPE_NORMAL,
- .accuracy = 100,
+ .accuracy = 0,
.pp = 5,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
},
[MOVE_HOWL] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND,
+ #else
+ .flags = FLAG_SNATCH_AFFECTED,
+ #endif
.effect = EFFECT_ATTACK_UP,
.power = 0,
.type = TYPE_NORMAL,
@@ -4378,7 +6066,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
- .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_DRAGON_CLAW] =
@@ -4392,6 +6082,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_FRENZY_PLANT] =
@@ -4405,6 +6098,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_BULK_UP] =
@@ -4418,6 +6114,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
},
[MOVE_BOUNCE] =
@@ -4430,7 +6129,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 30,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .argument = MOVE_EFFECT_PARALYSIS,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MUD_SHOT] =
@@ -4443,12 +6146,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_POISON_TAIL] =
{
- .effect = EFFECT_POISON_TAIL,
+ .effect = EFFECT_POISON_HIT,
.power = 50,
.type = TYPE_POISON,
.accuracy = 100,
@@ -4456,38 +6162,69 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_COVET] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 60,
+ .pp = 25,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .zMovePower = 120,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .power = 60,
+ .pp = 40,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .zMovePower = 120,
+ #elif B_UPDATED_MOVE_DATA == GEN_4
+ .power = 40,
+ .pp = 40,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .zMovePower = 100,
+ #else
+ .power = 40,
+ .pp = 40,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .zMovePower = 100,
+ #endif
.effect = EFFECT_THIEF,
- .power = 40,
.type = TYPE_NORMAL,
.accuracy = 100,
- .pp = 40,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_VOLT_TACKLE] =
{
- .effect = EFFECT_DOUBLE_EDGE,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .effect = EFFECT_RECOIL_33_STATUS,
+ .argument = STATUS1_PARALYSIS,
+ #else
+ .effect = EFFECT_RECOIL_33,
+ #endif
.power = 120,
.type = TYPE_ELECTRIC,
.accuracy = 100,
.pp = 15,
- .secondaryEffectChance = 0,
+ .secondaryEffectChance = 10,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_MAGICAL_LEAF] =
{
- .effect = EFFECT_ALWAYS_HIT,
+ .effect = EFFECT_HIT,
.power = 60,
.type = TYPE_GRASS,
.accuracy = 0,
@@ -4496,6 +6233,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_WATER_SPORT] =
@@ -4506,9 +6246,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.accuracy = 100,
.pp = 15,
.secondaryEffectChance = 0,
- .target = MOVE_TARGET_USER,
+ .target = MOVE_TARGET_ALL_BATTLERS,
.priority = 0,
.flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
},
[MOVE_CALM_MIND] =
@@ -4522,19 +6265,30 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_LEAF_BLADE] =
{
- .effect = EFFECT_HIGH_CRITICAL,
- .power = 70,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .power = 90,
+ .zMovePower = 175,
+ #else
+ .power = 70,
+ .zMovePower = 140,
+ #endif
+ .effect = EFFECT_HIT,
.type = TYPE_GRASS,
.accuracy = 100,
.pp = 15,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DRAGON_DANCE] =
@@ -4547,25 +6301,39 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
- .flags = FLAG_SNATCH_AFFECTED,
+ .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
},
[MOVE_ROCK_BLAST] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .accuracy = 90,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ #elif B_UPDATED_MOVE_DATA == GEN_5 || B_UPDATED_MOVE_DATA == GEN_6
+ .accuracy = 90,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #else
+ .accuracy = 80,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #endif
.effect = EFFECT_MULTI_HIT,
.power = 25,
.type = TYPE_ROCK,
- .accuracy = 80,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_SHOCK_WAVE] =
{
- .effect = EFFECT_ALWAYS_HIT,
+ .effect = EFFECT_HIT,
.power = 60,
.type = TYPE_ELECTRIC,
.accuracy = 0,
@@ -4574,6 +6342,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_WATER_PULSE] =
@@ -4586,20 +6357,32 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 20,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
- .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_DOOM_DESIRE] =
{
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 140,
+ .accuracy = 100,
+ .zMovePower = 200,
+ #else
+ .power = 120,
+ .accuracy = 85,
+ .zMovePower = 190,
+ #endif
.effect = EFFECT_FUTURE_SIGHT,
- .power = 120,
.type = TYPE_STEEL,
- .accuracy = 85,
.pp = 5,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
},
[MOVE_PSYCHO_BOOST] =
@@ -4613,5 +6396,7370 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ROOST] =
+ {
+ .effect = EFFECT_ROOST,
+ .power = 0,
+ .type = TYPE_FLYING,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_GRAVITY] =
+ {
+ .effect = EFFECT_GRAVITY,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_MIRACLE_EYE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
+ .effect = EFFECT_MIRACLE_EYE,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_WAKE_UP_SLAP] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 70,
+ .zMovePower = 140,
+ #else
+ .power = 60,
+ .zMovePower = 120,
+ #endif
+ .effect = EFFECT_WAKE_UP_SLAP,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .argument = STATUS1_SLEEP,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HAMMER_ARM] =
+ {
+ .effect = EFFECT_HAMMER_ARM,
+ .power = 100,
+ .type = TYPE_FIGHTING,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_GYRO_BALL] =
+ {
+ .effect = EFFECT_GYRO_BALL,
+ .power = 1,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HEALING_WISH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
+ .effect = EFFECT_HEALING_WISH,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BRINE] =
+ {
+ .effect = EFFECT_BRINE,
+ .power = 65,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_NATURAL_GIFT] =
+ {
+ .effect = EFFECT_NATURAL_GIFT,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FEINT] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 30,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ #elif B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 30,
+ .flags = 0,
+ #else
+ .power = 50,
+ .flags = 0,
+ #endif
+ .effect = EFFECT_FEINT,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 2,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PLUCK] =
+ {
+ .effect = EFFECT_BUG_BITE,
+ .power = 60,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TAILWIND] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 15,
+ #else
+ .pp = 30,
+ #endif
+ .effect = EFFECT_TAILWIND,
+ .power = 0,
+ .type = TYPE_FLYING,
+ .accuracy = 0,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_BOOST_CRITS,
+ },
+
+ [MOVE_ACUPRESSURE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = 0,
+ #else
+ .flags = FLAG_SNATCH_AFFECTED,
+ #endif
+ .effect = EFFECT_ACUPRESSURE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_BOOST_CRITS,
+ },
+
+ [MOVE_METAL_BURST] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
+ .effect = EFFECT_METAL_BURST,
+ .power = 0,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_U_TURN] =
+ {
+ .effect = EFFECT_HIT_ESCAPE,
+ .power = 70,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CLOSE_COMBAT] =
+ {
+ .effect = EFFECT_CLOSE_COMBAT,
+ .power = 120,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PAYBACK] =
+ {
+ .effect = EFFECT_PAYBACK,
+ .power = 50,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ASSURANCE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 60,
+ .zMovePower = 120,
+ #else
+ .power = 50,
+ .zMovePower = 100,
+ #endif
+ .effect = EFFECT_ASSURANCE,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_EMBARGO] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
+ .effect = EFFECT_EMBARGO,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_FLING] =
+ {
+ .effect = EFFECT_FLING,
+ .power = 1,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PSYCHO_SHIFT] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .accuracy = 100,
+ #else
+ .accuracy = 90,
+ #endif
+ .effect = EFFECT_PSYCHO_SHIFT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_2,
+ },
+
+ [MOVE_TRUMP_CARD] =
+ {
+ .effect = EFFECT_TRUMP_CARD,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ },
+
+ [MOVE_HEAL_BLOCK] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
+ .effect = EFFECT_HEAL_BLOCK,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_2,
+ },
+
+ [MOVE_WRING_OUT] =
+ {
+ .effect = EFFECT_WRING_OUT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ },
+
+ [MOVE_POWER_TRICK] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
+ .effect = EFFECT_POWER_TRICK,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
+ },
+
+ [MOVE_GASTRO_ACID] =
+ {
+ .effect = EFFECT_GASTRO_ACID,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_LUCKY_CHANT] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
+ .effect = EFFECT_LUCKY_CHANT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_EVSN_UP_1,
+ },
+
+ [MOVE_ME_FIRST] =
+ {
+ .effect = EFFECT_ME_FIRST,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_2,
+ },
+
+ [MOVE_COPYCAT] =
+ {
+ .effect = EFFECT_COPYCAT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ACC_UP_1,
+ },
+
+ [MOVE_POWER_SWAP] =
+ {
+ .effect = EFFECT_POWER_SWAP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_GUARD_SWAP] =
+ {
+ .effect = EFFECT_GUARD_SWAP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_PUNISHMENT] =
+ {
+ .effect = EFFECT_PUNISHMENT,
+ .power = 60,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LAST_RESORT] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 140,
+ .zMovePower = 200,
+ #else
+ .power = 130,
+ .zMovePower = 195,
+ #endif
+ .effect = EFFECT_LAST_RESORT,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_WORRY_SEED] =
+ {
+ .effect = EFFECT_WORRY_SEED,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_SUCKER_PUNCH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .power = 70,
+ .zMovePower = 140,
+ #else
+ .power = 80,
+ .zMovePower = 160,
+ #endif
+ .effect = EFFECT_SUCKER_PUNCH,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TOXIC_SPIKES] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_MAGIC_COAT_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
+ .effect = EFFECT_TOXIC_SPIKES,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_OPPONENTS_FIELD,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_HEART_SWAP] =
+ {
+ .effect = EFFECT_HEART_SWAP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_BOOST_CRITS,
+ },
+
+ [MOVE_AQUA_RING] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
+ .effect = EFFECT_AQUA_RING,
+ .power = 0,
+ .type = TYPE_WATER,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_MAGNET_RISE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
+ .effect = EFFECT_MAGNET_RISE,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_EVSN_UP_1,
+ },
+
+ [MOVE_FLARE_BLITZ] =
+ {
+ .effect = EFFECT_RECOIL_33_STATUS,
+ .power = 120,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_RECKLESS_BOOST | FLAG_THAW_USER,
+ .split = SPLIT_PHYSICAL,
+ .argument = STATUS1_BURN,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FORCE_PALM] =
+ {
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 60,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_AURA_SPHERE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 80,
+ .zMovePower = 160,
+ #else
+ .power = 90,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_HIT,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST | FLAG_BALLISTIC,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ROCK_POLISH] =
+ {
+ .effect = EFFECT_SPEED_UP_2,
+ .power = 0,
+ .type = TYPE_ROCK,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_POISON_JAB] =
+ {
+ .effect = EFFECT_POISON_HIT,
+ .power = 80,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DARK_PULSE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST,
+ #endif
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 80,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_NIGHT_SLASH] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 70,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_AQUA_TAIL] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 90,
+ .type = TYPE_WATER,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SEED_BOMB] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_AIR_SLASH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 15,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .pp = 20,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .pp = 20,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 75,
+ .type = TYPE_FLYING,
+ .accuracy = 95,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_X_SCISSOR] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BUG_BUZZ] =
+ {
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 90,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRAGON_PULSE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 85,
+ .zMovePower = 160,
+ #else
+ .power = 90,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_HIT,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRAGON_RUSH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 100,
+ .type = TYPE_DRAGON,
+ .accuracy = 75,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_POWER_GEM] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 80,
+ .zMovePower = 160,
+ #else
+ .power = 70,
+ .zMovePower = 140,
+ #endif
+ .effect = EFFECT_HIT,
+ .type = TYPE_ROCK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRAIN_PUNCH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .power = 75,
+ .pp = 10,
+ .zMovePower = 140,
+ #else
+ .power = 60,
+ .pp = 5,
+ .zMovePower = 120,
+ #endif
+ .effect = EFFECT_ABSORB,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_VACUUM_WAVE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FOCUS_BLAST] =
+ {
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 120,
+ .type = TYPE_FIGHTING,
+ .accuracy = 70,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ENERGY_BALL] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 90,
+ .zMovePower = 175,
+ #else
+ .power = 80,
+ .zMovePower = 160,
+ #endif
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BRAVE_BIRD] =
+ {
+ .effect = EFFECT_RECOIL_33,
+ .power = 120,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_EARTH_POWER] =
+ {
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 90,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SWITCHEROO] =
+ {
+ .effect = EFFECT_TRICK,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_2,
+ },
+
+ [MOVE_GIGA_IMPACT] =
+ {
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_NASTY_PLOT] =
+ {
+ .effect = EFFECT_SPECIAL_ATTACK_UP_2,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_BULLET_PUNCH] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_AVALANCHE] =
+ {
+ .effect = EFFECT_REVENGE,
+ .power = 60,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = -4,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ICE_SHARD] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SHADOW_CLAW] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 70,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_THUNDER_FANG] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
+ #endif
+ .effect = EFFECT_FLINCH_STATUS,
+ .power = 65,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .argument = STATUS1_PARALYSIS,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ICE_FANG] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
+ #endif
+ .effect = EFFECT_FLINCH_STATUS,
+ .power = 65,
+ .type = TYPE_ICE,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .argument = STATUS1_FREEZE,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FIRE_FANG] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
+ #endif
+ .effect = EFFECT_FLINCH_STATUS,
+ .power = 65,
+ .type = TYPE_FIRE,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .argument = STATUS1_BURN,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SHADOW_SNEAK] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MUD_BOMB] =
+ {
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_GROUND,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PSYCHO_CUT] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 70,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ZEN_HEADBUTT] =
+ {
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 80,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MIRROR_SHOT] =
+ {
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_STEEL,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FLASH_CANNON] =
+ {
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 80,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ROCK_CLIMB] =
+ {
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 90,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DEFOG] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
+ .effect = EFFECT_DEFOG,
+ .power = 0,
+ .type = TYPE_FLYING,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ACC_UP_1,
+ },
+
+ [MOVE_TRICK_ROOM] =
+ {
+ .effect = EFFECT_TRICK_ROOM,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = -7,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ACC_UP_1,
+ },
+
+ [MOVE_DRACO_METEOR] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 130,
+ .zMovePower = 195,
+ #else
+ .power = 140,
+ .zMovePower = 200,
+ #endif
+ .effect = EFFECT_OVERHEAT,
+ .type = TYPE_DRAGON,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DISCHARGE] =
+ {
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 80,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LAVA_PLUME] =
+ {
+ .effect = EFFECT_BURN_HIT,
+ .power = 80,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LEAF_STORM] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 130,
+ .zMovePower = 195,
+ #else
+ .power = 140,
+ .zMovePower = 200,
+ #endif
+ .effect = EFFECT_OVERHEAT,
+ .type = TYPE_GRASS,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_POWER_WHIP] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 120,
+ .type = TYPE_GRASS,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ROCK_WRECKER] =
+ {
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_ROCK,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CROSS_POISON] =
+ {
+ .effect = EFFECT_POISON_HIT,
+ .power = 70,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_GUNK_SHOT] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .accuracy = 80,
+ #else
+ .accuracy = 70,
+ #endif
+ .effect = EFFECT_POISON_HIT,
+ .power = 120,
+ .type = TYPE_POISON,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_IRON_HEAD] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 80,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MAGNET_BOMB] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 60,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STONE_EDGE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 100,
+ .type = TYPE_ROCK,
+ .accuracy = 80,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CAPTIVATE] =
+ {
+ .effect = EFFECT_CAPTIVATE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_2,
+ },
+
+ [MOVE_STEALTH_ROCK] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_MAGIC_COAT_AFFECTED,
+ #else
+ .flags = 0,
+ #endif
+ .effect = EFFECT_STEALTH_ROCK,
+ .power = 0,
+ .type = TYPE_ROCK,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_OPPONENTS_FIELD,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_GRASS_KNOT] =
+ {
+ .effect = EFFECT_LOW_KICK,
+ .power = 1,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CHATTER] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 65,
+ .secondaryEffectChance = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .power = 60,
+ .secondaryEffectChance = 10,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .power = 60,
+ .secondaryEffectChance = 31,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
+ #endif
+ .effect = EFFECT_CONFUSE_HIT,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_JUDGMENT] =
+ {
+ .effect = EFFECT_CHANGE_TYPE_ON_ITEM,
+ .power = 100,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .argument = HOLD_EFFECT_PLATE,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BUG_BITE] =
+ {
+ .effect = EFFECT_BUG_BITE,
+ .power = 60,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CHARGE_BEAM] =
+ {
+ .effect = EFFECT_SP_ATTACK_UP_HIT,
+ .power = 50,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 70,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_WOOD_HAMMER] =
+ {
+ .effect = EFFECT_RECOIL_25,
+ .power = 120,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_AQUA_JET] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ATTACK_ORDER] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 90,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DEFEND_ORDER] =
+ {
+ .effect = EFFECT_COSMIC_POWER,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_HEAL_ORDER] =
+ {
+ .effect = EFFECT_RESTORE_HP,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_HEAD_SMASH] =
+ {
+ .effect = EFFECT_RECOIL_50,
+ .power = 150,
+ .type = TYPE_ROCK,
+ .accuracy = 80,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DOUBLE_HIT] =
+ {
+ .effect = EFFECT_DOUBLE_HIT,
+ .power = 35,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ROAR_OF_TIME] =
+ {
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_DRAGON,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SPACIAL_REND] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 100,
+ .type = TYPE_DRAGON,
+ .accuracy = 95,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LUNAR_DANCE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flags = FLAG_DANCE | FLAG_SNATCH_AFFECTED,
+ #else
+ .flags = FLAG_DANCE,
+ #endif
+ .effect = EFFECT_HEALING_WISH,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CRUSH_GRIP] =
+ {
+ .effect = EFFECT_WRING_OUT,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MAGMA_STORM] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 100,
+ .accuracy = 75,
+ .zMovePower = 180,
+ #elif B_UPDATED_MOVE_DATA == GEN_5
+ .power = 120,
+ .accuracy = 75,
+ .zMovePower = 190,
+ #else
+ .power = 120,
+ .accuracy = 70,
+ .zMovePower = 190,
+ #endif
+ .effect = EFFECT_TRAP,
+ .type = TYPE_FIRE,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DARK_VOID] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .accuracy = 50,
+ #else
+ .accuracy = 80,
+ #endif
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_DARK,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_SEED_FLARE] =
+ {
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2,
+ .power = 120,
+ .type = TYPE_GRASS,
+ .accuracy = 85,
+ .pp = 5,
+ .secondaryEffectChance = 40,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_OMINOUS_WIND] =
+ {
+ .effect = EFFECT_ALL_STATS_UP_HIT,
+ .power = 60,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SHADOW_FORCE] =
+ {
+ #if B_UPDATED_MOVE_DATA == GEN_6
+ .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #endif
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 120,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ .argument = MOVE_EFFECT_FEINT,
+ },
+
+ [MOVE_HONE_CLAWS] =
+ {
+ .effect = EFFECT_ATTACK_ACCURACY_UP,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
+ },
+
+ [MOVE_WIDE_GUARD] =
+ {
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_ROCK,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .argument = TRUE, // Protects the whole side.
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_GUARD_SPLIT] =
+ {
+ .effect = EFFECT_GUARD_SPLIT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_POWER_SPLIT] =
+ {
+ .effect = EFFECT_POWER_SPLIT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_WONDER_ROOM] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .priority = 0,
+ #else
+ .priority = -7,
+ #endif
+ .effect = EFFECT_WONDER_ROOM,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
+ },
+
+ [MOVE_PSYSHOCK] =
+ {
+ .effect = EFFECT_PSYSHOCK,
+ .power = 80,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_VENOSHOCK] =
+ {
+ .effect = EFFECT_VENOSHOCK,
+ .power = 65,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_AUTOTOMIZE] =
+ {
+ .effect = EFFECT_AUTOTOMIZE,
+ .power = 0,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_RAGE_POWDER] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .priority = 2,
+ #else
+ .priority = 3,
+ #endif
+ .effect = EFFECT_FOLLOW_ME,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .flags = FLAG_POWDER,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_TELEKINESIS] =
+ {
+ .effect = EFFECT_TELEKINESIS,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_MAGIC_ROOM] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .priority = 0,
+ #else
+ .priority = -7,
+ #endif
+ .effect = EFFECT_MAGIC_ROOM,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
+ },
+
+ [MOVE_SMACK_DOWN] =
+ {
+ .effect = EFFECT_SMACK_DOWN,
+ .power = 50,
+ .type = TYPE_ROCK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STORM_THROW] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 60,
+ .zMovePower = 120,
+ #else
+ .power = 40,
+ .zMovePower = 100,
+ #endif
+ .effect = EFFECT_ALWAYS_CRIT,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FLAME_BURST] =
+ {
+ .effect = EFFECT_FLAME_BURST,
+ .power = 70,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SLUDGE_WAVE] =
+ {
+ .effect = EFFECT_POISON_HIT,
+ .power = 95,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_QUIVER_DANCE] =
+ {
+ .effect = EFFECT_QUIVER_DANCE,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_HEAVY_SLAM] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #endif
+ .effect = EFFECT_HEAT_CRASH,
+ .power = 1,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SYNCHRONOISE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 120,
+ .pp = 10,
+ .zMovePower = 190,
+ #else
+ .power = 70,
+ .pp = 15,
+ .zMovePower = 140,
+ #endif
+ .effect = EFFECT_SYNCHRONOISE,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ELECTRO_BALL] =
+ {
+ .effect = EFFECT_ELECTRO_BALL,
+ .power = 1,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SOAK] =
+ {
+ .effect = EFFECT_SOAK,
+ .power = 0,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_FLAME_CHARGE] =
+ {
+ .effect = EFFECT_SPEED_UP_HIT,
+ .power = 50,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_COIL] =
+ {
+ .effect = EFFECT_COIL,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_LOW_SWEEP] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 65,
+ #else
+ .power = 60,
+ #endif
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ACID_SPRAY] =
+ {
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2,
+ .power = 40,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FOUL_PLAY] =
+ {
+ .effect = EFFECT_FOUL_PLAY,
+ .power = 95,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SIMPLE_BEAM] =
+ {
+ .effect = EFFECT_SIMPLE_BEAM,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_ENTRAINMENT] =
+ {
+ .effect = EFFECT_ENTRAINMENT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
+ },
+
+ [MOVE_AFTER_YOU] =
+ {
+ .effect = EFFECT_AFTER_YOU,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_ROUND] =
+ {
+ .effect = EFFECT_ROUND,
+ .power = 60,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ECHOED_VOICE] =
+ {
+ .effect = EFFECT_ECHOED_VOICE,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CHIP_AWAY] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CLEAR_SMOG] =
+ {
+ .effect = EFFECT_CLEAR_SMOG,
+ .power = 50,
+ .type = TYPE_POISON,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STORED_POWER] =
+ {
+ .effect = EFFECT_STORED_POWER,
+ .power = 20,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_QUICK_GUARD] =
+ {
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .argument = TRUE, // Protects the whole side.
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_ALLY_SWITCH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .priority = 2,
+ #else
+ .priority = 1,
+ #endif
+ .effect = EFFECT_ALLY_SWITCH,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_2,
+ },
+
+ [MOVE_SCALD] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .effect = EFFECT_SCALD,
+ #else
+ .effect = EFFECT_BURN_HIT,
+ #endif
+ .power = 80,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SHELL_SMASH] =
+ {
+ .effect = EFFECT_SHELL_SMASH,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_HEAL_PULSE] =
+ {
+ .effect = EFFECT_HEAL_PULSE,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_HEX] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 65,
+ #else
+ .power = 50,
+ #endif
+ .effect = EFFECT_HEX,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SKY_DROP] =
+ {
+ .effect = EFFECT_SKY_DROP,
+ .power = 60,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SHIFT_GEAR] =
+ {
+ .effect = EFFECT_SHIFT_GEAR,
+ .power = 0,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_CIRCLE_THROW] =
+ {
+ .effect = EFFECT_HIT_SWITCH_TARGET,
+ .power = 60,
+ .type = TYPE_FIGHTING,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -6,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_INCINERATE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 60,
+ .zMovePower = 120,
+ #else
+ .power = 30,
+ .zMovePower = 100,
+ #endif
+ .effect = EFFECT_INCINERATE,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_QUASH] =
+ {
+ .effect = EFFECT_QUASH,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_ACROBATICS] =
+ {
+ .effect = EFFECT_ACROBATICS,
+ .power = 55,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_REFLECT_TYPE] =
+ {
+ .effect = EFFECT_REFLECT_TYPE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_RETALIATE] =
+ {
+ .effect = EFFECT_RETALIATE,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FINAL_GAMBIT] =
+ {
+ .effect = EFFECT_FINAL_GAMBIT,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BESTOW] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ #endif
+ .effect = EFFECT_BESTOW,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_2,
+ },
+
+ [MOVE_INFERNO] =
+ {
+ .effect = EFFECT_BURN_HIT,
+ .power = 100,
+ .type = TYPE_FIRE,
+ .accuracy = 50,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_WATER_PLEDGE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 80,
+ .zMovePower = 160,
+ #else
+ .power = 50,
+ .zMovePower = 100,
+ #endif
+ .effect = EFFECT_PLEDGE,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FIRE_PLEDGE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 80,
+ .zMovePower = 160,
+ #else
+ .power = 50,
+ .zMovePower = 100,
+ #endif
+ .effect = EFFECT_PLEDGE,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_GRASS_PLEDGE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 80,
+ .zMovePower = 160,
+ #else
+ .power = 50,
+ .zMovePower = 100,
+ #endif
+ .effect = EFFECT_PLEDGE,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_VOLT_SWITCH] =
+ {
+ .effect = EFFECT_HIT_ESCAPE,
+ .power = 70,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STRUGGLE_BUG] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 50,
+ #else
+ .power = 30,
+ #endif
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BULLDOZE] =
+ {
+ .effect = EFFECT_BULLDOZE,
+ .power = 60,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FROST_BREATH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 60,
+ .zMovePower = 120,
+ #else
+ .power = 40,
+ .zMovePower = 100,
+ #endif
+ .effect = EFFECT_ALWAYS_CRIT,
+ .type = TYPE_ICE,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRAGON_TAIL] =
+ {
+ .effect = EFFECT_HIT_SWITCH_TARGET,
+ .power = 60,
+ .type = TYPE_DRAGON,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -6,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_WORK_UP] =
+ {
+ .effect = EFFECT_ATTACK_SPATK_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
+ },
+
+ [MOVE_ELECTROWEB] =
+ {
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 55,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_WILD_CHARGE] =
+ {
+ .effect = EFFECT_RECOIL_25,
+ .power = 90,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRILL_RUN] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_GROUND,
+ .accuracy = 95,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DUAL_CHOP] =
+ {
+ .effect = EFFECT_DOUBLE_HIT,
+ .power = 40,
+ .type = TYPE_DRAGON,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HEART_STAMP] =
+ {
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 60,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HORN_LEECH] =
+ {
+ .effect = EFFECT_ABSORB,
+ .power = 75,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SACRED_SWORD] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .pp = 15,
+ #else
+ .pp = 20,
+ #endif
+ .effect = EFFECT_HIT,
+ .power = 90,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_RAZOR_SHELL] =
+ {
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 75,
+ .type = TYPE_WATER,
+ .accuracy = 95,
+ .pp = 10,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HEAT_CRASH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #endif
+ .effect = EFFECT_HEAT_CRASH,
+ .power = 1,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LEAF_TORNADO] =
+ {
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_GRASS,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STEAMROLLER] =
+ {
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 65,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_COTTON_GUARD] =
+ {
+ .effect = EFFECT_DEFENSE_UP_3,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_NIGHT_DAZE] =
+ {
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 85,
+ .type = TYPE_DARK,
+ .accuracy = 95,
+ .pp = 10,
+ .secondaryEffectChance = 40,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PSYSTRIKE] =
+ {
+ .effect = EFFECT_PSYSHOCK,
+ .power = 100,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TAIL_SLAP] =
+ {
+ .effect = EFFECT_MULTI_HIT,
+ .power = 25,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HURRICANE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 110,
+ .zMovePower = 185,
+ #else
+ .power = 120,
+ .zMovePower = 190,
+ #endif
+ .effect = EFFECT_HURRICANE,
+ .type = TYPE_FLYING,
+ .accuracy = 70,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HEAD_CHARGE] =
+ {
+ .effect = EFFECT_RECOIL_25,
+ .power = 120,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_GEAR_GRIND] =
+ {
+ .effect = EFFECT_DOUBLE_HIT,
+ .power = 50,
+ .type = TYPE_STEEL,
+ .accuracy = 85,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SEARING_SHOT] =
+ {
+ .effect = EFFECT_BURN_HIT,
+ .power = 100,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TECHNO_BLAST] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .power = 120,
+ .zMovePower = 190,
+ #else
+ .power = 85,
+ .zMovePower = 160,
+ #endif
+ .effect = EFFECT_CHANGE_TYPE_ON_ITEM,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .argument = HOLD_EFFECT_DRIVE,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_RELIC_SONG] =
+ {
+ .effect = EFFECT_RELIC_SONG,
+ .power = 75,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ .argument = STATUS1_SLEEP,
+ },
+
+ [MOVE_SECRET_SWORD] =
+ {
+ .effect = EFFECT_PSYSHOCK,
+ .power = 85,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_GLACIATE] =
+ {
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_ICE,
+ .accuracy = 95,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BOLT_STRIKE] =
+ {
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 130,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 85,
+ .pp = 5,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 195,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BLUE_FLARE] =
+ {
+ .effect = EFFECT_BURN_HIT,
+ .power = 130,
+ .type = TYPE_FIRE,
+ .accuracy = 85,
+ .pp = 5,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 195,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FIERY_DANCE] =
+ {
+ .effect = EFFECT_SP_ATTACK_UP_HIT,
+ .power = 80,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FREEZE_SHOCK] =
+ {
+ .effect = EFFECT_TWO_TURNS_ATTACK,
+ .power = 140,
+ .type = TYPE_ICE,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .argument = MOVE_EFFECT_PARALYSIS,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ICE_BURN] =
+ {
+ .effect = EFFECT_TWO_TURNS_ATTACK,
+ .power = 140,
+ .type = TYPE_ICE,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .argument = MOVE_EFFECT_BURN,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SNARL] =
+ {
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT,
+ .power = 55,
+ .type = TYPE_DARK,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ICICLE_CRASH] =
+ {
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 85,
+ .type = TYPE_ICE,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_V_CREATE] =
+ {
+ .effect = EFFECT_V_CREATE,
+ .power = 180,
+ .type = TYPE_FIRE,
+ .accuracy = 95,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 220,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FUSION_FLARE] =
+ {
+ .effect = EFFECT_FUSION_COMBO,
+ .power = 100,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FUSION_BOLT] =
+ {
+ .effect = EFFECT_FUSION_COMBO,
+ .power = 100,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FLYING_PRESS] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .power = 100,
+ #else
+ .power = 80,
+ #endif
+ .effect = EFFECT_TWO_TYPED_MOVE,
+ .type = TYPE_FIGHTING,
+ .accuracy = 95,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE,
+ .split = SPLIT_PHYSICAL,
+ .argument = TYPE_FLYING,
+ .zMovePower = 170,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MAT_BLOCK] =
+ {
+ .effect = EFFECT_MAT_BLOCK,
+ .power = 0,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .argument = TRUE, // Protects the whole side.
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_BELCH] =
+ {
+ .effect = EFFECT_BELCH,
+ .power = 120,
+ .type = TYPE_POISON,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ROTOTILLER] =
+ {
+ .effect = EFFECT_ROTOTILLER,
+ .power = 0,
+ .type = TYPE_GROUND,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
+ },
+
+ [MOVE_STICKY_WEB] =
+ {
+ .effect = EFFECT_STICKY_WEB,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_OPPONENTS_FIELD,
+ .priority = 0,
+ .flags = FLAG_MAGIC_COAT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_FELL_STINGER] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .power = 50,
+ #else
+ .power = 30,
+ #endif
+ .effect = EFFECT_FELL_STINGER,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PHANTOM_FORCE] =
+ {
+ #if B_UPDATED_MOVE_DATA == GEN_6
+ .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #endif
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 90,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .argument = MOVE_EFFECT_FEINT,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TRICK_OR_TREAT] =
+ {
+ .effect = EFFECT_THIRD_TYPE,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .argument = TYPE_GHOST,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1,
+ },
+
+ [MOVE_NOBLE_ROAR] =
+ {
+ .effect = EFFECT_NOBLE_ROAR,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_ION_DELUGE] =
+ {
+ .effect = EFFECT_ION_DELUGE,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 1,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_PARABOLIC_CHARGE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .power = 65,
+ .zMovePower = 120,
+ #else
+ .power = 50,
+ .zMovePower = 100,
+ #endif
+ .effect = EFFECT_ABSORB,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FORESTS_CURSE] =
+ {
+ .effect = EFFECT_THIRD_TYPE,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .argument = TYPE_GRASS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1,
+ },
+
+ [MOVE_PETAL_BLIZZARD] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 90,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FREEZE_DRY] =
+ {
+ .effect = EFFECT_FREEZE_DRY,
+ .power = 70,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DISARMING_VOICE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PARTING_SHOT] =
+ {
+ .effect = EFFECT_PARTING_SHOT,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP,
+ },
+
+ [MOVE_TOPSY_TURVY] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .accuracy = 0,
+ #else
+ .accuracy = 100,
+ #endif
+ .effect = EFFECT_TOPSY_TURVY,
+ .power = 0,
+ .type = TYPE_DARK,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
+ },
+
+ [MOVE_DRAINING_KISS] =
+ {
+ .effect = EFFECT_ABSORB,
+ .power = 50,
+ .type = TYPE_FAIRY,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .argument = 75, // restores 75% HP instead of 50% HP
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+
+ },
+
+ [MOVE_CRAFTY_SHIELD] =
+ {
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .argument = TRUE, // Protects the whole side.
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
+ },
+
+ [MOVE_FLOWER_SHIELD] =
+ {
+ .effect = EFFECT_FLOWER_SHIELD,
+ .power = 0,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_GRASSY_TERRAIN] =
+ {
+ .effect = EFFECT_GRASSY_TERRAIN,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_MISTY_TERRAIN] =
+ {
+ .effect = EFFECT_MISTY_TERRAIN,
+ .power = 0,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
+ },
+
+ [MOVE_ELECTRIFY] =
+ {
+ .effect = EFFECT_ELECTRIFY,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_PLAY_ROUGH] =
+ {
+ .effect = EFFECT_ATTACK_DOWN_HIT,
+ .power = 90,
+ .type = TYPE_FAIRY,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FAIRY_WIND] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_FAIRY,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MOONBLAST] =
+ {
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT,
+ .power = 95,
+ .type = TYPE_FAIRY,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BOOMBURST] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 140,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FAIRY_LOCK] =
+ {
+ .effect = EFFECT_FAIRY_LOCK,
+ .power = 0,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_KINGS_SHIELD] =
+ {
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 4,
+ .flags = FLAG_PROTECTION_MOVE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_PLAY_NICE] =
+ {
+ .effect = EFFECT_ATTACK_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_CONFIDE] =
+ {
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
+ },
+
+ [MOVE_DIAMOND_STORM] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .effect = EFFECT_DEFENSE_UP2_HIT,
+ #else
+ .effect = EFFECT_DEFENSE_UP_HIT,
+ #endif
+ .power = 100,
+ .type = TYPE_ROCK,
+ .accuracy = 95,
+ .pp = 5,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STEAM_ERUPTION] =
+ {
+ .effect = EFFECT_SCALD,
+ .power = 110,
+ .type = TYPE_WATER,
+ .accuracy = 95,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 185,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HYPERSPACE_HOLE] =
+ {
+ .effect = EFFECT_FEINT,
+ .power = 80,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_WATER_SHURIKEN] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .split = SPLIT_SPECIAL,
+ #else
+ .split = SPLIT_PHYSICAL,
+ #endif
+ .effect = EFFECT_MULTI_HIT,
+ .power = 15,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+
+ },
+
+ [MOVE_MYSTICAL_FIRE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_7
+ .power = 75,
+ .zMovePower = 140,
+ #else
+ .power = 65,
+ .zMovePower = 120,
+ #endif
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SPIKY_SHIELD] =
+ {
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 4,
+ .flags = FLAG_PROTECTION_MOVE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_AROMATIC_MIST] =
+ {
+ .effect = EFFECT_AROMATIC_MIST,
+ .power = 0,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALLY,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_2,
+ },
+
+ [MOVE_EERIE_IMPULSE] =
+ {
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN_2,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
+ },
+
+ [MOVE_VENOM_DRENCH] =
+ {
+ .effect = EFFECT_VENOM_DRENCH,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_POWDER] =
+ {
+ .effect = EFFECT_POWDER,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_2,
+ },
+
+ [MOVE_GEOMANCY] =
+ {
+ .effect = EFFECT_GEOMANCY,
+ .power = 0,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1,
+ },
+
+ [MOVE_MAGNETIC_FLUX] =
+ {
+ .effect = EFFECT_MAGNETIC_FLUX,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
+ },
+
+ [MOVE_HAPPY_HOUR] =
+ {
+ .effect = EFFECT_DO_NOTHING,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1,
+ },
+
+ [MOVE_ELECTRIC_TERRAIN] =
+ {
+ .effect = EFFECT_ELECTRIC_TERRAIN,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_DAZZLING_GLEAM] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_FAIRY,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CELEBRATE] =
+ {
+ .effect = EFFECT_DO_NOTHING,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1,
+ },
+
+ [MOVE_HOLD_HANDS] =
+ {
+ .effect = EFFECT_DO_NOTHING,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALLY,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1,
+ },
+
+ [MOVE_BABY_DOLL_EYES] =
+ {
+ .effect = EFFECT_ATTACK_DOWN,
+ .power = 0,
+ .type = TYPE_FAIRY,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_NUZZLE] =
+ {
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 20,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HOLD_BACK] =
+ {
+ .effect = EFFECT_FALSE_SWIPE,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_INFESTATION] =
+ {
+ .effect = EFFECT_TRAP,
+ .power = 20,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_POWER_UP_PUNCH] =
+ {
+ .effect = EFFECT_ATTACK_UP_HIT,
+ .power = 40,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_OBLIVION_WING] =
+ {
+ .effect = EFFECT_ABSORB,
+ .power = 80,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .argument = 75, // restores 75% HP instead of 50% HP
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_THOUSAND_ARROWS] =
+ {
+ .effect = EFFECT_SMACK_DOWN,
+ .power = 90,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR | FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_THOUSAND_WAVES] =
+ {
+ .effect = EFFECT_HIT_PREVENT_ESCAPE,
+ .power = 90,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LANDS_WRATH] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 90,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LIGHT_OF_RUIN] =
+ {
+ .effect = EFFECT_RECOIL_50,
+ .power = 140,
+ .type = TYPE_FAIRY,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ORIGIN_PULSE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 110,
+ .type = TYPE_WATER,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 185,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PRECIPICE_BLADES] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 120,
+ .type = TYPE_GROUND,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRAGON_ASCENT] =
+ {
+ .effect = EFFECT_CLOSE_COMBAT,
+ .power = 120,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_HYPERSPACE_FURY] =
+ {
+ .effect = EFFECT_HYPERSPACE_FURY,
+ .power = 100,
+ .type = TYPE_DARK,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIT_IN_SUBSTITUTE,
+ .split = SPLIT_PHYSICAL,
+ },
+
+ [MOVE_SHORE_UP] =
+ {
+ .effect = EFFECT_SHORE_UP,
+ .power = 0,
+ .type = TYPE_GROUND,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_FIRST_IMPRESSION] =
+ {
+ .effect = EFFECT_FAKE_OUT,
+ .power = 90,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 2,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BANEFUL_BUNKER] =
+ {
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 4,
+ .flags = FLAG_PROTECTION_MOVE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_SPIRIT_SHACKLE] =
+ {
+ .effect = EFFECT_HIT_PREVENT_ESCAPE,
+ .power = 80,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DARKEST_LARIAT] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 85,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SPARKLING_ARIA] =
+ {
+ .effect = EFFECT_SPARKLING_ARIA,
+ .power = 90,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .argument = STATUS1_BURN,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ICE_HAMMER] =
+ {
+ .effect = EFFECT_HAMMER_ARM,
+ .power = 100,
+ .type = TYPE_ICE,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FLORAL_HEALING] =
+ {
+ .effect = EFFECT_HEAL_PULSE,
+ .power = 0,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_RESET_STATS,
+ },
+
+ [MOVE_HIGH_HORSEPOWER] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 95,
+ .type = TYPE_GROUND,
+ .accuracy = 95,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STRENGTH_SAP] =
+ {
+ .effect = EFFECT_STRENGTH_SAP,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_SOLAR_BLADE] =
+ {
+ .effect = EFFECT_SOLAR_BEAM,
+ .power = 125,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LEAFAGE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SPOTLIGHT] =
+ {
+ .effect = EFFECT_FOLLOW_ME,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 3,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPDEF_UP_1,
+ },
+
+ [MOVE_TOXIC_THREAD] =
+ {
+ .effect = EFFECT_TOXIC_THREAD,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_LASER_FOCUS] =
+ {
+ .effect = EFFECT_LASER_FOCUS,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ATK_UP_1,
+ },
+
+ [MOVE_GEAR_UP] =
+ {
+ .effect = EFFECT_GEAR_UP,
+ .power = 0,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_THROAT_CHOP] =
+ {
+ .effect = EFFECT_THROAT_CHOP,
+ .power = 80,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_POLLEN_PUFF] =
+ {
+ .effect = EFFECT_HIT_ENEMY_HEAL_ALLY,
+ .power = 90,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ANCHOR_SHOT] =
+ {
+ .effect = EFFECT_HIT_PREVENT_ESCAPE,
+ .power = 80,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PSYCHIC_TERRAIN] =
+ {
+ .effect = EFFECT_PSYCHIC_TERRAIN,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_LUNGE] =
+ {
+ .effect = EFFECT_ATTACK_DOWN_HIT,
+ .power = 80,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FIRE_LASH] =
+ {
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 80,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_POWER_TRIP] =
+ {
+ .effect = EFFECT_STORED_POWER,
+ .power = 20,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BURN_UP] =
+ {
+ .effect = EFFECT_BURN_UP,
+ .power = 130,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 195,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SPEED_SWAP] =
+ {
+ .effect = EFFECT_SPEED_SWAP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_SMART_STRIKE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 70,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PURIFY] =
+ {
+ .effect = EFFECT_PURIFY,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1,
+ },
+
+ [MOVE_REVELATION_DANCE] =
+ {
+ .effect = EFFECT_REVELATION_DANCE,
+ .power = 90,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CORE_ENFORCER] =
+ {
+ .effect = EFFECT_CORE_ENFORCER,
+ .power = 100,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TROP_KICK] =
+ {
+ .effect = EFFECT_ATTACK_DOWN_HIT,
+ .power = 70,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_INSTRUCT] =
+ {
+ .effect = EFFECT_INSTRUCT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPATK_UP_1,
+ },
+
+ [MOVE_BEAK_BLAST] =
+ {
+ .effect = EFFECT_BEAK_BLAST,
+ .power = 100,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -3,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CLANGING_SCALES] =
+ {
+ .effect = EFFECT_ATTACKER_DEFENSE_DOWN_HIT,
+ .power = 110,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 185,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRAGON_HAMMER] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 90,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BRUTAL_SWING] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 60,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_AURORA_VEIL] =
+ {
+ .effect = EFFECT_AURORA_VEIL,
+ .power = 0,
+ .type = TYPE_ICE,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_SPD_UP_1,
+ },
+
+ [MOVE_SHELL_TRAP] =
+ {
+ .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP,
+ .power = 150,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = -3,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FLEUR_CANNON] =
+ {
+ .effect = EFFECT_OVERHEAT,
+ .power = 130,
+ .type = TYPE_FAIRY,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 195,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PSYCHIC_FANGS] =
+ {
+ .effect = EFFECT_BRICK_BREAK,
+ .power = 85,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STOMPING_TANTRUM] =
+ {
+ .effect = EFFECT_STOMPING_TANTRUM,
+ .power = 75,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SHADOW_BONE] =
+ {
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 85,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ACCELEROCK] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_ROCK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LIQUIDATION] =
+ {
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 85,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PRISMATIC_LASER] =
+ {
+ .effect = EFFECT_RECHARGE,
+ .power = 160,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SPECTRAL_THIEF] =
+ {
+ .effect = EFFECT_SPECTRAL_THIEF,
+ .power = 90,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SUNSTEEL_STRIKE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 100,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MOONGEIST_BEAM] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 100,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TEARFUL_LOOK] =
+ {
+ .effect = EFFECT_NOBLE_ROAR,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_DEF_UP_1,
+ },
+
+ [MOVE_ZING_ZAP] =
+ {
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 80,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_NATURES_MADNESS] =
+ {
+ .effect = EFFECT_SUPER_FANG,
+ .power = 1,
+ .type = TYPE_FAIRY,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MULTI_ATTACK] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 120,
+ .zMovePower = 190,
+ #else
+ .power = 90,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_CHANGE_TYPE_ON_ITEM,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .argument = HOLD_EFFECT_MEMORY,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MIND_BLOWN] =
+ {
+ .effect = EFFECT_MIND_BLOWN,
+ .power = 150,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PLASMA_FISTS] =
+ {
+ .effect = EFFECT_PLASMA_FISTS,
+ .power = 100,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PHOTON_GEYSER] =
+ {
+ .effect = EFFECT_PHOTON_GEYSER,
+ .power = 100,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ZIPPY_ZAP] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 80,
+ .effect = EFFECT_EVASION_UP_HIT,
+ .pp = 10,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .zMovePower = 160,
+ #else
+ .effect = EFFECT_ALWAYS_CRIT,
+ .power = 50,
+ .pp = 15,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 100,
+ #endif
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 2,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SPLISHY_SPLASH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 90,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FLOATY_FALL] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ #endif
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 90,
+ .type = TYPE_FLYING,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PIKA_PAPOW] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #else
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #endif
+ .effect = EFFECT_RETURN,
+ .power = 1,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BOUNCY_BUBBLE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 60,
+ .pp = 20,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .argument = 100, // restores 100% HP instead of 50% HP
+ .zMovePower = 120,
+ #else
+ .power = 90,
+ .pp = 15,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_ABSORB,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BUZZY_BUZZ] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 60,
+ .pp = 20,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 120,
+ #else
+ .power = 90,
+ .pp = 15,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_PARALYZE_HIT,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SIZZLY_SLIDE] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 60,
+ .pp = 20,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER,
+ .zMovePower = 120,
+ #else
+ .power = 90,
+ .pp = 15,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_BURN_HIT,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_GLITZY_GLOW] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 80,
+ .accuracy = 95,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 160,
+ #else
+ .power = 90,
+ .accuracy = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_GLITZY_GLOW,
+ .type = TYPE_PSYCHIC,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BADDY_BAD] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 80,
+ .accuracy = 95,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 160,
+ #else
+ .power = 90,
+ .accuracy = 100,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_BADDY_BAD,
+ .type = TYPE_DARK,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SAPPY_SEED] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 100,
+ .accuracy = 90,
+ .pp = 10,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 180,
+ #else
+ .power = 90,
+ .accuracy = 100,
+ .pp = 15,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_SAPPY_SEED,
+ .type = TYPE_GRASS,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FREEZY_FROST] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 100,
+ .accuracy = 90,
+ .pp = 10,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 180,
+ #else
+ .power = 90,
+ .accuracy = 100,
+ .pp = 15,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_FREEZY_FROST,
+ .type = TYPE_ICE,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SPARKLY_SWIRL] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .power = 120,
+ .accuracy = 85,
+ .pp = 5,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 190,
+ #else
+ .power = 90,
+ .accuracy = 100,
+ .pp = 15,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .zMovePower = 175,
+ #endif
+ .effect = EFFECT_SPARKLY_SWIRL,
+ .type = TYPE_FAIRY,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_VEEVEE_VOLLEY] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ #endif
+ .effect = EFFECT_RETURN,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DOUBLE_IRON_BASH] =
+ {
+ #if B_UPDATED_MOVE_DATA >= GEN_8
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES,
+ #else
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_MINIMIZE | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES,
+ #endif
+ .effect = EFFECT_DOUBLE_IRON_BASH,
+ .power = 60,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DYNAMAX_CANNON] =
+ {
+ .effect = EFFECT_DYNAMAX_DOUBLE_DMG,
+ .power = 100,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SNIPE_SHOT] =
+ {
+ .effect = EFFECT_SNIPE_SHOT,
+ .power = 80,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_JAW_LOCK] =
+ {
+ .effect = EFFECT_JAW_LOCK,
+ .power = 80,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STUFF_CHEEKS] =
+ {
+ .effect = EFFECT_STUFF_CHEEKS,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_NO_RETREAT] =
+ {
+ .effect = EFFECT_NO_RETREAT,
+ .power = 0,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TAR_SHOT] =
+ {
+ .effect = EFFECT_TAR_SHOT,
+ .power = 0,
+ .type = TYPE_ROCK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MAGIC_POWDER] =
+ {
+ .effect = EFFECT_SOAK,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER,
+ .split = SPLIT_STATUS,
+ .argument = TYPE_PSYCHIC,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRAGON_DARTS] =
+ {
+ .effect = EFFECT_MULTI_HIT, //TODO
+ .power = 50,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TEATIME] =
+ {
+ .effect = EFFECT_PLACEHOLDER, //TODO
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_OCTOLOCK] =
+ {
+ .effect = EFFECT_OCTOLOCK,
+ .power = 0,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BOLT_BEAK] =
+ {
+ .effect = EFFECT_BOLT_BEAK,
+ .power = 85,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FISHIOUS_REND] =
+ {
+ .effect = EFFECT_BOLT_BEAK,
+ .power = 85,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_COURT_CHANGE] =
+ {
+ .effect = EFFECT_COURT_CHANGE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALL_BATTLERS,
+ .priority = 0,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CLANGOROUS_SOUL] =
+ {
+ .effect = EFFECT_CLANGOROUS_SOUL,
+ .power = 0,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BODY_PRESS] =
+ {
+ .effect = EFFECT_BODY_PRESS,
+ .power = 80,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DECORATE] =
+ {
+ .effect = EFFECT_DECORATE,
+ .power = 0,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRUM_BEATING] =
+ {
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 80,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SNAP_TRAP] =
+ {
+ .effect = EFFECT_TRAP,
+ .power = 35,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_PYRO_BALL] =
+ {
+ .effect = EFFECT_BURN_HIT,
+ .power = 120,
+ .type = TYPE_FIRE,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BEHEMOTH_BLADE] =
+ {
+ .effect = EFFECT_DYNAMAX_DOUBLE_DMG,
+ .power = 100,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BEHEMOTH_BASH] =
+ {
+ .effect = EFFECT_DYNAMAX_DOUBLE_DMG,
+ .power = 100,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_AURA_WHEEL] =
+ {
+ .effect = EFFECT_AURA_WHEEL,
+ .power = 110,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 185,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BREAKING_SWIPE] =
+ {
+ .effect = EFFECT_ATTACK_DOWN_HIT,
+ .power = 60,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BRANCH_POKE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_OVERDRIVE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_APPLE_ACID] =
+ {
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 80,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_GRAV_APPLE] =
+ {
+ .effect = EFFECT_GRAV_APPLE,
+ .power = 80,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SPIRIT_BREAK] =
+ {
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT,
+ .power = 75,
+ .type = TYPE_FAIRY,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STRANGE_STEAM] =
+ {
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 90,
+ .type = TYPE_FAIRY,
+ .accuracy = 95,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LIFE_DEW] =
+ {
+ .effect = EFFECT_JUNGLE_HEALING,
+ .power = 0,
+ .type = TYPE_WATER,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_OBSTRUCT] =
+ {
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 4,
+ .flags = FLAG_PROTECTION_MOVE,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FALSE_SURRENDER] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_DARK,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_METEOR_ASSAULT] =
+ {
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ETERNABEAM] =
+ {
+ .effect = EFFECT_RECHARGE,
+ .power = 160,
+ .type = TYPE_DRAGON,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STEEL_BEAM] =
+ {
+ .effect = EFFECT_STEEL_BEAM,
+ .power = 140,
+ .type = TYPE_STEEL,
+ .accuracy = 95,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_EXPANDING_FORCE] =
+ {
+ .effect = EFFECT_EXPANDING_FORCE,
+ .power = 80,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_STEEL_ROLLER] =
+ {
+ .effect = EFFECT_REMOVE_TERRAIN,
+ .power = 130,
+ .type = TYPE_STEEL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 195,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SCALE_SHOT] =
+ {
+ .effect = EFFECT_SCALE_SHOT,
+ .power = 25,
+ .type = TYPE_DRAGON,
+ .accuracy = 90,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_METEOR_BEAM] =
+ {
+ .effect = EFFECT_METEOR_BEAM,
+ .power = 120,
+ .type = TYPE_ROCK,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SHELL_SIDE_ARM] =
+ {
+ .effect = EFFECT_SHELL_SIDE_ARM,
+ .power = 90,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_MISTY_EXPLOSION] =
+ {
+ .effect = EFFECT_EXPLOSION,
+ .power = 100,
+ .type = TYPE_FAIRY,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 180,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_GRASSY_GLIDE] =
+ {
+ .effect = EFFECT_GRASSY_GLIDE,
+ .power = 70,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_RISING_VOLTAGE] =
+ {
+ .effect = EFFECT_RISING_VOLTAGE,
+ .power = 70,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TERRAIN_PULSE] =
+ {
+ .effect = EFFECT_TERRAIN_PULSE,
+ .power = 50,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SKITTER_SMACK] =
+ {
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT,
+ .power = 70,
+ .type = TYPE_BUG,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_BURNING_JEALOUSY] =
+ {
+ .effect = EFFECT_BURN_HIT,
+ .power = 70,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_LASH_OUT] =
+ {
+ .effect = EFFECT_LASH_OUT,
+ .power = 75,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_POLTERGEIST] =
+ {
+ .effect = EFFECT_POLTERGEIST,
+ .power = 110,
+ .type = TYPE_GHOST,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 185,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_CORROSIVE_GAS] =
+ {
+ .effect = EFFECT_PLACEHOLDER, // EFFECT_CORROSIVE_GAS, TODO
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_COACHING] =
+ {
+ .effect = EFFECT_COACHING,
+ .power = 0,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_ALLY,
+ .priority = 0,
+ .flags = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FLIP_TURN] =
+ {
+ .effect = EFFECT_HIT_ESCAPE,
+ .power = 60,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 120,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_TRIPLE_AXEL] =
+ {
+ .effect = EFFECT_TRIPLE_KICK,
+ .power = 20,
+ .type = TYPE_ICE,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DUAL_WINGBEAT] =
+ {
+ .effect = EFFECT_DOUBLE_HIT,
+ .power = 40,
+ .type = TYPE_FLYING,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SCORCHING_SANDS] =
+ {
+ .effect = EFFECT_SCALD,
+ .power = 70,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 140,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_JUNGLE_HEALING] =
+ {
+ .effect = EFFECT_JUNGLE_HEALING,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .split = SPLIT_STATUS,
+ .zMovePower = 0,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_WICKED_BLOW] =
+ {
+ .effect = EFFECT_ALWAYS_CRIT,
+ .power = 80,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_SURGING_STRIKES] =
+ {
+ .effect = EFFECT_TRIPLE_HIT,
+ .power = 25,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 100,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_THUNDER_CAGE] =
+ {
+ .effect = EFFECT_TRAP,
+ .power = 80,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_DRAGON_ENERGY] =
+ {
+ .effect = EFFECT_ERUPTION,
+ .power = 150,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 200,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FREEZING_GLARE] =
+ {
+ .power = 90,
+ .effect = EFFECT_FREEZE_HIT,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_FIERY_WRATH] =
+ {
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 90,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_THUNDEROUS_KICK] =
+ {
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 90,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 175,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_GLACIAL_LANCE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 130,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_PHYSICAL,
+ .zMovePower = 195,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_ASTRAL_BARRAGE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 120,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 190,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ [MOVE_EERIE_SPELL] =
+ {
+ .effect = EFFECT_EERIE_SPELL,
+ .power = 80,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
+ .split = SPLIT_SPECIAL,
+ .zMovePower = 160,
+ .zMoveEffect = Z_EFFECT_NONE,
+ },
+
+ // Z MOVES
+ [MOVE_BREAKNECK_BLITZ] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL, //determined from move type
+ .zMoveEffect = 0
+ },
+ [MOVE_ALL_OUT_PUMMELING] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_SUPERSONIC_SKYSTRIKE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_FLYING,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_ACID_DOWNPOUR] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_POISON,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_TECTONIC_RAGE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_GROUND,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_CONTINENTAL_CRUSH] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_ROCK,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_SAVAGE_SPIN_OUT] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_BUG,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_NEVER_ENDING_NIGHTMARE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_GHOST,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_CORKSCREW_CRASH] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_INFERNO_OVERDRIVE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_FIRE,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_HYDRO_VORTEX] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_WATER,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_BLOOM_DOOM] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_GIGAVOLT_HAVOC] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_SHATTERED_PSYCHE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_SUBZERO_SLAMMER] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_ICE,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_DEVASTATING_DRAKE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_DRAGON,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_BLACK_HOLE_ECLIPSE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_DARK,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_TWINKLE_TACKLE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 1,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_CATASTROPIKA] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 210,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_10000000_VOLT_THUNDERBOLT] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 195,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_HIGH_CRIT,
+ .zMovePower = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_STOKED_SPARKSURFER] =
+ {
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 175,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_EXTREME_EVOBOOST] =
+ {
+ .effect = EFFECT_EXTREME_EVOBOOST,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_STATUS,
+ .zMoveEffect = 0
+ },
+ [MOVE_PULVERIZING_PANCAKE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 210,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_GENESIS_SUPERNOVA] =
+ {
+ .effect = EFFECT_DAMAGE_SET_TERRAIN,
+ .power = 185,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_SPECIAL,
+ .argument = 0, //psychic terrain
+ .zMoveEffect = 0
+ },
+ [MOVE_SINISTER_ARROW_RAID] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 180,
+ .type = TYPE_GHOST,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_MALICIOUS_MOONSAULT] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 180,
+ .type = TYPE_DARK,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_OCEANIC_OPERETTA] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 195,
+ .type = TYPE_WATER,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_SPLINTERED_STORMSHARDS] =
+ {
+ .effect = EFFECT_DAMAGE_SET_TERRAIN,
+ .power = 190,
+ .type = TYPE_ROCK,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .argument = 1, //remove terrain
+ .zMoveEffect = 0
+ },
+ [MOVE_LETS_SNUGGLE_FOREVER] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 190,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_CLANGOROUS_SOULBLAZE] =
+ {
+ .effect = EFFECT_ALL_STATS_UP_HIT,
+ .power = 185,
+ .type = TYPE_DRAGON,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_SOUND,
+ .zMovePower = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_GUARDIAN_OF_ALOLA] =
+ {
+ .effect = EFFECT_SUPER_FANG,
+ .power = 1,
+ .type = TYPE_FAIRY,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_SEARING_SUNRAZE_SMASH] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 200,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_MENACING_MOONRAZE_MAELSTROM] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 200,
+ .type = TYPE_GHOST,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_LIGHT_THAT_BURNS_THE_SKY] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 200,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_SPECIAL,
+ .zMoveEffect = 0
+ },
+ [MOVE_SOUL_STEALING_7_STAR_STRIKE] =
+ {
+ .effect = EFFECT_HIT,
+ .power = 195,
+ .type = TYPE_GHOST,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ .zMovePower = 0,
+ .split = SPLIT_PHYSICAL,
+ .zMoveEffect = 0
},
};
diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h
index 84a4d271b1..169e55991d 100644
--- a/src/data/contest_moves.h
+++ b/src/data/contest_moves.h
@@ -1,3 +1,4 @@
+// gen 4+ data from urpg's contest movedex
const struct ContestMove gContestMoves[MOVES_COUNT] =
{
[MOVE_NONE] = {0},
@@ -7,7 +8,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_POUND,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_KARATE_CHOP] =
@@ -31,7 +32,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_MEGA_PUNCH] =
@@ -47,7 +48,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FIRE_PUNCH] =
@@ -55,7 +56,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = COMBO_STARTER_FIRE_PUNCH,
- .comboMoves = {COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_THUNDER_PUNCH, COMBO_STARTER_ICE_PUNCH},
+ .comboMoves = {COMBO_STARTER_ICE_PUNCH, COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_THUNDER_PUNCH},
},
[MOVE_ICE_PUNCH] =
@@ -63,7 +64,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = COMBO_STARTER_ICE_PUNCH,
- .comboMoves = {COMBO_STARTER_THUNDER_PUNCH, COMBO_STARTER_FIRE_PUNCH},
+ .comboMoves = {COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_THUNDER_PUNCH},
},
[MOVE_THUNDER_PUNCH] =
@@ -87,7 +88,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_VICE_GRIP,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_GUILLOTINE] =
@@ -103,7 +104,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SWORDS_DANCE] =
@@ -111,7 +112,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = COMBO_STARTER_SWORDS_DANCE,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_CUT] =
@@ -127,7 +128,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_WING_ATTACK] =
@@ -135,7 +136,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_WHIRLWIND] =
@@ -143,7 +144,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FLY] =
@@ -151,7 +152,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_BIND] =
@@ -182,7 +183,8 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
{
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
- .comboStarterId = 0,{0, COMBO_STARTER_LEER},
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_LEER},
},
[MOVE_DOUBLE_KICK] =
@@ -190,7 +192,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_MEGA_KICK] =
@@ -214,7 +216,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SAND_ATTACK] =
@@ -262,7 +264,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_LEER, COMBO_STARTER_HARDEN},
+ .comboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN, COMBO_STARTER_LEER},
},
[MOVE_BODY_SLAM] =
@@ -270,7 +272,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_WRAP] =
@@ -278,7 +280,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TAKE_DOWN] =
@@ -318,7 +320,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TWINEEDLE] =
@@ -326,7 +328,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_PIN_MISSILE] =
@@ -334,7 +336,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_LEER] =
@@ -366,7 +368,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SING] =
@@ -374,7 +376,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_SING,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SUPERSONIC] =
@@ -382,7 +384,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SONIC_BOOM] =
@@ -390,7 +392,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DISABLE] =
@@ -398,7 +400,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ACID] =
@@ -406,7 +408,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_EMBER] =
@@ -430,7 +432,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_WATER_GUN] =
@@ -438,7 +440,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_WATER_SPORT, COMBO_STARTER_MUD_SPORT},
+ .comboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_WATER_SPORT},
},
[MOVE_HYDRO_PUMP] =
@@ -454,7 +456,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = COMBO_STARTER_SURF,
- .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_DIVE},
+ .comboMoves = {COMBO_STARTER_DIVE, COMBO_STARTER_RAIN_DANCE},
},
[MOVE_ICE_BEAM] =
@@ -462,7 +464,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {COMBO_STARTER_HAIL},
},
[MOVE_BLIZZARD] =
@@ -470,7 +472,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_POWDER_SNOW, COMBO_STARTER_HAIL},
+ .comboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_POWDER_SNOW},
},
[MOVE_PSYBEAM] =
@@ -494,7 +496,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {COMBO_STARTER_HAIL},
},
[MOVE_HYPER_BEAM] =
@@ -502,7 +504,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_PECK] =
@@ -510,7 +512,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = COMBO_STARTER_PECK,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DRILL_PECK] =
@@ -534,7 +536,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_COUNTER] =
@@ -558,7 +560,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ABSORB] =
@@ -581,8 +583,8 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
{
.effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
- .comboStarterId = 0,
- .comboMoves = {0},
+ .comboStarterId = COMBO_STARTER_LEECH_SEED,
+ .comboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_WORRY_SEED},
},
[MOVE_GROWTH] =
@@ -590,7 +592,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = COMBO_STARTER_GROWTH,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_RAZOR_LEAF] =
@@ -606,7 +608,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_GROWTH},
+ .comboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_SUNNY_DAY},
},
[MOVE_POISON_POWDER] =
@@ -646,7 +648,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_STRING_SHOT,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DRAGON_RAGE] =
@@ -654,7 +656,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = COMBO_STARTER_DRAGON_RAGE,
- .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE},
+ .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL},
},
[MOVE_FIRE_SPIN] =
@@ -694,7 +696,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_LOCK_ON},
+ .comboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE},
},
[MOVE_ROCK_THROW] =
@@ -702,7 +704,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_ROCK_THROW,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_EARTHQUAKE] =
@@ -710,7 +712,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_EARTHQUAKE,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FISSURE] =
@@ -726,15 +728,15 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TOXIC] =
{
.effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
- .comboStarterId = 0,
- .comboMoves = {0},
+ .comboStarterId = COMBO_STARTER_TOXIC,
+ .comboMoves = {0}
},
[MOVE_CONFUSION] =
@@ -742,7 +744,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_CONFUSION,
- .comboMoves = {COMBO_STARTER_PSYCHIC, COMBO_STARTER_KINESIS, COMBO_STARTER_CALM_MIND},
+ .comboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC},
},
[MOVE_PSYCHIC] =
@@ -750,7 +752,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_PSYCHIC,
- .comboMoves = {COMBO_STARTER_KINESIS, COMBO_STARTER_CONFUSION, COMBO_STARTER_CALM_MIND},
+ .comboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS},
},
[MOVE_HYPNOSIS] =
@@ -758,7 +760,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_HYPNOSIS,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_MEDITATE] =
@@ -790,7 +792,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = COMBO_STARTER_RAGE,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TELEPORT] =
@@ -798,7 +800,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_DOUBLE_TEAM, COMBO_STARTER_PSYCHIC, COMBO_STARTER_KINESIS, COMBO_STARTER_CONFUSION},
+ .comboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_DOUBLE_TEAM, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC},
},
[MOVE_NIGHT_SHADE] =
@@ -806,7 +808,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_MIMIC] =
@@ -814,7 +816,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SCREECH] =
@@ -822,7 +824,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DOUBLE_TEAM] =
@@ -830,7 +832,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = COMBO_STARTER_DOUBLE_TEAM,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_RECOVER] =
@@ -838,7 +840,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_HARDEN] =
@@ -846,7 +848,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_HARDEN,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_MINIMIZE] =
@@ -854,7 +856,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SMOKESCREEN] =
@@ -870,7 +872,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_WITHDRAW] =
@@ -886,7 +888,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_DEFENSE_CURL,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_BARRIER] =
@@ -894,7 +896,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_LIGHT_SCREEN] =
@@ -910,7 +912,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {COMBO_STARTER_HAIL},
},
[MOVE_REFLECT] =
@@ -926,7 +928,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = COMBO_STARTER_FOCUS_ENERGY,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_BIDE] =
@@ -934,7 +936,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_METRONOME] =
@@ -942,7 +944,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_MIRROR_MOVE] =
@@ -950,7 +952,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SELF_DESTRUCT] =
@@ -958,7 +960,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_EGG_BOMB] =
@@ -974,7 +976,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SMOG] =
@@ -982,7 +984,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_SMOG,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SLUDGE] =
@@ -998,7 +1000,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_BONE_CLUB,
- .comboMoves = {COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH},
+ .comboMoves = {COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE},
},
[MOVE_FIRE_BLAST] =
@@ -1030,7 +1032,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SKULL_BASH] =
@@ -1038,7 +1040,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SPIKE_CANNON] =
@@ -1046,7 +1048,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_CONSTRICT] =
@@ -1054,7 +1056,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_AMNESIA] =
@@ -1062,7 +1064,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_KINESIS] =
@@ -1070,7 +1072,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_KINESIS,
- .comboMoves = {COMBO_STARTER_PSYCHIC, COMBO_STARTER_CONFUSION},
+ .comboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_PSYCHIC},
},
[MOVE_SOFT_BOILED] =
@@ -1078,7 +1080,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = COMBO_STARTER_SOFT_BOILED,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_HIGH_JUMP_KICK] =
@@ -1102,7 +1104,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_HYPNOSIS, COMBO_STARTER_CALM_MIND},
+ .comboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_HYPNOSIS},
},
[MOVE_POISON_GAS] =
@@ -1110,7 +1112,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_BARRAGE] =
@@ -1118,7 +1120,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_LEECH_LIFE] =
@@ -1126,7 +1128,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_LOVELY_KISS] =
@@ -1134,7 +1136,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SKY_ATTACK] =
@@ -1142,7 +1144,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TRANSFORM] =
@@ -1150,7 +1152,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_BUBBLE] =
@@ -1166,7 +1168,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SPORE] =
@@ -1174,7 +1176,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FLASH] =
@@ -1182,7 +1184,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_PSYWAVE] =
@@ -1198,7 +1200,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ACID_ARMOR] =
@@ -1206,7 +1208,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_CRABHAMMER] =
@@ -1222,7 +1224,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FURY_SWIPES] =
@@ -1238,7 +1240,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_BONEMERANG,
- .comboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONE_RUSH},
+ .comboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE},
},
[MOVE_REST] =
@@ -1262,7 +1264,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SHARPEN] =
@@ -1270,7 +1272,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_CONVERSION] =
@@ -1278,7 +1280,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TRI_ATTACK] =
@@ -1302,7 +1304,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_SWORDS_DANCE, COMBO_STARTER_SCRATCH},
+ .comboMoves = {COMBO_STARTER_SCRATCH, COMBO_STARTER_SWORDS_DANCE},
},
[MOVE_SUBSTITUTE] =
@@ -1310,23 +1312,17 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
- [MOVE_STRUGGLE] =
- {
- .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
- .contestCategory = CONTEST_CATEGORY_COOL,
- .comboStarterId = 0,
- .comboMoves = {0},
- },
+ [MOVE_STRUGGLE] = {0},
[MOVE_SKETCH] =
{
.effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TRIPLE_KICK] =
@@ -1342,7 +1338,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SPIDER_WEB] =
@@ -1358,7 +1354,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_MIND_READER,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_NIGHTMARE] =
@@ -1366,7 +1362,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_HYPNOSIS},
+ .comboMoves = {0}
},
[MOVE_FLAME_WHEEL] =
@@ -1390,7 +1386,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_CURSE,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FLAIL] =
@@ -1406,7 +1402,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_AEROBLAST] =
@@ -1414,7 +1410,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_COTTON_SPORE] =
@@ -1422,7 +1418,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_REVERSAL] =
@@ -1462,7 +1458,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SCARY_FACE] =
@@ -1470,7 +1466,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_SCARY_FACE,
- .comboMoves = {COMBO_STARTER_RAGE, COMBO_STARTER_LEER},
+ .comboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_RAGE},
},
[MOVE_FEINT_ATTACK] =
@@ -1494,7 +1490,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_BELLY_DRUM,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SLUDGE_BOMB] =
@@ -1510,7 +1506,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_MUD_SLAP,
- .comboMoves = {COMBO_STARTER_SAND_ATTACK, COMBO_STARTER_MUD_SPORT, COMBO_STARTER_SANDSTORM},
+ .comboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_SAND_ATTACK, COMBO_STARTER_SANDSTORM},
},
[MOVE_OCTAZOOKA] =
@@ -1518,7 +1514,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_LOCK_ON},
+ .comboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE},
},
[MOVE_SPIKES] =
@@ -1526,7 +1522,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ZAP_CANNON] =
@@ -1534,7 +1530,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_LOCK_ON},
+ .comboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON},
},
[MOVE_FORESIGHT] =
@@ -1542,7 +1538,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DESTINY_BOND] =
@@ -1550,7 +1546,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_MEAN_LOOK, COMBO_STARTER_CURSE, COMBO_STARTER_ENDURE},
+ .comboMoves = {COMBO_STARTER_CURSE, COMBO_STARTER_ENDURE, COMBO_STARTER_MEAN_LOOK},
},
[MOVE_PERISH_SONG] =
@@ -1566,7 +1562,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {COMBO_STARTER_HAIL},
},
[MOVE_DETECT] =
@@ -1582,7 +1578,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_BONE_RUSH,
- .comboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG},
+ .comboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_SHADOW_BONE},
},
[MOVE_LOCK_ON] =
@@ -1590,7 +1586,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_LOCK_ON,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_OUTRAGE] =
@@ -1598,7 +1594,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SANDSTORM] =
@@ -1606,7 +1602,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_SANDSTORM,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_GIGA_DRAIN] =
@@ -1622,7 +1618,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_ENDURE,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_CHARM] =
@@ -1630,7 +1626,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_CHARM,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ROLLOUT] =
@@ -1654,7 +1650,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_MILK_DRINK] =
@@ -1662,7 +1658,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SPARK] =
@@ -1686,7 +1682,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_MEAN_LOOK] =
@@ -1702,7 +1698,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SLEEP_TALK] =
@@ -1717,8 +1713,8 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
{
.effect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
- .comboStarterId = 0,
- .comboMoves = {0},
+ .comboStarterId = COMBO_STARTER_HEAL_BELL,
+ .comboMoves = {COMBO_STARTER_LUCKY_CHANT},
},
[MOVE_RETURN] =
@@ -1726,7 +1722,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_PRESENT] =
@@ -1734,7 +1730,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FRUSTRATION] =
@@ -1742,7 +1738,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SAFEGUARD] =
@@ -1750,7 +1746,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_PAIN_SPLIT] =
@@ -1774,7 +1770,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DYNAMIC_PUNCH] =
@@ -1790,7 +1786,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DRAGON_BREATH] =
@@ -1798,7 +1794,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = COMBO_STARTER_DRAGON_BREATH,
- .comboMoves = {COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_DANCE},
+ .comboMoves = {COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL},
},
[MOVE_BATON_PASS] =
@@ -1806,7 +1802,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ENCORE] =
@@ -1814,7 +1810,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_PURSUIT] =
@@ -1822,7 +1818,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_RAPID_SPIN] =
@@ -1830,7 +1826,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SWEET_SCENT] =
@@ -1838,7 +1834,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_SWEET_SCENT,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_IRON_TAIL] =
@@ -1846,7 +1842,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_METAL_CLAW] =
@@ -1894,7 +1890,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_CROSS_CHOP] =
@@ -1910,7 +1906,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_RAIN_DANCE] =
@@ -1918,7 +1914,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_RAIN_DANCE,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SUNNY_DAY] =
@@ -1926,7 +1922,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = COMBO_STARTER_SUNNY_DAY,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_CRUNCH] =
@@ -1950,7 +1946,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_EXTREME_SPEED] =
@@ -1958,7 +1954,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ANCIENT_POWER] =
@@ -1966,7 +1962,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SHADOW_BALL] =
@@ -1974,7 +1970,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FUTURE_SIGHT] =
@@ -1982,7 +1978,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_PSYCHIC, COMBO_STARTER_KINESIS, COMBO_STARTER_CONFUSION, COMBO_STARTER_CALM_MIND},
+ .comboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC},
},
[MOVE_ROCK_SMASH] =
@@ -1990,7 +1986,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_WHIRLPOOL] =
@@ -2006,7 +2002,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FAKE_OUT] =
@@ -2014,7 +2010,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_FAKE_OUT,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_UPROAR] =
@@ -2022,7 +2018,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_STOCKPILE] =
@@ -2030,7 +2026,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = COMBO_STARTER_STOCKPILE,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SPIT_UP] =
@@ -2062,7 +2058,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = COMBO_STARTER_HAIL,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TORMENT] =
@@ -2070,7 +2066,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FLATTER] =
@@ -2094,7 +2090,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FACADE] =
@@ -2118,7 +2114,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FOLLOW_ME] =
@@ -2126,7 +2122,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_NATURE_POWER] =
@@ -2134,7 +2130,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_CHARGE] =
@@ -2142,7 +2138,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_CHARGE,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TAUNT] =
@@ -2150,7 +2146,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_TAUNT,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_HELPING_HAND] =
@@ -2158,7 +2154,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TRICK] =
@@ -2166,7 +2162,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ROLE_PLAY] =
@@ -2174,7 +2170,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_WISH] =
@@ -2182,7 +2178,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ASSIST] =
@@ -2190,7 +2186,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_INGRAIN] =
@@ -2198,7 +2194,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SUPERPOWER] =
@@ -2206,7 +2202,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_LOCK_ON},
+ .comboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_MIND_READER},
},
[MOVE_MAGIC_COAT] =
@@ -2214,7 +2210,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_RECYCLE] =
@@ -2222,15 +2218,15 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_REVENGE] =
{
.effect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
- .comboStarterId = 0,
- .comboMoves = {0},
+ .comboStarterId = COMBO_STARTER_REVENGE,
+ .comboMoves = {COMBO_STARTER_PAYBACK},
},
[MOVE_BRICK_BREAK] =
@@ -2246,7 +2242,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_YAWN,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_KNOCK_OFF] =
@@ -2270,7 +2266,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_ENDURE, COMBO_STARTER_EARTHQUAKE, COMBO_STARTER_SUNNY_DAY},
+ .comboMoves = {COMBO_STARTER_EARTHQUAKE, COMBO_STARTER_ENDURE, COMBO_STARTER_SUNNY_DAY},
},
[MOVE_SKILL_SWAP] =
@@ -2278,7 +2274,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_IMPRISON] =
@@ -2286,7 +2282,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_REFRESH] =
@@ -2294,7 +2290,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_WATER_SPORT, COMBO_STARTER_SING},
+ .comboMoves = {COMBO_STARTER_SING, COMBO_STARTER_WATER_SPORT},
},
[MOVE_GRUDGE] =
@@ -2310,7 +2306,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SECRET_POWER] =
@@ -2318,7 +2314,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DIVE] =
@@ -2334,7 +2330,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_FAKE_OUT},
+ .comboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_FOCUS_ENERGY},
},
[MOVE_CAMOUFLAGE] =
@@ -2342,7 +2338,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TAIL_GLOW] =
@@ -2350,7 +2346,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_LUSTER_PURGE] =
@@ -2374,7 +2370,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TEETER_DANCE] =
@@ -2382,7 +2378,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_BLAZE_KICK] =
@@ -2398,7 +2394,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_MUD_SPORT,
- .comboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_WATER_SPORT},
+ .comboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM, COMBO_STARTER_WATER_SPORT},
},
[MOVE_ICE_BALL] =
@@ -2406,7 +2402,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {COMBO_STARTER_HAIL},
},
[MOVE_NEEDLE_ARM] =
@@ -2414,7 +2410,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SLACK_OFF] =
@@ -2422,7 +2418,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_YAWN},
+ .comboMoves = {0}
},
[MOVE_HYPER_VOICE] =
@@ -2430,7 +2426,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_POISON_FANG] =
@@ -2438,7 +2434,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_CRUSH_CLAW] =
@@ -2460,7 +2456,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
[MOVE_HYDRO_CANNON] =
{
.effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
- .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
.comboMoves = {COMBO_STARTER_RAIN_DANCE},
},
@@ -2470,7 +2466,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ASTONISH] =
@@ -2478,7 +2474,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_WEATHER_BALL] =
@@ -2486,7 +2482,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_HAIL, COMBO_STARTER_SANDSTORM},
+ .comboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SANDSTORM, COMBO_STARTER_SUNNY_DAY},
},
[MOVE_AROMATHERAPY] =
@@ -2494,7 +2490,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_FAKE_TEARS] =
@@ -2502,7 +2498,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_AIR_CUTTER] =
@@ -2510,7 +2506,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_OVERHEAT] =
@@ -2526,7 +2522,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ROCK_TOMB] =
@@ -2542,7 +2538,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_METAL_SOUND] =
@@ -2550,7 +2546,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_METAL_SOUND,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_GRASS_WHISTLE] =
@@ -2558,7 +2554,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_TICKLE] =
@@ -2566,7 +2562,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_COSMIC_POWER] =
@@ -2574,7 +2570,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_WATER_SPOUT] =
@@ -2590,7 +2586,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SHADOW_PUNCH] =
@@ -2598,7 +2594,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_EXTRASENSORY] =
@@ -2606,7 +2602,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SKY_UPPERCUT] =
@@ -2630,7 +2626,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_MIND_READER},
},
[MOVE_MUDDY_WATER] =
@@ -2654,7 +2650,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_ICICLE_SPEAR] =
@@ -2662,7 +2658,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_IRON_DEFENSE] =
@@ -2670,7 +2666,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_BLOCK] =
@@ -2678,7 +2674,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_HOWL] =
@@ -2686,7 +2682,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DRAGON_CLAW] =
@@ -2694,7 +2690,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_DANCE},
+ .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL},
},
[MOVE_FRENZY_PLANT] =
@@ -2710,7 +2706,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_BOUNCE] =
@@ -2718,7 +2714,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_MUD_SHOT] =
@@ -2726,7 +2722,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {COMBO_STARTER_SANDSTORM},
},
[MOVE_POISON_TAIL] =
@@ -2734,7 +2730,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_COVET] =
@@ -2742,7 +2738,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_VOLT_TACKLE] =
@@ -2750,7 +2746,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {COMBO_STARTER_CHARGE},
+ .comboMoves = {0}
},
[MOVE_MAGICAL_LEAF] =
@@ -2766,7 +2762,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.comboStarterId = COMBO_STARTER_WATER_SPORT,
- .comboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_MUD_SPORT},
+ .comboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE},
},
[MOVE_CALM_MIND] =
@@ -2774,7 +2770,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.comboStarterId = COMBO_STARTER_CALM_MIND,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_LEAF_BLADE] =
@@ -2782,7 +2778,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_DRAGON_DANCE] =
@@ -2790,7 +2786,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = COMBO_STARTER_DRAGON_DANCE,
- .comboMoves = {COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_BREATH},
+ .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL},
},
[MOVE_ROCK_BLAST] =
@@ -2798,7 +2794,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_SHOCK_WAVE] =
@@ -2822,7 +2818,7 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_COOL,
.comboStarterId = 0,
- .comboMoves = {0},
+ .comboMoves = {0}
},
[MOVE_PSYCHO_BOOST] =
@@ -2832,6 +2828,3096 @@ const struct ContestMove gContestMoves[MOVES_COUNT] =
.comboStarterId = 0,
.comboMoves = {COMBO_STARTER_CALM_MIND},
},
+
+ [MOVE_ROOST] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_BRAVE_BIRD},
+ },
+
+ [MOVE_GRAVITY] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MIRACLE_EYE] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_WAKE_UP_SLAP] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MON,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HAMMER_ARM] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ },
+
+ [MOVE_GYRO_BALL] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HEALING_WISH] =
+ {
+ .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BRINE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_RAIN_DANCE},
+ },
+
+ [MOVE_NATURAL_GIFT] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FEINT] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PLUCK] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TAILWIND] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ACUPRESSURE] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_METAL_BURST] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_METAL_SOUND},
+ },
+
+ [MOVE_U_TURN] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CLOSE_COMBAT] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER},
+ },
+
+ [MOVE_PAYBACK] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = COMBO_STARTER_PAYBACK,
+ .comboMoves = {COMBO_STARTER_REVENGE},
+ },
+
+ [MOVE_ASSURANCE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_PAYBACK, COMBO_STARTER_REVENGE},
+ },
+
+ [MOVE_EMBARGO] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FLING] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PSYCHO_SHIFT] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TRUMP_CARD] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HEAL_BLOCK] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_WRING_OUT] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MON,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_POWER_TRICK] =
+ {
+ .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GASTRO_ACID] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LUCKY_CHANT] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = COMBO_STARTER_LUCKY_CHANT,
+ .comboMoves = {COMBO_STARTER_HEAL_BELL},
+ },
+
+ [MOVE_ME_FIRST] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_COPYCAT] =
+ {
+ .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_POWER_SWAP] =
+ {
+ .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GUARD_SWAP] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PUNISHMENT] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LAST_RESORT] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_WORRY_SEED] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = COMBO_STARTER_WORRY_SEED,
+ .comboMoves = {COMBO_STARTER_LEECH_SEED},
+ },
+
+ [MOVE_SUCKER_PUNCH] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TOXIC_SPIKES] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HEART_SWAP] =
+ {
+ .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_AQUA_RING] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MAGNET_RISE] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FLARE_BLITZ] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SUNNY_DAY},
+ },
+
+ [MOVE_FORCE_PALM] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_AURA_SPHERE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ROCK_POLISH] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_POISON_JAB] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DARK_PULSE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_NIGHT_SLASH] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_AQUA_TAIL] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_RAIN_DANCE},
+ },
+
+ [MOVE_SEED_BOMB] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_AIR_SLASH] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_X_SCISSOR] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SWORDS_DANCE},
+ },
+
+ [MOVE_BUG_BUZZ] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRAGON_PULSE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRAGON_RUSH] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = COMBO_STARTER_DRAGON_RUSH,
+ .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_TAIL},
+ },
+
+ [MOVE_POWER_GEM] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRAIN_PUNCH] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ },
+
+ [MOVE_VACUUM_WAVE] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FOCUS_BLAST] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ },
+
+ [MOVE_ENERGY_BALL] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_GROWTH},
+ },
+
+ [MOVE_BRAVE_BIRD] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = COMBO_STARTER_BRAVE_BIRD,
+ .comboMoves = {0}
+ },
+
+ [MOVE_EARTH_POWER] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SWITCHEROO] =
+ {
+ .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GIGA_IMPACT] =
+ {
+ .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_NASTY_PLOT] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BULLET_PUNCH] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_AVALANCHE] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ICE_SHARD] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SHADOW_CLAW] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_THUNDER_FANG] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = COMBO_STARTER_THUNDER_FANG,
+ .comboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_FANG, COMBO_STARTER_ICE_FANG},
+ },
+
+ [MOVE_ICE_FANG] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = COMBO_STARTER_ICE_FANG,
+ .comboMoves = {COMBO_STARTER_FIRE_FANG, COMBO_STARTER_THUNDER_FANG},
+ },
+
+ [MOVE_FIRE_FANG] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = COMBO_STARTER_FIRE_FANG,
+ .comboMoves = {COMBO_STARTER_ICE_FANG, COMBO_STARTER_THUNDER_FANG},
+ },
+
+ [MOVE_SHADOW_SNEAK] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MUD_BOMB] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PSYCHO_CUT] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ZEN_HEADBUTT] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MIRROR_SHOT] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FLASH_CANNON] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ROCK_CLIMB] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DEFOG] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TRICK_ROOM] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRACO_METEOR] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DISCHARGE] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_CHARGE},
+ },
+
+ [MOVE_LAVA_PLUME] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SUNNY_DAY},
+ },
+
+ [MOVE_LEAF_STORM] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_POWER_WHIP] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_GROWTH},
+ },
+
+ [MOVE_ROCK_WRECKER] =
+ {
+ .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CROSS_POISON] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GUNK_SHOT] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_IRON_HEAD] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MAGNET_BOMB] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STONE_EDGE] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CAPTIVATE] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_CHARM},
+ },
+
+ [MOVE_STEALTH_ROCK] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GRASS_KNOT] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CHATTER] =
+ {
+ .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_JUDGMENT] =
+ {
+ .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BUG_BITE] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CHARGE_BEAM] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_CHARGE},
+ },
+
+ [MOVE_WOOD_HAMMER] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_AQUA_JET] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_RAIN_DANCE},
+ },
+
+ [MOVE_ATTACK_ORDER] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = COMBO_STARTER_ATTACK_ORDER,
+ .comboMoves = {COMBO_STARTER_DEFEND_ORDER, COMBO_STARTER_HEAL_ORDER},
+ },
+
+ [MOVE_DEFEND_ORDER] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = COMBO_STARTER_DEFEND_ORDER,
+ .comboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_HEAL_ORDER},
+ },
+
+ [MOVE_HEAL_ORDER] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = COMBO_STARTER_HEAL_ORDER,
+ .comboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_DEFEND_ORDER},
+ },
+
+ [MOVE_HEAD_SMASH] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DOUBLE_HIT] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ROAR_OF_TIME] =
+ {
+ .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SPACIAL_REND] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LUNAR_DANCE] =
+ {
+ .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CRUSH_GRIP] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MAGMA_STORM] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SUNNY_DAY},
+ },
+
+ [MOVE_DARK_VOID] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SEED_FLARE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_OMINOUS_WIND] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SHADOW_FORCE] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HONE_CLAWS] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_WIDE_GUARD] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GUARD_SPLIT] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_POWER_SPLIT] =
+ {
+ .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_WONDER_ROOM] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PSYSHOCK] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_VENOSHOCK] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_TOXIC},
+ },
+
+ [MOVE_AUTOTOMIZE] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_RAGE_POWDER] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TELEKINESIS] =
+ {
+ .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MAGIC_ROOM] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SMACK_DOWN] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STORM_THROW] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FLAME_BURST] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SLUDGE_WAVE] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_QUIVER_DANCE] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HEAVY_SLAM] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SYNCHRONOISE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ELECTRO_BALL] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SOAK] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FLAME_CHARGE] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_COIL] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LOW_SWEEP] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ACID_SPRAY] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FOUL_PLAY] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SIMPLE_BEAM] =
+ {
+ .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ENTRAINMENT] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_AFTER_YOU] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ROUND] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ECHOED_VOICE] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CHIP_AWAY] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CLEAR_SMOG] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STORED_POWER] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_QUICK_GUARD] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ALLY_SWITCH] =
+ {
+ .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SCALD] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = COMBO_STARTER_SCALD,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SHELL_SMASH] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HEAL_PULSE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HEX] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_TOXIC},
+ },
+
+ [MOVE_SKY_DROP] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SHIFT_GEAR] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CIRCLE_THROW] =
+ {
+ .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_INCINERATE] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_QUASH] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ACROBATICS] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_REFLECT_TYPE] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_RETALIATE] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FINAL_GAMBIT] =
+ {
+ .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BESTOW] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_INFERNO] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_WATER_PLEDGE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FIRE_PLEDGE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GRASS_PLEDGE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_VOLT_SWITCH] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STRUGGLE_BUG] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BULLDOZE] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FROST_BREATH] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRAGON_TAIL] =
+ {
+ .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = COMBO_STARTER_DRAGON_TAIL,
+ .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH},
+ },
+
+ [MOVE_WORK_UP] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ELECTROWEB] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_WILD_CHARGE] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRILL_RUN] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DUAL_CHOP] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HEART_STAMP] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HORN_LEECH] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SACRED_SWORD] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_RAZOR_SHELL] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HEAT_CRASH] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LEAF_TORNADO] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STEAMROLLER] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_COTTON_GUARD] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_NIGHT_DAZE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PSYSTRIKE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TAIL_SLAP] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HURRICANE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HEAD_CHARGE] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GEAR_GRIND] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SEARING_SHOT] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TECHNO_BLAST] =
+ {
+ .effect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_RELIC_SONG] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SECRET_SWORD] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GLACIATE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BOLT_STRIKE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BLUE_FLARE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FIERY_DANCE] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FREEZE_SHOCK] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ICE_BURN] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SNARL] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ICICLE_CRASH] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MON,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_V_CREATE] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FUSION_FLARE] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FUSION_BOLT] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FLYING_PRESS] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MAT_BLOCK] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BELCH] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ROTOTILLER] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STICKY_WEB] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FELL_STINGER] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PHANTOM_FORCE] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TRICK_OR_TREAT] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_NOBLE_ROAR] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ION_DELUGE] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PARABOLIC_CHARGE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FORESTS_CURSE] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PETAL_BLIZZARD] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FREEZE_DRY] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DISARMING_VOICE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PARTING_SHOT] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TOPSY_TURVY] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRAINING_KISS] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CRAFTY_SHIELD] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FLOWER_SHIELD] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GRASSY_TERRAIN] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = COMBO_STARTER_GRASSY_TERRAIN,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MISTY_TERRAIN] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = COMBO_STARTER_MISTY_TERRAIN,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ELECTRIFY] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PLAY_ROUGH] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FAIRY_WIND] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MOONBLAST] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BOOMBURST] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FAIRY_LOCK] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_KINGS_SHIELD] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PLAY_NICE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CONFIDE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DIAMOND_STORM] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STEAM_ERUPTION] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SCALD},
+ },
+
+ [MOVE_HYPERSPACE_HOLE] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = COMBO_STARTER_HYPERSPACE_HOLE,
+ .comboMoves = {COMBO_STARTER_HYPERSPACE_FURY},
+ },
+
+ [MOVE_WATER_SHURIKEN] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MYSTICAL_FIRE] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SPIKY_SHIELD] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_AROMATIC_MIST] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_EERIE_IMPULSE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_VENOM_DRENCH] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_TOXIC},
+ },
+
+ [MOVE_POWDER] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GEOMANCY] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MAGNETIC_FLUX] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HAPPY_HOUR] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ELECTRIC_TERRAIN] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = COMBO_STARTER_ELECTRIC_TERRAIN,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DAZZLING_GLEAM] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CELEBRATE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HOLD_HANDS] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BABY_DOLL_EYES] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_NUZZLE] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HOLD_BACK] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_INFESTATION] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_POWER_UP_PUNCH] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_OBLIVION_WING] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_THOUSAND_ARROWS] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = COMBO_STARTER_THOUSAND_ARROWS,
+ .comboMoves = {COMBO_STARTER_THOUSAND_WAVES},
+ },
+
+ [MOVE_THOUSAND_WAVES] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = COMBO_STARTER_THOUSAND_WAVES,
+ .comboMoves = {COMBO_STARTER_THOUSAND_ARROWS},
+ },
+
+ [MOVE_LANDS_WRATH] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LIGHT_OF_RUIN] = {0}, // undefined in urpg
+
+ [MOVE_ORIGIN_PULSE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PRECIPICE_BLADES] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRAGON_ASCENT] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HYPERSPACE_FURY] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = COMBO_STARTER_HYPERSPACE_FURY,
+ .comboMoves = {COMBO_STARTER_HYPERSPACE_HOLE},
+ },
+
+ [MOVE_SHORE_UP] =
+ {
+ .effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SANDSTORM}
+ },
+
+ [MOVE_FIRST_IMPRESSION] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BANEFUL_BUNKER] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SPIRIT_SHACKLE] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DARKEST_LARIAT] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SPARKLING_ARIA] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SCALD},
+ },
+
+ [MOVE_ICE_HAMMER] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_HAIL},
+ },
+
+ [MOVE_FLORAL_HEALING] =
+ {
+ .effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_HIGH_HORSEPOWER] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STRENGTH_SAP] =
+ {
+ .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SOLAR_BLADE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SUNNY_DAY},
+ },
+
+ [MOVE_LEAFAGE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_GROWTH},
+ },
+
+ [MOVE_SPOTLIGHT] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TOXIC_THREAD] =
+ {
+ .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_TOXIC},
+ },
+
+ [MOVE_LASER_FOCUS] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GEAR_UP] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_THROAT_CHOP] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_POLLEN_PUFF] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ANCHOR_SHOT] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PSYCHIC_TERRAIN] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = COMBO_STARTER_PSYCHIC_TERRAIN,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LUNGE] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FIRE_LASH] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MON,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SUNNY_DAY},
+ },
+
+ [MOVE_POWER_TRIP] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BURN_UP] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_SUNNY_DAY},
+ },
+
+ [MOVE_SPEED_SWAP] =
+ {
+ .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SMART_STRIKE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PURIFY] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_REVELATION_DANCE] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CORE_ENFORCER] =
+ {
+ .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TROP_KICK] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_INSTRUCT] =
+ {
+ .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BEAK_BLAST] =
+ {
+ .effect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CLANGING_SCALES] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRAGON_HAMMER] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL},
+ },
+
+ [MOVE_BRUTAL_SWING] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_AURORA_VEIL] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_HAIL},
+ },
+
+ [MOVE_SHELL_TRAP] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FLEUR_CANNON] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PSYCHIC_FANGS] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STOMPING_TANTRUM] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SHADOW_BONE] =
+ {
+ .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = COMBO_STARTER_SHADOW_BONE,
+ .comboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH},
+ },
+
+ [MOVE_ACCELEROCK] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LIQUIDATION] =
+ {
+ .effect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_RAIN_DANCE},
+ },
+
+ [MOVE_PRISMATIC_LASER] =
+ {
+ .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SPECTRAL_THIEF] =
+ {
+ .effect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SUNSTEEL_STRIKE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MOONGEIST_BEAM] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TEARFUL_LOOK] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ZING_ZAP] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_CHARGE},
+ },
+
+ [MOVE_NATURES_MADNESS] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MULTI_ATTACK] =
+ {
+ .effect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MIND_BLOWN] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PLASMA_FISTS] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PHOTON_GEYSER] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DOUBLE_IRON_BASH] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DYNAMAX_CANNON] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_SNIPE_SHOT] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_JAW_LOCK] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STUFF_CHEEKS] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_NO_RETREAT] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TAR_SHOT] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MAGIC_POWDER] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRAGON_DARTS] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_TEATIME] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_OCTOLOCK] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BOLT_BEAK] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FISHIOUS_REND] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_COURT_CHANGE] =
+ {
+ .effect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_CLANGOROUS_SOUL] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BODY_PRESS] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DECORATE] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRUM_BEATING] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SNAP_TRAP] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_PYRO_BALL] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BEHEMOTH_BLADE] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_BEHEMOTH_BASH] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_AURA_WHEEL] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BREAKING_SWIPE] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_BRANCH_POKE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_OVERDRIVE] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_APPLE_ACID] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_GRAV_APPLE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_SPIRIT_BREAK] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STRANGE_STEAM] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LIFE_DEW] =
+ {
+ .effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_OBSTRUCT] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_FALSE_SURRENDER] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_METEOR_ASSAULT] =
+ {
+ .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_ETERNABEAM] =
+ {
+ .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_STEEL_BEAM] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_EXPANDING_FORCE] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN}
+ },
+
+ [MOVE_STEEL_ROLLER] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_SCALE_SHOT] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_METEOR_BEAM] =
+ {
+ .effect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_SHELL_SIDE_ARM] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_MISTY_EXPLOSION] =
+ {
+ .effect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_MISTY_TERRAIN}
+ },
+
+ [MOVE_GRASSY_GLIDE] =
+ {
+ .effect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_GRASSY_TERRAIN}
+ },
+
+ [MOVE_RISING_VOLTAGE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN}
+ },
+
+ [MOVE_TERRAIN_PULSE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN, COMBO_STARTER_MISTY_TERRAIN, COMBO_STARTER_GRASSY_TERRAIN, COMBO_STARTER_PSYCHIC_TERRAIN},
+ },
+
+ [MOVE_SKITTER_SMACK] =
+ {
+ .effect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_BURNING_JEALOUSY] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_LASH_OUT] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_PREV_MON,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_POLTERGEIST] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_CORROSIVE_GAS] =
+ {
+ .effect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_COACHING] =
+ {
+ .effect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FLIP_TURN] =
+ {
+ .effect = CONTEST_EFFECT_AVOID_STARTLE,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_TRIPLE_AXEL] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DUAL_WINGBEAT] =
+ {
+ .effect = CONTEST_EFFECT_REPETITION_NOT_BORING,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_SCORCHING_SANDS] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_JUNGLE_HEALING] =
+ {
+ .effect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_WICKED_BLOW] =
+ {
+ .effect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_SURGING_STRIKES] =
+ {
+ .effect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_THUNDER_CAGE] =
+ {
+ .effect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_DRAGON_ENERGY] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
+ .contestCategory = CONTEST_CATEGORY_COOL,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FREEZING_GLARE] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_CUTE,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
+
+ [MOVE_FIERY_WRATH] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_THUNDEROUS_KICK] =
+ {
+ .effect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_GLACIAL_LANCE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_LAST,
+ .contestCategory = CONTEST_CATEGORY_BEAUTY,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_ASTRAL_BARRAGE] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_IF_FIRST,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0},
+ },
+
+ [MOVE_EERIE_SPELL] =
+ {
+ .effect = CONTEST_EFFECT_BETTER_WHEN_LATER,
+ .contestCategory = CONTEST_CATEGORY_SMART,
+ .comboStarterId = 0,
+ .comboMoves = {0}
+ },
};
const struct ContestEffect gContestEffects[] =
@@ -3126,75 +6212,6 @@ const struct ContestEffect gContestEffects[] =
},
};
-// A lookup table with TRUE for each combo starter ID and FALSE for ID 0,
-// which means "not a combo starter move".
-const bool8 gComboStarterLookupTable[] =
-{
- FALSE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE,
- TRUE
-};
-
void (*const gContestEffectFuncs[])(void) =
{
ContestEffect_HighlyAppealing,
diff --git a/src/data/easy_chat/easy_chat_group_pokemon2.h b/src/data/easy_chat/easy_chat_group_pokemon2.h
index 44dce0cc84..331c5ac6c3 100755
--- a/src/data/easy_chat/easy_chat_group_pokemon2.h
+++ b/src/data/easy_chat/easy_chat_group_pokemon2.h
@@ -1,253 +1,253 @@
const u16 gEasyChatGroup_Pokemon2[] = {
- SPECIES_ABRA,
- SPECIES_AERODACTYL,
- SPECIES_AIPOM,
- SPECIES_ALAKAZAM,
- SPECIES_AMPHAROS,
- SPECIES_ARBOK,
- SPECIES_ARCANINE,
- SPECIES_ARIADOS,
- SPECIES_ARTICUNO,
- SPECIES_AZUMARILL,
- SPECIES_BAYLEEF,
- SPECIES_BEEDRILL,
- SPECIES_BELLOSSOM,
- SPECIES_BELLSPROUT,
- SPECIES_BLASTOISE,
- SPECIES_BLISSEY,
- SPECIES_BULBASAUR,
- SPECIES_BUTTERFREE,
- SPECIES_CATERPIE,
- SPECIES_CELEBI,
- SPECIES_CHANSEY,
- SPECIES_CHARIZARD,
- SPECIES_CHARMANDER,
- SPECIES_CHARMELEON,
- SPECIES_CHIKORITA,
- SPECIES_CHINCHOU,
- SPECIES_CLEFABLE,
- SPECIES_CLEFAIRY,
- SPECIES_CLEFFA,
- SPECIES_CLOYSTER,
- SPECIES_CORSOLA,
- SPECIES_CROBAT,
- SPECIES_CROCONAW,
- SPECIES_CUBONE,
- SPECIES_CYNDAQUIL,
- SPECIES_DELIBIRD,
- SPECIES_DEWGONG,
- SPECIES_DIGLETT,
- SPECIES_DITTO,
- SPECIES_DODRIO,
- SPECIES_DODUO,
- SPECIES_DONPHAN,
- SPECIES_DRAGONAIR,
- SPECIES_DRAGONITE,
- SPECIES_DRATINI,
- SPECIES_DROWZEE,
- SPECIES_DUGTRIO,
- SPECIES_DUNSPARCE,
- SPECIES_EEVEE,
- SPECIES_EKANS,
- SPECIES_ELECTABUZZ,
- SPECIES_ELECTRODE,
- SPECIES_ELEKID,
- SPECIES_ENTEI,
- SPECIES_ESPEON,
- SPECIES_EXEGGCUTE,
- SPECIES_EXEGGUTOR,
- SPECIES_FARFETCHD,
- SPECIES_FEAROW,
- SPECIES_FERALIGATR,
- SPECIES_FLAAFFY,
- SPECIES_FLAREON,
- SPECIES_FORRETRESS,
- SPECIES_FURRET,
- SPECIES_GASTLY,
- SPECIES_GENGAR,
- SPECIES_GEODUDE,
- SPECIES_GIRAFARIG,
- SPECIES_GLIGAR,
- SPECIES_GLOOM,
- SPECIES_GOLBAT,
- SPECIES_GOLDEEN,
- SPECIES_GOLDUCK,
- SPECIES_GOLEM,
- SPECIES_GRANBULL,
- SPECIES_GRAVELER,
- SPECIES_GRIMER,
- SPECIES_GROWLITHE,
- SPECIES_GYARADOS,
- SPECIES_HAUNTER,
- SPECIES_HERACROSS,
- SPECIES_HITMONCHAN,
- SPECIES_HITMONLEE,
- SPECIES_HITMONTOP,
- SPECIES_HO_OH,
- SPECIES_HOOTHOOT,
- SPECIES_HOPPIP,
- SPECIES_HORSEA,
- SPECIES_HOUNDOOM,
- SPECIES_HOUNDOUR,
- SPECIES_HYPNO,
- SPECIES_IGGLYBUFF,
- SPECIES_IVYSAUR,
- SPECIES_JIGGLYPUFF,
- SPECIES_JOLTEON,
- SPECIES_JUMPLUFF,
- SPECIES_JYNX,
- SPECIES_KABUTO,
- SPECIES_KABUTOPS,
- SPECIES_KADABRA,
- SPECIES_KAKUNA,
- SPECIES_KANGASKHAN,
- SPECIES_KINGDRA,
- SPECIES_KINGLER,
- SPECIES_KOFFING,
- SPECIES_KRABBY,
- SPECIES_LANTURN,
- SPECIES_LAPRAS,
- SPECIES_LARVITAR,
- SPECIES_LEDIAN,
- SPECIES_LEDYBA,
- SPECIES_LICKITUNG,
- SPECIES_LUGIA,
- SPECIES_MACHAMP,
- SPECIES_MACHOKE,
- SPECIES_MACHOP,
- SPECIES_MAGBY,
- SPECIES_MAGCARGO,
- SPECIES_MAGIKARP,
- SPECIES_MAGMAR,
- SPECIES_MAGNEMITE,
- SPECIES_MAGNETON,
- SPECIES_MANKEY,
- SPECIES_MANTINE,
- SPECIES_MAREEP,
- SPECIES_MARILL,
- SPECIES_MAROWAK,
- SPECIES_MEGANIUM,
- SPECIES_MEOWTH,
- SPECIES_METAPOD,
- SPECIES_MEW,
- SPECIES_MEWTWO,
- SPECIES_MILTANK,
- SPECIES_MISDREAVUS,
- SPECIES_MOLTRES,
- SPECIES_MR_MIME,
- SPECIES_MUK,
- SPECIES_MURKROW,
- SPECIES_NATU,
- SPECIES_NIDOKING,
- SPECIES_NIDOQUEEN,
- SPECIES_NIDORAN_F,
- SPECIES_NIDORAN_M,
- SPECIES_NIDORINA,
- SPECIES_NIDORINO,
- SPECIES_NINETALES,
- SPECIES_NOCTOWL,
- SPECIES_OCTILLERY,
- SPECIES_ODDISH,
- SPECIES_OMANYTE,
- SPECIES_OMASTAR,
- SPECIES_ONIX,
- SPECIES_PARAS,
- SPECIES_PARASECT,
- SPECIES_PERSIAN,
- SPECIES_PHANPY,
- SPECIES_PICHU,
- SPECIES_PIDGEOT,
- SPECIES_PIDGEOTTO,
- SPECIES_PIDGEY,
- SPECIES_PIKACHU,
- SPECIES_PILOSWINE,
- SPECIES_PINECO,
- SPECIES_PINSIR,
- SPECIES_POLITOED,
- SPECIES_POLIWAG,
- SPECIES_POLIWHIRL,
- SPECIES_POLIWRATH,
- SPECIES_PONYTA,
- SPECIES_PORYGON,
- SPECIES_PORYGON2,
- SPECIES_PRIMEAPE,
- SPECIES_PSYDUCK,
- SPECIES_PUPITAR,
- SPECIES_QUAGSIRE,
- SPECIES_QUILAVA,
- SPECIES_QWILFISH,
- SPECIES_RAICHU,
- SPECIES_RAIKOU,
- SPECIES_RAPIDASH,
- SPECIES_RATICATE,
- SPECIES_RATTATA,
- SPECIES_REMORAID,
- SPECIES_RHYDON,
- SPECIES_RHYHORN,
- SPECIES_SANDSHREW,
- SPECIES_SANDSLASH,
- SPECIES_SCIZOR,
- SPECIES_SCYTHER,
- SPECIES_SEADRA,
- SPECIES_SEAKING,
- SPECIES_SEEL,
- SPECIES_SENTRET,
- SPECIES_SHELLDER,
- SPECIES_SHUCKLE,
- SPECIES_SKARMORY,
- SPECIES_SKIPLOOM,
- SPECIES_SLOWBRO,
- SPECIES_SLOWKING,
- SPECIES_SLOWPOKE,
- SPECIES_SLUGMA,
- SPECIES_SMEARGLE,
- SPECIES_SMOOCHUM,
- SPECIES_SNEASEL,
- SPECIES_SNORLAX,
- SPECIES_SNUBBULL,
- SPECIES_SPEAROW,
- SPECIES_SPINARAK,
- SPECIES_SQUIRTLE,
- SPECIES_STANTLER,
- SPECIES_STARMIE,
- SPECIES_STARYU,
- SPECIES_STEELIX,
- SPECIES_SUDOWOODO,
- SPECIES_SUICUNE,
- SPECIES_SUNFLORA,
- SPECIES_SUNKERN,
- SPECIES_SWINUB,
- SPECIES_TANGELA,
- SPECIES_TAUROS,
- SPECIES_TEDDIURSA,
- SPECIES_TENTACOOL,
- SPECIES_TENTACRUEL,
- SPECIES_TOGEPI,
- SPECIES_TOGETIC,
- SPECIES_TOTODILE,
- SPECIES_TYPHLOSION,
- SPECIES_TYRANITAR,
- SPECIES_TYROGUE,
- SPECIES_UMBREON,
- SPECIES_UNOWN,
- SPECIES_URSARING,
- SPECIES_VAPOREON,
- SPECIES_VENOMOTH,
- SPECIES_VENONAT,
- SPECIES_VENUSAUR,
- SPECIES_VICTREEBEL,
- SPECIES_VILEPLUME,
- SPECIES_VOLTORB,
- SPECIES_VULPIX,
- SPECIES_WARTORTLE,
- SPECIES_WEEDLE,
- SPECIES_WEEPINBELL,
- SPECIES_WEEZING,
- SPECIES_WIGGLYTUFF,
- SPECIES_WOBBUFFET,
- SPECIES_WOOPER,
- SPECIES_XATU,
- SPECIES_YANMA,
- SPECIES_ZAPDOS,
- SPECIES_ZUBAT,
+ SPECIES_ABRA,
+ SPECIES_AERODACTYL,
+ SPECIES_AIPOM,
+ SPECIES_ALAKAZAM,
+ SPECIES_AMPHAROS,
+ SPECIES_ARBOK,
+ SPECIES_ARCANINE,
+ SPECIES_ARIADOS,
+ SPECIES_ARTICUNO,
+ SPECIES_AZUMARILL,
+ SPECIES_BAYLEEF,
+ SPECIES_BEEDRILL,
+ SPECIES_BELLOSSOM,
+ SPECIES_BELLSPROUT,
+ SPECIES_BLASTOISE,
+ SPECIES_BLISSEY,
+ SPECIES_BULBASAUR,
+ SPECIES_BUTTERFREE,
+ SPECIES_CATERPIE,
+ SPECIES_CELEBI,
+ SPECIES_CHANSEY,
+ SPECIES_CHARIZARD,
+ SPECIES_CHARMANDER,
+ SPECIES_CHARMELEON,
+ SPECIES_CHIKORITA,
+ SPECIES_CHINCHOU,
+ SPECIES_CLEFABLE,
+ SPECIES_CLEFAIRY,
+ SPECIES_CLEFFA,
+ SPECIES_CLOYSTER,
+ SPECIES_CORSOLA,
+ SPECIES_CROBAT,
+ SPECIES_CROCONAW,
+ SPECIES_CUBONE,
+ SPECIES_CYNDAQUIL,
+ SPECIES_DELIBIRD,
+ SPECIES_DEWGONG,
+ SPECIES_DIGLETT,
+ SPECIES_DITTO,
+ SPECIES_DODRIO,
+ SPECIES_DODUO,
+ SPECIES_DONPHAN,
+ SPECIES_DRAGONAIR,
+ SPECIES_DRAGONITE,
+ SPECIES_DRATINI,
+ SPECIES_DROWZEE,
+ SPECIES_DUGTRIO,
+ SPECIES_DUNSPARCE,
+ SPECIES_EEVEE,
+ SPECIES_EKANS,
+ SPECIES_ELECTABUZZ,
+ SPECIES_ELECTRODE,
+ SPECIES_ELEKID,
+ SPECIES_ENTEI,
+ SPECIES_ESPEON,
+ SPECIES_EXEGGCUTE,
+ SPECIES_EXEGGUTOR,
+ SPECIES_FARFETCHD,
+ SPECIES_FEAROW,
+ SPECIES_FERALIGATR,
+ SPECIES_FLAAFFY,
+ SPECIES_FLAREON,
+ SPECIES_FORRETRESS,
+ SPECIES_FURRET,
+ SPECIES_GASTLY,
+ SPECIES_GENGAR,
+ SPECIES_GEODUDE,
+ SPECIES_GIRAFARIG,
+ SPECIES_GLIGAR,
+ SPECIES_GLOOM,
+ SPECIES_GOLBAT,
+ SPECIES_GOLDEEN,
+ SPECIES_GOLDUCK,
+ SPECIES_GOLEM,
+ SPECIES_GRANBULL,
+ SPECIES_GRAVELER,
+ SPECIES_GRIMER,
+ SPECIES_GROWLITHE,
+ SPECIES_GYARADOS,
+ SPECIES_HAUNTER,
+ SPECIES_HERACROSS,
+ SPECIES_HITMONCHAN,
+ SPECIES_HITMONLEE,
+ SPECIES_HITMONTOP,
+ SPECIES_HO_OH,
+ SPECIES_HOOTHOOT,
+ SPECIES_HOPPIP,
+ SPECIES_HORSEA,
+ SPECIES_HOUNDOOM,
+ SPECIES_HOUNDOUR,
+ SPECIES_HYPNO,
+ SPECIES_IGGLYBUFF,
+ SPECIES_IVYSAUR,
+ SPECIES_JIGGLYPUFF,
+ SPECIES_JOLTEON,
+ SPECIES_JUMPLUFF,
+ SPECIES_JYNX,
+ SPECIES_KABUTO,
+ SPECIES_KABUTOPS,
+ SPECIES_KADABRA,
+ SPECIES_KAKUNA,
+ SPECIES_KANGASKHAN,
+ SPECIES_KINGDRA,
+ SPECIES_KINGLER,
+ SPECIES_KOFFING,
+ SPECIES_KRABBY,
+ SPECIES_LANTURN,
+ SPECIES_LAPRAS,
+ SPECIES_LARVITAR,
+ SPECIES_LEDIAN,
+ SPECIES_LEDYBA,
+ SPECIES_LICKITUNG,
+ SPECIES_LUGIA,
+ SPECIES_MACHAMP,
+ SPECIES_MACHOKE,
+ SPECIES_MACHOP,
+ SPECIES_MAGBY,
+ SPECIES_MAGCARGO,
+ SPECIES_MAGIKARP,
+ SPECIES_MAGMAR,
+ SPECIES_MAGNEMITE,
+ SPECIES_MAGNETON,
+ SPECIES_MANKEY,
+ SPECIES_MANTINE,
+ SPECIES_MAREEP,
+ SPECIES_MARILL,
+ SPECIES_MAROWAK,
+ SPECIES_MEGANIUM,
+ SPECIES_MEOWTH,
+ SPECIES_METAPOD,
+ SPECIES_MEW,
+ SPECIES_MEWTWO,
+ SPECIES_MILTANK,
+ SPECIES_MISDREAVUS,
+ SPECIES_MOLTRES,
+ SPECIES_MR_MIME,
+ SPECIES_MUK,
+ SPECIES_MURKROW,
+ SPECIES_NATU,
+ SPECIES_NIDOKING,
+ SPECIES_NIDOQUEEN,
+ SPECIES_NIDORAN_F,
+ SPECIES_NIDORAN_M,
+ SPECIES_NIDORINA,
+ SPECIES_NIDORINO,
+ SPECIES_NINETALES,
+ SPECIES_NOCTOWL,
+ SPECIES_OCTILLERY,
+ SPECIES_ODDISH,
+ SPECIES_OMANYTE,
+ SPECIES_OMASTAR,
+ SPECIES_ONIX,
+ SPECIES_PARAS,
+ SPECIES_PARASECT,
+ SPECIES_PERSIAN,
+ SPECIES_PHANPY,
+ SPECIES_PICHU,
+ SPECIES_PIDGEOT,
+ SPECIES_PIDGEOTTO,
+ SPECIES_PIDGEY,
+ SPECIES_PIKACHU,
+ SPECIES_PILOSWINE,
+ SPECIES_PINECO,
+ SPECIES_PINSIR,
+ SPECIES_POLITOED,
+ SPECIES_POLIWAG,
+ SPECIES_POLIWHIRL,
+ SPECIES_POLIWRATH,
+ SPECIES_PONYTA,
+ SPECIES_PORYGON,
+ SPECIES_PORYGON2,
+ SPECIES_PRIMEAPE,
+ SPECIES_PSYDUCK,
+ SPECIES_PUPITAR,
+ SPECIES_QUAGSIRE,
+ SPECIES_QUILAVA,
+ SPECIES_QWILFISH,
+ SPECIES_RAICHU,
+ SPECIES_RAIKOU,
+ SPECIES_RAPIDASH,
+ SPECIES_RATICATE,
+ SPECIES_RATTATA,
+ SPECIES_REMORAID,
+ SPECIES_RHYDON,
+ SPECIES_RHYHORN,
+ SPECIES_SANDSHREW,
+ SPECIES_SANDSLASH,
+ SPECIES_SCIZOR,
+ SPECIES_SCYTHER,
+ SPECIES_SEADRA,
+ SPECIES_SEAKING,
+ SPECIES_SEEL,
+ SPECIES_SENTRET,
+ SPECIES_SHELLDER,
+ SPECIES_SHUCKLE,
+ SPECIES_SKARMORY,
+ SPECIES_SKIPLOOM,
+ SPECIES_SLOWBRO,
+ SPECIES_SLOWKING,
+ SPECIES_SLOWPOKE,
+ SPECIES_SLUGMA,
+ SPECIES_SMEARGLE,
+ SPECIES_SMOOCHUM,
+ SPECIES_SNEASEL,
+ SPECIES_SNORLAX,
+ SPECIES_SNUBBULL,
+ SPECIES_SPEAROW,
+ SPECIES_SPINARAK,
+ SPECIES_SQUIRTLE,
+ SPECIES_STANTLER,
+ SPECIES_STARMIE,
+ SPECIES_STARYU,
+ SPECIES_STEELIX,
+ SPECIES_SUDOWOODO,
+ SPECIES_SUICUNE,
+ SPECIES_SUNFLORA,
+ SPECIES_SUNKERN,
+ SPECIES_SWINUB,
+ SPECIES_TANGELA,
+ SPECIES_TAUROS,
+ SPECIES_TEDDIURSA,
+ SPECIES_TENTACOOL,
+ SPECIES_TENTACRUEL,
+ SPECIES_TOGEPI,
+ SPECIES_TOGETIC,
+ SPECIES_TOTODILE,
+ SPECIES_TYPHLOSION,
+ SPECIES_TYRANITAR,
+ SPECIES_TYROGUE,
+ SPECIES_UMBREON,
+ SPECIES_UNOWN,
+ SPECIES_URSARING,
+ SPECIES_VAPOREON,
+ SPECIES_VENOMOTH,
+ SPECIES_VENONAT,
+ SPECIES_VENUSAUR,
+ SPECIES_VICTREEBEL,
+ SPECIES_VILEPLUME,
+ SPECIES_VOLTORB,
+ SPECIES_VULPIX,
+ SPECIES_WARTORTLE,
+ SPECIES_WEEDLE,
+ SPECIES_WEEPINBELL,
+ SPECIES_WEEZING,
+ SPECIES_WIGGLYTUFF,
+ SPECIES_WOBBUFFET,
+ SPECIES_WOOPER,
+ SPECIES_XATU,
+ SPECIES_YANMA,
+ SPECIES_ZAPDOS,
+ SPECIES_ZUBAT,
};
diff --git a/src/data/graphics/berries.h b/src/data/graphics/berries.h
index e33384a846..36658427f9 100644
--- a/src/data/graphics/berries.h
+++ b/src/data/graphics/berries.h
@@ -7,12 +7,12 @@ const u32 gBerryTag_Pal[] = INCBIN_U32("graphics/bag/berry_tag_title.bin.lz");
const u32 gBerryCheckCircle_Gfx[] = INCBIN_U32("graphics/bag/check_berry_circle.4bpp.lz");
const u32 gBerryPic_Cheri[] = INCBIN_U32("graphics/berries/cheri.4bpp.lz");
-const u32 gBerryPic_Oran[] = INCBIN_U32("graphics/berries/oran.4bpp.lz");
+const u32 gBerryPic_Chesto[] = INCBIN_U32("graphics/berries/chesto.4bpp.lz");
const u32 gBerryPic_Pecha[] = INCBIN_U32("graphics/berries/pecha.4bpp.lz");
const u32 gBerryPic_Rawst[] = INCBIN_U32("graphics/berries/rawst.4bpp.lz");
const u32 gBerryPic_Aspear[] = INCBIN_U32("graphics/berries/aspear.4bpp.lz");
const u32 gBerryPic_Leppa[] = INCBIN_U32("graphics/berries/leppa.4bpp.lz");
-const u32 gBerryPic_Chesto[] = INCBIN_U32("graphics/berries/chesto.4bpp.lz");
+const u32 gBerryPic_Oran[] = INCBIN_U32("graphics/berries/oran.4bpp.lz");
const u32 gBerryPic_Persim[] = INCBIN_U32("graphics/berries/persim.4bpp.lz");
const u32 gBerryPic_Lum[] = INCBIN_U32("graphics/berries/lum.4bpp.lz");
const u32 gBerryPic_Sitrus[] = INCBIN_U32("graphics/berries/sitrus.4bpp.lz");
@@ -41,6 +41,24 @@ const u32 gBerryPic_Pamtre[] = INCBIN_U32("graphics/berries/pamtre.4bpp.lz");
const u32 gBerryPic_Watmel[] = INCBIN_U32("graphics/berries/watmel.4bpp.lz");
const u32 gBerryPic_Durin[] = INCBIN_U32("graphics/berries/durin.4bpp.lz");
const u32 gBerryPic_Belue[] = INCBIN_U32("graphics/berries/belue.4bpp.lz");
+const u32 gBerryPic_Chilan[] = INCBIN_U32("graphics/berries/chilan.4bpp.lz");
+const u32 gBerryPic_Occa[] = INCBIN_U32("graphics/berries/occa.4bpp.lz");
+const u32 gBerryPic_Passho[] = INCBIN_U32("graphics/berries/passho.4bpp.lz");
+const u32 gBerryPic_Wacan[] = INCBIN_U32("graphics/berries/wacan.4bpp.lz");
+const u32 gBerryPic_Rindo[] = INCBIN_U32("graphics/berries/rindo.4bpp.lz");
+const u32 gBerryPic_Yache[] = INCBIN_U32("graphics/berries/yache.4bpp.lz");
+const u32 gBerryPic_Chople[] = INCBIN_U32("graphics/berries/chople.4bpp.lz");
+const u32 gBerryPic_Kebia[] = INCBIN_U32("graphics/berries/kebia.4bpp.lz");
+const u32 gBerryPic_Shuca[] = INCBIN_U32("graphics/berries/shuca.4bpp.lz");
+const u32 gBerryPic_Coba[] = INCBIN_U32("graphics/berries/coba.4bpp.lz");
+const u32 gBerryPic_Payapa[] = INCBIN_U32("graphics/berries/payapa.4bpp.lz");
+const u32 gBerryPic_Tanga[] = INCBIN_U32("graphics/berries/tanga.4bpp.lz");
+const u32 gBerryPic_Charti[] = INCBIN_U32("graphics/berries/charti.4bpp.lz");
+const u32 gBerryPic_Kasib[] = INCBIN_U32("graphics/berries/kasib.4bpp.lz");
+const u32 gBerryPic_Haban[] = INCBIN_U32("graphics/berries/haban.4bpp.lz");
+const u32 gBerryPic_Colbur[] = INCBIN_U32("graphics/berries/colbur.4bpp.lz");
+const u32 gBerryPic_Babiri[] = INCBIN_U32("graphics/berries/babiri.4bpp.lz");
+const u32 gBerryPic_Roseli[] = INCBIN_U32("graphics/berries/roseli.4bpp.lz");
const u32 gBerryPic_Liechi[] = INCBIN_U32("graphics/berries/liechi.4bpp.lz");
const u32 gBerryPic_Ganlon[] = INCBIN_U32("graphics/berries/ganlon.4bpp.lz");
const u32 gBerryPic_Salac[] = INCBIN_U32("graphics/berries/salac.4bpp.lz");
@@ -49,14 +67,20 @@ const u32 gBerryPic_Apicot[] = INCBIN_U32("graphics/berries/apicot.4bpp.lz");
const u32 gBerryPic_Lansat[] = INCBIN_U32("graphics/berries/lansat.4bpp.lz");
const u32 gBerryPic_Starf[] = INCBIN_U32("graphics/berries/starf.4bpp.lz");
const u32 gBerryPic_Enigma[] = INCBIN_U32("graphics/berries/enigma.4bpp.lz");
+const u32 gBerryPic_Micle[] = INCBIN_U32("graphics/berries/micle.4bpp.lz");
+const u32 gBerryPic_Custap[] = INCBIN_U32("graphics/berries/custap.4bpp.lz");
+const u32 gBerryPic_Jaboca[] = INCBIN_U32("graphics/berries/jaboca.4bpp.lz");
+const u32 gBerryPic_Rowap[] = INCBIN_U32("graphics/berries/rowap.4bpp.lz");
+const u32 gBerryPic_Kee[] = INCBIN_U32("graphics/berries/kee.4bpp.lz");
+const u32 gBerryPic_Maranga[] = INCBIN_U32("graphics/berries/maranga.4bpp.lz");
const u32 gBerryPalette_Cheri[] = INCBIN_U32("graphics/berries/cheri.gbapal.lz");
-const u32 gBerryPalette_Oran[] = INCBIN_U32("graphics/berries/oran.gbapal.lz");
+const u32 gBerryPalette_Chesto[] = INCBIN_U32("graphics/berries/chesto.gbapal.lz");
const u32 gBerryPalette_Pecha[] = INCBIN_U32("graphics/berries/pecha.gbapal.lz");
const u32 gBerryPalette_Rawst[] = INCBIN_U32("graphics/berries/rawst.gbapal.lz");
const u32 gBerryPalette_Aspear[] = INCBIN_U32("graphics/berries/aspear.gbapal.lz");
const u32 gBerryPalette_Leppa[] = INCBIN_U32("graphics/berries/leppa.gbapal.lz");
-const u32 gBerryPalette_Chesto[] = INCBIN_U32("graphics/berries/chesto.gbapal.lz");
+const u32 gBerryPalette_Oran[] = INCBIN_U32("graphics/berries/oran.gbapal.lz");
const u32 gBerryPalette_Persim[] = INCBIN_U32("graphics/berries/persim.gbapal.lz");
const u32 gBerryPalette_Lum[] = INCBIN_U32("graphics/berries/lum.gbapal.lz");
const u32 gBerryPalette_Sitrus[] = INCBIN_U32("graphics/berries/sitrus.gbapal.lz");
@@ -85,6 +109,24 @@ const u32 gBerryPalette_Pamtre[] = INCBIN_U32("graphics/berries/pamtre.gbapal.lz
const u32 gBerryPalette_Watmel[] = INCBIN_U32("graphics/berries/watmel.gbapal.lz");
const u32 gBerryPalette_Durin[] = INCBIN_U32("graphics/berries/durin.gbapal.lz");
const u32 gBerryPalette_Belue[] = INCBIN_U32("graphics/berries/belue.gbapal.lz");
+const u32 gBerryPalette_Chilan[] = INCBIN_U32("graphics/berries/chilan.gbapal.lz");
+const u32 gBerryPalette_Occa[] = INCBIN_U32("graphics/berries/occa.gbapal.lz");
+const u32 gBerryPalette_Passho[] = INCBIN_U32("graphics/berries/passho.gbapal.lz");
+const u32 gBerryPalette_Wacan[] = INCBIN_U32("graphics/berries/wacan.gbapal.lz");
+const u32 gBerryPalette_Rindo[] = INCBIN_U32("graphics/berries/rindo.gbapal.lz");
+const u32 gBerryPalette_Yache[] = INCBIN_U32("graphics/berries/yache.gbapal.lz");
+const u32 gBerryPalette_Chople[] = INCBIN_U32("graphics/berries/chople.gbapal.lz");
+const u32 gBerryPalette_Kebia[] = INCBIN_U32("graphics/berries/kebia.gbapal.lz");
+const u32 gBerryPalette_Shuca[] = INCBIN_U32("graphics/berries/shuca.gbapal.lz");
+const u32 gBerryPalette_Coba[] = INCBIN_U32("graphics/berries/coba.gbapal.lz");
+const u32 gBerryPalette_Payapa[] = INCBIN_U32("graphics/berries/payapa.gbapal.lz");
+const u32 gBerryPalette_Tanga[] = INCBIN_U32("graphics/berries/tanga.gbapal.lz");
+const u32 gBerryPalette_Charti[] = INCBIN_U32("graphics/berries/charti.gbapal.lz");
+const u32 gBerryPalette_Kasib[] = INCBIN_U32("graphics/berries/kasib.gbapal.lz");
+const u32 gBerryPalette_Haban[] = INCBIN_U32("graphics/berries/haban.gbapal.lz");
+const u32 gBerryPalette_Colbur[] = INCBIN_U32("graphics/berries/colbur.gbapal.lz");
+const u32 gBerryPalette_Babiri[] = INCBIN_U32("graphics/berries/babiri.gbapal.lz");
+const u32 gBerryPalette_Roseli[] = INCBIN_U32("graphics/berries/roseli.gbapal.lz");
const u32 gBerryPalette_Liechi[] = INCBIN_U32("graphics/berries/liechi.gbapal.lz");
const u32 gBerryPalette_Ganlon[] = INCBIN_U32("graphics/berries/ganlon.gbapal.lz");
const u32 gBerryPalette_Salac[] = INCBIN_U32("graphics/berries/salac.gbapal.lz");
@@ -93,3 +135,9 @@ const u32 gBerryPalette_Apicot[] = INCBIN_U32("graphics/berries/apicot.gbapal.lz
const u32 gBerryPalette_Lansat[] = INCBIN_U32("graphics/berries/lansat.gbapal.lz");
const u32 gBerryPalette_Starf[] = INCBIN_U32("graphics/berries/starf.gbapal.lz");
const u32 gBerryPalette_Enigma[] = INCBIN_U32("graphics/berries/enigma.gbapal.lz");
+const u32 gBerryPalette_Micle[] = INCBIN_U32("graphics/berries/micle.gbapal.lz");
+const u32 gBerryPalette_Custap[] = INCBIN_U32("graphics/berries/custap.gbapal.lz");
+const u32 gBerryPalette_Jaboca[] = INCBIN_U32("graphics/berries/jaboca.gbapal.lz");
+const u32 gBerryPalette_Rowap[] = INCBIN_U32("graphics/berries/rowap.gbapal.lz");
+const u32 gBerryPalette_Kee[] = INCBIN_U32("graphics/berries/kee.gbapal.lz");
+const u32 gBerryPalette_Maranga[] = INCBIN_U32("graphics/berries/maranga.gbapal.lz");
diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h
index 26da9061df..a755c7e6fd 100644
--- a/src/data/graphics/items.h
+++ b/src/data/graphics/items.h
@@ -4,73 +4,106 @@ const u32 gItemIconPalette_QuestionMark[] = INCBIN_U32("graphics/items/icon_pale
const u32 gItemIcon_ReturnToFieldArrow[] = INCBIN_U32("graphics/items/icons/return_to_field_arrow.4bpp.lz");
const u32 gItemIconPalette_ReturnToFieldArrow[] = INCBIN_U32("graphics/items/icon_palettes/return_to_field_arrow.gbapal.lz");
-// Pokeballs
-
-const u32 gItemIcon_MasterBall[] = INCBIN_U32("graphics/items/icons/master_ball.4bpp.lz");
-const u32 gItemIconPalette_MasterBall[] = INCBIN_U32("graphics/items/icon_palettes/master_ball.gbapal.lz");
-
-const u32 gItemIcon_UltraBall[] = INCBIN_U32("graphics/items/icons/ultra_ball.4bpp.lz");
-const u32 gItemIconPalette_UltraBall[] = INCBIN_U32("graphics/items/icon_palettes/ultra_ball.gbapal.lz");
-
-const u32 gItemIcon_GreatBall[] = INCBIN_U32("graphics/items/icons/great_ball.4bpp.lz");
-const u32 gItemIconPalette_GreatBall[] = INCBIN_U32("graphics/items/icon_palettes/great_ball.gbapal.lz");
+// Poké Balls
const u32 gItemIcon_PokeBall[] = INCBIN_U32("graphics/items/icons/poke_ball.4bpp.lz");
const u32 gItemIconPalette_PokeBall[] = INCBIN_U32("graphics/items/icon_palettes/poke_ball.gbapal.lz");
-const u32 gItemIcon_SafariBall[] = INCBIN_U32("graphics/items/icons/safari_ball.4bpp.lz");
-const u32 gItemIconPalette_SafariBall[] = INCBIN_U32("graphics/items/icon_palettes/safari_ball.gbapal.lz");
+const u32 gItemIcon_GreatBall[] = INCBIN_U32("graphics/items/icons/great_ball.4bpp.lz");
+const u32 gItemIconPalette_GreatBall[] = INCBIN_U32("graphics/items/icon_palettes/great_ball.gbapal.lz");
+
+const u32 gItemIcon_UltraBall[] = INCBIN_U32("graphics/items/icons/ultra_ball.4bpp.lz");
+const u32 gItemIconPalette_UltraBall[] = INCBIN_U32("graphics/items/icon_palettes/ultra_ball.gbapal.lz");
+
+const u32 gItemIcon_MasterBall[] = INCBIN_U32("graphics/items/icons/master_ball.4bpp.lz");
+const u32 gItemIconPalette_MasterBall[] = INCBIN_U32("graphics/items/icon_palettes/master_ball.gbapal.lz");
+
+const u32 gItemIcon_PremierBall[] = INCBIN_U32("graphics/items/icons/premier_ball.4bpp.lz");
+
+const u32 gItemIcon_HealBall[] = INCBIN_U32("graphics/items/icons/heal_ball.4bpp.lz");
+const u32 gItemIconPalette_HealBall[] = INCBIN_U32("graphics/items/icon_palettes/heal_ball.gbapal.lz");
const u32 gItemIcon_NetBall[] = INCBIN_U32("graphics/items/icons/net_ball.4bpp.lz");
const u32 gItemIconPalette_NetBall[] = INCBIN_U32("graphics/items/icon_palettes/net_ball.gbapal.lz");
+const u32 gItemIcon_NestBall[] = INCBIN_U32("graphics/items/icons/nest_ball.4bpp.lz");
+const u32 gItemIconPalette_NestBall[] = INCBIN_U32("graphics/items/icon_palettes/nest_ball.gbapal.lz");
+
const u32 gItemIcon_DiveBall[] = INCBIN_U32("graphics/items/icons/dive_ball.4bpp.lz");
const u32 gItemIconPalette_DiveBall[] = INCBIN_U32("graphics/items/icon_palettes/dive_ball.gbapal.lz");
-const u32 gItemIcon_NestBall[] = INCBIN_U32("graphics/items/icons/nest_ball.4bpp.lz");
-const u32 gItemIconPalette_NestBall[] = INCBIN_U32("graphics/items/icon_palettes/nest_ball.gbapal.lz");
+const u32 gItemIcon_DuskBall[] = INCBIN_U32("graphics/items/icons/dusk_ball.4bpp.lz");
+const u32 gItemIconPalette_DuskBall[] = INCBIN_U32("graphics/items/icon_palettes/dusk_ball.gbapal.lz");
+
+const u32 gItemIcon_TimerBall[] = INCBIN_U32("graphics/items/icons/timer_ball.4bpp.lz");
+
+const u32 gItemIcon_QuickBall[] = INCBIN_U32("graphics/items/icons/quick_ball.4bpp.lz");
+const u32 gItemIconPalette_QuickBall[] = INCBIN_U32("graphics/items/icon_palettes/quick_ball.gbapal.lz");
const u32 gItemIcon_RepeatBall[] = INCBIN_U32("graphics/items/icons/repeat_ball.4bpp.lz");
const u32 gItemIconPalette_RepeatBall[] = INCBIN_U32("graphics/items/icon_palettes/repeat_ball.gbapal.lz");
-const u32 gItemIcon_TimerBall[] = INCBIN_U32("graphics/items/icons/timer_ball.4bpp.lz");
-
const u32 gItemIcon_LuxuryBall[] = INCBIN_U32("graphics/items/icons/luxury_ball.4bpp.lz");
const u32 gItemIconPalette_LuxuryBall[] = INCBIN_U32("graphics/items/icon_palettes/luxury_ball.gbapal.lz");
-const u32 gItemIcon_PremierBall[] = INCBIN_U32("graphics/items/icons/premier_ball.4bpp.lz");
+const u32 gItemIcon_LevelBall[] = INCBIN_U32("graphics/items/icons/level_ball.4bpp.lz");
+const u32 gItemIconPalette_LevelBall[] = INCBIN_U32("graphics/items/icon_palettes/level_ball.gbapal.lz");
+
+const u32 gItemIcon_LureBall[] = INCBIN_U32("graphics/items/icons/lure_ball.4bpp.lz");
+const u32 gItemIconPalette_LureBall[] = INCBIN_U32("graphics/items/icon_palettes/lure_ball.gbapal.lz");
+
+const u32 gItemIcon_MoonBall[] = INCBIN_U32("graphics/items/icons/moon_ball.4bpp.lz");
+const u32 gItemIconPalette_MoonBall[] = INCBIN_U32("graphics/items/icon_palettes/moon_ball.gbapal.lz");
+
+const u32 gItemIcon_FriendBall[] = INCBIN_U32("graphics/items/icons/friend_ball.4bpp.lz");
+const u32 gItemIconPalette_FriendBall[] = INCBIN_U32("graphics/items/icon_palettes/friend_ball.gbapal.lz");
+
+const u32 gItemIcon_LoveBall[] = INCBIN_U32("graphics/items/icons/love_ball.4bpp.lz");
+const u32 gItemIconPalette_LoveBall[] = INCBIN_U32("graphics/items/icon_palettes/love_ball.gbapal.lz");
+
+const u32 gItemIcon_FastBall[] = INCBIN_U32("graphics/items/icons/fast_ball.4bpp.lz");
+const u32 gItemIconPalette_FastBall[] = INCBIN_U32("graphics/items/icon_palettes/fast_ball.gbapal.lz");
+
+const u32 gItemIcon_HeavyBall[] = INCBIN_U32("graphics/items/icons/heavy_ball.4bpp.lz");
+const u32 gItemIconPalette_HeavyBall[] = INCBIN_U32("graphics/items/icon_palettes/heavy_ball.gbapal.lz");
+
+const u32 gItemIcon_DreamBall[] = INCBIN_U32("graphics/items/icons/dream_ball.4bpp.lz");
+const u32 gItemIconPalette_DreamBall[] = INCBIN_U32("graphics/items/icon_palettes/dream_ball.gbapal.lz");
+
+const u32 gItemIcon_SafariBall[] = INCBIN_U32("graphics/items/icons/safari_ball.4bpp.lz");
+const u32 gItemIconPalette_SafariBall[] = INCBIN_U32("graphics/items/icon_palettes/safari_ball.gbapal.lz");
+
+const u32 gItemIcon_SportBall[] = INCBIN_U32("graphics/items/icons/sport_ball.4bpp.lz");
+const u32 gItemIconPalette_SportBall[] = INCBIN_U32("graphics/items/icon_palettes/sport_ball.gbapal.lz");
+
+const u32 gItemIcon_ParkBall[] = INCBIN_U32("graphics/items/icons/park_ball.4bpp.lz");
+const u32 gItemIconPalette_ParkBall[] = INCBIN_U32("graphics/items/icon_palettes/park_ball.gbapal.lz");
+
+const u32 gItemIcon_BeastBall[] = INCBIN_U32("graphics/items/icons/beast_ball.4bpp.lz");
+const u32 gItemIconPalette_BeastBall[] = INCBIN_U32("graphics/items/icon_palettes/beast_ball.gbapal.lz");
+
+const u32 gItemIcon_CherishBall[] = INCBIN_U32("graphics/items/icons/cherish_ball.4bpp.lz");
+const u32 gItemIconPalette_CherishBall[] = INCBIN_U32("graphics/items/icon_palettes/cherish_ball.gbapal.lz");
// Medicine
const u32 gItemIcon_Potion[] = INCBIN_U32("graphics/items/icons/potion.4bpp.lz");
const u32 gItemIconPalette_Potion[] = INCBIN_U32("graphics/items/icon_palettes/potion.gbapal.lz");
-const u32 gItemIcon_Antidote[] = INCBIN_U32("graphics/items/icons/antidote.4bpp.lz");
-const u32 gItemIconPalette_Antidote[] = INCBIN_U32("graphics/items/icon_palettes/antidote.gbapal.lz");
-
-const u32 gItemIconPalette_BurnHeal[] = INCBIN_U32("graphics/items/icon_palettes/burn_heal.gbapal.lz");
-const u32 gItemIconPalette_IceHeal[] = INCBIN_U32("graphics/items/icon_palettes/ice_heal.gbapal.lz");
-const u32 gItemIcon_StatusHeal[] = INCBIN_U32("graphics/items/icons/status_heal.4bpp.lz");
-const u32 gItemIconPalette_Awakening[] = INCBIN_U32("graphics/items/icon_palettes/awakening.gbapal.lz");
-const u32 gItemIconPalette_ParalyzeHeal[] = INCBIN_U32("graphics/items/icon_palettes/paralyze_heal.gbapal.lz");
-
-const u32 gItemIcon_LargePotion[] = INCBIN_U32("graphics/items/icons/large_potion.4bpp.lz");
-const u32 gItemIconPalette_FullRestore[] = INCBIN_U32("graphics/items/icon_palettes/full_restore.gbapal.lz");
-const u32 gItemIconPalette_MaxPotion[] = INCBIN_U32("graphics/items/icon_palettes/max_potion.gbapal.lz");
+const u32 gItemIconPalette_SuperPotion[] = INCBIN_U32("graphics/items/icon_palettes/super_potion.gbapal.lz");
const u32 gItemIconPalette_HyperPotion[] = INCBIN_U32("graphics/items/icon_palettes/hyper_potion.gbapal.lz");
-const u32 gItemIconPalette_SuperPotion[] = INCBIN_U32("graphics/items/icon_palettes/super_potion.gbapal.lz");
+const u32 gItemIcon_LargePotion[] = INCBIN_U32("graphics/items/icons/large_potion.4bpp.lz");
+const u32 gItemIconPalette_MaxPotion[] = INCBIN_U32("graphics/items/icon_palettes/max_potion.gbapal.lz");
-const u32 gItemIcon_FullHeal[] = INCBIN_U32("graphics/items/icons/full_heal.4bpp.lz");
-const u32 gItemIconPalette_FullHeal[] = INCBIN_U32("graphics/items/icon_palettes/full_heal.gbapal.lz");
+const u32 gItemIconPalette_FullRestore[] = INCBIN_U32("graphics/items/icon_palettes/full_restore.gbapal.lz");
const u32 gItemIcon_Revive[] = INCBIN_U32("graphics/items/icons/revive.4bpp.lz");
+const u32 gItemIconPalette_Revive[] = INCBIN_U32("graphics/items/icon_palettes/revive.gbapal.lz");
const u32 gItemIcon_MaxRevive[] = INCBIN_U32("graphics/items/icons/max_revive.4bpp.lz");
-const u32 gItemIconPalette_Revive[] = INCBIN_U32("graphics/items/icon_palettes/revive.gbapal.lz");
-
const u32 gItemIcon_FreshWater[] = INCBIN_U32("graphics/items/icons/fresh_water.4bpp.lz");
const u32 gItemIconPalette_FreshWater[] = INCBIN_U32("graphics/items/icon_palettes/fresh_water.gbapal.lz");
@@ -94,40 +127,67 @@ const u32 gItemIconPalette_HealPowder[] = INCBIN_U32("graphics/items/icon_palett
const u32 gItemIcon_RevivalHerb[] = INCBIN_U32("graphics/items/icons/revival_herb.4bpp.lz");
const u32 gItemIconPalette_RevivalHerb[] = INCBIN_U32("graphics/items/icon_palettes/revival_herb.gbapal.lz");
+const u32 gItemIcon_Antidote[] = INCBIN_U32("graphics/items/icons/antidote.4bpp.lz");
+const u32 gItemIconPalette_Antidote[] = INCBIN_U32("graphics/items/icon_palettes/antidote.gbapal.lz");
+
+const u32 gItemIcon_StatusHeal[] = INCBIN_U32("graphics/items/icons/status_heal.4bpp.lz");
+const u32 gItemIconPalette_ParalyzeHeal[] = INCBIN_U32("graphics/items/icon_palettes/paralyze_heal.gbapal.lz");
+
+const u32 gItemIconPalette_BurnHeal[] = INCBIN_U32("graphics/items/icon_palettes/burn_heal.gbapal.lz");
+
+const u32 gItemIconPalette_IceHeal[] = INCBIN_U32("graphics/items/icon_palettes/ice_heal.gbapal.lz");
+
+const u32 gItemIconPalette_Awakening[] = INCBIN_U32("graphics/items/icon_palettes/awakening.gbapal.lz");
+
+const u32 gItemIcon_FullHeal[] = INCBIN_U32("graphics/items/icons/full_heal.4bpp.lz");
+const u32 gItemIconPalette_FullHeal[] = INCBIN_U32("graphics/items/icon_palettes/full_heal.gbapal.lz");
+
const u32 gItemIcon_Ether[] = INCBIN_U32("graphics/items/icons/ether.4bpp.lz");
const u32 gItemIconPalette_Ether[] = INCBIN_U32("graphics/items/icon_palettes/ether.gbapal.lz");
+
const u32 gItemIconPalette_MaxEther[] = INCBIN_U32("graphics/items/icon_palettes/max_ether.gbapal.lz");
+
const u32 gItemIconPalette_Elixir[] = INCBIN_U32("graphics/items/icon_palettes/elixir.gbapal.lz");
+
const u32 gItemIconPalette_MaxElixir[] = INCBIN_U32("graphics/items/icon_palettes/max_elixir.gbapal.lz");
-const u32 gItemIcon_LavaCookie[] = INCBIN_U32("graphics/items/icons/lava_cookie.4bpp.lz");
-const u32 gItemIconPalette_LavaCookieAndLetter[] = INCBIN_U32("graphics/items/icon_palettes/lava_cookie_and_letter.gbapal.lz");
-
-const u32 gItemIcon_Flute[] = INCBIN_U32("graphics/items/icons/flute.4bpp.lz");
-const u32 gItemIconPalette_BlueFlute[] = INCBIN_U32("graphics/items/icon_palettes/blue_flute.gbapal.lz");
-const u32 gItemIconPalette_YellowFlute[] = INCBIN_U32("graphics/items/icon_palettes/yellow_flute.gbapal.lz");
-const u32 gItemIconPalette_RedFlute[] = INCBIN_U32("graphics/items/icon_palettes/red_flute.gbapal.lz");
-const u32 gItemIconPalette_BlackFlute[] = INCBIN_U32("graphics/items/icon_palettes/black_flute.gbapal.lz");
-const u32 gItemIconPalette_WhiteFlute[] = INCBIN_U32("graphics/items/icon_palettes/white_flute.gbapal.lz");
-
const u32 gItemIcon_BerryJuice[] = INCBIN_U32("graphics/items/icons/berry_juice.4bpp.lz");
const u32 gItemIconPalette_BerryJuice[] = INCBIN_U32("graphics/items/icon_palettes/berry_juice.gbapal.lz");
const u32 gItemIcon_SacredAsh[] = INCBIN_U32("graphics/items/icons/sacred_ash.4bpp.lz");
const u32 gItemIconPalette_SacredAsh[] = INCBIN_U32("graphics/items/icon_palettes/sacred_ash.gbapal.lz");
-// Collectibles
+const u32 gItemIcon_SweetHeart[] = INCBIN_U32("graphics/items/icons/sweet_heart.4bpp.lz");
+const u32 gItemIconPalette_SweetHeart[] = INCBIN_U32("graphics/items/icon_palettes/sweet_heart.gbapal.lz");
-const u32 gItemIconPalette_ShoalSalt[] = INCBIN_U32("graphics/items/icon_palettes/shoal_salt.gbapal.lz");
+const u32 gItemIcon_MaxHoney[] = INCBIN_U32("graphics/items/icons/max_honey.4bpp.lz");
+const u32 gItemIconPalette_MaxHoney[] = INCBIN_U32("graphics/items/icon_palettes/max_honey.gbapal.lz");
-const u32 gItemIcon_ShoalShell[] = INCBIN_U32("graphics/items/icons/shoal_shell.4bpp.lz");
-const u32 gItemIconPalette_Shell[] = INCBIN_U32("graphics/items/icon_palettes/shell.gbapal.lz");
+// Regional Specialties
-const u32 gItemIcon_Shard[] = INCBIN_U32("graphics/items/icons/shard.4bpp.lz");
-const u32 gItemIconPalette_RedShard[] = INCBIN_U32("graphics/items/icon_palettes/red_shard.gbapal.lz");
-const u32 gItemIconPalette_BlueShard[] = INCBIN_U32("graphics/items/icon_palettes/blue_shard.gbapal.lz");
-const u32 gItemIconPalette_YellowShard[] = INCBIN_U32("graphics/items/icon_palettes/yellow_shard.gbapal.lz");
-const u32 gItemIconPalette_GreenShard[] = INCBIN_U32("graphics/items/icon_palettes/green_shard.gbapal.lz");
+const u32 gItemIcon_PewterCrunchies[] = INCBIN_U32("graphics/items/icons/pewter_crunchies.4bpp.lz");
+const u32 gItemIconPalette_PewterCrunchies[] = INCBIN_U32("graphics/items/icon_palettes/pewter_crunchies.gbapal.lz");
+
+const u32 gItemIcon_RageCandyBar[] = INCBIN_U32("graphics/items/icons/rage_candy_bar.4bpp.lz");
+const u32 gItemIconPalette_RageCandyBar[] = INCBIN_U32("graphics/items/icon_palettes/rage_candy_bar.gbapal.lz");
+
+const u32 gItemIcon_LavaCookie[] = INCBIN_U32("graphics/items/icons/lava_cookie.4bpp.lz");
+const u32 gItemIconPalette_LavaCookieAndLetter[] = INCBIN_U32("graphics/items/icon_palettes/lava_cookie_and_letter.gbapal.lz");
+
+const u32 gItemIcon_OldGateau[] = INCBIN_U32("graphics/items/icons/old_gateau.4bpp.lz");
+const u32 gItemIconPalette_OldGateau[] = INCBIN_U32("graphics/items/icon_palettes/old_gateau.gbapal.lz");
+
+const u32 gItemIcon_Casteliacone[] = INCBIN_U32("graphics/items/icons/casteliacone.4bpp.lz");
+const u32 gItemIconPalette_Casteliacone[] = INCBIN_U32("graphics/items/icon_palettes/casteliacone.gbapal.lz");
+
+const u32 gItemIcon_LumioseGalette[] = INCBIN_U32("graphics/items/icons/lumiose_galette.4bpp.lz");
+const u32 gItemIconPalette_LumioseGalette[] = INCBIN_U32("graphics/items/icon_palettes/lumiose_galette.gbapal.lz");
+
+const u32 gItemIcon_ShalourSable[] = INCBIN_U32("graphics/items/icons/shalour_sable.4bpp.lz");
+const u32 gItemIconPalette_ShalourSable[] = INCBIN_U32("graphics/items/icon_palettes/shalour_sable.gbapal.lz");
+
+const u32 gItemIcon_BigMalasada[] = INCBIN_U32("graphics/items/icons/big_malasada.4bpp.lz");
+const u32 gItemIconPalette_BigMalasada[] = INCBIN_U32("graphics/items/icon_palettes/big_malasada.gbapal.lz");
// Vitamins
@@ -136,31 +196,127 @@ const u32 gItemIconPalette_HPUp[] = INCBIN_U32("graphics/items/icon_palettes/hp_
const u32 gItemIcon_Vitamin[] = INCBIN_U32("graphics/items/icons/vitamin.4bpp.lz");
const u32 gItemIconPalette_Protein[] = INCBIN_U32("graphics/items/icon_palettes/protein.gbapal.lz");
+
const u32 gItemIconPalette_Iron[] = INCBIN_U32("graphics/items/icon_palettes/iron.gbapal.lz");
-const u32 gItemIconPalette_Carbos[] = INCBIN_U32("graphics/items/icon_palettes/carbos.gbapal.lz");
+
const u32 gItemIconPalette_Calcium[] = INCBIN_U32("graphics/items/icon_palettes/calcium.gbapal.lz");
-const u32 gItemIcon_RareCandy[] = INCBIN_U32("graphics/items/icons/rare_candy.4bpp.lz");
-const u32 gItemIconPalette_RareCandy[] = INCBIN_U32("graphics/items/icon_palettes/rare_candy.gbapal.lz");
+const u32 gItemIconPalette_Zinc[] = INCBIN_U32("graphics/items/icon_palettes/zinc.gbapal.lz");
+
+const u32 gItemIconPalette_Carbos[] = INCBIN_U32("graphics/items/icon_palettes/carbos.gbapal.lz");
const u32 gItemIcon_PPUp[] = INCBIN_U32("graphics/items/icons/pp_up.4bpp.lz");
const u32 gItemIconPalette_PPUp[] = INCBIN_U32("graphics/items/icon_palettes/pp_up.gbapal.lz");
-const u32 gItemIconPalette_Zinc[] = INCBIN_U32("graphics/items/icon_palettes/zinc.gbapal.lz");
-
const u32 gItemIcon_PPMax[] = INCBIN_U32("graphics/items/icons/pp_max.4bpp.lz");
const u32 gItemIconPalette_PPMax[] = INCBIN_U32("graphics/items/icon_palettes/pp_max.gbapal.lz");
-// Battle items
+// EV Feathers
+
+const u32 gItemIcon_HealthFeather[] = INCBIN_U32("graphics/items/icons/health_feather.4bpp.lz");
+const u32 gItemIconPalette_HealthFeather[] = INCBIN_U32("graphics/items/icon_palettes/health_feather.gbapal.lz");
+
+const u32 gItemIcon_MuscleFeather[] = INCBIN_U32("graphics/items/icons/muscle_feather.4bpp.lz");
+const u32 gItemIconPalette_MuscleFeather[] = INCBIN_U32("graphics/items/icon_palettes/muscle_feather.gbapal.lz");
+
+const u32 gItemIcon_ResistFeather[] = INCBIN_U32("graphics/items/icons/resist_feather.4bpp.lz");
+const u32 gItemIconPalette_ResistFeather[] = INCBIN_U32("graphics/items/icon_palettes/resist_feather.gbapal.lz");
+
+const u32 gItemIcon_GeniusFeather[] = INCBIN_U32("graphics/items/icons/genius_feather.4bpp.lz");
+const u32 gItemIconPalette_GeniusFeather[] = INCBIN_U32("graphics/items/icon_palettes/genius_feather.gbapal.lz");
+
+const u32 gItemIcon_CleverFeather[] = INCBIN_U32("graphics/items/icons/clever_feather.4bpp.lz");
+const u32 gItemIconPalette_CleverFeather[] = INCBIN_U32("graphics/items/icon_palettes/clever_feather.gbapal.lz");
+
+const u32 gItemIcon_SwiftFeather[] = INCBIN_U32("graphics/items/icons/swift_feather.4bpp.lz");
+const u32 gItemIconPalette_SwiftFeather[] = INCBIN_U32("graphics/items/icon_palettes/swift_feather.gbapal.lz");
+
+// Ability Modifiers
+
+const u32 gItemIcon_AbilityCapsule[] = INCBIN_U32("graphics/items/icons/ability_capsule.4bpp.lz");
+const u32 gItemIconPalette_AbilityCapsule[] = INCBIN_U32("graphics/items/icon_palettes/ability_capsule.gbapal.lz");
+
+const u32 gItemIcon_AbilityPatch[] = INCBIN_U32("graphics/items/icons/ability_patch.4bpp.lz");
+const u32 gItemIconPalette_AbilityPatch[] = INCBIN_U32("graphics/items/icon_palettes/ability_patch.gbapal.lz");
+
+// Mints
+
+const u32 gItemIcon_Mint[] = INCBIN_U32("graphics/items/icons/mint.4bpp.lz");
+const u32 gItemIconPalette_RedMint[] = INCBIN_U32("graphics/items/icon_palettes/red_mint.gbapal.lz");
+const u32 gItemIconPalette_BlueMint[] = INCBIN_U32("graphics/items/icon_palettes/blue_mint.gbapal.lz");
+const u32 gItemIconPalette_LightBlueMint[] = INCBIN_U32("graphics/items/icon_palettes/light_blue_mint.gbapal.lz");
+const u32 gItemIconPalette_PinkMint[] = INCBIN_U32("graphics/items/icon_palettes/pink_mint.gbapal.lz");
+const u32 gItemIconPalette_GreenMint[] = INCBIN_U32("graphics/items/icon_palettes/green_mint.gbapal.lz");
+const u32 gItemIconPalette_YellowMint[] = INCBIN_U32("graphics/items/icon_palettes/yellow_mint.gbapal.lz");
+
+// Candy
+
+const u32 gItemIcon_RareCandy[] = INCBIN_U32("graphics/items/icons/rare_candy.4bpp.lz");
+const u32 gItemIconPalette_RareCandy[] = INCBIN_U32("graphics/items/icon_palettes/rare_candy.gbapal.lz");
+
+const u32 gItemIcon_ExpCandyXS[] = INCBIN_U32("graphics/items/icons/exp_candy_xs.4bpp.lz");
+const u32 gItemIcon_ExpCandyS[] = INCBIN_U32("graphics/items/icons/exp_candy_s.4bpp.lz");
+const u32 gItemIcon_ExpCandyM[] = INCBIN_U32("graphics/items/icons/exp_candy_m.4bpp.lz");
+const u32 gItemIcon_ExpCandyL[] = INCBIN_U32("graphics/items/icons/exp_candy_l.4bpp.lz");
+const u32 gItemIcon_ExpCandyXL[] = INCBIN_U32("graphics/items/icons/exp_candy_xl.4bpp.lz");
+const u32 gItemIconPalette_ExpCandies[] = INCBIN_U32("graphics/items/icon_palettes/exp_candies.gbapal.lz");
+
+const u32 gItemIcon_DynamaxCandy[] = INCBIN_U32("graphics/items/icons/dynamax_candy.4bpp.lz");
+const u32 gItemIconPalette_DynamaxCandy[] = INCBIN_U32("graphics/items/icon_palettes/dynamax_candy.gbapal.lz");
+
+// Medicinal Flutes
+
+const u32 gItemIcon_Flute[] = INCBIN_U32("graphics/items/icons/flute.4bpp.lz");
+const u32 gItemIconPalette_BlueFlute[] = INCBIN_U32("graphics/items/icon_palettes/blue_flute.gbapal.lz");
+
+const u32 gItemIconPalette_YellowFlute[] = INCBIN_U32("graphics/items/icon_palettes/yellow_flute.gbapal.lz");
+
+const u32 gItemIconPalette_RedFlute[] = INCBIN_U32("graphics/items/icon_palettes/red_flute.gbapal.lz");
+
+// Encounter-modifying Flutes
+
+const u32 gItemIconPalette_BlackFlute[] = INCBIN_U32("graphics/items/icon_palettes/black_flute.gbapal.lz");
+
+const u32 gItemIconPalette_WhiteFlute[] = INCBIN_U32("graphics/items/icon_palettes/white_flute.gbapal.lz");
+
+// Encounter Modifiers
+
+const u32 gItemIcon_Repel[] = INCBIN_U32("graphics/items/icons/repel.4bpp.lz");
+const u32 gItemIconPalette_Repel[] = INCBIN_U32("graphics/items/icon_palettes/repel.gbapal.lz");
+
+const u32 gItemIconPalette_SuperRepel[] = INCBIN_U32("graphics/items/icon_palettes/super_repel.gbapal.lz");
+
+const u32 gItemIconPalette_MaxRepel[] = INCBIN_U32("graphics/items/icon_palettes/max_repel.gbapal.lz");
+
+const u32 gItemIcon_Lure[] = INCBIN_U32("graphics/items/icons/lure.4bpp.lz");
+const u32 gItemIconPalette_Lure[] = INCBIN_U32("graphics/items/icon_palettes/lure.gbapal.lz");
+const u32 gItemIconPalette_SuperLure[] = INCBIN_U32("graphics/items/icon_palettes/super_lure.gbapal.lz");
+const u32 gItemIconPalette_MaxLure[] = INCBIN_U32("graphics/items/icon_palettes/max_lure.gbapal.lz");
+
+const u32 gItemIcon_EscapeRope[] = INCBIN_U32("graphics/items/icons/escape_rope.4bpp.lz");
+const u32 gItemIconPalette_EscapeRope[] = INCBIN_U32("graphics/items/icon_palettes/escape_rope.gbapal.lz");
+
+// X Items
+
+const u32 gItemIcon_BattleStatItem[] = INCBIN_U32("graphics/items/icons/battle_stat_item.4bpp.lz");
+const u32 gItemIconPalette_XAttack[] = INCBIN_U32("graphics/items/icon_palettes/x_attack.gbapal.lz");
+
+const u32 gItemIconPalette_XDefend[] = INCBIN_U32("graphics/items/icon_palettes/x_defend.gbapal.lz");
+
+const u32 gItemIconPalette_XSpecial[] = INCBIN_U32("graphics/items/icon_palettes/x_special.gbapal.lz");
+
+const u32 gItemIcon_XSpecialDefense[] = INCBIN_U32("graphics/items/icons/x_special_defense.4bpp.lz");
+const u32 gItemIconPalette_XSpecialDefense[] = INCBIN_U32("graphics/items/icon_palettes/x_special_defense.gbapal.lz");
+
+const u32 gItemIconPalette_XSpeed[] = INCBIN_U32("graphics/items/icon_palettes/x_speed.gbapal.lz");
+
+const u32 gItemIconPalette_XAccuracy[] = INCBIN_U32("graphics/items/icon_palettes/x_accuracy.gbapal.lz");
+
+const u32 gItemIconPalette_DireHit[] = INCBIN_U32("graphics/items/icon_palettes/dire_hit.gbapal.lz");
const u32 gItemIconPalette_GuardSpec[] = INCBIN_U32("graphics/items/icon_palettes/guard_spec.gbapal.lz");
-const u32 gItemIconPalette_DireHit[] = INCBIN_U32("graphics/items/icon_palettes/dire_hit.gbapal.lz");
-const u32 gItemIconPalette_XAttack[] = INCBIN_U32("graphics/items/icon_palettes/x_attack.gbapal.lz");
-const u32 gItemIcon_BattleStatItem[] = INCBIN_U32("graphics/items/icons/battle_stat_item.4bpp.lz");
-const u32 gItemIconPalette_XDefend[] = INCBIN_U32("graphics/items/icon_palettes/x_defend.gbapal.lz");
-const u32 gItemIconPalette_XSpeed[] = INCBIN_U32("graphics/items/icon_palettes/x_speed.gbapal.lz");
-const u32 gItemIconPalette_XAccuracy[] = INCBIN_U32("graphics/items/icon_palettes/x_accuracy.gbapal.lz");
-const u32 gItemIconPalette_XSpecial[] = INCBIN_U32("graphics/items/icon_palettes/x_special.gbapal.lz");
+
+// Escape Items
const u32 gItemIcon_PokeDoll[] = INCBIN_U32("graphics/items/icons/poke_doll.4bpp.lz");
const u32 gItemIconPalette_PokeDoll[] = INCBIN_U32("graphics/items/icon_palettes/poke_doll.gbapal.lz");
@@ -168,58 +324,186 @@ const u32 gItemIconPalette_PokeDoll[] = INCBIN_U32("graphics/items/icon_palettes
const u32 gItemIcon_FluffyTail[] = INCBIN_U32("graphics/items/icons/fluffy_tail.4bpp.lz");
const u32 gItemIconPalette_FluffyTail[] = INCBIN_U32("graphics/items/icon_palettes/fluffy_tail.gbapal.lz");
-// Field items
+const u32 gItemIcon_PokeToy[] = INCBIN_U32("graphics/items/icons/poke_toy.4bpp.lz");
+const u32 gItemIconPalette_PokeToy[] = INCBIN_U32("graphics/items/icon_palettes/poke_toy.gbapal.lz");
-const u32 gItemIcon_Repel[] = INCBIN_U32("graphics/items/icons/repel.4bpp.lz");
-const u32 gItemIconPalette_SuperRepel[] = INCBIN_U32("graphics/items/icon_palettes/super_repel.gbapal.lz");
-const u32 gItemIconPalette_MaxRepel[] = INCBIN_U32("graphics/items/icon_palettes/max_repel.gbapal.lz");
+const u32 gItemIcon_MaxMushrooms[] = INCBIN_U32("graphics/items/icons/max_mushrooms.4bpp.lz");
+const u32 gItemIconPalette_MaxMushrooms[] = INCBIN_U32("graphics/items/icon_palettes/max_mushrooms.gbapal.lz");
-const u32 gItemIcon_EscapeRope[] = INCBIN_U32("graphics/items/icons/escape_rope.4bpp.lz");
+// Treasures
-const u32 gItemIconPalette_EscapeRope[] = INCBIN_U32("graphics/items/icon_palettes/escape_rope.gbapal.lz");
-
-const u32 gItemIconPalette_Repel[] = INCBIN_U32("graphics/items/icon_palettes/repel.gbapal.lz");
-
-// Evolution stones
-
-const u32 gItemIcon_SunStone[] = INCBIN_U32("graphics/items/icons/sun_stone.4bpp.lz");
-const u32 gItemIconPalette_SunStone[] = INCBIN_U32("graphics/items/icon_palettes/sun_stone.gbapal.lz");
-
-const u32 gItemIcon_MoonStone[] = INCBIN_U32("graphics/items/icons/moon_stone.4bpp.lz");
-const u32 gItemIconPalette_MoonStone[] = INCBIN_U32("graphics/items/icon_palettes/moon_stone.gbapal.lz");
-
-const u32 gItemIcon_FireStone[] = INCBIN_U32("graphics/items/icons/fire_stone.4bpp.lz");
-const u32 gItemIconPalette_FireStone[] = INCBIN_U32("graphics/items/icon_palettes/fire_stone.gbapal.lz");
-
-const u32 gItemIcon_ThunderStone[] = INCBIN_U32("graphics/items/icons/thunder_stone.4bpp.lz");
-const u32 gItemIconPalette_ThunderStone[] = INCBIN_U32("graphics/items/icon_palettes/thunder_stone.gbapal.lz");
-
-const u32 gItemIcon_WaterStone[] = INCBIN_U32("graphics/items/icons/water_stone.4bpp.lz");
-const u32 gItemIconPalette_WaterStone[] = INCBIN_U32("graphics/items/icon_palettes/water_stone.gbapal.lz");
-
-const u32 gItemIcon_LeafStone[] = INCBIN_U32("graphics/items/icons/leaf_stone.4bpp.lz");
-const u32 gItemIconPalette_LeafStone[] = INCBIN_U32("graphics/items/icon_palettes/leaf_stone.gbapal.lz");
-
-// Valuables
-
-const u32 gItemIcon_TinyMushroom[] = INCBIN_U32("graphics/items/icons/tiny_mushroom.4bpp.lz");
-const u32 gItemIcon_BigMushroom[] = INCBIN_U32("graphics/items/icons/big_mushroom.4bpp.lz");
-const u32 gItemIconPalette_Mushroom[] = INCBIN_U32("graphics/items/icon_palettes/mushroom.gbapal.lz");
-
-const u32 gItemIcon_Pearl[] = INCBIN_U32("graphics/items/icons/pearl.4bpp.lz");
-const u32 gItemIconPalette_Pearl[] = INCBIN_U32("graphics/items/icon_palettes/pearl.gbapal.lz");
-const u32 gItemIcon_BigPearl[] = INCBIN_U32("graphics/items/icons/big_pearl.4bpp.lz");
-
-const u32 gItemIcon_Stardust[] = INCBIN_U32("graphics/items/icons/stardust.4bpp.lz");
-const u32 gItemIconPalette_Star[] = INCBIN_U32("graphics/items/icon_palettes/star.gbapal.lz");
-const u32 gItemIcon_StarPiece[] = INCBIN_U32("graphics/items/icons/star_piece.4bpp.lz");
+const u32 gItemIcon_BottleCap[] = INCBIN_U32("graphics/items/icons/bottle_cap.4bpp.lz");
+const u32 gItemIconPalette_BottleCap[] = INCBIN_U32("graphics/items/icon_palettes/bottle_cap.gbapal.lz");
+const u32 gItemIconPalette_GoldBottleCap[] = INCBIN_U32("graphics/items/icon_palettes/gold_bottle_cap.gbapal.lz");
const u32 gItemIcon_Nugget[] = INCBIN_U32("graphics/items/icons/nugget.4bpp.lz");
const u32 gItemIconPalette_Nugget[] = INCBIN_U32("graphics/items/icon_palettes/nugget.gbapal.lz");
+const u32 gItemIcon_BigNugget[] = INCBIN_U32("graphics/items/icons/big_nugget.4bpp.lz");
+const u32 gItemIconPalette_BigNugget[] = INCBIN_U32("graphics/items/icon_palettes/big_nugget.gbapal.lz");
+
+const u32 gItemIcon_TinyMushroom[] = INCBIN_U32("graphics/items/icons/tiny_mushroom.4bpp.lz");
+const u32 gItemIconPalette_Mushroom[] = INCBIN_U32("graphics/items/icon_palettes/mushroom.gbapal.lz");
+
+const u32 gItemIcon_BigMushroom[] = INCBIN_U32("graphics/items/icons/big_mushroom.4bpp.lz");
+
+const u32 gItemIcon_BalmMushroom[] = INCBIN_U32("graphics/items/icons/balm_mushroom.4bpp.lz");
+const u32 gItemIconPalette_BalmMushroom[] = INCBIN_U32("graphics/items/icon_palettes/balm_mushroom.gbapal.lz");
+
+const u32 gItemIcon_Pearl[] = INCBIN_U32("graphics/items/icons/pearl.4bpp.lz");
+const u32 gItemIconPalette_Pearl[] = INCBIN_U32("graphics/items/icon_palettes/pearl.gbapal.lz");
+
+const u32 gItemIcon_BigPearl[] = INCBIN_U32("graphics/items/icons/big_pearl.4bpp.lz");
+
+const u32 gItemIcon_PearlString[] = INCBIN_U32("graphics/items/icons/pearl_string.4bpp.lz");
+const u32 gItemIconPalette_PearlString[] = INCBIN_U32("graphics/items/icon_palettes/pearl_string.gbapal.lz");
+
+const u32 gItemIcon_Stardust[] = INCBIN_U32("graphics/items/icons/stardust.4bpp.lz");
+const u32 gItemIconPalette_Star[] = INCBIN_U32("graphics/items/icon_palettes/star.gbapal.lz");
+
+const u32 gItemIcon_StarPiece[] = INCBIN_U32("graphics/items/icons/star_piece.4bpp.lz");
+
+const u32 gItemIcon_CometShard[] = INCBIN_U32("graphics/items/icons/comet_shard.4bpp.lz");
+const u32 gItemIconPalette_CometShard[] = INCBIN_U32("graphics/items/icon_palettes/comet_shard.gbapal.lz");
+
+const u32 gItemIconPalette_ShoalSalt[] = INCBIN_U32("graphics/items/icon_palettes/shoal_salt.gbapal.lz");
+
+const u32 gItemIcon_ShoalShell[] = INCBIN_U32("graphics/items/icons/shoal_shell.4bpp.lz");
+const u32 gItemIconPalette_Shell[] = INCBIN_U32("graphics/items/icon_palettes/shell.gbapal.lz");
+
+const u32 gItemIcon_Shard[] = INCBIN_U32("graphics/items/icons/shard.4bpp.lz");
+const u32 gItemIconPalette_RedShard[] = INCBIN_U32("graphics/items/icon_palettes/red_shard.gbapal.lz");
+
+const u32 gItemIconPalette_BlueShard[] = INCBIN_U32("graphics/items/icon_palettes/blue_shard.gbapal.lz");
+
+const u32 gItemIconPalette_YellowShard[] = INCBIN_U32("graphics/items/icon_palettes/yellow_shard.gbapal.lz");
+
+const u32 gItemIconPalette_GreenShard[] = INCBIN_U32("graphics/items/icon_palettes/green_shard.gbapal.lz");
+
const u32 gItemIcon_HeartScale[] = INCBIN_U32("graphics/items/icons/heart_scale.4bpp.lz");
const u32 gItemIconPalette_HeartScale[] = INCBIN_U32("graphics/items/icon_palettes/heart_scale.gbapal.lz");
+const u32 gItemIcon_Honey[] = INCBIN_U32("graphics/items/icons/honey.4bpp.lz");
+const u32 gItemIconPalette_Honey[] = INCBIN_U32("graphics/items/icon_palettes/honey.gbapal.lz");
+
+const u32 gItemIcon_RareBone[] = INCBIN_U32("graphics/items/icons/rare_bone.4bpp.lz");
+const u32 gItemIconPalette_RareBone[] = INCBIN_U32("graphics/items/icon_palettes/rare_bone.gbapal.lz");
+
+const u32 gItemIcon_OddKeystone[] = INCBIN_U32("graphics/items/icons/odd_keystone.4bpp.lz");
+const u32 gItemIconPalette_OddKeystone[] = INCBIN_U32("graphics/items/icon_palettes/odd_keystone.gbapal.lz");
+
+const u32 gItemIcon_PrettyFeather[] = INCBIN_U32("graphics/items/icons/pretty_feather.4bpp.lz");
+const u32 gItemIconPalette_PrettyFeather[] = INCBIN_U32("graphics/items/icon_palettes/pretty_feather.gbapal.lz");
+
+const u32 gItemIcon_RelicCoin[] = INCBIN_U32("graphics/items/icons/relic_coin.4bpp.lz");
+const u32 gItemIconPalette_RelicCopper[] = INCBIN_U32("graphics/items/icon_palettes/relic_copper.gbapal.lz");
+const u32 gItemIconPalette_RelicSilver[] = INCBIN_U32("graphics/items/icon_palettes/relic_silver.gbapal.lz");
+const u32 gItemIconPalette_RelicGold[] = INCBIN_U32("graphics/items/icon_palettes/relic_gold.gbapal.lz");
+
+const u32 gItemIcon_RelicVase[] = INCBIN_U32("graphics/items/icons/relic_vase.4bpp.lz");
+const u32 gItemIconPalette_Relics[] = INCBIN_U32("graphics/items/icon_palettes/relics.gbapal.lz");
+const u32 gItemIcon_RelicBand[] = INCBIN_U32("graphics/items/icons/relic_band.4bpp.lz");
+const u32 gItemIcon_RelicStatue[] = INCBIN_U32("graphics/items/icons/relic_statue.4bpp.lz");
+const u32 gItemIcon_RelicCrown[] = INCBIN_U32("graphics/items/icons/relic_crown.4bpp.lz");
+
+const u32 gItemIcon_StrangeSouvenir[] = INCBIN_U32("graphics/items/icons/strange_souvenir.4bpp.lz");
+const u32 gItemIconPalette_StrangeSouvenir[] = INCBIN_U32("graphics/items/icon_palettes/strange_souvenir.gbapal.lz");
+
+// Fossils
+
+const u32 gItemIcon_HelixFossil[] = INCBIN_U32("graphics/items/icons/helix_fossil.4bpp.lz");
+const u32 gItemIconPalette_KantoFossil[] = INCBIN_U32("graphics/items/icon_palettes/kanto_fossil.gbapal.lz");
+
+const u32 gItemIcon_DomeFossil[] = INCBIN_U32("graphics/items/icons/dome_fossil.4bpp.lz");
+
+const u32 gItemIcon_OldAmber[] = INCBIN_U32("graphics/items/icons/old_amber.4bpp.lz");
+const u32 gItemIconPalette_OldAmber[] = INCBIN_U32("graphics/items/icon_palettes/old_amber.gbapal.lz");
+
+const u32 gItemIcon_RootFossil[] = INCBIN_U32("graphics/items/icons/root_fossil.4bpp.lz");
+const u32 gItemIconPalette_HoennFossil[] = INCBIN_U32("graphics/items/icon_palettes/hoenn_fossil.gbapal.lz");
+
+const u32 gItemIcon_ClawFossil[] = INCBIN_U32("graphics/items/icons/claw_fossil.4bpp.lz");
+
+const u32 gItemIcon_ArmorFossil[] = INCBIN_U32("graphics/items/icons/armor_fossil.4bpp.lz");
+const u32 gItemIconPalette_ArmorFossil[] = INCBIN_U32("graphics/items/icon_palettes/armor_fossil.gbapal.lz");
+
+const u32 gItemIcon_SkullFossil[] = INCBIN_U32("graphics/items/icons/skull_fossil.4bpp.lz");
+const u32 gItemIconPalette_SkullFossil[] = INCBIN_U32("graphics/items/icon_palettes/skull_fossil.gbapal.lz");
+
+const u32 gItemIcon_CoverFossil[] = INCBIN_U32("graphics/items/icons/cover_fossil.4bpp.lz");
+const u32 gItemIconPalette_CoverFossil[] = INCBIN_U32("graphics/items/icon_palettes/cover_fossil.gbapal.lz");
+
+const u32 gItemIcon_PlumeFossil[] = INCBIN_U32("graphics/items/icons/plume_fossil.4bpp.lz");
+const u32 gItemIconPalette_PlumeFossil[] = INCBIN_U32("graphics/items/icon_palettes/plume_fossil.gbapal.lz");
+
+const u32 gItemIcon_JawFossil[] = INCBIN_U32("graphics/items/icons/jaw_fossil.4bpp.lz");
+const u32 gItemIconPalette_JawFossil[] = INCBIN_U32("graphics/items/icon_palettes/jaw_fossil.gbapal.lz");
+
+const u32 gItemIcon_SailFossil[] = INCBIN_U32("graphics/items/icons/sail_fossil.4bpp.lz");
+const u32 gItemIconPalette_SailFossil[] = INCBIN_U32("graphics/items/icon_palettes/sail_fossil.gbapal.lz");
+
+const u32 gItemIcon_FossilizedBird[] = INCBIN_U32("graphics/items/icons/fossilized_bird.4bpp.lz");
+const u32 gItemIconPalette_FossilizedBird[] = INCBIN_U32("graphics/items/icon_palettes/fossilized_bird.gbapal.lz");
+
+const u32 gItemIcon_FossilizedFish[] = INCBIN_U32("graphics/items/icons/fossilized_fish.4bpp.lz");
+const u32 gItemIconPalette_FossilizedFish[] = INCBIN_U32("graphics/items/icon_palettes/fossilized_fish.gbapal.lz");
+
+const u32 gItemIcon_FossilizedDrake[] = INCBIN_U32("graphics/items/icons/fossilized_drake.4bpp.lz");
+const u32 gItemIconPalette_FossilizedDrake[] = INCBIN_U32("graphics/items/icon_palettes/fossilized_drake.gbapal.lz");
+
+const u32 gItemIcon_FossilizedDino[] = INCBIN_U32("graphics/items/icons/fossilized_dino.4bpp.lz");
+const u32 gItemIconPalette_FossilizedDino[] = INCBIN_U32("graphics/items/icon_palettes/fossilized_dino.gbapal.lz");
+
+// Mulch
+
+const u32 gItemIcon_Mulch[] = INCBIN_U32("graphics/items/icons/mulch.4bpp.lz");
+const u32 gItemIconPalette_GrowthMulch[] = INCBIN_U32("graphics/items/icon_palettes/growth_mulch.gbapal.lz");
+const u32 gItemIconPalette_DampMulch[] = INCBIN_U32("graphics/items/icon_palettes/damp_mulch.gbapal.lz");
+
+const u32 gItemIcon_StableMulch[] = INCBIN_U32("graphics/items/icons/stable_mulch.4bpp.lz");
+const u32 gItemIconPalette_StableMulch[] = INCBIN_U32("graphics/items/icon_palettes/stable_mulch.gbapal.lz");
+
+const u32 gItemIconPalette_GooeyMulch[] = INCBIN_U32("graphics/items/icon_palettes/gooey_mulch.gbapal.lz");
+const u32 gItemIconPalette_RichMulch[] = INCBIN_U32("graphics/items/icon_palettes/rich_mulch.gbapal.lz");
+const u32 gItemIconPalette_SurpriseMulch[] = INCBIN_U32("graphics/items/icon_palettes/surprise_mulch.gbapal.lz");
+const u32 gItemIconPalette_BoostMulch[] = INCBIN_U32("graphics/items/icon_palettes/boost_mulch.gbapal.lz");
+const u32 gItemIconPalette_AmazeMulch[] = INCBIN_U32("graphics/items/icon_palettes/amaze_mulch.gbapal.lz");
+
+// Apricorns
+
+const u32 gItemIcon_RedApricorn[] = INCBIN_U32("graphics/items/icons/red_apricorn.4bpp.lz");
+const u32 gItemIconPalette_RedApricorn[] = INCBIN_U32("graphics/items/icon_palettes/red_apricorn.gbapal.lz");
+
+const u32 gItemIcon_BlueApricorn[] = INCBIN_U32("graphics/items/icons/blue_apricorn.4bpp.lz");
+const u32 gItemIconPalette_BlueApricorn[] = INCBIN_U32("graphics/items/icon_palettes/blue_apricorn.gbapal.lz");
+
+const u32 gItemIcon_YellowApricorn[] = INCBIN_U32("graphics/items/icons/yellow_apricorn.4bpp.lz");
+const u32 gItemIconPalette_YellowApricorn[] = INCBIN_U32("graphics/items/icon_palettes/yellow_apricorn.gbapal.lz");
+
+const u32 gItemIcon_GreenApricorn[] = INCBIN_U32("graphics/items/icons/green_apricorn.4bpp.lz");
+const u32 gItemIconPalette_GreenApricorn[] = INCBIN_U32("graphics/items/icon_palettes/green_apricorn.gbapal.lz");
+
+const u32 gItemIcon_PinkApricorn[] = INCBIN_U32("graphics/items/icons/pink_apricorn.4bpp.lz");
+const u32 gItemIconPalette_PinkApricorn[] = INCBIN_U32("graphics/items/icon_palettes/pink_apricorn.gbapal.lz");
+
+const u32 gItemIcon_WhiteApricorn[] = INCBIN_U32("graphics/items/icons/white_apricorn.4bpp.lz");
+const u32 gItemIconPalette_WhiteApricorn[] = INCBIN_U32("graphics/items/icon_palettes/white_apricorn.gbapal.lz");
+
+const u32 gItemIcon_BlackApricorn[] = INCBIN_U32("graphics/items/icons/black_apricorn.4bpp.lz");
+const u32 gItemIconPalette_BlackApricorn[] = INCBIN_U32("graphics/items/icon_palettes/black_apricorn.gbapal.lz");
+
+const u32 gItemIcon_WishingPiece[] = INCBIN_U32("graphics/items/icons/wishing_piece.4bpp.lz");
+const u32 gItemIconPalette_WishingPiece[] = INCBIN_U32("graphics/items/icon_palettes/wishing_piece.gbapal.lz");
+
+const u32 gItemIcon_GalaricaTwig[] = INCBIN_U32("graphics/items/icons/galarica_twig.4bpp.lz");
+const u32 gItemIconPalette_GalaricaItem[] = INCBIN_U32("graphics/items/icon_palettes/galarica_item.gbapal.lz");
+
+const u32 gItemIcon_ArmoriteOre[] = INCBIN_U32("graphics/items/icons/armorite_ore.4bpp.lz");
+const u32 gItemIconPalette_ArmoriteOre[] = INCBIN_U32("graphics/items/icon_palettes/armorite_ore.gbapal.lz");
+
+const u32 gItemIcon_DyniteOre[] = INCBIN_U32("graphics/items/icons/dynite_ore.4bpp.lz");
+const u32 gItemIconPalette_DyniteOre[] = INCBIN_U32("graphics/items/icon_palettes/dynite_ore.gbapal.lz");
+
// Mail
const u32 gItemIcon_OrangeMail[] = INCBIN_U32("graphics/items/icons/orange_mail.4bpp.lz");
@@ -258,6 +542,942 @@ const u32 gItemIconPalette_FabMail[] = INCBIN_U32("graphics/items/icon_palettes/
const u32 gItemIcon_RetroMail[] = INCBIN_U32("graphics/items/icons/retro_mail.4bpp.lz");
const u32 gItemIconPalette_RetroMail[] = INCBIN_U32("graphics/items/icon_palettes/retro_mail.gbapal.lz");
+// Evolution Items
+
+const u32 gItemIcon_FireStone[] = INCBIN_U32("graphics/items/icons/fire_stone.4bpp.lz");
+const u32 gItemIconPalette_FireStone[] = INCBIN_U32("graphics/items/icon_palettes/fire_stone.gbapal.lz");
+
+const u32 gItemIcon_WaterStone[] = INCBIN_U32("graphics/items/icons/water_stone.4bpp.lz");
+const u32 gItemIconPalette_WaterStone[] = INCBIN_U32("graphics/items/icon_palettes/water_stone.gbapal.lz");
+
+const u32 gItemIcon_ThunderStone[] = INCBIN_U32("graphics/items/icons/thunder_stone.4bpp.lz");
+const u32 gItemIconPalette_ThunderStone[] = INCBIN_U32("graphics/items/icon_palettes/thunder_stone.gbapal.lz");
+
+const u32 gItemIcon_LeafStone[] = INCBIN_U32("graphics/items/icons/leaf_stone.4bpp.lz");
+const u32 gItemIconPalette_LeafStone[] = INCBIN_U32("graphics/items/icon_palettes/leaf_stone.gbapal.lz");
+
+const u32 gItemIcon_IceStone[] = INCBIN_U32("graphics/items/icons/ice_stone.4bpp.lz");
+const u32 gItemIconPalette_IceStone[] = INCBIN_U32("graphics/items/icon_palettes/ice_stone.gbapal.lz");
+
+const u32 gItemIcon_SunStone[] = INCBIN_U32("graphics/items/icons/sun_stone.4bpp.lz");
+const u32 gItemIconPalette_SunStone[] = INCBIN_U32("graphics/items/icon_palettes/sun_stone.gbapal.lz");
+
+const u32 gItemIcon_MoonStone[] = INCBIN_U32("graphics/items/icons/moon_stone.4bpp.lz");
+const u32 gItemIconPalette_MoonStone[] = INCBIN_U32("graphics/items/icon_palettes/moon_stone.gbapal.lz");
+
+const u32 gItemIcon_ShinyStone[] = INCBIN_U32("graphics/items/icons/shiny_stone.4bpp.lz");
+const u32 gItemIconPalette_ShinyStone[] = INCBIN_U32("graphics/items/icon_palettes/shiny_stone.gbapal.lz");
+
+const u32 gItemIcon_DuskStone[] = INCBIN_U32("graphics/items/icons/dusk_stone.4bpp.lz");
+const u32 gItemIconPalette_DuskStone[] = INCBIN_U32("graphics/items/icon_palettes/dusk_stone.gbapal.lz");
+
+const u32 gItemIcon_DawnStone[] = INCBIN_U32("graphics/items/icons/dawn_stone.4bpp.lz");
+const u32 gItemIconPalette_DawnStone[] = INCBIN_U32("graphics/items/icon_palettes/dawn_stone.gbapal.lz");
+
+const u32 gItemIcon_SweetApple[] = INCBIN_U32("graphics/items/icons/sweet_apple.4bpp.lz");
+const u32 gItemIconPalette_SweetApple[] = INCBIN_U32("graphics/items/icon_palettes/sweet_apple.gbapal.lz");
+
+const u32 gItemIcon_TartApple[] = INCBIN_U32("graphics/items/icons/tart_apple.4bpp.lz");
+const u32 gItemIconPalette_TartApple[] = INCBIN_U32("graphics/items/icon_palettes/tart_apple.gbapal.lz");
+
+const u32 gItemIcon_CrackedPot[] = INCBIN_U32("graphics/items/icons/cracked_pot.4bpp.lz");
+const u32 gItemIcon_ChippedPot[] = INCBIN_U32("graphics/items/icons/chipped_pot.4bpp.lz");
+const u32 gItemIconPalette_Pot[] = INCBIN_U32("graphics/items/icon_palettes/pot.gbapal.lz");
+
+const u32 gItemIcon_GalaricaCuff[] = INCBIN_U32("graphics/items/icons/galarica_cuff.4bpp.lz");
+
+const u32 gItemIcon_GalaricaWreath[] = INCBIN_U32("graphics/items/icons/galarica_wreath.4bpp.lz");
+
+const u32 gItemIcon_DragonScale[] = INCBIN_U32("graphics/items/icons/dragon_scale.4bpp.lz");
+const u32 gItemIconPalette_DragonScale[] = INCBIN_U32("graphics/items/icon_palettes/dragon_scale.gbapal.lz");
+
+const u32 gItemIcon_Upgrade[] = INCBIN_U32("graphics/items/icons/upgrade.4bpp.lz");
+const u32 gItemIconPalette_Upgrade[] = INCBIN_U32("graphics/items/icon_palettes/upgrade.gbapal.lz");
+
+const u32 gItemIcon_Protector[] = INCBIN_U32("graphics/items/icons/protector.4bpp.lz");
+const u32 gItemIconPalette_Protector[] = INCBIN_U32("graphics/items/icon_palettes/protector.gbapal.lz");
+
+const u32 gItemIcon_Electirizer[] = INCBIN_U32("graphics/items/icons/electirizer.4bpp.lz");
+const u32 gItemIconPalette_Electirizer[] = INCBIN_U32("graphics/items/icon_palettes/electirizer.gbapal.lz");
+
+const u32 gItemIcon_Magmarizer[] = INCBIN_U32("graphics/items/icons/magmarizer.4bpp.lz");
+const u32 gItemIconPalette_Magmarizer[] = INCBIN_U32("graphics/items/icon_palettes/magmarizer.gbapal.lz");
+
+const u32 gItemIcon_DubiousDisc[] = INCBIN_U32("graphics/items/icons/dubious_disc.4bpp.lz");
+const u32 gItemIconPalette_DubiousDisc[] = INCBIN_U32("graphics/items/icon_palettes/dubious_disc.gbapal.lz");
+
+const u32 gItemIcon_ReaperCloth[] = INCBIN_U32("graphics/items/icons/reaper_cloth.4bpp.lz");
+const u32 gItemIconPalette_ReaperCloth[] = INCBIN_U32("graphics/items/icon_palettes/reaper_cloth.gbapal.lz");
+
+const u32 gItemIcon_PrismScale[] = INCBIN_U32("graphics/items/icons/prism_scale.4bpp.lz");
+const u32 gItemIconPalette_PrismScale[] = INCBIN_U32("graphics/items/icon_palettes/prism_scale.gbapal.lz");
+
+const u32 gItemIcon_WhippedDream[] = INCBIN_U32("graphics/items/icons/whipped_dream.4bpp.lz");
+const u32 gItemIconPalette_WhippedDream[] = INCBIN_U32("graphics/items/icon_palettes/whipped_dream.gbapal.lz");
+
+const u32 gItemIcon_Sachet[] = INCBIN_U32("graphics/items/icons/sachet.4bpp.lz");
+const u32 gItemIconPalette_Sachet[] = INCBIN_U32("graphics/items/icon_palettes/sachet.gbapal.lz");
+
+const u32 gItemIcon_OvalStone[] = INCBIN_U32("graphics/items/icons/oval_stone.4bpp.lz");
+const u32 gItemIconPalette_OvalStone[] = INCBIN_U32("graphics/items/icon_palettes/oval_stone.gbapal.lz");
+
+const u32 gItemIcon_StrawberrySweet[] = INCBIN_U32("graphics/items/icons/strawberry_sweet.4bpp.lz");
+const u32 gItemIconPalette_StrawberrySweet[] = INCBIN_U32("graphics/items/icon_palettes/strawberry_sweet.gbapal.lz");
+
+const u32 gItemIcon_LoveSweet[] = INCBIN_U32("graphics/items/icons/love_sweet.4bpp.lz");
+const u32 gItemIconPalette_LoveSweet[] = INCBIN_U32("graphics/items/icon_palettes/love_sweet.gbapal.lz");
+
+const u32 gItemIcon_BerrySweet[] = INCBIN_U32("graphics/items/icons/berry_sweet.4bpp.lz");
+const u32 gItemIconPalette_BerrySweet[] = INCBIN_U32("graphics/items/icon_palettes/berry_sweet.gbapal.lz");
+
+const u32 gItemIcon_CloverSweet[] = INCBIN_U32("graphics/items/icons/clover_sweet.4bpp.lz");
+const u32 gItemIconPalette_CloverSweet[] = INCBIN_U32("graphics/items/icon_palettes/clover_sweet.gbapal.lz");
+
+const u32 gItemIcon_FlowerSweet[] = INCBIN_U32("graphics/items/icons/flower_sweet.4bpp.lz");
+const u32 gItemIconPalette_FlowerSweet[] = INCBIN_U32("graphics/items/icon_palettes/flower_sweet.gbapal.lz");
+
+const u32 gItemIcon_StarSweet[] = INCBIN_U32("graphics/items/icons/star_sweet.4bpp.lz");
+const u32 gItemIconPalette_StarSweet[] = INCBIN_U32("graphics/items/icon_palettes/star_sweet.gbapal.lz");
+
+const u32 gItemIcon_RibbonSweet[] = INCBIN_U32("graphics/items/icons/ribbon_sweet.4bpp.lz");
+const u32 gItemIconPalette_RibbonSweet[] = INCBIN_U32("graphics/items/icon_palettes/ribbon_sweet.gbapal.lz");
+
+const u32 gItemIcon_Everstone[] = INCBIN_U32("graphics/items/icons/everstone.4bpp.lz");
+const u32 gItemIconPalette_Everstone[] = INCBIN_U32("graphics/items/icon_palettes/everstone.gbapal.lz");
+
+// Nectars
+
+const u32 gItemIcon_RedNectar[] = INCBIN_U32("graphics/items/icons/red_nectar.4bpp.lz");
+const u32 gItemIconPalette_RedNectar[] = INCBIN_U32("graphics/items/icon_palettes/red_nectar.gbapal.lz");
+
+const u32 gItemIcon_YellowNectar[] = INCBIN_U32("graphics/items/icons/yellow_nectar.4bpp.lz");
+const u32 gItemIconPalette_YellowNectar[] = INCBIN_U32("graphics/items/icon_palettes/yellow_nectar.gbapal.lz");
+
+const u32 gItemIcon_PinkNectar[] = INCBIN_U32("graphics/items/icons/pink_nectar.4bpp.lz");
+const u32 gItemIconPalette_PinkNectar[] = INCBIN_U32("graphics/items/icon_palettes/pink_nectar.gbapal.lz");
+
+const u32 gItemIcon_PurpleNectar[] = INCBIN_U32("graphics/items/icons/purple_nectar.4bpp.lz");
+const u32 gItemIconPalette_PurpleNectar[] = INCBIN_U32("graphics/items/icon_palettes/purple_nectar.gbapal.lz");
+
+// Plates
+
+const u32 gItemIcon_FlamePlate[] = INCBIN_U32("graphics/items/icons/flame_plate.4bpp.lz");
+const u32 gItemIconPalette_FlamePlate[] = INCBIN_U32("graphics/items/icon_palettes/flame_plate.gbapal.lz");
+
+const u32 gItemIcon_SplashPlate[] = INCBIN_U32("graphics/items/icons/splash_plate.4bpp.lz");
+const u32 gItemIconPalette_SplashPlate[] = INCBIN_U32("graphics/items/icon_palettes/splash_plate.gbapal.lz");
+
+const u32 gItemIcon_ZapPlate[] = INCBIN_U32("graphics/items/icons/zap_plate.4bpp.lz");
+const u32 gItemIconPalette_ZapPlate[] = INCBIN_U32("graphics/items/icon_palettes/zap_plate.gbapal.lz");
+
+const u32 gItemIcon_MeadowPlate[] = INCBIN_U32("graphics/items/icons/meadow_plate.4bpp.lz");
+const u32 gItemIconPalette_MeadowPlate[] = INCBIN_U32("graphics/items/icon_palettes/meadow_plate.gbapal.lz");
+
+const u32 gItemIcon_IciclePlate[] = INCBIN_U32("graphics/items/icons/icicle_plate.4bpp.lz");
+const u32 gItemIconPalette_IciclePlate[] = INCBIN_U32("graphics/items/icon_palettes/icicle_plate.gbapal.lz");
+
+const u32 gItemIcon_FistPlate[] = INCBIN_U32("graphics/items/icons/fist_plate.4bpp.lz");
+const u32 gItemIconPalette_FistPlate[] = INCBIN_U32("graphics/items/icon_palettes/fist_plate.gbapal.lz");
+
+const u32 gItemIcon_ToxicPlate[] = INCBIN_U32("graphics/items/icons/toxic_plate.4bpp.lz");
+const u32 gItemIconPalette_ToxicPlate[] = INCBIN_U32("graphics/items/icon_palettes/toxic_plate.gbapal.lz");
+
+const u32 gItemIcon_EarthPlate[] = INCBIN_U32("graphics/items/icons/earth_plate.4bpp.lz");
+const u32 gItemIconPalette_EarthPlate[] = INCBIN_U32("graphics/items/icon_palettes/earth_plate.gbapal.lz");
+
+const u32 gItemIcon_SkyPlate[] = INCBIN_U32("graphics/items/icons/sky_plate.4bpp.lz");
+const u32 gItemIconPalette_SkyPlate[] = INCBIN_U32("graphics/items/icon_palettes/sky_plate.gbapal.lz");
+
+const u32 gItemIcon_MindPlate[] = INCBIN_U32("graphics/items/icons/mind_plate.4bpp.lz");
+const u32 gItemIconPalette_MindPlate[] = INCBIN_U32("graphics/items/icon_palettes/mind_plate.gbapal.lz");
+
+const u32 gItemIcon_InsectPlate[] = INCBIN_U32("graphics/items/icons/insect_plate.4bpp.lz");
+const u32 gItemIconPalette_InsectPlate[] = INCBIN_U32("graphics/items/icon_palettes/insect_plate.gbapal.lz");
+
+const u32 gItemIcon_StonePlate[] = INCBIN_U32("graphics/items/icons/stone_plate.4bpp.lz");
+const u32 gItemIconPalette_StonePlate[] = INCBIN_U32("graphics/items/icon_palettes/stone_plate.gbapal.lz");
+
+const u32 gItemIcon_SpookyPlate[] = INCBIN_U32("graphics/items/icons/spooky_plate.4bpp.lz");
+const u32 gItemIconPalette_SpookyPlate[] = INCBIN_U32("graphics/items/icon_palettes/spooky_plate.gbapal.lz");
+
+const u32 gItemIcon_DracoPlate[] = INCBIN_U32("graphics/items/icons/draco_plate.4bpp.lz");
+const u32 gItemIconPalette_DracoPlate[] = INCBIN_U32("graphics/items/icon_palettes/draco_plate.gbapal.lz");
+
+const u32 gItemIcon_DreadPlate[] = INCBIN_U32("graphics/items/icons/dread_plate.4bpp.lz");
+const u32 gItemIconPalette_DreadPlate[] = INCBIN_U32("graphics/items/icon_palettes/dread_plate.gbapal.lz");
+
+const u32 gItemIcon_IronPlate[] = INCBIN_U32("graphics/items/icons/iron_plate.4bpp.lz");
+const u32 gItemIconPalette_IronPlate[] = INCBIN_U32("graphics/items/icon_palettes/iron_plate.gbapal.lz");
+
+const u32 gItemIcon_PixiePlate[] = INCBIN_U32("graphics/items/icons/pixie_plate.4bpp.lz");
+const u32 gItemIconPalette_PixiePlate[] = INCBIN_U32("graphics/items/icon_palettes/pixie_plate.gbapal.lz");
+
+// Drives
+
+const u32 gItemIcon_DouseDrive[] = INCBIN_U32("graphics/items/icons/douse_drive.4bpp.lz");
+const u32 gItemIconPalette_DouseDrive[] = INCBIN_U32("graphics/items/icon_palettes/douse_drive.gbapal.lz");
+
+const u32 gItemIcon_ShockDrive[] = INCBIN_U32("graphics/items/icons/shock_drive.4bpp.lz");
+const u32 gItemIconPalette_ShockDrive[] = INCBIN_U32("graphics/items/icon_palettes/shock_drive.gbapal.lz");
+
+const u32 gItemIcon_BurnDrive[] = INCBIN_U32("graphics/items/icons/burn_drive.4bpp.lz");
+const u32 gItemIconPalette_BurnDrive[] = INCBIN_U32("graphics/items/icon_palettes/burn_drive.gbapal.lz");
+
+const u32 gItemIcon_ChillDrive[] = INCBIN_U32("graphics/items/icons/chill_drive.4bpp.lz");
+const u32 gItemIconPalette_ChillDrive[] = INCBIN_U32("graphics/items/icon_palettes/chill_drive.gbapal.lz");
+
+// Memories
+
+const u32 gItemIcon_FireMemory[] = INCBIN_U32("graphics/items/icons/fire_memory.4bpp.lz");
+const u32 gItemIconPalette_FireMemory[] = INCBIN_U32("graphics/items/icon_palettes/fire_memory.gbapal.lz");
+
+const u32 gItemIcon_WaterMemory[] = INCBIN_U32("graphics/items/icons/water_memory.4bpp.lz");
+const u32 gItemIconPalette_WaterMemory[] = INCBIN_U32("graphics/items/icon_palettes/water_memory.gbapal.lz");
+
+const u32 gItemIcon_ElectricMemory[] = INCBIN_U32("graphics/items/icons/electric_memory.4bpp.lz");
+const u32 gItemIconPalette_ElectricMemory[] = INCBIN_U32("graphics/items/icon_palettes/electric_memory.gbapal.lz");
+
+const u32 gItemIcon_GrassMemory[] = INCBIN_U32("graphics/items/icons/grass_memory.4bpp.lz");
+const u32 gItemIconPalette_GrassMemory[] = INCBIN_U32("graphics/items/icon_palettes/grass_memory.gbapal.lz");
+
+const u32 gItemIcon_IceMemory[] = INCBIN_U32("graphics/items/icons/ice_memory.4bpp.lz");
+const u32 gItemIconPalette_IceMemory[] = INCBIN_U32("graphics/items/icon_palettes/ice_memory.gbapal.lz");
+
+const u32 gItemIcon_FightingMemory[] = INCBIN_U32("graphics/items/icons/fighting_memory.4bpp.lz");
+const u32 gItemIconPalette_FightingMemory[] = INCBIN_U32("graphics/items/icon_palettes/fighting_memory.gbapal.lz");
+
+const u32 gItemIcon_PoisonMemory[] = INCBIN_U32("graphics/items/icons/poison_memory.4bpp.lz");
+const u32 gItemIconPalette_PoisonMemory[] = INCBIN_U32("graphics/items/icon_palettes/poison_memory.gbapal.lz");
+
+const u32 gItemIcon_GroundMemory[] = INCBIN_U32("graphics/items/icons/ground_memory.4bpp.lz");
+const u32 gItemIconPalette_GroundMemory[] = INCBIN_U32("graphics/items/icon_palettes/ground_memory.gbapal.lz");
+
+const u32 gItemIcon_FlyingMemory[] = INCBIN_U32("graphics/items/icons/flying_memory.4bpp.lz");
+const u32 gItemIconPalette_FlyingMemory[] = INCBIN_U32("graphics/items/icon_palettes/flying_memory.gbapal.lz");
+
+const u32 gItemIcon_PsychicMemory[] = INCBIN_U32("graphics/items/icons/psychic_memory.4bpp.lz");
+const u32 gItemIconPalette_PsychicMemory[] = INCBIN_U32("graphics/items/icon_palettes/psychic_memory.gbapal.lz");
+
+const u32 gItemIcon_BugMemory[] = INCBIN_U32("graphics/items/icons/bug_memory.4bpp.lz");
+const u32 gItemIconPalette_BugMemory[] = INCBIN_U32("graphics/items/icon_palettes/bug_memory.gbapal.lz");
+
+const u32 gItemIcon_RockMemory[] = INCBIN_U32("graphics/items/icons/rock_memory.4bpp.lz");
+const u32 gItemIconPalette_RockMemory[] = INCBIN_U32("graphics/items/icon_palettes/rock_memory.gbapal.lz");
+
+const u32 gItemIcon_GhostMemory[] = INCBIN_U32("graphics/items/icons/ghost_memory.4bpp.lz");
+const u32 gItemIconPalette_GhostMemory[] = INCBIN_U32("graphics/items/icon_palettes/ghost_memory.gbapal.lz");
+
+const u32 gItemIcon_DragonMemory[] = INCBIN_U32("graphics/items/icons/dragon_memory.4bpp.lz");
+const u32 gItemIconPalette_DragonMemory[] = INCBIN_U32("graphics/items/icon_palettes/dragon_memory.gbapal.lz");
+
+const u32 gItemIcon_DarkMemory[] = INCBIN_U32("graphics/items/icons/dark_memory.4bpp.lz");
+const u32 gItemIconPalette_DarkMemory[] = INCBIN_U32("graphics/items/icon_palettes/dark_memory.gbapal.lz");
+
+const u32 gItemIcon_SteelMemory[] = INCBIN_U32("graphics/items/icons/steel_memory.4bpp.lz");
+const u32 gItemIconPalette_SteelMemory[] = INCBIN_U32("graphics/items/icon_palettes/steel_memory.gbapal.lz");
+
+const u32 gItemIcon_FairyMemory[] = INCBIN_U32("graphics/items/icons/fairy_memory.4bpp.lz");
+const u32 gItemIconPalette_FairyMemory[] = INCBIN_U32("graphics/items/icon_palettes/fairy_memory.gbapal.lz");
+
+const u32 gItemIcon_RustedSword[] = INCBIN_U32("graphics/items/icons/rusted_sword.4bpp.lz");
+const u32 gItemIcon_RustedShield[] = INCBIN_U32("graphics/items/icons/rusted_shield.4bpp.lz");
+const u32 gItemIconPalette_RustedWeapons[] = INCBIN_U32("graphics/items/icon_palettes/rusted_weapons.gbapal.lz");
+
+// Colored Orbs
+
+const u32 gItemIcon_RedOrb[] = INCBIN_U32("graphics/items/icons/red_orb.4bpp.lz");
+const u32 gItemIconPalette_RedOrb[] = INCBIN_U32("graphics/items/icon_palettes/red_orb.gbapal.lz");
+
+const u32 gItemIcon_BlueOrb[] = INCBIN_U32("graphics/items/icons/blue_orb.4bpp.lz");
+const u32 gItemIconPalette_BlueOrb[] = INCBIN_U32("graphics/items/icon_palettes/blue_orb.gbapal.lz");
+
+// Mega Stones
+
+const u32 gItemIcon_Venusaurite[] = INCBIN_U32("graphics/items/icons/venusaurite.4bpp.lz");
+const u32 gItemIconPalette_Venusaurite[] = INCBIN_U32("graphics/items/icon_palettes/venusaurite.gbapal.lz");
+
+const u32 gItemIcon_CharizarditeX[] = INCBIN_U32("graphics/items/icons/charizardite_x.4bpp.lz");
+const u32 gItemIconPalette_CharizarditeX[] = INCBIN_U32("graphics/items/icon_palettes/charizardite_x.gbapal.lz");
+
+const u32 gItemIcon_CharizarditeY[] = INCBIN_U32("graphics/items/icons/charizardite_y.4bpp.lz");
+const u32 gItemIconPalette_CharizarditeY[] = INCBIN_U32("graphics/items/icon_palettes/charizardite_y.gbapal.lz");
+
+const u32 gItemIcon_Blastoisinite[] = INCBIN_U32("graphics/items/icons/blastoisinite.4bpp.lz");
+const u32 gItemIconPalette_Blastoisinite[] = INCBIN_U32("graphics/items/icon_palettes/blastoisinite.gbapal.lz");
+
+const u32 gItemIcon_Beedrillite[] = INCBIN_U32("graphics/items/icons/beedrillite.4bpp.lz");
+const u32 gItemIconPalette_Beedrillite[] = INCBIN_U32("graphics/items/icon_palettes/beedrillite.gbapal.lz");
+
+const u32 gItemIcon_Pidgeotite[] = INCBIN_U32("graphics/items/icons/pidgeotite.4bpp.lz");
+const u32 gItemIconPalette_Pidgeotite[] = INCBIN_U32("graphics/items/icon_palettes/pidgeotite.gbapal.lz");
+
+const u32 gItemIcon_Alakazite[] = INCBIN_U32("graphics/items/icons/alakazite.4bpp.lz");
+const u32 gItemIconPalette_Alakazite[] = INCBIN_U32("graphics/items/icon_palettes/alakazite.gbapal.lz");
+
+const u32 gItemIcon_Slowbronite[] = INCBIN_U32("graphics/items/icons/slowbronite.4bpp.lz");
+const u32 gItemIconPalette_Slowbronite[] = INCBIN_U32("graphics/items/icon_palettes/slowbronite.gbapal.lz");
+
+const u32 gItemIcon_Gengarite[] = INCBIN_U32("graphics/items/icons/gengarite.4bpp.lz");
+const u32 gItemIconPalette_Gengarite[] = INCBIN_U32("graphics/items/icon_palettes/gengarite.gbapal.lz");
+
+const u32 gItemIcon_Kangaskhanite[] = INCBIN_U32("graphics/items/icons/kangaskhanite.4bpp.lz");
+const u32 gItemIconPalette_Kangaskhanite[] = INCBIN_U32("graphics/items/icon_palettes/kangaskhanite.gbapal.lz");
+
+const u32 gItemIcon_Pinsirite[] = INCBIN_U32("graphics/items/icons/pinsirite.4bpp.lz");
+const u32 gItemIconPalette_Pinsirite[] = INCBIN_U32("graphics/items/icon_palettes/pinsirite.gbapal.lz");
+
+const u32 gItemIcon_Gyaradosite[] = INCBIN_U32("graphics/items/icons/gyaradosite.4bpp.lz");
+const u32 gItemIconPalette_Gyaradosite[] = INCBIN_U32("graphics/items/icon_palettes/gyaradosite.gbapal.lz");
+
+const u32 gItemIcon_Aerodactylite[] = INCBIN_U32("graphics/items/icons/aerodactylite.4bpp.lz");
+const u32 gItemIconPalette_Aerodactylite[] = INCBIN_U32("graphics/items/icon_palettes/aerodactylite.gbapal.lz");
+
+const u32 gItemIcon_MewtwoniteX[] = INCBIN_U32("graphics/items/icons/mewtwonite_x.4bpp.lz");
+const u32 gItemIconPalette_MewtwoniteX[] = INCBIN_U32("graphics/items/icon_palettes/mewtwonite_x.gbapal.lz");
+
+const u32 gItemIcon_MewtwoniteY[] = INCBIN_U32("graphics/items/icons/mewtwonite_y.4bpp.lz");
+const u32 gItemIconPalette_MewtwoniteY[] = INCBIN_U32("graphics/items/icon_palettes/mewtwonite_y.gbapal.lz");
+
+const u32 gItemIcon_Ampharosite[] = INCBIN_U32("graphics/items/icons/ampharosite.4bpp.lz");
+const u32 gItemIconPalette_Ampharosite[] = INCBIN_U32("graphics/items/icon_palettes/ampharosite.gbapal.lz");
+
+const u32 gItemIcon_Steelixite[] = INCBIN_U32("graphics/items/icons/steelixite.4bpp.lz");
+const u32 gItemIconPalette_Steelixite[] = INCBIN_U32("graphics/items/icon_palettes/steelixite.gbapal.lz");
+
+const u32 gItemIcon_Scizorite[] = INCBIN_U32("graphics/items/icons/scizorite.4bpp.lz");
+const u32 gItemIconPalette_Scizorite[] = INCBIN_U32("graphics/items/icon_palettes/scizorite.gbapal.lz");
+
+const u32 gItemIcon_Heracronite[] = INCBIN_U32("graphics/items/icons/heracronite.4bpp.lz");
+const u32 gItemIconPalette_Heracronite[] = INCBIN_U32("graphics/items/icon_palettes/heracronite.gbapal.lz");
+
+const u32 gItemIcon_Houndoominite[] = INCBIN_U32("graphics/items/icons/houndoominite.4bpp.lz");
+const u32 gItemIconPalette_Houndoominite[] = INCBIN_U32("graphics/items/icon_palettes/houndoominite.gbapal.lz");
+
+const u32 gItemIcon_Tyranitarite[] = INCBIN_U32("graphics/items/icons/tyranitarite.4bpp.lz");
+const u32 gItemIconPalette_Tyranitarite[] = INCBIN_U32("graphics/items/icon_palettes/tyranitarite.gbapal.lz");
+
+const u32 gItemIcon_Sceptilite[] = INCBIN_U32("graphics/items/icons/sceptilite.4bpp.lz");
+const u32 gItemIconPalette_Sceptilite[] = INCBIN_U32("graphics/items/icon_palettes/sceptilite.gbapal.lz");
+
+const u32 gItemIcon_Blazikenite[] = INCBIN_U32("graphics/items/icons/blazikenite.4bpp.lz");
+const u32 gItemIconPalette_Blazikenite[] = INCBIN_U32("graphics/items/icon_palettes/blazikenite.gbapal.lz");
+
+const u32 gItemIcon_Swampertite[] = INCBIN_U32("graphics/items/icons/swampertite.4bpp.lz");
+const u32 gItemIconPalette_Swampertite[] = INCBIN_U32("graphics/items/icon_palettes/swampertite.gbapal.lz");
+
+const u32 gItemIcon_Gardevoirite[] = INCBIN_U32("graphics/items/icons/gardevoirite.4bpp.lz");
+const u32 gItemIconPalette_Gardevoirite[] = INCBIN_U32("graphics/items/icon_palettes/gardevoirite.gbapal.lz");
+
+const u32 gItemIcon_Sablenite[] = INCBIN_U32("graphics/items/icons/sablenite.4bpp.lz");
+const u32 gItemIconPalette_Sablenite[] = INCBIN_U32("graphics/items/icon_palettes/sablenite.gbapal.lz");
+
+const u32 gItemIcon_Mawilite[] = INCBIN_U32("graphics/items/icons/mawilite.4bpp.lz");
+const u32 gItemIconPalette_Mawilite[] = INCBIN_U32("graphics/items/icon_palettes/mawilite.gbapal.lz");
+
+const u32 gItemIcon_Aggronite[] = INCBIN_U32("graphics/items/icons/aggronite.4bpp.lz");
+const u32 gItemIconPalette_Aggronite[] = INCBIN_U32("graphics/items/icon_palettes/aggronite.gbapal.lz");
+
+const u32 gItemIcon_Medichamite[] = INCBIN_U32("graphics/items/icons/medichamite.4bpp.lz");
+const u32 gItemIconPalette_Medichamite[] = INCBIN_U32("graphics/items/icon_palettes/medichamite.gbapal.lz");
+
+const u32 gItemIcon_Manectite[] = INCBIN_U32("graphics/items/icons/manectite.4bpp.lz");
+const u32 gItemIconPalette_Manectite[] = INCBIN_U32("graphics/items/icon_palettes/manectite.gbapal.lz");
+
+const u32 gItemIcon_Sharpedonite[] = INCBIN_U32("graphics/items/icons/sharpedonite.4bpp.lz");
+const u32 gItemIconPalette_Sharpedonite[] = INCBIN_U32("graphics/items/icon_palettes/sharpedonite.gbapal.lz");
+
+const u32 gItemIcon_Cameruptite[] = INCBIN_U32("graphics/items/icons/cameruptite.4bpp.lz");
+const u32 gItemIconPalette_Cameruptite[] = INCBIN_U32("graphics/items/icon_palettes/cameruptite.gbapal.lz");
+
+const u32 gItemIcon_Altarianite[] = INCBIN_U32("graphics/items/icons/altarianite.4bpp.lz");
+const u32 gItemIconPalette_Altarianite[] = INCBIN_U32("graphics/items/icon_palettes/altarianite.gbapal.lz");
+
+const u32 gItemIcon_Banettite[] = INCBIN_U32("graphics/items/icons/banettite.4bpp.lz");
+const u32 gItemIconPalette_Banettite[] = INCBIN_U32("graphics/items/icon_palettes/banettite.gbapal.lz");
+
+const u32 gItemIcon_Absolite[] = INCBIN_U32("graphics/items/icons/absolite.4bpp.lz");
+const u32 gItemIconPalette_Absolite[] = INCBIN_U32("graphics/items/icon_palettes/absolite.gbapal.lz");
+
+const u32 gItemIcon_Glalitite[] = INCBIN_U32("graphics/items/icons/glalitite.4bpp.lz");
+const u32 gItemIconPalette_Glalitite[] = INCBIN_U32("graphics/items/icon_palettes/glalitite.gbapal.lz");
+
+const u32 gItemIcon_Salamencite[] = INCBIN_U32("graphics/items/icons/salamencite.4bpp.lz");
+const u32 gItemIconPalette_Salamencite[] = INCBIN_U32("graphics/items/icon_palettes/salamencite.gbapal.lz");
+
+const u32 gItemIcon_Metagrossite[] = INCBIN_U32("graphics/items/icons/metagrossite.4bpp.lz");
+const u32 gItemIconPalette_Metagrossite[] = INCBIN_U32("graphics/items/icon_palettes/metagrossite.gbapal.lz");
+
+const u32 gItemIcon_Latiasite[] = INCBIN_U32("graphics/items/icons/latiasite.4bpp.lz");
+const u32 gItemIconPalette_Latiasite[] = INCBIN_U32("graphics/items/icon_palettes/latiasite.gbapal.lz");
+
+const u32 gItemIcon_Latiosite[] = INCBIN_U32("graphics/items/icons/latiosite.4bpp.lz");
+const u32 gItemIconPalette_Latiosite[] = INCBIN_U32("graphics/items/icon_palettes/latiosite.gbapal.lz");
+
+const u32 gItemIcon_Lopunnite[] = INCBIN_U32("graphics/items/icons/lopunnite.4bpp.lz");
+const u32 gItemIconPalette_Lopunnite[] = INCBIN_U32("graphics/items/icon_palettes/lopunnite.gbapal.lz");
+
+const u32 gItemIcon_Garchompite[] = INCBIN_U32("graphics/items/icons/garchompite.4bpp.lz");
+const u32 gItemIconPalette_Garchompite[] = INCBIN_U32("graphics/items/icon_palettes/garchompite.gbapal.lz");
+
+const u32 gItemIcon_Lucarionite[] = INCBIN_U32("graphics/items/icons/lucarionite.4bpp.lz");
+const u32 gItemIconPalette_Lucarionite[] = INCBIN_U32("graphics/items/icon_palettes/lucarionite.gbapal.lz");
+
+const u32 gItemIcon_Abomasite[] = INCBIN_U32("graphics/items/icons/abomasite.4bpp.lz");
+const u32 gItemIconPalette_Abomasite[] = INCBIN_U32("graphics/items/icon_palettes/abomasite.gbapal.lz");
+
+const u32 gItemIcon_Galladite[] = INCBIN_U32("graphics/items/icons/galladite.4bpp.lz");
+const u32 gItemIconPalette_Galladite[] = INCBIN_U32("graphics/items/icon_palettes/galladite.gbapal.lz");
+
+const u32 gItemIcon_Audinite[] = INCBIN_U32("graphics/items/icons/audinite.4bpp.lz");
+const u32 gItemIconPalette_Audinite[] = INCBIN_U32("graphics/items/icon_palettes/audinite.gbapal.lz");
+
+const u32 gItemIcon_Diancite[] = INCBIN_U32("graphics/items/icons/diancite.4bpp.lz");
+const u32 gItemIconPalette_Diancite[] = INCBIN_U32("graphics/items/icon_palettes/diancite.gbapal.lz");
+
+// Gems
+
+const u32 gItemIcon_NormalGem[] = INCBIN_U32("graphics/items/icons/normal_gem.4bpp.lz");
+const u32 gItemIconPalette_NormalGem[] = INCBIN_U32("graphics/items/icon_palettes/normal_gem.gbapal.lz");
+
+const u32 gItemIcon_FireGem[] = INCBIN_U32("graphics/items/icons/fire_gem.4bpp.lz");
+const u32 gItemIconPalette_FireGem[] = INCBIN_U32("graphics/items/icon_palettes/fire_gem.gbapal.lz");
+
+const u32 gItemIcon_WaterGem[] = INCBIN_U32("graphics/items/icons/water_gem.4bpp.lz");
+const u32 gItemIconPalette_WaterGem[] = INCBIN_U32("graphics/items/icon_palettes/water_gem.gbapal.lz");
+
+const u32 gItemIcon_ElectricGem[] = INCBIN_U32("graphics/items/icons/electric_gem.4bpp.lz");
+const u32 gItemIconPalette_ElectricGem[] = INCBIN_U32("graphics/items/icon_palettes/electric_gem.gbapal.lz");
+
+const u32 gItemIcon_GrassGem[] = INCBIN_U32("graphics/items/icons/grass_gem.4bpp.lz");
+const u32 gItemIconPalette_GrassGem[] = INCBIN_U32("graphics/items/icon_palettes/grass_gem.gbapal.lz");
+
+const u32 gItemIcon_IceGem[] = INCBIN_U32("graphics/items/icons/ice_gem.4bpp.lz");
+const u32 gItemIconPalette_IceGem[] = INCBIN_U32("graphics/items/icon_palettes/ice_gem.gbapal.lz");
+
+const u32 gItemIcon_FightingGem[] = INCBIN_U32("graphics/items/icons/fighting_gem.4bpp.lz");
+const u32 gItemIconPalette_FightingGem[] = INCBIN_U32("graphics/items/icon_palettes/fighting_gem.gbapal.lz");
+
+const u32 gItemIcon_PoisonGem[] = INCBIN_U32("graphics/items/icons/poison_gem.4bpp.lz");
+const u32 gItemIconPalette_PoisonGem[] = INCBIN_U32("graphics/items/icon_palettes/poison_gem.gbapal.lz");
+
+const u32 gItemIcon_GroundGem[] = INCBIN_U32("graphics/items/icons/ground_gem.4bpp.lz");
+const u32 gItemIconPalette_GroundGem[] = INCBIN_U32("graphics/items/icon_palettes/ground_gem.gbapal.lz");
+
+const u32 gItemIcon_FlyingGem[] = INCBIN_U32("graphics/items/icons/flying_gem.4bpp.lz");
+const u32 gItemIconPalette_FlyingGem[] = INCBIN_U32("graphics/items/icon_palettes/flying_gem.gbapal.lz");
+
+const u32 gItemIcon_PsychicGem[] = INCBIN_U32("graphics/items/icons/psychic_gem.4bpp.lz");
+const u32 gItemIconPalette_PsychicGem[] = INCBIN_U32("graphics/items/icon_palettes/psychic_gem.gbapal.lz");
+
+const u32 gItemIcon_BugGem[] = INCBIN_U32("graphics/items/icons/bug_gem.4bpp.lz");
+const u32 gItemIconPalette_BugGem[] = INCBIN_U32("graphics/items/icon_palettes/bug_gem.gbapal.lz");
+
+const u32 gItemIcon_RockGem[] = INCBIN_U32("graphics/items/icons/rock_gem.4bpp.lz");
+const u32 gItemIconPalette_RockGem[] = INCBIN_U32("graphics/items/icon_palettes/rock_gem.gbapal.lz");
+
+const u32 gItemIcon_GhostGem[] = INCBIN_U32("graphics/items/icons/ghost_gem.4bpp.lz");
+const u32 gItemIconPalette_GhostGem[] = INCBIN_U32("graphics/items/icon_palettes/ghost_gem.gbapal.lz");
+
+const u32 gItemIcon_DragonGem[] = INCBIN_U32("graphics/items/icons/dragon_gem.4bpp.lz");
+const u32 gItemIconPalette_DragonGem[] = INCBIN_U32("graphics/items/icon_palettes/dragon_gem.gbapal.lz");
+
+const u32 gItemIcon_DarkGem[] = INCBIN_U32("graphics/items/icons/dark_gem.4bpp.lz");
+const u32 gItemIconPalette_DarkGem[] = INCBIN_U32("graphics/items/icon_palettes/dark_gem.gbapal.lz");
+
+const u32 gItemIcon_SteelGem[] = INCBIN_U32("graphics/items/icons/steel_gem.4bpp.lz");
+const u32 gItemIconPalette_SteelGem[] = INCBIN_U32("graphics/items/icon_palettes/steel_gem.gbapal.lz");
+
+const u32 gItemIcon_FairyGem[] = INCBIN_U32("graphics/items/icons/fairy_gem.4bpp.lz");
+const u32 gItemIconPalette_FairyGem[] = INCBIN_U32("graphics/items/icon_palettes/fairy_gem.gbapal.lz");
+
+// Z-Crystals
+
+const u32 gItemIcon_NormaliumZ[] = INCBIN_U32("graphics/items/icons/normalium_z.4bpp.lz");
+const u32 gItemIconPalette_NormaliumZ[] = INCBIN_U32("graphics/items/icon_palettes/normalium_z.gbapal.lz");
+
+const u32 gItemIcon_FiriumZ[] = INCBIN_U32("graphics/items/icons/firium_z.4bpp.lz");
+const u32 gItemIconPalette_FiriumZ[] = INCBIN_U32("graphics/items/icon_palettes/firium_z.gbapal.lz");
+
+const u32 gItemIcon_WateriumZ[] = INCBIN_U32("graphics/items/icons/waterium_z.4bpp.lz");
+const u32 gItemIconPalette_WateriumZ[] = INCBIN_U32("graphics/items/icon_palettes/waterium_z.gbapal.lz");
+
+const u32 gItemIcon_ElectriumZ[] = INCBIN_U32("graphics/items/icons/electrium_z.4bpp.lz");
+const u32 gItemIconPalette_ElectriumZ[] = INCBIN_U32("graphics/items/icon_palettes/electrium_z.gbapal.lz");
+
+const u32 gItemIcon_GrassiumZ[] = INCBIN_U32("graphics/items/icons/grassium_z.4bpp.lz");
+const u32 gItemIconPalette_GrassiumZ[] = INCBIN_U32("graphics/items/icon_palettes/grassium_z.gbapal.lz");
+
+const u32 gItemIcon_IciumZ[] = INCBIN_U32("graphics/items/icons/icium_z.4bpp.lz");
+const u32 gItemIconPalette_IciumZ[] = INCBIN_U32("graphics/items/icon_palettes/icium_z.gbapal.lz");
+
+const u32 gItemIcon_FightiniumZ[] = INCBIN_U32("graphics/items/icons/fightinium_z.4bpp.lz");
+const u32 gItemIconPalette_FightiniumZ[] = INCBIN_U32("graphics/items/icon_palettes/fightinium_z.gbapal.lz");
+
+const u32 gItemIcon_PoisoniumZ[] = INCBIN_U32("graphics/items/icons/poisonium_z.4bpp.lz");
+const u32 gItemIconPalette_PoisoniumZ[] = INCBIN_U32("graphics/items/icon_palettes/poisonium_z.gbapal.lz");
+
+const u32 gItemIcon_GroundiumZ[] = INCBIN_U32("graphics/items/icons/groundium_z.4bpp.lz");
+const u32 gItemIconPalette_GroundiumZ[] = INCBIN_U32("graphics/items/icon_palettes/groundium_z.gbapal.lz");
+
+const u32 gItemIcon_FlyiniumZ[] = INCBIN_U32("graphics/items/icons/flyinium_z.4bpp.lz");
+const u32 gItemIconPalette_FlyiniumZ[] = INCBIN_U32("graphics/items/icon_palettes/flyinium_z.gbapal.lz");
+
+const u32 gItemIcon_PsychiumZ[] = INCBIN_U32("graphics/items/icons/psychium_z.4bpp.lz");
+const u32 gItemIconPalette_PsychiumZ[] = INCBIN_U32("graphics/items/icon_palettes/psychium_z.gbapal.lz");
+
+const u32 gItemIcon_BuginiumZ[] = INCBIN_U32("graphics/items/icons/buginium_z.4bpp.lz");
+const u32 gItemIconPalette_BuginiumZ[] = INCBIN_U32("graphics/items/icon_palettes/buginium_z.gbapal.lz");
+
+const u32 gItemIcon_RockiumZ[] = INCBIN_U32("graphics/items/icons/rockium_z.4bpp.lz");
+const u32 gItemIconPalette_RockiumZ[] = INCBIN_U32("graphics/items/icon_palettes/rockium_z.gbapal.lz");
+
+const u32 gItemIcon_GhostiumZ[] = INCBIN_U32("graphics/items/icons/ghostium_z.4bpp.lz");
+const u32 gItemIconPalette_GhostiumZ[] = INCBIN_U32("graphics/items/icon_palettes/ghostium_z.gbapal.lz");
+
+const u32 gItemIcon_DragoniumZ[] = INCBIN_U32("graphics/items/icons/dragonium_z.4bpp.lz");
+const u32 gItemIconPalette_DragoniumZ[] = INCBIN_U32("graphics/items/icon_palettes/dragonium_z.gbapal.lz");
+
+const u32 gItemIcon_DarkiniumZ[] = INCBIN_U32("graphics/items/icons/darkinium_z.4bpp.lz");
+const u32 gItemIconPalette_DarkiniumZ[] = INCBIN_U32("graphics/items/icon_palettes/darkinium_z.gbapal.lz");
+
+const u32 gItemIcon_SteeliumZ[] = INCBIN_U32("graphics/items/icons/steelium_z.4bpp.lz");
+const u32 gItemIconPalette_SteeliumZ[] = INCBIN_U32("graphics/items/icon_palettes/steelium_z.gbapal.lz");
+
+const u32 gItemIcon_FairiumZ[] = INCBIN_U32("graphics/items/icons/fairium_z.4bpp.lz");
+const u32 gItemIconPalette_FairiumZ[] = INCBIN_U32("graphics/items/icon_palettes/fairium_z.gbapal.lz");
+
+const u32 gItemIcon_PikaniumZ[] = INCBIN_U32("graphics/items/icons/pikanium_z.4bpp.lz");
+const u32 gItemIconPalette_PikaniumZ[] = INCBIN_U32("graphics/items/icon_palettes/pikanium_z.gbapal.lz");
+
+const u32 gItemIcon_EeviumZ[] = INCBIN_U32("graphics/items/icons/eevium_z.4bpp.lz");
+const u32 gItemIconPalette_EeviumZ[] = INCBIN_U32("graphics/items/icon_palettes/eevium_z.gbapal.lz");
+
+const u32 gItemIcon_SnorliumZ[] = INCBIN_U32("graphics/items/icons/snorlium_z.4bpp.lz");
+const u32 gItemIconPalette_SnorliumZ[] = INCBIN_U32("graphics/items/icon_palettes/snorlium_z.gbapal.lz");
+
+const u32 gItemIcon_MewniumZ[] = INCBIN_U32("graphics/items/icons/mewnium_z.4bpp.lz");
+const u32 gItemIconPalette_MewniumZ[] = INCBIN_U32("graphics/items/icon_palettes/mewnium_z.gbapal.lz");
+
+const u32 gItemIcon_DecidiumZ[] = INCBIN_U32("graphics/items/icons/decidium_z.4bpp.lz");
+const u32 gItemIconPalette_DecidiumZ[] = INCBIN_U32("graphics/items/icon_palettes/decidium_z.gbapal.lz");
+
+const u32 gItemIcon_InciniumZ[] = INCBIN_U32("graphics/items/icons/incinium_z.4bpp.lz");
+const u32 gItemIconPalette_InciniumZ[] = INCBIN_U32("graphics/items/icon_palettes/incinium_z.gbapal.lz");
+
+const u32 gItemIcon_PrimariumZ[] = INCBIN_U32("graphics/items/icons/primarium_z.4bpp.lz");
+const u32 gItemIconPalette_PrimariumZ[] = INCBIN_U32("graphics/items/icon_palettes/primarium_z.gbapal.lz");
+
+const u32 gItemIcon_LycaniumZ[] = INCBIN_U32("graphics/items/icons/lycanium_z.4bpp.lz");
+const u32 gItemIconPalette_LycaniumZ[] = INCBIN_U32("graphics/items/icon_palettes/lycanium_z.gbapal.lz");
+
+const u32 gItemIcon_MimikiumZ[] = INCBIN_U32("graphics/items/icons/mimikium_z.4bpp.lz");
+const u32 gItemIconPalette_MimikiumZ[] = INCBIN_U32("graphics/items/icon_palettes/mimikium_z.gbapal.lz");
+
+const u32 gItemIcon_KommoniumZ[] = INCBIN_U32("graphics/items/icons/kommonium_z.4bpp.lz");
+const u32 gItemIconPalette_KommoniumZ[] = INCBIN_U32("graphics/items/icon_palettes/kommonium_z.gbapal.lz");
+
+const u32 gItemIcon_TapuniumZ[] = INCBIN_U32("graphics/items/icons/tapunium_z.4bpp.lz");
+const u32 gItemIconPalette_TapuniumZ[] = INCBIN_U32("graphics/items/icon_palettes/tapunium_z.gbapal.lz");
+
+const u32 gItemIcon_SolganiumZ[] = INCBIN_U32("graphics/items/icons/solganium_z.4bpp.lz");
+const u32 gItemIconPalette_SolganiumZ[] = INCBIN_U32("graphics/items/icon_palettes/solganium_z.gbapal.lz");
+
+const u32 gItemIcon_LunaliumZ[] = INCBIN_U32("graphics/items/icons/lunalium_z.4bpp.lz");
+const u32 gItemIconPalette_LunaliumZ[] = INCBIN_U32("graphics/items/icon_palettes/lunalium_z.gbapal.lz");
+
+const u32 gItemIcon_MarshadiumZ[] = INCBIN_U32("graphics/items/icons/marshadium_z.4bpp.lz");
+const u32 gItemIconPalette_MarshadiumZ[] = INCBIN_U32("graphics/items/icon_palettes/marshadium_z.gbapal.lz");
+
+const u32 gItemIcon_AloraichiumZ[] = INCBIN_U32("graphics/items/icons/aloraichium_z.4bpp.lz");
+const u32 gItemIconPalette_AloraichiumZ[] = INCBIN_U32("graphics/items/icon_palettes/aloraichium_z.gbapal.lz");
+
+const u32 gItemIcon_PikashuniumZ[] = INCBIN_U32("graphics/items/icons/pikashunium_z.4bpp.lz");
+const u32 gItemIconPalette_PikashuniumZ[] = INCBIN_U32("graphics/items/icon_palettes/pikashunium_z.gbapal.lz");
+
+const u32 gItemIcon_UltranecroziumZ[] = INCBIN_U32("graphics/items/icons/ultranecrozium_z.4bpp.lz");
+const u32 gItemIconPalette_UltranecroziumZ[] = INCBIN_U32("graphics/items/icon_palettes/ultranecrozium_z.gbapal.lz");
+
+// Species-specific Held Items
+
+const u32 gItemIcon_LightBall[] = INCBIN_U32("graphics/items/icons/light_ball.4bpp.lz");
+const u32 gItemIconPalette_LightBall[] = INCBIN_U32("graphics/items/icon_palettes/light_ball.gbapal.lz");
+
+const u32 gItemIcon_Leek[] = INCBIN_U32("graphics/items/icons/leek.4bpp.lz");
+const u32 gItemIconPalette_Leek[] = INCBIN_U32("graphics/items/icon_palettes/leek.gbapal.lz");
+
+const u32 gItemIcon_ThickClub[] = INCBIN_U32("graphics/items/icons/thick_club.4bpp.lz");
+const u32 gItemIconPalette_ThickClub[] = INCBIN_U32("graphics/items/icon_palettes/thick_club.gbapal.lz");
+
+const u32 gItemIcon_LuckyPunch[] = INCBIN_U32("graphics/items/icons/lucky_punch.4bpp.lz");
+const u32 gItemIconPalette_LuckyPunch[] = INCBIN_U32("graphics/items/icon_palettes/lucky_punch.gbapal.lz");
+
+const u32 gItemIcon_MetalPowder[] = INCBIN_U32("graphics/items/icons/metal_powder.4bpp.lz");
+const u32 gItemIconPalette_MetalPowder[] = INCBIN_U32("graphics/items/icon_palettes/metal_powder.gbapal.lz");
+
+const u32 gItemIcon_QuickPowder[] = INCBIN_U32("graphics/items/icons/quick_powder.4bpp.lz");
+const u32 gItemIconPalette_QuickPowder[] = INCBIN_U32("graphics/items/icon_palettes/quick_powder.gbapal.lz");
+
+const u32 gItemIcon_DeepSeaScale[] = INCBIN_U32("graphics/items/icons/deep_sea_scale.4bpp.lz");
+const u32 gItemIconPalette_DeepSeaScale[] = INCBIN_U32("graphics/items/icon_palettes/deep_sea_scale.gbapal.lz");
+
+const u32 gItemIcon_DeepSeaTooth[] = INCBIN_U32("graphics/items/icons/deep_sea_tooth.4bpp.lz");
+const u32 gItemIconPalette_DeepSeaTooth[] = INCBIN_U32("graphics/items/icon_palettes/deep_sea_tooth.gbapal.lz");
+
+const u32 gItemIcon_SoulDew[] = INCBIN_U32("graphics/items/icons/soul_dew.4bpp.lz");
+const u32 gItemIconPalette_SoulDew[] = INCBIN_U32("graphics/items/icon_palettes/soul_dew.gbapal.lz");
+
+const u32 gItemIcon_AdamantOrb[] = INCBIN_U32("graphics/items/icons/adamant_orb.4bpp.lz");
+const u32 gItemIconPalette_AdamantOrb[] = INCBIN_U32("graphics/items/icon_palettes/adamant_orb.gbapal.lz");
+
+const u32 gItemIcon_LustrousOrb[] = INCBIN_U32("graphics/items/icons/lustrous_orb.4bpp.lz");
+const u32 gItemIconPalette_LustrousOrb[] = INCBIN_U32("graphics/items/icon_palettes/lustrous_orb.gbapal.lz");
+
+const u32 gItemIcon_GriseousOrb[] = INCBIN_U32("graphics/items/icons/griseous_orb.4bpp.lz");
+const u32 gItemIconPalette_GriseousOrb[] = INCBIN_U32("graphics/items/icon_palettes/griseous_orb.gbapal.lz");
+
+// Incenses
+
+const u32 gItemIcon_SeaIncense[] = INCBIN_U32("graphics/items/icons/sea_incense.4bpp.lz");
+const u32 gItemIconPalette_SeaIncense[] = INCBIN_U32("graphics/items/icon_palettes/sea_incense.gbapal.lz");
+
+const u32 gItemIcon_LaxIncense[] = INCBIN_U32("graphics/items/icons/lax_incense.4bpp.lz");
+const u32 gItemIconPalette_LaxIncense[] = INCBIN_U32("graphics/items/icon_palettes/lax_incense.gbapal.lz");
+
+const u32 gItemIcon_OddIncense[] = INCBIN_U32("graphics/items/icons/odd_incense.4bpp.lz");
+const u32 gItemIconPalette_OddIncense[] = INCBIN_U32("graphics/items/icon_palettes/odd_incense.gbapal.lz");
+
+const u32 gItemIcon_RockIncense[] = INCBIN_U32("graphics/items/icons/rock_incense.4bpp.lz");
+const u32 gItemIconPalette_RockIncense[] = INCBIN_U32("graphics/items/icon_palettes/rock_incense.gbapal.lz");
+
+const u32 gItemIcon_FullIncense[] = INCBIN_U32("graphics/items/icons/full_incense.4bpp.lz");
+const u32 gItemIconPalette_FullIncense[] = INCBIN_U32("graphics/items/icon_palettes/full_incense.gbapal.lz");
+
+const u32 gItemIcon_WaveIncense[] = INCBIN_U32("graphics/items/icons/wave_incense.4bpp.lz");
+const u32 gItemIconPalette_WaveIncense[] = INCBIN_U32("graphics/items/icon_palettes/wave_incense.gbapal.lz");
+
+const u32 gItemIcon_RoseIncense[] = INCBIN_U32("graphics/items/icons/rose_incense.4bpp.lz");
+const u32 gItemIconPalette_RoseIncense[] = INCBIN_U32("graphics/items/icon_palettes/rose_incense.gbapal.lz");
+
+const u32 gItemIcon_LuckIncense[] = INCBIN_U32("graphics/items/icons/luck_incense.4bpp.lz");
+const u32 gItemIconPalette_LuckIncense[] = INCBIN_U32("graphics/items/icon_palettes/luck_incense.gbapal.lz");
+
+const u32 gItemIcon_PureIncense[] = INCBIN_U32("graphics/items/icons/pure_incense.4bpp.lz");
+const u32 gItemIconPalette_PureIncense[] = INCBIN_U32("graphics/items/icon_palettes/pure_incense.gbapal.lz");
+
+// Contest Scarves
+
+const u32 gItemIcon_Scarf[] = INCBIN_U32("graphics/items/icons/scarf.4bpp.lz");
+const u32 gItemIconPalette_RedScarf[] = INCBIN_U32("graphics/items/icon_palettes/red_scarf.gbapal.lz");
+
+const u32 gItemIconPalette_BlueScarf[] = INCBIN_U32("graphics/items/icon_palettes/blue_scarf.gbapal.lz");
+
+const u32 gItemIconPalette_PinkScarf[] = INCBIN_U32("graphics/items/icon_palettes/pink_scarf.gbapal.lz");
+
+const u32 gItemIconPalette_GreenScarf[] = INCBIN_U32("graphics/items/icon_palettes/green_scarf.gbapal.lz");
+
+const u32 gItemIconPalette_YellowScarf[] = INCBIN_U32("graphics/items/icon_palettes/yellow_scarf.gbapal.lz");
+
+// EV Gain Modifiers
+
+const u32 gItemIcon_MachoBrace[] = INCBIN_U32("graphics/items/icons/macho_brace.4bpp.lz");
+const u32 gItemIconPalette_MachoBrace[] = INCBIN_U32("graphics/items/icon_palettes/macho_brace.gbapal.lz");
+
+const u32 gItemIcon_PowerWeight[] = INCBIN_U32("graphics/items/icons/power_weight.4bpp.lz");
+const u32 gItemIconPalette_PowerWeight[] = INCBIN_U32("graphics/items/icon_palettes/power_weight.gbapal.lz");
+
+const u32 gItemIcon_PowerBracer[] = INCBIN_U32("graphics/items/icons/power_bracer.4bpp.lz");
+const u32 gItemIconPalette_PowerBracer[] = INCBIN_U32("graphics/items/icon_palettes/power_bracer.gbapal.lz");
+
+const u32 gItemIcon_PowerBelt[] = INCBIN_U32("graphics/items/icons/power_belt.4bpp.lz");
+const u32 gItemIconPalette_PowerBelt[] = INCBIN_U32("graphics/items/icon_palettes/power_belt.gbapal.lz");
+
+const u32 gItemIcon_PowerLens[] = INCBIN_U32("graphics/items/icons/power_lens.4bpp.lz");
+const u32 gItemIconPalette_PowerLens[] = INCBIN_U32("graphics/items/icon_palettes/power_lens.gbapal.lz");
+
+const u32 gItemIcon_PowerBand[] = INCBIN_U32("graphics/items/icons/power_band.4bpp.lz");
+const u32 gItemIconPalette_PowerBand[] = INCBIN_U32("graphics/items/icon_palettes/power_band.gbapal.lz");
+
+const u32 gItemIcon_PowerAnklet[] = INCBIN_U32("graphics/items/icons/power_anklet.4bpp.lz");
+const u32 gItemIconPalette_PowerAnklet[] = INCBIN_U32("graphics/items/icon_palettes/power_anklet.gbapal.lz");
+
+// Type-boosting Held Items
+
+const u32 gItemIcon_SilkScarf[] = INCBIN_U32("graphics/items/icons/silk_scarf.4bpp.lz");
+const u32 gItemIconPalette_SilkScarf[] = INCBIN_U32("graphics/items/icon_palettes/silk_scarf.gbapal.lz");
+
+const u32 gItemIcon_Charcoal[] = INCBIN_U32("graphics/items/icons/charcoal.4bpp.lz");
+const u32 gItemIconPalette_Charcoal[] = INCBIN_U32("graphics/items/icon_palettes/charcoal.gbapal.lz");
+
+const u32 gItemIcon_MysticWater[] = INCBIN_U32("graphics/items/icons/mystic_water.4bpp.lz");
+const u32 gItemIconPalette_MysticWater[] = INCBIN_U32("graphics/items/icon_palettes/mystic_water.gbapal.lz");
+
+const u32 gItemIcon_Magnet[] = INCBIN_U32("graphics/items/icons/magnet.4bpp.lz");
+const u32 gItemIconPalette_Magnet[] = INCBIN_U32("graphics/items/icon_palettes/magnet.gbapal.lz");
+
+const u32 gItemIcon_MiracleSeed[] = INCBIN_U32("graphics/items/icons/miracle_seed.4bpp.lz");
+const u32 gItemIconPalette_MiracleSeed[] = INCBIN_U32("graphics/items/icon_palettes/miracle_seed.gbapal.lz");
+
+const u32 gItemIcon_NeverMeltIce[] = INCBIN_U32("graphics/items/icons/never_melt_ice.4bpp.lz");
+const u32 gItemIconPalette_NeverMeltIce[] = INCBIN_U32("graphics/items/icon_palettes/never_melt_ice.gbapal.lz");
+
+const u32 gItemIcon_BlackBelt[] = INCBIN_U32("graphics/items/icons/black_belt.4bpp.lz");
+const u32 gItemIconPalette_BlackTypeEnhancingItem[] = INCBIN_U32("graphics/items/icon_palettes/black_type_enhancing_item.gbapal.lz");
+
+const u32 gItemIcon_PoisonBarb[] = INCBIN_U32("graphics/items/icons/poison_barb.4bpp.lz");
+const u32 gItemIconPalette_PoisonBarb[] = INCBIN_U32("graphics/items/icon_palettes/poison_barb.gbapal.lz");
+
+const u32 gItemIcon_SoftSand[] = INCBIN_U32("graphics/items/icons/soft_sand.4bpp.lz");
+const u32 gItemIconPalette_SoftSand[] = INCBIN_U32("graphics/items/icon_palettes/soft_sand.gbapal.lz");
+
+const u32 gItemIcon_SharpBeak[] = INCBIN_U32("graphics/items/icons/sharp_beak.4bpp.lz");
+const u32 gItemIconPalette_SharpBeak[] = INCBIN_U32("graphics/items/icon_palettes/sharp_beak.gbapal.lz");
+
+const u32 gItemIcon_TwistedSpoon[] = INCBIN_U32("graphics/items/icons/twisted_spoon.4bpp.lz");
+const u32 gItemIconPalette_TwistedSpoon[] = INCBIN_U32("graphics/items/icon_palettes/twisted_spoon.gbapal.lz");
+
+const u32 gItemIcon_SilverPowder[] = INCBIN_U32("graphics/items/icons/silver_powder.4bpp.lz");
+const u32 gItemIconPalette_SilverPowder[] = INCBIN_U32("graphics/items/icon_palettes/silver_powder.gbapal.lz");
+
+const u32 gItemIcon_HardStone[] = INCBIN_U32("graphics/items/icons/hard_stone.4bpp.lz");
+const u32 gItemIconPalette_HardStone[] = INCBIN_U32("graphics/items/icon_palettes/hard_stone.gbapal.lz");
+
+const u32 gItemIcon_SpellTag[] = INCBIN_U32("graphics/items/icons/spell_tag.4bpp.lz");
+const u32 gItemIconPalette_SpellTag[] = INCBIN_U32("graphics/items/icon_palettes/spell_tag.gbapal.lz");
+
+const u32 gItemIcon_DragonFang[] = INCBIN_U32("graphics/items/icons/dragon_fang.4bpp.lz");
+const u32 gItemIconPalette_DragonFang[] = INCBIN_U32("graphics/items/icon_palettes/dragon_fang.gbapal.lz");
+
+const u32 gItemIcon_BlackGlasses[] = INCBIN_U32("graphics/items/icons/black_glasses.4bpp.lz");
+
+const u32 gItemIcon_MetalCoat[] = INCBIN_U32("graphics/items/icons/metal_coat.4bpp.lz");
+const u32 gItemIconPalette_MetalCoat[] = INCBIN_U32("graphics/items/icon_palettes/metal_coat.gbapal.lz");
+
+// Choice Items
+
+const u32 gItemIcon_ChoiceBand[] = INCBIN_U32("graphics/items/icons/choice_band.4bpp.lz");
+const u32 gItemIconPalette_ChoiceBand[] = INCBIN_U32("graphics/items/icon_palettes/choice_band.gbapal.lz");
+
+const u32 gItemIcon_ChoiceSpecs[] = INCBIN_U32("graphics/items/icons/choice_specs.4bpp.lz");
+const u32 gItemIconPalette_ChoiceSpecs[] = INCBIN_U32("graphics/items/icon_palettes/choice_specs.gbapal.lz");
+
+const u32 gItemIcon_ChoiceScarf[] = INCBIN_U32("graphics/items/icons/choice_scarf.4bpp.lz");
+const u32 gItemIconPalette_ChoiceScarf[] = INCBIN_U32("graphics/items/icon_palettes/choice_scarf.gbapal.lz");
+
+// Status Orbs
+
+const u32 gItemIcon_FlameOrb[] = INCBIN_U32("graphics/items/icons/flame_orb.4bpp.lz");
+const u32 gItemIconPalette_FlameOrb[] = INCBIN_U32("graphics/items/icon_palettes/flame_orb.gbapal.lz");
+
+const u32 gItemIcon_ToxicOrb[] = INCBIN_U32("graphics/items/icons/toxic_orb.4bpp.lz");
+const u32 gItemIconPalette_ToxicOrb[] = INCBIN_U32("graphics/items/icon_palettes/toxic_orb.gbapal.lz");
+
+// Weather Rocks
+
+const u32 gItemIcon_DampRock[] = INCBIN_U32("graphics/items/icons/damp_rock.4bpp.lz");
+const u32 gItemIconPalette_DampRock[] = INCBIN_U32("graphics/items/icon_palettes/damp_rock.gbapal.lz");
+
+const u32 gItemIcon_HeatRock[] = INCBIN_U32("graphics/items/icons/heat_rock.4bpp.lz");
+const u32 gItemIconPalette_HeatRock[] = INCBIN_U32("graphics/items/icon_palettes/heat_rock.gbapal.lz");
+
+const u32 gItemIcon_SmoothRock[] = INCBIN_U32("graphics/items/icons/smooth_rock.4bpp.lz");
+const u32 gItemIconPalette_SmoothRock[] = INCBIN_U32("graphics/items/icon_palettes/smooth_rock.gbapal.lz");
+
+const u32 gItemIcon_IcyRock[] = INCBIN_U32("graphics/items/icons/icy_rock.4bpp.lz");
+const u32 gItemIconPalette_IcyRock[] = INCBIN_U32("graphics/items/icon_palettes/icy_rock.gbapal.lz");
+
+// Terrain Seeds
+
+const u32 gItemIcon_ElectricSeed[] = INCBIN_U32("graphics/items/icons/electric_seed.4bpp.lz");
+const u32 gItemIconPalette_ElectricSeed[] = INCBIN_U32("graphics/items/icon_palettes/electric_seed.gbapal.lz");
+
+const u32 gItemIcon_PsychicSeed[] = INCBIN_U32("graphics/items/icons/psychic_seed.4bpp.lz");
+const u32 gItemIconPalette_PsychicSeed[] = INCBIN_U32("graphics/items/icon_palettes/psychic_seed.gbapal.lz");
+
+const u32 gItemIcon_MistySeed[] = INCBIN_U32("graphics/items/icons/misty_seed.4bpp.lz");
+const u32 gItemIconPalette_MistySeed[] = INCBIN_U32("graphics/items/icon_palettes/misty_seed.gbapal.lz");
+
+const u32 gItemIcon_GrassySeed[] = INCBIN_U32("graphics/items/icons/grassy_seed.4bpp.lz");
+const u32 gItemIconPalette_GrassySeed[] = INCBIN_U32("graphics/items/icon_palettes/grassy_seed.gbapal.lz");
+
+// Type-activated Stat Modifiers
+
+const u32 gItemIcon_AbsorbBulb[] = INCBIN_U32("graphics/items/icons/absorb_bulb.4bpp.lz");
+const u32 gItemIconPalette_AbsorbBulb[] = INCBIN_U32("graphics/items/icon_palettes/absorb_bulb.gbapal.lz");
+
+const u32 gItemIcon_CellBattery[] = INCBIN_U32("graphics/items/icons/cell_battery.4bpp.lz");
+const u32 gItemIconPalette_CellBattery[] = INCBIN_U32("graphics/items/icon_palettes/cell_battery.gbapal.lz");
+
+const u32 gItemIcon_LuminousMoss[] = INCBIN_U32("graphics/items/icons/luminous_moss.4bpp.lz");
+const u32 gItemIconPalette_LuminousMoss[] = INCBIN_U32("graphics/items/icon_palettes/luminous_moss.gbapal.lz");
+
+const u32 gItemIcon_Snowball[] = INCBIN_U32("graphics/items/icons/snowball.4bpp.lz");
+const u32 gItemIconPalette_Snowball[] = INCBIN_U32("graphics/items/icon_palettes/snowball.gbapal.lz");
+
+// Misc. Held Items
+
+const u32 gItemIcon_BrightPowder[] = INCBIN_U32("graphics/items/icons/bright_powder.4bpp.lz");
+const u32 gItemIconPalette_BrightPowder[] = INCBIN_U32("graphics/items/icon_palettes/bright_powder.gbapal.lz");
+
+const u32 gItemIcon_InBattleHerb[] = INCBIN_U32("graphics/items/icons/in_battle_herb.4bpp.lz");
+const u32 gItemIconPalette_WhiteHerb[] = INCBIN_U32("graphics/items/icon_palettes/white_herb.gbapal.lz");
+
+const u32 gItemIcon_ExpShare[] = INCBIN_U32("graphics/items/icons/exp_share.4bpp.lz");
+const u32 gItemIconPalette_ExpShare[] = INCBIN_U32("graphics/items/icon_palettes/exp_share.gbapal.lz");
+
+const u32 gItemIcon_QuickClaw[] = INCBIN_U32("graphics/items/icons/quick_claw.4bpp.lz");
+const u32 gItemIconPalette_QuickClaw[] = INCBIN_U32("graphics/items/icon_palettes/quick_claw.gbapal.lz");
+
+const u32 gItemIcon_SootheBell[] = INCBIN_U32("graphics/items/icons/soothe_bell.4bpp.lz");
+const u32 gItemIconPalette_SootheBell[] = INCBIN_U32("graphics/items/icon_palettes/soothe_bell.gbapal.lz");
+
+const u32 gItemIconPalette_MentalHerb[] = INCBIN_U32("graphics/items/icon_palettes/mental_herb.gbapal.lz");
+
+const u32 gItemIcon_KingsRock[] = INCBIN_U32("graphics/items/icons/kings_rock.4bpp.lz");
+const u32 gItemIconPalette_KingsRock[] = INCBIN_U32("graphics/items/icon_palettes/kings_rock.gbapal.lz");
+
+const u32 gItemIcon_AmuletCoin[] = INCBIN_U32("graphics/items/icons/amulet_coin.4bpp.lz");
+const u32 gItemIconPalette_AmuletCoin[] = INCBIN_U32("graphics/items/icon_palettes/amulet_coin.gbapal.lz");
+
+const u32 gItemIcon_CleanseTag[] = INCBIN_U32("graphics/items/icons/cleanse_tag.4bpp.lz");
+const u32 gItemIconPalette_CleanseTag[] = INCBIN_U32("graphics/items/icon_palettes/cleanse_tag.gbapal.lz");
+
+const u32 gItemIcon_SmokeBall[] = INCBIN_U32("graphics/items/icons/smoke_ball.4bpp.lz");
+const u32 gItemIconPalette_SmokeBall[] = INCBIN_U32("graphics/items/icon_palettes/smoke_ball.gbapal.lz");
+
+const u32 gItemIcon_FocusBand[] = INCBIN_U32("graphics/items/icons/focus_band.4bpp.lz");
+const u32 gItemIconPalette_FocusBand[] = INCBIN_U32("graphics/items/icon_palettes/focus_band.gbapal.lz");
+
+const u32 gItemIcon_LuckyEgg[] = INCBIN_U32("graphics/items/icons/lucky_egg.4bpp.lz");
+const u32 gItemIconPalette_LuckyEgg[] = INCBIN_U32("graphics/items/icon_palettes/lucky_egg.gbapal.lz");
+
+const u32 gItemIcon_ScopeLens[] = INCBIN_U32("graphics/items/icons/scope_lens.4bpp.lz");
+const u32 gItemIconPalette_ScopeLens[] = INCBIN_U32("graphics/items/icon_palettes/scope_lens.gbapal.lz");
+
+const u32 gItemIcon_Leftovers[] = INCBIN_U32("graphics/items/icons/leftovers.4bpp.lz");
+const u32 gItemIconPalette_Leftovers[] = INCBIN_U32("graphics/items/icon_palettes/leftovers.gbapal.lz");
+
+const u32 gItemIcon_ShellBell[] = INCBIN_U32("graphics/items/icons/shell_bell.4bpp.lz");
+
+const u32 gItemIcon_WideLens[] = INCBIN_U32("graphics/items/icons/wide_lens.4bpp.lz");
+const u32 gItemIconPalette_WideLens[] = INCBIN_U32("graphics/items/icon_palettes/wide_lens.gbapal.lz");
+
+const u32 gItemIcon_MuscleBand[] = INCBIN_U32("graphics/items/icons/muscle_band.4bpp.lz");
+const u32 gItemIconPalette_MuscleBand[] = INCBIN_U32("graphics/items/icon_palettes/muscle_band.gbapal.lz");
+
+const u32 gItemIcon_WiseGlasses[] = INCBIN_U32("graphics/items/icons/wise_glasses.4bpp.lz");
+const u32 gItemIconPalette_WiseGlasses[] = INCBIN_U32("graphics/items/icon_palettes/wise_glasses.gbapal.lz");
+
+const u32 gItemIcon_ExpertBelt[] = INCBIN_U32("graphics/items/icons/expert_belt.4bpp.lz");
+const u32 gItemIconPalette_ExpertBelt[] = INCBIN_U32("graphics/items/icon_palettes/expert_belt.gbapal.lz");
+
+const u32 gItemIcon_LightClay[] = INCBIN_U32("graphics/items/icons/light_clay.4bpp.lz");
+const u32 gItemIconPalette_LightClay[] = INCBIN_U32("graphics/items/icon_palettes/light_clay.gbapal.lz");
+
+const u32 gItemIcon_LifeOrb[] = INCBIN_U32("graphics/items/icons/life_orb.4bpp.lz");
+const u32 gItemIconPalette_LifeOrb[] = INCBIN_U32("graphics/items/icon_palettes/life_orb.gbapal.lz");
+
+const u32 gItemIcon_PowerHerb[] = INCBIN_U32("graphics/items/icons/power_herb.4bpp.lz");
+const u32 gItemIconPalette_PowerHerb[] = INCBIN_U32("graphics/items/icon_palettes/power_herb.gbapal.lz");
+
+const u32 gItemIcon_FocusSash[] = INCBIN_U32("graphics/items/icons/focus_sash.4bpp.lz");
+const u32 gItemIconPalette_FocusSash[] = INCBIN_U32("graphics/items/icon_palettes/focus_sash.gbapal.lz");
+
+const u32 gItemIcon_ZoomLens[] = INCBIN_U32("graphics/items/icons/zoom_lens.4bpp.lz");
+const u32 gItemIconPalette_ZoomLens[] = INCBIN_U32("graphics/items/icon_palettes/zoom_lens.gbapal.lz");
+
+const u32 gItemIcon_Metronome[] = INCBIN_U32("graphics/items/icons/metronome.4bpp.lz");
+const u32 gItemIconPalette_Metronome[] = INCBIN_U32("graphics/items/icon_palettes/metronome.gbapal.lz");
+
+const u32 gItemIcon_IronBall[] = INCBIN_U32("graphics/items/icons/iron_ball.4bpp.lz");
+const u32 gItemIconPalette_IronBall[] = INCBIN_U32("graphics/items/icon_palettes/iron_ball.gbapal.lz");
+
+const u32 gItemIcon_LaggingTail[] = INCBIN_U32("graphics/items/icons/lagging_tail.4bpp.lz");
+const u32 gItemIconPalette_LaggingTail[] = INCBIN_U32("graphics/items/icon_palettes/lagging_tail.gbapal.lz");
+
+const u32 gItemIcon_DestinyKnot[] = INCBIN_U32("graphics/items/icons/destiny_knot.4bpp.lz");
+const u32 gItemIconPalette_DestinyKnot[] = INCBIN_U32("graphics/items/icon_palettes/destiny_knot.gbapal.lz");
+
+const u32 gItemIcon_BlackSludge[] = INCBIN_U32("graphics/items/icons/black_sludge.4bpp.lz");
+const u32 gItemIconPalette_BlackSludge[] = INCBIN_U32("graphics/items/icon_palettes/black_sludge.gbapal.lz");
+
+const u32 gItemIcon_GripClaw[] = INCBIN_U32("graphics/items/icons/grip_claw.4bpp.lz");
+const u32 gItemIconPalette_GripClaw[] = INCBIN_U32("graphics/items/icon_palettes/grip_claw.gbapal.lz");
+
+const u32 gItemIcon_StickyBarb[] = INCBIN_U32("graphics/items/icons/sticky_barb.4bpp.lz");
+const u32 gItemIconPalette_StickyBarb[] = INCBIN_U32("graphics/items/icon_palettes/sticky_barb.gbapal.lz");
+
+const u32 gItemIcon_ShedShell[] = INCBIN_U32("graphics/items/icons/shed_shell.4bpp.lz");
+const u32 gItemIconPalette_ShedShell[] = INCBIN_U32("graphics/items/icon_palettes/shed_shell.gbapal.lz");
+
+const u32 gItemIcon_BigRoot[] = INCBIN_U32("graphics/items/icons/big_root.4bpp.lz");
+const u32 gItemIconPalette_BigRoot[] = INCBIN_U32("graphics/items/icon_palettes/big_root.gbapal.lz");
+
+const u32 gItemIcon_RazorClaw[] = INCBIN_U32("graphics/items/icons/razor_claw.4bpp.lz");
+const u32 gItemIconPalette_RazorClaw[] = INCBIN_U32("graphics/items/icon_palettes/razor_claw.gbapal.lz");
+
+const u32 gItemIcon_RazorFang[] = INCBIN_U32("graphics/items/icons/razor_fang.4bpp.lz");
+const u32 gItemIconPalette_RazorFang[] = INCBIN_U32("graphics/items/icon_palettes/razor_fang.gbapal.lz");
+
+const u32 gItemIcon_Eviolite[] = INCBIN_U32("graphics/items/icons/eviolite.4bpp.lz");
+const u32 gItemIconPalette_Eviolite[] = INCBIN_U32("graphics/items/icon_palettes/eviolite.gbapal.lz");
+
+const u32 gItemIcon_FloatStone[] = INCBIN_U32("graphics/items/icons/float_stone.4bpp.lz");
+const u32 gItemIconPalette_FloatStone[] = INCBIN_U32("graphics/items/icon_palettes/float_stone.gbapal.lz");
+
+const u32 gItemIcon_RockyHelmet[] = INCBIN_U32("graphics/items/icons/rocky_helmet.4bpp.lz");
+const u32 gItemIconPalette_RockyHelmet[] = INCBIN_U32("graphics/items/icon_palettes/rocky_helmet.gbapal.lz");
+
+const u32 gItemIcon_AirBalloon[] = INCBIN_U32("graphics/items/icons/air_balloon.4bpp.lz");
+const u32 gItemIconPalette_AirBalloon[] = INCBIN_U32("graphics/items/icon_palettes/air_balloon.gbapal.lz");
+
+const u32 gItemIcon_RedCard[] = INCBIN_U32("graphics/items/icons/red_card.4bpp.lz");
+const u32 gItemIconPalette_RedCard[] = INCBIN_U32("graphics/items/icon_palettes/red_card.gbapal.lz");
+
+const u32 gItemIcon_RingTarget[] = INCBIN_U32("graphics/items/icons/ring_target.4bpp.lz");
+const u32 gItemIconPalette_RingTarget[] = INCBIN_U32("graphics/items/icon_palettes/ring_target.gbapal.lz");
+
+const u32 gItemIcon_BindingBand[] = INCBIN_U32("graphics/items/icons/binding_band.4bpp.lz");
+const u32 gItemIconPalette_BindingBand[] = INCBIN_U32("graphics/items/icon_palettes/binding_band.gbapal.lz");
+
+const u32 gItemIcon_EjectButton[] = INCBIN_U32("graphics/items/icons/eject_button.4bpp.lz");
+const u32 gItemIconPalette_EjectButton[] = INCBIN_U32("graphics/items/icon_palettes/eject_button.gbapal.lz");
+
+const u32 gItemIcon_WeaknessPolicy[] = INCBIN_U32("graphics/items/icons/weakness_policy.4bpp.lz");
+const u32 gItemIconPalette_WeaknessPolicy[] = INCBIN_U32("graphics/items/icon_palettes/weakness_policy.gbapal.lz");
+
+const u32 gItemIcon_AssaultVest[] = INCBIN_U32("graphics/items/icons/assault_vest.4bpp.lz");
+const u32 gItemIconPalette_AssaultVest[] = INCBIN_U32("graphics/items/icon_palettes/assault_vest.gbapal.lz");
+
+const u32 gItemIcon_SafetyGoggles[] = INCBIN_U32("graphics/items/icons/safety_goggles.4bpp.lz");
+const u32 gItemIconPalette_SafetyGoggles[] = INCBIN_U32("graphics/items/icon_palettes/safety_goggles.gbapal.lz");
+
+const u32 gItemIcon_AdrenalineOrb[] = INCBIN_U32("graphics/items/icons/adrenaline_orb.4bpp.lz");
+const u32 gItemIconPalette_AdrenalineOrb[] = INCBIN_U32("graphics/items/icon_palettes/adrenaline_orb.gbapal.lz");
+
+const u32 gItemIcon_TerrainExtender[] = INCBIN_U32("graphics/items/icons/terrain_extender.4bpp.lz");
+const u32 gItemIconPalette_TerrainExtender[] = INCBIN_U32("graphics/items/icon_palettes/terrain_extender.gbapal.lz");
+
+const u32 gItemIcon_ProtectivePads[] = INCBIN_U32("graphics/items/icons/protective_pads.4bpp.lz");
+const u32 gItemIconPalette_ProtectivePads[] = INCBIN_U32("graphics/items/icon_palettes/protective_pads.gbapal.lz");
+
+const u32 gItemIcon_ThroatSpray[] = INCBIN_U32("graphics/items/icons/throat_spray.4bpp.lz");
+const u32 gItemIconPalette_ThroatSpray[] = INCBIN_U32("graphics/items/icon_palettes/throat_spray.gbapal.lz");
+
+const u32 gItemIcon_EjectPack[] = INCBIN_U32("graphics/items/icons/eject_pack.4bpp.lz");
+const u32 gItemIconPalette_EjectPack[] = INCBIN_U32("graphics/items/icon_palettes/eject_pack.gbapal.lz");
+
+const u32 gItemIcon_HeavyDutyBoots[] = INCBIN_U32("graphics/items/icons/heavy_duty_boots.4bpp.lz");
+const u32 gItemIconPalette_HeavyDutyBoots[] = INCBIN_U32("graphics/items/icon_palettes/heavy_duty_boots.gbapal.lz");
+
+const u32 gItemIcon_BlunderPolicy[] = INCBIN_U32("graphics/items/icons/blunder_policy.4bpp.lz");
+const u32 gItemIconPalette_BlunderPolicy[] = INCBIN_U32("graphics/items/icon_palettes/blunder_policy.gbapal.lz");
+
+const u32 gItemIcon_RoomService[] = INCBIN_U32("graphics/items/icons/room_service.4bpp.lz");
+const u32 gItemIconPalette_RoomService[] = INCBIN_U32("graphics/items/icon_palettes/room_service.gbapal.lz");
+
+const u32 gItemIcon_UtilityUmbrella[] = INCBIN_U32("graphics/items/icons/utility_umbrella.4bpp.lz");
+const u32 gItemIconPalette_UtilityUmbrella[] = INCBIN_U32("graphics/items/icon_palettes/utility_umbrella.gbapal.lz");
+
// Berries
const u32 gItemIcon_CheriBerry[] = INCBIN_U32("graphics/items/icons/cheri_berry.4bpp.lz");
@@ -365,6 +1585,60 @@ const u32 gItemIconPalette_DurinBerry[] = INCBIN_U32("graphics/items/icon_palett
const u32 gItemIcon_BelueBerry[] = INCBIN_U32("graphics/items/icons/belue_berry.4bpp.lz");
const u32 gItemIconPalette_BelueBerry[] = INCBIN_U32("graphics/items/icon_palettes/belue_berry.gbapal.lz");
+const u32 gItemIcon_ChilanBerry[] = INCBIN_U32("graphics/items/icons/chilan_berry.4bpp.lz");
+const u32 gItemIconPalette_ChilanBerry[] = INCBIN_U32("graphics/items/icon_palettes/chilan_berry.gbapal.lz");
+
+const u32 gItemIcon_OccaBerry[] = INCBIN_U32("graphics/items/icons/occa_berry.4bpp.lz");
+const u32 gItemIconPalette_OccaBerry[] = INCBIN_U32("graphics/items/icon_palettes/occa_berry.gbapal.lz");
+
+const u32 gItemIcon_PasshoBerry[] = INCBIN_U32("graphics/items/icons/passho_berry.4bpp.lz");
+const u32 gItemIconPalette_PasshoBerry[] = INCBIN_U32("graphics/items/icon_palettes/passho_berry.gbapal.lz");
+
+const u32 gItemIcon_WacanBerry[] = INCBIN_U32("graphics/items/icons/wacan_berry.4bpp.lz");
+const u32 gItemIconPalette_WacanBerry[] = INCBIN_U32("graphics/items/icon_palettes/wacan_berry.gbapal.lz");
+
+const u32 gItemIcon_RindoBerry[] = INCBIN_U32("graphics/items/icons/rindo_berry.4bpp.lz");
+const u32 gItemIconPalette_RindoBerry[] = INCBIN_U32("graphics/items/icon_palettes/rindo_berry.gbapal.lz");
+
+const u32 gItemIcon_YacheBerry[] = INCBIN_U32("graphics/items/icons/yache_berry.4bpp.lz");
+const u32 gItemIconPalette_YacheBerry[] = INCBIN_U32("graphics/items/icon_palettes/yache_berry.gbapal.lz");
+
+const u32 gItemIcon_ChopleBerry[] = INCBIN_U32("graphics/items/icons/chople_berry.4bpp.lz");
+const u32 gItemIconPalette_ChopleBerry[] = INCBIN_U32("graphics/items/icon_palettes/chople_berry.gbapal.lz");
+
+const u32 gItemIcon_KebiaBerry[] = INCBIN_U32("graphics/items/icons/kebia_berry.4bpp.lz");
+const u32 gItemIconPalette_KebiaBerry[] = INCBIN_U32("graphics/items/icon_palettes/kebia_berry.gbapal.lz");
+
+const u32 gItemIcon_ShucaBerry[] = INCBIN_U32("graphics/items/icons/shuca_berry.4bpp.lz");
+const u32 gItemIconPalette_ShucaBerry[] = INCBIN_U32("graphics/items/icon_palettes/shuca_berry.gbapal.lz");
+
+const u32 gItemIcon_CobaBerry[] = INCBIN_U32("graphics/items/icons/coba_berry.4bpp.lz");
+const u32 gItemIconPalette_CobaBerry[] = INCBIN_U32("graphics/items/icon_palettes/coba_berry.gbapal.lz");
+
+const u32 gItemIcon_PayapaBerry[] = INCBIN_U32("graphics/items/icons/payapa_berry.4bpp.lz");
+const u32 gItemIconPalette_PayapaBerry[] = INCBIN_U32("graphics/items/icon_palettes/payapa_berry.gbapal.lz");
+
+const u32 gItemIcon_TangaBerry[] = INCBIN_U32("graphics/items/icons/tanga_berry.4bpp.lz");
+const u32 gItemIconPalette_TangaBerry[] = INCBIN_U32("graphics/items/icon_palettes/tanga_berry.gbapal.lz");
+
+const u32 gItemIcon_ChartiBerry[] = INCBIN_U32("graphics/items/icons/charti_berry.4bpp.lz");
+const u32 gItemIconPalette_ChartiBerry[] = INCBIN_U32("graphics/items/icon_palettes/charti_berry.gbapal.lz");
+
+const u32 gItemIcon_KasibBerry[] = INCBIN_U32("graphics/items/icons/kasib_berry.4bpp.lz");
+const u32 gItemIconPalette_KasibBerry[] = INCBIN_U32("graphics/items/icon_palettes/kasib_berry.gbapal.lz");
+
+const u32 gItemIcon_HabanBerry[] = INCBIN_U32("graphics/items/icons/haban_berry.4bpp.lz");
+const u32 gItemIconPalette_HabanBerry[] = INCBIN_U32("graphics/items/icon_palettes/haban_berry.gbapal.lz");
+
+const u32 gItemIcon_ColburBerry[] = INCBIN_U32("graphics/items/icons/colbur_berry.4bpp.lz");
+const u32 gItemIconPalette_ColburBerry[] = INCBIN_U32("graphics/items/icon_palettes/colbur_berry.gbapal.lz");
+
+const u32 gItemIcon_BabiriBerry[] = INCBIN_U32("graphics/items/icons/babiri_berry.4bpp.lz");
+const u32 gItemIconPalette_BabiriBerry[] = INCBIN_U32("graphics/items/icon_palettes/babiri_berry.gbapal.lz");
+
+const u32 gItemIcon_RoseliBerry[] = INCBIN_U32("graphics/items/icons/roseli_berry.4bpp.lz");
+const u32 gItemIconPalette_RoseliBerry[] = INCBIN_U32("graphics/items/icon_palettes/roseli_berry.gbapal.lz");
+
const u32 gItemIcon_LiechiBerry[] = INCBIN_U32("graphics/items/icons/liechi_berry.4bpp.lz");
const u32 gItemIconPalette_LiechiBerry[] = INCBIN_U32("graphics/items/icon_palettes/liechi_berry.gbapal.lz");
@@ -389,163 +1663,131 @@ const u32 gItemIconPalette_StarfBerry[] = INCBIN_U32("graphics/items/icon_palett
const u32 gItemIcon_EnigmaBerry[] = INCBIN_U32("graphics/items/icons/enigma_berry.4bpp.lz");
const u32 gItemIconPalette_EnigmaBerry[] = INCBIN_U32("graphics/items/icon_palettes/enigma_berry.gbapal.lz");
-// Hold items
+const u32 gItemIcon_MicleBerry[] = INCBIN_U32("graphics/items/icons/micle_berry.4bpp.lz");
+const u32 gItemIconPalette_MicleBerry[] = INCBIN_U32("graphics/items/icon_palettes/micle_berry.gbapal.lz");
-const u32 gItemIcon_BrightPowder[] = INCBIN_U32("graphics/items/icons/bright_powder.4bpp.lz");
-const u32 gItemIconPalette_BrightPowder[] = INCBIN_U32("graphics/items/icon_palettes/bright_powder.gbapal.lz");
+const u32 gItemIcon_CustapBerry[] = INCBIN_U32("graphics/items/icons/custap_berry.4bpp.lz");
+const u32 gItemIconPalette_CustapBerry[] = INCBIN_U32("graphics/items/icon_palettes/custap_berry.gbapal.lz");
-const u32 gItemIcon_InBattleHerb[] = INCBIN_U32("graphics/items/icons/in_battle_herb.4bpp.lz");
-const u32 gItemIconPalette_WhiteHerb[] = INCBIN_U32("graphics/items/icon_palettes/white_herb.gbapal.lz");
+const u32 gItemIcon_JabocaBerry[] = INCBIN_U32("graphics/items/icons/jaboca_berry.4bpp.lz");
+const u32 gItemIconPalette_JabocaBerry[] = INCBIN_U32("graphics/items/icon_palettes/jaboca_berry.gbapal.lz");
-const u32 gItemIcon_MachoBrace[] = INCBIN_U32("graphics/items/icons/macho_brace.4bpp.lz");
-const u32 gItemIconPalette_MachoBrace[] = INCBIN_U32("graphics/items/icon_palettes/macho_brace.gbapal.lz");
+const u32 gItemIcon_RowapBerry[] = INCBIN_U32("graphics/items/icons/rowap_berry.4bpp.lz");
+const u32 gItemIconPalette_RowapBerry[] = INCBIN_U32("graphics/items/icon_palettes/rowap_berry.gbapal.lz");
-const u32 gItemIcon_ExpShare[] = INCBIN_U32("graphics/items/icons/exp_share.4bpp.lz");
-const u32 gItemIconPalette_ExpShare[] = INCBIN_U32("graphics/items/icon_palettes/exp_share.gbapal.lz");
+const u32 gItemIcon_KeeBerry[] = INCBIN_U32("graphics/items/icons/kee_berry.4bpp.lz");
+const u32 gItemIconPalette_KeeBerry[] = INCBIN_U32("graphics/items/icon_palettes/kee_berry.gbapal.lz");
-const u32 gItemIcon_QuickClaw[] = INCBIN_U32("graphics/items/icons/quick_claw.4bpp.lz");
-const u32 gItemIconPalette_QuickClaw[] = INCBIN_U32("graphics/items/icon_palettes/quick_claw.gbapal.lz");
+const u32 gItemIcon_MarangaBerry[] = INCBIN_U32("graphics/items/icons/maranga_berry.4bpp.lz");
+const u32 gItemIconPalette_MarangaBerry[] = INCBIN_U32("graphics/items/icon_palettes/maranga_berry.gbapal.lz");
-const u32 gItemIcon_SootheBell[] = INCBIN_U32("graphics/items/icons/soothe_bell.4bpp.lz");
-const u32 gItemIconPalette_SootheBell[] = INCBIN_U32("graphics/items/icon_palettes/soothe_bell.gbapal.lz");
+// TMs/HMs
-const u32 gItemIconPalette_MentalHerb[] = INCBIN_U32("graphics/items/icon_palettes/mental_herb.gbapal.lz");
+const u32 gItemIcon_TM[] = INCBIN_U32("graphics/items/icons/tm.4bpp.lz");
-const u32 gItemIcon_ChoiceBand[] = INCBIN_U32("graphics/items/icons/choice_band.4bpp.lz");
-const u32 gItemIconPalette_ChoiceBand[] = INCBIN_U32("graphics/items/icon_palettes/choice_band.gbapal.lz");
+const u32 gItemIcon_HM[] = INCBIN_U32("graphics/items/icons/hm.4bpp.lz");
-const u32 gItemIcon_KingsRock[] = INCBIN_U32("graphics/items/icons/kings_rock.4bpp.lz");
-const u32 gItemIconPalette_KingsRock[] = INCBIN_U32("graphics/items/icon_palettes/kings_rock.gbapal.lz");
+const u32 gItemIconPalette_NormalTMHM[] = INCBIN_U32("graphics/items/icon_palettes/normal_tm_hm.gbapal.lz");
-const u32 gItemIcon_SilverPowder[] = INCBIN_U32("graphics/items/icons/silver_powder.4bpp.lz");
-const u32 gItemIconPalette_SilverPowder[] = INCBIN_U32("graphics/items/icon_palettes/silver_powder.gbapal.lz");
+const u32 gItemIconPalette_FireTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fire_tm_hm.gbapal.lz");
-const u32 gItemIcon_AmuletCoin[] = INCBIN_U32("graphics/items/icons/amulet_coin.4bpp.lz");
-const u32 gItemIconPalette_AmuletCoin[] = INCBIN_U32("graphics/items/icon_palettes/amulet_coin.gbapal.lz");
+const u32 gItemIconPalette_WaterTMHM[] = INCBIN_U32("graphics/items/icon_palettes/water_tm_hm.gbapal.lz");
-const u32 gItemIcon_CleanseTag[] = INCBIN_U32("graphics/items/icons/cleanse_tag.4bpp.lz");
-const u32 gItemIconPalette_CleanseTag[] = INCBIN_U32("graphics/items/icon_palettes/cleanse_tag.gbapal.lz");
+const u32 gItemIconPalette_ElectricTMHM[] = INCBIN_U32("graphics/items/icon_palettes/electric_tm_hm.gbapal.lz");
-const u32 gItemIcon_SoulDew[] = INCBIN_U32("graphics/items/icons/soul_dew.4bpp.lz");
-const u32 gItemIconPalette_SoulDew[] = INCBIN_U32("graphics/items/icon_palettes/soul_dew.gbapal.lz");
+const u32 gItemIconPalette_GrassTMHM[] = INCBIN_U32("graphics/items/icon_palettes/grass_tm_hm.gbapal.lz");
-const u32 gItemIcon_DeepSeaTooth[] = INCBIN_U32("graphics/items/icons/deep_sea_tooth.4bpp.lz");
-const u32 gItemIconPalette_DeepSeaTooth[] = INCBIN_U32("graphics/items/icon_palettes/deep_sea_tooth.gbapal.lz");
+const u32 gItemIconPalette_IceTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ice_tm_hm.gbapal.lz");
-const u32 gItemIcon_DeepSeaScale[] = INCBIN_U32("graphics/items/icons/deep_sea_scale.4bpp.lz");
-const u32 gItemIconPalette_DeepSeaScale[] = INCBIN_U32("graphics/items/icon_palettes/deep_sea_scale.gbapal.lz");
+const u32 gItemIconPalette_FightingTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fighting_tm_hm.gbapal.lz");
-const u32 gItemIcon_SmokeBall[] = INCBIN_U32("graphics/items/icons/smoke_ball.4bpp.lz");
-const u32 gItemIconPalette_SmokeBall[] = INCBIN_U32("graphics/items/icon_palettes/smoke_ball.gbapal.lz");
+const u32 gItemIconPalette_PoisonTMHM[] = INCBIN_U32("graphics/items/icon_palettes/poison_tm_hm.gbapal.lz");
-const u32 gItemIcon_Everstone[] = INCBIN_U32("graphics/items/icons/everstone.4bpp.lz");
-const u32 gItemIconPalette_Everstone[] = INCBIN_U32("graphics/items/icon_palettes/everstone.gbapal.lz");
+const u32 gItemIconPalette_GroundTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ground_tm_hm.gbapal.lz");
-const u32 gItemIcon_FocusBand[] = INCBIN_U32("graphics/items/icons/focus_band.4bpp.lz");
-const u32 gItemIconPalette_FocusBand[] = INCBIN_U32("graphics/items/icon_palettes/focus_band.gbapal.lz");
+const u32 gItemIconPalette_FlyingTMHM[] = INCBIN_U32("graphics/items/icon_palettes/flying_tm_hm.gbapal.lz");
-const u32 gItemIcon_LuckyEgg[] = INCBIN_U32("graphics/items/icons/lucky_egg.4bpp.lz");
-const u32 gItemIconPalette_LuckyEgg[] = INCBIN_U32("graphics/items/icon_palettes/lucky_egg.gbapal.lz");
+const u32 gItemIconPalette_PsychicTMHM[] = INCBIN_U32("graphics/items/icon_palettes/psychic_tm_hm.gbapal.lz");
-const u32 gItemIcon_ScopeLens[] = INCBIN_U32("graphics/items/icons/scope_lens.4bpp.lz");
-const u32 gItemIconPalette_ScopeLens[] = INCBIN_U32("graphics/items/icon_palettes/scope_lens.gbapal.lz");
+const u32 gItemIconPalette_BugTMHM[] = INCBIN_U32("graphics/items/icon_palettes/bug_tm_hm.gbapal.lz");
-const u32 gItemIcon_MetalCoat[] = INCBIN_U32("graphics/items/icons/metal_coat.4bpp.lz");
-const u32 gItemIconPalette_MetalCoat[] = INCBIN_U32("graphics/items/icon_palettes/metal_coat.gbapal.lz");
+const u32 gItemIconPalette_RockTMHM[] = INCBIN_U32("graphics/items/icon_palettes/rock_tm_hm.gbapal.lz");
-const u32 gItemIcon_Leftovers[] = INCBIN_U32("graphics/items/icons/leftovers.4bpp.lz");
-const u32 gItemIconPalette_Leftovers[] = INCBIN_U32("graphics/items/icon_palettes/leftovers.gbapal.lz");
+const u32 gItemIconPalette_GhostTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ghost_tm_hm.gbapal.lz");
-const u32 gItemIcon_DragonScale[] = INCBIN_U32("graphics/items/icons/dragon_scale.4bpp.lz");
-const u32 gItemIconPalette_DragonScale[] = INCBIN_U32("graphics/items/icon_palettes/dragon_scale.gbapal.lz");
+const u32 gItemIconPalette_DragonTMHM[] = INCBIN_U32("graphics/items/icon_palettes/dragon_tm_hm.gbapal.lz");
-const u32 gItemIcon_LightBall[] = INCBIN_U32("graphics/items/icons/light_ball.4bpp.lz");
-const u32 gItemIconPalette_LightBall[] = INCBIN_U32("graphics/items/icon_palettes/light_ball.gbapal.lz");
+const u32 gItemIconPalette_DarkTMHM[] = INCBIN_U32("graphics/items/icon_palettes/dark_tm_hm.gbapal.lz");
-const u32 gItemIcon_SoftSand[] = INCBIN_U32("graphics/items/icons/soft_sand.4bpp.lz");
-const u32 gItemIconPalette_SoftSand[] = INCBIN_U32("graphics/items/icon_palettes/soft_sand.gbapal.lz");
+const u32 gItemIconPalette_SteelTMHM[] = INCBIN_U32("graphics/items/icon_palettes/steel_tm_hm.gbapal.lz");
-const u32 gItemIcon_HardStone[] = INCBIN_U32("graphics/items/icons/hard_stone.4bpp.lz");
-const u32 gItemIconPalette_HardStone[] = INCBIN_U32("graphics/items/icon_palettes/hard_stone.gbapal.lz");
+const u32 gItemIconPalette_FairyTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fairy_tm_hm.gbapal.lz");
-const u32 gItemIcon_MiracleSeed[] = INCBIN_U32("graphics/items/icons/miracle_seed.4bpp.lz");
-const u32 gItemIconPalette_MiracleSeed[] = INCBIN_U32("graphics/items/icon_palettes/miracle_seed.gbapal.lz");
+// Charms
-const u32 gItemIcon_BlackGlasses[] = INCBIN_U32("graphics/items/icons/black_glasses.4bpp.lz");
-const u32 gItemIconPalette_BlackTypeEnhancingItem[] = INCBIN_U32("graphics/items/icon_palettes/black_type_enhancing_item.gbapal.lz");
+const u32 gItemIcon_OvalCharm[] = INCBIN_U32("graphics/items/icons/oval_charm.4bpp.lz");
+const u32 gItemIconPalette_OvalCharm[] = INCBIN_U32("graphics/items/icon_palettes/oval_charm.gbapal.lz");
-const u32 gItemIcon_BlackBelt[] = INCBIN_U32("graphics/items/icons/black_belt.4bpp.lz");
+const u32 gItemIcon_ShinyCharm[] = INCBIN_U32("graphics/items/icons/shiny_charm.4bpp.lz");
+const u32 gItemIconPalette_ShinyCharm[] = INCBIN_U32("graphics/items/icon_palettes/shiny_charm.gbapal.lz");
-const u32 gItemIcon_Magnet[] = INCBIN_U32("graphics/items/icons/magnet.4bpp.lz");
-const u32 gItemIconPalette_Magnet[] = INCBIN_U32("graphics/items/icon_palettes/magnet.gbapal.lz");
+const u32 gItemIcon_CatchingCharm[] = INCBIN_U32("graphics/items/icons/catching_charm.4bpp.lz");
+const u32 gItemIconPalette_CatchingCharm[] = INCBIN_U32("graphics/items/icon_palettes/catching_charm.gbapal.lz");
-const u32 gItemIcon_MysticWater[] = INCBIN_U32("graphics/items/icons/mystic_water.4bpp.lz");
-const u32 gItemIconPalette_MysticWater[] = INCBIN_U32("graphics/items/icon_palettes/mystic_water.gbapal.lz");
+const u32 gItemIcon_ExpCharm[] = INCBIN_U32("graphics/items/icons/exp_charm.4bpp.lz");
+const u32 gItemIconPalette_ExpCharm[] = INCBIN_U32("graphics/items/icon_palettes/exp_charm.gbapal.lz");
-const u32 gItemIcon_SharpBeak[] = INCBIN_U32("graphics/items/icons/sharp_beak.4bpp.lz");
-const u32 gItemIconPalette_SharpBeak[] = INCBIN_U32("graphics/items/icon_palettes/sharp_beak.gbapal.lz");
+// Form-changing Key Items
-const u32 gItemIcon_PoisonBarb[] = INCBIN_U32("graphics/items/icons/poison_barb.4bpp.lz");
-const u32 gItemIconPalette_PoisonBarb[] = INCBIN_U32("graphics/items/icon_palettes/poison_barb.gbapal.lz");
+const u32 gItemIcon_RotomCatalog[] = INCBIN_U32("graphics/items/icons/rotom_catalog.4bpp.lz");
+const u32 gItemIconPalette_RotomCatalog[] = INCBIN_U32("graphics/items/icon_palettes/rotom_catalog.gbapal.lz");
-const u32 gItemIcon_NeverMeltIce[] = INCBIN_U32("graphics/items/icons/never_melt_ice.4bpp.lz");
-const u32 gItemIconPalette_NeverMeltIce[] = INCBIN_U32("graphics/items/icon_palettes/never_melt_ice.gbapal.lz");
+const u32 gItemIcon_Gracidea[] = INCBIN_U32("graphics/items/icons/gracidea.4bpp.lz");
+const u32 gItemIconPalette_Gracidea[] = INCBIN_U32("graphics/items/icon_palettes/gracidea.gbapal.lz");
-const u32 gItemIcon_SpellTag[] = INCBIN_U32("graphics/items/icons/spell_tag.4bpp.lz");
-const u32 gItemIconPalette_SpellTag[] = INCBIN_U32("graphics/items/icon_palettes/spell_tag.gbapal.lz");
+const u32 gItemIcon_RevealGlass[] = INCBIN_U32("graphics/items/icons/reveal_glass.4bpp.lz");
+const u32 gItemIconPalette_RevealGlass[] = INCBIN_U32("graphics/items/icon_palettes/reveal_glass.gbapal.lz");
-const u32 gItemIcon_TwistedSpoon[] = INCBIN_U32("graphics/items/icons/twisted_spoon.4bpp.lz");
-const u32 gItemIconPalette_TwistedSpoon[] = INCBIN_U32("graphics/items/icon_palettes/twisted_spoon.gbapal.lz");
+const u32 gItemIcon_DNASplicers[] = INCBIN_U32("graphics/items/icons/dna_splicers.4bpp.lz");
+const u32 gItemIconPalette_DNASplicers[] = INCBIN_U32("graphics/items/icon_palettes/dna_splicers.gbapal.lz");
-const u32 gItemIcon_Charcoal[] = INCBIN_U32("graphics/items/icons/charcoal.4bpp.lz");
-const u32 gItemIconPalette_Charcoal[] = INCBIN_U32("graphics/items/icon_palettes/charcoal.gbapal.lz");
+const u32 gItemIcon_ZygardeCube[] = INCBIN_U32("graphics/items/icons/zygarde_cube.4bpp.lz");
+const u32 gItemIconPalette_ZygardeCube[] = INCBIN_U32("graphics/items/icon_palettes/zygarde_cube.gbapal.lz");
-const u32 gItemIcon_DragonFang[] = INCBIN_U32("graphics/items/icons/dragon_fang.4bpp.lz");
-const u32 gItemIconPalette_DragonFang[] = INCBIN_U32("graphics/items/icon_palettes/dragon_fang.gbapal.lz");
+const u32 gItemIcon_PrisonBottle[] = INCBIN_U32("graphics/items/icons/prison_bottle.4bpp.lz");
+const u32 gItemIconPalette_PrisonBottle[] = INCBIN_U32("graphics/items/icon_palettes/prison_bottle.gbapal.lz");
-const u32 gItemIcon_SilkScarf[] = INCBIN_U32("graphics/items/icons/silk_scarf.4bpp.lz");
-const u32 gItemIconPalette_SilkScarf[] = INCBIN_U32("graphics/items/icon_palettes/silk_scarf.gbapal.lz");
+const u32 gItemIcon_NecrozmaFuser[] = INCBIN_U32("graphics/items/icons/necrozma_fuser.4bpp.lz");
+const u32 gItemIconPalette_NSolarizer[] = INCBIN_U32("graphics/items/icon_palettes/n_solarizer.gbapal.lz");
+const u32 gItemIconPalette_NLunarizer[] = INCBIN_U32("graphics/items/icon_palettes/n_lunarizer.gbapal.lz");
-const u32 gItemIcon_UpGrade[] = INCBIN_U32("graphics/items/icons/up_grade.4bpp.lz");
-const u32 gItemIconPalette_UpGrade[] = INCBIN_U32("graphics/items/icon_palettes/up_grade.gbapal.lz");
+const u32 gItemIcon_ReinsOfUnity[] = INCBIN_U32("graphics/items/icons/reins_of_unity.4bpp.lz");
+const u32 gItemIconPalette_ReinsOfUnity[] = INCBIN_U32("graphics/items/icon_palettes/reins_of_unity.gbapal.lz");
-const u32 gItemIcon_ShellBell[] = INCBIN_U32("graphics/items/icons/shell_bell.4bpp.lz");
+// Battle Mechanic Key Items
-const u32 gItemIcon_SeaIncense[] = INCBIN_U32("graphics/items/icons/sea_incense.4bpp.lz");
-const u32 gItemIconPalette_SeaIncense[] = INCBIN_U32("graphics/items/icon_palettes/sea_incense.gbapal.lz");
+const u32 gItemIcon_MegaRing[] = INCBIN_U32("graphics/items/icons/mega_ring.4bpp.lz");
+const u32 gItemIconPalette_MegaRing[] = INCBIN_U32("graphics/items/icon_palettes/mega_ring.gbapal.lz");
-const u32 gItemIcon_LaxIncense[] = INCBIN_U32("graphics/items/icons/lax_incense.4bpp.lz");
-const u32 gItemIconPalette_LaxIncense[] = INCBIN_U32("graphics/items/icon_palettes/lax_incense.gbapal.lz");
+const u32 gItemIcon_ZPowerRing[] = INCBIN_U32("graphics/items/icons/z_power_ring.4bpp.lz");
+const u32 gItemIconPalette_ZPowerRing[] = INCBIN_U32("graphics/items/icon_palettes/z_power_ring.gbapal.lz");
-const u32 gItemIcon_LuckyPunch[] = INCBIN_U32("graphics/items/icons/lucky_punch.4bpp.lz");
-const u32 gItemIconPalette_LuckyPunch[] = INCBIN_U32("graphics/items/icon_palettes/lucky_punch.gbapal.lz");
+const u32 gItemIcon_ZRing[] = INCBIN_U32("graphics/items/icons/z_ring.4bpp.lz"); // Remove
+const u32 gItemIconPalette_ZRing[] = INCBIN_U32("graphics/items/icon_palettes/z_ring.gbapal.lz"); // Remove
-const u32 gItemIcon_MetalPowder[] = INCBIN_U32("graphics/items/icons/metal_powder.4bpp.lz");
-const u32 gItemIconPalette_MetalPowder[] = INCBIN_U32("graphics/items/icon_palettes/metal_powder.gbapal.lz");
+const u32 gItemIcon_DynamaxBand[] = INCBIN_U32("graphics/items/icons/dynamax_band.4bpp.lz");
+const u32 gItemIconPalette_DynamaxBand[] = INCBIN_U32("graphics/items/icon_palettes/dynamax_band.gbapal.lz");
-const u32 gItemIcon_ThickClub[] = INCBIN_U32("graphics/items/icons/thick_club.4bpp.lz");
-const u32 gItemIconPalette_ThickClub[] = INCBIN_U32("graphics/items/icon_palettes/thick_club.gbapal.lz");
+// Misc. Key Items
-const u32 gItemIcon_Stick[] = INCBIN_U32("graphics/items/icons/stick.4bpp.lz");
-const u32 gItemIconPalette_Stick[] = INCBIN_U32("graphics/items/icon_palettes/stick.gbapal.lz");
-
-const u32 gItemIcon_Scarf[] = INCBIN_U32("graphics/items/icons/scarf.4bpp.lz");
-const u32 gItemIconPalette_RedScarf[] = INCBIN_U32("graphics/items/icon_palettes/red_scarf.gbapal.lz");
-const u32 gItemIconPalette_BlueScarf[] = INCBIN_U32("graphics/items/icon_palettes/blue_scarf.gbapal.lz");
-const u32 gItemIconPalette_PinkScarf[] = INCBIN_U32("graphics/items/icon_palettes/pink_scarf.gbapal.lz");
-const u32 gItemIconPalette_GreenScarf[] = INCBIN_U32("graphics/items/icon_palettes/green_scarf.gbapal.lz");
-const u32 gItemIconPalette_YellowScarf[] = INCBIN_U32("graphics/items/icon_palettes/yellow_scarf.gbapal.lz");
-
-// Key items
+const u32 gItemIcon_Bicycle[] = INCBIN_U32("graphics/items/icons/bicycle.4bpp.lz");
+const u32 gItemIconPalette_Bicycle[] = INCBIN_U32("graphics/items/icon_palettes/bicycle.gbapal.lz");
const u32 gItemIcon_MachBike[] = INCBIN_U32("graphics/items/icons/mach_bike.4bpp.lz");
const u32 gItemIconPalette_MachBike[] = INCBIN_U32("graphics/items/icon_palettes/mach_bike.gbapal.lz");
-const u32 gItemIcon_CoinCase[] = INCBIN_U32("graphics/items/icons/coin_case.4bpp.lz");
-const u32 gItemIconPalette_CoinCase[] = INCBIN_U32("graphics/items/icon_palettes/coin_case.gbapal.lz");
-
-const u32 gItemIcon_Itemfinder[] = INCBIN_U32("graphics/items/icons/itemfinder.4bpp.lz");
-const u32 gItemIconPalette_Itemfinder[] = INCBIN_U32("graphics/items/icon_palettes/itemfinder.gbapal.lz");
+const u32 gItemIcon_AcroBike[] = INCBIN_U32("graphics/items/icons/acro_bike.4bpp.lz");
+const u32 gItemIconPalette_AcroBike[] = INCBIN_U32("graphics/items/icon_palettes/acro_bike.gbapal.lz");
const u32 gItemIcon_OldRod[] = INCBIN_U32("graphics/items/icons/old_rod.4bpp.lz");
const u32 gItemIconPalette_OldRod[] = INCBIN_U32("graphics/items/icon_palettes/old_rod.gbapal.lz");
@@ -556,111 +1798,108 @@ const u32 gItemIconPalette_GoodRod[] = INCBIN_U32("graphics/items/icon_palettes/
const u32 gItemIcon_SuperRod[] = INCBIN_U32("graphics/items/icons/super_rod.4bpp.lz");
const u32 gItemIconPalette_SuperRod[] = INCBIN_U32("graphics/items/icon_palettes/super_rod.gbapal.lz");
-const u32 gItemIcon_SSTicket[] = INCBIN_U32("graphics/items/icons/ss_ticket.4bpp.lz");
-const u32 gItemIconPalette_SSTicket[] = INCBIN_U32("graphics/items/icon_palettes/ss_ticket.gbapal.lz");
+const u32 gItemIcon_DowsingMachine[] = INCBIN_U32("graphics/items/icons/dowsing_machine.4bpp.lz");
+const u32 gItemIconPalette_DowsingMachine[] = INCBIN_U32("graphics/items/icon_palettes/dowsing_machine.gbapal.lz");
-const u32 gItemIcon_ContestPass[] = INCBIN_U32("graphics/items/icons/contest_pass.4bpp.lz");
-const u32 gItemIconPalette_ContestPass[] = INCBIN_U32("graphics/items/icon_palettes/contest_pass.gbapal.lz");
+const u32 gItemIcon_TownMap[] = INCBIN_U32("graphics/items/icons/town_map.4bpp.lz");
+const u32 gItemIconPalette_TownMap[] = INCBIN_U32("graphics/items/icon_palettes/town_map.gbapal.lz");
+
+const u32 gItemIcon_VsSeeker[] = INCBIN_U32("graphics/items/icons/vs_seeker.4bpp.lz");
+const u32 gItemIconPalette_VsSeeker[] = INCBIN_U32("graphics/items/icon_palettes/vs_seeker.gbapal.lz");
+
+const u32 gItemIcon_TMCase[] = INCBIN_U32("graphics/items/icons/tm_case.4bpp.lz");
+const u32 gItemIconPalette_TMCase[] = INCBIN_U32("graphics/items/icon_palettes/tm_case.gbapal.lz");
+
+const u32 gItemIcon_BerryPouch[] = INCBIN_U32("graphics/items/icons/berry_pouch.4bpp.lz");
+const u32 gItemIconPalette_BerryPouch[] = INCBIN_U32("graphics/items/icon_palettes/berry_pouch.gbapal.lz");
+
+const u32 gItemIcon_PokemonBoxLink[] = INCBIN_U32("graphics/items/icons/pokemon_box_link.4bpp.lz");
+const u32 gItemIconPalette_PokemonBoxLink[] = INCBIN_U32("graphics/items/icon_palettes/pokemon_box_link.gbapal.lz");
+
+const u32 gItemIcon_CoinCase[] = INCBIN_U32("graphics/items/icons/coin_case.4bpp.lz");
+const u32 gItemIconPalette_CoinCase[] = INCBIN_U32("graphics/items/icon_palettes/coin_case.gbapal.lz");
+
+const u32 gItemIcon_PowderJar[] = INCBIN_U32("graphics/items/icons/powder_jar.4bpp.lz");
+const u32 gItemIconPalette_PowderJar[] = INCBIN_U32("graphics/items/icon_palettes/powder_jar.gbapal.lz");
const u32 gItemIcon_WailmerPail[] = INCBIN_U32("graphics/items/icons/wailmer_pail.4bpp.lz");
const u32 gItemIconPalette_WailmerPail[] = INCBIN_U32("graphics/items/icon_palettes/wailmer_pail.gbapal.lz");
-const u32 gItemIcon_DevonGoods[] = INCBIN_U32("graphics/items/icons/devon_goods.4bpp.lz");
-const u32 gItemIconPalette_DevonGoods[] = INCBIN_U32("graphics/items/icon_palettes/devon_goods.gbapal.lz");
-
-const u32 gItemIcon_SootSack[] = INCBIN_U32("graphics/items/icons/soot_sack.4bpp.lz");
-const u32 gItemIconPalette_SootSack[] = INCBIN_U32("graphics/items/icon_palettes/soot_sack.gbapal.lz");
-
-const u32 gItemIcon_BasementKey[] = INCBIN_U32("graphics/items/icons/basement_key.4bpp.lz");
-const u32 gItemIconPalette_OldKey[] = INCBIN_U32("graphics/items/icon_palettes/old_key.gbapal.lz");
-
-const u32 gItemIcon_AcroBike[] = INCBIN_U32("graphics/items/icons/acro_bike.4bpp.lz");
-const u32 gItemIconPalette_AcroBike[] = INCBIN_U32("graphics/items/icon_palettes/acro_bike.gbapal.lz");
+const u32 gItemIcon_PokeRadar[] = INCBIN_U32("graphics/items/icons/poke_radar.4bpp.lz");
+const u32 gItemIconPalette_PokeRadar[] = INCBIN_U32("graphics/items/icon_palettes/poke_radar.gbapal.lz");
const u32 gItemIcon_PokeblockCase[] = INCBIN_U32("graphics/items/icons/pokeblock_case.4bpp.lz");
const u32 gItemIconPalette_PokeblockCase[] = INCBIN_U32("graphics/items/icon_palettes/pokeblock_case.gbapal.lz");
-const u32 gItemIcon_Letter[] = INCBIN_U32("graphics/items/icons/letter.4bpp.lz");
-const u32 gItemIcon_EonTicket[] = INCBIN_U32("graphics/items/icons/eon_ticket.4bpp.lz");
+const u32 gItemIcon_SootSack[] = INCBIN_U32("graphics/items/icons/soot_sack.4bpp.lz");
+const u32 gItemIconPalette_SootSack[] = INCBIN_U32("graphics/items/icon_palettes/soot_sack.gbapal.lz");
+const u32 gItemIcon_PokeFlute[] = INCBIN_U32("graphics/items/icons/poke_flute.4bpp.lz");
+const u32 gItemIconPalette_PokeFlute[] = INCBIN_U32("graphics/items/icon_palettes/poke_flute.gbapal.lz");
+
+const u32 gItemIcon_FameChecker[] = INCBIN_U32("graphics/items/icons/fame_checker.4bpp.lz");
+const u32 gItemIconPalette_FameChecker[] = INCBIN_U32("graphics/items/icon_palettes/fame_checker.gbapal.lz");
+
+const u32 gItemIcon_TeachyTV[] = INCBIN_U32("graphics/items/icons/teachy_tv.4bpp.lz");
+const u32 gItemIconPalette_TeachyTV[] = INCBIN_U32("graphics/items/icon_palettes/teachy_tv.gbapal.lz");
+
+// Story Key Items
+
+const u32 gItemIcon_SSTicket[] = INCBIN_U32("graphics/items/icons/ss_ticket.4bpp.lz");
+const u32 gItemIconPalette_SSTicket[] = INCBIN_U32("graphics/items/icon_palettes/ss_ticket.gbapal.lz");
+
+const u32 gItemIcon_EonTicket[] = INCBIN_U32("graphics/items/icons/eon_ticket.4bpp.lz");
const u32 gItemIconPalette_EonTicket[] = INCBIN_U32("graphics/items/icon_palettes/eon_ticket.gbapal.lz");
-const u32 gItemIcon_Orb[] = INCBIN_U32("graphics/items/icons/orb.4bpp.lz");
-const u32 gItemIconPalette_RedOrb[] = INCBIN_U32("graphics/items/icon_palettes/red_orb.gbapal.lz");
-const u32 gItemIconPalette_BlueOrb[] = INCBIN_U32("graphics/items/icon_palettes/blue_orb.gbapal.lz");
+const u32 gItemIcon_MysticTicket[] = INCBIN_U32("graphics/items/icons/mystic_ticket.4bpp.lz");
+const u32 gItemIconPalette_MysticTicket[] = INCBIN_U32("graphics/items/icon_palettes/mystic_ticket.gbapal.lz");
-const u32 gItemIcon_Scanner[] = INCBIN_U32("graphics/items/icons/scanner.4bpp.lz");
-const u32 gItemIconPalette_Scanner[] = INCBIN_U32("graphics/items/icon_palettes/scanner.gbapal.lz");
+const u32 gItemIcon_AuroraTicket[] = INCBIN_U32("graphics/items/icons/aurora_ticket.4bpp.lz");
+const u32 gItemIconPalette_AuroraTicket[] = INCBIN_U32("graphics/items/icon_palettes/aurora_ticket.gbapal.lz");
+
+const u32 gItemIcon_OldSeaMap[] = INCBIN_U32("graphics/items/icons/old_sea_map.4bpp.lz");
+const u32 gItemIconPalette_OldSeaMap[] = INCBIN_U32("graphics/items/icon_palettes/old_sea_map.gbapal.lz");
+
+const u32 gItemIcon_Letter[] = INCBIN_U32("graphics/items/icons/letter.4bpp.lz");
+
+const u32 gItemIcon_DevonParts[] = INCBIN_U32("graphics/items/icons/devon_parts.4bpp.lz");
+const u32 gItemIconPalette_DevonParts[] = INCBIN_U32("graphics/items/icon_palettes/devon_parts.gbapal.lz");
const u32 gItemIcon_GoGoggles[] = INCBIN_U32("graphics/items/icons/go_goggles.4bpp.lz");
const u32 gItemIconPalette_GoGoggles[] = INCBIN_U32("graphics/items/icon_palettes/go_goggles.gbapal.lz");
-const u32 gItemIcon_Meteorite[] = INCBIN_U32("graphics/items/icons/meteorite.4bpp.lz");
-const u32 gItemIconPalette_Meteorite[] = INCBIN_U32("graphics/items/icon_palettes/meteorite.gbapal.lz");
-
-const u32 gItemIcon_Room1Key[] = INCBIN_U32("graphics/items/icons/room1_key.4bpp.lz");
-
-const u32 gItemIcon_Room2Key[] = INCBIN_U32("graphics/items/icons/room2_key.4bpp.lz");
-
-const u32 gItemIcon_Room4Key[] = INCBIN_U32("graphics/items/icons/room4_key.4bpp.lz");
-
-const u32 gItemIcon_Room6Key[] = INCBIN_U32("graphics/items/icons/room6_key.4bpp.lz");
-
-const u32 gItemIcon_StorageKey[] = INCBIN_U32("graphics/items/icons/storage_key.4bpp.lz");
-
-const u32 gItemIcon_RootFossil[] = INCBIN_U32("graphics/items/icons/root_fossil.4bpp.lz");
-const u32 gItemIconPalette_HoennFossil[] = INCBIN_U32("graphics/items/icon_palettes/hoenn_fossil.gbapal.lz");
-const u32 gItemIcon_ClawFossil[] = INCBIN_U32("graphics/items/icons/claw_fossil.4bpp.lz");
-
const u32 gItemIcon_DevonScope[] = INCBIN_U32("graphics/items/icons/devon_scope.4bpp.lz");
const u32 gItemIconPalette_DevonScope[] = INCBIN_U32("graphics/items/icon_palettes/devon_scope.gbapal.lz");
-// TMs/HMs
+const u32 gItemIcon_BasementKey[] = INCBIN_U32("graphics/items/icons/basement_key.4bpp.lz");
+const u32 gItemIconPalette_OldKey[] = INCBIN_U32("graphics/items/icon_palettes/old_key.gbapal.lz");
-const u32 gItemIcon_TM[] = INCBIN_U32("graphics/items/icons/tm.4bpp.lz");
+const u32 gItemIcon_Scanner[] = INCBIN_U32("graphics/items/icons/scanner.4bpp.lz");
+const u32 gItemIconPalette_Scanner[] = INCBIN_U32("graphics/items/icon_palettes/scanner.gbapal.lz");
-const u32 gItemIconPalette_FightingTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fighting_tm_hm.gbapal.lz");
+const u32 gItemIcon_StorageKey[] = INCBIN_U32("graphics/items/icons/storage_key.4bpp.lz");
-const u32 gItemIconPalette_DragonTMHM[] = INCBIN_U32("graphics/items/icon_palettes/dragon_tm_hm.gbapal.lz");
+const u32 gItemIcon_KeyToRoom1[] = INCBIN_U32("graphics/items/icons/key_to_room_1.4bpp.lz");
+const u32 gItemIconPalette_Key[] = INCBIN_U32("graphics/items/icon_palettes/key.gbapal.lz");
-const u32 gItemIconPalette_WaterTMHM[] = INCBIN_U32("graphics/items/icon_palettes/water_tm_hm.gbapal.lz");
+const u32 gItemIcon_KeyToRoom2[] = INCBIN_U32("graphics/items/icons/key_to_room_2.4bpp.lz");
-const u32 gItemIconPalette_PsychicTMHM[] = INCBIN_U32("graphics/items/icon_palettes/psychic_tm_hm.gbapal.lz");
+const u32 gItemIcon_KeyToRoom4[] = INCBIN_U32("graphics/items/icons/key_to_room_4.4bpp.lz");
-const u32 gItemIconPalette_NormalTMHM[] = INCBIN_U32("graphics/items/icon_palettes/normal_tm_hm.gbapal.lz");
+const u32 gItemIcon_KeyToRoom6[] = INCBIN_U32("graphics/items/icons/key_to_room_6.4bpp.lz");
-const u32 gItemIconPalette_PoisonTMHM[] = INCBIN_U32("graphics/items/icon_palettes/poison_tm_hm.gbapal.lz");
+const u32 gItemIcon_Meteorite[] = INCBIN_U32("graphics/items/icons/meteorite.4bpp.lz");
+const u32 gItemIconPalette_Meteorite[] = INCBIN_U32("graphics/items/icon_palettes/meteorite.gbapal.lz");
-const u32 gItemIconPalette_IceTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ice_tm_hm.gbapal.lz");
+const u32 gItemIcon_MagmaEmblem[] = INCBIN_U32("graphics/items/icons/magma_emblem.4bpp.lz");
+const u32 gItemIconPalette_MagmaEmblem[] = INCBIN_U32("graphics/items/icon_palettes/magma_emblem.gbapal.lz");
-const u32 gItemIconPalette_GrassTMHM[] = INCBIN_U32("graphics/items/icon_palettes/grass_tm_hm.gbapal.lz");
-
-const u32 gItemIconPalette_FireTMHM[] = INCBIN_U32("graphics/items/icon_palettes/fire_tm_hm.gbapal.lz");
-
-const u32 gItemIconPalette_DarkTMHM[] = INCBIN_U32("graphics/items/icon_palettes/dark_tm_hm.gbapal.lz");
-
-const u32 gItemIconPalette_SteelTMHM[] = INCBIN_U32("graphics/items/icon_palettes/steel_tm_hm.gbapal.lz");
-
-const u32 gItemIconPalette_ElectricTMHM[] = INCBIN_U32("graphics/items/icon_palettes/electric_tm_hm.gbapal.lz");
-
-const u32 gItemIconPalette_GroundTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ground_tm_hm.gbapal.lz");
-
-const u32 gItemIconPalette_GhostTMHM[] = INCBIN_U32("graphics/items/icon_palettes/ghost_tm_hm.gbapal.lz");
-
-const u32 gItemIconPalette_RockTMHM[] = INCBIN_U32("graphics/items/icon_palettes/rock_tm_hm.gbapal.lz");
-
-const u32 gItemIconPalette_FlyingTMHM[] = INCBIN_U32("graphics/items/icon_palettes/flying_tm_hm.gbapal.lz");
-
-const u32 gItemIcon_HM[] = INCBIN_U32("graphics/items/icons/hm.4bpp.lz");
-
-// FireRed/LeafGreen key items
+const u32 gItemIcon_ContestPass[] = INCBIN_U32("graphics/items/icons/contest_pass.4bpp.lz");
+const u32 gItemIconPalette_ContestPass[] = INCBIN_U32("graphics/items/icon_palettes/contest_pass.gbapal.lz");
const u32 gItemIcon_OaksParcel[] = INCBIN_U32("graphics/items/icons/oaks_parcel.4bpp.lz");
const u32 gItemIconPalette_OaksParcel[] = INCBIN_U32("graphics/items/icon_palettes/oaks_parcel.gbapal.lz");
-const u32 gItemIcon_PokeFlute[] = INCBIN_U32("graphics/items/icons/poke_flute.4bpp.lz");
-const u32 gItemIconPalette_PokeFlute[] = INCBIN_U32("graphics/items/icon_palettes/poke_flute.gbapal.lz");
-
const u32 gItemIcon_SecretKey[] = INCBIN_U32("graphics/items/icons/secret_key.4bpp.lz");
const u32 gItemIconPalette_SecretKey[] = INCBIN_U32("graphics/items/icon_palettes/secret_key.gbapal.lz");
@@ -670,43 +1909,14 @@ const u32 gItemIconPalette_BikeVoucher[] = INCBIN_U32("graphics/items/icon_palet
const u32 gItemIcon_GoldTeeth[] = INCBIN_U32("graphics/items/icons/gold_teeth.4bpp.lz");
const u32 gItemIconPalette_GoldTeeth[] = INCBIN_U32("graphics/items/icon_palettes/gold_teeth.gbapal.lz");
-const u32 gItemIcon_OldAmber[] = INCBIN_U32("graphics/items/icons/old_amber.4bpp.lz");
-const u32 gItemIconPalette_OldAmber[] = INCBIN_U32("graphics/items/icon_palettes/old_amber.gbapal.lz");
-
const u32 gItemIcon_CardKey[] = INCBIN_U32("graphics/items/icons/card_key.4bpp.lz");
const u32 gItemIconPalette_CardKey[] = INCBIN_U32("graphics/items/icon_palettes/card_key.gbapal.lz");
const u32 gItemIcon_LiftKey[] = INCBIN_U32("graphics/items/icons/lift_key.4bpp.lz");
-const u32 gItemIconPalette_Key[] = INCBIN_U32("graphics/items/icon_palettes/key.gbapal.lz");
-
-const u32 gItemIcon_HelixFossil[] = INCBIN_U32("graphics/items/icons/helix_fossil.4bpp.lz");
-const u32 gItemIconPalette_KantoFossil[] = INCBIN_U32("graphics/items/icon_palettes/kanto_fossil.gbapal.lz");
-const u32 gItemIcon_DomeFossil[] = INCBIN_U32("graphics/items/icons/dome_fossil.4bpp.lz");
const u32 gItemIcon_SilphScope[] = INCBIN_U32("graphics/items/icons/silph_scope.4bpp.lz");
const u32 gItemIconPalette_SilphScope[] = INCBIN_U32("graphics/items/icon_palettes/silph_scope.gbapal.lz");
-const u32 gItemIcon_Bicycle[] = INCBIN_U32("graphics/items/icons/bicycle.4bpp.lz");
-const u32 gItemIconPalette_Bicycle[] = INCBIN_U32("graphics/items/icon_palettes/bicycle.gbapal.lz");
-
-const u32 gItemIcon_TownMap[] = INCBIN_U32("graphics/items/icons/town_map.4bpp.lz");
-const u32 gItemIconPalette_TownMap[] = INCBIN_U32("graphics/items/icon_palettes/town_map.gbapal.lz");
-
-const u32 gItemIcon_VSSeeker[] = INCBIN_U32("graphics/items/icons/vs_seeker.4bpp.lz");
-const u32 gItemIconPalette_VSSeeker[] = INCBIN_U32("graphics/items/icon_palettes/vs_seeker.gbapal.lz");
-
-const u32 gItemIcon_FameChecker[] = INCBIN_U32("graphics/items/icons/fame_checker.4bpp.lz");
-const u32 gItemIconPalette_FameChecker[] = INCBIN_U32("graphics/items/icon_palettes/fame_checker.gbapal.lz");
-
-const u32 gItemIcon_TMCase[] = INCBIN_U32("graphics/items/icons/tm_case.4bpp.lz");
-const u32 gItemIconPalette_TMCase[] = INCBIN_U32("graphics/items/icon_palettes/tm_case.gbapal.lz");
-
-const u32 gItemIcon_BerryPouch[] = INCBIN_U32("graphics/items/icons/berry_pouch.4bpp.lz");
-const u32 gItemIconPalette_BerryPouch[] = INCBIN_U32("graphics/items/icon_palettes/berry_pouch.gbapal.lz");
-
-const u32 gItemIcon_TeachyTV[] = INCBIN_U32("graphics/items/icons/teachy_tv.4bpp.lz");
-const u32 gItemIconPalette_TeachyTV[] = INCBIN_U32("graphics/items/icon_palettes/teachy_tv.gbapal.lz");
-
const u32 gItemIcon_TriPass[] = INCBIN_U32("graphics/items/icons/tri_pass.4bpp.lz");
const u32 gItemIconPalette_TriPass[] = INCBIN_U32("graphics/items/icon_palettes/tri_pass.gbapal.lz");
@@ -716,23 +1926,7 @@ const u32 gItemIconPalette_RainbowPass[] = INCBIN_U32("graphics/items/icon_palet
const u32 gItemIcon_Tea[] = INCBIN_U32("graphics/items/icons/tea.4bpp.lz");
const u32 gItemIconPalette_Tea[] = INCBIN_U32("graphics/items/icon_palettes/tea.gbapal.lz");
-const u32 gItemIcon_MysticTicket[] = INCBIN_U32("graphics/items/icons/mystic_ticket.4bpp.lz");
-const u32 gItemIconPalette_MysticTicket[] = INCBIN_U32("graphics/items/icon_palettes/mystic_ticket.gbapal.lz");
-
-const u32 gItemIcon_AuroraTicket[] = INCBIN_U32("graphics/items/icons/aurora_ticket.4bpp.lz");
-const u32 gItemIconPalette_AuroraTicket[] = INCBIN_U32("graphics/items/icon_palettes/aurora_ticket.gbapal.lz");
-
-const u32 gItemIcon_PowderJar[] = INCBIN_U32("graphics/items/icons/powder_jar.4bpp.lz");
-const u32 gItemIconPalette_PowderJar[] = INCBIN_U32("graphics/items/icon_palettes/powder_jar.gbapal.lz");
-
-const u32 gItemIconPalette_Ruby[] = INCBIN_U32("graphics/items/icon_palettes/ruby.gbapal.lz");
const u32 gItemIcon_Gem[] = INCBIN_U32("graphics/items/icons/gem.4bpp.lz");
+const u32 gItemIconPalette_Ruby[] = INCBIN_U32("graphics/items/icon_palettes/ruby.gbapal.lz");
+
const u32 gItemIconPalette_Sapphire[] = INCBIN_U32("graphics/items/icon_palettes/sapphire.gbapal.lz");
-
-// Emerald-only key items
-
-const u32 gItemIcon_MagmaEmblem[] = INCBIN_U32("graphics/items/icons/magma_emblem.4bpp.lz");
-const u32 gItemIconPalette_MagmaEmblem[] = INCBIN_U32("graphics/items/icon_palettes/magma_emblem.gbapal.lz");
-
-const u32 gItemIcon_OldSeaMap[] = INCBIN_U32("graphics/items/icons/old_sea_map.4bpp.lz");
-const u32 gItemIconPalette_OldSeaMap[] = INCBIN_U32("graphics/items/icon_palettes/old_sea_map.gbapal.lz");
diff --git a/src/data/graphics/pokeballs.h b/src/data/graphics/pokeballs.h
index 8203fca538..44f47cde48 100644
--- a/src/data/graphics/pokeballs.h
+++ b/src/data/graphics/pokeballs.h
@@ -4,34 +4,79 @@ const u32 gBallPal_Poke[] = INCBIN_U32("graphics/balls/poke.gbapal.lz");
const u32 gBallGfx_Great[] = INCBIN_U32("graphics/balls/great.4bpp.lz");
const u32 gBallPal_Great[] = INCBIN_U32("graphics/balls/great.gbapal.lz");
-const u32 gBallGfx_Safari[] = INCBIN_U32("graphics/balls/safari.4bpp.lz");
-const u32 gBallPal_Safari[] = INCBIN_U32("graphics/balls/safari.gbapal.lz");
-
const u32 gBallGfx_Ultra[] = INCBIN_U32("graphics/balls/ultra.4bpp.lz");
const u32 gBallPal_Ultra[] = INCBIN_U32("graphics/balls/ultra.gbapal.lz");
const u32 gBallGfx_Master[] = INCBIN_U32("graphics/balls/master.4bpp.lz");
const u32 gBallPal_Master[] = INCBIN_U32("graphics/balls/master.gbapal.lz");
+const u32 gBallGfx_Premier[] = INCBIN_U32("graphics/balls/premier.4bpp.lz");
+const u32 gBallPal_Premier[] = INCBIN_U32("graphics/balls/premier.gbapal.lz");
+
+const u32 gBallGfx_Heal[] = INCBIN_U32("graphics/balls/heal.4bpp.lz");
+const u32 gBallPal_Heal[] = INCBIN_U32("graphics/balls/heal.gbapal.lz");
+
const u32 gBallGfx_Net[] = INCBIN_U32("graphics/balls/net.4bpp.lz");
const u32 gBallPal_Net[] = INCBIN_U32("graphics/balls/net.gbapal.lz");
-const u32 gBallGfx_Dive[] = INCBIN_U32("graphics/balls/dive.4bpp.lz");
-const u32 gBallPal_Dive[] = INCBIN_U32("graphics/balls/dive.gbapal.lz");
-
const u32 gBallGfx_Nest[] = INCBIN_U32("graphics/balls/nest.4bpp.lz");
const u32 gBallPal_Nest[] = INCBIN_U32("graphics/balls/nest.gbapal.lz");
-const u32 gBallGfx_Repeat[] = INCBIN_U32("graphics/balls/repeat.4bpp.lz");
-const u32 gBallPal_Repeat[] = INCBIN_U32("graphics/balls/repeat.gbapal.lz");
+const u32 gBallGfx_Dive[] = INCBIN_U32("graphics/balls/dive.4bpp.lz");
+const u32 gBallPal_Dive[] = INCBIN_U32("graphics/balls/dive.gbapal.lz");
+
+const u32 gBallGfx_Dusk[] = INCBIN_U32("graphics/balls/dusk.4bpp.lz");
+const u32 gBallPal_Dusk[] = INCBIN_U32("graphics/balls/dusk.gbapal.lz");
const u32 gBallGfx_Timer[] = INCBIN_U32("graphics/balls/timer.4bpp.lz");
const u32 gBallPal_Timer[] = INCBIN_U32("graphics/balls/timer.gbapal.lz");
+const u32 gBallGfx_Quick[] = INCBIN_U32("graphics/balls/quick.4bpp.lz");
+const u32 gBallPal_Quick[] = INCBIN_U32("graphics/balls/quick.gbapal.lz");
+
+const u32 gBallGfx_Repeat[] = INCBIN_U32("graphics/balls/repeat.4bpp.lz");
+const u32 gBallPal_Repeat[] = INCBIN_U32("graphics/balls/repeat.gbapal.lz");
+
const u32 gBallGfx_Luxury[] = INCBIN_U32("graphics/balls/luxury.4bpp.lz");
const u32 gBallPal_Luxury[] = INCBIN_U32("graphics/balls/luxury.gbapal.lz");
-const u32 gBallGfx_Premier[] = INCBIN_U32("graphics/balls/premier.4bpp.lz");
-const u32 gBallPal_Premier[] = INCBIN_U32("graphics/balls/premier.gbapal.lz");
+const u32 gBallGfx_Level[] = INCBIN_U32("graphics/balls/level.4bpp.lz");
+const u32 gBallPal_Level[] = INCBIN_U32("graphics/balls/level.gbapal.lz");
+
+const u32 gBallGfx_Lure[] = INCBIN_U32("graphics/balls/lure.4bpp.lz");
+const u32 gBallPal_Lure[] = INCBIN_U32("graphics/balls/lure.gbapal.lz");
+
+const u32 gBallGfx_Moon[] = INCBIN_U32("graphics/balls/moon.4bpp.lz");
+const u32 gBallPal_Moon[] = INCBIN_U32("graphics/balls/moon.gbapal.lz");
+
+const u32 gBallGfx_Friend[] = INCBIN_U32("graphics/balls/friend.4bpp.lz");
+const u32 gBallPal_Friend[] = INCBIN_U32("graphics/balls/friend.gbapal.lz");
+
+const u32 gBallGfx_Love[] = INCBIN_U32("graphics/balls/love.4bpp.lz");
+const u32 gBallPal_Love[] = INCBIN_U32("graphics/balls/love.gbapal.lz");
+
+const u32 gBallGfx_Fast[] = INCBIN_U32("graphics/balls/fast.4bpp.lz");
+const u32 gBallPal_Fast[] = INCBIN_U32("graphics/balls/fast.gbapal.lz");
+
+const u32 gBallGfx_Heavy[] = INCBIN_U32("graphics/balls/heavy.4bpp.lz");
+const u32 gBallPal_Heavy[] = INCBIN_U32("graphics/balls/heavy.gbapal.lz");
+
+const u32 gBallGfx_Dream[] = INCBIN_U32("graphics/balls/dream.4bpp.lz");
+const u32 gBallPal_Dream[] = INCBIN_U32("graphics/balls/dream.gbapal.lz");
+
+const u32 gBallGfx_Safari[] = INCBIN_U32("graphics/balls/safari.4bpp.lz");
+const u32 gBallPal_Safari[] = INCBIN_U32("graphics/balls/safari.gbapal.lz");
+
+const u32 gBallGfx_Sport[] = INCBIN_U32("graphics/balls/sport.4bpp.lz");
+const u32 gBallPal_Sport[] = INCBIN_U32("graphics/balls/sport.gbapal.lz");
+
+const u32 gBallGfx_Park[] = INCBIN_U32("graphics/balls/park.4bpp.lz");
+const u32 gBallPal_Park[] = INCBIN_U32("graphics/balls/park.gbapal.lz");
+
+const u32 gBallGfx_Beast[] = INCBIN_U32("graphics/balls/beast.4bpp.lz");
+const u32 gBallPal_Beast[] = INCBIN_U32("graphics/balls/beast.gbapal.lz");
+
+const u32 gBallGfx_Cherish[] = INCBIN_U32("graphics/balls/cherish.4bpp.lz");
+const u32 gBallPal_Cherish[] = INCBIN_U32("graphics/balls/cherish.gbapal.lz");
const u32 gOpenPokeballGfx[] = INCBIN_U32("graphics/balls/open.4bpp.lz");
diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h
index 1c41b1331f..afb9ecd9a7 100644
--- a/src/data/graphics/pokemon.h
+++ b/src/data/graphics/pokemon.h
@@ -387,6 +387,7 @@ const u32 gMonFrontPic_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/anim_fro
const u32 gMonFrontPic_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/anim_front.4bpp.lz");
const u32 gMonFrontPic_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/anim_front.4bpp.lz");
const u32 gMonFrontPic_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/anim_front.4bpp.lz");
+#if P_NEW_POKEMON == TRUE
const u32 gMonFrontPic_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/anim_front.4bpp.lz");
const u32 gMonFrontPic_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/anim_front.4bpp.lz");
const u32 gMonFrontPic_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/anim_front.4bpp.lz");
@@ -920,74 +921,74 @@ const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.
//const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz");
const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz");
//const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz");
-const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/mega_venusaur/front.4bpp.lz");
-const u32 gMonFrontPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/mega_charizard_x/front.4bpp.lz");
-const u32 gMonFrontPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/mega_charizard_y/front.4bpp.lz");
-const u32 gMonFrontPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/mega_blastoise/front.4bpp.lz");
-const u32 gMonFrontPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/mega_beedrill/front.4bpp.lz");
-const u32 gMonFrontPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/mega_pidgeot/front.4bpp.lz");
-const u32 gMonFrontPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/mega_alakazam/front.4bpp.lz");
-const u32 gMonFrontPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/mega_slowbro/front.4bpp.lz");
-const u32 gMonFrontPic_GengarMega[] = INCBIN_U32("graphics/pokemon/mega_gengar/front.4bpp.lz");
-const u32 gMonFrontPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/mega_kangaskhan/front.4bpp.lz");
-const u32 gMonFrontPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/mega_pinsir/front.4bpp.lz");
-const u32 gMonFrontPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/mega_gyarados/front.4bpp.lz");
-const u32 gMonFrontPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/mega_aerodactyl/front.4bpp.lz");
-const u32 gMonFrontPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_x/front.4bpp.lz");
-const u32 gMonFrontPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_y/front.4bpp.lz");
-const u32 gMonFrontPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/mega_ampharos/front.4bpp.lz");
-const u32 gMonFrontPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/mega_steelix/front.4bpp.lz");
-const u32 gMonFrontPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/mega_scizor/front.4bpp.lz");
-const u32 gMonFrontPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/mega_heracross/front.4bpp.lz");
-const u32 gMonFrontPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/mega_houndoom/front.4bpp.lz");
-const u32 gMonFrontPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/mega_tyranitar/front.4bpp.lz");
-const u32 gMonFrontPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/mega_sceptile/front.4bpp.lz");
-const u32 gMonFrontPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/mega_blaziken/front.4bpp.lz");
-const u32 gMonFrontPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/mega_swampert/front.4bpp.lz");
-const u32 gMonFrontPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/mega_gardevoir/front.4bpp.lz");
-const u32 gMonFrontPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/mega_sableye/front.4bpp.lz");
-const u32 gMonFrontPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mega_mawile/front.4bpp.lz");
-const u32 gMonFrontPic_AggronMega[] = INCBIN_U32("graphics/pokemon/mega_aggron/front.4bpp.lz");
-const u32 gMonFrontPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/mega_medicham/front.4bpp.lz");
-const u32 gMonFrontPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/mega_manectric/front.4bpp.lz");
-const u32 gMonFrontPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/mega_sharpedo/front.4bpp.lz");
-const u32 gMonFrontPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/mega_camerupt/front.4bpp.lz");
-const u32 gMonFrontPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/mega_altaria/front.4bpp.lz");
-const u32 gMonFrontPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/mega_banette/front.4bpp.lz");
-const u32 gMonFrontPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/mega_absol/front.4bpp.lz");
-const u32 gMonFrontPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/mega_glalie/front.4bpp.lz");
-const u32 gMonFrontPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/mega_salamence/front.4bpp.lz");
-const u32 gMonFrontPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/mega_metagross/front.4bpp.lz");
-const u32 gMonFrontPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/mega_latias/front.4bpp.lz");
-const u32 gMonFrontPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/mega_latios/front.4bpp.lz");
-const u32 gMonFrontPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/mega_lopunny/front.4bpp.lz");
-const u32 gMonFrontPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/mega_garchomp/front.4bpp.lz");
-const u32 gMonFrontPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/mega_lucario/front.4bpp.lz");
-const u32 gMonFrontPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/mega_abomasnow/front.4bpp.lz");
-const u32 gMonFrontPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/mega_gallade/front.4bpp.lz");
-const u32 gMonFrontPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/mega_audino/front.4bpp.lz");
-const u32 gMonFrontPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/mega_diancie/front.4bpp.lz");
-const u32 gMonFrontPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/mega_rayquaza/front.4bpp.lz");
-const u32 gMonFrontPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/primal_kyogre/front.4bpp.lz");
-const u32 gMonFrontPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/primal_groudon/front.4bpp.lz");
-const u32 gMonFrontPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/alolan_rattata/front.4bpp.lz");
-const u32 gMonFrontPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raticate/front.4bpp.lz");
-const u32 gMonFrontPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raichu/front.4bpp.lz");
-const u32 gMonFrontPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandshrew/front.4bpp.lz");
-const u32 gMonFrontPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandslash/front.4bpp.lz");
-const u32 gMonFrontPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/alolan_vulpix/front.4bpp.lz");
-const u32 gMonFrontPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/alolan_ninetales/front.4bpp.lz");
-const u32 gMonFrontPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/alolan_diglett/front.4bpp.lz");
-const u32 gMonFrontPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/alolan_dugtrio/front.4bpp.lz");
-const u32 gMonFrontPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/alolan_meowth/front.4bpp.lz");
-const u32 gMonFrontPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/alolan_persian/front.4bpp.lz");
-const u32 gMonFrontPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/alolan_geodude/front.4bpp.lz");
-const u32 gMonFrontPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_graveler/front.4bpp.lz");
-const u32 gMonFrontPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/alolan_golem/front.4bpp.lz");
-const u32 gMonFrontPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_grimer/front.4bpp.lz");
-const u32 gMonFrontPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/alolan_muk/front.4bpp.lz");
-const u32 gMonFrontPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/alolan_exeggutor/front.4bpp.lz");
-const u32 gMonFrontPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/alolan_marowak/front.4bpp.lz");
+const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/front.4bpp.lz");
+const u32 gMonFrontPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/front.4bpp.lz");
+const u32 gMonFrontPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/front.4bpp.lz");
+const u32 gMonFrontPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/front.4bpp.lz");
+const u32 gMonFrontPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/front.4bpp.lz");
+const u32 gMonFrontPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/front.4bpp.lz");
+const u32 gMonFrontPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/front.4bpp.lz");
+const u32 gMonFrontPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/front.4bpp.lz");
+const u32 gMonFrontPic_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/front.4bpp.lz");
+const u32 gMonFrontPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/front.4bpp.lz");
+const u32 gMonFrontPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/front.4bpp.lz");
+const u32 gMonFrontPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/front.4bpp.lz");
+const u32 gMonFrontPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/front.4bpp.lz");
+const u32 gMonFrontPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/front.4bpp.lz");
+const u32 gMonFrontPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/front.4bpp.lz");
+const u32 gMonFrontPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/front.4bpp.lz");
+const u32 gMonFrontPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/front.4bpp.lz");
+const u32 gMonFrontPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/front.4bpp.lz");
+const u32 gMonFrontPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/front.4bpp.lz");
+const u32 gMonFrontPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/front.4bpp.lz");
+const u32 gMonFrontPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/front.4bpp.lz");
+const u32 gMonFrontPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/front.4bpp.lz");
+const u32 gMonFrontPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/front.4bpp.lz");
+const u32 gMonFrontPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/front.4bpp.lz");
+const u32 gMonFrontPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/front.4bpp.lz");
+const u32 gMonFrontPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/front.4bpp.lz");
+const u32 gMonFrontPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/front.4bpp.lz");
+const u32 gMonFrontPic_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/front.4bpp.lz");
+const u32 gMonFrontPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/front.4bpp.lz");
+const u32 gMonFrontPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/front.4bpp.lz");
+const u32 gMonFrontPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/front.4bpp.lz");
+const u32 gMonFrontPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/front.4bpp.lz");
+const u32 gMonFrontPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/front.4bpp.lz");
+const u32 gMonFrontPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/front.4bpp.lz");
+const u32 gMonFrontPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/front.4bpp.lz");
+const u32 gMonFrontPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/front.4bpp.lz");
+const u32 gMonFrontPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/front.4bpp.lz");
+const u32 gMonFrontPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/front.4bpp.lz");
+const u32 gMonFrontPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/front.4bpp.lz");
+const u32 gMonFrontPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/front.4bpp.lz");
+const u32 gMonFrontPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/front.4bpp.lz");
+const u32 gMonFrontPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/front.4bpp.lz");
+const u32 gMonFrontPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/front.4bpp.lz");
+const u32 gMonFrontPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/front.4bpp.lz");
+const u32 gMonFrontPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/front.4bpp.lz");
+const u32 gMonFrontPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/front.4bpp.lz");
+const u32 gMonFrontPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/front.4bpp.lz");
+const u32 gMonFrontPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/front.4bpp.lz");
+const u32 gMonFrontPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/front.4bpp.lz");
+const u32 gMonFrontPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/front.4bpp.lz");
+const u32 gMonFrontPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/front.4bpp.lz");
+const u32 gMonFrontPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/front.4bpp.lz");
const u32 gMonFrontPic_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/front.4bpp.lz");
const u32 gMonFrontPic_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/front.4bpp.lz");
const u32 gMonFrontPic_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/front.4bpp.lz");
@@ -1038,6 +1039,7 @@ const u32 gMonFrontPic_PikachuAlolaCap[] = INCBIN_U32("graphics/pokemon/pikachu/
const u32 gMonFrontPic_PikachuPartnerCap[] = INCBIN_U32("graphics/pokemon/pikachu/partner_cap/front.4bpp.lz");
const u32 gMonFrontPic_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/front.4bpp.lz");
const u32 gMonFrontPic_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/front.4bpp.lz");
+#endif
const u32 gMonFrontPic_UnownB[] = INCBIN_U32("graphics/pokemon/unown/b/anim_front.4bpp.lz");
const u32 gMonFrontPic_UnownC[] = INCBIN_U32("graphics/pokemon/unown/c/anim_front.4bpp.lz");
const u32 gMonFrontPic_UnownD[] = INCBIN_U32("graphics/pokemon/unown/d/anim_front.4bpp.lz");
@@ -1071,6 +1073,7 @@ const u32 gMonFrontPic_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/s
const u32 gMonFrontPic_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/anim_front.4bpp.lz");
const u32 gMonFrontPic_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/anim_front.4bpp.lz");
const u32 gMonFrontPic_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/anim_front.4bpp.lz");
+#if P_NEW_POKEMON == TRUE
const u32 gMonFrontPic_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/anim_front.4bpp.lz");
const u32 gMonFrontPic_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/anim_front.4bpp.lz");
const u32 gMonFrontPic_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/anim_front.4bpp.lz");
@@ -1177,6 +1180,7 @@ const u32 gMonFrontPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/
const u32 gMonFrontPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/front.4bpp.lz");
const u32 gMonFrontPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/front.4bpp.lz");
const u32 gMonFrontPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/front.4bpp.lz");
+#endif
const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz");
const u32 gMonBackPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/back.4bpp.lz");
@@ -1568,6 +1572,7 @@ const u32 gMonBackPic_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/back.4bpp
const u32 gMonBackPic_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/back.4bpp.lz");
const u32 gMonBackPic_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/back.4bpp.lz");
const u32 gMonBackPic_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/back.4bpp.lz");
+#if P_NEW_POKEMON == TRUE
const u32 gMonBackPic_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/back.4bpp.lz");
const u32 gMonBackPic_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/back.4bpp.lz");
const u32 gMonBackPic_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/back.4bpp.lz");
@@ -2100,74 +2105,74 @@ const u32 gMonBackPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/back.4b
//const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz");
const u32 gMonBackPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/back.4bpp.lz");
//const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz");
-const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/mega_venusaur/back.4bpp.lz");
-const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/mega_charizard_x/back.4bpp.lz");
-const u32 gMonBackPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/mega_charizard_y/back.4bpp.lz");
-const u32 gMonBackPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/mega_blastoise/back.4bpp.lz");
-const u32 gMonBackPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/mega_beedrill/back.4bpp.lz");
-const u32 gMonBackPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/mega_pidgeot/back.4bpp.lz");
-const u32 gMonBackPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/mega_alakazam/back.4bpp.lz");
-const u32 gMonBackPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/mega_slowbro/back.4bpp.lz");
-const u32 gMonBackPic_GengarMega[] = INCBIN_U32("graphics/pokemon/mega_gengar/back.4bpp.lz");
-const u32 gMonBackPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/mega_kangaskhan/back.4bpp.lz");
-const u32 gMonBackPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/mega_pinsir/back.4bpp.lz");
-const u32 gMonBackPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/mega_gyarados/back.4bpp.lz");
-const u32 gMonBackPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/mega_aerodactyl/back.4bpp.lz");
-const u32 gMonBackPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_x/back.4bpp.lz");
-const u32 gMonBackPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_y/back.4bpp.lz");
-const u32 gMonBackPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/mega_ampharos/back.4bpp.lz");
-const u32 gMonBackPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/mega_steelix/back.4bpp.lz");
-const u32 gMonBackPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/mega_scizor/back.4bpp.lz");
-const u32 gMonBackPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/mega_heracross/back.4bpp.lz");
-const u32 gMonBackPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/mega_houndoom/back.4bpp.lz");
-const u32 gMonBackPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/mega_tyranitar/back.4bpp.lz");
-const u32 gMonBackPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/mega_sceptile/back.4bpp.lz");
-const u32 gMonBackPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/mega_blaziken/back.4bpp.lz");
-const u32 gMonBackPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/mega_swampert/back.4bpp.lz");
-const u32 gMonBackPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/mega_gardevoir/back.4bpp.lz");
-const u32 gMonBackPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/mega_sableye/back.4bpp.lz");
-const u32 gMonBackPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mega_mawile/back.4bpp.lz");
-const u32 gMonBackPic_AggronMega[] = INCBIN_U32("graphics/pokemon/mega_aggron/back.4bpp.lz");
-const u32 gMonBackPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/mega_medicham/back.4bpp.lz");
-const u32 gMonBackPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/mega_manectric/back.4bpp.lz");
-const u32 gMonBackPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/mega_sharpedo/back.4bpp.lz");
-const u32 gMonBackPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/mega_camerupt/back.4bpp.lz");
-const u32 gMonBackPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/mega_altaria/back.4bpp.lz");
-const u32 gMonBackPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/mega_banette/back.4bpp.lz");
-const u32 gMonBackPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/mega_absol/back.4bpp.lz");
-const u32 gMonBackPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/mega_glalie/back.4bpp.lz");
-const u32 gMonBackPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/mega_salamence/back.4bpp.lz");
-const u32 gMonBackPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/mega_metagross/back.4bpp.lz");
-const u32 gMonBackPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/mega_latias/back.4bpp.lz");
-const u32 gMonBackPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/mega_latios/back.4bpp.lz");
-const u32 gMonBackPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/mega_lopunny/back.4bpp.lz");
-const u32 gMonBackPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/mega_garchomp/back.4bpp.lz");
-const u32 gMonBackPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/mega_lucario/back.4bpp.lz");
-const u32 gMonBackPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/mega_abomasnow/back.4bpp.lz");
-const u32 gMonBackPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/mega_gallade/back.4bpp.lz");
-const u32 gMonBackPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/mega_audino/back.4bpp.lz");
-const u32 gMonBackPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/mega_diancie/back.4bpp.lz");
-const u32 gMonBackPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/mega_rayquaza/back.4bpp.lz");
-const u32 gMonBackPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/primal_kyogre/back.4bpp.lz");
-const u32 gMonBackPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/primal_groudon/back.4bpp.lz");
-const u32 gMonBackPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/alolan_rattata/back.4bpp.lz");
-const u32 gMonBackPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raticate/back.4bpp.lz");
-const u32 gMonBackPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raichu/back.4bpp.lz");
-const u32 gMonBackPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandshrew/back.4bpp.lz");
-const u32 gMonBackPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandslash/back.4bpp.lz");
-const u32 gMonBackPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/alolan_vulpix/back.4bpp.lz");
-const u32 gMonBackPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/alolan_ninetales/back.4bpp.lz");
-const u32 gMonBackPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/alolan_diglett/back.4bpp.lz");
-const u32 gMonBackPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/alolan_dugtrio/back.4bpp.lz");
-const u32 gMonBackPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/alolan_meowth/back.4bpp.lz");
-const u32 gMonBackPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/alolan_persian/back.4bpp.lz");
-const u32 gMonBackPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/alolan_geodude/back.4bpp.lz");
-const u32 gMonBackPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_graveler/back.4bpp.lz");
-const u32 gMonBackPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/alolan_golem/back.4bpp.lz");
-const u32 gMonBackPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_grimer/back.4bpp.lz");
-const u32 gMonBackPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/alolan_muk/back.4bpp.lz");
-const u32 gMonBackPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/alolan_exeggutor/back.4bpp.lz");
-const u32 gMonBackPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/alolan_marowak/back.4bpp.lz");
+const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/back.4bpp.lz");
+const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/back.4bpp.lz");
+const u32 gMonBackPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/back.4bpp.lz");
+const u32 gMonBackPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/back.4bpp.lz");
+const u32 gMonBackPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/back.4bpp.lz");
+const u32 gMonBackPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/back.4bpp.lz");
+const u32 gMonBackPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/back.4bpp.lz");
+const u32 gMonBackPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/back.4bpp.lz");
+const u32 gMonBackPic_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/back.4bpp.lz");
+const u32 gMonBackPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/back.4bpp.lz");
+const u32 gMonBackPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/back.4bpp.lz");
+const u32 gMonBackPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/back.4bpp.lz");
+const u32 gMonBackPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/back.4bpp.lz");
+const u32 gMonBackPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/back.4bpp.lz");
+const u32 gMonBackPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/back.4bpp.lz");
+const u32 gMonBackPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/back.4bpp.lz");
+const u32 gMonBackPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/back.4bpp.lz");
+const u32 gMonBackPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/back.4bpp.lz");
+const u32 gMonBackPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/back.4bpp.lz");
+const u32 gMonBackPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/back.4bpp.lz");
+const u32 gMonBackPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/back.4bpp.lz");
+const u32 gMonBackPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/back.4bpp.lz");
+const u32 gMonBackPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/back.4bpp.lz");
+const u32 gMonBackPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/back.4bpp.lz");
+const u32 gMonBackPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/back.4bpp.lz");
+const u32 gMonBackPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/back.4bpp.lz");
+const u32 gMonBackPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/back.4bpp.lz");
+const u32 gMonBackPic_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/back.4bpp.lz");
+const u32 gMonBackPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/back.4bpp.lz");
+const u32 gMonBackPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/back.4bpp.lz");
+const u32 gMonBackPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/back.4bpp.lz");
+const u32 gMonBackPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/back.4bpp.lz");
+const u32 gMonBackPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/back.4bpp.lz");
+const u32 gMonBackPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/back.4bpp.lz");
+const u32 gMonBackPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/back.4bpp.lz");
+const u32 gMonBackPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/back.4bpp.lz");
+const u32 gMonBackPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/back.4bpp.lz");
+const u32 gMonBackPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/back.4bpp.lz");
+const u32 gMonBackPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/back.4bpp.lz");
+const u32 gMonBackPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/back.4bpp.lz");
+const u32 gMonBackPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/back.4bpp.lz");
+const u32 gMonBackPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/back.4bpp.lz");
+const u32 gMonBackPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/back.4bpp.lz");
+const u32 gMonBackPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/back.4bpp.lz");
+const u32 gMonBackPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/back.4bpp.lz");
+const u32 gMonBackPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/back.4bpp.lz");
+const u32 gMonBackPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/back.4bpp.lz");
+const u32 gMonBackPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/back.4bpp.lz");
+const u32 gMonBackPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/back.4bpp.lz");
+const u32 gMonBackPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/back.4bpp.lz");
+const u32 gMonBackPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/back.4bpp.lz");
+const u32 gMonBackPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/back.4bpp.lz");
+const u32 gMonBackPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/back.4bpp.lz");
+const u32 gMonBackPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/back.4bpp.lz");
+const u32 gMonBackPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/back.4bpp.lz");
+const u32 gMonBackPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/back.4bpp.lz");
+const u32 gMonBackPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/back.4bpp.lz");
+const u32 gMonBackPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/back.4bpp.lz");
+const u32 gMonBackPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/back.4bpp.lz");
+const u32 gMonBackPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/back.4bpp.lz");
+const u32 gMonBackPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/back.4bpp.lz");
+const u32 gMonBackPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/back.4bpp.lz");
+const u32 gMonBackPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/back.4bpp.lz");
+const u32 gMonBackPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/back.4bpp.lz");
+const u32 gMonBackPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/back.4bpp.lz");
+const u32 gMonBackPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/back.4bpp.lz");
+const u32 gMonBackPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/back.4bpp.lz");
+const u32 gMonBackPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/back.4bpp.lz");
const u32 gMonBackPic_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/back.4bpp.lz");
const u32 gMonBackPic_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/back.4bpp.lz");
const u32 gMonBackPic_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/back.4bpp.lz");
@@ -2218,6 +2223,7 @@ const u32 gMonBackPic_PikachuAlolaCap[] = INCBIN_U32("graphics/pokemon/pikachu/a
const u32 gMonBackPic_PikachuPartnerCap[] = INCBIN_U32("graphics/pokemon/pikachu/partner_cap/back.4bpp.lz");
const u32 gMonBackPic_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/back.4bpp.lz");
const u32 gMonBackPic_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/back.4bpp.lz");
+#endif
const u32 gMonBackPic_UnownB[] = INCBIN_U32("graphics/pokemon/unown/b/back.4bpp.lz");
const u32 gMonBackPic_UnownC[] = INCBIN_U32("graphics/pokemon/unown/c/back.4bpp.lz");
const u32 gMonBackPic_UnownD[] = INCBIN_U32("graphics/pokemon/unown/d/back.4bpp.lz");
@@ -2251,6 +2257,7 @@ const u32 gMonBackPic_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/sn
const u32 gMonBackPic_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/back.4bpp.lz");
const u32 gMonBackPic_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/back.4bpp.lz");
const u32 gMonBackPic_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/back.4bpp.lz");
+#if P_NEW_POKEMON == TRUE
const u32 gMonBackPic_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/back.4bpp.lz");
const u32 gMonBackPic_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/back.4bpp.lz");
const u32 gMonBackPic_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/back.4bpp.lz");
@@ -2357,6 +2364,7 @@ const u32 gMonBackPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u
const u32 gMonBackPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/back.4bpp.lz");
const u32 gMonBackPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/back.4bpp.lz");
const u32 gMonBackPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/back.4bpp.lz");
+#endif
const u32 gMonPalette_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/normal.gbapal.lz");
const u32 gMonPalette_DoubleQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/double/normal.gbapal.lz");
@@ -2746,6 +2754,7 @@ const u32 gMonPalette_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/normal.gb
const u32 gMonPalette_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/normal.gbapal.lz");
const u32 gMonPalette_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/normal.gbapal.lz");
const u32 gMonPalette_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/normal.gbapal.lz");
+#if P_NEW_POKEMON == TRUE
const u32 gMonPalette_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/normal.gbapal.lz");
const u32 gMonPalette_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/normal.gbapal.lz");
const u32 gMonPalette_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/normal.gbapal.lz");
@@ -3272,74 +3281,74 @@ const u32 gMonPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/normal.
//const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz");
const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz");
//const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz");
-const u32 gMonPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/mega_venusaur/normal.gbapal.lz");
-const u32 gMonPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/mega_charizard_x/normal.gbapal.lz");
-const u32 gMonPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/mega_charizard_y/normal.gbapal.lz");
-const u32 gMonPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/mega_blastoise/normal.gbapal.lz");
-const u32 gMonPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/mega_beedrill/normal.gbapal.lz");
-const u32 gMonPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/mega_pidgeot/normal.gbapal.lz");
-const u32 gMonPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/mega_alakazam/normal.gbapal.lz");
-const u32 gMonPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/mega_slowbro/normal.gbapal.lz");
-const u32 gMonPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/mega_gengar/normal.gbapal.lz");
-const u32 gMonPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/mega_kangaskhan/normal.gbapal.lz");
-const u32 gMonPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/mega_pinsir/normal.gbapal.lz");
-const u32 gMonPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/mega_gyarados/normal.gbapal.lz");
-const u32 gMonPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/mega_aerodactyl/normal.gbapal.lz");
-const u32 gMonPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_x/normal.gbapal.lz");
-const u32 gMonPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_y/normal.gbapal.lz");
-const u32 gMonPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/mega_ampharos/normal.gbapal.lz");
-const u32 gMonPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/mega_steelix/normal.gbapal.lz");
-const u32 gMonPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/mega_scizor/normal.gbapal.lz");
-const u32 gMonPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/mega_heracross/normal.gbapal.lz");
-const u32 gMonPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/mega_houndoom/normal.gbapal.lz");
-const u32 gMonPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/mega_tyranitar/normal.gbapal.lz");
-const u32 gMonPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/mega_sceptile/normal.gbapal.lz");
-const u32 gMonPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/mega_blaziken/normal.gbapal.lz");
-const u32 gMonPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/mega_swampert/normal.gbapal.lz");
-const u32 gMonPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/mega_gardevoir/normal.gbapal.lz");
-const u32 gMonPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/mega_sableye/normal.gbapal.lz");
-const u32 gMonPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mega_mawile/normal.gbapal.lz");
-const u32 gMonPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/mega_aggron/normal.gbapal.lz");
-const u32 gMonPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/mega_medicham/normal.gbapal.lz");
-const u32 gMonPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/mega_manectric/normal.gbapal.lz");
-const u32 gMonPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/mega_sharpedo/normal.gbapal.lz");
-const u32 gMonPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/mega_camerupt/normal.gbapal.lz");
-const u32 gMonPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/mega_altaria/normal.gbapal.lz");
-const u32 gMonPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/mega_banette/normal.gbapal.lz");
-const u32 gMonPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/mega_absol/normal.gbapal.lz");
-const u32 gMonPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/mega_glalie/normal.gbapal.lz");
-const u32 gMonPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/mega_salamence/normal.gbapal.lz");
-const u32 gMonPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/mega_metagross/normal.gbapal.lz");
-const u32 gMonPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/mega_latias/normal.gbapal.lz");
-const u32 gMonPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/mega_latios/normal.gbapal.lz");
-const u32 gMonPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/mega_lopunny/normal.gbapal.lz");
-const u32 gMonPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/mega_garchomp/normal.gbapal.lz");
-const u32 gMonPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/mega_lucario/normal.gbapal.lz");
-const u32 gMonPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/mega_abomasnow/normal.gbapal.lz");
-const u32 gMonPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/mega_gallade/normal.gbapal.lz");
-const u32 gMonPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/mega_audino/normal.gbapal.lz");
-const u32 gMonPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/mega_diancie/normal.gbapal.lz");
-const u32 gMonPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/mega_rayquaza/normal.gbapal.lz");
-const u32 gMonPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/primal_kyogre/normal.gbapal.lz");
-const u32 gMonPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/primal_groudon/normal.gbapal.lz");
-const u32 gMonPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/alolan_rattata/normal.gbapal.lz");
-const u32 gMonPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raticate/normal.gbapal.lz");
-const u32 gMonPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raichu/normal.gbapal.lz");
-const u32 gMonPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandshrew/normal.gbapal.lz");
-const u32 gMonPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandslash/normal.gbapal.lz");
-const u32 gMonPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/alolan_vulpix/normal.gbapal.lz");
-const u32 gMonPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/alolan_ninetales/normal.gbapal.lz");
-const u32 gMonPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/alolan_diglett/normal.gbapal.lz");
-const u32 gMonPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/alolan_dugtrio/normal.gbapal.lz");
-const u32 gMonPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/alolan_meowth/normal.gbapal.lz");
-const u32 gMonPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/alolan_persian/normal.gbapal.lz");
-const u32 gMonPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/alolan_geodude/normal.gbapal.lz");
-const u32 gMonPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_graveler/normal.gbapal.lz");
-const u32 gMonPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/alolan_golem/normal.gbapal.lz");
-const u32 gMonPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_grimer/normal.gbapal.lz");
-const u32 gMonPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/alolan_muk/normal.gbapal.lz");
-const u32 gMonPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/alolan_exeggutor/normal.gbapal.lz");
-const u32 gMonPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/alolan_marowak/normal.gbapal.lz");
+const u32 gMonPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/normal.gbapal.lz");
+const u32 gMonPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/normal.gbapal.lz");
+const u32 gMonPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/normal.gbapal.lz");
+const u32 gMonPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/normal.gbapal.lz");
+const u32 gMonPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/normal.gbapal.lz");
+const u32 gMonPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/normal.gbapal.lz");
+const u32 gMonPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/normal.gbapal.lz");
+const u32 gMonPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/normal.gbapal.lz");
+const u32 gMonPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/normal.gbapal.lz");
+const u32 gMonPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/normal.gbapal.lz");
+const u32 gMonPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/normal.gbapal.lz");
+const u32 gMonPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/normal.gbapal.lz");
+const u32 gMonPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/normal.gbapal.lz");
+const u32 gMonPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/normal.gbapal.lz");
+const u32 gMonPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/normal.gbapal.lz");
+const u32 gMonPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/normal.gbapal.lz");
+const u32 gMonPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/normal.gbapal.lz");
+const u32 gMonPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/normal.gbapal.lz");
+const u32 gMonPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/normal.gbapal.lz");
+const u32 gMonPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/normal.gbapal.lz");
+const u32 gMonPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/normal.gbapal.lz");
+const u32 gMonPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/normal.gbapal.lz");
+const u32 gMonPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/normal.gbapal.lz");
+const u32 gMonPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/normal.gbapal.lz");
+const u32 gMonPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/normal.gbapal.lz");
+const u32 gMonPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/normal.gbapal.lz");
+const u32 gMonPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/normal.gbapal.lz");
+const u32 gMonPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/normal.gbapal.lz");
+const u32 gMonPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/normal.gbapal.lz");
+const u32 gMonPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/normal.gbapal.lz");
+const u32 gMonPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/normal.gbapal.lz");
+const u32 gMonPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/normal.gbapal.lz");
+const u32 gMonPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/normal.gbapal.lz");
+const u32 gMonPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/normal.gbapal.lz");
+const u32 gMonPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/normal.gbapal.lz");
+const u32 gMonPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/normal.gbapal.lz");
+const u32 gMonPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/normal.gbapal.lz");
+const u32 gMonPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/normal.gbapal.lz");
+const u32 gMonPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/normal.gbapal.lz");
+const u32 gMonPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/normal.gbapal.lz");
+const u32 gMonPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/normal.gbapal.lz");
+const u32 gMonPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/normal.gbapal.lz");
+const u32 gMonPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/normal.gbapal.lz");
+const u32 gMonPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/normal.gbapal.lz");
+const u32 gMonPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/normal.gbapal.lz");
+const u32 gMonPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/normal.gbapal.lz");
+const u32 gMonPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/normal.gbapal.lz");
+const u32 gMonPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/normal.gbapal.lz");
+const u32 gMonPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/normal.gbapal.lz");
+const u32 gMonPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/normal.gbapal.lz");
+const u32 gMonPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/normal.gbapal.lz");
+const u32 gMonPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/normal.gbapal.lz");
+const u32 gMonPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/normal.gbapal.lz");
+const u32 gMonPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/normal.gbapal.lz");
+const u32 gMonPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/normal.gbapal.lz");
+const u32 gMonPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/normal.gbapal.lz");
+const u32 gMonPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/normal.gbapal.lz");
+const u32 gMonPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/normal.gbapal.lz");
+const u32 gMonPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/normal.gbapal.lz");
+const u32 gMonPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/normal.gbapal.lz");
+const u32 gMonPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/normal.gbapal.lz");
+const u32 gMonPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/normal.gbapal.lz");
+const u32 gMonPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/normal.gbapal.lz");
+const u32 gMonPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/normal.gbapal.lz");
+const u32 gMonPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/normal.gbapal.lz");
+const u32 gMonPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/normal.gbapal.lz");
+const u32 gMonPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/normal.gbapal.lz");
+const u32 gMonPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/normal.gbapal.lz");
const u32 gMonPalette_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/normal.gbapal.lz");
const u32 gMonPalette_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/normal.gbapal.lz");
const u32 gMonPalette_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/normal.gbapal.lz");
@@ -3390,12 +3399,14 @@ const u32 gMonPalette_PikachuAlolaCap[] = INCBIN_U32("graphics/pokemon/pikachu/a
const u32 gMonPalette_PikachuPartnerCap[] = INCBIN_U32("graphics/pokemon/pikachu/partner_cap/normal.gbapal.lz");
const u32 gMonPalette_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/normal.gbapal.lz");
const u32 gMonPalette_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/normal.gbapal.lz");
+#endif
const u32 gMonPalette_CastformSunny[] = INCBIN_U32("graphics/pokemon/castform/sunny/normal.gbapal.lz");
const u32 gMonPalette_CastformRainy[] = INCBIN_U32("graphics/pokemon/castform/rainy/normal.gbapal.lz");
const u32 gMonPalette_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/snowy/normal.gbapal.lz");
const u32 gMonPalette_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/normal.gbapal.lz");
const u32 gMonPalette_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/normal.gbapal.lz");
const u32 gMonPalette_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/normal.gbapal.lz");
+#if P_NEW_POKEMON == TRUE
const u32 gMonPalette_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/normal.gbapal.lz");
const u32 gMonPalette_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/normal.gbapal.lz");
const u32 gMonPalette_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/normal.gbapal.lz");
@@ -3555,6 +3566,7 @@ const u32 gMonPalette_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u
const u32 gMonPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/normal.gbapal.lz");
const u32 gMonPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/normal.gbapal.lz");
const u32 gMonPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/normal.gbapal.lz");
+#endif
const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz");
const u32 gMonShinyPalette_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/shiny.gbapal.lz");
@@ -3945,6 +3957,7 @@ const u32 gMonShinyPalette_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/shin
const u32 gMonShinyPalette_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/shiny.gbapal.lz");
const u32 gMonShinyPalette_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/shiny.gbapal.lz");
const u32 gMonShinyPalette_Deoxys[] = INCBIN_U32("graphics/pokemon/deoxys/shiny.gbapal.lz");
+#if P_NEW_POKEMON == TRUE
const u32 gMonShinyPalette_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/shiny.gbapal.lz");
const u32 gMonShinyPalette_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/shiny.gbapal.lz");
const u32 gMonShinyPalette_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/shiny.gbapal.lz");
@@ -4471,74 +4484,74 @@ const u32 gMonShinyPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/sh
//const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz");
const u32 gMonShinyPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/shiny.gbapal.lz");
//const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz");
-const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/mega_venusaur/shiny.gbapal.lz");
-const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/mega_charizard_x/shiny.gbapal.lz");
-const u32 gMonShinyPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/mega_charizard_y/shiny.gbapal.lz");
-const u32 gMonShinyPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/mega_blastoise/shiny.gbapal.lz");
-const u32 gMonShinyPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/mega_beedrill/shiny.gbapal.lz");
-const u32 gMonShinyPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/mega_pidgeot/shiny.gbapal.lz");
-const u32 gMonShinyPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/mega_alakazam/shiny.gbapal.lz");
-const u32 gMonShinyPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/mega_slowbro/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/mega_gengar/shiny.gbapal.lz");
-const u32 gMonShinyPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/mega_kangaskhan/shiny.gbapal.lz");
-const u32 gMonShinyPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/mega_pinsir/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/mega_gyarados/shiny.gbapal.lz");
-const u32 gMonShinyPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/mega_aerodactyl/shiny.gbapal.lz");
-const u32 gMonShinyPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_x/shiny.gbapal.lz");
-const u32 gMonShinyPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mega_mewtwo_y/shiny.gbapal.lz");
-const u32 gMonShinyPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/mega_ampharos/shiny.gbapal.lz");
-const u32 gMonShinyPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/mega_steelix/shiny.gbapal.lz");
-const u32 gMonShinyPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/mega_scizor/shiny.gbapal.lz");
-const u32 gMonShinyPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/mega_heracross/shiny.gbapal.lz");
-const u32 gMonShinyPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/mega_houndoom/shiny.gbapal.lz");
-const u32 gMonShinyPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/mega_tyranitar/shiny.gbapal.lz");
-const u32 gMonShinyPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/mega_sceptile/shiny.gbapal.lz");
-const u32 gMonShinyPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/mega_blaziken/shiny.gbapal.lz");
-const u32 gMonShinyPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/mega_swampert/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/mega_gardevoir/shiny.gbapal.lz");
-const u32 gMonShinyPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/mega_sableye/shiny.gbapal.lz");
-const u32 gMonShinyPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mega_mawile/shiny.gbapal.lz");
-const u32 gMonShinyPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/mega_aggron/shiny.gbapal.lz");
-const u32 gMonShinyPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/mega_medicham/shiny.gbapal.lz");
-const u32 gMonShinyPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/mega_manectric/shiny.gbapal.lz");
-const u32 gMonShinyPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/mega_sharpedo/shiny.gbapal.lz");
-const u32 gMonShinyPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/mega_camerupt/shiny.gbapal.lz");
-const u32 gMonShinyPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/mega_altaria/shiny.gbapal.lz");
-const u32 gMonShinyPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/mega_banette/shiny.gbapal.lz");
-const u32 gMonShinyPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/mega_absol/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/mega_glalie/shiny.gbapal.lz");
-const u32 gMonShinyPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/mega_salamence/shiny.gbapal.lz");
-const u32 gMonShinyPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/mega_metagross/shiny.gbapal.lz");
-const u32 gMonShinyPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/mega_latias/shiny.gbapal.lz");
-const u32 gMonShinyPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/mega_latios/shiny.gbapal.lz");
-const u32 gMonShinyPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/mega_lopunny/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/mega_garchomp/shiny.gbapal.lz");
-const u32 gMonShinyPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/mega_lucario/shiny.gbapal.lz");
-const u32 gMonShinyPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/mega_abomasnow/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/mega_gallade/shiny.gbapal.lz");
-const u32 gMonShinyPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/mega_audino/shiny.gbapal.lz");
-const u32 gMonShinyPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/mega_diancie/shiny.gbapal.lz");
-const u32 gMonShinyPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/mega_rayquaza/shiny.gbapal.lz");
-const u32 gMonShinyPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/primal_kyogre/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/primal_groudon/shiny.gbapal.lz");
-const u32 gMonShinyPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/alolan_rattata/shiny.gbapal.lz");
-const u32 gMonShinyPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raticate/shiny.gbapal.lz");
-const u32 gMonShinyPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/alolan_raichu/shiny.gbapal.lz");
-const u32 gMonShinyPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandshrew/shiny.gbapal.lz");
-const u32 gMonShinyPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/alolan_sandslash/shiny.gbapal.lz");
-const u32 gMonShinyPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/alolan_vulpix/shiny.gbapal.lz");
-const u32 gMonShinyPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/alolan_ninetales/shiny.gbapal.lz");
-const u32 gMonShinyPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/alolan_diglett/shiny.gbapal.lz");
-const u32 gMonShinyPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/alolan_dugtrio/shiny.gbapal.lz");
-const u32 gMonShinyPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/alolan_meowth/shiny.gbapal.lz");
-const u32 gMonShinyPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/alolan_persian/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/alolan_geodude/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_graveler/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/alolan_golem/shiny.gbapal.lz");
-const u32 gMonShinyPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/alolan_grimer/shiny.gbapal.lz");
-const u32 gMonShinyPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/alolan_muk/shiny.gbapal.lz");
-const u32 gMonShinyPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/alolan_exeggutor/shiny.gbapal.lz");
-const u32 gMonShinyPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/alolan_marowak/shiny.gbapal.lz");
+const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/shiny.gbapal.lz");
+const u32 gMonShinyPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/shiny.gbapal.lz");
+const u32 gMonShinyPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/shiny.gbapal.lz");
+const u32 gMonShinyPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/shiny.gbapal.lz");
+const u32 gMonShinyPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/shiny.gbapal.lz");
+const u32 gMonShinyPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/shiny.gbapal.lz");
+const u32 gMonShinyPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/shiny.gbapal.lz");
+const u32 gMonShinyPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/shiny.gbapal.lz");
const u32 gMonShinyPalette_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/shiny.gbapal.lz");
const u32 gMonShinyPalette_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/shiny.gbapal.lz");
const u32 gMonShinyPalette_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/shiny.gbapal.lz");
@@ -4589,12 +4602,14 @@ const u32 gMonShinyPalette_PikachuAlolaCap[] = INCBIN_U32("graphics/pokemon/pika
const u32 gMonShinyPalette_PikachuPartnerCap[] = INCBIN_U32("graphics/pokemon/pikachu/partner_cap/shiny.gbapal.lz");
const u32 gMonShinyPalette_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/shiny.gbapal.lz");
const u32 gMonShinyPalette_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/shiny.gbapal.lz");
+#endif
const u32 gMonShinyPalette_CastformSunny[] = INCBIN_U32("graphics/pokemon/castform/sunny/shiny.gbapal.lz");
const u32 gMonShinyPalette_CastformRainy[] = INCBIN_U32("graphics/pokemon/castform/rainy/shiny.gbapal.lz");
const u32 gMonShinyPalette_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/snowy/shiny.gbapal.lz");
const u32 gMonShinyPalette_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/shiny.gbapal.lz");
const u32 gMonShinyPalette_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/shiny.gbapal.lz");
const u32 gMonShinyPalette_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/shiny.gbapal.lz");
+#if P_NEW_POKEMON == TRUE
const u32 gMonShinyPalette_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/shiny.gbapal.lz");
const u32 gMonShinyPalette_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/shiny.gbapal.lz");
const u32 gMonShinyPalette_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/shiny.gbapal.lz");
@@ -4748,6 +4763,7 @@ const u32 gMonShinyPalette_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/poke
const u32 gMonShinyPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/shiny.gbapal.lz");
const u32 gMonShinyPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/shiny.gbapal.lz");
const u32 gMonShinyPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/shiny.gbapal.lz");
+#endif
const u8 gMonIcon_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/icon.4bpp");
const u8 gMonIcon_Bulbasaur[] = INCBIN_U8("graphics/pokemon/bulbasaur/icon.4bpp");
@@ -5136,6 +5152,7 @@ const u8 gMonIcon_Groudon[] = INCBIN_U8("graphics/pokemon/groudon/icon.4bpp");
const u8 gMonIcon_Rayquaza[] = INCBIN_U8("graphics/pokemon/rayquaza/icon.4bpp");
const u8 gMonIcon_Jirachi[] = INCBIN_U8("graphics/pokemon/jirachi/icon.4bpp");
const u8 gMonIcon_Deoxys[] = INCBIN_U8("graphics/pokemon/deoxys/icon.4bpp");
+#if P_NEW_POKEMON == TRUE
const u8 gMonIcon_Turtwig[] = INCBIN_U8("graphics/pokemon/turtwig/icon.4bpp");
const u8 gMonIcon_Grotle[] = INCBIN_U8("graphics/pokemon/grotle/icon.4bpp");
const u8 gMonIcon_Torterra[] = INCBIN_U8("graphics/pokemon/torterra/icon.4bpp");
@@ -5660,74 +5677,74 @@ const u8 gMonIcon_BasculegionF[] = INCBIN_U8("graphics/pokemon/basculegion/iconf
const u8 gMonIcon_Sneasler[] = INCBIN_U8("graphics/pokemon/sneasler/icon.4bpp");
const u8 gMonIcon_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/icon.4bpp");
const u8 gMonIcon_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/icon.4bpp");
-const u8 gMonIcon_VenusaurMega[] = INCBIN_U8("graphics/pokemon/mega_venusaur/icon.4bpp");
-const u8 gMonIcon_CharizardMegaX[] = INCBIN_U8("graphics/pokemon/mega_charizard_x/icon.4bpp");
-const u8 gMonIcon_CharizardMegaY[] = INCBIN_U8("graphics/pokemon/mega_charizard_y/icon.4bpp");
-const u8 gMonIcon_BlastoiseMega[] = INCBIN_U8("graphics/pokemon/mega_blastoise/icon.4bpp");
-const u8 gMonIcon_BeedrillMega[] = INCBIN_U8("graphics/pokemon/mega_beedrill/icon.4bpp");
-const u8 gMonIcon_PidgeotMega[] = INCBIN_U8("graphics/pokemon/mega_pidgeot/icon.4bpp");
-const u8 gMonIcon_AlakazamMega[] = INCBIN_U8("graphics/pokemon/mega_alakazam/icon.4bpp");
-const u8 gMonIcon_SlowbroMega[] = INCBIN_U8("graphics/pokemon/mega_slowbro/icon.4bpp");
-const u8 gMonIcon_GengarMega[] = INCBIN_U8("graphics/pokemon/mega_gengar/icon.4bpp");
-const u8 gMonIcon_KangaskhanMega[] = INCBIN_U8("graphics/pokemon/mega_kangaskhan/icon.4bpp");
-const u8 gMonIcon_PinsirMega[] = INCBIN_U8("graphics/pokemon/mega_pinsir/icon.4bpp");
-const u8 gMonIcon_GyaradosMega[] = INCBIN_U8("graphics/pokemon/mega_gyarados/icon.4bpp");
-const u8 gMonIcon_AerodactylMega[] = INCBIN_U8("graphics/pokemon/mega_aerodactyl/icon.4bpp");
-const u8 gMonIcon_MewtwoMegaX[] = INCBIN_U8("graphics/pokemon/mega_mewtwo_x/icon.4bpp");
-const u8 gMonIcon_MewtwoMegaY[] = INCBIN_U8("graphics/pokemon/mega_mewtwo_y/icon.4bpp");
-const u8 gMonIcon_AmpharosMega[] = INCBIN_U8("graphics/pokemon/mega_ampharos/icon.4bpp");
-const u8 gMonIcon_SteelixMega[] = INCBIN_U8("graphics/pokemon/mega_steelix/icon.4bpp");
-const u8 gMonIcon_ScizorMega[] = INCBIN_U8("graphics/pokemon/mega_scizor/icon.4bpp");
-const u8 gMonIcon_HeracrossMega[] = INCBIN_U8("graphics/pokemon/mega_heracross/icon.4bpp");
-const u8 gMonIcon_HoundoomMega[] = INCBIN_U8("graphics/pokemon/mega_houndoom/icon.4bpp");
-const u8 gMonIcon_TyranitarMega[] = INCBIN_U8("graphics/pokemon/mega_tyranitar/icon.4bpp");
-const u8 gMonIcon_SceptileMega[] = INCBIN_U8("graphics/pokemon/mega_sceptile/icon.4bpp");
-const u8 gMonIcon_BlazikenMega[] = INCBIN_U8("graphics/pokemon/mega_blaziken/icon.4bpp");
-const u8 gMonIcon_SwampertMega[] = INCBIN_U8("graphics/pokemon/mega_swampert/icon.4bpp");
-const u8 gMonIcon_GardevoirMega[] = INCBIN_U8("graphics/pokemon/mega_gardevoir/icon.4bpp");
-const u8 gMonIcon_SableyeMega[] = INCBIN_U8("graphics/pokemon/mega_sableye/icon.4bpp");
-const u8 gMonIcon_MawileMega[] = INCBIN_U8("graphics/pokemon/mega_mawile/icon.4bpp");
-const u8 gMonIcon_AggronMega[] = INCBIN_U8("graphics/pokemon/mega_aggron/icon.4bpp");
-const u8 gMonIcon_MedichamMega[] = INCBIN_U8("graphics/pokemon/mega_medicham/icon.4bpp");
-const u8 gMonIcon_ManectricMega[] = INCBIN_U8("graphics/pokemon/mega_manectric/icon.4bpp");
-const u8 gMonIcon_SharpedoMega[] = INCBIN_U8("graphics/pokemon/mega_sharpedo/icon.4bpp");
-const u8 gMonIcon_CameruptMega[] = INCBIN_U8("graphics/pokemon/mega_camerupt/icon.4bpp");
-const u8 gMonIcon_AltariaMega[] = INCBIN_U8("graphics/pokemon/mega_altaria/icon.4bpp");
-const u8 gMonIcon_BanetteMega[] = INCBIN_U8("graphics/pokemon/mega_banette/icon.4bpp");
-const u8 gMonIcon_AbsolMega[] = INCBIN_U8("graphics/pokemon/mega_absol/icon.4bpp");
-const u8 gMonIcon_GlalieMega[] = INCBIN_U8("graphics/pokemon/mega_glalie/icon.4bpp");
-const u8 gMonIcon_SalamenceMega[] = INCBIN_U8("graphics/pokemon/mega_salamence/icon.4bpp");
-const u8 gMonIcon_MetagrossMega[] = INCBIN_U8("graphics/pokemon/mega_metagross/icon.4bpp");
-const u8 gMonIcon_LatiasMega[] = INCBIN_U8("graphics/pokemon/mega_latias/icon.4bpp");
-const u8 gMonIcon_LatiosMega[] = INCBIN_U8("graphics/pokemon/mega_latios/icon.4bpp");
-const u8 gMonIcon_LopunnyMega[] = INCBIN_U8("graphics/pokemon/mega_lopunny/icon.4bpp");
-const u8 gMonIcon_GarchompMega[] = INCBIN_U8("graphics/pokemon/mega_garchomp/icon.4bpp");
-const u8 gMonIcon_LucarioMega[] = INCBIN_U8("graphics/pokemon/mega_lucario/icon.4bpp");
-const u8 gMonIcon_AbomasnowMega[] = INCBIN_U8("graphics/pokemon/mega_abomasnow/icon.4bpp");
-const u8 gMonIcon_GalladeMega[] = INCBIN_U8("graphics/pokemon/mega_gallade/icon.4bpp");
-const u8 gMonIcon_AudinoMega[] = INCBIN_U8("graphics/pokemon/mega_audino/icon.4bpp");
-const u8 gMonIcon_DiancieMega[] = INCBIN_U8("graphics/pokemon/mega_diancie/icon.4bpp");
-const u8 gMonIcon_RayquazaMega[] = INCBIN_U8("graphics/pokemon/mega_rayquaza/icon.4bpp");
-const u8 gMonIcon_KyogrePrimal[] = INCBIN_U8("graphics/pokemon/primal_kyogre/icon.4bpp");
-const u8 gMonIcon_GroudonPrimal[] = INCBIN_U8("graphics/pokemon/primal_groudon/icon.4bpp");
-const u8 gMonIcon_RattataAlolan[] = INCBIN_U8("graphics/pokemon/alolan_rattata/icon.4bpp");
-const u8 gMonIcon_RaticateAlolan[] = INCBIN_U8("graphics/pokemon/alolan_raticate/icon.4bpp");
-const u8 gMonIcon_RaichuAlolan[] = INCBIN_U8("graphics/pokemon/alolan_raichu/icon.4bpp");
-const u8 gMonIcon_SandshrewAlolan[] = INCBIN_U8("graphics/pokemon/alolan_sandshrew/icon.4bpp");
-const u8 gMonIcon_SandslashAlolan[] = INCBIN_U8("graphics/pokemon/alolan_sandslash/icon.4bpp");
-const u8 gMonIcon_VulpixAlolan[] = INCBIN_U8("graphics/pokemon/alolan_vulpix/icon.4bpp");
-const u8 gMonIcon_NinetalesAlolan[] = INCBIN_U8("graphics/pokemon/alolan_ninetales/icon.4bpp");
-const u8 gMonIcon_DiglettAlolan[] = INCBIN_U8("graphics/pokemon/alolan_diglett/icon.4bpp");
-const u8 gMonIcon_DugtrioAlolan[] = INCBIN_U8("graphics/pokemon/alolan_dugtrio/icon.4bpp");
-const u8 gMonIcon_MeowthAlolan[] = INCBIN_U8("graphics/pokemon/alolan_meowth/icon.4bpp");
-const u8 gMonIcon_PersianAlolan[] = INCBIN_U8("graphics/pokemon/alolan_persian/icon.4bpp");
-const u8 gMonIcon_GeodudeAlolan[] = INCBIN_U8("graphics/pokemon/alolan_geodude/icon.4bpp");
-const u8 gMonIcon_GravelerAlolan[] = INCBIN_U8("graphics/pokemon/alolan_graveler/icon.4bpp");
-const u8 gMonIcon_GolemAlolan[] = INCBIN_U8("graphics/pokemon/alolan_golem/icon.4bpp");
-const u8 gMonIcon_GrimerAlolan[] = INCBIN_U8("graphics/pokemon/alolan_grimer/icon.4bpp");
-const u8 gMonIcon_MukAlolan[] = INCBIN_U8("graphics/pokemon/alolan_muk/icon.4bpp");
-const u8 gMonIcon_ExeggutorAlolan[] = INCBIN_U8("graphics/pokemon/alolan_exeggutor/icon.4bpp");
-const u8 gMonIcon_MarowakAlolan[] = INCBIN_U8("graphics/pokemon/alolan_marowak/icon.4bpp");
+const u8 gMonIcon_VenusaurMega[] = INCBIN_U8("graphics/pokemon/venusaur/mega/icon.4bpp");
+const u8 gMonIcon_CharizardMegaX[] = INCBIN_U8("graphics/pokemon/charizard/mega_x/icon.4bpp");
+const u8 gMonIcon_CharizardMegaY[] = INCBIN_U8("graphics/pokemon/charizard/mega_y/icon.4bpp");
+const u8 gMonIcon_BlastoiseMega[] = INCBIN_U8("graphics/pokemon/blastoise/mega/icon.4bpp");
+const u8 gMonIcon_BeedrillMega[] = INCBIN_U8("graphics/pokemon/beedrill/mega/icon.4bpp");
+const u8 gMonIcon_PidgeotMega[] = INCBIN_U8("graphics/pokemon/pidgeot/mega/icon.4bpp");
+const u8 gMonIcon_AlakazamMega[] = INCBIN_U8("graphics/pokemon/alakazam/mega/icon.4bpp");
+const u8 gMonIcon_SlowbroMega[] = INCBIN_U8("graphics/pokemon/slowbro/mega/icon.4bpp");
+const u8 gMonIcon_GengarMega[] = INCBIN_U8("graphics/pokemon/gengar/mega/icon.4bpp");
+const u8 gMonIcon_KangaskhanMega[] = INCBIN_U8("graphics/pokemon/kangaskhan/mega/icon.4bpp");
+const u8 gMonIcon_PinsirMega[] = INCBIN_U8("graphics/pokemon/pinsir/mega/icon.4bpp");
+const u8 gMonIcon_GyaradosMega[] = INCBIN_U8("graphics/pokemon/gyarados/mega/icon.4bpp");
+const u8 gMonIcon_AerodactylMega[] = INCBIN_U8("graphics/pokemon/aerodactyl/mega/icon.4bpp");
+const u8 gMonIcon_MewtwoMegaX[] = INCBIN_U8("graphics/pokemon/mewtwo/mega_x/icon.4bpp");
+const u8 gMonIcon_MewtwoMegaY[] = INCBIN_U8("graphics/pokemon/mewtwo/mega_y/icon.4bpp");
+const u8 gMonIcon_AmpharosMega[] = INCBIN_U8("graphics/pokemon/ampharos/mega/icon.4bpp");
+const u8 gMonIcon_SteelixMega[] = INCBIN_U8("graphics/pokemon/steelix/mega/icon.4bpp");
+const u8 gMonIcon_ScizorMega[] = INCBIN_U8("graphics/pokemon/scizor/mega/icon.4bpp");
+const u8 gMonIcon_HeracrossMega[] = INCBIN_U8("graphics/pokemon/heracross/mega/icon.4bpp");
+const u8 gMonIcon_HoundoomMega[] = INCBIN_U8("graphics/pokemon/houndoom/mega/icon.4bpp");
+const u8 gMonIcon_TyranitarMega[] = INCBIN_U8("graphics/pokemon/tyranitar/mega/icon.4bpp");
+const u8 gMonIcon_SceptileMega[] = INCBIN_U8("graphics/pokemon/sceptile/mega/icon.4bpp");
+const u8 gMonIcon_BlazikenMega[] = INCBIN_U8("graphics/pokemon/blaziken/mega/icon.4bpp");
+const u8 gMonIcon_SwampertMega[] = INCBIN_U8("graphics/pokemon/swampert/mega/icon.4bpp");
+const u8 gMonIcon_GardevoirMega[] = INCBIN_U8("graphics/pokemon/gardevoir/mega/icon.4bpp");
+const u8 gMonIcon_SableyeMega[] = INCBIN_U8("graphics/pokemon/sableye/mega/icon.4bpp");
+const u8 gMonIcon_MawileMega[] = INCBIN_U8("graphics/pokemon/mawile/mega/icon.4bpp");
+const u8 gMonIcon_AggronMega[] = INCBIN_U8("graphics/pokemon/aggron/mega/icon.4bpp");
+const u8 gMonIcon_MedichamMega[] = INCBIN_U8("graphics/pokemon/medicham/mega/icon.4bpp");
+const u8 gMonIcon_ManectricMega[] = INCBIN_U8("graphics/pokemon/manectric/mega/icon.4bpp");
+const u8 gMonIcon_SharpedoMega[] = INCBIN_U8("graphics/pokemon/sharpedo/mega/icon.4bpp");
+const u8 gMonIcon_CameruptMega[] = INCBIN_U8("graphics/pokemon/camerupt/mega/icon.4bpp");
+const u8 gMonIcon_AltariaMega[] = INCBIN_U8("graphics/pokemon/altaria/mega/icon.4bpp");
+const u8 gMonIcon_BanetteMega[] = INCBIN_U8("graphics/pokemon/banette/mega/icon.4bpp");
+const u8 gMonIcon_AbsolMega[] = INCBIN_U8("graphics/pokemon/absol/mega/icon.4bpp");
+const u8 gMonIcon_GlalieMega[] = INCBIN_U8("graphics/pokemon/glalie/mega/icon.4bpp");
+const u8 gMonIcon_SalamenceMega[] = INCBIN_U8("graphics/pokemon/salamence/mega/icon.4bpp");
+const u8 gMonIcon_MetagrossMega[] = INCBIN_U8("graphics/pokemon/metagross/mega/icon.4bpp");
+const u8 gMonIcon_LatiasMega[] = INCBIN_U8("graphics/pokemon/latias/mega/icon.4bpp");
+const u8 gMonIcon_LatiosMega[] = INCBIN_U8("graphics/pokemon/latios/mega/icon.4bpp");
+const u8 gMonIcon_LopunnyMega[] = INCBIN_U8("graphics/pokemon/lopunny/mega/icon.4bpp");
+const u8 gMonIcon_GarchompMega[] = INCBIN_U8("graphics/pokemon/garchomp/mega/icon.4bpp");
+const u8 gMonIcon_LucarioMega[] = INCBIN_U8("graphics/pokemon/lucario/mega/icon.4bpp");
+const u8 gMonIcon_AbomasnowMega[] = INCBIN_U8("graphics/pokemon/abomasnow/mega/icon.4bpp");
+const u8 gMonIcon_GalladeMega[] = INCBIN_U8("graphics/pokemon/gallade/mega/icon.4bpp");
+const u8 gMonIcon_AudinoMega[] = INCBIN_U8("graphics/pokemon/audino/mega/icon.4bpp");
+const u8 gMonIcon_DiancieMega[] = INCBIN_U8("graphics/pokemon/diancie/mega/icon.4bpp");
+const u8 gMonIcon_RayquazaMega[] = INCBIN_U8("graphics/pokemon/rayquaza/mega/icon.4bpp");
+const u8 gMonIcon_KyogrePrimal[] = INCBIN_U8("graphics/pokemon/kyogre/primal/icon.4bpp");
+const u8 gMonIcon_GroudonPrimal[] = INCBIN_U8("graphics/pokemon/groudon/primal/icon.4bpp");
+const u8 gMonIcon_RattataAlolan[] = INCBIN_U8("graphics/pokemon/rattata/alolan/icon.4bpp");
+const u8 gMonIcon_RaticateAlolan[] = INCBIN_U8("graphics/pokemon/raticate/alolan/icon.4bpp");
+const u8 gMonIcon_RaichuAlolan[] = INCBIN_U8("graphics/pokemon/raichu/alolan/icon.4bpp");
+const u8 gMonIcon_SandshrewAlolan[] = INCBIN_U8("graphics/pokemon/sandshrew/alolan/icon.4bpp");
+const u8 gMonIcon_SandslashAlolan[] = INCBIN_U8("graphics/pokemon/sandslash/alolan/icon.4bpp");
+const u8 gMonIcon_VulpixAlolan[] = INCBIN_U8("graphics/pokemon/vulpix/alolan/icon.4bpp");
+const u8 gMonIcon_NinetalesAlolan[] = INCBIN_U8("graphics/pokemon/ninetales/alolan/icon.4bpp");
+const u8 gMonIcon_DiglettAlolan[] = INCBIN_U8("graphics/pokemon/diglett/alolan/icon.4bpp");
+const u8 gMonIcon_DugtrioAlolan[] = INCBIN_U8("graphics/pokemon/dugtrio/alolan/icon.4bpp");
+const u8 gMonIcon_MeowthAlolan[] = INCBIN_U8("graphics/pokemon/meowth/alolan/icon.4bpp");
+const u8 gMonIcon_PersianAlolan[] = INCBIN_U8("graphics/pokemon/persian/alolan/icon.4bpp");
+const u8 gMonIcon_GeodudeAlolan[] = INCBIN_U8("graphics/pokemon/geodude/alolan/icon.4bpp");
+const u8 gMonIcon_GravelerAlolan[] = INCBIN_U8("graphics/pokemon/graveler/alolan/icon.4bpp");
+const u8 gMonIcon_GolemAlolan[] = INCBIN_U8("graphics/pokemon/golem/alolan/icon.4bpp");
+const u8 gMonIcon_GrimerAlolan[] = INCBIN_U8("graphics/pokemon/grimer/alolan/icon.4bpp");
+const u8 gMonIcon_MukAlolan[] = INCBIN_U8("graphics/pokemon/muk/alolan/icon.4bpp");
+const u8 gMonIcon_ExeggutorAlolan[] = INCBIN_U8("graphics/pokemon/exeggutor/alolan/icon.4bpp");
+const u8 gMonIcon_MarowakAlolan[] = INCBIN_U8("graphics/pokemon/marowak/alolan/icon.4bpp");
const u8 gMonIcon_MeowthGalarian[] = INCBIN_U8("graphics/pokemon/meowth/galarian/icon.4bpp");
const u8 gMonIcon_PonytaGalarian[] = INCBIN_U8("graphics/pokemon/ponyta/galarian/icon.4bpp");
const u8 gMonIcon_RapidashGalarian[] = INCBIN_U8("graphics/pokemon/rapidash/galarian/icon.4bpp");
@@ -5777,6 +5794,7 @@ const u8 gMonIcon_PikachuKalosCap[] = INCBIN_U8("graphics/pokemon/pikachu/kalos_
const u8 gMonIcon_PikachuAlolaCap[] = INCBIN_U8("graphics/pokemon/pikachu/alola_cap/icon.4bpp");
const u8 gMonIcon_PikachuPartnerCap[] = INCBIN_U8("graphics/pokemon/pikachu/partner_cap/icon.4bpp");
const u8 gMonIcon_PichuSpikyEared[] = INCBIN_U8("graphics/pokemon/pichu/spiky_eared/icon.4bpp");
+#endif
const u8 gMonIcon_UnownB[] = INCBIN_U8("graphics/pokemon/unown/b/icon.4bpp");
const u8 gMonIcon_UnownC[] = INCBIN_U8("graphics/pokemon/unown/c/icon.4bpp");
const u8 gMonIcon_UnownD[] = INCBIN_U8("graphics/pokemon/unown/d/icon.4bpp");
@@ -5810,6 +5828,7 @@ const u8 gMonIcon_CastformSnowy[] = INCBIN_U8("graphics/pokemon/castform/snowy/i
const u8 gMonIcon_DeoxysAttack[] = INCBIN_U8("graphics/pokemon/deoxys/attack/icon.4bpp");
const u8 gMonIcon_DeoxysDefense[] = INCBIN_U8("graphics/pokemon/deoxys/defense/icon.4bpp");
const u8 gMonIcon_DeoxysSpeed[] = INCBIN_U8("graphics/pokemon/deoxys/speed/icon.4bpp");
+#if P_NEW_POKEMON == TRUE
const u8 gMonIcon_BurmySandyCloak[] = INCBIN_U8("graphics/pokemon/burmy/sandy_cloak/icon.4bpp");
const u8 gMonIcon_BurmyTrashCloak[] = INCBIN_U8("graphics/pokemon/burmy/trash_cloak/icon.4bpp");
const u8 gMonIcon_WormadamSandyCloak[] = INCBIN_U8("graphics/pokemon/wormadam/sandy_cloak/icon.4bpp");
@@ -5930,6 +5949,7 @@ const u8 gMonIcon_EternatusEternamax[] = INCBIN_U8("graphics/pokemon/eternatus/e
const u8 gMonIcon_ZarudeDada[] = INCBIN_U8("graphics/pokemon/zarude/dada/icon.4bpp");
const u8 gMonIcon_CalyrexIceRider[] = INCBIN_U8("graphics/pokemon/calyrex/ice_rider/icon.4bpp");
const u8 gMonIcon_CalyrexShadowRider[] = INCBIN_U8("graphics/pokemon/calyrex/shadow_rider/icon.4bpp");
+#endif
const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp");
const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/footprint.1bpp");
@@ -6319,6 +6339,7 @@ const u8 gMonFootprint_Latios[] = INCBIN_U8("graphics/pokemon/latios/footprint.1
const u8 gMonFootprint_Jirachi[] = INCBIN_U8("graphics/pokemon/jirachi/footprint.1bpp");
const u8 gMonFootprint_Deoxys[] = INCBIN_U8("graphics/pokemon/deoxys/footprint.1bpp");
const u8 gMonFootprint_Chimecho[] = INCBIN_U8("graphics/pokemon/chimecho/footprint.1bpp");
+#if P_NEW_POKEMON == TRUE
const u8 gMonFootprint_Turtwig[] = INCBIN_U8("graphics/pokemon/turtwig/footprint.1bpp");
const u8 gMonFootprint_Grotle[] = INCBIN_U8("graphics/pokemon/grotle/footprint.1bpp");
const u8 gMonFootprint_Torterra[] = INCBIN_U8("graphics/pokemon/torterra/footprint.1bpp");
@@ -6838,3 +6859,4 @@ const u8 gMonFootprint_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/footprint
//const u8 gMonFootprint_Sneasler[] = INCBIN_U8("graphics/pokemon/sneasler/footprint.1bpp");
//const u8 gMonFootprint_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/footprint.1bpp");
//const u8 gMonFootprint_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/footprint.1bpp");
+#endif
diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h
index ea8315e760..3e1789b9a3 100644
--- a/src/data/item_icon_table.h
+++ b/src/data/item_icon_table.h
@@ -1,31 +1,40 @@
const u32 *const gItemIconTable[][2] =
{
[ITEM_NONE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // Pokeballs
- [ITEM_MASTER_BALL] = {gItemIcon_MasterBall, gItemIconPalette_MasterBall},
- [ITEM_ULTRA_BALL] = {gItemIcon_UltraBall, gItemIconPalette_UltraBall},
- [ITEM_GREAT_BALL] = {gItemIcon_GreatBall, gItemIconPalette_GreatBall},
+ // Poké Balls
[ITEM_POKE_BALL] = {gItemIcon_PokeBall, gItemIconPalette_PokeBall},
- [ITEM_SAFARI_BALL] = {gItemIcon_SafariBall, gItemIconPalette_SafariBall},
- [ITEM_NET_BALL] = {gItemIcon_NetBall, gItemIconPalette_NetBall},
- [ITEM_DIVE_BALL] = {gItemIcon_DiveBall, gItemIconPalette_DiveBall},
- [ITEM_NEST_BALL] = {gItemIcon_NestBall, gItemIconPalette_NestBall},
- [ITEM_REPEAT_BALL] = {gItemIcon_RepeatBall, gItemIconPalette_RepeatBall},
- [ITEM_TIMER_BALL] = {gItemIcon_TimerBall, gItemIconPalette_RepeatBall},
- [ITEM_LUXURY_BALL] = {gItemIcon_LuxuryBall, gItemIconPalette_LuxuryBall},
+ [ITEM_GREAT_BALL] = {gItemIcon_GreatBall, gItemIconPalette_GreatBall},
+ [ITEM_ULTRA_BALL] = {gItemIcon_UltraBall, gItemIconPalette_UltraBall},
+ [ITEM_MASTER_BALL] = {gItemIcon_MasterBall, gItemIconPalette_MasterBall},
[ITEM_PREMIER_BALL] = {gItemIcon_PremierBall, gItemIconPalette_LuxuryBall},
+ [ITEM_HEAL_BALL] = {gItemIcon_HealBall, gItemIconPalette_HealBall},
+ [ITEM_NET_BALL] = {gItemIcon_NetBall, gItemIconPalette_NetBall},
+ [ITEM_NEST_BALL] = {gItemIcon_NestBall, gItemIconPalette_NestBall},
+ [ITEM_DIVE_BALL] = {gItemIcon_DiveBall, gItemIconPalette_DiveBall},
+ [ITEM_DUSK_BALL] = {gItemIcon_DuskBall, gItemIconPalette_DuskBall},
+ [ITEM_TIMER_BALL] = {gItemIcon_TimerBall, gItemIconPalette_RepeatBall},
+ [ITEM_QUICK_BALL] = {gItemIcon_QuickBall, gItemIconPalette_QuickBall},
+ [ITEM_REPEAT_BALL] = {gItemIcon_RepeatBall, gItemIconPalette_RepeatBall},
+ [ITEM_LUXURY_BALL] = {gItemIcon_LuxuryBall, gItemIconPalette_LuxuryBall},
+ [ITEM_LEVEL_BALL] = {gItemIcon_LevelBall, gItemIconPalette_LevelBall},
+ [ITEM_LURE_BALL] = {gItemIcon_LureBall, gItemIconPalette_LureBall},
+ [ITEM_MOON_BALL] = {gItemIcon_MoonBall, gItemIconPalette_MoonBall},
+ [ITEM_FRIEND_BALL] = {gItemIcon_FriendBall, gItemIconPalette_FriendBall},
+ [ITEM_LOVE_BALL] = {gItemIcon_LoveBall, gItemIconPalette_LoveBall},
+ [ITEM_FAST_BALL] = {gItemIcon_FastBall, gItemIconPalette_FastBall},
+ [ITEM_HEAVY_BALL] = {gItemIcon_HeavyBall, gItemIconPalette_HeavyBall},
+ [ITEM_DREAM_BALL] = {gItemIcon_DreamBall, gItemIconPalette_DreamBall},
+ [ITEM_SAFARI_BALL] = {gItemIcon_SafariBall, gItemIconPalette_SafariBall},
+ [ITEM_SPORT_BALL] = {gItemIcon_SportBall, gItemIconPalette_SportBall},
+ [ITEM_PARK_BALL] = {gItemIcon_ParkBall, gItemIconPalette_ParkBall},
+ [ITEM_BEAST_BALL] = {gItemIcon_BeastBall, gItemIconPalette_BeastBall},
+ [ITEM_CHERISH_BALL] = {gItemIcon_CherishBall, gItemIconPalette_CherishBall},
// Medicine
[ITEM_POTION] = {gItemIcon_Potion, gItemIconPalette_Potion},
- [ITEM_ANTIDOTE] = {gItemIcon_Antidote, gItemIconPalette_Antidote},
- [ITEM_BURN_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_BurnHeal},
- [ITEM_ICE_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_IceHeal},
- [ITEM_AWAKENING] = {gItemIcon_StatusHeal, gItemIconPalette_Awakening},
- [ITEM_PARALYZE_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_ParalyzeHeal},
- [ITEM_FULL_RESTORE] = {gItemIcon_LargePotion, gItemIconPalette_FullRestore},
- [ITEM_MAX_POTION] = {gItemIcon_LargePotion, gItemIconPalette_MaxPotion},
- [ITEM_HYPER_POTION] = {gItemIcon_Potion, gItemIconPalette_HyperPotion},
[ITEM_SUPER_POTION] = {gItemIcon_Potion, gItemIconPalette_SuperPotion},
- [ITEM_FULL_HEAL] = {gItemIcon_FullHeal, gItemIconPalette_FullHeal},
+ [ITEM_HYPER_POTION] = {gItemIcon_Potion, gItemIconPalette_HyperPotion},
+ [ITEM_MAX_POTION] = {gItemIcon_LargePotion, gItemIconPalette_MaxPotion},
+ [ITEM_FULL_RESTORE] = {gItemIcon_LargePotion, gItemIconPalette_FullRestore},
[ITEM_REVIVE] = {gItemIcon_Revive, gItemIconPalette_Revive},
[ITEM_MAX_REVIVE] = {gItemIcon_MaxRevive, gItemIconPalette_Revive},
[ITEM_FRESH_WATER] = {gItemIcon_FreshWater, gItemIconPalette_FreshWater},
@@ -36,105 +45,177 @@ const u32 *const gItemIconTable[][2] =
[ITEM_ENERGY_ROOT] = {gItemIcon_EnergyRoot, gItemIconPalette_EnergyRoot},
[ITEM_HEAL_POWDER] = {gItemIcon_Powder, gItemIconPalette_HealPowder},
[ITEM_REVIVAL_HERB] = {gItemIcon_RevivalHerb, gItemIconPalette_RevivalHerb},
+ [ITEM_ANTIDOTE] = {gItemIcon_Antidote, gItemIconPalette_Antidote},
+ [ITEM_PARALYZE_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_ParalyzeHeal},
+ [ITEM_BURN_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_BurnHeal},
+ [ITEM_ICE_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_IceHeal},
+ [ITEM_AWAKENING] = {gItemIcon_StatusHeal, gItemIconPalette_Awakening},
+ [ITEM_FULL_HEAL] = {gItemIcon_FullHeal, gItemIconPalette_FullHeal},
[ITEM_ETHER] = {gItemIcon_Ether, gItemIconPalette_Ether},
[ITEM_MAX_ETHER] = {gItemIcon_Ether, gItemIconPalette_MaxEther},
[ITEM_ELIXIR] = {gItemIcon_Ether, gItemIconPalette_Elixir},
[ITEM_MAX_ELIXIR] = {gItemIcon_Ether, gItemIconPalette_MaxElixir},
+ [ITEM_BERRY_JUICE] = {gItemIcon_BerryJuice, gItemIconPalette_BerryJuice},
+ [ITEM_SACRED_ASH] = {gItemIcon_SacredAsh, gItemIconPalette_SacredAsh},
+ [ITEM_SWEET_HEART] = {gItemIcon_SweetHeart, gItemIconPalette_SweetHeart},
+ [ITEM_MAX_HONEY] = {gItemIcon_MaxHoney, gItemIconPalette_MaxHoney},
+ // Regional Specialties
+ [ITEM_PEWTER_CRUNCHIES] = {gItemIcon_PewterCrunchies, gItemIconPalette_PewterCrunchies},
+ [ITEM_RAGE_CANDY_BAR] = {gItemIcon_RageCandyBar, gItemIconPalette_RageCandyBar},
[ITEM_LAVA_COOKIE] = {gItemIcon_LavaCookie, gItemIconPalette_LavaCookieAndLetter},
+ [ITEM_OLD_GATEAU] = {gItemIcon_OldGateau, gItemIconPalette_OldGateau},
+ [ITEM_CASTELIACONE] = {gItemIcon_Casteliacone, gItemIconPalette_Casteliacone},
+ [ITEM_LUMIOSE_GALETTE] = {gItemIcon_LumioseGalette, gItemIconPalette_LumioseGalette},
+ [ITEM_SHALOUR_SABLE] = {gItemIcon_ShalourSable, gItemIconPalette_ShalourSable},
+ [ITEM_BIG_MALASADA] = {gItemIcon_BigMalasada, gItemIconPalette_BigMalasada},
+ // Vitamins
+ [ITEM_HP_UP] = {gItemIcon_HPUp, gItemIconPalette_HPUp},
+ [ITEM_PROTEIN] = {gItemIcon_Vitamin, gItemIconPalette_Protein},
+ [ITEM_IRON] = {gItemIcon_Vitamin, gItemIconPalette_Iron},
+ [ITEM_CALCIUM] = {gItemIcon_Vitamin, gItemIconPalette_Calcium},
+ [ITEM_ZINC] = {gItemIcon_Vitamin, gItemIconPalette_Zinc},
+ [ITEM_CARBOS] = {gItemIcon_Vitamin, gItemIconPalette_Carbos},
+ [ITEM_PP_UP] = {gItemIcon_PPUp, gItemIconPalette_PPUp},
+ [ITEM_PP_MAX] = {gItemIcon_PPMax, gItemIconPalette_PPMax},
+ // EV Feathers
+ [ITEM_HEALTH_FEATHER] = {gItemIcon_HealthFeather, gItemIconPalette_HealthFeather},
+ [ITEM_MUSCLE_FEATHER] = {gItemIcon_MuscleFeather, gItemIconPalette_MuscleFeather},
+ [ITEM_RESIST_FEATHER] = {gItemIcon_ResistFeather, gItemIconPalette_ResistFeather},
+ [ITEM_GENIUS_FEATHER] = {gItemIcon_GeniusFeather, gItemIconPalette_GeniusFeather},
+ [ITEM_CLEVER_FEATHER] = {gItemIcon_CleverFeather, gItemIconPalette_CleverFeather},
+ [ITEM_SWIFT_FEATHER] = {gItemIcon_SwiftFeather, gItemIconPalette_SwiftFeather},
+ // Ability Modifiers
+ [ITEM_ABILITY_CAPSULE] = {gItemIcon_AbilityCapsule, gItemIconPalette_AbilityCapsule},
+ [ITEM_ABILITY_PATCH] = {gItemIcon_AbilityPatch, gItemIconPalette_AbilityPatch},
+ // Mints
+ [ITEM_LONELY_MINT] = {gItemIcon_Mint, gItemIconPalette_RedMint},
+ [ITEM_ADAMANT_MINT] = {gItemIcon_Mint, gItemIconPalette_RedMint},
+ [ITEM_NAUGHTY_MINT] = {gItemIcon_Mint, gItemIconPalette_RedMint},
+ [ITEM_BRAVE_MINT] = {gItemIcon_Mint, gItemIconPalette_RedMint},
+ [ITEM_BOLD_MINT] = {gItemIcon_Mint, gItemIconPalette_BlueMint},
+ [ITEM_IMPISH_MINT] = {gItemIcon_Mint, gItemIconPalette_BlueMint},
+ [ITEM_LAX_MINT] = {gItemIcon_Mint, gItemIconPalette_BlueMint},
+ [ITEM_RELAXED_MINT] = {gItemIcon_Mint, gItemIconPalette_BlueMint},
+ [ITEM_MODEST_MINT] = {gItemIcon_Mint, gItemIconPalette_LightBlueMint},
+ [ITEM_MILD_MINT] = {gItemIcon_Mint, gItemIconPalette_LightBlueMint},
+ [ITEM_RASH_MINT] = {gItemIcon_Mint, gItemIconPalette_LightBlueMint},
+ [ITEM_QUIET_MINT] = {gItemIcon_Mint, gItemIconPalette_LightBlueMint},
+ [ITEM_CALM_MINT] = {gItemIcon_Mint, gItemIconPalette_PinkMint},
+ [ITEM_GENTLE_MINT] = {gItemIcon_Mint, gItemIconPalette_PinkMint},
+ [ITEM_CAREFUL_MINT] = {gItemIcon_Mint, gItemIconPalette_PinkMint},
+ [ITEM_SASSY_MINT] = {gItemIcon_Mint, gItemIconPalette_PinkMint},
+ [ITEM_TIMID_MINT] = {gItemIcon_Mint, gItemIconPalette_GreenMint},
+ [ITEM_HASTY_MINT] = {gItemIcon_Mint, gItemIconPalette_GreenMint},
+ [ITEM_JOLLY_MINT] = {gItemIcon_Mint, gItemIconPalette_GreenMint},
+ [ITEM_NAIVE_MINT] = {gItemIcon_Mint, gItemIconPalette_GreenMint},
+ [ITEM_SERIOUS_MINT] = {gItemIcon_Mint, gItemIconPalette_YellowMint},
+ // Candy
+ [ITEM_RARE_CANDY] = {gItemIcon_RareCandy, gItemIconPalette_RareCandy},
+ [ITEM_EXP_CANDY_XS] = {gItemIcon_ExpCandyXS, gItemIconPalette_ExpCandies},
+ [ITEM_EXP_CANDY_S] = {gItemIcon_ExpCandyS, gItemIconPalette_ExpCandies},
+ [ITEM_EXP_CANDY_M] = {gItemIcon_ExpCandyM, gItemIconPalette_ExpCandies},
+ [ITEM_EXP_CANDY_L] = {gItemIcon_ExpCandyL, gItemIconPalette_ExpCandies},
+ [ITEM_EXP_CANDY_XL] = {gItemIcon_ExpCandyXL, gItemIconPalette_ExpCandies},
+ [ITEM_DYNAMAX_CANDY] = {gItemIcon_DynamaxCandy, gItemIconPalette_DynamaxCandy},
+ // Medicinal Flutes
[ITEM_BLUE_FLUTE] = {gItemIcon_Flute, gItemIconPalette_BlueFlute},
[ITEM_YELLOW_FLUTE] = {gItemIcon_Flute, gItemIconPalette_YellowFlute},
[ITEM_RED_FLUTE] = {gItemIcon_Flute, gItemIconPalette_RedFlute},
+ // Encounter-modifying Flutes
[ITEM_BLACK_FLUTE] = {gItemIcon_Flute, gItemIconPalette_BlackFlute},
[ITEM_WHITE_FLUTE] = {gItemIcon_Flute, gItemIconPalette_WhiteFlute},
- [ITEM_BERRY_JUICE] = {gItemIcon_BerryJuice, gItemIconPalette_BerryJuice},
- [ITEM_SACRED_ASH] = {gItemIcon_SacredAsh, gItemIconPalette_SacredAsh},
- // Collectibles
+ // Encounter Modifiers
+ [ITEM_REPEL] = {gItemIcon_Repel, gItemIconPalette_Repel},
+ [ITEM_SUPER_REPEL] = {gItemIcon_Repel, gItemIconPalette_SuperRepel},
+ [ITEM_MAX_REPEL] = {gItemIcon_Repel, gItemIconPalette_MaxRepel},
+ [ITEM_LURE] = {gItemIcon_Lure, gItemIconPalette_Lure},
+ [ITEM_SUPER_LURE] = {gItemIcon_Lure, gItemIconPalette_SuperLure},
+ [ITEM_MAX_LURE] = {gItemIcon_Lure, gItemIconPalette_MaxLure},
+ [ITEM_ESCAPE_ROPE] = {gItemIcon_EscapeRope, gItemIconPalette_EscapeRope},
+ // X Items
+ [ITEM_X_ATTACK] = {gItemIcon_BattleStatItem, gItemIconPalette_XAttack},
+ [ITEM_X_DEFENSE] = {gItemIcon_BattleStatItem, gItemIconPalette_XDefend},
+ [ITEM_X_SP_ATK] = {gItemIcon_BattleStatItem, gItemIconPalette_XSpecial},
+ [ITEM_X_SP_DEF] = {gItemIcon_XSpecialDefense, gItemIconPalette_XSpecialDefense},
+ [ITEM_X_SPEED] = {gItemIcon_BattleStatItem, gItemIconPalette_XSpeed},
+ [ITEM_X_ACCURACY] = {gItemIcon_BattleStatItem, gItemIconPalette_XAccuracy},
+ [ITEM_DIRE_HIT] = {gItemIcon_BattleStatItem, gItemIconPalette_DireHit},
+ [ITEM_GUARD_SPEC] = {gItemIcon_BattleStatItem, gItemIconPalette_GuardSpec},
+ // Escape Items
+ [ITEM_POKE_DOLL] = {gItemIcon_PokeDoll, gItemIconPalette_PokeDoll},
+ [ITEM_FLUFFY_TAIL] = {gItemIcon_FluffyTail, gItemIconPalette_FluffyTail},
+ [ITEM_POKE_TOY] = {gItemIcon_PokeToy, gItemIconPalette_PokeToy},
+ [ITEM_MAX_MUSHROOMS] = {gItemIcon_MaxMushrooms, gItemIconPalette_MaxMushrooms},
+ // Treasures
+ [ITEM_BOTTLE_CAP] = {gItemIcon_BottleCap, gItemIconPalette_BottleCap},
+ [ITEM_GOLD_BOTTLE_CAP] = {gItemIcon_BottleCap, gItemIconPalette_GoldBottleCap},
+ [ITEM_NUGGET] = {gItemIcon_Nugget, gItemIconPalette_Nugget},
+ [ITEM_BIG_NUGGET] = {gItemIcon_BigNugget, gItemIconPalette_BigNugget},
+ [ITEM_TINY_MUSHROOM] = {gItemIcon_TinyMushroom, gItemIconPalette_Mushroom},
+ [ITEM_BIG_MUSHROOM] = {gItemIcon_BigMushroom, gItemIconPalette_Mushroom},
+ [ITEM_BALM_MUSHROOM] = {gItemIcon_BalmMushroom, gItemIconPalette_BalmMushroom},
+ [ITEM_PEARL] = {gItemIcon_Pearl, gItemIconPalette_Pearl},
+ [ITEM_BIG_PEARL] = {gItemIcon_BigPearl, gItemIconPalette_Pearl},
+ [ITEM_PEARL_STRING] = {gItemIcon_PearlString, gItemIconPalette_PearlString},
+ [ITEM_STARDUST] = {gItemIcon_Stardust, gItemIconPalette_Star},
+ [ITEM_STAR_PIECE] = {gItemIcon_StarPiece, gItemIconPalette_Star},
+ [ITEM_COMET_SHARD] = {gItemIcon_CometShard, gItemIconPalette_CometShard},
[ITEM_SHOAL_SALT] = {gItemIcon_Powder, gItemIconPalette_ShoalSalt},
[ITEM_SHOAL_SHELL] = {gItemIcon_ShoalShell, gItemIconPalette_Shell},
[ITEM_RED_SHARD] = {gItemIcon_Shard, gItemIconPalette_RedShard},
[ITEM_BLUE_SHARD] = {gItemIcon_Shard, gItemIconPalette_BlueShard},
[ITEM_YELLOW_SHARD] = {gItemIcon_Shard, gItemIconPalette_YellowShard},
[ITEM_GREEN_SHARD] = {gItemIcon_Shard, gItemIconPalette_GreenShard},
- // ????????
- [ITEM_034] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_035] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_036] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_037] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_038] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_039] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_03A] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_03B] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_03C] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_03D] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_03E] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // Vitamins
- [ITEM_HP_UP] = {gItemIcon_HPUp, gItemIconPalette_HPUp},
- [ITEM_PROTEIN] = {gItemIcon_Vitamin, gItemIconPalette_Protein},
- [ITEM_IRON] = {gItemIcon_Vitamin, gItemIconPalette_Iron},
- [ITEM_CARBOS] = {gItemIcon_Vitamin, gItemIconPalette_Carbos},
- [ITEM_CALCIUM] = {gItemIcon_Vitamin, gItemIconPalette_Calcium},
- [ITEM_RARE_CANDY] = {gItemIcon_RareCandy, gItemIconPalette_RareCandy},
- [ITEM_PP_UP] = {gItemIcon_PPUp, gItemIconPalette_PPUp},
- [ITEM_ZINC] = {gItemIcon_Vitamin, gItemIconPalette_Zinc},
- [ITEM_PP_MAX] = {gItemIcon_PPMax, gItemIconPalette_PPMax},
- // ????????
- [ITEM_048] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // Battle items
- [ITEM_GUARD_SPEC] = {gItemIcon_BattleStatItem, gItemIconPalette_GuardSpec},
- [ITEM_DIRE_HIT] = {gItemIcon_BattleStatItem, gItemIconPalette_DireHit},
- [ITEM_X_ATTACK] = {gItemIcon_BattleStatItem, gItemIconPalette_XAttack},
- [ITEM_X_DEFEND] = {gItemIcon_BattleStatItem, gItemIconPalette_XDefend},
- [ITEM_X_SPEED] = {gItemIcon_BattleStatItem, gItemIconPalette_XSpeed},
- [ITEM_X_ACCURACY] = {gItemIcon_BattleStatItem, gItemIconPalette_XAccuracy},
- [ITEM_X_SPECIAL] = {gItemIcon_BattleStatItem, gItemIconPalette_XSpecial},
- [ITEM_POKE_DOLL] = {gItemIcon_PokeDoll, gItemIconPalette_PokeDoll},
- [ITEM_FLUFFY_TAIL] = {gItemIcon_FluffyTail, gItemIconPalette_FluffyTail},
- // ????????
- [ITEM_052] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // Field items
- [ITEM_SUPER_REPEL] = {gItemIcon_Repel, gItemIconPalette_SuperRepel},
- [ITEM_MAX_REPEL] = {gItemIcon_Repel, gItemIconPalette_MaxRepel},
- [ITEM_ESCAPE_ROPE] = {gItemIcon_EscapeRope, gItemIconPalette_EscapeRope},
- [ITEM_REPEL] = {gItemIcon_Repel, gItemIconPalette_Repel},
- // ????????
- [ITEM_057] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_058] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_059] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_05A] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_05B] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_05C] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // Evolution stones
- [ITEM_SUN_STONE] = {gItemIcon_SunStone, gItemIconPalette_SunStone},
- [ITEM_MOON_STONE] = {gItemIcon_MoonStone, gItemIconPalette_MoonStone},
- [ITEM_FIRE_STONE] = {gItemIcon_FireStone, gItemIconPalette_FireStone},
- [ITEM_THUNDER_STONE] = {gItemIcon_ThunderStone, gItemIconPalette_ThunderStone},
- [ITEM_WATER_STONE] = {gItemIcon_WaterStone, gItemIconPalette_WaterStone},
- [ITEM_LEAF_STONE] = {gItemIcon_LeafStone, gItemIconPalette_LeafStone},
- // ????????
- [ITEM_063] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_064] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_065] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_066] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // Valuables
- [ITEM_TINY_MUSHROOM] = {gItemIcon_TinyMushroom, gItemIconPalette_Mushroom},
- [ITEM_BIG_MUSHROOM] = {gItemIcon_BigMushroom, gItemIconPalette_Mushroom},
- [ITEM_069] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_PEARL] = {gItemIcon_Pearl, gItemIconPalette_Pearl},
- [ITEM_BIG_PEARL] = {gItemIcon_BigPearl, gItemIconPalette_Pearl},
- [ITEM_STARDUST] = {gItemIcon_Stardust, gItemIconPalette_Star},
- [ITEM_STAR_PIECE] = {gItemIcon_StarPiece, gItemIconPalette_Star},
- [ITEM_NUGGET] = {gItemIcon_Nugget, gItemIconPalette_Nugget},
[ITEM_HEART_SCALE] = {gItemIcon_HeartScale, gItemIconPalette_HeartScale},
- // ????????
- [ITEM_070] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_071] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_072] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_073] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_074] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_075] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_076] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_077] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_078] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
+ [ITEM_HONEY] = {gItemIcon_Honey, gItemIconPalette_Honey},
+ [ITEM_RARE_BONE] = {gItemIcon_RareBone, gItemIconPalette_RareBone},
+ [ITEM_ODD_KEYSTONE] = {gItemIcon_OddKeystone, gItemIconPalette_OddKeystone},
+ [ITEM_PRETTY_FEATHER] = {gItemIcon_PrettyFeather, gItemIconPalette_PrettyFeather},
+ [ITEM_RELIC_COPPER] = {gItemIcon_RelicCoin, gItemIconPalette_RelicCopper},
+ [ITEM_RELIC_SILVER] = {gItemIcon_RelicCoin, gItemIconPalette_RelicSilver},
+ [ITEM_RELIC_GOLD] = {gItemIcon_RelicCoin, gItemIconPalette_RelicGold},
+ [ITEM_RELIC_VASE] = {gItemIcon_RelicVase, gItemIconPalette_Relics},
+ [ITEM_RELIC_BAND] = {gItemIcon_RelicBand, gItemIconPalette_Relics},
+ [ITEM_RELIC_STATUE] = {gItemIcon_RelicStatue, gItemIconPalette_Relics},
+ [ITEM_RELIC_CROWN] = {gItemIcon_RelicCrown, gItemIconPalette_Relics},
+ [ITEM_STRANGE_SOUVENIR] = {gItemIcon_StrangeSouvenir, gItemIconPalette_StrangeSouvenir},
+ // Fossils
+ [ITEM_HELIX_FOSSIL] = {gItemIcon_HelixFossil, gItemIconPalette_KantoFossil},
+ [ITEM_DOME_FOSSIL] = {gItemIcon_DomeFossil, gItemIconPalette_KantoFossil},
+ [ITEM_OLD_AMBER] = {gItemIcon_OldAmber, gItemIconPalette_OldAmber},
+ [ITEM_ROOT_FOSSIL] = {gItemIcon_RootFossil, gItemIconPalette_HoennFossil},
+ [ITEM_CLAW_FOSSIL] = {gItemIcon_ClawFossil, gItemIconPalette_HoennFossil},
+ [ITEM_ARMOR_FOSSIL] = {gItemIcon_ArmorFossil, gItemIconPalette_ArmorFossil},
+ [ITEM_SKULL_FOSSIL] = {gItemIcon_SkullFossil, gItemIconPalette_SkullFossil},
+ [ITEM_COVER_FOSSIL] = {gItemIcon_CoverFossil, gItemIconPalette_CoverFossil},
+ [ITEM_PLUME_FOSSIL] = {gItemIcon_PlumeFossil, gItemIconPalette_PlumeFossil},
+ [ITEM_JAW_FOSSIL] = {gItemIcon_JawFossil, gItemIconPalette_JawFossil},
+ [ITEM_SAIL_FOSSIL] = {gItemIcon_SailFossil, gItemIconPalette_SailFossil},
+ [ITEM_FOSSILIZED_BIRD] = {gItemIcon_FossilizedBird, gItemIconPalette_FossilizedBird},
+ [ITEM_FOSSILIZED_FISH] = {gItemIcon_FossilizedFish, gItemIconPalette_FossilizedFish},
+ [ITEM_FOSSILIZED_DRAKE] = {gItemIcon_FossilizedDrake, gItemIconPalette_FossilizedDrake},
+ [ITEM_FOSSILIZED_DINO] = {gItemIcon_FossilizedDino, gItemIconPalette_FossilizedDino},
+ // Mulch
+ [ITEM_GROWTH_MULCH] = {gItemIcon_Mulch, gItemIconPalette_GrowthMulch},
+ [ITEM_DAMP_MULCH] = {gItemIcon_Mulch, gItemIconPalette_DampMulch},
+ [ITEM_STABLE_MULCH] = {gItemIcon_StableMulch, gItemIconPalette_StableMulch},
+ [ITEM_GOOEY_MULCH] = {gItemIcon_Mulch, gItemIconPalette_GooeyMulch},
+ [ITEM_RICH_MULCH] = {gItemIcon_Mulch, gItemIconPalette_RichMulch},
+ [ITEM_SURPRISE_MULCH] = {gItemIcon_Mulch, gItemIconPalette_SurpriseMulch},
+ [ITEM_BOOST_MULCH] = {gItemIcon_Mulch, gItemIconPalette_BoostMulch},
+ [ITEM_AMAZE_MULCH] = {gItemIcon_Mulch, gItemIconPalette_AmazeMulch},
+ // Apricorns
+ [ITEM_RED_APRICORN] = {gItemIcon_RedApricorn, gItemIconPalette_RedApricorn},
+ [ITEM_BLUE_APRICORN] = {gItemIcon_BlueApricorn, gItemIconPalette_BlueApricorn},
+ [ITEM_YELLOW_APRICORN] = {gItemIcon_YellowApricorn, gItemIconPalette_YellowApricorn},
+ [ITEM_GREEN_APRICORN] = {gItemIcon_GreenApricorn, gItemIconPalette_GreenApricorn},
+ [ITEM_PINK_APRICORN] = {gItemIcon_PinkApricorn, gItemIconPalette_PinkApricorn},
+ [ITEM_WHITE_APRICORN] = {gItemIcon_WhiteApricorn, gItemIconPalette_WhiteApricorn},
+ [ITEM_BLACK_APRICORN] = {gItemIcon_BlackApricorn, gItemIconPalette_BlackApricorn},
+ [ITEM_WISHING_PIECE] = {gItemIcon_WishingPiece, gItemIconPalette_WishingPiece},
+ [ITEM_GALARICA_TWIG] = {gItemIcon_GalaricaTwig, gItemIconPalette_GalaricaItem},
+ [ITEM_ARMORITE_ORE] = {gItemIcon_ArmoriteOre, gItemIconPalette_ArmoriteOre},
+ [ITEM_DYNITE_ORE] = {gItemIcon_DyniteOre, gItemIconPalette_DyniteOre},
// Mail
[ITEM_ORANGE_MAIL] = {gItemIcon_OrangeMail, gItemIconPalette_OrangeMail},
[ITEM_HARBOR_MAIL] = {gItemIcon_HarborMail, gItemIconPalette_HarborMail},
@@ -148,6 +229,329 @@ const u32 *const gItemIconTable[][2] =
[ITEM_DREAM_MAIL] = {gItemIcon_DreamMail, gItemIconPalette_DreamMail},
[ITEM_FAB_MAIL] = {gItemIcon_FabMail, gItemIconPalette_FabMail},
[ITEM_RETRO_MAIL] = {gItemIcon_RetroMail, gItemIconPalette_RetroMail},
+ // Evolution Items
+ [ITEM_FIRE_STONE] = {gItemIcon_FireStone, gItemIconPalette_FireStone},
+ [ITEM_WATER_STONE] = {gItemIcon_WaterStone, gItemIconPalette_WaterStone},
+ [ITEM_THUNDER_STONE] = {gItemIcon_ThunderStone, gItemIconPalette_ThunderStone},
+ [ITEM_LEAF_STONE] = {gItemIcon_LeafStone, gItemIconPalette_LeafStone},
+ [ITEM_ICE_STONE] = {gItemIcon_IceStone, gItemIconPalette_IceStone},
+ [ITEM_SUN_STONE] = {gItemIcon_SunStone, gItemIconPalette_SunStone},
+ [ITEM_MOON_STONE] = {gItemIcon_MoonStone, gItemIconPalette_MoonStone},
+ [ITEM_SHINY_STONE] = {gItemIcon_ShinyStone, gItemIconPalette_ShinyStone},
+ [ITEM_DUSK_STONE] = {gItemIcon_DuskStone, gItemIconPalette_DuskStone},
+ [ITEM_DAWN_STONE] = {gItemIcon_DawnStone, gItemIconPalette_DawnStone},
+ [ITEM_SWEET_APPLE] = {gItemIcon_SweetApple, gItemIconPalette_SweetApple},
+ [ITEM_TART_APPLE] = {gItemIcon_TartApple, gItemIconPalette_TartApple},
+ [ITEM_CRACKED_POT] = {gItemIcon_CrackedPot, gItemIconPalette_Pot},
+ [ITEM_CHIPPED_POT] = {gItemIcon_ChippedPot, gItemIconPalette_Pot},
+ [ITEM_GALARICA_CUFF] = {gItemIcon_GalaricaCuff, gItemIconPalette_GalaricaItem},
+ [ITEM_GALARICA_WREATH] = {gItemIcon_GalaricaWreath, gItemIconPalette_GalaricaItem},
+ [ITEM_DRAGON_SCALE] = {gItemIcon_DragonScale, gItemIconPalette_DragonScale},
+ [ITEM_UPGRADE] = {gItemIcon_Upgrade, gItemIconPalette_Upgrade},
+ [ITEM_PROTECTOR] = {gItemIcon_Protector, gItemIconPalette_Protector},
+ [ITEM_ELECTIRIZER] = {gItemIcon_Electirizer, gItemIconPalette_Electirizer},
+ [ITEM_MAGMARIZER] = {gItemIcon_Magmarizer, gItemIconPalette_Magmarizer},
+ [ITEM_DUBIOUS_DISC] = {gItemIcon_DubiousDisc, gItemIconPalette_DubiousDisc},
+ [ITEM_REAPER_CLOTH] = {gItemIcon_ReaperCloth, gItemIconPalette_ReaperCloth},
+ [ITEM_PRISM_SCALE] = {gItemIcon_PrismScale, gItemIconPalette_PrismScale},
+ [ITEM_WHIPPED_DREAM] = {gItemIcon_WhippedDream, gItemIconPalette_WhippedDream},
+ [ITEM_SACHET] = {gItemIcon_Sachet, gItemIconPalette_Sachet},
+ [ITEM_OVAL_STONE] = {gItemIcon_OvalStone, gItemIconPalette_OvalStone},
+ [ITEM_STRAWBERRY_SWEET] = {gItemIcon_StrawberrySweet, gItemIconPalette_StrawberrySweet},
+ [ITEM_LOVE_SWEET] = {gItemIcon_LoveSweet, gItemIconPalette_LoveSweet},
+ [ITEM_BERRY_SWEET] = {gItemIcon_BerrySweet, gItemIconPalette_BerrySweet},
+ [ITEM_CLOVER_SWEET] = {gItemIcon_CloverSweet, gItemIconPalette_CloverSweet},
+ [ITEM_FLOWER_SWEET] = {gItemIcon_FlowerSweet, gItemIconPalette_FlowerSweet},
+ [ITEM_STAR_SWEET] = {gItemIcon_StarSweet, gItemIconPalette_StarSweet},
+ [ITEM_RIBBON_SWEET] = {gItemIcon_RibbonSweet, gItemIconPalette_RibbonSweet},
+ [ITEM_EVERSTONE] = {gItemIcon_Everstone, gItemIconPalette_Everstone},
+ // Nectars
+ [ITEM_RED_NECTAR] = {gItemIcon_RedNectar, gItemIconPalette_RedNectar},
+ [ITEM_YELLOW_NECTAR] = {gItemIcon_YellowNectar, gItemIconPalette_YellowNectar},
+ [ITEM_PINK_NECTAR] = {gItemIcon_PinkNectar, gItemIconPalette_PinkNectar},
+ [ITEM_PURPLE_NECTAR] = {gItemIcon_PurpleNectar, gItemIconPalette_PurpleNectar},
+ // Plates
+ [ITEM_FLAME_PLATE] = {gItemIcon_FlamePlate, gItemIconPalette_FlamePlate},
+ [ITEM_SPLASH_PLATE] = {gItemIcon_SplashPlate, gItemIconPalette_SplashPlate},
+ [ITEM_ZAP_PLATE] = {gItemIcon_ZapPlate, gItemIconPalette_ZapPlate},
+ [ITEM_MEADOW_PLATE] = {gItemIcon_MeadowPlate, gItemIconPalette_MeadowPlate},
+ [ITEM_ICICLE_PLATE] = {gItemIcon_IciclePlate, gItemIconPalette_IciclePlate},
+ [ITEM_FIST_PLATE] = {gItemIcon_FistPlate, gItemIconPalette_FistPlate},
+ [ITEM_TOXIC_PLATE] = {gItemIcon_ToxicPlate, gItemIconPalette_ToxicPlate},
+ [ITEM_EARTH_PLATE] = {gItemIcon_EarthPlate, gItemIconPalette_EarthPlate},
+ [ITEM_SKY_PLATE] = {gItemIcon_SkyPlate, gItemIconPalette_SkyPlate},
+ [ITEM_MIND_PLATE] = {gItemIcon_MindPlate, gItemIconPalette_MindPlate},
+ [ITEM_INSECT_PLATE] = {gItemIcon_InsectPlate, gItemIconPalette_InsectPlate},
+ [ITEM_STONE_PLATE] = {gItemIcon_StonePlate, gItemIconPalette_StonePlate},
+ [ITEM_SPOOKY_PLATE] = {gItemIcon_SpookyPlate, gItemIconPalette_SpookyPlate},
+ [ITEM_DRACO_PLATE] = {gItemIcon_DracoPlate, gItemIconPalette_DracoPlate},
+ [ITEM_DREAD_PLATE] = {gItemIcon_DreadPlate, gItemIconPalette_DreadPlate},
+ [ITEM_IRON_PLATE] = {gItemIcon_IronPlate, gItemIconPalette_IronPlate},
+ [ITEM_PIXIE_PLATE] = {gItemIcon_PixiePlate, gItemIconPalette_PixiePlate},
+ // Drives
+ [ITEM_DOUSE_DRIVE] = {gItemIcon_DouseDrive, gItemIconPalette_DouseDrive},
+ [ITEM_SHOCK_DRIVE] = {gItemIcon_ShockDrive, gItemIconPalette_ShockDrive},
+ [ITEM_BURN_DRIVE] = {gItemIcon_BurnDrive, gItemIconPalette_BurnDrive},
+ [ITEM_CHILL_DRIVE] = {gItemIcon_ChillDrive, gItemIconPalette_ChillDrive},
+ // Memories
+ [ITEM_FIRE_MEMORY] = {gItemIcon_FireMemory, gItemIconPalette_FireMemory},
+ [ITEM_WATER_MEMORY] = {gItemIcon_WaterMemory, gItemIconPalette_WaterMemory},
+ [ITEM_ELECTRIC_MEMORY] = {gItemIcon_ElectricMemory, gItemIconPalette_ElectricMemory},
+ [ITEM_GRASS_MEMORY] = {gItemIcon_GrassMemory, gItemIconPalette_GrassMemory},
+ [ITEM_ICE_MEMORY] = {gItemIcon_IceMemory, gItemIconPalette_IceMemory},
+ [ITEM_FIGHTING_MEMORY] = {gItemIcon_FightingMemory, gItemIconPalette_FightingMemory},
+ [ITEM_POISON_MEMORY] = {gItemIcon_PoisonMemory, gItemIconPalette_PoisonMemory},
+ [ITEM_GROUND_MEMORY] = {gItemIcon_GroundMemory, gItemIconPalette_GroundMemory},
+ [ITEM_FLYING_MEMORY] = {gItemIcon_FlyingMemory, gItemIconPalette_FlyingMemory},
+ [ITEM_PSYCHIC_MEMORY] = {gItemIcon_PsychicMemory, gItemIconPalette_PsychicMemory},
+ [ITEM_BUG_MEMORY] = {gItemIcon_BugMemory, gItemIconPalette_BugMemory},
+ [ITEM_ROCK_MEMORY] = {gItemIcon_RockMemory, gItemIconPalette_RockMemory},
+ [ITEM_GHOST_MEMORY] = {gItemIcon_GhostMemory, gItemIconPalette_GhostMemory},
+ [ITEM_DRAGON_MEMORY] = {gItemIcon_DragonMemory, gItemIconPalette_DragonMemory},
+ [ITEM_DARK_MEMORY] = {gItemIcon_DarkMemory, gItemIconPalette_DarkMemory},
+ [ITEM_STEEL_MEMORY] = {gItemIcon_SteelMemory, gItemIconPalette_SteelMemory},
+ [ITEM_FAIRY_MEMORY] = {gItemIcon_FairyMemory, gItemIconPalette_FairyMemory},
+ [ITEM_RUSTED_SWORD] = {gItemIcon_RustedSword, gItemIconPalette_RustedWeapons},
+ [ITEM_RUSTED_SHIELD] = {gItemIcon_RustedShield, gItemIconPalette_RustedWeapons},
+ // Colored Orbs
+ [ITEM_RED_ORB] = {gItemIcon_RedOrb, gItemIconPalette_RedOrb},
+ [ITEM_BLUE_ORB] = {gItemIcon_BlueOrb, gItemIconPalette_BlueOrb},
+ // Mega Stones
+ [ITEM_VENUSAURITE] = {gItemIcon_Venusaurite, gItemIconPalette_Venusaurite},
+ [ITEM_CHARIZARDITE_X] = {gItemIcon_CharizarditeX, gItemIconPalette_CharizarditeX},
+ [ITEM_CHARIZARDITE_Y] = {gItemIcon_CharizarditeY, gItemIconPalette_CharizarditeY},
+ [ITEM_BLASTOISINITE] = {gItemIcon_Blastoisinite, gItemIconPalette_Blastoisinite},
+ [ITEM_BEEDRILLITE] = {gItemIcon_Beedrillite, gItemIconPalette_Beedrillite},
+ [ITEM_PIDGEOTITE] = {gItemIcon_Pidgeotite, gItemIconPalette_Pidgeotite},
+ [ITEM_ALAKAZITE] = {gItemIcon_Alakazite, gItemIconPalette_Alakazite},
+ [ITEM_SLOWBRONITE] = {gItemIcon_Slowbronite, gItemIconPalette_Slowbronite},
+ [ITEM_GENGARITE] = {gItemIcon_Gengarite, gItemIconPalette_Gengarite},
+ [ITEM_KANGASKHANITE] = {gItemIcon_Kangaskhanite, gItemIconPalette_Kangaskhanite},
+ [ITEM_PINSIRITE] = {gItemIcon_Pinsirite, gItemIconPalette_Pinsirite},
+ [ITEM_GYARADOSITE] = {gItemIcon_Gyaradosite, gItemIconPalette_Gyaradosite},
+ [ITEM_AERODACTYLITE] = {gItemIcon_Aerodactylite, gItemIconPalette_Aerodactylite},
+ [ITEM_MEWTWONITE_X] = {gItemIcon_MewtwoniteX, gItemIconPalette_MewtwoniteX},
+ [ITEM_MEWTWONITE_Y] = {gItemIcon_MewtwoniteY, gItemIconPalette_MewtwoniteY},
+ [ITEM_AMPHAROSITE] = {gItemIcon_Ampharosite, gItemIconPalette_Ampharosite},
+ [ITEM_STEELIXITE] = {gItemIcon_Steelixite, gItemIconPalette_Steelixite},
+ [ITEM_SCIZORITE] = {gItemIcon_Scizorite, gItemIconPalette_Scizorite},
+ [ITEM_HERACRONITE] = {gItemIcon_Heracronite, gItemIconPalette_Heracronite},
+ [ITEM_HOUNDOOMINITE] = {gItemIcon_Houndoominite, gItemIconPalette_Houndoominite},
+ [ITEM_TYRANITARITE] = {gItemIcon_Tyranitarite, gItemIconPalette_Tyranitarite},
+ [ITEM_SCEPTILITE] = {gItemIcon_Sceptilite, gItemIconPalette_Sceptilite},
+ [ITEM_BLAZIKENITE] = {gItemIcon_Blazikenite, gItemIconPalette_Blazikenite},
+ [ITEM_SWAMPERTITE] = {gItemIcon_Swampertite, gItemIconPalette_Swampertite},
+ [ITEM_GARDEVOIRITE] = {gItemIcon_Gardevoirite, gItemIconPalette_Gardevoirite},
+ [ITEM_SABLENITE] = {gItemIcon_Sablenite, gItemIconPalette_Sablenite},
+ [ITEM_MAWILITE] = {gItemIcon_Mawilite, gItemIconPalette_Mawilite},
+ [ITEM_AGGRONITE] = {gItemIcon_Aggronite, gItemIconPalette_Aggronite},
+ [ITEM_MEDICHAMITE] = {gItemIcon_Medichamite, gItemIconPalette_Medichamite},
+ [ITEM_MANECTITE] = {gItemIcon_Manectite, gItemIconPalette_Manectite},
+ [ITEM_SHARPEDONITE] = {gItemIcon_Sharpedonite, gItemIconPalette_Sharpedonite},
+ [ITEM_CAMERUPTITE] = {gItemIcon_Cameruptite, gItemIconPalette_Cameruptite},
+ [ITEM_ALTARIANITE] = {gItemIcon_Altarianite, gItemIconPalette_Altarianite},
+ [ITEM_BANETTITE] = {gItemIcon_Banettite, gItemIconPalette_Banettite},
+ [ITEM_ABSOLITE] = {gItemIcon_Absolite, gItemIconPalette_Absolite},
+ [ITEM_GLALITITE] = {gItemIcon_Glalitite, gItemIconPalette_Glalitite},
+ [ITEM_SALAMENCITE] = {gItemIcon_Salamencite, gItemIconPalette_Salamencite},
+ [ITEM_METAGROSSITE] = {gItemIcon_Metagrossite, gItemIconPalette_Metagrossite},
+ [ITEM_LATIASITE] = {gItemIcon_Latiasite, gItemIconPalette_Latiasite},
+ [ITEM_LATIOSITE] = {gItemIcon_Latiosite, gItemIconPalette_Latiosite},
+ [ITEM_LOPUNNITE] = {gItemIcon_Lopunnite, gItemIconPalette_Lopunnite},
+ [ITEM_GARCHOMPITE] = {gItemIcon_Garchompite, gItemIconPalette_Garchompite},
+ [ITEM_LUCARIONITE] = {gItemIcon_Lucarionite, gItemIconPalette_Lucarionite},
+ [ITEM_ABOMASITE] = {gItemIcon_Abomasite, gItemIconPalette_Abomasite},
+ [ITEM_GALLADITE] = {gItemIcon_Galladite, gItemIconPalette_Galladite},
+ [ITEM_AUDINITE] = {gItemIcon_Audinite, gItemIconPalette_Audinite},
+ [ITEM_DIANCITE] = {gItemIcon_Diancite, gItemIconPalette_Diancite},
+ // Gems
+ [ITEM_NORMAL_GEM] = {gItemIcon_NormalGem, gItemIconPalette_NormalGem},
+ [ITEM_FIRE_GEM] = {gItemIcon_FireGem, gItemIconPalette_FireGem},
+ [ITEM_WATER_GEM] = {gItemIcon_WaterGem, gItemIconPalette_WaterGem},
+ [ITEM_ELECTRIC_GEM] = {gItemIcon_ElectricGem, gItemIconPalette_ElectricGem},
+ [ITEM_GRASS_GEM] = {gItemIcon_GrassGem, gItemIconPalette_GrassGem},
+ [ITEM_ICE_GEM] = {gItemIcon_IceGem, gItemIconPalette_IceGem},
+ [ITEM_FIGHTING_GEM] = {gItemIcon_FightingGem, gItemIconPalette_FightingGem},
+ [ITEM_POISON_GEM] = {gItemIcon_PoisonGem, gItemIconPalette_PoisonGem},
+ [ITEM_GROUND_GEM] = {gItemIcon_GroundGem, gItemIconPalette_GroundGem},
+ [ITEM_FLYING_GEM] = {gItemIcon_FlyingGem, gItemIconPalette_FlyingGem},
+ [ITEM_PSYCHIC_GEM] = {gItemIcon_PsychicGem, gItemIconPalette_PsychicGem},
+ [ITEM_BUG_GEM] = {gItemIcon_BugGem, gItemIconPalette_BugGem},
+ [ITEM_ROCK_GEM] = {gItemIcon_RockGem, gItemIconPalette_RockGem},
+ [ITEM_GHOST_GEM] = {gItemIcon_GhostGem, gItemIconPalette_GhostGem},
+ [ITEM_DRAGON_GEM] = {gItemIcon_DragonGem, gItemIconPalette_DragonGem},
+ [ITEM_DARK_GEM] = {gItemIcon_DarkGem, gItemIconPalette_DarkGem},
+ [ITEM_STEEL_GEM] = {gItemIcon_SteelGem, gItemIconPalette_SteelGem},
+ [ITEM_FAIRY_GEM] = {gItemIcon_FairyGem, gItemIconPalette_FairyGem},
+ // Z-Crystals
+ [ITEM_NORMALIUM_Z] = {gItemIcon_NormaliumZ, gItemIconPalette_NormaliumZ},
+ [ITEM_FIRIUM_Z] = {gItemIcon_FiriumZ, gItemIconPalette_FiriumZ},
+ [ITEM_WATERIUM_Z] = {gItemIcon_WateriumZ, gItemIconPalette_WateriumZ},
+ [ITEM_ELECTRIUM_Z] = {gItemIcon_ElectriumZ, gItemIconPalette_ElectriumZ},
+ [ITEM_GRASSIUM_Z] = {gItemIcon_GrassiumZ, gItemIconPalette_GrassiumZ},
+ [ITEM_ICIUM_Z] = {gItemIcon_IciumZ, gItemIconPalette_IciumZ},
+ [ITEM_FIGHTINIUM_Z] = {gItemIcon_FightiniumZ, gItemIconPalette_FightiniumZ},
+ [ITEM_POISONIUM_Z] = {gItemIcon_PoisoniumZ, gItemIconPalette_PoisoniumZ},
+ [ITEM_GROUNDIUM_Z] = {gItemIcon_GroundiumZ, gItemIconPalette_GroundiumZ},
+ [ITEM_FLYINIUM_Z] = {gItemIcon_FlyiniumZ, gItemIconPalette_FlyiniumZ},
+ [ITEM_PSYCHIUM_Z] = {gItemIcon_PsychiumZ, gItemIconPalette_PsychiumZ},
+ [ITEM_BUGINIUM_Z] = {gItemIcon_BuginiumZ, gItemIconPalette_BuginiumZ},
+ [ITEM_ROCKIUM_Z] = {gItemIcon_RockiumZ, gItemIconPalette_RockiumZ},
+ [ITEM_GHOSTIUM_Z] = {gItemIcon_GhostiumZ, gItemIconPalette_GhostiumZ},
+ [ITEM_DRAGONIUM_Z] = {gItemIcon_DragoniumZ, gItemIconPalette_DragoniumZ},
+ [ITEM_DARKINIUM_Z] = {gItemIcon_DarkiniumZ, gItemIconPalette_DarkiniumZ},
+ [ITEM_STEELIUM_Z] = {gItemIcon_SteeliumZ, gItemIconPalette_SteeliumZ},
+ [ITEM_FAIRIUM_Z] = {gItemIcon_FairiumZ, gItemIconPalette_FairiumZ},
+ [ITEM_PIKANIUM_Z] = {gItemIcon_PikaniumZ, gItemIconPalette_PikaniumZ},
+ [ITEM_EEVIUM_Z] = {gItemIcon_EeviumZ, gItemIconPalette_EeviumZ},
+ [ITEM_SNORLIUM_Z] = {gItemIcon_SnorliumZ, gItemIconPalette_SnorliumZ},
+ [ITEM_MEWNIUM_Z] = {gItemIcon_MewniumZ, gItemIconPalette_MewniumZ},
+ [ITEM_DECIDIUM_Z] = {gItemIcon_DecidiumZ, gItemIconPalette_DecidiumZ},
+ [ITEM_INCINIUM_Z] = {gItemIcon_InciniumZ, gItemIconPalette_InciniumZ},
+ [ITEM_PRIMARIUM_Z] = {gItemIcon_PrimariumZ, gItemIconPalette_PrimariumZ},
+ [ITEM_LYCANIUM_Z] = {gItemIcon_LycaniumZ, gItemIconPalette_LycaniumZ},
+ [ITEM_MIMIKIUM_Z] = {gItemIcon_MimikiumZ, gItemIconPalette_MimikiumZ},
+ [ITEM_KOMMONIUM_Z] = {gItemIcon_KommoniumZ, gItemIconPalette_KommoniumZ},
+ [ITEM_TAPUNIUM_Z] = {gItemIcon_TapuniumZ, gItemIconPalette_TapuniumZ},
+ [ITEM_SOLGANIUM_Z] = {gItemIcon_SolganiumZ, gItemIconPalette_SolganiumZ},
+ [ITEM_LUNALIUM_Z] = {gItemIcon_LunaliumZ, gItemIconPalette_LunaliumZ},
+ [ITEM_MARSHADIUM_Z] = {gItemIcon_MarshadiumZ, gItemIconPalette_MarshadiumZ},
+ [ITEM_ALORAICHIUM_Z] = {gItemIcon_AloraichiumZ, gItemIconPalette_AloraichiumZ},
+ [ITEM_PIKASHUNIUM_Z] = {gItemIcon_PikashuniumZ, gItemIconPalette_PikashuniumZ},
+ [ITEM_ULTRANECROZIUM_Z] = {gItemIcon_UltranecroziumZ, gItemIconPalette_UltranecroziumZ},
+ // Species-specific Held Items
+ [ITEM_LIGHT_BALL] = {gItemIcon_LightBall, gItemIconPalette_LightBall},
+ [ITEM_LEEK] = {gItemIcon_Leek, gItemIconPalette_Leek},
+ [ITEM_THICK_CLUB] = {gItemIcon_ThickClub, gItemIconPalette_ThickClub},
+ [ITEM_LUCKY_PUNCH] = {gItemIcon_LuckyPunch, gItemIconPalette_LuckyPunch},
+ [ITEM_METAL_POWDER] = {gItemIcon_MetalPowder, gItemIconPalette_MetalPowder},
+ [ITEM_QUICK_POWDER] = {gItemIcon_QuickPowder, gItemIconPalette_QuickPowder},
+ [ITEM_DEEP_SEA_SCALE] = {gItemIcon_DeepSeaScale, gItemIconPalette_DeepSeaScale},
+ [ITEM_DEEP_SEA_TOOTH] = {gItemIcon_DeepSeaTooth, gItemIconPalette_DeepSeaTooth},
+ [ITEM_SOUL_DEW] = {gItemIcon_SoulDew, gItemIconPalette_SoulDew},
+ [ITEM_ADAMANT_ORB] = {gItemIcon_AdamantOrb, gItemIconPalette_AdamantOrb},
+ [ITEM_LUSTROUS_ORB] = {gItemIcon_LustrousOrb, gItemIconPalette_LustrousOrb},
+ [ITEM_GRISEOUS_ORB] = {gItemIcon_GriseousOrb, gItemIconPalette_GriseousOrb},
+ // Incenses
+ [ITEM_SEA_INCENSE] = {gItemIcon_SeaIncense, gItemIconPalette_SeaIncense},
+ [ITEM_LAX_INCENSE] = {gItemIcon_LaxIncense, gItemIconPalette_LaxIncense},
+ [ITEM_ODD_INCENSE] = {gItemIcon_OddIncense, gItemIconPalette_OddIncense},
+ [ITEM_ROCK_INCENSE] = {gItemIcon_RockIncense, gItemIconPalette_RockIncense},
+ [ITEM_FULL_INCENSE] = {gItemIcon_FullIncense, gItemIconPalette_FullIncense},
+ [ITEM_WAVE_INCENSE] = {gItemIcon_WaveIncense, gItemIconPalette_WaveIncense},
+ [ITEM_ROSE_INCENSE] = {gItemIcon_RoseIncense, gItemIconPalette_RoseIncense},
+ [ITEM_LUCK_INCENSE] = {gItemIcon_LuckIncense, gItemIconPalette_LuckIncense},
+ [ITEM_PURE_INCENSE] = {gItemIcon_PureIncense, gItemIconPalette_PureIncense},
+ // Contest Scarves
+ [ITEM_RED_SCARF] = {gItemIcon_Scarf, gItemIconPalette_RedScarf},
+ [ITEM_BLUE_SCARF] = {gItemIcon_Scarf, gItemIconPalette_BlueScarf},
+ [ITEM_PINK_SCARF] = {gItemIcon_Scarf, gItemIconPalette_PinkScarf},
+ [ITEM_GREEN_SCARF] = {gItemIcon_Scarf, gItemIconPalette_GreenScarf},
+ [ITEM_YELLOW_SCARF] = {gItemIcon_Scarf, gItemIconPalette_YellowScarf},
+ // EV Gain Modifiers
+ [ITEM_MACHO_BRACE] = {gItemIcon_MachoBrace, gItemIconPalette_MachoBrace},
+ [ITEM_POWER_WEIGHT] = {gItemIcon_PowerWeight, gItemIconPalette_PowerWeight},
+ [ITEM_POWER_BRACER] = {gItemIcon_PowerBracer, gItemIconPalette_PowerBracer},
+ [ITEM_POWER_BELT] = {gItemIcon_PowerBelt, gItemIconPalette_PowerBelt},
+ [ITEM_POWER_LENS] = {gItemIcon_PowerLens, gItemIconPalette_PowerLens},
+ [ITEM_POWER_BAND] = {gItemIcon_PowerBand, gItemIconPalette_PowerBand},
+ [ITEM_POWER_ANKLET] = {gItemIcon_PowerAnklet, gItemIconPalette_PowerAnklet},
+ // Type-boosting Held Items
+ [ITEM_SILK_SCARF] = {gItemIcon_SilkScarf, gItemIconPalette_SilkScarf},
+ [ITEM_CHARCOAL] = {gItemIcon_Charcoal, gItemIconPalette_Charcoal},
+ [ITEM_MYSTIC_WATER] = {gItemIcon_MysticWater, gItemIconPalette_MysticWater},
+ [ITEM_MAGNET] = {gItemIcon_Magnet, gItemIconPalette_Magnet},
+ [ITEM_MIRACLE_SEED] = {gItemIcon_MiracleSeed, gItemIconPalette_MiracleSeed},
+ [ITEM_NEVER_MELT_ICE] = {gItemIcon_NeverMeltIce, gItemIconPalette_NeverMeltIce},
+ [ITEM_BLACK_BELT] = {gItemIcon_BlackBelt, gItemIconPalette_BlackTypeEnhancingItem},
+ [ITEM_POISON_BARB] = {gItemIcon_PoisonBarb, gItemIconPalette_PoisonBarb},
+ [ITEM_SOFT_SAND] = {gItemIcon_SoftSand, gItemIconPalette_SoftSand},
+ [ITEM_SHARP_BEAK] = {gItemIcon_SharpBeak, gItemIconPalette_SharpBeak},
+ [ITEM_TWISTED_SPOON] = {gItemIcon_TwistedSpoon, gItemIconPalette_TwistedSpoon},
+ [ITEM_SILVER_POWDER] = {gItemIcon_SilverPowder, gItemIconPalette_SilverPowder},
+ [ITEM_HARD_STONE] = {gItemIcon_HardStone, gItemIconPalette_HardStone},
+ [ITEM_SPELL_TAG] = {gItemIcon_SpellTag, gItemIconPalette_SpellTag},
+ [ITEM_DRAGON_FANG] = {gItemIcon_DragonFang, gItemIconPalette_DragonFang},
+ [ITEM_BLACK_GLASSES] = {gItemIcon_BlackGlasses, gItemIconPalette_BlackTypeEnhancingItem},
+ [ITEM_METAL_COAT] = {gItemIcon_MetalCoat, gItemIconPalette_MetalCoat},
+ // Choice Items
+ [ITEM_CHOICE_BAND] = {gItemIcon_ChoiceBand, gItemIconPalette_ChoiceBand},
+ [ITEM_CHOICE_SPECS] = {gItemIcon_ChoiceSpecs, gItemIconPalette_ChoiceSpecs},
+ [ITEM_CHOICE_SCARF] = {gItemIcon_ChoiceScarf, gItemIconPalette_ChoiceScarf},
+ // Status Orbs
+ [ITEM_FLAME_ORB] = {gItemIcon_FlameOrb, gItemIconPalette_FlameOrb},
+ [ITEM_TOXIC_ORB] = {gItemIcon_ToxicOrb, gItemIconPalette_ToxicOrb},
+ // Weather Rocks
+ [ITEM_DAMP_ROCK] = {gItemIcon_DampRock, gItemIconPalette_DampRock},
+ [ITEM_HEAT_ROCK] = {gItemIcon_HeatRock, gItemIconPalette_HeatRock},
+ [ITEM_SMOOTH_ROCK] = {gItemIcon_SmoothRock, gItemIconPalette_SmoothRock},
+ [ITEM_ICY_ROCK] = {gItemIcon_IcyRock, gItemIconPalette_IcyRock},
+ // Terrain Seeds
+ [ITEM_ELECTRIC_SEED] = {gItemIcon_ElectricSeed, gItemIconPalette_ElectricSeed},
+ [ITEM_PSYCHIC_SEED] = {gItemIcon_PsychicSeed, gItemIconPalette_PsychicSeed},
+ [ITEM_MISTY_SEED] = {gItemIcon_MistySeed, gItemIconPalette_MistySeed},
+ [ITEM_GRASSY_SEED] = {gItemIcon_GrassySeed, gItemIconPalette_GrassySeed},
+ // Type-activated Stat Modifiers
+ [ITEM_ABSORB_BULB] = {gItemIcon_AbsorbBulb, gItemIconPalette_AbsorbBulb},
+ [ITEM_CELL_BATTERY] = {gItemIcon_CellBattery, gItemIconPalette_CellBattery},
+ [ITEM_LUMINOUS_MOSS] = {gItemIcon_LuminousMoss, gItemIconPalette_LuminousMoss},
+ [ITEM_SNOWBALL] = {gItemIcon_Snowball, gItemIconPalette_Snowball},
+ // Misc. Held Items
+ [ITEM_BRIGHT_POWDER] = {gItemIcon_BrightPowder, gItemIconPalette_BrightPowder},
+ [ITEM_WHITE_HERB] = {gItemIcon_InBattleHerb, gItemIconPalette_WhiteHerb},
+ [ITEM_EXP_SHARE] = {gItemIcon_ExpShare, gItemIconPalette_ExpShare},
+ [ITEM_QUICK_CLAW] = {gItemIcon_QuickClaw, gItemIconPalette_QuickClaw},
+ [ITEM_SOOTHE_BELL] = {gItemIcon_SootheBell, gItemIconPalette_SootheBell},
+ [ITEM_MENTAL_HERB] = {gItemIcon_InBattleHerb, gItemIconPalette_MentalHerb},
+ [ITEM_KINGS_ROCK] = {gItemIcon_KingsRock, gItemIconPalette_KingsRock},
+ [ITEM_AMULET_COIN] = {gItemIcon_AmuletCoin, gItemIconPalette_AmuletCoin},
+ [ITEM_CLEANSE_TAG] = {gItemIcon_CleanseTag, gItemIconPalette_CleanseTag},
+ [ITEM_SMOKE_BALL] = {gItemIcon_SmokeBall, gItemIconPalette_SmokeBall},
+ [ITEM_FOCUS_BAND] = {gItemIcon_FocusBand, gItemIconPalette_FocusBand},
+ [ITEM_LUCKY_EGG] = {gItemIcon_LuckyEgg, gItemIconPalette_LuckyEgg},
+ [ITEM_SCOPE_LENS] = {gItemIcon_ScopeLens, gItemIconPalette_ScopeLens},
+ [ITEM_LEFTOVERS] = {gItemIcon_Leftovers, gItemIconPalette_Leftovers},
+ [ITEM_SHELL_BELL] = {gItemIcon_ShellBell, gItemIconPalette_Shell},
+ [ITEM_WIDE_LENS] = {gItemIcon_WideLens, gItemIconPalette_WideLens},
+ [ITEM_MUSCLE_BAND] = {gItemIcon_MuscleBand, gItemIconPalette_MuscleBand},
+ [ITEM_WISE_GLASSES] = {gItemIcon_WiseGlasses, gItemIconPalette_WiseGlasses},
+ [ITEM_EXPERT_BELT] = {gItemIcon_ExpertBelt, gItemIconPalette_ExpertBelt},
+ [ITEM_LIGHT_CLAY] = {gItemIcon_LightClay, gItemIconPalette_LightClay},
+ [ITEM_LIFE_ORB] = {gItemIcon_LifeOrb, gItemIconPalette_LifeOrb},
+ [ITEM_POWER_HERB] = {gItemIcon_PowerHerb, gItemIconPalette_PowerHerb},
+ [ITEM_FOCUS_SASH] = {gItemIcon_FocusSash, gItemIconPalette_FocusSash},
+ [ITEM_ZOOM_LENS] = {gItemIcon_ZoomLens, gItemIconPalette_ZoomLens},
+ [ITEM_METRONOME] = {gItemIcon_Metronome, gItemIconPalette_Metronome},
+ [ITEM_IRON_BALL] = {gItemIcon_IronBall, gItemIconPalette_IronBall},
+ [ITEM_LAGGING_TAIL] = {gItemIcon_LaggingTail, gItemIconPalette_LaggingTail},
+ [ITEM_DESTINY_KNOT] = {gItemIcon_DestinyKnot, gItemIconPalette_DestinyKnot},
+ [ITEM_BLACK_SLUDGE] = {gItemIcon_BlackSludge, gItemIconPalette_BlackSludge},
+ [ITEM_GRIP_CLAW] = {gItemIcon_GripClaw, gItemIconPalette_GripClaw},
+ [ITEM_STICKY_BARB] = {gItemIcon_StickyBarb, gItemIconPalette_StickyBarb},
+ [ITEM_SHED_SHELL] = {gItemIcon_ShedShell, gItemIconPalette_ShedShell},
+ [ITEM_BIG_ROOT] = {gItemIcon_BigRoot, gItemIconPalette_BigRoot},
+ [ITEM_RAZOR_CLAW] = {gItemIcon_RazorClaw, gItemIconPalette_RazorClaw},
+ [ITEM_RAZOR_FANG] = {gItemIcon_RazorFang, gItemIconPalette_RazorFang},
+ [ITEM_EVIOLITE] = {gItemIcon_Eviolite, gItemIconPalette_Eviolite},
+ [ITEM_FLOAT_STONE] = {gItemIcon_FloatStone, gItemIconPalette_FloatStone},
+ [ITEM_ROCKY_HELMET] = {gItemIcon_RockyHelmet, gItemIconPalette_RockyHelmet},
+ [ITEM_AIR_BALLOON] = {gItemIcon_AirBalloon, gItemIconPalette_AirBalloon},
+ [ITEM_RED_CARD] = {gItemIcon_RedCard, gItemIconPalette_RedCard},
+ [ITEM_RING_TARGET] = {gItemIcon_RingTarget, gItemIconPalette_RingTarget},
+ [ITEM_BINDING_BAND] = {gItemIcon_BindingBand, gItemIconPalette_BindingBand},
+ [ITEM_EJECT_BUTTON] = {gItemIcon_EjectButton, gItemIconPalette_EjectButton},
+ [ITEM_WEAKNESS_POLICY] = {gItemIcon_WeaknessPolicy, gItemIconPalette_WeaknessPolicy},
+ [ITEM_ASSAULT_VEST] = {gItemIcon_AssaultVest, gItemIconPalette_AssaultVest},
+ [ITEM_SAFETY_GOGGLES] = {gItemIcon_SafetyGoggles, gItemIconPalette_SafetyGoggles},
+ [ITEM_ADRENALINE_ORB] = {gItemIcon_AdrenalineOrb, gItemIconPalette_AdrenalineOrb},
+ [ITEM_TERRAIN_EXTENDER] = {gItemIcon_TerrainExtender, gItemIconPalette_TerrainExtender},
+ [ITEM_PROTECTIVE_PADS] = {gItemIcon_ProtectivePads, gItemIconPalette_ProtectivePads},
+ [ITEM_THROAT_SPRAY] = {gItemIcon_ThroatSpray, gItemIconPalette_ThroatSpray},
+ [ITEM_EJECT_PACK] = {gItemIcon_EjectPack, gItemIconPalette_EjectPack},
+ [ITEM_HEAVY_DUTY_BOOTS] = {gItemIcon_HeavyDutyBoots, gItemIconPalette_HeavyDutyBoots},
+ [ITEM_BLUNDER_POLICY] = {gItemIcon_BlunderPolicy, gItemIconPalette_BlunderPolicy},
+ [ITEM_ROOM_SERVICE] = {gItemIcon_RoomService, gItemIconPalette_RoomService},
+ [ITEM_UTILITY_UMBRELLA] = {gItemIcon_UtilityUmbrella, gItemIconPalette_UtilityUmbrella},
// Berries
[ITEM_CHERI_BERRY] = {gItemIcon_CheriBerry, gItemIconPalette_CheriBerry},
[ITEM_CHESTO_BERRY] = {gItemIcon_ChestoBerry, gItemIconPalette_ChestoBerry},
@@ -184,6 +588,24 @@ const u32 *const gItemIconTable[][2] =
[ITEM_WATMEL_BERRY] = {gItemIcon_WatmelBerry, gItemIconPalette_WatmelBerry},
[ITEM_DURIN_BERRY] = {gItemIcon_DurinBerry, gItemIconPalette_DurinBerry},
[ITEM_BELUE_BERRY] = {gItemIcon_BelueBerry, gItemIconPalette_BelueBerry},
+ [ITEM_CHILAN_BERRY] = {gItemIcon_ChilanBerry, gItemIconPalette_ChilanBerry},
+ [ITEM_OCCA_BERRY] = {gItemIcon_OccaBerry, gItemIconPalette_OccaBerry},
+ [ITEM_PASSHO_BERRY] = {gItemIcon_PasshoBerry, gItemIconPalette_PasshoBerry},
+ [ITEM_WACAN_BERRY] = {gItemIcon_WacanBerry, gItemIconPalette_WacanBerry},
+ [ITEM_RINDO_BERRY] = {gItemIcon_RindoBerry, gItemIconPalette_RindoBerry},
+ [ITEM_YACHE_BERRY] = {gItemIcon_YacheBerry, gItemIconPalette_YacheBerry},
+ [ITEM_CHOPLE_BERRY] = {gItemIcon_ChopleBerry, gItemIconPalette_ChopleBerry},
+ [ITEM_KEBIA_BERRY] = {gItemIcon_KebiaBerry, gItemIconPalette_KebiaBerry},
+ [ITEM_SHUCA_BERRY] = {gItemIcon_ShucaBerry, gItemIconPalette_ShucaBerry},
+ [ITEM_COBA_BERRY] = {gItemIcon_CobaBerry, gItemIconPalette_CobaBerry},
+ [ITEM_PAYAPA_BERRY] = {gItemIcon_PayapaBerry, gItemIconPalette_PayapaBerry},
+ [ITEM_TANGA_BERRY] = {gItemIcon_TangaBerry, gItemIconPalette_TangaBerry},
+ [ITEM_CHARTI_BERRY] = {gItemIcon_ChartiBerry, gItemIconPalette_ChartiBerry},
+ [ITEM_KASIB_BERRY] = {gItemIcon_KasibBerry, gItemIconPalette_KasibBerry},
+ [ITEM_HABAN_BERRY] = {gItemIcon_HabanBerry, gItemIconPalette_HabanBerry},
+ [ITEM_COLBUR_BERRY] = {gItemIcon_ColburBerry, gItemIconPalette_ColburBerry},
+ [ITEM_BABIRI_BERRY] = {gItemIcon_BabiriBerry, gItemIconPalette_BabiriBerry},
+ [ITEM_ROSELI_BERRY] = {gItemIcon_RoseliBerry, gItemIconPalette_RoseliBerry},
[ITEM_LIECHI_BERRY] = {gItemIcon_LiechiBerry, gItemIconPalette_LiechiBerry},
[ITEM_GANLON_BERRY] = {gItemIcon_GanlonBerry, gItemIconPalette_GanlonBerry},
[ITEM_SALAC_BERRY] = {gItemIcon_SalacBerry, gItemIconPalette_SalacBerry},
@@ -192,124 +614,14 @@ const u32 *const gItemIconTable[][2] =
[ITEM_LANSAT_BERRY] = {gItemIcon_LansatBerry, gItemIconPalette_LansatBerry},
[ITEM_STARF_BERRY] = {gItemIcon_StarfBerry, gItemIconPalette_StarfBerry},
[ITEM_ENIGMA_BERRY] = {gItemIcon_EnigmaBerry, gItemIconPalette_EnigmaBerry},
- [ITEM_UNUSED_BERRY_1] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_UNUSED_BERRY_2] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_UNUSED_BERRY_3] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // Hold items
- [ITEM_BRIGHT_POWDER] = {gItemIcon_BrightPowder, gItemIconPalette_BrightPowder},
- [ITEM_WHITE_HERB] = {gItemIcon_InBattleHerb, gItemIconPalette_WhiteHerb},
- [ITEM_MACHO_BRACE] = {gItemIcon_MachoBrace, gItemIconPalette_MachoBrace},
- [ITEM_EXP_SHARE] = {gItemIcon_ExpShare, gItemIconPalette_ExpShare},
- [ITEM_QUICK_CLAW] = {gItemIcon_QuickClaw, gItemIconPalette_QuickClaw},
- [ITEM_SOOTHE_BELL] = {gItemIcon_SootheBell, gItemIconPalette_SootheBell},
- [ITEM_MENTAL_HERB] = {gItemIcon_InBattleHerb, gItemIconPalette_MentalHerb},
- [ITEM_CHOICE_BAND] = {gItemIcon_ChoiceBand, gItemIconPalette_ChoiceBand},
- [ITEM_KINGS_ROCK] = {gItemIcon_KingsRock, gItemIconPalette_KingsRock},
- [ITEM_SILVER_POWDER] = {gItemIcon_SilverPowder, gItemIconPalette_SilverPowder},
- [ITEM_AMULET_COIN] = {gItemIcon_AmuletCoin, gItemIconPalette_AmuletCoin},
- [ITEM_CLEANSE_TAG] = {gItemIcon_CleanseTag, gItemIconPalette_CleanseTag},
- [ITEM_SOUL_DEW] = {gItemIcon_SoulDew, gItemIconPalette_SoulDew},
- [ITEM_DEEP_SEA_TOOTH] = {gItemIcon_DeepSeaTooth, gItemIconPalette_DeepSeaTooth},
- [ITEM_DEEP_SEA_SCALE] = {gItemIcon_DeepSeaScale, gItemIconPalette_DeepSeaScale},
- [ITEM_SMOKE_BALL] = {gItemIcon_SmokeBall, gItemIconPalette_SmokeBall},
- [ITEM_EVERSTONE] = {gItemIcon_Everstone, gItemIconPalette_Everstone},
- [ITEM_FOCUS_BAND] = {gItemIcon_FocusBand, gItemIconPalette_FocusBand},
- [ITEM_LUCKY_EGG] = {gItemIcon_LuckyEgg, gItemIconPalette_LuckyEgg},
- [ITEM_SCOPE_LENS] = {gItemIcon_ScopeLens, gItemIconPalette_ScopeLens},
- [ITEM_METAL_COAT] = {gItemIcon_MetalCoat, gItemIconPalette_MetalCoat},
- [ITEM_LEFTOVERS] = {gItemIcon_Leftovers, gItemIconPalette_Leftovers},
- [ITEM_DRAGON_SCALE] = {gItemIcon_DragonScale, gItemIconPalette_DragonScale},
- [ITEM_LIGHT_BALL] = {gItemIcon_LightBall, gItemIconPalette_LightBall},
- [ITEM_SOFT_SAND] = {gItemIcon_SoftSand, gItemIconPalette_SoftSand},
- [ITEM_HARD_STONE] = {gItemIcon_HardStone, gItemIconPalette_HardStone},
- [ITEM_MIRACLE_SEED] = {gItemIcon_MiracleSeed, gItemIconPalette_MiracleSeed},
- [ITEM_BLACK_GLASSES] = {gItemIcon_BlackGlasses, gItemIconPalette_BlackTypeEnhancingItem},
- [ITEM_BLACK_BELT] = {gItemIcon_BlackBelt, gItemIconPalette_BlackTypeEnhancingItem},
- [ITEM_MAGNET] = {gItemIcon_Magnet, gItemIconPalette_Magnet},
- [ITEM_MYSTIC_WATER] = {gItemIcon_MysticWater, gItemIconPalette_MysticWater},
- [ITEM_SHARP_BEAK] = {gItemIcon_SharpBeak, gItemIconPalette_SharpBeak},
- [ITEM_POISON_BARB] = {gItemIcon_PoisonBarb, gItemIconPalette_PoisonBarb},
- [ITEM_NEVER_MELT_ICE] = {gItemIcon_NeverMeltIce, gItemIconPalette_NeverMeltIce},
- [ITEM_SPELL_TAG] = {gItemIcon_SpellTag, gItemIconPalette_SpellTag},
- [ITEM_TWISTED_SPOON] = {gItemIcon_TwistedSpoon, gItemIconPalette_TwistedSpoon},
- [ITEM_CHARCOAL] = {gItemIcon_Charcoal, gItemIconPalette_Charcoal},
- [ITEM_DRAGON_FANG] = {gItemIcon_DragonFang, gItemIconPalette_DragonFang},
- [ITEM_SILK_SCARF] = {gItemIcon_SilkScarf, gItemIconPalette_SilkScarf},
- [ITEM_UP_GRADE] = {gItemIcon_UpGrade, gItemIconPalette_UpGrade},
- [ITEM_SHELL_BELL] = {gItemIcon_ShellBell, gItemIconPalette_Shell},
- [ITEM_SEA_INCENSE] = {gItemIcon_SeaIncense, gItemIconPalette_SeaIncense},
- [ITEM_LAX_INCENSE] = {gItemIcon_LaxIncense, gItemIconPalette_LaxIncense},
- [ITEM_LUCKY_PUNCH] = {gItemIcon_LuckyPunch, gItemIconPalette_LuckyPunch},
- [ITEM_METAL_POWDER] = {gItemIcon_MetalPowder, gItemIconPalette_MetalPowder},
- [ITEM_THICK_CLUB] = {gItemIcon_ThickClub, gItemIconPalette_ThickClub},
- [ITEM_STICK] = {gItemIcon_Stick, gItemIconPalette_Stick},
- // ????????
- [ITEM_0E2] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0E3] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0E4] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0E5] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0E6] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0E7] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0E8] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0E9] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0EA] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0EB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0EC] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0ED] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0EE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0EF] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F0] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F1] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F2] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F3] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F4] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F5] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F6] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F7] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F8] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0F9] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0FA] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0FB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0FC] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_0FD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // Contest hold items
- [ITEM_RED_SCARF] = {gItemIcon_Scarf, gItemIconPalette_RedScarf},
- [ITEM_BLUE_SCARF] = {gItemIcon_Scarf, gItemIconPalette_BlueScarf},
- [ITEM_PINK_SCARF] = {gItemIcon_Scarf, gItemIconPalette_PinkScarf},
- [ITEM_GREEN_SCARF] = {gItemIcon_Scarf, gItemIconPalette_GreenScarf},
- [ITEM_YELLOW_SCARF] = {gItemIcon_Scarf, gItemIconPalette_YellowScarf},
- // Key items
- [ITEM_MACH_BIKE] = {gItemIcon_MachBike, gItemIconPalette_MachBike},
- [ITEM_COIN_CASE] = {gItemIcon_CoinCase, gItemIconPalette_CoinCase},
- [ITEM_ITEMFINDER] = {gItemIcon_Itemfinder, gItemIconPalette_Itemfinder},
- [ITEM_OLD_ROD] = {gItemIcon_OldRod, gItemIconPalette_OldRod},
- [ITEM_GOOD_ROD] = {gItemIcon_GoodRod, gItemIconPalette_GoodRod},
- [ITEM_SUPER_ROD] = {gItemIcon_SuperRod, gItemIconPalette_SuperRod},
- [ITEM_SS_TICKET] = {gItemIcon_SSTicket, gItemIconPalette_SSTicket},
- [ITEM_CONTEST_PASS] = {gItemIcon_ContestPass, gItemIconPalette_ContestPass},
- [ITEM_10B] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_WAILMER_PAIL] = {gItemIcon_WailmerPail, gItemIconPalette_WailmerPail},
- [ITEM_DEVON_GOODS] = {gItemIcon_DevonGoods, gItemIconPalette_DevonGoods},
- [ITEM_SOOT_SACK] = {gItemIcon_SootSack, gItemIconPalette_SootSack},
- [ITEM_BASEMENT_KEY] = {gItemIcon_BasementKey, gItemIconPalette_OldKey},
- [ITEM_ACRO_BIKE] = {gItemIcon_AcroBike, gItemIconPalette_AcroBike},
- [ITEM_POKEBLOCK_CASE] = {gItemIcon_PokeblockCase, gItemIconPalette_PokeblockCase},
- [ITEM_LETTER] = {gItemIcon_Letter, gItemIconPalette_LavaCookieAndLetter},
- [ITEM_EON_TICKET] = {gItemIcon_EonTicket, gItemIconPalette_EonTicket},
- [ITEM_RED_ORB] = {gItemIcon_Orb, gItemIconPalette_RedOrb},
- [ITEM_BLUE_ORB] = {gItemIcon_Orb, gItemIconPalette_BlueOrb},
- [ITEM_SCANNER] = {gItemIcon_Scanner, gItemIconPalette_Scanner},
- [ITEM_GO_GOGGLES] = {gItemIcon_GoGoggles, gItemIconPalette_GoGoggles},
- [ITEM_METEORITE] = {gItemIcon_Meteorite, gItemIconPalette_Meteorite},
- [ITEM_ROOM_1_KEY] = {gItemIcon_Room1Key, gItemIconPalette_Key},
- [ITEM_ROOM_2_KEY] = {gItemIcon_Room2Key, gItemIconPalette_Key},
- [ITEM_ROOM_4_KEY] = {gItemIcon_Room4Key, gItemIconPalette_Key},
- [ITEM_ROOM_6_KEY] = {gItemIcon_Room6Key, gItemIconPalette_Key},
- [ITEM_STORAGE_KEY] = {gItemIcon_StorageKey, gItemIconPalette_OldKey},
- [ITEM_ROOT_FOSSIL] = {gItemIcon_RootFossil, gItemIconPalette_HoennFossil},
- [ITEM_CLAW_FOSSIL] = {gItemIcon_ClawFossil, gItemIconPalette_HoennFossil},
- [ITEM_DEVON_SCOPE] = {gItemIcon_DevonScope, gItemIconPalette_DevonScope},
- // TMs / HMs
+ [ITEM_MICLE_BERRY] = {gItemIcon_MicleBerry, gItemIconPalette_MicleBerry},
+ [ITEM_CUSTAP_BERRY] = {gItemIcon_CustapBerry, gItemIconPalette_CustapBerry},
+ [ITEM_JABOCA_BERRY] = {gItemIcon_JabocaBerry, gItemIconPalette_JabocaBerry},
+ [ITEM_ROWAP_BERRY] = {gItemIcon_RowapBerry, gItemIconPalette_RowapBerry},
+ [ITEM_KEE_BERRY] = {gItemIcon_KeeBerry, gItemIconPalette_KeeBerry},
+ [ITEM_MARANGA_BERRY] = {gItemIcon_MarangaBerry, gItemIconPalette_MarangaBerry},
+ [ITEM_ENIGMA_BERRY_E_READER] = {gItemIcon_EnigmaBerry, gItemIconPalette_EnigmaBerry},
+ // TMs/HMs
[ITEM_TM01] = {gItemIcon_TM, gItemIconPalette_FightingTMHM},
[ITEM_TM02] = {gItemIcon_TM, gItemIconPalette_DragonTMHM},
[ITEM_TM03] = {gItemIcon_TM, gItemIconPalette_WaterTMHM},
@@ -360,6 +672,56 @@ const u32 *const gItemIconTable[][2] =
[ITEM_TM48] = {gItemIcon_TM, gItemIconPalette_PsychicTMHM},
[ITEM_TM49] = {gItemIcon_TM, gItemIconPalette_DarkTMHM},
[ITEM_TM50] = {gItemIcon_TM, gItemIconPalette_FireTMHM},
+ [ITEM_TM51] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM52] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM53] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM54] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM55] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM56] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM57] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM58] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM59] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM60] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM61] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM62] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM63] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM64] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM65] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM66] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM67] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM68] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM69] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM70] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM71] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM72] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM73] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM74] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM75] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM76] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM77] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM78] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM79] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM80] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM81] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM82] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM83] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM84] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM85] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM86] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM87] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM88] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM89] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM90] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM91] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM92] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM93] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM94] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM95] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM96] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM97] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM98] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM99] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
+ [ITEM_TM100] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
[ITEM_HM01] = {gItemIcon_HM, gItemIconPalette_NormalTMHM},
[ITEM_HM02] = {gItemIcon_HM, gItemIconPalette_FlyingTMHM},
[ITEM_HM03] = {gItemIcon_HM, gItemIconPalette_WaterTMHM},
@@ -368,39 +730,79 @@ const u32 *const gItemIconTable[][2] =
[ITEM_HM06] = {gItemIcon_HM, gItemIconPalette_FightingTMHM},
[ITEM_HM07] = {gItemIcon_HM, gItemIconPalette_WaterTMHM},
[ITEM_HM08] = {gItemIcon_HM, gItemIconPalette_WaterTMHM},
- // ????????
- [ITEM_15B] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- [ITEM_15C] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // FireRed/LeafGreen key items
- [ITEM_OAKS_PARCEL] = {gItemIcon_OaksParcel, gItemIconPalette_OaksParcel},
+ // Charms
+ [ITEM_OVAL_CHARM] = {gItemIcon_OvalCharm, gItemIconPalette_OvalCharm},
+ [ITEM_SHINY_CHARM] = {gItemIcon_ShinyCharm, gItemIconPalette_ShinyCharm},
+ [ITEM_CATCHING_CHARM] = {gItemIcon_CatchingCharm, gItemIconPalette_CatchingCharm},
+ [ITEM_EXP_CHARM] = {gItemIcon_ExpCharm, gItemIconPalette_ExpCharm},
+ // Form-changing Key Items
+ [ITEM_ROTOM_CATALOG] = {gItemIcon_RotomCatalog, gItemIconPalette_RotomCatalog},
+ [ITEM_GRACIDEA] = {gItemIcon_Gracidea, gItemIconPalette_Gracidea},
+ [ITEM_REVEAL_GLASS] = {gItemIcon_RevealGlass, gItemIconPalette_RevealGlass},
+ [ITEM_DNA_SPLICERS] = {gItemIcon_DNASplicers, gItemIconPalette_DNASplicers},
+ [ITEM_ZYGARDE_CUBE] = {gItemIcon_ZygardeCube, gItemIconPalette_ZygardeCube},
+ [ITEM_PRISON_BOTTLE] = {gItemIcon_PrisonBottle, gItemIconPalette_PrisonBottle},
+ [ITEM_N_SOLARIZER] = {gItemIcon_NecrozmaFuser, gItemIconPalette_NSolarizer},
+ [ITEM_N_LUNARIZER] = {gItemIcon_NecrozmaFuser, gItemIconPalette_NLunarizer},
+ [ITEM_REINS_OF_UNITY] = {gItemIcon_ReinsOfUnity, gItemIconPalette_ReinsOfUnity},
+ // Battle Mechanic Key Items
+ [ITEM_MEGA_RING] = {gItemIcon_MegaRing, gItemIconPalette_MegaRing},
+ [ITEM_Z_POWER_RING] = {gItemIcon_ZPowerRing, gItemIconPalette_ZPowerRing},
+ [ITEM_DYNAMAX_BAND] = {gItemIcon_DynamaxBand, gItemIconPalette_DynamaxBand},
+ // Misc. Key Items
+ [ITEM_BICYCLE] = {gItemIcon_Bicycle, gItemIconPalette_Bicycle},
+ [ITEM_MACH_BIKE] = {gItemIcon_MachBike, gItemIconPalette_MachBike},
+ [ITEM_ACRO_BIKE] = {gItemIcon_AcroBike, gItemIconPalette_AcroBike},
+ [ITEM_OLD_ROD] = {gItemIcon_OldRod, gItemIconPalette_OldRod},
+ [ITEM_GOOD_ROD] = {gItemIcon_GoodRod, gItemIconPalette_GoodRod},
+ [ITEM_SUPER_ROD] = {gItemIcon_SuperRod, gItemIconPalette_SuperRod},
+ [ITEM_DOWSING_MACHINE] = {gItemIcon_DowsingMachine, gItemIconPalette_DowsingMachine},
+ [ITEM_TOWN_MAP] = {gItemIcon_TownMap, gItemIconPalette_TownMap},
+ [ITEM_VS_SEEKER] = {gItemIcon_VsSeeker, gItemIconPalette_VsSeeker},
+ [ITEM_TM_CASE] = {gItemIcon_TMCase, gItemIconPalette_TMCase},
+ [ITEM_BERRY_POUCH] = {gItemIcon_BerryPouch, gItemIconPalette_BerryPouch},
+ [ITEM_POKEMON_BOX_LINK] = {gItemIcon_PokemonBoxLink, gItemIconPalette_PokemonBoxLink},
+ [ITEM_COIN_CASE] = {gItemIcon_CoinCase, gItemIconPalette_CoinCase},
+ [ITEM_POWDER_JAR] = {gItemIcon_PowderJar, gItemIconPalette_PowderJar},
+ [ITEM_WAILMER_PAIL] = {gItemIcon_WailmerPail, gItemIconPalette_WailmerPail},
+ [ITEM_POKE_RADAR] = {gItemIcon_PokeRadar, gItemIconPalette_PokeRadar},
+ [ITEM_POKEBLOCK_CASE] = {gItemIcon_PokeblockCase, gItemIconPalette_PokeblockCase},
+ [ITEM_SOOT_SACK] = {gItemIcon_SootSack, gItemIconPalette_SootSack},
[ITEM_POKE_FLUTE] = {gItemIcon_PokeFlute, gItemIconPalette_PokeFlute},
+ [ITEM_FAME_CHECKER] = {gItemIcon_FameChecker, gItemIconPalette_FameChecker},
+ [ITEM_TEACHY_TV] = {gItemIcon_TeachyTV, gItemIconPalette_TeachyTV},
+ // Story Key Items
+ [ITEM_SS_TICKET] = {gItemIcon_SSTicket, gItemIconPalette_SSTicket},
+ [ITEM_EON_TICKET] = {gItemIcon_EonTicket, gItemIconPalette_EonTicket},
+ [ITEM_MYSTIC_TICKET] = {gItemIcon_MysticTicket, gItemIconPalette_MysticTicket},
+ [ITEM_AURORA_TICKET] = {gItemIcon_AuroraTicket, gItemIconPalette_AuroraTicket},
+ [ITEM_OLD_SEA_MAP] = {gItemIcon_OldSeaMap, gItemIconPalette_OldSeaMap},
+ [ITEM_LETTER] = {gItemIcon_Letter, gItemIconPalette_LavaCookieAndLetter},
+ [ITEM_DEVON_PARTS] = {gItemIcon_DevonParts, gItemIconPalette_DevonParts},
+ [ITEM_GO_GOGGLES] = {gItemIcon_GoGoggles, gItemIconPalette_GoGoggles},
+ [ITEM_DEVON_SCOPE] = {gItemIcon_DevonScope, gItemIconPalette_DevonScope},
+ [ITEM_BASEMENT_KEY] = {gItemIcon_BasementKey, gItemIconPalette_OldKey},
+ [ITEM_SCANNER] = {gItemIcon_Scanner, gItemIconPalette_Scanner},
+ [ITEM_STORAGE_KEY] = {gItemIcon_StorageKey, gItemIconPalette_OldKey},
+ [ITEM_KEY_TO_ROOM_1] = {gItemIcon_KeyToRoom1, gItemIconPalette_Key},
+ [ITEM_KEY_TO_ROOM_2] = {gItemIcon_KeyToRoom2, gItemIconPalette_Key},
+ [ITEM_KEY_TO_ROOM_4] = {gItemIcon_KeyToRoom4, gItemIconPalette_Key},
+ [ITEM_KEY_TO_ROOM_6] = {gItemIcon_KeyToRoom6, gItemIconPalette_Key},
+ [ITEM_METEORITE] = {gItemIcon_Meteorite, gItemIconPalette_Meteorite},
+ [ITEM_MAGMA_EMBLEM] = {gItemIcon_MagmaEmblem, gItemIconPalette_MagmaEmblem},
+ [ITEM_CONTEST_PASS] = {gItemIcon_ContestPass, gItemIconPalette_ContestPass},
+ [ITEM_OAKS_PARCEL] = {gItemIcon_OaksParcel, gItemIconPalette_OaksParcel},
[ITEM_SECRET_KEY] = {gItemIcon_SecretKey, gItemIconPalette_SecretKey},
[ITEM_BIKE_VOUCHER] = {gItemIcon_BikeVoucher, gItemIconPalette_BikeVoucher},
[ITEM_GOLD_TEETH] = {gItemIcon_GoldTeeth, gItemIconPalette_GoldTeeth},
- [ITEM_OLD_AMBER] = {gItemIcon_OldAmber, gItemIconPalette_OldAmber},
[ITEM_CARD_KEY] = {gItemIcon_CardKey, gItemIconPalette_CardKey},
[ITEM_LIFT_KEY] = {gItemIcon_LiftKey, gItemIconPalette_Key},
- [ITEM_HELIX_FOSSIL] = {gItemIcon_HelixFossil, gItemIconPalette_KantoFossil},
- [ITEM_DOME_FOSSIL] = {gItemIcon_DomeFossil, gItemIconPalette_KantoFossil},
[ITEM_SILPH_SCOPE] = {gItemIcon_SilphScope, gItemIconPalette_SilphScope},
- [ITEM_BICYCLE] = {gItemIcon_Bicycle, gItemIconPalette_Bicycle},
- [ITEM_TOWN_MAP] = {gItemIcon_TownMap, gItemIconPalette_TownMap},
- [ITEM_VS_SEEKER] = {gItemIcon_VSSeeker, gItemIconPalette_VSSeeker},
- [ITEM_FAME_CHECKER] = {gItemIcon_FameChecker, gItemIconPalette_FameChecker},
- [ITEM_TM_CASE] = {gItemIcon_TMCase, gItemIconPalette_TMCase},
- [ITEM_BERRY_POUCH] = {gItemIcon_BerryPouch, gItemIconPalette_BerryPouch},
- [ITEM_TEACHY_TV] = {gItemIcon_TeachyTV, gItemIconPalette_TeachyTV},
[ITEM_TRI_PASS] = {gItemIcon_TriPass, gItemIconPalette_TriPass},
[ITEM_RAINBOW_PASS] = {gItemIcon_RainbowPass, gItemIconPalette_RainbowPass},
[ITEM_TEA] = {gItemIcon_Tea, gItemIconPalette_Tea},
- [ITEM_MYSTIC_TICKET] = {gItemIcon_MysticTicket, gItemIconPalette_MysticTicket},
- [ITEM_AURORA_TICKET] = {gItemIcon_AuroraTicket, gItemIconPalette_AuroraTicket},
- [ITEM_POWDER_JAR] = {gItemIcon_PowderJar, gItemIconPalette_PowderJar},
[ITEM_RUBY] = {gItemIcon_Gem, gItemIconPalette_Ruby},
[ITEM_SAPPHIRE] = {gItemIcon_Gem, gItemIconPalette_Sapphire},
- // Emerald-only key items
- [ITEM_MAGMA_EMBLEM] = {gItemIcon_MagmaEmblem, gItemIconPalette_MagmaEmblem},
- [ITEM_OLD_SEA_MAP] = {gItemIcon_OldSeaMap, gItemIconPalette_OldSeaMap},
// Return to field arrow
[ITEM_FIELD_ARROW] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow},
};
diff --git a/src/data/items.h b/src/data/items.h
index 072ec1bf5e..bcb12e6956 100644
--- a/src/data/items.h
+++ b/src/data/items.h
@@ -11,50 +11,11 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
-// Pokeballs
-
- [ITEM_MASTER_BALL] =
- {
- .name = _("MASTER BALL"),
- .itemId = ITEM_MASTER_BALL,
- .price = 0,
- .description = sMasterBallDesc,
- .pocket = POCKET_POKE_BALLS,
- .type = ITEM_MASTER_BALL - FIRST_BALL,
- .battleUsage = ITEM_B_USE_OTHER,
- .battleUseFunc = ItemUseInBattle_PokeBall,
- .secondaryId = ITEM_MASTER_BALL - FIRST_BALL,
- },
-
- [ITEM_ULTRA_BALL] =
- {
- .name = _("ULTRA BALL"),
- .itemId = ITEM_ULTRA_BALL,
- .price = 1200,
- .description = sUltraBallDesc,
- .pocket = POCKET_POKE_BALLS,
- .type = ITEM_ULTRA_BALL - FIRST_BALL,
- .battleUsage = ITEM_B_USE_OTHER,
- .battleUseFunc = ItemUseInBattle_PokeBall,
- .secondaryId = ITEM_ULTRA_BALL - FIRST_BALL,
- },
-
- [ITEM_GREAT_BALL] =
- {
- .name = _("GREAT BALL"),
- .itemId = ITEM_GREAT_BALL,
- .price = 600,
- .description = sGreatBallDesc,
- .pocket = POCKET_POKE_BALLS,
- .type = ITEM_GREAT_BALL - FIRST_BALL,
- .battleUsage = ITEM_B_USE_OTHER,
- .battleUseFunc = ItemUseInBattle_PokeBall,
- .secondaryId = ITEM_GREAT_BALL - FIRST_BALL,
- },
+// Poké Balls
[ITEM_POKE_BALL] =
{
- .name = _("POKé BALL"),
+ .name = _("Poké Ball"),
.itemId = ITEM_POKE_BALL,
.price = 200,
.description = sPokeBallDesc,
@@ -65,22 +26,74 @@ const struct Item gItems[] =
.secondaryId = ITEM_POKE_BALL - FIRST_BALL,
},
- [ITEM_SAFARI_BALL] =
+ [ITEM_GREAT_BALL] =
{
- .name = _("SAFARI BALL"),
- .itemId = ITEM_SAFARI_BALL,
- .price = 0,
- .description = sSafariBallDesc,
+ .name = _("Great Ball"),
+ .itemId = ITEM_GREAT_BALL,
+ .price = 600,
+ .description = sGreatBallDesc,
.pocket = POCKET_POKE_BALLS,
- .type = ITEM_SAFARI_BALL - FIRST_BALL,
+ .type = ITEM_GREAT_BALL - FIRST_BALL,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_PokeBall,
- .secondaryId = ITEM_SAFARI_BALL - FIRST_BALL,
+ .secondaryId = ITEM_GREAT_BALL - FIRST_BALL,
+ },
+
+ [ITEM_ULTRA_BALL] =
+ {
+ .name = _("Ultra Ball"),
+ .itemId = ITEM_ULTRA_BALL,
+ .price = 800,
+ .description = sUltraBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_ULTRA_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_ULTRA_BALL - FIRST_BALL,
+ },
+
+ [ITEM_MASTER_BALL] =
+ {
+ .name = _("Master Ball"),
+ .itemId = ITEM_MASTER_BALL,
+ .price = 0,
+ .description = sMasterBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_MASTER_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_MASTER_BALL - FIRST_BALL,
+ },
+
+ [ITEM_PREMIER_BALL] =
+ {
+ .name = _("Premier Ball"),
+ .itemId = ITEM_PREMIER_BALL,
+ .price = 20,
+ .description = sPremierBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_PREMIER_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_PREMIER_BALL - FIRST_BALL,
+ },
+
+ [ITEM_HEAL_BALL] =
+ {
+ .name = _("Heal Ball"),
+ .itemId = ITEM_HEAL_BALL,
+ .price = 300,
+ .description = sHealBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_HEAL_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_HEAL_BALL - FIRST_BALL,
},
[ITEM_NET_BALL] =
{
- .name = _("NET BALL"),
+ .name = _("Net Ball"),
.itemId = ITEM_NET_BALL,
.price = 1000,
.description = sNetBallDesc,
@@ -91,22 +104,9 @@ const struct Item gItems[] =
.secondaryId = ITEM_NET_BALL - FIRST_BALL,
},
- [ITEM_DIVE_BALL] =
- {
- .name = _("DIVE BALL"),
- .itemId = ITEM_DIVE_BALL,
- .price = 1000,
- .description = sDiveBallDesc,
- .pocket = POCKET_POKE_BALLS,
- .type = ITEM_DIVE_BALL - FIRST_BALL,
- .battleUsage = ITEM_B_USE_OTHER,
- .battleUseFunc = ItemUseInBattle_PokeBall,
- .secondaryId = ITEM_DIVE_BALL - FIRST_BALL,
- },
-
[ITEM_NEST_BALL] =
{
- .name = _("NEST BALL"),
+ .name = _("Nest Ball"),
.itemId = ITEM_NEST_BALL,
.price = 1000,
.description = sNestBallDesc,
@@ -117,22 +117,35 @@ const struct Item gItems[] =
.secondaryId = ITEM_NEST_BALL - FIRST_BALL,
},
- [ITEM_REPEAT_BALL] =
+ [ITEM_DIVE_BALL] =
{
- .name = _("REPEAT BALL"),
- .itemId = ITEM_REPEAT_BALL,
+ .name = _("Dive Ball"),
+ .itemId = ITEM_DIVE_BALL,
.price = 1000,
- .description = sRepeatBallDesc,
+ .description = sDiveBallDesc,
.pocket = POCKET_POKE_BALLS,
- .type = ITEM_REPEAT_BALL - FIRST_BALL,
+ .type = ITEM_DIVE_BALL - FIRST_BALL,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_PokeBall,
- .secondaryId = ITEM_REPEAT_BALL - FIRST_BALL,
+ .secondaryId = ITEM_DIVE_BALL - FIRST_BALL,
+ },
+
+ [ITEM_DUSK_BALL] =
+ {
+ .name = _("Dusk Ball"),
+ .itemId = ITEM_DUSK_BALL,
+ .price = 1000,
+ .description = sDuskBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_DUSK_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_DUSK_BALL - FIRST_BALL,
},
[ITEM_TIMER_BALL] =
{
- .name = _("TIMER BALL"),
+ .name = _("Timer Ball"),
.itemId = ITEM_TIMER_BALL,
.price = 1000,
.description = sTimerBallDesc,
@@ -143,9 +156,35 @@ const struct Item gItems[] =
.secondaryId = ITEM_TIMER_BALL - FIRST_BALL,
},
+ [ITEM_QUICK_BALL] =
+ {
+ .name = _("Quick Ball"),
+ .itemId = ITEM_QUICK_BALL,
+ .price = 1000,
+ .description = sQuickBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_QUICK_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_QUICK_BALL - FIRST_BALL,
+ },
+
+ [ITEM_REPEAT_BALL] =
+ {
+ .name = _("Repeat Ball"),
+ .itemId = ITEM_REPEAT_BALL,
+ .price = 1000,
+ .description = sRepeatBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_REPEAT_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_REPEAT_BALL - FIRST_BALL,
+ },
+
[ITEM_LUXURY_BALL] =
{
- .name = _("LUXURY BALL"),
+ .name = _("Luxury Ball"),
.itemId = ITEM_LUXURY_BALL,
.price = 1000,
.description = sLuxuryBallDesc,
@@ -156,26 +195,182 @@ const struct Item gItems[] =
.secondaryId = ITEM_LUXURY_BALL - FIRST_BALL,
},
- [ITEM_PREMIER_BALL] =
+ [ITEM_LEVEL_BALL] =
{
- .name = _("PREMIER BALL"),
- .itemId = ITEM_PREMIER_BALL,
- .price = 200,
- .description = sPremierBallDesc,
+ .name = _("Level Ball"),
+ .itemId = ITEM_LEVEL_BALL,
+ .price = 0,
+ .description = sLevelBallDesc,
.pocket = POCKET_POKE_BALLS,
- .type = ITEM_PREMIER_BALL - FIRST_BALL,
+ .type = ITEM_LEVEL_BALL - FIRST_BALL,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_PokeBall,
- .secondaryId = ITEM_PREMIER_BALL - FIRST_BALL,
+ .secondaryId = ITEM_LEVEL_BALL - FIRST_BALL,
+ },
+
+ [ITEM_LURE_BALL] =
+ {
+ .name = _("Lure Ball"),
+ .itemId = ITEM_LURE_BALL,
+ .price = 0,
+ .description = sLureBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_LURE_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_LURE_BALL - FIRST_BALL,
+ },
+
+ [ITEM_MOON_BALL] =
+ {
+ .name = _("Moon Ball"),
+ .itemId = ITEM_MOON_BALL,
+ .price = 0,
+ .description = sMoonBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_MOON_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_MOON_BALL - FIRST_BALL,
+ },
+
+ [ITEM_FRIEND_BALL] =
+ {
+ .name = _("Friend Ball"),
+ .itemId = ITEM_FRIEND_BALL,
+ .price = 0,
+ .description = sFriendBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_FRIEND_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_FRIEND_BALL - FIRST_BALL,
+ },
+
+ [ITEM_LOVE_BALL] =
+ {
+ .name = _("Love Ball"),
+ .itemId = ITEM_LOVE_BALL,
+ .price = 0,
+ .description = sLoveBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_LOVE_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_LOVE_BALL - FIRST_BALL,
+ },
+
+ [ITEM_FAST_BALL] =
+ {
+ .name = _("Fast Ball"),
+ .itemId = ITEM_FAST_BALL,
+ .price = 0,
+ .description = sFastBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_FAST_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_FAST_BALL - FIRST_BALL,
+ },
+
+ [ITEM_HEAVY_BALL] =
+ {
+ .name = _("Heavy Ball"),
+ .itemId = ITEM_HEAVY_BALL,
+ .price = 0,
+ .description = sHeavyBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_HEAVY_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_HEAVY_BALL - FIRST_BALL,
+ },
+
+ [ITEM_DREAM_BALL] =
+ {
+ .name = _("Dream Ball"),
+ .itemId = ITEM_DREAM_BALL,
+ .price = 0,
+ .description = sDreamBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_DREAM_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_DREAM_BALL - FIRST_BALL,
+ },
+
+ [ITEM_SAFARI_BALL] =
+ {
+ .name = _("Safari Ball"),
+ .itemId = ITEM_SAFARI_BALL,
+ .price = 0,
+ .description = sSafariBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_SAFARI_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_SAFARI_BALL - FIRST_BALL,
+ },
+
+ [ITEM_SPORT_BALL] =
+ {
+ .name = _("Sport Ball"),
+ .itemId = ITEM_SPORT_BALL,
+ .price = 0,
+ .description = sSportBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_SPORT_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_SPORT_BALL - FIRST_BALL,
+ },
+
+ [ITEM_PARK_BALL] =
+ {
+ .name = _("Park Ball"),
+ .itemId = ITEM_PARK_BALL,
+ .price = 0,
+ .description = sParkBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_PARK_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_PARK_BALL - FIRST_BALL,
+ },
+
+ [ITEM_BEAST_BALL] =
+ {
+ .name = _("Beast Ball"),
+ .itemId = ITEM_BEAST_BALL,
+ .price = 0,
+ .description = sBeastBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_BEAST_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_BEAST_BALL - FIRST_BALL,
+ },
+
+ [ITEM_CHERISH_BALL] =
+ {
+ .name = _("Cherish Ball"),
+ .itemId = ITEM_CHERISH_BALL,
+ .price = 0,
+ .description = sCherishBallDesc,
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_CHERISH_BALL - FIRST_BALL,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = ITEM_CHERISH_BALL - FIRST_BALL,
},
// Medicine
[ITEM_POTION] =
{
- .name = _("POTION"),
+ .name = _("Potion"),
.itemId = ITEM_POTION,
- .price = 300,
+ .price = 200,
.holdEffectParam = 20,
.description = sPotionDesc,
.pocket = POCKET_ITEMS,
@@ -183,90 +378,42 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_ANTIDOTE] =
+ [ITEM_SUPER_POTION] =
{
- .name = _("ANTIDOTE"),
- .itemId = ITEM_ANTIDOTE,
- .price = 100,
- .description = sAntidoteDesc,
+ .name = _("Super Potion"),
+ .itemId = ITEM_SUPER_POTION,
+ .price = 700,
+ .holdEffectParam = 60,
+ .description = sSuperPotionDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_BURN_HEAL] =
+ [ITEM_HYPER_POTION] =
{
- .name = _("BURN HEAL"),
- .itemId = ITEM_BURN_HEAL,
- .price = 250,
- .description = sBurnHealDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Medicine,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_ICE_HEAL] =
- {
- .name = _("ICE HEAL"),
- .itemId = ITEM_ICE_HEAL,
- .price = 250,
- .description = sIceHealDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Medicine,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_AWAKENING] =
- {
- .name = _("AWAKENING"),
- .itemId = ITEM_AWAKENING,
- .price = 250,
- .description = sAwakeningDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Medicine,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_PARALYZE_HEAL] =
- {
- .name = _("PARLYZ HEAL"),
- .itemId = ITEM_PARALYZE_HEAL,
- .price = 200,
- .description = sParalyzeHealDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Medicine,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_FULL_RESTORE] =
- {
- .name = _("FULL RESTORE"),
- .itemId = ITEM_FULL_RESTORE,
- .price = 3000,
- .holdEffectParam = 255,
- .description = sFullRestoreDesc,
+ .name = _("Hyper Potion"),
+ .itemId = ITEM_HYPER_POTION,
+ .price = 1500,
+ .holdEffectParam = 120,
+ .description = sHyperPotionDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_MAX_POTION] =
{
- .name = _("MAX POTION"),
+ .name = _("Max Potion"),
.itemId = ITEM_MAX_POTION,
.price = 2500,
.holdEffectParam = 255,
@@ -276,65 +423,41 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_HYPER_POTION] =
+ [ITEM_FULL_RESTORE] =
{
- .name = _("HYPER POTION"),
- .itemId = ITEM_HYPER_POTION,
- .price = 1200,
- .holdEffectParam = 200,
- .description = sHyperPotionDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Medicine,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_SUPER_POTION] =
- {
- .name = _("SUPER POTION"),
- .itemId = ITEM_SUPER_POTION,
- .price = 700,
- .holdEffectParam = 50,
- .description = sSuperPotionDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Medicine,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_FULL_HEAL] =
- {
- .name = _("FULL HEAL"),
- .itemId = ITEM_FULL_HEAL,
- .price = 600,
- .description = sFullHealDesc,
+ .name = _("Full Restore"),
+ .itemId = ITEM_FULL_RESTORE,
+ .price = 3000,
+ .holdEffectParam = 255,
+ .description = sFullRestoreDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_REVIVE] =
{
- .name = _("REVIVE"),
+ .name = _("Revive"),
.itemId = ITEM_REVIVE,
- .price = 1500,
+ .price = 2000,
.description = sReviveDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_MAX_REVIVE] =
{
- .name = _("MAX REVIVE"),
+ .name = _("Max Revive"),
.itemId = ITEM_MAX_REVIVE,
.price = 4000,
.description = sMaxReviveDesc,
@@ -343,55 +466,59 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_FRESH_WATER] =
{
- .name = _("FRESH WATER"),
+ .name = _("Fresh Water"),
.itemId = ITEM_FRESH_WATER,
.price = 200,
- .holdEffectParam = 50,
+ .holdEffectParam = 30,
.description = sFreshWaterDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_SODA_POP] =
{
- .name = _("SODA POP"),
+ .name = _("Soda Pop"),
.itemId = ITEM_SODA_POP,
.price = 300,
- .holdEffectParam = 60,
+ .holdEffectParam = 50,
.description = sSodaPopDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_LEMONADE] =
{
- .name = _("LEMONADE"),
+ .name = _("Lemonade"),
.itemId = ITEM_LEMONADE,
- .price = 350,
- .holdEffectParam = 80,
+ .price = 400,
+ .holdEffectParam = 70,
.description = sLemonadeDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_MOOMOO_MILK] =
{
- .name = _("MOOMOO MILK"),
+ .name = _("Moomoo Milk"),
.itemId = ITEM_MOOMOO_MILK,
- .price = 500,
+ .price = 600,
.holdEffectParam = 100,
.description = sMoomooMilkDesc,
.pocket = POCKET_ITEMS,
@@ -399,11 +526,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_ENERGY_POWDER] =
{
- .name = _("ENERGYPOWDER"),
+ .name = _("Energy Powder"),
.itemId = ITEM_ENERGY_POWDER,
.price = 500,
.description = sEnergyPowderDesc,
@@ -412,37 +540,40 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_ENERGY_ROOT] =
{
- .name = _("ENERGY ROOT"),
+ .name = _("Energy Root"),
.itemId = ITEM_ENERGY_ROOT,
- .price = 800,
+ .price = 1200,
.description = sEnergyRootDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_HEAL_POWDER] =
{
- .name = _("HEAL POWDER"),
+ .name = _("Heal Powder"),
.itemId = ITEM_HEAL_POWDER,
- .price = 450,
+ .price = 300,
.description = sHealPowderDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_REVIVAL_HERB] =
{
- .name = _("REVIVAL HERB"),
+ .name = _("Revival Herb"),
.itemId = ITEM_REVIVAL_HERB,
.price = 2800,
.description = sRevivalHerbDesc,
@@ -451,11 +582,96 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_ANTIDOTE] =
+ {
+ .name = _("Antidote"),
+ .itemId = ITEM_ANTIDOTE,
+ .price = 200,
+ .description = sAntidoteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_PARALYZE_HEAL] =
+ {
+ .name = _("Paralyze Heal"),
+ .itemId = ITEM_PARALYZE_HEAL,
+ .price = 300,
+ .description = sParalyzeHealDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_BURN_HEAL] =
+ {
+ .name = _("Burn Heal"),
+ .itemId = ITEM_BURN_HEAL,
+ .price = 300,
+ .description = sBurnHealDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_ICE_HEAL] =
+ {
+ .name = _("Ice Heal"),
+ .itemId = ITEM_ICE_HEAL,
+ .price = 100,
+ .description = sIceHealDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_AWAKENING] =
+ {
+ .name = _("Awakening"),
+ .itemId = ITEM_AWAKENING,
+ .price = 100,
+ .description = sAwakeningDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_FULL_HEAL] =
+ {
+ .name = _("Full Heal"),
+ .itemId = ITEM_FULL_HEAL,
+ .price = 400,
+ .description = sFullHealDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_ETHER] =
{
- .name = _("ETHER"),
+ .name = _("Ether"),
.itemId = ITEM_ETHER,
.price = 1200,
.holdEffectParam = 10,
@@ -465,11 +681,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_PPRecovery,
+ .flingPower = 30,
},
[ITEM_MAX_ETHER] =
{
- .name = _("MAX ETHER"),
+ .name = _("Max Ether"),
.itemId = ITEM_MAX_ETHER,
.price = 2000,
.holdEffectParam = 255,
@@ -479,11 +696,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_PPRecovery,
+ .flingPower = 30,
},
[ITEM_ELIXIR] =
{
- .name = _("ELIXIR"),
+ .name = _("Elixir"),
.itemId = ITEM_ELIXIR,
.price = 3000,
.holdEffectParam = 10,
@@ -493,11 +711,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_PPRecovery,
+ .flingPower = 30,
},
[ITEM_MAX_ELIXIR] =
{
- .name = _("MAX ELIXIR"),
+ .name = _("Max Elixir"),
.itemId = ITEM_MAX_ELIXIR,
.price = 4500,
.holdEffectParam = 255,
@@ -507,89 +726,14 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_PPRecovery,
- },
-
- [ITEM_LAVA_COOKIE] =
- {
- .name = _("LAVA COOKIE"),
- .itemId = ITEM_LAVA_COOKIE,
- .price = 200,
- .description = sLavaCookieDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Medicine,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_BLUE_FLUTE] =
- {
- .name = _("BLUE FLUTE"),
- .itemId = ITEM_BLUE_FLUTE,
- .price = 100,
- .description = sBlueFluteDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Medicine,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_YELLOW_FLUTE] =
- {
- .name = _("YELLOW FLUTE"),
- .itemId = ITEM_YELLOW_FLUTE,
- .price = 200,
- .description = sYellowFluteDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_RED_FLUTE] =
- {
- .name = _("RED FLUTE"),
- .itemId = ITEM_RED_FLUTE,
- .price = 300,
- .description = sRedFluteDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .battleUsage = ITEM_B_USE_MEDICINE,
- .battleUseFunc = ItemUseInBattle_Medicine,
- },
-
- [ITEM_BLACK_FLUTE] =
- {
- .name = _("BLACK FLUTE"),
- .itemId = ITEM_BLACK_FLUTE,
- .price = 400,
- .holdEffectParam = 50,
- .description = sBlackFluteDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute,
- },
-
- [ITEM_WHITE_FLUTE] =
- {
- .name = _("WHITE FLUTE"),
- .itemId = ITEM_WHITE_FLUTE,
- .price = 500,
- .holdEffectParam = 150,
- .description = sWhiteFluteDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute,
+ .flingPower = 30,
},
[ITEM_BERRY_JUICE] =
{
- .name = _("BERRY JUICE"),
+ .name = _("Berry Juice"),
.itemId = ITEM_BERRY_JUICE,
- .price = 100,
+ .price = 200,
.holdEffect = HOLD_EFFECT_RESTORE_HP,
.holdEffectParam = 20,
.description = sBerryJuiceDesc,
@@ -598,881 +742,1873 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_SACRED_ASH] =
{
- .name = _("SACRED ASH"),
+ .name = _("Sacred Ash"),
.itemId = ITEM_SACRED_ASH,
- .price = 200,
+ .price = 50000,
.description = sSacredAshDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_SacredAsh,
+ .flingPower = 30,
},
-// Collectibles
-
- [ITEM_SHOAL_SALT] =
+ [ITEM_SWEET_HEART] =
{
- .name = _("SHOAL SALT"),
- .itemId = ITEM_SHOAL_SALT,
- .price = 20,
- .description = sShoalSaltDesc,
+ .name = _("Sweet Heart"),
+ .itemId = ITEM_SWEET_HEART,
+ .price = 3000,
+ .holdEffectParam = 20,
+ .description = sSweetHeartDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_SHOAL_SHELL] =
+ [ITEM_MAX_HONEY] =
{
- .name = _("SHOAL SHELL"),
- .itemId = ITEM_SHOAL_SHELL,
- .price = 20,
- .description = sShoalShellDesc,
+ .name = _("Max Honey"),
+ .itemId = ITEM_MAX_HONEY,
+ .price = 8000,
+ .description = sMaxHoneyDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_RED_SHARD] =
+// Regional Specialties
+
+ [ITEM_PEWTER_CRUNCHIES] =
{
- .name = _("RED SHARD"),
- .itemId = ITEM_RED_SHARD,
- .price = 200,
- .description = sRedShardDesc,
+ .name = _("PewtrCrnches"),
+ .itemId = ITEM_PEWTER_CRUNCHIES,
+ .price = 250,
+ .description = sPewterCrunchiesDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_BLUE_SHARD] =
+ [ITEM_RAGE_CANDY_BAR] =
{
- .name = _("BLUE SHARD"),
- .itemId = ITEM_BLUE_SHARD,
- .price = 200,
- .description = sBlueShardDesc,
+ .name = _("RageCandyBar"),
+ .itemId = ITEM_RAGE_CANDY_BAR,
+ .price = 350,
+ .description = sRageCandyBarDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_YELLOW_SHARD] =
+ [ITEM_LAVA_COOKIE] =
{
- .name = _("YELLOW SHARD"),
- .itemId = ITEM_YELLOW_SHARD,
- .price = 200,
- .description = sYellowShardDesc,
+ .name = _("Lava Cookie"),
+ .itemId = ITEM_LAVA_COOKIE,
+ .price = 350,
+ .description = sLavaCookieDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_GREEN_SHARD] =
+ [ITEM_OLD_GATEAU] =
{
- .name = _("GREEN SHARD"),
- .itemId = ITEM_GREEN_SHARD,
- .price = 200,
- .description = sGreenShardDesc,
+ .name = _("Old Gateau"),
+ .itemId = ITEM_OLD_GATEAU,
+ .price = 350,
+ .description = sOldGateauDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_034] =
+ [ITEM_CASTELIACONE] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("Casteliacone"),
+ .itemId = ITEM_CASTELIACONE,
+ .price = 350,
+ .description = sCasteliaconeDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_035] =
+ [ITEM_LUMIOSE_GALETTE] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("LumioseGlete"),
+ .itemId = ITEM_LUMIOSE_GALETTE,
+ .price = 350,
+ .description = sLumioseGaletteDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_036] =
+ [ITEM_SHALOUR_SABLE] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("ShalourSable"),
+ .itemId = ITEM_SHALOUR_SABLE,
+ .price = 350,
+ .description = sShalourSableDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
- [ITEM_037] =
+ [ITEM_BIG_MALASADA] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("Big Malasada"),
+ .itemId = ITEM_BIG_MALASADA,
+ .price = 350,
+ .description = sBigMalasadaDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_038] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_039] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_03A] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_03B] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_03C] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_03D] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_03E] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
},
// Vitamins
[ITEM_HP_UP] =
{
- .name = _("HP UP"),
+ .name = _("HP Up"),
.itemId = ITEM_HP_UP,
- .price = 9800,
+ .price = 10000,
.description = sHPUpDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_PROTEIN] =
{
- .name = _("PROTEIN"),
+ .name = _("Protein"),
.itemId = ITEM_PROTEIN,
- .price = 9800,
+ .price = 10000,
.description = sProteinDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_IRON] =
{
- .name = _("IRON"),
+ .name = _("Iron"),
.itemId = ITEM_IRON,
- .price = 9800,
+ .price = 10000,
.description = sIronDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
- },
-
- [ITEM_CARBOS] =
- {
- .name = _("CARBOS"),
- .itemId = ITEM_CARBOS,
- .price = 9800,
- .description = sCarbosDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 30,
},
[ITEM_CALCIUM] =
{
- .name = _("CALCIUM"),
+ .name = _("Calcium"),
.itemId = ITEM_CALCIUM,
- .price = 9800,
+ .price = 10000,
.description = sCalciumDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
- },
-
- [ITEM_RARE_CANDY] =
- {
- .name = _("RARE CANDY"),
- .itemId = ITEM_RARE_CANDY,
- .price = 4800,
- .description = sRareCandyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_RareCandy,
- },
-
- [ITEM_PP_UP] =
- {
- .name = _("PP UP"),
- .itemId = ITEM_PP_UP,
- .price = 9800,
- .description = sPPUpDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_PPUp,
+ .flingPower = 30,
},
[ITEM_ZINC] =
{
- .name = _("ZINC"),
+ .name = _("Zinc"),
.itemId = ITEM_ZINC,
- .price = 9800,
+ .price = 10000,
.description = sZincDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_CARBOS] =
+ {
+ .name = _("Carbos"),
+ .itemId = ITEM_CARBOS,
+ .price = 10000,
+ .description = sCarbosDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_PP_UP] =
+ {
+ .name = _("PP Up"),
+ .itemId = ITEM_PP_UP,
+ .price = 10000,
+ .description = sPPUpDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_PPUp,
+ .flingPower = 30,
},
[ITEM_PP_MAX] =
{
- .name = _("PP MAX"),
+ .name = _("PP Max"),
.itemId = ITEM_PP_MAX,
- .price = 9800,
+ .price = 10000,
.description = sPPMaxDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_PPUp,
+ .flingPower = 30,
},
- [ITEM_048] =
+// EV Feathers
+
+ [ITEM_HEALTH_FEATHER] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
+ .name = _("HealthFeather"),
+ .itemId = ITEM_HEALTH_FEATHER,
+ .price = 300,
+ .description = sHealthFeatherDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 20,
+ },
+
+ [ITEM_MUSCLE_FEATHER] =
+ {
+ .name = _("MuscleFeather"),
+ .itemId = ITEM_MUSCLE_FEATHER,
+ .price = 300,
+ .description = sMuscleFeatherDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 20,
+ },
+
+ [ITEM_RESIST_FEATHER] =
+ {
+ .name = _("ResistFeather"),
+ .itemId = ITEM_RESIST_FEATHER,
+ .price = 300,
+ .description = sResistFeatherDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 20,
+ },
+
+ [ITEM_GENIUS_FEATHER] =
+ {
+ .name = _("GeniusFeather"),
+ .itemId = ITEM_GENIUS_FEATHER,
+ .price = 300,
+ .description = sGeniusFeatherDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 20,
+ },
+
+ [ITEM_CLEVER_FEATHER] =
+ {
+ .name = _("CleverFeather"),
+ .itemId = ITEM_CLEVER_FEATHER,
+ .price = 300,
+ .description = sCleverFeatherDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 20,
+ },
+
+ [ITEM_SWIFT_FEATHER] =
+ {
+ .name = _("SwiftFeather"),
+ .itemId = ITEM_SWIFT_FEATHER,
+ .price = 300,
+ .description = sSwiftFeatherDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .flingPower = 20,
+ },
+
+// Ability Modifiers
+
+ [ITEM_ABILITY_CAPSULE] =
+ {
+ .name = _("AbilityCapsle"),
+ .itemId = ITEM_ABILITY_CAPSULE,
+ .price = 10000,
+ .holdEffectParam = 0,
+ .description = sAbilityCapsuleDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_AbilityCapsule,
+ },
+
+ [ITEM_ABILITY_PATCH] =
+ {
+ .name = _("AbilityPatch"),
+ .itemId = ITEM_ABILITY_PATCH,
.price = 0,
- .description = sDummyDesc,
+ .holdEffectParam = 0,
+ .description = sAbilityPatchDesc,
.pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_AbilityPatch,
},
-// Battle items
+// Mints
- [ITEM_GUARD_SPEC] =
+ [ITEM_LONELY_MINT] =
{
- .name = _("GUARD SPEC."),
- .itemId = ITEM_GUARD_SPEC,
+ .name = _("Lonely Mint"),
+ .itemId = ITEM_LONELY_MINT,
+ .price = 20,
+ .description = sLonelyMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_ADAMANT_MINT] =
+ {
+ .name = _("Adamant Mint"),
+ .itemId = ITEM_ADAMANT_MINT,
+ .price = 20,
+ .description = sAdamantMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_NAUGHTY_MINT] =
+ {
+ .name = _("Naughty Mint"),
+ .itemId = ITEM_NAUGHTY_MINT,
+ .price = 20,
+ .description = sNaughtyMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_BRAVE_MINT] =
+ {
+ .name = _("Brave Mint"),
+ .itemId = ITEM_BRAVE_MINT,
+ .price = 20,
+ .description = sBraveMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_BOLD_MINT] =
+ {
+ .name = _("Bold Mint"),
+ .itemId = ITEM_BOLD_MINT,
+ .price = 20,
+ .description = sBoldMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_IMPISH_MINT] =
+ {
+ .name = _("Impish Mint"),
+ .itemId = ITEM_IMPISH_MINT,
+ .price = 20,
+ .description = sImpishMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_LAX_MINT] =
+ {
+ .name = _("Lax Mint"),
+ .itemId = ITEM_LAX_MINT,
+ .price = 20,
+ .description = sLaxMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_RELAXED_MINT] =
+ {
+ .name = _("Relaxed Mint"),
+ .itemId = ITEM_RELAXED_MINT,
+ .price = 20,
+ .description = sRelaxedMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_MODEST_MINT] =
+ {
+ .name = _("Modest Mint"),
+ .itemId = ITEM_MODEST_MINT,
+ .price = 20,
+ .description = sModestMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_MILD_MINT] =
+ {
+ .name = _("Mild Mint"),
+ .itemId = ITEM_MILD_MINT,
+ .price = 20,
+ .description = sMildMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_RASH_MINT] =
+ {
+ .name = _("Rash Mint"),
+ .itemId = ITEM_RASH_MINT,
+ .price = 20,
+ .description = sRashMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_QUIET_MINT] =
+ {
+ .name = _("Quiet Mint"),
+ .itemId = ITEM_QUIET_MINT,
+ .price = 20,
+ .description = sQuietMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_CALM_MINT] =
+ {
+ .name = _("Calm Mint"),
+ .itemId = ITEM_CALM_MINT,
+ .price = 20,
+ .description = sCalmMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_GENTLE_MINT] =
+ {
+ .name = _("Gentle Mint"),
+ .itemId = ITEM_GENTLE_MINT,
+ .price = 20,
+ .description = sGentleMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_CAREFUL_MINT] =
+ {
+ .name = _("Careful Mint"),
+ .itemId = ITEM_CAREFUL_MINT,
+ .price = 20,
+ .description = sCarefulMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_SASSY_MINT] =
+ {
+ .name = _("Sassy Mint"),
+ .itemId = ITEM_SASSY_MINT,
+ .price = 20,
+ .description = sSassyMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_TIMID_MINT] =
+ {
+ .name = _("Timid Mint"),
+ .itemId = ITEM_TIMID_MINT,
+ .price = 20,
+ .description = sTimidMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_HASTY_MINT] =
+ {
+ .name = _("Hasty Mint"),
+ .itemId = ITEM_HASTY_MINT,
+ .price = 20,
+ .description = sHastyMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_JOLLY_MINT] =
+ {
+ .name = _("Jolly Mint"),
+ .itemId = ITEM_JOLLY_MINT,
+ .price = 20,
+ .description = sJollyMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_NAIVE_MINT] =
+ {
+ .name = _("Naive Mint"),
+ .itemId = ITEM_NAIVE_MINT,
+ .price = 20,
+ .description = sNaiveMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+ [ITEM_SERIOUS_MINT] =
+ {
+ .name = _("Serious Mint"),
+ .itemId = ITEM_SERIOUS_MINT,
+ .price = 20,
+ .description = sSeriousMintDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 10,
+ },
+
+// Candy
+
+ [ITEM_RARE_CANDY] =
+ {
+ .name = _("Rare Candy"),
+ .itemId = ITEM_RARE_CANDY,
+ .price = 10000,
+ .description = sRareCandyDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_RareCandy,
+ .flingPower = 30,
+ },
+
+ [ITEM_EXP_CANDY_XS] =
+ {
+ .name = _("Exp.Candy XS"),
+ .itemId = ITEM_EXP_CANDY_XS,
+ .price = 20,
+ .description = sExpCandyXSDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_EXP_CANDY_S] =
+ {
+ .name = _("Exp.Candy S"),
+ .itemId = ITEM_EXP_CANDY_S,
+ .price = 240,
+ .description = sExpCandyXSDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_EXP_CANDY_M] =
+ {
+ .name = _("Exp.Candy M"),
+ .itemId = ITEM_EXP_CANDY_M,
+ .price = 1000,
+ .description = sExpCandyMDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_EXP_CANDY_L] =
+ {
+ .name = _("Exp.Candy L"),
+ .itemId = ITEM_EXP_CANDY_L,
+ .price = 3000,
+ .description = sExpCandyLDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_EXP_CANDY_XL] =
+ {
+ .name = _("Exp.Candy XL"),
+ .itemId = ITEM_EXP_CANDY_XL,
+ .price = 10000,
+ .description = sExpCandyXLDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_DYNAMAX_CANDY] =
+ {
+ .name = _("DynamaxCandy"),
+ .itemId = ITEM_DYNAMAX_CANDY,
+ .price = 0,
+ .description = sDynamaxCandyDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+// Medicinal Flutes
+
+ [ITEM_BLUE_FLUTE] =
+ {
+ .name = _("Blue Flute"),
+ .itemId = ITEM_BLUE_FLUTE,
+ .price = 20,
+ .description = sBlueFluteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_YELLOW_FLUTE] =
+ {
+ .name = _("Yellow Flute"),
+ .itemId = ITEM_YELLOW_FLUTE,
+ .price = 20,
+ .description = sYellowFluteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
+ },
+
+ [ITEM_RED_FLUTE] =
+ {
+ .name = _("Red Flute"),
+ .itemId = ITEM_RED_FLUTE,
+ .price = 20,
+ .description = sRedFluteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = ITEM_B_USE_MEDICINE,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 30,
+ },
+
+// Encounter-modifying Flutes
+
+ [ITEM_BLACK_FLUTE] =
+ {
+ .name = _("Black Flute"),
+ .itemId = ITEM_BLACK_FLUTE,
+ .price = 20,
+ .holdEffectParam = 50,
+ .description = sBlackFluteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute,
+ .flingPower = 30,
+ },
+
+ [ITEM_WHITE_FLUTE] =
+ {
+ .name = _("White Flute"),
+ .itemId = ITEM_WHITE_FLUTE,
+ .price = 20,
+ .holdEffectParam = 150,
+ .description = sWhiteFluteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute,
+ .flingPower = 30,
+ },
+
+// Encounter Modifiers
+
+ [ITEM_REPEL] =
+ {
+ .name = _("Repel"),
+ .itemId = ITEM_REPEL,
+ .price = 400,
+ .holdEffectParam = 100,
+ .description = sRepelDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Repel,
+ .flingPower = 30,
+ },
+
+ [ITEM_SUPER_REPEL] =
+ {
+ .name = _("Super Repel"),
+ .itemId = ITEM_SUPER_REPEL,
.price = 700,
- .description = sGuardSpecDesc,
+ .holdEffectParam = 200,
+ .description = sSuperRepelDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .battleUsage = ITEM_B_USE_OTHER,
- .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .fieldUseFunc = ItemUseOutOfBattle_Repel,
+ .flingPower = 30,
},
- [ITEM_DIRE_HIT] =
+ [ITEM_MAX_REPEL] =
{
- .name = _("DIRE HIT"),
- .itemId = ITEM_DIRE_HIT,
- .price = 650,
- .description = sDireHitDesc,
+ .name = _("Max Repel"),
+ .itemId = ITEM_MAX_REPEL,
+ .price = 900,
+ .holdEffectParam = 250,
+ .description = sMaxRepelDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_Repel,
+ .flingPower = 30,
+ },
+
+ [ITEM_LURE] =
+ {
+ .name = _("Lure"),
+ .itemId = ITEM_LURE,
+ .price = 350,
+ .holdEffectParam = 100,
+ .description = sLureDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .battleUsage = ITEM_B_USE_OTHER,
- .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .secondaryId = 0,
+ .flingPower = 30,
},
+ [ITEM_SUPER_LURE] =
+ {
+ .name = _("Super Lure"),
+ .itemId = ITEM_SUPER_LURE,
+ .price = 500,
+ .holdEffectParam = 200,
+ .description = sSuperLureDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 0,
+ .flingPower = 30,
+ },
+
+ [ITEM_MAX_LURE] =
+ {
+ .name = _("Max Lure"),
+ .itemId = ITEM_MAX_LURE,
+ .price = 700,
+ .holdEffectParam = 250,
+ .description = sMaxLureDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 0,
+ .flingPower = 30,
+ },
+
+ [ITEM_ESCAPE_ROPE] =
+ {
+ .name = _("Escape Rope"),
+ .itemId = ITEM_ESCAPE_ROPE,
+ .description = sEscapeRopeDesc,
+ #if I_KEY_ESCAPE_ROPE >= GEN_8
+ .price = 0,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ #else
+ .price = 1000,
+ .pocket = POCKET_ITEMS,
+ #endif
+ .type = ITEM_USE_FIELD,
+ .fieldUseFunc = ItemUseOutOfBattle_EscapeRope,
+ .flingPower = 30,
+ },
+
+// X Items
+
[ITEM_X_ATTACK] =
{
- .name = _("X ATTACK"),
+ .name = _("X Attack"),
.itemId = ITEM_X_ATTACK,
- .price = 500,
+ .price = 1000,
.description = sXAttackDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_StatIncrease,
+ .flingPower = 30,
},
- [ITEM_X_DEFEND] =
+ [ITEM_X_DEFENSE] =
{
- .name = _("X DEFEND"),
- .itemId = ITEM_X_DEFEND,
- .price = 550,
- .description = sXDefendDesc,
+ .name = _("X Defense"),
+ .itemId = ITEM_X_DEFENSE,
+ .price = 2000,
+ .description = sXDefenseDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_StatIncrease,
+ .flingPower = 30,
+ },
+
+ [ITEM_X_SP_ATK] =
+ {
+ .name = _("X Sp. Atk"),
+ .itemId = ITEM_X_SP_ATK,
+ .price = 1000,
+ .description = sXSpAtkDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .flingPower = 30,
+ },
+
+ [ITEM_X_SP_DEF] =
+ {
+ .name = _("X Sp. Def"),
+ .itemId = ITEM_X_SP_DEF,
+ .price = 2000,
+ .description = sXSpDefDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .flingPower = 30,
},
[ITEM_X_SPEED] =
{
- .name = _("X SPEED"),
+ .name = _("X Speed"),
.itemId = ITEM_X_SPEED,
- .price = 350,
+ .price = 1000,
.description = sXSpeedDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_StatIncrease,
+ .flingPower = 30,
},
[ITEM_X_ACCURACY] =
{
- .name = _("X ACCURACY"),
+ .name = _("X Accuracy"),
.itemId = ITEM_X_ACCURACY,
- .price = 950,
+ .price = 1000,
.description = sXAccuracyDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_StatIncrease,
+ .flingPower = 30,
},
- [ITEM_X_SPECIAL] =
+ [ITEM_DIRE_HIT] =
{
- .name = _("X SPECIAL"),
- .itemId = ITEM_X_SPECIAL,
- .price = 350,
- .description = sXSpecialDesc,
+ .name = _("Dire Hit"),
+ .itemId = ITEM_DIRE_HIT,
+ .price = 1000,
+ .description = sDireHitDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_StatIncrease,
+ .flingPower = 30,
+ },
+
+ [ITEM_GUARD_SPEC] =
+ {
+ .name = _("Guard Spec."),
+ .itemId = ITEM_GUARD_SPEC,
+ .price = 1500,
+ .description = sGuardSpecDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .flingPower = 30,
},
[ITEM_POKE_DOLL] =
{
- .name = _("POKé DOLL"),
+ .name = _("Poké Doll"),
.itemId = ITEM_POKE_DOLL,
- .price = 1000,
+ .price = 100,
.description = sPokeDollDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_Escape,
+ .flingPower = 30,
},
[ITEM_FLUFFY_TAIL] =
{
- .name = _("FLUFFY TAIL"),
+ .name = _("Fluffy Tail"),
.itemId = ITEM_FLUFFY_TAIL,
- .price = 1000,
+ .price = 100,
.description = sFluffyTailDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = ITEM_B_USE_OTHER,
.battleUseFunc = ItemUseInBattle_Escape,
+ .flingPower = 30,
},
- [ITEM_052] =
+ [ITEM_POKE_TOY] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("Poké Toy"),
+ .itemId = ITEM_POKE_TOY,
+ .price = 100,
+ .description = sPokeToyDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_Escape,
+ .flingPower = 30,
},
-// Field items
-
- [ITEM_SUPER_REPEL] =
+ [ITEM_MAX_MUSHROOMS] =
{
- .name = _("SUPER REPEL"),
- .itemId = ITEM_SUPER_REPEL,
- .price = 500,
- .holdEffectParam = 200,
- .description = sSuperRepelDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Repel,
- },
-
- [ITEM_MAX_REPEL] =
- {
- .name = _("MAX REPEL"),
- .itemId = ITEM_MAX_REPEL,
- .price = 700,
- .holdEffectParam = 250,
- .description = sMaxRepelDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Repel,
- },
-
- [ITEM_ESCAPE_ROPE] =
- {
- .name = _("ESCAPE ROPE"),
- .itemId = ITEM_ESCAPE_ROPE,
- .price = 550,
- .description = sEscapeRopeDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_FIELD,
- .fieldUseFunc = ItemUseOutOfBattle_EscapeRope,
- },
-
- [ITEM_REPEL] =
- {
- .name = _("REPEL"),
- .itemId = ITEM_REPEL,
- .price = 350,
- .holdEffectParam = 100,
- .description = sRepelDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_Repel,
- },
-
- [ITEM_057] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("MaxMushrooms"),
+ .itemId = ITEM_MAX_MUSHROOMS,
+ .price = 8000,
+ .description = sMaxMushroomsDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = ITEM_B_USE_OTHER,
+ .battleUseFunc = ItemUseInBattle_StatIncrease, // Todo
+ .flingPower = 30,
},
- [ITEM_058] =
+// Treasures
+
+ [ITEM_BOTTLE_CAP] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_059] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_05A] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_05B] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_05C] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
-// Evolution stones
-
- [ITEM_SUN_STONE] =
- {
- .name = _("SUN STONE"),
- .itemId = ITEM_SUN_STONE,
- .price = 2100,
- .description = sSunStoneDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
- },
-
- [ITEM_MOON_STONE] =
- {
- .name = _("MOON STONE"),
- .itemId = ITEM_MOON_STONE,
- .price = 0,
- .description = sMoonStoneDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
- },
-
- [ITEM_FIRE_STONE] =
- {
- .name = _("FIRE STONE"),
- .itemId = ITEM_FIRE_STONE,
- .price = 2100,
- .description = sFireStoneDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
- },
-
- [ITEM_THUNDER_STONE] =
- {
- .name = _("THUNDERSTONE"),
- .itemId = ITEM_THUNDER_STONE,
- .price = 2100,
- .description = sThunderStoneDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
- },
-
- [ITEM_WATER_STONE] =
- {
- .name = _("WATER STONE"),
- .itemId = ITEM_WATER_STONE,
- .price = 2100,
- .description = sWaterStoneDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
- },
-
- [ITEM_LEAF_STONE] =
- {
- .name = _("LEAF STONE"),
- .itemId = ITEM_LEAF_STONE,
- .price = 2100,
- .description = sLeafStoneDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_PARTY_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
- },
-
- [ITEM_063] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_064] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_065] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_066] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
-// Valuable items
-
- [ITEM_TINY_MUSHROOM] =
- {
- .name = _("TINYMUSHROOM"),
- .itemId = ITEM_TINY_MUSHROOM,
- .price = 500,
- .description = sTinyMushroomDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_BIG_MUSHROOM] =
- {
- .name = _("BIG MUSHROOM"),
- .itemId = ITEM_BIG_MUSHROOM,
+ .name = _("Bottle Cap"),
+ .itemId = ITEM_BOTTLE_CAP,
.price = 5000,
- .description = sBigMushroomDesc,
+ .description = sBottleCapDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
},
- [ITEM_069] =
+ [ITEM_GOLD_BOTTLE_CAP] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_PEARL] =
- {
- .name = _("PEARL"),
- .itemId = ITEM_PEARL,
- .price = 1400,
- .description = sPearlDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_BIG_PEARL] =
- {
- .name = _("BIG PEARL"),
- .itemId = ITEM_BIG_PEARL,
- .price = 7500,
- .description = sBigPearlDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_STARDUST] =
- {
- .name = _("STARDUST"),
- .itemId = ITEM_STARDUST,
- .price = 2000,
- .description = sStardustDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_STAR_PIECE] =
- {
- .name = _("STAR PIECE"),
- .itemId = ITEM_STAR_PIECE,
- .price = 9800,
- .description = sStarPieceDesc,
+ .name = _("GoldBottlCap"),
+ .itemId = ITEM_GOLD_BOTTLE_CAP,
+ .price = 10000,
+ .description = sGoldBottleCapDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
},
[ITEM_NUGGET] =
{
- .name = _("NUGGET"),
+ .name = _("Nugget"),
.itemId = ITEM_NUGGET,
.price = 10000,
.description = sNuggetDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_BIG_NUGGET] =
+ {
+ .name = _("Big Nugget"),
+ .itemId = ITEM_BIG_NUGGET,
+ .price = 40000,
+ .description = sBigNuggetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_TINY_MUSHROOM] =
+ {
+ .name = _("Tiny Mushroom"),
+ .itemId = ITEM_TINY_MUSHROOM,
+ .price = 500,
+ .description = sTinyMushroomDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_BIG_MUSHROOM] =
+ {
+ .name = _("Big Mushroom"),
+ .itemId = ITEM_BIG_MUSHROOM,
+ .price = 5000,
+ .description = sBigMushroomDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_BALM_MUSHROOM] =
+ {
+ .name = _("Balm Mushroom"),
+ .itemId = ITEM_BALM_MUSHROOM,
+ .price = 15000,
+ .description = sBalmMushroomDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_PEARL] =
+ {
+ .name = _("Pearl"),
+ .itemId = ITEM_PEARL,
+ .price = 2000,
+ .description = sPearlDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_BIG_PEARL] =
+ {
+ .name = _("Big Pearl"),
+ .itemId = ITEM_BIG_PEARL,
+ .price = 8000,
+ .description = sBigPearlDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_PEARL_STRING] =
+ {
+ .name = _("Pearl String"),
+ .itemId = ITEM_PEARL_STRING,
+ .price = 20000,
+ .description = sPearlStringDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_STARDUST] =
+ {
+ .name = _("Stardust"),
+ .itemId = ITEM_STARDUST,
+ .price = 3000,
+ .description = sStardustDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_STAR_PIECE] =
+ {
+ .name = _("Star Piece"),
+ .itemId = ITEM_STAR_PIECE,
+ .price = 12000,
+ .description = sStarPieceDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_COMET_SHARD] =
+ {
+ .name = _("Comet Shard"),
+ .itemId = ITEM_COMET_SHARD,
+ .price = 25000,
+ .description = sCometShardDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_SHOAL_SALT] =
+ {
+ .name = _("Shoal Salt"),
+ .itemId = ITEM_SHOAL_SALT,
+ .price = 20,
+ .description = sShoalSaltDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_SHOAL_SHELL] =
+ {
+ .name = _("Shoal Shell"),
+ .itemId = ITEM_SHOAL_SHELL,
+ .price = 20,
+ .description = sShoalShellDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_RED_SHARD] =
+ {
+ .name = _("Red Shard"),
+ .itemId = ITEM_RED_SHARD,
+ .price = 1000,
+ .description = sRedShardDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_BLUE_SHARD] =
+ {
+ .name = _("Blue Shard"),
+ .itemId = ITEM_BLUE_SHARD,
+ .price = 1000,
+ .description = sBlueShardDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_YELLOW_SHARD] =
+ {
+ .name = _("Yellow Shard"),
+ .itemId = ITEM_YELLOW_SHARD,
+ .price = 1000,
+ .description = sYellowShardDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_GREEN_SHARD] =
+ {
+ .name = _("Green Shard"),
+ .itemId = ITEM_GREEN_SHARD,
+ .price = 1000,
+ .description = sGreenShardDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
},
[ITEM_HEART_SCALE] =
{
- .name = _("HEART SCALE"),
+ .name = _("Heart Scale"),
.itemId = ITEM_HEART_SCALE,
.price = 100,
.description = sHeartScaleDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
},
- [ITEM_070] =
+ [ITEM_HONEY] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
+ .name = _("Honey"),
+ .itemId = ITEM_HONEY,
+ .price = 300,
+ .description = sHoneyDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_RARE_BONE] =
+ {
+ .name = _("Rare Bone"),
+ .itemId = ITEM_RARE_BONE,
+ .price = 5000,
+ .description = sRareBoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_ODD_KEYSTONE] =
+ {
+ .name = _("Odd Keystone"),
+ .itemId = ITEM_ODD_KEYSTONE,
+ .price = 2100,
+ .description = sOddKeystoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_PRETTY_FEATHER] =
+ {
+ .name = _("PrettyFeather"),
+ .itemId = ITEM_PRETTY_FEATHER,
+ .price = 1000,
+ .description = sPrettyFeatherDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 20,
+ },
+
+ [ITEM_RELIC_COPPER] =
+ {
+ .name = _("Relic Copper"),
+ .itemId = ITEM_RELIC_COPPER,
.price = 0,
- .description = sDummyDesc,
+ .description = sRelicCopperDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_RELIC_SILVER] =
+ {
+ .name = _("Relic Silver"),
+ .itemId = ITEM_RELIC_SILVER,
+ .price = 0,
+ .description = sRelicSilverDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_RELIC_GOLD] =
+ {
+ .name = _("Relic Gold"),
+ .itemId = ITEM_RELIC_GOLD,
+ .price = 0,
+ .description = sRelicGoldDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_RELIC_VASE] =
+ {
+ .name = _("Relic Vase"),
+ .itemId = ITEM_RELIC_VASE,
+ .price = 0,
+ .description = sRelicVaseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_RELIC_BAND] =
+ {
+ .name = _("Relic Band"),
+ .itemId = ITEM_RELIC_BAND,
+ .price = 0,
+ .description = sRelicBandDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_RELIC_STATUE] =
+ {
+ .name = _("Relic Statue"),
+ .itemId = ITEM_RELIC_STATUE,
+ .price = 0,
+ .description = sRelicStatueDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_RELIC_CROWN] =
+ {
+ .name = _("Relic Crown"),
+ .itemId = ITEM_RELIC_CROWN,
+ .price = 0,
+ .description = sRelicCrownDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_STRANGE_SOUVENIR] =
+ {
+ .name = _("StrngeSouvnr"),
+ .itemId = ITEM_STRANGE_SOUVENIR,
+ .price = 3000,
+ .description = sStrangeSouvenirDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+// Fossils
+
+ [ITEM_HELIX_FOSSIL] =
+ {
+ .name = _("Helix Fossil"),
+ .itemId = ITEM_HELIX_FOSSIL,
+ .description = sHelixFossilDesc,
+ #if I_KEY_FOSSILS >= GEN_4
+ .price = 7000,
+ .pocket = POCKET_ITEMS,
+ #else
+ .price = 0,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ #endif
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_DOME_FOSSIL] =
+ {
+ .name = _("Dome Fossil"),
+ .itemId = ITEM_DOME_FOSSIL,
+ .description = sDomeFossilDesc,
+ #if I_KEY_FOSSILS >= GEN_4
+ .price = 7000,
+ .pocket = POCKET_ITEMS,
+ #else
+ .price = 0,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ #endif
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_OLD_AMBER] =
+ {
+ .name = _("Old Amber"),
+ .itemId = ITEM_OLD_AMBER,
+ .description = sOldAmberDesc,
+ #if I_KEY_FOSSILS >= GEN_4
+ .price = 10000,
+ .pocket = POCKET_ITEMS,
+ #else
+ .price = 0,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ #endif
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_ROOT_FOSSIL] =
+ {
+ .name = _("Root Fossil"),
+ .itemId = ITEM_ROOT_FOSSIL,
+ .description = sRootFossilDesc,
+ #if I_KEY_FOSSILS >= GEN_4
+ .price = 7000,
+ .pocket = POCKET_ITEMS,
+ #else
+ .price = 0,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ #endif
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_CLAW_FOSSIL] =
+ {
+ .name = _("Claw Fossil"),
+ .itemId = ITEM_CLAW_FOSSIL,
+ .description = sClawFossilDesc,
+ #if I_KEY_FOSSILS >= GEN_4
+ .price = 7000,
+ .pocket = POCKET_ITEMS,
+ #else
+ .price = 0,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ #endif
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_ARMOR_FOSSIL] =
+ {
+ .name = _("Armor Fossil"),
+ .itemId = ITEM_ARMOR_FOSSIL,
+ .price = 7000,
+ .description = sArmorFossilDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_SKULL_FOSSIL] =
+ {
+ .name = _("Skull Fossil"),
+ .itemId = ITEM_SKULL_FOSSIL,
+ .price = 7000,
+ .description = sSkullFossilDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_COVER_FOSSIL] =
+ {
+ .name = _("Cover Fossil"),
+ .itemId = ITEM_COVER_FOSSIL,
+ .price = 7000,
+ .description = sCoverFossilDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_PLUME_FOSSIL] =
+ {
+ .name = _("Plume Fossil"),
+ .itemId = ITEM_PLUME_FOSSIL,
+ .price = 7000,
+ .description = sPlumeFossilDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_JAW_FOSSIL] =
+ {
+ .name = _("Jaw Fossil"),
+ .itemId = ITEM_JAW_FOSSIL,
+ .price = 7000,
+ .description = sJawFossilDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_SAIL_FOSSIL] =
+ {
+ .name = _("Sail Fossil"),
+ .itemId = ITEM_SAIL_FOSSIL,
+ .price = 7000,
+ .description = sSailFossilDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_FOSSILIZED_BIRD] =
+ {
+ .name = _("FosslzedBird"),
+ .itemId = ITEM_FOSSILIZED_BIRD,
+ .price = 5000,
+ .description = sFossilizedBirdDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_FOSSILIZED_FISH] =
+ {
+ .name = _("FosslzedFish"),
+ .itemId = ITEM_FOSSILIZED_FISH,
+ .price = 5000,
+ .description = sFossilizedFishDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_FOSSILIZED_DRAKE] =
+ {
+ .name = _("FosslzedDrke"),
+ .itemId = ITEM_FOSSILIZED_DRAKE,
+ .price = 5000,
+ .description = sFossilizedDrakeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_FOSSILIZED_DINO] =
+ {
+ .name = _("FosslzedDino"),
+ .itemId = ITEM_FOSSILIZED_DINO,
+ .price = 5000,
+ .description = sFossilizedDinoDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+// Mulch
+
+ [ITEM_GROWTH_MULCH] =
+ {
+ .name = _("Growth Mulch"),
+ .itemId = ITEM_GROWTH_MULCH,
+ .price = 200,
+ .description = sGrowthMulchDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_DAMP_MULCH] =
+ {
+ .name = _("Damp Mulch"),
+ .itemId = ITEM_DAMP_MULCH,
+ .price = 200,
+ .description = sDampMulchDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_STABLE_MULCH] =
+ {
+ .name = _("Stable Mulch"),
+ .itemId = ITEM_STABLE_MULCH,
+ .price = 200,
+ .description = sStableMulchDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_GOOEY_MULCH] =
+ {
+ .name = _("Gooey Mulch"),
+ .itemId = ITEM_GOOEY_MULCH,
+ .price = 200,
+ .description = sGooeyMulchDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_RICH_MULCH] =
+ {
+ .name = _("Rich Mulch"),
+ .itemId = ITEM_RICH_MULCH,
+ .price = 200,
+ .description = sRichMulchDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_SURPRISE_MULCH] =
+ {
+ .name = _("SurprseMulch"),
+ .itemId = ITEM_SURPRISE_MULCH,
+ .price = 200,
+ .description = sSurpriseMulchDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_BOOST_MULCH] =
+ {
+ .name = _("Boost Mulch"),
+ .itemId = ITEM_BOOST_MULCH,
+ .price = 200,
+ .description = sBoostMulchDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+ [ITEM_AMAZE_MULCH] =
+ {
+ .name = _("Amaze Mulch"),
+ .itemId = ITEM_AMAZE_MULCH,
+ .price = 200,
+ .description = sAmazeMulchDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 30,
+ },
+
+// Apricorns
+
+ [ITEM_RED_APRICORN] =
+ {
+ .name = _("Red Apricorn"),
+ .itemId = ITEM_RED_APRICORN,
+ .price = 200,
+ .description = sRedApricornDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_071] =
+ [ITEM_BLUE_APRICORN] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("Blue Apricorn"),
+ .itemId = ITEM_BLUE_APRICORN,
+ .price = 200,
+ .description = sBlueApricornDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_072] =
+ [ITEM_YELLOW_APRICORN] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("YellwApricorn"),
+ .itemId = ITEM_YELLOW_APRICORN,
+ .price = 200,
+ .description = sYellowApricornDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_073] =
+ [ITEM_GREEN_APRICORN] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("GreenApricorn"),
+ .itemId = ITEM_GREEN_APRICORN,
+ .price = 200,
+ .description = sGreenApricornDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_074] =
+ [ITEM_PINK_APRICORN] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("Pink Apricorn"),
+ .itemId = ITEM_PINK_APRICORN,
+ .price = 200,
+ .description = sPinkApricornDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_075] =
+ [ITEM_WHITE_APRICORN] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("WhiteApricorn"),
+ .itemId = ITEM_WHITE_APRICORN,
+ .price = 200,
+ .description = sWhiteApricornDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_076] =
+ [ITEM_BLACK_APRICORN] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("BlackApricorn"),
+ .itemId = ITEM_BLACK_APRICORN,
+ .price = 200,
+ .description = sBlackApricornDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_077] =
+ [ITEM_WISHING_PIECE] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("WishingPiece"),
+ .itemId = ITEM_WISHING_PIECE,
+ .price = 20,
+ .description = sWishingPieceDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .flingPower = 50,
},
- [ITEM_078] =
+ [ITEM_GALARICA_TWIG] =
{
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
+ .name = _("GalaricaTwig"),
+ .itemId = ITEM_GALARICA_TWIG,
+ .price = 40,
+ .description = sGalaricaTwigDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_ARMORITE_ORE] =
+ {
+ .name = _("Armorite Ore"),
+ .itemId = ITEM_ARMORITE_ORE,
+ .price = 40,
+ .description = sArmoriteOreDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_DYNITE_ORE] =
+ {
+ .name = _("Dynite Ore"),
+ .itemId = ITEM_DYNITE_ORE,
+ .price = 20,
+ .description = sDyniteOreDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
},
// Mail
+
[ITEM_ORANGE_MAIL] =
{
- .name = _("ORANGE MAIL"),
+ .name = _("Orange Mail"),
.itemId = ITEM_ORANGE_MAIL,
.price = 50,
.description = sOrangeMailDesc,
@@ -1484,7 +2620,7 @@ const struct Item gItems[] =
[ITEM_HARBOR_MAIL] =
{
- .name = _("HARBOR MAIL"),
+ .name = _("Harbor Mail"),
.itemId = ITEM_HARBOR_MAIL,
.price = 50,
.description = sHarborMailDesc,
@@ -1496,7 +2632,7 @@ const struct Item gItems[] =
[ITEM_GLITTER_MAIL] =
{
- .name = _("GLITTER MAIL"),
+ .name = _("Glitter Mail"),
.itemId = ITEM_GLITTER_MAIL,
.price = 50,
.description = sGlitterMailDesc,
@@ -1508,7 +2644,7 @@ const struct Item gItems[] =
[ITEM_MECH_MAIL] =
{
- .name = _("MECH MAIL"),
+ .name = _("Mech Mail"),
.itemId = ITEM_MECH_MAIL,
.price = 50,
.description = sMechMailDesc,
@@ -1520,7 +2656,7 @@ const struct Item gItems[] =
[ITEM_WOOD_MAIL] =
{
- .name = _("WOOD MAIL"),
+ .name = _("Wood Mail"),
.itemId = ITEM_WOOD_MAIL,
.price = 50,
.description = sWoodMailDesc,
@@ -1532,7 +2668,7 @@ const struct Item gItems[] =
[ITEM_WAVE_MAIL] =
{
- .name = _("WAVE MAIL"),
+ .name = _("Wave Mail"),
.itemId = ITEM_WAVE_MAIL,
.price = 50,
.description = sWaveMailDesc,
@@ -1544,7 +2680,7 @@ const struct Item gItems[] =
[ITEM_BEAD_MAIL] =
{
- .name = _("BEAD MAIL"),
+ .name = _("Bead Mail"),
.itemId = ITEM_BEAD_MAIL,
.price = 50,
.description = sBeadMailDesc,
@@ -1556,7 +2692,7 @@ const struct Item gItems[] =
[ITEM_SHADOW_MAIL] =
{
- .name = _("SHADOW MAIL"),
+ .name = _("Shadow Mail"),
.itemId = ITEM_SHADOW_MAIL,
.price = 50,
.description = sShadowMailDesc,
@@ -1568,7 +2704,7 @@ const struct Item gItems[] =
[ITEM_TROPIC_MAIL] =
{
- .name = _("TROPIC MAIL"),
+ .name = _("Tropic Mail"),
.itemId = ITEM_TROPIC_MAIL,
.price = 50,
.description = sTropicMailDesc,
@@ -1580,7 +2716,7 @@ const struct Item gItems[] =
[ITEM_DREAM_MAIL] =
{
- .name = _("DREAM MAIL"),
+ .name = _("Dream Mail"),
.itemId = ITEM_DREAM_MAIL,
.price = 50,
.description = sDreamMailDesc,
@@ -1592,7 +2728,7 @@ const struct Item gItems[] =
[ITEM_FAB_MAIL] =
{
- .name = _("FAB MAIL"),
+ .name = _("Fab Mail"),
.itemId = ITEM_FAB_MAIL,
.price = 50,
.description = sFabMailDesc,
@@ -1604,9 +2740,9 @@ const struct Item gItems[] =
[ITEM_RETRO_MAIL] =
{
- .name = _("RETRO MAIL"),
+ .name = _("Retro Mail"),
.itemId = ITEM_RETRO_MAIL,
- .price = 0,
+ .price = 50,
.description = sRetroMailDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_MAIL,
@@ -1614,11 +2750,4118 @@ const struct Item gItems[] =
.secondaryId = ITEM_TO_MAIL(ITEM_RETRO_MAIL),
},
+// Evolution Items
+
+ [ITEM_FIRE_STONE] =
+ {
+ .name = _("Fire Stone"),
+ .itemId = ITEM_FIRE_STONE,
+ .price = 3000,
+ .description = sFireStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_WATER_STONE] =
+ {
+ .name = _("Water Stone"),
+ .itemId = ITEM_WATER_STONE,
+ .price = 3000,
+ .description = sWaterStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_THUNDER_STONE] =
+ {
+ .name = _("Thunder Stone"),
+ .itemId = ITEM_THUNDER_STONE,
+ .price = 3000,
+ .description = sThunderStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_LEAF_STONE] =
+ {
+ .name = _("Leaf Stone"),
+ .itemId = ITEM_LEAF_STONE,
+ .price = 3000,
+ .description = sLeafStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_ICE_STONE] =
+ {
+ .name = _("Ice Stone"),
+ .itemId = ITEM_ICE_STONE,
+ .price = 3000,
+ .description = sIceStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_SUN_STONE] =
+ {
+ .name = _("Sun Stone"),
+ .itemId = ITEM_SUN_STONE,
+ .price = 3000,
+ .description = sSunStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_MOON_STONE] =
+ {
+ .name = _("Moon Stone"),
+ .itemId = ITEM_MOON_STONE,
+ .price = 3000,
+ .description = sMoonStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_SHINY_STONE] =
+ {
+ .name = _("Shiny Stone"),
+ .itemId = ITEM_SHINY_STONE,
+ .price = 3000,
+ .description = sShinyStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_DUSK_STONE] =
+ {
+ .name = _("Dusk Stone"),
+ .itemId = ITEM_DUSK_STONE,
+ .price = 3000,
+ .description = sDuskStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 80,
+ },
+
+ [ITEM_DAWN_STONE] =
+ {
+ .name = _("Dawn Stone"),
+ .itemId = ITEM_DAWN_STONE,
+ .price = 3000,
+ .description = sDawnStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 80,
+ },
+
+ [ITEM_SWEET_APPLE] =
+ {
+ .name = _("Sweet Apple"),
+ .itemId = ITEM_SWEET_APPLE,
+ .price = 2200,
+ .description = sSweetAppleDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_TART_APPLE] =
+ {
+ .name = _("Tart Apple"),
+ .itemId = ITEM_TART_APPLE,
+ .price = 2200,
+ .description = sTartAppleDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_CRACKED_POT] =
+ {
+ .name = _("Cracked Pot"),
+ .itemId = ITEM_CRACKED_POT,
+ .price = 1600,
+ .description = sCrackedPotDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 80,
+ },
+
+ [ITEM_CHIPPED_POT] =
+ {
+ .name = _("Chipped Pot"),
+ .itemId = ITEM_CHIPPED_POT,
+ .price = 38000,
+ .description = sChippedPotDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 80,
+ },
+
+ [ITEM_GALARICA_CUFF] =
+ {
+ .name = _("GalaricaCuff"),
+ .itemId = ITEM_GALARICA_CUFF,
+ .price = 6000,
+ .description = sGalaricaCuffDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_GALARICA_WREATH] =
+ {
+ .name = _("GalrcaWreath"),
+ .itemId = ITEM_GALARICA_WREATH,
+ .price = 6000,
+ .description = sGalaricaWreathDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .flingPower = 30,
+ },
+
+ [ITEM_DRAGON_SCALE] =
+ {
+ .name = _("Dragon Scale"),
+ .itemId = ITEM_DRAGON_SCALE,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_DRAGON_SCALE,
+ .holdEffectParam = 10,
+ .description = sDragonScaleDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_UPGRADE] =
+ {
+ .name = _("Upgrade"),
+ .itemId = ITEM_UPGRADE,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_UPGRADE,
+ .description = sUpgradeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_PROTECTOR] =
+ {
+ .name = _("Protector"),
+ .itemId = ITEM_PROTECTOR,
+ .price = 2000,
+ .description = sProtectorDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_ELECTIRIZER] =
+ {
+ .name = _("Electirizer"),
+ .itemId = ITEM_ELECTIRIZER,
+ .price = 2000,
+ .description = sElectirizerDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_MAGMARIZER] =
+ {
+ .name = _("Magmarizer"),
+ .itemId = ITEM_MAGMARIZER,
+ .price = 2000,
+ .description = sMagmarizerDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_DUBIOUS_DISC] =
+ {
+ .name = _("Dubious Disc"),
+ .itemId = ITEM_DUBIOUS_DISC,
+ .price = 2000,
+ .description = sDubiousDiscDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 50,
+ },
+
+ [ITEM_REAPER_CLOTH] =
+ {
+ .name = _("Reaper Cloth"),
+ .itemId = ITEM_REAPER_CLOTH,
+ .price = 2000,
+ .description = sReaperClothDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_PRISM_SCALE] =
+ {
+ .name = _("Prism Scale"),
+ .itemId = ITEM_PRISM_SCALE,
+ .price = 2000,
+ .description = sPrismScaleDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_WHIPPED_DREAM] =
+ {
+ .name = _("Whipped Dream"),
+ .itemId = ITEM_WHIPPED_DREAM,
+ .price = 2000,
+ .description = sWhippedDreamDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SACHET] =
+ {
+ .name = _("Sachet"),
+ .itemId = ITEM_SACHET,
+ .price = 2000,
+ .description = sSachetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_OVAL_STONE] =
+ {
+ .name = _("Oval Stone"),
+ .itemId = ITEM_OVAL_STONE,
+ .price = 2000,
+ .description = sOvalStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_STRAWBERRY_SWEET] =
+ {
+ .name = _("StrwbrySweet"),
+ .itemId = ITEM_STRAWBERRY_SWEET,
+ .price = 500,
+ .description = sStrawberrySweetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_LOVE_SWEET] =
+ {
+ .name = _("Love Sweet"),
+ .itemId = ITEM_LOVE_SWEET,
+ .price = 500,
+ .description = sLoveSweetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_BERRY_SWEET] =
+ {
+ .name = _("Berry Sweet"),
+ .itemId = ITEM_BERRY_SWEET,
+ .price = 500,
+ .description = sBerrySweetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_CLOVER_SWEET] =
+ {
+ .name = _("Clover Sweet"),
+ .itemId = ITEM_CLOVER_SWEET,
+ .price = 500,
+ .description = sCloverSweetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_FLOWER_SWEET] =
+ {
+ .name = _("Flower Sweet"),
+ .itemId = ITEM_FLOWER_SWEET,
+ .price = 500,
+ .description = sFlowerSweetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_STAR_SWEET] =
+ {
+ .name = _("Star Sweet"),
+ .itemId = ITEM_STAR_SWEET,
+ .price = 500,
+ .description = sStarSweetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_RIBBON_SWEET] =
+ {
+ .name = _("Ribbon Sweet"),
+ .itemId = ITEM_RIBBON_SWEET,
+ .price = 500,
+ .description = sRibbonSweetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_EVERSTONE] =
+ {
+ .name = _("Everstone"),
+ .itemId = ITEM_EVERSTONE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_PREVENT_EVOLVE,
+ .description = sEverstoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+// Nectars
+
+ [ITEM_RED_NECTAR] =
+ {
+ .name = _("Red Nectar"),
+ .itemId = ITEM_RED_NECTAR,
+ .price = 300,
+ .holdEffectParam = 0,
+ .description = sRedNectarDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
+ .secondaryId = FORM_ITEM_USE,
+ .flingPower = 10,
+ },
+
+ [ITEM_YELLOW_NECTAR] =
+ {
+ .name = _("Yellow Nectar"),
+ .itemId = ITEM_YELLOW_NECTAR,
+ .price = 300,
+ .holdEffectParam = 0,
+ .description = sYellowNectarDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
+ .secondaryId = FORM_ITEM_USE,
+ .flingPower = 10,
+ },
+
+ [ITEM_PINK_NECTAR] =
+ {
+ .name = _("Pink Nectar"),
+ .itemId = ITEM_PINK_NECTAR,
+ .price = 300,
+ .holdEffectParam = 0,
+ .description = sPinkNectarDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
+ .secondaryId = FORM_ITEM_USE,
+ .flingPower = 10,
+ },
+
+ [ITEM_PURPLE_NECTAR] =
+ {
+ .name = _("Purple Nectar"),
+ .itemId = ITEM_PURPLE_NECTAR,
+ .price = 300,
+ .holdEffectParam = 0,
+ .description = sPurpleNectarDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
+ .secondaryId = FORM_ITEM_USE,
+ .flingPower = 10,
+ },
+
+// Plates
+
+ [ITEM_FLAME_PLATE] =
+ {
+ .name = _("Flame Plate"),
+ .itemId = ITEM_FLAME_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sFlamePlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FIRE,
+ .flingPower = 90,
+ },
+
+ [ITEM_SPLASH_PLATE] =
+ {
+ .name = _("Splash Plate"),
+ .itemId = ITEM_SPLASH_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sSplashPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_WATER,
+ .flingPower = 90,
+ },
+
+ [ITEM_ZAP_PLATE] =
+ {
+ .name = _("Zap Plate"),
+ .itemId = ITEM_ZAP_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sZapPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ELECTRIC,
+ .flingPower = 90,
+ },
+
+ [ITEM_MEADOW_PLATE] =
+ {
+ .name = _("Meadow Plate"),
+ .itemId = ITEM_MEADOW_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sMeadowPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GRASS,
+ .flingPower = 90,
+ },
+
+ [ITEM_ICICLE_PLATE] =
+ {
+ .name = _("Icicle Plate"),
+ .itemId = ITEM_ICICLE_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sIciclePlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ICE,
+ .flingPower = 90,
+ },
+
+ [ITEM_FIST_PLATE] =
+ {
+ .name = _("Fist Plate"),
+ .itemId = ITEM_FIST_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sFistPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FIGHTING,
+ .flingPower = 90,
+ },
+
+ [ITEM_TOXIC_PLATE] =
+ {
+ .name = _("Toxic Plate"),
+ .itemId = ITEM_TOXIC_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sToxicPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_POISON,
+ .flingPower = 90,
+ },
+
+ [ITEM_EARTH_PLATE] =
+ {
+ .name = _("Earth Plate"),
+ .itemId = ITEM_EARTH_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sEarthPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GROUND,
+ .flingPower = 90,
+ },
+
+ [ITEM_SKY_PLATE] =
+ {
+ .name = _("Sky Plate"),
+ .itemId = ITEM_SKY_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sSkyPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FLYING,
+ .flingPower = 90,
+ },
+
+ [ITEM_MIND_PLATE] =
+ {
+ .name = _("Mind Plate"),
+ .itemId = ITEM_MIND_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sMindPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_PSYCHIC,
+ .flingPower = 90,
+ },
+
+ [ITEM_INSECT_PLATE] =
+ {
+ .name = _("Insect Plate"),
+ .itemId = ITEM_INSECT_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sInsectPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_BUG,
+ .flingPower = 90,
+ },
+
+ [ITEM_STONE_PLATE] =
+ {
+ .name = _("Stone Plate"),
+ .itemId = ITEM_STONE_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sStonePlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ROCK,
+ .flingPower = 90,
+ },
+
+ [ITEM_SPOOKY_PLATE] =
+ {
+ .name = _("Spooky Plate"),
+ .itemId = ITEM_SPOOKY_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sSpookyPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GHOST,
+ .flingPower = 90,
+ },
+
+ [ITEM_DRACO_PLATE] =
+ {
+ .name = _("Draco Plate"),
+ .itemId = ITEM_DRACO_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sDracoPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_DRAGON,
+ .flingPower = 90,
+ },
+
+ [ITEM_DREAD_PLATE] =
+ {
+ .name = _("Dread Plate"),
+ .itemId = ITEM_DREAD_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sDreadPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_DARK,
+ .flingPower = 90,
+ },
+
+ [ITEM_IRON_PLATE] =
+ {
+ .name = _("Iron Plate"),
+ .itemId = ITEM_IRON_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sIronPlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_STEEL,
+ .flingPower = 90,
+ },
+
+ [ITEM_PIXIE_PLATE] =
+ {
+ .name = _("Pixie Plate"),
+ .itemId = ITEM_PIXIE_PLATE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PLATE,
+ .holdEffectParam = 20,
+ .description = sPixiePlateDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FAIRY,
+ .flingPower = 90,
+ },
+
+// Drives
+
+ [ITEM_DOUSE_DRIVE] =
+ {
+ .name = _("Douse Drive"),
+ .itemId = ITEM_DOUSE_DRIVE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_DRIVE,
+ .description = sDouseDriveDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_WATER,
+ .flingPower = 70,
+ },
+
+ [ITEM_SHOCK_DRIVE] =
+ {
+ .name = _("Shock Drive"),
+ .itemId = ITEM_SHOCK_DRIVE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_DRIVE,
+ .description = sShockDriveDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ELECTRIC,
+ .flingPower = 70,
+ },
+
+ [ITEM_BURN_DRIVE] =
+ {
+ .name = _("Burn Drive"),
+ .itemId = ITEM_BURN_DRIVE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_DRIVE,
+ .description = sBurnDriveDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FIRE,
+ .flingPower = 70,
+ },
+
+ [ITEM_CHILL_DRIVE] =
+ {
+ .name = _("Chill Drive"),
+ .itemId = ITEM_CHILL_DRIVE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_DRIVE,
+ .description = sChillDriveDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ICE,
+ .flingPower = 70,
+ },
+
+// Memories
+
+ [ITEM_FIRE_MEMORY] =
+ {
+ .name = _("Fire Memory"),
+ .itemId = ITEM_FIRE_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sFireMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FIRE,
+ .flingPower = 50,
+ },
+
+ [ITEM_WATER_MEMORY] =
+ {
+ .name = _("Water Memory"),
+ .itemId = ITEM_WATER_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sWaterMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_WATER,
+ .flingPower = 50,
+ },
+
+ [ITEM_ELECTRIC_MEMORY] =
+ {
+ .name = _("ElectrcMemory"),
+ .itemId = ITEM_ELECTRIC_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sElectricMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ELECTRIC,
+ .flingPower = 50,
+ },
+
+ [ITEM_GRASS_MEMORY] =
+ {
+ .name = _("Grass Memory"),
+ .itemId = ITEM_GRASS_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sGrassMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GRASS,
+ .flingPower = 50,
+ },
+
+ [ITEM_ICE_MEMORY] =
+ {
+ .name = _("Ice Memory"),
+ .itemId = ITEM_ICE_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sIceMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ICE,
+ .flingPower = 50,
+ },
+
+ [ITEM_FIGHTING_MEMORY] =
+ {
+ .name = _("FightngMemory"),
+ .itemId = ITEM_FIGHTING_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sFightingMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FIGHTING,
+ .flingPower = 50,
+ },
+
+ [ITEM_POISON_MEMORY] =
+ {
+ .name = _("Poison Memory"),
+ .itemId = ITEM_POISON_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sPoisonMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_POISON,
+ .flingPower = 50,
+ },
+
+ [ITEM_GROUND_MEMORY] =
+ {
+ .name = _("Ground Memory"),
+ .itemId = ITEM_GROUND_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sGroundMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GROUND,
+ .flingPower = 50,
+ },
+
+ [ITEM_FLYING_MEMORY] =
+ {
+ .name = _("Flying Memory"),
+ .itemId = ITEM_FLYING_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sFlyingMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FLYING,
+ .flingPower = 50,
+ },
+
+ [ITEM_PSYCHIC_MEMORY] =
+ {
+ .name = _("PsychicMemory"),
+ .itemId = ITEM_PSYCHIC_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sPsychicMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_PSYCHIC,
+ .flingPower = 50,
+ },
+
+ [ITEM_BUG_MEMORY] =
+ {
+ .name = _("Bug Memory"),
+ .itemId = ITEM_BUG_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sBugMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_BUG,
+ .flingPower = 50,
+ },
+
+ [ITEM_ROCK_MEMORY] =
+ {
+ .name = _("Rock Memory"),
+ .itemId = ITEM_ROCK_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sRockMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ROCK,
+ .flingPower = 50,
+ },
+
+ [ITEM_GHOST_MEMORY] =
+ {
+ .name = _("Ghost Memory"),
+ .itemId = ITEM_GHOST_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sGhostMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GHOST,
+ .flingPower = 50,
+ },
+
+ [ITEM_DRAGON_MEMORY] =
+ {
+ .name = _("Dragon Memory"),
+ .itemId = ITEM_DRAGON_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sDragonMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_DRAGON,
+ .flingPower = 50,
+ },
+
+ [ITEM_DARK_MEMORY] =
+ {
+ .name = _("Dark Memory"),
+ .itemId = ITEM_DARK_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sDarkMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_DARK,
+ .flingPower = 50,
+ },
+
+ [ITEM_STEEL_MEMORY] =
+ {
+ .name = _("Steel Memory"),
+ .itemId = ITEM_STEEL_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sSteelMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_STEEL,
+ .flingPower = 50,
+ },
+
+ [ITEM_FAIRY_MEMORY] =
+ {
+ .name = _("Fairy Memory"),
+ .itemId = ITEM_FAIRY_MEMORY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_MEMORY,
+ .holdEffectParam = 0,
+ .description = sFairyMemoryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FAIRY,
+ .flingPower = 50,
+ },
+
+ [ITEM_RUSTED_SWORD] =
+ {
+ .name = _("RustedSword"),
+ .itemId = ITEM_RUSTED_SWORD,
+ .price = 0,
+ .description = sRustedSwordDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_RUSTED_SHIELD] =
+ {
+ .name = _("RustedShield"),
+ .itemId = ITEM_RUSTED_SHIELD,
+ .price = 0,
+ .description = sRustedShieldDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+// Colored Orbs
+
+ [ITEM_RED_ORB] =
+ {
+ .name = _("Red Orb"),
+ .itemId = ITEM_RED_ORB,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_PRIMAL_ORB,
+ .description = sRedOrbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_BLUE_ORB] =
+ {
+ .name = _("Blue Orb"),
+ .itemId = ITEM_BLUE_ORB,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_PRIMAL_ORB,
+ .description = sBlueOrbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+// Mega Stones
+
+ [ITEM_VENUSAURITE] =
+ {
+ .name = _("Venusaurite"),
+ .itemId = ITEM_VENUSAURITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sVenusauriteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_CHARIZARDITE_X] =
+ {
+ .name = _("CharizarditeX"),
+ .itemId = ITEM_CHARIZARDITE_X,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sCharizarditeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_CHARIZARDITE_Y] =
+ {
+ .name = _("CharizarditeY"),
+ .itemId = ITEM_CHARIZARDITE_Y,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sCharizarditeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_BLASTOISINITE] =
+ {
+ .name = _("Blastoisinite"),
+ .itemId = ITEM_BLASTOISINITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sBlastoisiniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_BEEDRILLITE] =
+ {
+ .name = _("Beedrillite"),
+ .itemId = ITEM_BEEDRILLITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sBeedrilliteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_PIDGEOTITE] =
+ {
+ .name = _("Pidgeotite"),
+ .itemId = ITEM_PIDGEOTITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sPidgeotiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_ALAKAZITE] =
+ {
+ .name = _("Alakazite"),
+ .itemId = ITEM_ALAKAZITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sAlakaziteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SLOWBRONITE] =
+ {
+ .name = _("Slowbronite"),
+ .itemId = ITEM_SLOWBRONITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sSlowbroniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_GENGARITE] =
+ {
+ .name = _("Gengarite"),
+ .itemId = ITEM_GENGARITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sGengariteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_KANGASKHANITE] =
+ {
+ .name = _("Kangaskhanite"),
+ .itemId = ITEM_KANGASKHANITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sKangaskhaniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_PINSIRITE] =
+ {
+ .name = _("Pinsirite"),
+ .itemId = ITEM_PINSIRITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sPinsiriteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_GYARADOSITE] =
+ {
+ .name = _("Gyaradosite"),
+ .itemId = ITEM_GYARADOSITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sGyaradositeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_AERODACTYLITE] =
+ {
+ .name = _("Aerodactylite"),
+ .itemId = ITEM_AERODACTYLITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sAerodactyliteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_MEWTWONITE_X] =
+ {
+ .name = _("Mewtwonite X"),
+ .itemId = ITEM_MEWTWONITE_X,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sMewtwoniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_MEWTWONITE_Y] =
+ {
+ .name = _("Mewtwonite Y"),
+ .itemId = ITEM_MEWTWONITE_Y,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sMewtwoniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_AMPHAROSITE] =
+ {
+ .name = _("Ampharosite"),
+ .itemId = ITEM_AMPHAROSITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sAmpharositeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_STEELIXITE] =
+ {
+ .name = _("Steelixite"),
+ .itemId = ITEM_STEELIXITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sSteelixiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SCIZORITE] =
+ {
+ .name = _("Scizorite"),
+ .itemId = ITEM_SCIZORITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sScizoriteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_HERACRONITE] =
+ {
+ .name = _("Heracronite"),
+ .itemId = ITEM_HERACRONITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sHeracroniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_HOUNDOOMINITE] =
+ {
+ .name = _("Houndoominite"),
+ .itemId = ITEM_HOUNDOOMINITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sHoundoominiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_TYRANITARITE] =
+ {
+ .name = _("Tyranitarite"),
+ .itemId = ITEM_TYRANITARITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sTyranitariteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SCEPTILITE] =
+ {
+ .name = _("Sceptilite"),
+ .itemId = ITEM_SCEPTILITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sSceptiliteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_BLAZIKENITE] =
+ {
+ .name = _("Blazikenite"),
+ .itemId = ITEM_BLAZIKENITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sBlazikeniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SWAMPERTITE] =
+ {
+ .name = _("Swampertite"),
+ .itemId = ITEM_SWAMPERTITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sSwampertiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_GARDEVOIRITE] =
+ {
+ .name = _("Gardevoirite"),
+ .itemId = ITEM_GARDEVOIRITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sGardevoiriteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SABLENITE] =
+ {
+ .name = _("Sablenite"),
+ .itemId = ITEM_SABLENITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sSableniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_MAWILITE] =
+ {
+ .name = _("Mawilite"),
+ .itemId = ITEM_MAWILITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sMawiliteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_AGGRONITE] =
+ {
+ .name = _("Aggronite"),
+ .itemId = ITEM_AGGRONITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sAggroniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_MEDICHAMITE] =
+ {
+ .name = _("Medichamite"),
+ .itemId = ITEM_MEDICHAMITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sMedichamiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_MANECTITE] =
+ {
+ .name = _("Manectite"),
+ .itemId = ITEM_MANECTITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sManectiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SHARPEDONITE] =
+ {
+ .name = _("Sharpedonite"),
+ .itemId = ITEM_SHARPEDONITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sSharpedoniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_CAMERUPTITE] =
+ {
+ .name = _("Cameruptite"),
+ .itemId = ITEM_CAMERUPTITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sCameruptiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_ALTARIANITE] =
+ {
+ .name = _("Altarianite"),
+ .itemId = ITEM_ALTARIANITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sAltarianiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_BANETTITE] =
+ {
+ .name = _("Banettite"),
+ .itemId = ITEM_BANETTITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sBanettiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_ABSOLITE] =
+ {
+ .name = _("Absolite"),
+ .itemId = ITEM_ABSOLITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sAbsoliteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_GLALITITE] =
+ {
+ .name = _("Glalitite"),
+ .itemId = ITEM_GLALITITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sGlalititeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SALAMENCITE] =
+ {
+ .name = _("Salamencite"),
+ .itemId = ITEM_SALAMENCITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sSalamenciteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_METAGROSSITE] =
+ {
+ .name = _("Metagrossite"),
+ .itemId = ITEM_METAGROSSITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sMetagrossiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_LATIASITE] =
+ {
+ .name = _("Latiasite"),
+ .itemId = ITEM_LATIASITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sLatiasiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_LATIOSITE] =
+ {
+ .name = _("Latiosite"),
+ .itemId = ITEM_LATIOSITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sLatiositeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_LOPUNNITE] =
+ {
+ .name = _("Lopunnite"),
+ .itemId = ITEM_LOPUNNITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sLopunniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_GARCHOMPITE] =
+ {
+ .name = _("Garchompite"),
+ .itemId = ITEM_GARCHOMPITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sGarchompiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_LUCARIONITE] =
+ {
+ .name = _("Lucarionite"),
+ .itemId = ITEM_LUCARIONITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sLucarioniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_ABOMASITE] =
+ {
+ .name = _("Abomasite"),
+ .itemId = ITEM_ABOMASITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sAbomasiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_GALLADITE] =
+ {
+ .name = _("Galladite"),
+ .itemId = ITEM_GALLADITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sGalladiteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_AUDINITE] =
+ {
+ .name = _("Audinite"),
+ .itemId = ITEM_AUDINITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sAudiniteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_DIANCITE] =
+ {
+ .name = _("Diancite"),
+ .itemId = ITEM_DIANCITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_MEGA_STONE,
+ .description = sDianciteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+// Gems
+
+ [ITEM_NORMAL_GEM] =
+ {
+ .name = _("Normal Gem"),
+ .itemId = ITEM_NORMAL_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sNormalGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_NORMAL,
+ },
+
+ [ITEM_FIRE_GEM] =
+ {
+ .name = _("Fire Gem"),
+ .itemId = ITEM_FIRE_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sFireGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FIRE,
+ },
+
+ [ITEM_WATER_GEM] =
+ {
+ .name = _("Water Gem"),
+ .itemId = ITEM_WATER_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sWaterGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_WATER,
+ },
+
+ [ITEM_ELECTRIC_GEM] =
+ {
+ .name = _("Electric Gem"),
+ .itemId = ITEM_ELECTRIC_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sElectricGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ELECTRIC,
+ },
+
+ [ITEM_GRASS_GEM] =
+ {
+ .name = _("Grass Gem"),
+ .itemId = ITEM_GRASS_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sGrassGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GRASS,
+ },
+
+ [ITEM_ICE_GEM] =
+ {
+ .name = _("Ice Gem"),
+ .itemId = ITEM_ICE_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sIceGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ICE,
+ },
+
+ [ITEM_FIGHTING_GEM] =
+ {
+ .name = _("Fighting Gem"),
+ .itemId = ITEM_FIGHTING_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sFightingGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FIGHTING,
+ },
+
+ [ITEM_POISON_GEM] =
+ {
+ .name = _("Poison Gem"),
+ .itemId = ITEM_POISON_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sPoisonGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_POISON,
+ },
+
+ [ITEM_GROUND_GEM] =
+ {
+ .name = _("Ground Gem"),
+ .itemId = ITEM_GROUND_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sGroundGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GROUND,
+ },
+
+ [ITEM_FLYING_GEM] =
+ {
+ .name = _("Flying Gem"),
+ .itemId = ITEM_FLYING_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sFlyingGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FLYING,
+ },
+
+ [ITEM_PSYCHIC_GEM] =
+ {
+ .name = _("Psychic Gem"),
+ .itemId = ITEM_PSYCHIC_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sPsychicGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_PSYCHIC,
+ },
+
+ [ITEM_BUG_GEM] =
+ {
+ .name = _("Bug Gem"),
+ .itemId = ITEM_BUG_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sBugGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_BUG,
+ },
+
+ [ITEM_ROCK_GEM] =
+ {
+ .name = _("Rock Gem"),
+ .itemId = ITEM_ROCK_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sRockGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ROCK,
+ },
+
+ [ITEM_GHOST_GEM] =
+ {
+ .name = _("Ghost Gem"),
+ .itemId = ITEM_GHOST_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sGhostGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GHOST,
+ },
+
+ [ITEM_DRAGON_GEM] =
+ {
+ .name = _("Dragon Gem"),
+ .itemId = ITEM_DRAGON_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sDragonGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_DRAGON,
+ },
+
+ [ITEM_DARK_GEM] =
+ {
+ .name = _("Dark Gem"),
+ .itemId = ITEM_DARK_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sDarkGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_DARK,
+ },
+
+ [ITEM_STEEL_GEM] =
+ {
+ .name = _("Steel Gem"),
+ .itemId = ITEM_STEEL_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sSteelGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_STEEL,
+ },
+
+ [ITEM_FAIRY_GEM] =
+ {
+ .name = _("Fairy Gem"),
+ .itemId = ITEM_FAIRY_GEM,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GEMS,
+ .holdEffectParam = 30,
+ .description = sFairyGemDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FAIRY,
+ },
+
+// Z-Crystals
+
+ [ITEM_NORMALIUM_Z] =
+ {
+ .name = _("Normalium Z"),
+ .itemId = ITEM_NORMALIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sNormaliumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_NORMAL
+ },
+
+ [ITEM_FIRIUM_Z] =
+ {
+ .name = _("Firium Z"),
+ .itemId = ITEM_FIRIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sFiriumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FIRE
+ },
+
+ [ITEM_WATERIUM_Z] =
+ {
+ .name = _("Waterium Z"),
+ .itemId = ITEM_WATERIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sWateriumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_WATER
+ },
+
+ [ITEM_ELECTRIUM_Z] =
+ {
+ .name = _("Electrium Z"),
+ .itemId = ITEM_ELECTRIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sElectriumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ELECTRIC
+ },
+
+ [ITEM_GRASSIUM_Z] =
+ {
+ .name = _("Grassium Z"),
+ .itemId = ITEM_GRASSIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sGrassiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GRASS
+ },
+
+ [ITEM_ICIUM_Z] =
+ {
+ .name = _("Icium Z"),
+ .itemId = ITEM_ICIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sIciumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ICE
+ },
+
+ [ITEM_FIGHTINIUM_Z] =
+ {
+ .name = _("Fightinium Z"),
+ .itemId = ITEM_FIGHTINIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sFightiniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FIGHTING
+ },
+
+ [ITEM_POISONIUM_Z] =
+ {
+ .name = _("Poisonium Z"),
+ .itemId = ITEM_POISONIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sPoisoniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_POISON
+ },
+
+ [ITEM_GROUNDIUM_Z] =
+ {
+ .name = _("Groundium Z"),
+ .itemId = ITEM_GROUNDIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sGroundiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GROUND
+ },
+
+ [ITEM_FLYINIUM_Z] =
+ {
+ .name = _("Flyinium Z"),
+ .itemId = ITEM_FLYINIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sFlyiniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FLYING
+ },
+
+ [ITEM_PSYCHIUM_Z] =
+ {
+ .name = _("Psychium Z"),
+ .itemId = ITEM_PSYCHIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sPsychiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_PSYCHIC
+ },
+
+ [ITEM_BUGINIUM_Z] =
+ {
+ .name = _("Buginium Z"),
+ .itemId = ITEM_BUGINIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sBuginiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_BUG
+ },
+
+ [ITEM_ROCKIUM_Z] =
+ {
+ .name = _("Rockium Z"),
+ .itemId = ITEM_ROCKIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sRockiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_ROCK
+ },
+
+ [ITEM_GHOSTIUM_Z] =
+ {
+ .name = _("Ghostium Z"),
+ .itemId = ITEM_GHOSTIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sGhostiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_GHOST
+ },
+
+ [ITEM_DRAGONIUM_Z] =
+ {
+ .name = _("Dragonium Z"),
+ .itemId = ITEM_DRAGONIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sDragoniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_DRAGON
+ },
+
+ [ITEM_DARKINIUM_Z] =
+ {
+ .name = _("Darkinium Z"),
+ .itemId = ITEM_DARKINIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sDarkiniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_DARK
+ },
+
+ [ITEM_STEELIUM_Z] =
+ {
+ .name = _("Steelium Z"),
+ .itemId = ITEM_STEELIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sSteeliumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_STEEL
+ },
+
+ [ITEM_FAIRIUM_Z] =
+ {
+ .name = _("Fairium Z"),
+ .itemId = ITEM_FAIRIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sFairiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = TYPE_FAIRY
+ },
+
+ [ITEM_PIKANIUM_Z] =
+ {
+ .name = _("Pikanium Z"),
+ .itemId = ITEM_PIKANIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sPikaniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_EEVIUM_Z] =
+ {
+ .name = _("Eevium Z"),
+ .itemId = ITEM_EEVIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sEeviumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_SNORLIUM_Z] =
+ {
+ .name = _("Snorlium Z"),
+ .itemId = ITEM_SNORLIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sSnorliumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_MEWNIUM_Z] =
+ {
+ .name = _("Mewnium Z"),
+ .itemId = ITEM_MEWNIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sMewniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_DECIDIUM_Z] =
+ {
+ .name = _("Decidium Z"),
+ .itemId = ITEM_DECIDIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sDecidiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_INCINIUM_Z] =
+ {
+ .name = _("Incinium Z"),
+ .itemId = ITEM_INCINIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sInciniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_PRIMARIUM_Z] =
+ {
+ .name = _("Primarium Z"),
+ .itemId = ITEM_PRIMARIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sPrimariumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_LYCANIUM_Z] =
+ {
+ .name = _("Lycanium Z"),
+ .itemId = ITEM_LYCANIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sLycaniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_MIMIKIUM_Z] =
+ {
+ .name = _("Mimikium Z"),
+ .itemId = ITEM_MIMIKIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sMimikiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_KOMMONIUM_Z] =
+ {
+ .name = _("Kommonium Z"),
+ .itemId = ITEM_KOMMONIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sKommoniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_TAPUNIUM_Z] =
+ {
+ .name = _("Tapunium Z"),
+ .itemId = ITEM_TAPUNIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sTapuniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 //signature z move
+ },
+
+ [ITEM_SOLGANIUM_Z] =
+ {
+ .name = _("Solganium Z"),
+ .itemId = ITEM_SOLGANIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sSolganiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_LUNALIUM_Z] =
+ {
+ .name = _("Lunalium Z"),
+ .itemId = ITEM_LUNALIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sLunaliumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_MARSHADIUM_Z] =
+ {
+ .name = _("Marshadium Z"),
+ .itemId = ITEM_MARSHADIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sMarshadiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_ALORAICHIUM_Z] =
+ {
+ .name = _("Aloraichium Z"),
+ .itemId = ITEM_ALORAICHIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sAloraichiumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_PIKASHUNIUM_Z] =
+ {
+ .name = _("Pikashunium Z"),
+ .itemId = ITEM_PIKASHUNIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sPikashuniumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 // signature z move
+ },
+
+ [ITEM_ULTRANECROZIUM_Z] =
+ {
+ .name = _("U-Necrozium Z"),
+ .itemId = ITEM_ULTRANECROZIUM_Z,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_Z_CRYSTAL,
+ .description = sUltranecroziumZDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 255 //signature z move
+ },
+
+// Species-specific Held Items
+
+ [ITEM_LIGHT_BALL] =
+ {
+ .name = _("Light Ball"),
+ .itemId = ITEM_LIGHT_BALL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_LIGHT_BALL,
+ .description = sLightBallDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_LEEK] =
+ {
+ .name = _("Leek"),
+ .itemId = ITEM_LEEK,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_LEEK,
+ .description = sLeekDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
+ [ITEM_THICK_CLUB] =
+ {
+ .name = _("Thick Club"),
+ .itemId = ITEM_THICK_CLUB,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_THICK_CLUB,
+ .description = sThickClubDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 90,
+ },
+
+ [ITEM_LUCKY_PUNCH] =
+ {
+ .name = _("Lucky Punch"),
+ .itemId = ITEM_LUCKY_PUNCH,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_LUCKY_PUNCH,
+ .description = sLuckyPunchDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 40,
+ },
+
+ [ITEM_METAL_POWDER] =
+ {
+ .name = _("Metal Powder"),
+ .itemId = ITEM_METAL_POWDER,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_METAL_POWDER,
+ .description = sMetalPowderDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_QUICK_POWDER] =
+ {
+ .name = _("Quick Powder"),
+ .itemId = ITEM_QUICK_POWDER,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_QUICK_POWDER,
+ .description = sQuickPowderDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_DEEP_SEA_SCALE] =
+ {
+ .name = _("DeepSeaScale"),
+ .itemId = ITEM_DEEP_SEA_SCALE,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_DEEP_SEA_SCALE,
+ .description = sDeepSeaScaleDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_DEEP_SEA_TOOTH] =
+ {
+ .name = _("DeepSeaTooth"),
+ .itemId = ITEM_DEEP_SEA_TOOTH,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_DEEP_SEA_TOOTH,
+ .description = sDeepSeaToothDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 90,
+ },
+
+ [ITEM_SOUL_DEW] =
+ {
+ .name = _("Soul Dew"),
+ .itemId = ITEM_SOUL_DEW,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_SOUL_DEW,
+ #if B_SOUL_DEW_BOOST >= GEN_7
+ .holdEffectParam = 20,
+ #else
+ .holdEffectParam = 50,
+ #endif
+ .description = sSoulDewDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_ADAMANT_ORB] =
+ {
+ .name = _("Adamant Orb"),
+ .itemId = ITEM_ADAMANT_ORB,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_ADAMANT_ORB,
+ .holdEffectParam = 20,
+ .description = sAdamantOrbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
+ [ITEM_LUSTROUS_ORB] =
+ {
+ .name = _("Lustrous Orb"),
+ .itemId = ITEM_LUSTROUS_ORB,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_LUSTROUS_ORB,
+ .holdEffectParam = 20,
+ .description = sLustrousOrbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
+ [ITEM_GRISEOUS_ORB] =
+ {
+ .name = _("Griseous Orb"),
+ .itemId = ITEM_GRISEOUS_ORB,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_GRISEOUS_ORB,
+ .holdEffectParam = 20,
+ .description = sGriseousOrbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
+// Incenses
+
+ [ITEM_SEA_INCENSE] =
+ {
+ .name = _("Sea Incense"),
+ .itemId = ITEM_SEA_INCENSE,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_WATER_POWER,
+ .holdEffectParam = 20,
+ .description = sSeaIncenseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_LAX_INCENSE] =
+ {
+ .name = _("Lax Incense"),
+ .itemId = ITEM_LAX_INCENSE,
+ .price = 5000,
+ .holdEffect = HOLD_EFFECT_EVASION_UP,
+ .holdEffectParam = 10,
+ .description = sLaxIncenseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_ODD_INCENSE] =
+ {
+ .name = _("Odd Incense"),
+ .itemId = ITEM_ODD_INCENSE,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_PSYCHIC_POWER,
+ .holdEffectParam = 20,
+ .description = sOddIncenseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_ROCK_INCENSE] =
+ {
+ .name = _("Rock Incense"),
+ .itemId = ITEM_ROCK_INCENSE,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_ROCK_POWER,
+ .holdEffectParam = 20,
+ .description = sRockIncenseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_FULL_INCENSE] =
+ {
+ .name = _("Full Incense"),
+ .itemId = ITEM_FULL_INCENSE,
+ .price = 5000,
+ .holdEffect = HOLD_EFFECT_LAGGING_TAIL,
+ .holdEffectParam = 5,
+ .description = sFullIncenseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_WAVE_INCENSE] =
+ {
+ .name = _("Wave Incense"),
+ .itemId = ITEM_WAVE_INCENSE,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_WATER_POWER,
+ .holdEffectParam = 20,
+ .description = sWaveIncenseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_ROSE_INCENSE] =
+ {
+ .name = _("Rose Incense"),
+ .itemId = ITEM_ROSE_INCENSE,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_GRASS_POWER,
+ .holdEffectParam = 20,
+ .description = sRoseIncenseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_LUCK_INCENSE] =
+ {
+ .name = _("Luck Incense"),
+ .itemId = ITEM_LUCK_INCENSE,
+ .price = 11000,
+ .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE,
+ .holdEffectParam = 10,
+ .description = sLuckIncenseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_PURE_INCENSE] =
+ {
+ .name = _("Pure Incense"),
+ .itemId = ITEM_PURE_INCENSE,
+ .price = 6000,
+ .holdEffect = HOLD_EFFECT_REPEL,
+ .description = sPureIncenseDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+// Contest Scarves
+
+ [ITEM_RED_SCARF] =
+ {
+ .name = _("Red Scarf"),
+ .itemId = ITEM_RED_SCARF,
+ .price = 100,
+ .description = sRedScarfDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_BLUE_SCARF] =
+ {
+ .name = _("Blue Scarf"),
+ .itemId = ITEM_BLUE_SCARF,
+ .price = 100,
+ .description = sBlueScarfDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_PINK_SCARF] =
+ {
+ .name = _("Pink Scarf"),
+ .itemId = ITEM_PINK_SCARF,
+ .price = 100,
+ .description = sPinkScarfDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_GREEN_SCARF] =
+ {
+ .name = _("Green Scarf"),
+ .itemId = ITEM_GREEN_SCARF,
+ .price = 100,
+ .description = sGreenScarfDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_YELLOW_SCARF] =
+ {
+ .name = _("Yellow Scarf"),
+ .itemId = ITEM_YELLOW_SCARF,
+ .price = 100,
+ .description = sYellowScarfDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+// EV Gain Modifiers
+
+ [ITEM_MACHO_BRACE] =
+ {
+ .name = _("Macho Brace"),
+ .itemId = ITEM_MACHO_BRACE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_MACHO_BRACE,
+ .description = sMachoBraceDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
+ [ITEM_POWER_WEIGHT] =
+ {
+ .name = _("Power Weight"),
+ .itemId = ITEM_POWER_WEIGHT,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_POWER_ITEM,
+ .holdEffectParam = 8,
+ .description = sPowerWeightDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = STAT_HP,
+ .flingPower = 70,
+ },
+
+ [ITEM_POWER_BRACER] =
+ {
+ .name = _("Power Bracer"),
+ .itemId = ITEM_POWER_BRACER,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_POWER_ITEM,
+ .holdEffectParam = 8,
+ .description = sPowerBracerDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = STAT_ATK,
+ .flingPower = 70,
+ },
+
+ [ITEM_POWER_BELT] =
+ {
+ .name = _("Power Belt"),
+ .itemId = ITEM_POWER_BELT,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_POWER_ITEM,
+ .holdEffectParam = 8,
+ .description = sPowerBeltDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = STAT_DEF,
+ .flingPower = 70,
+ },
+
+ [ITEM_POWER_LENS] =
+ {
+ .name = _("Power Lens"),
+ .itemId = ITEM_POWER_LENS,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_POWER_ITEM,
+ .holdEffectParam = 8,
+ .description = sPowerLensDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = STAT_SPATK,
+ .flingPower = 70,
+ },
+
+ [ITEM_POWER_BAND] =
+ {
+ .name = _("Power Band"),
+ .itemId = ITEM_POWER_BAND,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_POWER_ITEM,
+ .holdEffectParam = 8,
+ .description = sPowerBandDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = STAT_SPDEF,
+ .flingPower = 70,
+ },
+
+ [ITEM_POWER_ANKLET] =
+ {
+ .name = _("Power Anklet"),
+ .itemId = ITEM_POWER_ANKLET,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_POWER_ITEM,
+ .holdEffectParam = 8,
+ .description = sPowerAnkletDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = STAT_SPEED,
+ .flingPower = 70,
+ },
+
+// Type-boosting Held Items
+
+ [ITEM_SILK_SCARF] =
+ {
+ .name = _("Silk Scarf"),
+ .itemId = ITEM_SILK_SCARF,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NORMAL_POWER,
+ .holdEffectParam = 20,
+ .description = sSilkScarfDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_CHARCOAL] =
+ {
+ .name = _("Charcoal"),
+ .itemId = ITEM_CHARCOAL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_FIRE_POWER,
+ .holdEffectParam = 20,
+ .description = sCharcoalDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_MYSTIC_WATER] =
+ {
+ .name = _("Mystic Water"),
+ .itemId = ITEM_MYSTIC_WATER,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_WATER_POWER,
+ .holdEffectParam = 20,
+ .description = sMysticWaterDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_MAGNET] =
+ {
+ .name = _("Magnet"),
+ .itemId = ITEM_MAGNET,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_ELECTRIC_POWER,
+ .holdEffectParam = 20,
+ .description = sMagnetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_MIRACLE_SEED] =
+ {
+ .name = _("Miracle Seed"),
+ .itemId = ITEM_MIRACLE_SEED,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_GRASS_POWER,
+ .holdEffectParam = 20,
+ .description = sMiracleSeedDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_NEVER_MELT_ICE] =
+ {
+ .name = _("Never-MeltIce"),
+ .itemId = ITEM_NEVER_MELT_ICE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_ICE_POWER,
+ .holdEffectParam = 20,
+ .description = sNeverMeltIceDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_BLACK_BELT] =
+ {
+ .name = _("Black Belt"),
+ .itemId = ITEM_BLACK_BELT,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_FIGHTING_POWER,
+ .holdEffectParam = 20,
+ .description = sBlackBeltDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_POISON_BARB] =
+ {
+ .name = _("Poison Barb"),
+ .itemId = ITEM_POISON_BARB,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_POISON_POWER,
+ .holdEffectParam = 20,
+ .description = sPoisonBarbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 70,
+ },
+
+ [ITEM_SOFT_SAND] =
+ {
+ .name = _("Soft Sand"),
+ .itemId = ITEM_SOFT_SAND,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_GROUND_POWER,
+ .holdEffectParam = 20,
+ .description = sSoftSandDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_SHARP_BEAK] =
+ {
+ .name = _("Sharp Beak"),
+ .itemId = ITEM_SHARP_BEAK,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_FLYING_POWER,
+ .holdEffectParam = 20,
+ .description = sSharpBeakDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 50,
+ },
+
+ [ITEM_TWISTED_SPOON] =
+ {
+ .name = _("Twisted Spoon"),
+ .itemId = ITEM_TWISTED_SPOON,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_PSYCHIC_POWER,
+ .holdEffectParam = 20,
+ .description = sTwistedSpoonDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_SILVER_POWDER] =
+ {
+ .name = _("Silver Powder"),
+ .itemId = ITEM_SILVER_POWDER,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_BUG_POWER,
+ .holdEffectParam = 20,
+ .description = sSilverPowderDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_HARD_STONE] =
+ {
+ .name = _("Hard Stone"),
+ .itemId = ITEM_HARD_STONE,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_ROCK_POWER,
+ .holdEffectParam = 20,
+ .description = sHardStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_SPELL_TAG] =
+ {
+ .name = _("Spell Tag"),
+ .itemId = ITEM_SPELL_TAG,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_GHOST_POWER,
+ .holdEffectParam = 20,
+ .description = sSpellTagDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_DRAGON_FANG] =
+ {
+ .name = _("Dragon Fang"),
+ .itemId = ITEM_DRAGON_FANG,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_DRAGON_POWER,
+ .holdEffectParam = 20,
+ .description = sDragonFangDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 70,
+ },
+
+ [ITEM_BLACK_GLASSES] =
+ {
+ .name = _("Black Glasses"),
+ .itemId = ITEM_BLACK_GLASSES,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_DARK_POWER,
+ .holdEffectParam = 20,
+ .description = sBlackGlassesDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_METAL_COAT] =
+ {
+ .name = _("Metal Coat"),
+ .itemId = ITEM_METAL_COAT,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_STEEL_POWER,
+ .holdEffectParam = 20,
+ .description = sMetalCoatDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+// Choice Items
+
+ [ITEM_CHOICE_BAND] =
+ {
+ .name = _("Choice Band"),
+ .itemId = ITEM_CHOICE_BAND,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_CHOICE_BAND,
+ .description = sChoiceBandDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_CHOICE_SPECS] =
+ {
+ .name = _("Choice Specs"),
+ .itemId = ITEM_CHOICE_SPECS,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_CHOICE_SPECS,
+ .description = sChoiceSpecsDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_CHOICE_SCARF] =
+ {
+ .name = _("Choice Scarf"),
+ .itemId = ITEM_CHOICE_SCARF,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_CHOICE_SCARF,
+ .description = sChoiceScarfDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+// Status Orbs
+
+ [ITEM_FLAME_ORB] =
+ {
+ .name = _("Flame Orb"),
+ .itemId = ITEM_FLAME_ORB,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_FLAME_ORB,
+ .description = sFlameOrbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_TOXIC_ORB] =
+ {
+ .name = _("Toxic Orb"),
+ .itemId = ITEM_TOXIC_ORB,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_TOXIC_ORB,
+ .description = sToxicOrbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+// Weather Rocks
+
+ [ITEM_DAMP_ROCK] =
+ {
+ .name = _("Damp Rock"),
+ .itemId = ITEM_DAMP_ROCK,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_DAMP_ROCK,
+ .description = sDampRockDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
+ [ITEM_HEAT_ROCK] =
+ {
+ .name = _("Heat Rock"),
+ .itemId = ITEM_HEAT_ROCK,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_HEAT_ROCK,
+ .description = sHeatRockDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
+ [ITEM_SMOOTH_ROCK] =
+ {
+ .name = _("Smooth Rock"),
+ .itemId = ITEM_SMOOTH_ROCK,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SMOOTH_ROCK,
+ .description = sSmoothRockDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_ICY_ROCK] =
+ {
+ .name = _("Icy Rock"),
+ .itemId = ITEM_ICY_ROCK,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_ICY_ROCK,
+ .description = sIcyRockDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 40,
+ },
+
+// Terrain Seeds
+
+ [ITEM_ELECTRIC_SEED] =
+ {
+ .name = _("Electric Seed"),
+ .itemId = ITEM_ELECTRIC_SEED,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SEEDS,
+ .holdEffectParam = HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN,
+ .description = sElectricSeedDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_PSYCHIC_SEED] =
+ {
+ .name = _("Psychic Seed"),
+ .itemId = ITEM_PSYCHIC_SEED,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SEEDS,
+ .holdEffectParam = HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN,
+ .description = sPsychicSeedDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_MISTY_SEED] =
+ {
+ .name = _("Misty Seed"),
+ .itemId = ITEM_MISTY_SEED,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SEEDS,
+ .holdEffectParam = HOLD_EFFECT_PARAM_MISTY_TERRAIN,
+ .description = sMistySeedDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_GRASSY_SEED] =
+ {
+ .name = _("Grassy Seed"),
+ .itemId = ITEM_GRASSY_SEED,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SEEDS,
+ .holdEffectParam = HOLD_EFFECT_PARAM_GRASSY_TERRAIN,
+ .description = sGrassySeedDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+// Type-activated Stat Modifiers
+
+ [ITEM_ABSORB_BULB] =
+ {
+ .name = _("Absorb Bulb"),
+ .itemId = ITEM_ABSORB_BULB,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_ABSORB_BULB,
+ .holdEffectParam = 0,
+ .description = sAbsorbBulbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_CELL_BATTERY] =
+ {
+ .name = _("Cell Battery"),
+ .itemId = ITEM_CELL_BATTERY,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_CELL_BATTERY,
+ .holdEffectParam = 0,
+ .description = sCellBatteryDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_LUMINOUS_MOSS] =
+ {
+ .name = _("Luminous Moss"),
+ .itemId = ITEM_LUMINOUS_MOSS,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_LUMINOUS_MOSS,
+ .holdEffectParam = 0,
+ .description = sLuminousMossDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_SNOWBALL] =
+ {
+ .name = _("Snowball"),
+ .itemId = ITEM_SNOWBALL,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SNOWBALL,
+ .holdEffectParam = 0,
+ .description = sSnowballDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+// Misc. Held Items
+
+ [ITEM_BRIGHT_POWDER] =
+ {
+ .name = _("Bright Powder"),
+ .itemId = ITEM_BRIGHT_POWDER,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_EVASION_UP,
+ .holdEffectParam = 10,
+ .description = sBrightPowderDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_WHITE_HERB] =
+ {
+ .name = _("White Herb"),
+ .itemId = ITEM_WHITE_HERB,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_RESTORE_STATS,
+ .description = sWhiteHerbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_EXP_SHARE] =
+ {
+ .name = _("Exp. Share"),
+ .itemId = ITEM_EXP_SHARE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_EXP_SHARE,
+ .description = sExpShareDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_QUICK_CLAW] =
+ {
+ .name = _("Quick Claw"),
+ .itemId = ITEM_QUICK_CLAW,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_QUICK_CLAW,
+ .holdEffectParam = 20,
+ .description = sQuickClawDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SOOTHE_BELL] =
+ {
+ .name = _("Soothe Bell"),
+ .itemId = ITEM_SOOTHE_BELL,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_FRIENDSHIP_UP,
+ .description = sSootheBellDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_MENTAL_HERB] =
+ {
+ .name = _("Mental Herb"),
+ .itemId = ITEM_MENTAL_HERB,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_MENTAL_HERB,
+ .description = sMentalHerbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_KINGS_ROCK] =
+ {
+ .name = _("King's Rock"),
+ .itemId = ITEM_KINGS_ROCK,
+ .price = 5000,
+ .holdEffect = HOLD_EFFECT_FLINCH,
+ .holdEffectParam = 10,
+ .description = sKingsRockDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_AMULET_COIN] =
+ {
+ .name = _("Amulet Coin"),
+ .itemId = ITEM_AMULET_COIN,
+ .price = 10000,
+ .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE,
+ .holdEffectParam = 10,
+ .description = sAmuletCoinDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_CLEANSE_TAG] =
+ {
+ .name = _("Cleanse Tag"),
+ .itemId = ITEM_CLEANSE_TAG,
+ .price = 5000,
+ .holdEffect = HOLD_EFFECT_REPEL,
+ .description = sCleanseTagDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_SMOKE_BALL] =
+ {
+ .name = _("Smoke Ball"),
+ .itemId = ITEM_SMOKE_BALL,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_CAN_ALWAYS_RUN,
+ .description = sSmokeBallDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_FOCUS_BAND] =
+ {
+ .name = _("Focus Band"),
+ .itemId = ITEM_FOCUS_BAND,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_FOCUS_BAND,
+ .holdEffectParam = 10,
+ .description = sFocusBandDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_LUCKY_EGG] =
+ {
+ .name = _("Lucky Egg"),
+ .itemId = ITEM_LUCKY_EGG,
+ .price = 10000,
+ .holdEffect = HOLD_EFFECT_LUCKY_EGG,
+ .description = sLuckyEggDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_SCOPE_LENS] =
+ {
+ .name = _("Scope Lens"),
+ .itemId = ITEM_SCOPE_LENS,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SCOPE_LENS,
+ .description = sScopeLensDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_LEFTOVERS] =
+ {
+ .name = _("Leftovers"),
+ .itemId = ITEM_LEFTOVERS,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_LEFTOVERS,
+ .holdEffectParam = 10,
+ .description = sLeftoversDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_SHELL_BELL] =
+ {
+ .name = _("Shell Bell"),
+ .itemId = ITEM_SHELL_BELL,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SHELL_BELL,
+ .holdEffectParam = 8,
+ .description = sShellBellDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_WIDE_LENS] =
+ {
+ .name = _("Wide Lens"),
+ .itemId = ITEM_WIDE_LENS,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_WIDE_LENS,
+ .holdEffectParam = 10,
+ .description = sWideLensDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_MUSCLE_BAND] =
+ {
+ .name = _("Muscle Band"),
+ .itemId = ITEM_MUSCLE_BAND,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_MUSCLE_BAND,
+ .holdEffectParam = 10,
+ .description = sMuscleBandDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_WISE_GLASSES] =
+ {
+ .name = _("Wise Glasses"),
+ .itemId = ITEM_WISE_GLASSES,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_WISE_GLASSES,
+ .holdEffectParam = 10,
+ .description = sWiseGlassesDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_EXPERT_BELT] =
+ {
+ .name = _("Expert Belt"),
+ .itemId = ITEM_EXPERT_BELT,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_EXPERT_BELT,
+ .holdEffectParam = 20,
+ .description = sExpertBeltDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_LIGHT_CLAY] =
+ {
+ .name = _("Light Clay"),
+ .itemId = ITEM_LIGHT_CLAY,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_LIGHT_CLAY,
+ .description = sLightClayDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_LIFE_ORB] =
+ {
+ .name = _("Life Orb"),
+ .itemId = ITEM_LIFE_ORB,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_LIFE_ORB,
+ .description = sLifeOrbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_POWER_HERB] =
+ {
+ .name = _("Power Herb"),
+ .itemId = ITEM_POWER_HERB,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_POWER_HERB,
+ .description = sPowerHerbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_FOCUS_SASH] =
+ {
+ .name = _("Focus Sash"),
+ .itemId = ITEM_FOCUS_SASH,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_FOCUS_SASH,
+ .description = sFocusSashDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_ZOOM_LENS] =
+ {
+ .name = _("Zoom Lens"),
+ .itemId = ITEM_ZOOM_LENS,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_ZOOM_LENS,
+ .holdEffectParam = 20,
+ .description = sZoomLensDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_METRONOME] =
+ {
+ .name = _("Metronome"),
+ .itemId = ITEM_METRONOME,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_METRONOME,
+ .holdEffectParam = 20,
+ .description = sMetronomeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_IRON_BALL] =
+ {
+ .name = _("Iron Ball"),
+ .itemId = ITEM_IRON_BALL,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_IRON_BALL,
+ .description = sIronBallDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 130,
+ },
+
+ [ITEM_LAGGING_TAIL] =
+ {
+ .name = _("Lagging Tail"),
+ .itemId = ITEM_LAGGING_TAIL,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_LAGGING_TAIL,
+ .description = sLaggingTailDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_DESTINY_KNOT] =
+ {
+ .name = _("Destiny Knot"),
+ .itemId = ITEM_DESTINY_KNOT,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_DESTINY_KNOT,
+ .description = sDestinyKnotDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_BLACK_SLUDGE] =
+ {
+ .name = _("Black Sludge"),
+ .itemId = ITEM_BLACK_SLUDGE,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_BLACK_SLUDGE,
+ .description = sBlackSludgeDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_GRIP_CLAW] =
+ {
+ .name = _("Grip Claw"),
+ .itemId = ITEM_GRIP_CLAW,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_GRIP_CLAW,
+ .description = sGripClawDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 90,
+ },
+
+ [ITEM_STICKY_BARB] =
+ {
+ .name = _("Sticky Barb"),
+ .itemId = ITEM_STICKY_BARB,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_STICKY_BARB,
+ .description = sStickyBarbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SHED_SHELL] =
+ {
+ .name = _("Shed Shell"),
+ .itemId = ITEM_SHED_SHELL,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SHED_SHELL,
+ .description = sShedShellDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_BIG_ROOT] =
+ {
+ .name = _("Big Root"),
+ .itemId = ITEM_BIG_ROOT,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_BIG_ROOT,
+ .holdEffectParam = 30,
+ .description = sBigRootDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_RAZOR_CLAW] =
+ {
+ .name = _("Razor Claw"),
+ .itemId = ITEM_RAZOR_CLAW,
+ .price = 5000,
+ .holdEffect = HOLD_EFFECT_SCOPE_LENS,
+ .description = sRazorClawDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_RAZOR_FANG] =
+ {
+ .name = _("Razor Fang"),
+ .itemId = ITEM_RAZOR_FANG,
+ .price = 5000,
+ .holdEffect = HOLD_EFFECT_FLINCH,
+ .holdEffectParam = 10,
+ .description = sRazorFangDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_EVIOLITE] =
+ {
+ .name = _("Eviolite"),
+ .itemId = ITEM_EVIOLITE,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_EVIOLITE,
+ .holdEffectParam = 50,
+ .description = sEvioliteDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 40,
+ },
+
+ [ITEM_FLOAT_STONE] =
+ {
+ .name = _("Float Stone"),
+ .itemId = ITEM_FLOAT_STONE,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_FLOAT_STONE,
+ .description = sFloatStoneDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_ROCKY_HELMET] =
+ {
+ .name = _("Rocky Helmet"),
+ .itemId = ITEM_ROCKY_HELMET,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_ROCKY_HELMET,
+ .holdEffectParam = 0,
+ .description = sRockyHelmetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
+ [ITEM_AIR_BALLOON] =
+ {
+ .name = _("Air Balloon"),
+ .itemId = ITEM_AIR_BALLOON,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_AIR_BALLOON,
+ .holdEffectParam = 0,
+ .description = sAirBalloonDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_RED_CARD] =
+ {
+ .name = _("Red Card"),
+ .itemId = ITEM_RED_CARD,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_RED_CARD,
+ .holdEffectParam = 0,
+ .description = sRedCardDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_RING_TARGET] =
+ {
+ .name = _("Ring Target"),
+ .itemId = ITEM_RING_TARGET,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_RING_TARGET,
+ .holdEffectParam = 0,
+ .description = sRingTargetDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_BINDING_BAND] =
+ {
+ .name = _("Binding Band"),
+ .itemId = ITEM_BINDING_BAND,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_BINDING_BAND,
+ .description = sBindingBandDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_EJECT_BUTTON] =
+ {
+ .name = _("Eject Button"),
+ .itemId = ITEM_EJECT_BUTTON,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_EJECT_BUTTON,
+ .holdEffectParam = 0,
+ .description = sEjectButtonDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_WEAKNESS_POLICY] =
+ {
+ .name = _("WeaknssPolicy"),
+ .itemId = ITEM_WEAKNESS_POLICY,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_WEAKNESS_POLICY,
+ .holdEffectParam = 0,
+ .description = sWeaknessPolicyDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_ASSAULT_VEST] =
+ {
+ .name = _("Assault Vest"),
+ .itemId = ITEM_ASSAULT_VEST,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_ASSAULT_VEST,
+ .holdEffectParam = 50,
+ .description = sAssaultVestDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_SAFETY_GOGGLES] =
+ {
+ .name = _("SafetyGoggles"),
+ .itemId = ITEM_SAFETY_GOGGLES,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_SAFETY_GOGGLES,
+ .description = sSafetyGogglesDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_ADRENALINE_ORB] =
+ {
+ .name = _("AdrenalineOrb"),
+ .itemId = ITEM_ADRENALINE_ORB,
+ .price = 300,
+ .holdEffect = HOLD_EFFECT_ADRENALINE_ORB,
+ .description = sAdrenalineOrbDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_TERRAIN_EXTENDER] =
+ {
+ .name = _("TerainExtendr"),
+ .itemId = ITEM_TERRAIN_EXTENDER,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_TERRAIN_EXTENDER,
+ .description = sTerrainExtenderDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
+ [ITEM_PROTECTIVE_PADS] =
+ {
+ .name = _("ProtectvePads"),
+ .itemId = ITEM_PROTECTIVE_PADS,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_PROTECTIVE_PADS,
+ .description = sProtectivePadsDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_THROAT_SPRAY] =
+ {
+ .name = _("Throat Spray"),
+ .itemId = ITEM_THROAT_SPRAY,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_THROAT_SPRAY,
+ .description = sThroatSprayDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 30,
+ },
+
+ [ITEM_EJECT_PACK] =
+ {
+ .name = _("Eject Pack"),
+ .itemId = ITEM_EJECT_PACK,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_EJECT_PACK,
+ .description = sEjectPackDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 50,
+ },
+
+ [ITEM_HEAVY_DUTY_BOOTS] =
+ {
+ .name = _("Heavy-DtyBts"),
+ .itemId = ITEM_HEAVY_DUTY_BOOTS,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_HEAVY_DUTY_BOOTS,
+ .description = sHeavyDutyBootsDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_BLUNDER_POLICY] =
+ {
+ .name = _("BlundrPolicy"),
+ .itemId = ITEM_BLUNDER_POLICY,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_BLUNDER_POLICY,
+ .description = sBlunderPolicyDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 80,
+ },
+
+ [ITEM_ROOM_SERVICE] =
+ {
+ .name = _("Room Service"),
+ .itemId = ITEM_ROOM_SERVICE,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_ROOM_SERVICE,
+ .description = sRoomServiceDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 100,
+ },
+
+ [ITEM_UTILITY_UMBRELLA] =
+ {
+ .name = _("UtltyUmbrlla"),
+ .itemId = ITEM_UTILITY_UMBRELLA,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_UTILITY_UMBRELLA,
+ .description = sUtilityUmbrellaDesc,
+ .pocket = POCKET_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 60,
+ },
+
// Berries
[ITEM_CHERI_BERRY] =
{
- .name = _("CHERI BERRY"),
+ .name = _("Cheri Berry"),
.itemId = ITEM_CHERI_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CURE_PAR,
@@ -1628,11 +6871,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 10,
},
[ITEM_CHESTO_BERRY] =
{
- .name = _("CHESTO BERRY"),
+ .name = _("Chesto Berry"),
.itemId = ITEM_CHESTO_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CURE_SLP,
@@ -1642,11 +6886,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 10,
},
[ITEM_PECHA_BERRY] =
{
- .name = _("PECHA BERRY"),
+ .name = _("Pecha Berry"),
.itemId = ITEM_PECHA_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CURE_PSN,
@@ -1656,11 +6901,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 10,
},
[ITEM_RAWST_BERRY] =
{
- .name = _("RAWST BERRY"),
+ .name = _("Rawst Berry"),
.itemId = ITEM_RAWST_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CURE_BRN,
@@ -1670,11 +6916,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 10,
},
[ITEM_ASPEAR_BERRY] =
{
- .name = _("ASPEAR BERRY"),
+ .name = _("Aspear Berry"),
.itemId = ITEM_ASPEAR_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CURE_FRZ,
@@ -1684,11 +6931,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 10,
},
[ITEM_LEPPA_BERRY] =
{
- .name = _("LEPPA BERRY"),
+ .name = _("Leppa Berry"),
.itemId = ITEM_LEPPA_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_RESTORE_PP,
@@ -1699,11 +6947,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_PPRecovery,
+ .flingPower = 10,
},
[ITEM_ORAN_BERRY] =
{
- .name = _("ORAN BERRY"),
+ .name = _("Oran Berry"),
.itemId = ITEM_ORAN_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_RESTORE_HP,
@@ -1714,11 +6963,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 10,
},
[ITEM_PERSIM_BERRY] =
{
- .name = _("PERSIM BERRY"),
+ .name = _("Persim Berry"),
.itemId = ITEM_PERSIM_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CURE_CONFUSION,
@@ -1728,11 +6978,12 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 10,
},
[ITEM_LUM_BERRY] =
{
- .name = _("LUM BERRY"),
+ .name = _("Lum Berry"),
.itemId = ITEM_LUM_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CURE_STATUS,
@@ -1742,311 +6993,605 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 10,
},
[ITEM_SITRUS_BERRY] =
{
- .name = _("SITRUS BERRY"),
+ .name = _("Sitrus Berry"),
.itemId = ITEM_SITRUS_BERRY,
.price = 20,
- .holdEffect = HOLD_EFFECT_RESTORE_HP,
- .holdEffectParam = 30,
+ #if I_SITRUS_BERRY_HEAL >= GEN_4
+ .holdEffect = HOLD_EFFECT_RESTORE_PCT_HP,
+ .holdEffectParam = 25,
+ #else
+ .holdEffect = HOLD_EFFECT_RESTORE_HP,
+ .holdEffectParam = 30,
+ #endif
.description = sSitrusBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_Medicine,
+ .flingPower = 10,
},
+#if B_CONFUSE_BERRIES_HEAL >= GEN_8
+ #define CONFUSE_BERRY_HEAL_FRACTION 3
+#elif B_CONFUSE_BERRIES_HEAL == GEN_7
+ #define CONFUSE_BERRY_HEAL_FRACTION 2
+#else
+ #define CONFUSE_BERRY_HEAL_FRACTION 8
+#endif
+
[ITEM_FIGY_BERRY] =
{
- .name = _("FIGY BERRY"),
+ .name = _("Figy Berry"),
.itemId = ITEM_FIGY_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CONFUSE_SPICY,
- .holdEffectParam = 8,
+ .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION,
.description = sFigyBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_WIKI_BERRY] =
{
- .name = _("WIKI BERRY"),
+ .name = _("Wiki Berry"),
.itemId = ITEM_WIKI_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CONFUSE_DRY,
- .holdEffectParam = 8,
+ .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION,
.description = sWikiBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_MAGO_BERRY] =
{
- .name = _("MAGO BERRY"),
+ .name = _("Mago Berry"),
.itemId = ITEM_MAGO_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CONFUSE_SWEET,
- .holdEffectParam = 8,
+ .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION,
.description = sMagoBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_AGUAV_BERRY] =
{
- .name = _("AGUAV BERRY"),
+ .name = _("Aguav Berry"),
.itemId = ITEM_AGUAV_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CONFUSE_BITTER,
- .holdEffectParam = 8,
+ .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION,
.description = sAguavBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_IAPAPA_BERRY] =
{
- .name = _("IAPAPA BERRY"),
+ .name = _("Iapapa Berry"),
.itemId = ITEM_IAPAPA_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CONFUSE_SOUR,
- .holdEffectParam = 8,
+ .holdEffectParam = CONFUSE_BERRY_HEAL_FRACTION,
.description = sIapapaBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
+#undef CONFUSE_BERRY_HEAL_FRACTION
+
[ITEM_RAZZ_BERRY] =
{
- .name = _("RAZZ BERRY"),
+ .name = _("Razz Berry"),
.itemId = ITEM_RAZZ_BERRY,
.price = 20,
.description = sRazzBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_BLUK_BERRY] =
{
- .name = _("BLUK BERRY"),
+ .name = _("Bluk Berry"),
.itemId = ITEM_BLUK_BERRY,
.price = 20,
.description = sBlukBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_NANAB_BERRY] =
{
- .name = _("NANAB BERRY"),
+ .name = _("Nanab Berry"),
.itemId = ITEM_NANAB_BERRY,
.price = 20,
.description = sNanabBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_WEPEAR_BERRY] =
{
- .name = _("WEPEAR BERRY"),
+ .name = _("Wepear Berry"),
.itemId = ITEM_WEPEAR_BERRY,
.price = 20,
.description = sWepearBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_PINAP_BERRY] =
{
- .name = _("PINAP BERRY"),
+ .name = _("Pinap Berry"),
.itemId = ITEM_PINAP_BERRY,
.price = 20,
.description = sPinapBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_POMEG_BERRY] =
{
- .name = _("POMEG BERRY"),
+ .name = _("Pomeg Berry"),
.itemId = ITEM_POMEG_BERRY,
.price = 20,
.description = sPomegBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .flingPower = 10,
},
[ITEM_KELPSY_BERRY] =
{
- .name = _("KELPSY BERRY"),
+ .name = _("Kelpsy Berry"),
.itemId = ITEM_KELPSY_BERRY,
.price = 20,
.description = sKelpsyBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .flingPower = 10,
},
[ITEM_QUALOT_BERRY] =
{
- .name = _("QUALOT BERRY"),
+ .name = _("Qualot Berry"),
.itemId = ITEM_QUALOT_BERRY,
.price = 20,
.description = sQualotBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .flingPower = 10,
},
[ITEM_HONDEW_BERRY] =
{
- .name = _("HONDEW BERRY"),
+ .name = _("Hondew Berry"),
.itemId = ITEM_HONDEW_BERRY,
.price = 20,
.description = sHondewBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .flingPower = 10,
},
[ITEM_GREPA_BERRY] =
{
- .name = _("GREPA BERRY"),
+ .name = _("Grepa Berry"),
.itemId = ITEM_GREPA_BERRY,
.price = 20,
.description = sGrepaBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .flingPower = 10,
},
[ITEM_TAMATO_BERRY] =
{
- .name = _("TAMATO BERRY"),
+ .name = _("Tamato Berry"),
.itemId = ITEM_TAMATO_BERRY,
.price = 20,
.description = sTamatoBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .flingPower = 10,
},
[ITEM_CORNN_BERRY] =
{
- .name = _("CORNN BERRY"),
+ .name = _("Cornn Berry"),
.itemId = ITEM_CORNN_BERRY,
.price = 20,
.description = sCornnBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_MAGOST_BERRY] =
{
- .name = _("MAGOST BERRY"),
+ .name = _("Magost Berry"),
.itemId = ITEM_MAGOST_BERRY,
.price = 20,
.description = sMagostBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_RABUTA_BERRY] =
{
- .name = _("RABUTA BERRY"),
+ .name = _("Rabuta Berry"),
.itemId = ITEM_RABUTA_BERRY,
.price = 20,
.description = sRabutaBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_NOMEL_BERRY] =
{
- .name = _("NOMEL BERRY"),
+ .name = _("Nomel Berry"),
.itemId = ITEM_NOMEL_BERRY,
.price = 20,
.description = sNomelBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_SPELON_BERRY] =
{
- .name = _("SPELON BERRY"),
+ .name = _("Spelon Berry"),
.itemId = ITEM_SPELON_BERRY,
.price = 20,
.description = sSpelonBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_PAMTRE_BERRY] =
{
- .name = _("PAMTRE BERRY"),
+ .name = _("Pamtre Berry"),
.itemId = ITEM_PAMTRE_BERRY,
.price = 20,
.description = sPamtreBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_WATMEL_BERRY] =
{
- .name = _("WATMEL BERRY"),
+ .name = _("Watmel Berry"),
.itemId = ITEM_WATMEL_BERRY,
.price = 20,
.description = sWatmelBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_DURIN_BERRY] =
{
- .name = _("DURIN BERRY"),
+ .name = _("Durin Berry"),
.itemId = ITEM_DURIN_BERRY,
.price = 20,
.description = sDurinBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_BELUE_BERRY] =
{
- .name = _("BELUE BERRY"),
+ .name = _("Belue Berry"),
.itemId = ITEM_BELUE_BERRY,
.price = 20,
.description = sBelueBerryDesc,
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_CHILAN_BERRY] =
+ {
+ .name = _("Chilan Berry"),
+ .itemId = ITEM_CHILAN_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_NORMAL,
+ .description = sChilanBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_OCCA_BERRY] =
+ {
+ .name = _("Occa Berry"),
+ .itemId = ITEM_OCCA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_FIRE,
+ .description = sOccaBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_PASSHO_BERRY] =
+ {
+ .name = _("Passho Berry"),
+ .itemId = ITEM_PASSHO_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_WATER,
+ .description = sPasshoBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_WACAN_BERRY] =
+ {
+ .name = _("Wacan Berry"),
+ .itemId = ITEM_WACAN_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_ELECTRIC,
+ .description = sWacanBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_RINDO_BERRY] =
+ {
+ .name = _("Rindo Berry"),
+ .itemId = ITEM_RINDO_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_GRASS,
+ .description = sRindoBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_YACHE_BERRY] =
+ {
+ .name = _("Yache Berry"),
+ .itemId = ITEM_YACHE_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_ICE,
+ .description = sYacheBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_CHOPLE_BERRY] =
+ {
+ .name = _("Chople Berry"),
+ .itemId = ITEM_CHOPLE_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_FIGHTING,
+ .description = sChopleBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_KEBIA_BERRY] =
+ {
+ .name = _("Kebia Berry"),
+ .itemId = ITEM_KEBIA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_POISON,
+ .description = sKebiaBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_SHUCA_BERRY] =
+ {
+ .name = _("Shuca Berry"),
+ .itemId = ITEM_SHUCA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_GROUND,
+ .description = sShucaBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_COBA_BERRY] =
+ {
+ .name = _("Coba Berry"),
+ .itemId = ITEM_COBA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_FLYING,
+ .description = sCobaBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_PAYAPA_BERRY] =
+ {
+ .name = _("Payapa Berry"),
+ .itemId = ITEM_PAYAPA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_PSYCHIC,
+ .description = sPayapaBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_TANGA_BERRY] =
+ {
+ .name = _("Tanga Berry"),
+ .itemId = ITEM_TANGA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_BUG,
+ .description = sTangaBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_CHARTI_BERRY] =
+ {
+ .name = _("Charti Berry"),
+ .itemId = ITEM_CHARTI_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_ROCK,
+ .description = sChartiBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_KASIB_BERRY] =
+ {
+ .name = _("Kasib Berry"),
+ .itemId = ITEM_KASIB_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_GHOST,
+ .description = sKasibBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_HABAN_BERRY] =
+ {
+ .name = _("Haban Berry"),
+ .itemId = ITEM_HABAN_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_DRAGON,
+ .description = sHabanBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_COLBUR_BERRY] =
+ {
+ .name = _("Colbur Berry"),
+ .itemId = ITEM_COLBUR_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_DARK,
+ .description = sColburBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_BABIRI_BERRY] =
+ {
+ .name = _("Babiri Berry"),
+ .itemId = ITEM_BABIRI_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_STEEL,
+ .description = sBabiriBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_ROSELI_BERRY] =
+ {
+ .name = _("Roseli Berry"),
+ .itemId = ITEM_ROSELI_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESIST_BERRY,
+ .holdEffectParam = TYPE_FAIRY,
+ .description = sRoseliBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_LIECHI_BERRY] =
{
- .name = _("LIECHI BERRY"),
+ .name = _("Liechi Berry"),
.itemId = ITEM_LIECHI_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_ATTACK_UP,
@@ -2055,11 +7600,12 @@ const struct Item gItems[] =
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_GANLON_BERRY] =
{
- .name = _("GANLON BERRY"),
+ .name = _("Ganlon Berry"),
.itemId = ITEM_GANLON_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_DEFENSE_UP,
@@ -2068,11 +7614,12 @@ const struct Item gItems[] =
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_SALAC_BERRY] =
{
- .name = _("SALAC BERRY"),
+ .name = _("Salac Berry"),
.itemId = ITEM_SALAC_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_SPEED_UP,
@@ -2081,11 +7628,12 @@ const struct Item gItems[] =
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_PETAYA_BERRY] =
{
- .name = _("PETAYA BERRY"),
+ .name = _("Petaya Berry"),
.itemId = ITEM_PETAYA_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_SP_ATTACK_UP,
@@ -2094,11 +7642,12 @@ const struct Item gItems[] =
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_APICOT_BERRY] =
{
- .name = _("APICOT BERRY"),
+ .name = _("Apicot Berry"),
.itemId = ITEM_APICOT_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_SP_DEFENSE_UP,
@@ -2107,11 +7656,12 @@ const struct Item gItems[] =
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_LANSAT_BERRY] =
{
- .name = _("LANSAT BERRY"),
+ .name = _("Lansat Berry"),
.itemId = ITEM_LANSAT_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_CRITICAL_UP,
@@ -2120,11 +7670,12 @@ const struct Item gItems[] =
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_STARF_BERRY] =
{
- .name = _("STARF BERRY"),
+ .name = _("Starf Berry"),
.itemId = ITEM_STARF_BERRY,
.price = 20,
.holdEffect = HOLD_EFFECT_RANDOM_STAT_UP,
@@ -2133,1382 +7684,114 @@ const struct Item gItems[] =
.pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
[ITEM_ENIGMA_BERRY] =
{
- .name = _("ENIGMA BERRY"),
+ .name = _("Enigma Berry"),
.itemId = ITEM_ENIGMA_BERRY,
.price = 20,
+ .holdEffect = HOLD_EFFECT_ENIGMA_BERRY,
.description = sEnigmaBerryDesc,
.pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_MICLE_BERRY] =
+ {
+ .name = _("Micle Berry"),
+ .itemId = ITEM_MICLE_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_MICLE_BERRY,
+ .holdEffectParam = 4,
+ .description = sMicleBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_CUSTAP_BERRY] =
+ {
+ .name = _("Custap Berry"),
+ .itemId = ITEM_CUSTAP_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CUSTAP_BERRY,
+ .holdEffectParam = 4,
+ .description = sCustapBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_JABOCA_BERRY] =
+ {
+ .name = _("Jaboca Berry"),
+ .itemId = ITEM_JABOCA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_JABOCA_BERRY,
+ .description = sJabocaBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_ROWAP_BERRY] =
+ {
+ .name = _("Rowap Berry"),
+ .itemId = ITEM_ROWAP_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_ROWAP_BERRY,
+ .description = sRowapBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_KEE_BERRY] =
+ {
+ .name = _("Kee Berry"),
+ .itemId = ITEM_KEE_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_KEE_BERRY,
+ .description = sKeeBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_MARANGA_BERRY] =
+ {
+ .name = _("Maranga Berry"),
+ .itemId = ITEM_MARANGA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_MARANGA_BERRY,
+ .description = sMarangaBerryDesc,
+ .pocket = POCKET_BERRIES,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
+ },
+
+ [ITEM_ENIGMA_BERRY_E_READER] =
+ {
+ .name = _("Enigma Berry"),
+ .itemId = ITEM_ENIGMA_BERRY,
+ .price = 20,
+ .description = sEnigmaBerryEReaderDesc,
+ .pocket = POCKET_BERRIES,
.type = ITEM_USE_BAG_MENU, // Type handled by ItemUseOutOfBattle_EnigmaBerry
.fieldUseFunc = ItemUseOutOfBattle_EnigmaBerry,
.battleUsage = ITEM_B_USE_MEDICINE,
.battleUseFunc = ItemUseInBattle_EnigmaBerry,
- },
-
- [ITEM_UNUSED_BERRY_1] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_UNUSED_BERRY_2] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_UNUSED_BERRY_3] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
-// Hold items
-
- [ITEM_BRIGHT_POWDER] =
- {
- .name = _("BRIGHTPOWDER"),
- .itemId = ITEM_BRIGHT_POWDER,
- .price = 10,
- .holdEffect = HOLD_EFFECT_EVASION_UP,
- .holdEffectParam = 10,
- .description = sBrightPowderDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_WHITE_HERB] =
- {
- .name = _("WHITE HERB"),
- .itemId = ITEM_WHITE_HERB,
- .price = 100,
- .holdEffect = HOLD_EFFECT_RESTORE_STATS,
- .description = sWhiteHerbDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_MACHO_BRACE] =
- {
- .name = _("MACHO BRACE"),
- .itemId = ITEM_MACHO_BRACE,
- .price = 3000,
- .holdEffect = HOLD_EFFECT_MACHO_BRACE,
- .description = sMachoBraceDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_EXP_SHARE] =
- {
- .name = _("EXP. SHARE"),
- .itemId = ITEM_EXP_SHARE,
- .price = 3000,
- .holdEffect = HOLD_EFFECT_EXP_SHARE,
- .description = sExpShareDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_QUICK_CLAW] =
- {
- .name = _("QUICK CLAW"),
- .itemId = ITEM_QUICK_CLAW,
- .price = 100,
- .holdEffect = HOLD_EFFECT_QUICK_CLAW,
- .holdEffectParam = 20,
- .description = sQuickClawDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SOOTHE_BELL] =
- {
- .name = _("SOOTHE BELL"),
- .itemId = ITEM_SOOTHE_BELL,
- .price = 100,
- .holdEffect = HOLD_EFFECT_FRIENDSHIP_UP,
- .description = sSootheBellDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_MENTAL_HERB] =
- {
- .name = _("MENTAL HERB"),
- .itemId = ITEM_MENTAL_HERB,
- .price = 100,
- .holdEffect = HOLD_EFFECT_CURE_ATTRACT,
- .description = sMentalHerbDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_CHOICE_BAND] =
- {
- .name = _("CHOICE BAND"),
- .itemId = ITEM_CHOICE_BAND,
- .price = 100,
- .holdEffect = HOLD_EFFECT_CHOICE_BAND,
- .description = sChoiceBandDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_KINGS_ROCK] =
- {
- .name = _("KING'S ROCK"),
- .itemId = ITEM_KINGS_ROCK,
- .price = 100,
- .holdEffect = HOLD_EFFECT_FLINCH,
- .holdEffectParam = 10,
- .description = sKingsRockDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SILVER_POWDER] =
- {
- .name = _("SILVERPOWDER"),
- .itemId = ITEM_SILVER_POWDER,
- .price = 100,
- .holdEffect = HOLD_EFFECT_BUG_POWER,
- .holdEffectParam = 10,
- .description = sSilverPowderDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_AMULET_COIN] =
- {
- .name = _("AMULET COIN"),
- .itemId = ITEM_AMULET_COIN,
- .price = 100,
- .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE,
- .holdEffectParam = 10,
- .description = sAmuletCoinDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_CLEANSE_TAG] =
- {
- .name = _("CLEANSE TAG"),
- .itemId = ITEM_CLEANSE_TAG,
- .price = 200,
- .holdEffect = HOLD_EFFECT_REPEL,
- .description = sCleanseTagDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SOUL_DEW] =
- {
- .name = _("SOUL DEW"),
- .itemId = ITEM_SOUL_DEW,
- .price = 200,
- .holdEffect = HOLD_EFFECT_SOUL_DEW,
- .description = sSoulDewDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_DEEP_SEA_TOOTH] =
- {
- .name = _("DEEPSEATOOTH"),
- .itemId = ITEM_DEEP_SEA_TOOTH,
- .price = 200,
- .holdEffect = HOLD_EFFECT_DEEP_SEA_TOOTH,
- .description = sDeepSeaToothDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_DEEP_SEA_SCALE] =
- {
- .name = _("DEEPSEASCALE"),
- .itemId = ITEM_DEEP_SEA_SCALE,
- .price = 200,
- .holdEffect = HOLD_EFFECT_DEEP_SEA_SCALE,
- .description = sDeepSeaScaleDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SMOKE_BALL] =
- {
- .name = _("SMOKE BALL"),
- .itemId = ITEM_SMOKE_BALL,
- .price = 200,
- .holdEffect = HOLD_EFFECT_CAN_ALWAYS_RUN,
- .description = sSmokeBallDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_EVERSTONE] =
- {
- .name = _("EVERSTONE"),
- .itemId = ITEM_EVERSTONE,
- .price = 200,
- .holdEffect = HOLD_EFFECT_PREVENT_EVOLVE,
- .description = sEverstoneDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_FOCUS_BAND] =
- {
- .name = _("FOCUS BAND"),
- .itemId = ITEM_FOCUS_BAND,
- .price = 200,
- .holdEffect = HOLD_EFFECT_FOCUS_BAND,
- .holdEffectParam = 10,
- .description = sFocusBandDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_LUCKY_EGG] =
- {
- .name = _("LUCKY EGG"),
- .itemId = ITEM_LUCKY_EGG,
- .price = 200,
- .holdEffect = HOLD_EFFECT_LUCKY_EGG,
- .description = sLuckyEggDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SCOPE_LENS] =
- {
- .name = _("SCOPE LENS"),
- .itemId = ITEM_SCOPE_LENS,
- .price = 200,
- .holdEffect = HOLD_EFFECT_SCOPE_LENS,
- .description = sScopeLensDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_METAL_COAT] =
- {
- .name = _("METAL COAT"),
- .itemId = ITEM_METAL_COAT,
- .price = 100,
- .holdEffect = HOLD_EFFECT_STEEL_POWER,
- .holdEffectParam = 10,
- .description = sMetalCoatDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_LEFTOVERS] =
- {
- .name = _("LEFTOVERS"),
- .itemId = ITEM_LEFTOVERS,
- .price = 200,
- .holdEffect = HOLD_EFFECT_LEFTOVERS,
- .holdEffectParam = 10,
- .description = sLeftoversDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_DRAGON_SCALE] =
- {
- .name = _("DRAGON SCALE"),
- .itemId = ITEM_DRAGON_SCALE,
- .price = 2100,
- .holdEffect = HOLD_EFFECT_DRAGON_SCALE,
- .holdEffectParam = 10,
- .description = sDragonScaleDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_LIGHT_BALL] =
- {
- .name = _("LIGHT BALL"),
- .itemId = ITEM_LIGHT_BALL,
- .price = 100,
- .holdEffect = HOLD_EFFECT_LIGHT_BALL,
- .description = sLightBallDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SOFT_SAND] =
- {
- .name = _("SOFT SAND"),
- .itemId = ITEM_SOFT_SAND,
- .price = 100,
- .holdEffect = HOLD_EFFECT_GROUND_POWER,
- .holdEffectParam = 10,
- .description = sSoftSandDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_HARD_STONE] =
- {
- .name = _("HARD STONE"),
- .itemId = ITEM_HARD_STONE,
- .price = 100,
- .holdEffect = HOLD_EFFECT_ROCK_POWER,
- .holdEffectParam = 10,
- .description = sHardStoneDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_MIRACLE_SEED] =
- {
- .name = _("MIRACLE SEED"),
- .itemId = ITEM_MIRACLE_SEED,
- .price = 100,
- .holdEffect = HOLD_EFFECT_GRASS_POWER,
- .holdEffectParam = 10,
- .description = sMiracleSeedDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_BLACK_GLASSES] =
- {
- .name = _("BLACKGLASSES"),
- .itemId = ITEM_BLACK_GLASSES,
- .price = 100,
- .holdEffect = HOLD_EFFECT_DARK_POWER,
- .holdEffectParam = 10,
- .description = sBlackGlassesDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_BLACK_BELT] =
- {
- .name = _("BLACK BELT"),
- .itemId = ITEM_BLACK_BELT,
- .price = 100,
- .holdEffect = HOLD_EFFECT_FIGHTING_POWER,
- .holdEffectParam = 10,
- .description = sBlackBeltDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_MAGNET] =
- {
- .name = _("MAGNET"),
- .itemId = ITEM_MAGNET,
- .price = 100,
- .holdEffect = HOLD_EFFECT_ELECTRIC_POWER,
- .holdEffectParam = 10,
- .description = sMagnetDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_MYSTIC_WATER] =
- {
- .name = _("MYSTIC WATER"),
- .itemId = ITEM_MYSTIC_WATER,
- .price = 100,
- .holdEffect = HOLD_EFFECT_WATER_POWER,
- .holdEffectParam = 10,
- .description = sMysticWaterDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SHARP_BEAK] =
- {
- .name = _("SHARP BEAK"),
- .itemId = ITEM_SHARP_BEAK,
- .price = 100,
- .holdEffect = HOLD_EFFECT_FLYING_POWER,
- .holdEffectParam = 10,
- .description = sSharpBeakDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_POISON_BARB] =
- {
- .name = _("POISON BARB"),
- .itemId = ITEM_POISON_BARB,
- .price = 100,
- .holdEffect = HOLD_EFFECT_POISON_POWER,
- .holdEffectParam = 10,
- .description = sPoisonBarbDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_NEVER_MELT_ICE] =
- {
- .name = _("NEVERMELTICE"),
- .itemId = ITEM_NEVER_MELT_ICE,
- .price = 100,
- .holdEffect = HOLD_EFFECT_ICE_POWER,
- .holdEffectParam = 10,
- .description = sNeverMeltIceDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SPELL_TAG] =
- {
- .name = _("SPELL TAG"),
- .itemId = ITEM_SPELL_TAG,
- .price = 100,
- .holdEffect = HOLD_EFFECT_GHOST_POWER,
- .holdEffectParam = 10,
- .description = sSpellTagDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_TWISTED_SPOON] =
- {
- .name = _("TWISTEDSPOON"),
- .itemId = ITEM_TWISTED_SPOON,
- .price = 100,
- .holdEffect = HOLD_EFFECT_PSYCHIC_POWER,
- .holdEffectParam = 10,
- .description = sTwistedSpoonDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_CHARCOAL] =
- {
- .name = _("CHARCOAL"),
- .itemId = ITEM_CHARCOAL,
- .price = 9800,
- .holdEffect = HOLD_EFFECT_FIRE_POWER,
- .holdEffectParam = 10,
- .description = sCharcoalDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_DRAGON_FANG] =
- {
- .name = _("DRAGON FANG"),
- .itemId = ITEM_DRAGON_FANG,
- .price = 100,
- .holdEffect = HOLD_EFFECT_DRAGON_POWER,
- .holdEffectParam = 10,
- .description = sDragonFangDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SILK_SCARF] =
- {
- .name = _("SILK SCARF"),
- .itemId = ITEM_SILK_SCARF,
- .price = 100,
- .holdEffect = HOLD_EFFECT_NORMAL_POWER,
- .holdEffectParam = 10,
- .description = sSilkScarfDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_UP_GRADE] =
- {
- .name = _("UP-GRADE"),
- .itemId = ITEM_UP_GRADE,
- .price = 2100,
- .holdEffect = HOLD_EFFECT_UP_GRADE,
- .description = sUpGradeDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SHELL_BELL] =
- {
- .name = _("SHELL BELL"),
- .itemId = ITEM_SHELL_BELL,
- .price = 200,
- .holdEffect = HOLD_EFFECT_SHELL_BELL,
- .holdEffectParam = 8,
- .description = sShellBellDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SEA_INCENSE] =
- {
- .name = _("SEA INCENSE"),
- .itemId = ITEM_SEA_INCENSE,
- .price = 9600,
- .holdEffect = HOLD_EFFECT_WATER_POWER,
- .holdEffectParam = 5,
- .description = sSeaIncenseDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_LAX_INCENSE] =
- {
- .name = _("LAX INCENSE"),
- .itemId = ITEM_LAX_INCENSE,
- .price = 9600,
- .holdEffect = HOLD_EFFECT_EVASION_UP,
- .holdEffectParam = 5,
- .description = sLaxIncenseDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_LUCKY_PUNCH] =
- {
- .name = _("LUCKY PUNCH"),
- .itemId = ITEM_LUCKY_PUNCH,
- .price = 10,
- .holdEffect = HOLD_EFFECT_LUCKY_PUNCH,
- .description = sLuckyPunchDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_METAL_POWDER] =
- {
- .name = _("METAL POWDER"),
- .itemId = ITEM_METAL_POWDER,
- .price = 10,
- .holdEffect = HOLD_EFFECT_METAL_POWDER,
- .description = sMetalPowderDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_THICK_CLUB] =
- {
- .name = _("THICK CLUB"),
- .itemId = ITEM_THICK_CLUB,
- .price = 500,
- .holdEffect = HOLD_EFFECT_THICK_CLUB,
- .description = sThickClubDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_STICK] =
- {
- .name = _("STICK"),
- .itemId = ITEM_STICK,
- .price = 200,
- .holdEffect = HOLD_EFFECT_STICK,
- .description = sStickDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0E2] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0E3] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0E4] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0E5] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0E6] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0E7] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0E8] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0E9] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0EA] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0EB] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0EC] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0ED] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0EE] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0EF] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F0] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F1] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F2] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F3] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F4] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F5] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F6] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F7] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F8] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0F9] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0FA] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0FB] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0FC] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_0FD] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_RED_SCARF] =
- {
- .name = _("RED SCARF"),
- .itemId = ITEM_RED_SCARF,
- .price = 100,
- .description = sRedScarfDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_BLUE_SCARF] =
- {
- .name = _("BLUE SCARF"),
- .itemId = ITEM_BLUE_SCARF,
- .price = 100,
- .description = sBlueScarfDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_PINK_SCARF] =
- {
- .name = _("PINK SCARF"),
- .itemId = ITEM_PINK_SCARF,
- .price = 100,
- .description = sPinkScarfDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_GREEN_SCARF] =
- {
- .name = _("GREEN SCARF"),
- .itemId = ITEM_GREEN_SCARF,
- .price = 100,
- .description = sGreenScarfDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_YELLOW_SCARF] =
- {
- .name = _("YELLOW SCARF"),
- .itemId = ITEM_YELLOW_SCARF,
- .price = 100,
- .description = sYellowScarfDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
-// Key items
-
- [ITEM_MACH_BIKE] =
- {
- .name = _("MACH BIKE"),
- .itemId = ITEM_MACH_BIKE,
- .price = 0,
- .description = sMachBikeDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_FIELD,
- .fieldUseFunc = ItemUseOutOfBattle_Bike,
- .secondaryId = MACH_BIKE,
- },
-
- [ITEM_COIN_CASE] =
- {
- .name = _("COIN CASE"),
- .itemId = ITEM_COIN_CASE,
- .price = 0,
- .description = sCoinCaseDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CoinCase,
- },
-
- [ITEM_ITEMFINDER] =
- {
- .name = _("ITEMFINDER"),
- .itemId = ITEM_ITEMFINDER,
- .price = 0,
- .description = sItemfinderDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_FIELD,
- .fieldUseFunc = ItemUseOutOfBattle_Itemfinder,
- },
-
- [ITEM_OLD_ROD] =
- {
- .name = _("OLD ROD"),
- .itemId = ITEM_OLD_ROD,
- .price = 0,
- .description = sOldRodDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_FIELD,
- .fieldUseFunc = ItemUseOutOfBattle_Rod,
- .secondaryId = OLD_ROD,
- },
-
- [ITEM_GOOD_ROD] =
- {
- .name = _("GOOD ROD"),
- .itemId = ITEM_GOOD_ROD,
- .price = 0,
- .description = sGoodRodDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_FIELD,
- .fieldUseFunc = ItemUseOutOfBattle_Rod,
- .secondaryId = GOOD_ROD,
- },
-
- [ITEM_SUPER_ROD] =
- {
- .name = _("SUPER ROD"),
- .itemId = ITEM_SUPER_ROD,
- .price = 0,
- .description = sSuperRodDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_FIELD,
- .fieldUseFunc = ItemUseOutOfBattle_Rod,
- .secondaryId = SUPER_ROD,
- },
-
- [ITEM_SS_TICKET] =
- {
- .name = _("S.S. TICKET"),
- .itemId = ITEM_SS_TICKET,
- .price = 0,
- .description = sSSTicketDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_CONTEST_PASS] =
- {
- .name = _("CONTEST PASS"),
- .itemId = ITEM_CONTEST_PASS,
- .price = 0,
- .description = sContestPassDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_10B] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_WAILMER_PAIL] =
- {
- .name = _("WAILMER PAIL"),
- .itemId = ITEM_WAILMER_PAIL,
- .price = 0,
- .description = sWailmerPailDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_FIELD,
- .fieldUseFunc = ItemUseOutOfBattle_WailmerPail,
- },
-
- [ITEM_DEVON_GOODS] =
- {
- .name = _("DEVON GOODS"),
- .itemId = ITEM_DEVON_GOODS,
- .price = 0,
- .description = sDevonGoodsDesc,
- .importance = 2,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SOOT_SACK] =
- {
- .name = _("SOOT SACK"),
- .itemId = ITEM_SOOT_SACK,
- .price = 0,
- .description = sSootSackDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_BASEMENT_KEY] =
- {
- .name = _("BASEMENT KEY"),
- .itemId = ITEM_BASEMENT_KEY,
- .price = 0,
- .description = sBasementKeyDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_ACRO_BIKE] =
- {
- .name = _("ACRO BIKE"),
- .itemId = ITEM_ACRO_BIKE,
- .price = 0,
- .description = sAcroBikeDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_FIELD,
- .fieldUseFunc = ItemUseOutOfBattle_Bike,
- .secondaryId = ACRO_BIKE,
- },
-
- [ITEM_POKEBLOCK_CASE] =
- {
- .name = _("{POKEBLOCK} CASE"),
- .itemId = ITEM_POKEBLOCK_CASE,
- .price = 0,
- .description = sPokeblockCaseDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_PBLOCK_CASE,
- .fieldUseFunc = ItemUseOutOfBattle_PokeblockCase,
- },
-
- [ITEM_LETTER] =
- {
- .name = _("LETTER"),
- .itemId = ITEM_LETTER,
- .price = 0,
- .description = sLetterDesc,
- .importance = 2,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_EON_TICKET] =
- {
- .name = _("EON TICKET"),
- .itemId = ITEM_EON_TICKET,
- .price = 0,
- .description = sEonTicketDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 1,
- },
-
- [ITEM_RED_ORB] =
- {
- .name = _("RED ORB"),
- .itemId = ITEM_RED_ORB,
- .price = 0,
- .description = sRedOrbDesc,
- .importance = 2,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_BLUE_ORB] =
- {
- .name = _("BLUE ORB"),
- .itemId = ITEM_BLUE_ORB,
- .price = 0,
- .description = sBlueOrbDesc,
- .importance = 2,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SCANNER] =
- {
- .name = _("SCANNER"),
- .itemId = ITEM_SCANNER,
- .price = 0,
- .description = sScannerDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_GO_GOGGLES] =
- {
- .name = _("GO-GOGGLES"),
- .itemId = ITEM_GO_GOGGLES,
- .price = 0,
- .description = sGoGogglesDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_METEORITE] =
- {
- .name = _("METEORITE"),
- .itemId = ITEM_METEORITE,
- .price = 0,
- .description = sMeteoriteDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_ROOM_1_KEY] =
- {
- .name = _("RM. 1 KEY"),
- .itemId = ITEM_ROOM_1_KEY,
- .price = 0,
- .description = sRoom1KeyDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_ROOM_2_KEY] =
- {
- .name = _("RM. 2 KEY"),
- .itemId = ITEM_ROOM_2_KEY,
- .price = 0,
- .description = sRoom2KeyDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_ROOM_4_KEY] =
- {
- .name = _("RM. 4 KEY"),
- .itemId = ITEM_ROOM_4_KEY,
- .price = 0,
- .description = sRoom4KeyDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_ROOM_6_KEY] =
- {
- .name = _("RM. 6 KEY"),
- .itemId = ITEM_ROOM_6_KEY,
- .price = 0,
- .description = sRoom6KeyDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_STORAGE_KEY] =
- {
- .name = _("STORAGE KEY"),
- .itemId = ITEM_STORAGE_KEY,
- .price = 0,
- .description = sStorageKeyDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_ROOT_FOSSIL] =
- {
- .name = _("ROOT FOSSIL"),
- .itemId = ITEM_ROOT_FOSSIL,
- .price = 0,
- .description = sRootFossilDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_CLAW_FOSSIL] =
- {
- .name = _("CLAW FOSSIL"),
- .itemId = ITEM_CLAW_FOSSIL,
- .price = 0,
- .description = sClawFossilDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_DEVON_SCOPE] =
- {
- .name = _("DEVON SCOPE"),
- .itemId = ITEM_DEVON_SCOPE,
- .price = 0,
- .description = sDevonScopeDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .flingPower = 10,
},
// TMs/HMs
@@ -3522,6 +7805,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 150,
},
[ITEM_TM02_DRAGON_CLAW] =
@@ -3533,6 +7817,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 80,
},
[ITEM_TM03_WATER_PULSE] =
@@ -3544,6 +7829,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 60,
},
[ITEM_TM04_CALM_MIND] =
@@ -3555,6 +7841,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM05_ROAR] =
@@ -3566,6 +7853,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM06_TOXIC] =
@@ -3577,6 +7865,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM07_HAIL] =
@@ -3588,6 +7877,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM08_BULK_UP] =
@@ -3599,6 +7889,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM09_BULLET_SEED] =
@@ -3610,6 +7901,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flingPower = 25,
+ #else
+ .flingPower = 10,
+ #endif
},
[ITEM_TM10_HIDDEN_POWER] =
@@ -3621,6 +7917,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 60,
+ #else
+ .flingPower = 10,
+ #endif
},
[ITEM_TM11_SUNNY_DAY] =
@@ -3632,6 +7933,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM12_TAUNT] =
@@ -3643,6 +7945,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM13_ICE_BEAM] =
@@ -3654,6 +7957,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 90,
+ #else
+ .flingPower = 95,
+ #endif
},
[ITEM_TM14_BLIZZARD] =
@@ -3665,6 +7973,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 110,
+ #else
+ .flingPower = 120,
+ #endif
},
[ITEM_TM15_HYPER_BEAM] =
@@ -3676,6 +7989,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 150,
},
[ITEM_TM16_LIGHT_SCREEN] =
@@ -3687,6 +8001,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM17_PROTECT] =
@@ -3698,6 +8013,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM18_RAIN_DANCE] =
@@ -3709,6 +8025,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM19_GIGA_DRAIN] =
@@ -3720,6 +8037,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_5
+ .flingPower = 75,
+ #else
+ .flingPower = 60,
+ #endif
},
[ITEM_TM20_SAFEGUARD] =
@@ -3731,6 +8053,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM21_FRUSTRATION] =
@@ -3742,6 +8065,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM22_SOLAR_BEAM] =
@@ -3753,6 +8077,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 120,
},
[ITEM_TM23_IRON_TAIL] =
@@ -3764,6 +8089,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 100,
},
[ITEM_TM24_THUNDERBOLT] =
@@ -3775,6 +8101,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 90,
+ #else
+ .flingPower = 95,
+ #endif
},
[ITEM_TM25_THUNDER] =
@@ -3786,6 +8117,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 110,
+ #else
+ .flingPower = 120,
+ #endif
},
[ITEM_TM26_EARTHQUAKE] =
@@ -3797,6 +8133,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 100,
},
[ITEM_TM27_RETURN] =
@@ -3808,6 +8145,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM28_DIG] =
@@ -3819,6 +8157,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flingPower = 80,
+ #else
+ .flingPower = 60,
+ #endif
},
[ITEM_TM29_PSYCHIC] =
@@ -3830,6 +8173,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 90,
},
[ITEM_TM30_SHADOW_BALL] =
@@ -3841,6 +8185,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 80,
},
[ITEM_TM31_BRICK_BREAK] =
@@ -3852,6 +8197,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 75,
},
[ITEM_TM32_DOUBLE_TEAM] =
@@ -3863,6 +8209,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM33_REFLECT] =
@@ -3874,6 +8221,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM34_SHOCK_WAVE] =
@@ -3885,6 +8233,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 60,
},
[ITEM_TM35_FLAMETHROWER] =
@@ -3896,6 +8245,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 90,
+ #else
+ .flingPower = 95,
+ #endif
},
[ITEM_TM36_SLUDGE_BOMB] =
@@ -3907,6 +8261,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 90,
},
[ITEM_TM37_SANDSTORM] =
@@ -3918,6 +8273,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM38_FIRE_BLAST] =
@@ -3929,6 +8285,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 110,
+ #else
+ .flingPower = 120,
+ #endif
},
[ITEM_TM39_ROCK_TOMB] =
@@ -3940,6 +8301,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 60,
+ #else
+ .flingPower = 50,
+ #endif
},
[ITEM_TM40_AERIAL_ACE] =
@@ -3951,6 +8317,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 60,
},
[ITEM_TM41_TORMENT] =
@@ -3962,6 +8329,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM42_FACADE] =
@@ -3973,6 +8341,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM43_SECRET_POWER] =
@@ -3984,6 +8353,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 70,
},
[ITEM_TM44_REST] =
@@ -3995,6 +8365,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM45_ATTRACT] =
@@ -4006,6 +8377,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM46_THIEF] =
@@ -4017,6 +8389,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 60,
+ #else
+ .flingPower = 40,
+ #endif
},
[ITEM_TM47_STEEL_WING] =
@@ -4028,6 +8405,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 70,
},
[ITEM_TM48_SKILL_SWAP] =
@@ -4039,6 +8417,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM49_SNATCH] =
@@ -4050,6 +8429,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_TM50_OVERHEAT] =
@@ -4061,6 +8441,561 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 130,
+ #else
+ .flingPower = 140,
+ #endif
+ },
+
+ [ITEM_TM51] =
+ {
+ .name = _("TM51"),
+ .itemId = ITEM_TM51,
+ .price = 3000,
+ .description = sTM51Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM52] =
+ {
+ .name = _("TM52"),
+ .itemId = ITEM_TM52,
+ .price = 3000,
+ .description = sTM52Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM53] =
+ {
+ .name = _("TM53"),
+ .itemId = ITEM_TM53,
+ .price = 3000,
+ .description = sTM53Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM54] =
+ {
+ .name = _("TM54"),
+ .itemId = ITEM_TM54,
+ .price = 3000,
+ .description = sTM54Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM55] =
+ {
+ .name = _("TM55"),
+ .itemId = ITEM_TM55,
+ .price = 3000,
+ .description = sTM55Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM56] =
+ {
+ .name = _("TM56"),
+ .itemId = ITEM_TM56,
+ .price = 3000,
+ .description = sTM56Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM57] =
+ {
+ .name = _("TM57"),
+ .itemId = ITEM_TM57,
+ .price = 3000,
+ .description = sTM57Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM58] =
+ {
+ .name = _("TM58"),
+ .itemId = ITEM_TM58,
+ .price = 3000,
+ .description = sTM58Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM59] =
+ {
+ .name = _("TM59"),
+ .itemId = ITEM_TM59,
+ .price = 3000,
+ .description = sTM59Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM60] =
+ {
+ .name = _("TM60"),
+ .itemId = ITEM_TM60,
+ .price = 3000,
+ .description = sTM60Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM61] =
+ {
+ .name = _("TM61"),
+ .itemId = ITEM_TM61,
+ .price = 3000,
+ .description = sTM61Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM62] =
+ {
+ .name = _("TM62"),
+ .itemId = ITEM_TM62,
+ .price = 3000,
+ .description = sTM62Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM63] =
+ {
+ .name = _("TM63"),
+ .itemId = ITEM_TM63,
+ .price = 3000,
+ .description = sTM63Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM64] =
+ {
+ .name = _("TM64"),
+ .itemId = ITEM_TM64,
+ .price = 3000,
+ .description = sTM64Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM65] =
+ {
+ .name = _("TM65"),
+ .itemId = ITEM_TM65,
+ .price = 3000,
+ .description = sTM65Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM66] =
+ {
+ .name = _("TM66"),
+ .itemId = ITEM_TM66,
+ .price = 3000,
+ .description = sTM66Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM67] =
+ {
+ .name = _("TM67"),
+ .itemId = ITEM_TM67,
+ .price = 3000,
+ .description = sTM67Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM68] =
+ {
+ .name = _("TM68"),
+ .itemId = ITEM_TM68,
+ .price = 3000,
+ .description = sTM68Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM69] =
+ {
+ .name = _("TM69"),
+ .itemId = ITEM_TM69,
+ .price = 3000,
+ .description = sTM69Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM70] =
+ {
+ .name = _("TM70"),
+ .itemId = ITEM_TM70,
+ .price = 3000,
+ .description = sTM70Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM71] =
+ {
+ .name = _("TM71"),
+ .itemId = ITEM_TM71,
+ .price = 3000,
+ .description = sTM71Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM72] =
+ {
+ .name = _("TM72"),
+ .itemId = ITEM_TM72,
+ .price = 3000,
+ .description = sTM72Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM73] =
+ {
+ .name = _("TM73"),
+ .itemId = ITEM_TM73,
+ .price = 3000,
+ .description = sTM73Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM74] =
+ {
+ .name = _("TM74"),
+ .itemId = ITEM_TM74,
+ .price = 3000,
+ .description = sTM74Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM75] =
+ {
+ .name = _("TM75"),
+ .itemId = ITEM_TM75,
+ .price = 3000,
+ .description = sTM75Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM76] =
+ {
+ .name = _("TM76"),
+ .itemId = ITEM_TM76,
+ .price = 3000,
+ .description = sTM76Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM77] =
+ {
+ .name = _("TM77"),
+ .itemId = ITEM_TM77,
+ .price = 3000,
+ .description = sTM77Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM78] =
+ {
+ .name = _("TM78"),
+ .itemId = ITEM_TM78,
+ .price = 3000,
+ .description = sTM78Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM79] =
+ {
+ .name = _("TM79"),
+ .itemId = ITEM_TM79,
+ .price = 3000,
+ .description = sTM79Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM80] =
+ {
+ .name = _("TM80"),
+ .itemId = ITEM_TM80,
+ .price = 3000,
+ .description = sTM80Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM81] =
+ {
+ .name = _("TM81"),
+ .itemId = ITEM_TM81,
+ .price = 3000,
+ .description = sTM81Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM82] =
+ {
+ .name = _("TM82"),
+ .itemId = ITEM_TM82,
+ .price = 3000,
+ .description = sTM82Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM83] =
+ {
+ .name = _("TM83"),
+ .itemId = ITEM_TM83,
+ .price = 3000,
+ .description = sTM83Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM84] =
+ {
+ .name = _("TM84"),
+ .itemId = ITEM_TM84,
+ .price = 3000,
+ .description = sTM84Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM85] =
+ {
+ .name = _("TM85"),
+ .itemId = ITEM_TM85,
+ .price = 3000,
+ .description = sTM85Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM86] =
+ {
+ .name = _("TM86"),
+ .itemId = ITEM_TM86,
+ .price = 3000,
+ .description = sTM86Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM87] =
+ {
+ .name = _("TM87"),
+ .itemId = ITEM_TM87,
+ .price = 3000,
+ .description = sTM87Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM88] =
+ {
+ .name = _("TM88"),
+ .itemId = ITEM_TM88,
+ .price = 3000,
+ .description = sTM88Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM89] =
+ {
+ .name = _("TM89"),
+ .itemId = ITEM_TM89,
+ .price = 3000,
+ .description = sTM89Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM90] =
+ {
+ .name = _("TM90"),
+ .itemId = ITEM_TM90,
+ .price = 3000,
+ .description = sTM90Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM91] =
+ {
+ .name = _("TM91"),
+ .itemId = ITEM_TM91,
+ .price = 3000,
+ .description = sTM91Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM92] =
+ {
+ .name = _("TM92"),
+ .itemId = ITEM_TM92,
+ .price = 3000,
+ .description = sTM92Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM93] =
+ {
+ .name = _("TM93"),
+ .itemId = ITEM_TM93,
+ .price = 3000,
+ .description = sTM93Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM94] =
+ {
+ .name = _("TM94"),
+ .itemId = ITEM_TM94,
+ .price = 3000,
+ .description = sTM94Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM95] =
+ {
+ .name = _("TM95"),
+ .itemId = ITEM_TM95,
+ .price = 3000,
+ .description = sTM95Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM96] =
+ {
+ .name = _("TM96"),
+ .itemId = ITEM_TM96,
+ .price = 3000,
+ .description = sTM96Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM97] =
+ {
+ .name = _("TM97"),
+ .itemId = ITEM_TM97,
+ .price = 3000,
+ .description = sTM97Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM98] =
+ {
+ .name = _("TM98"),
+ .itemId = ITEM_TM98,
+ .price = 3000,
+ .description = sTM98Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM99] =
+ {
+ .name = _("TM99"),
+ .itemId = ITEM_TM99,
+ .price = 3000,
+ .description = sTM99Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ },
+
+ [ITEM_TM100] =
+ {
+ .name = _("TM100"),
+ .itemId = ITEM_TM100,
+ .price = 3000,
+ .description = sTM100Desc,
+ .pocket = POCKET_TM_HM,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
},
[ITEM_HM01_CUT] =
@@ -4073,6 +9008,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 50,
},
[ITEM_HM02_FLY] =
@@ -4085,6 +9021,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flingPower = 90,
+ #else
+ .flingPower = 70,
+ #endif
},
[ITEM_HM03_SURF] =
@@ -4097,6 +9038,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_6
+ .flingPower = 90,
+ #else
+ .flingPower = 95,
+ #endif
},
[ITEM_HM04_STRENGTH] =
@@ -4109,6 +9055,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 80,
},
[ITEM_HM05_FLASH] =
@@ -4121,6 +9068,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 10,
},
[ITEM_HM06_ROCK_SMASH] =
@@ -4133,6 +9081,11 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flingPower = 20,
+ #else
+ .flingPower = 40,
+ #endif
},
[ITEM_HM07_WATERFALL] =
@@ -4145,6 +9098,7 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .flingPower = 80,
},
[ITEM_HM08_DIVE] =
@@ -4157,167 +9111,216 @@ const struct Item gItems[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ #if B_UPDATED_MOVE_DATA >= GEN_4
+ .flingPower = 80,
+ #else
+ .flingPower = 60,
+ #endif
},
- [ITEM_15B] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
- [ITEM_15C] =
- {
- .name = _("????????"),
- .itemId = ITEM_NONE,
- .price = 0,
- .description = sDummyDesc,
- .pocket = POCKET_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
+// Charms
-// FireRed/LeafGreen key items
-
- [ITEM_OAKS_PARCEL] =
+ [ITEM_OVAL_CHARM] =
{
- .name = _("OAK'S PARCEL"),
- .itemId = ITEM_OAKS_PARCEL,
+ .name = _("Oval Charm"),
+ .itemId = ITEM_OVAL_CHARM,
.price = 0,
- .description = sOaksParcelDesc,
- .importance = 2,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_POKE_FLUTE] =
- {
- .name = _("POKé FLUTE"),
- .itemId = ITEM_POKE_FLUTE,
- .price = 0,
- .description = sPokeFluteDesc,
.importance = 1,
+ .description = sOvalCharmDesc,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_SECRET_KEY] =
+ [ITEM_SHINY_CHARM] =
{
- .name = _("SECRET KEY"),
- .itemId = ITEM_SECRET_KEY,
+ .name = _("Shiny Charm"),
+ .itemId = ITEM_SHINY_CHARM,
.price = 0,
- .description = sSecretKeyDesc,
.importance = 1,
+ .description = sShinyCharmDesc,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_BIKE_VOUCHER] =
+ [ITEM_CATCHING_CHARM] =
{
- .name = _("BIKE VOUCHER"),
- .itemId = ITEM_BIKE_VOUCHER,
+ .name = _("CatchngCharm"),
+ .itemId = ITEM_CATCHING_CHARM,
.price = 0,
- .description = sBikeVoucherDesc,
.importance = 1,
+ .description = sCatchingCharmDesc,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_GOLD_TEETH] =
+ [ITEM_EXP_CHARM] =
{
- .name = _("GOLD TEETH"),
- .itemId = ITEM_GOLD_TEETH,
+ .name = _("Exp. Charm"),
+ .itemId = ITEM_EXP_CHARM,
.price = 0,
- .description = sGoldTeethDesc,
.importance = 1,
+ .description = sExpCharmDesc,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_OLD_AMBER] =
+// Form-changing Key Items
+
+ [ITEM_ROTOM_CATALOG] =
{
- .name = _("OLD AMBER"),
- .itemId = ITEM_OLD_AMBER,
+ .name = _("RotomCatalog"),
+ .itemId = ITEM_ROTOM_CATALOG,
.price = 0,
- .description = sOldAmberDesc,
.importance = 1,
+ .description = sRotomCatalogDesc,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ },
+
+ [ITEM_GRACIDEA] =
+ {
+ .name = _("Gracidea"),
+ .itemId = ITEM_GRACIDEA,
+ .price = 0,
+ .description = sGracideaDesc,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .secondaryId = FORM_ITEM_USE_TIME,
+ },
+
+ [ITEM_REVEAL_GLASS] =
+ {
+ .name = _("Reveal Glass"),
+ .itemId = ITEM_REVEAL_GLASS,
+ .price = 0,
+ .description = sRevealGlassDesc,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .secondaryId = FORM_ITEM_USE,
+ },
+
+ [ITEM_DNA_SPLICERS] =
+ {
+ .name = _("DNA Splicers"),
+ .itemId = ITEM_DNA_SPLICERS,
+ .price = 0,
+ .description = sDNASplicersDesc,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .secondaryId = FORM_ITEM_USE,
+ },
+
+ [ITEM_ZYGARDE_CUBE] =
+ {
+ .name = _("Zygarde Cube"),
+ .itemId = ITEM_ZYGARDE_CUBE,
+ .price = 0,
+ .importance = 1,
+ .description = sZygardeCubeDesc,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ },
+
+ [ITEM_PRISON_BOTTLE] =
+ {
+ .name = _("Prison Bottle"),
+ .itemId = ITEM_PRISON_BOTTLE,
+ .price = 0,
+ .description = sPrisonBottleDesc,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .secondaryId = FORM_ITEM_USE,
+ },
+
+ [ITEM_N_SOLARIZER] =
+ {
+ .name = _("N-Solarizer"),
+ .itemId = ITEM_N_SOLARIZER,
+ .price = 0,
+ .description = sNSolarizerDesc,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .secondaryId = FORM_ITEM_USE,
+ },
+
+ [ITEM_N_LUNARIZER] =
+ {
+ .name = _("N-Lunarizer"),
+ .itemId = ITEM_N_LUNARIZER,
+ .price = 0,
+ .description = sNLunarizerDesc,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .secondaryId = FORM_ITEM_USE,
+ },
+
+ [ITEM_REINS_OF_UNITY] =
+ {
+ .name = _("ReinsOfUnity"),
+ .itemId = ITEM_REINS_OF_UNITY,
+ .price = 0,
+ .description = sReinsOfUnityDesc,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_PARTY_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .secondaryId = FORM_ITEM_USE,
+ },
+
+// Battle Mechanic Key Items
+
+ [ITEM_MEGA_RING] =
+ {
+ .name = _("Mega Ring"),
+ .itemId = ITEM_MEGA_RING,
+ .price = 0,
+ .importance = 1,
+ .description = sMegaRingDesc,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_CARD_KEY] =
+ [ITEM_Z_POWER_RING] =
{
- .name = _("CARD KEY"),
- .itemId = ITEM_CARD_KEY,
+ .name = _("Z-Power Ring"),
+ .itemId = ITEM_Z_POWER_RING,
.price = 0,
- .description = sCardKeyDesc,
.importance = 1,
+ .description = sZPowerRingDesc,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_LIFT_KEY] =
+ [ITEM_DYNAMAX_BAND] =
{
- .name = _("LIFT KEY"),
- .itemId = ITEM_LIFT_KEY,
+ .name = _("Dynamax Band"),
+ .itemId = ITEM_DYNAMAX_BAND,
.price = 0,
- .description = sLiftKeyDesc,
- .importance = 1,
+ .description = sDynamaxBandDesc,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_HELIX_FOSSIL] =
- {
- .name = _("HELIX FOSSIL"),
- .itemId = ITEM_HELIX_FOSSIL,
- .price = 0,
- .description = sHelixFossilDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_DOME_FOSSIL] =
- {
- .name = _("DOME FOSSIL"),
- .itemId = ITEM_DOME_FOSSIL,
- .price = 0,
- .description = sDomeFossilDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_SILPH_SCOPE] =
- {
- .name = _("SILPH SCOPE"),
- .itemId = ITEM_SILPH_SCOPE,
- .price = 0,
- .description = sSilphScopeDesc,
- .importance = 1,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
+// Misc. Key Items
[ITEM_BICYCLE] =
{
- .name = _("BICYCLE"),
+ .name = _("Bicycle"),
.itemId = ITEM_BICYCLE,
.price = 0,
.description = sBicycleDesc,
@@ -4328,9 +9331,92 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
+ [ITEM_MACH_BIKE] =
+ {
+ .name = _("Mach Bike"),
+ .itemId = ITEM_MACH_BIKE,
+ .price = 0,
+ .description = sMachBikeDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_FIELD,
+ .fieldUseFunc = ItemUseOutOfBattle_Bike,
+ .secondaryId = MACH_BIKE,
+ },
+
+ [ITEM_ACRO_BIKE] =
+ {
+ .name = _("Acro Bike"),
+ .itemId = ITEM_ACRO_BIKE,
+ .price = 0,
+ .description = sAcroBikeDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_FIELD,
+ .fieldUseFunc = ItemUseOutOfBattle_Bike,
+ .secondaryId = ACRO_BIKE,
+ },
+
+ [ITEM_OLD_ROD] =
+ {
+ .name = _("Old Rod"),
+ .itemId = ITEM_OLD_ROD,
+ .price = 0,
+ .description = sOldRodDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_FIELD,
+ .fieldUseFunc = ItemUseOutOfBattle_Rod,
+ .secondaryId = OLD_ROD,
+ },
+
+ [ITEM_GOOD_ROD] =
+ {
+ .name = _("Good Rod"),
+ .itemId = ITEM_GOOD_ROD,
+ .price = 0,
+ .description = sGoodRodDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_FIELD,
+ .fieldUseFunc = ItemUseOutOfBattle_Rod,
+ .secondaryId = GOOD_ROD,
+ },
+
+ [ITEM_SUPER_ROD] =
+ {
+ .name = _("Super Rod"),
+ .itemId = ITEM_SUPER_ROD,
+ .price = 0,
+ .description = sSuperRodDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_FIELD,
+ .fieldUseFunc = ItemUseOutOfBattle_Rod,
+ .secondaryId = SUPER_ROD,
+ },
+
+ [ITEM_DOWSING_MACHINE] =
+ {
+ .name = _("Dowsing MCHN"),
+ .itemId = ITEM_DOWSING_MACHINE,
+ .price = 0,
+ .description = sDowsingMachineDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_FIELD,
+ .fieldUseFunc = ItemUseOutOfBattle_Itemfinder,
+ },
+
[ITEM_TOWN_MAP] =
{
- .name = _("TOWN MAP"),
+ .name = _("Town Map"),
.itemId = ITEM_TOWN_MAP,
.price = 0,
.description = sTownMapDesc,
@@ -4343,10 +9429,10 @@ const struct Item gItems[] =
[ITEM_VS_SEEKER] =
{
- .name = _("VS SEEKER"),
+ .name = _("Vs. Seeker"),
.itemId = ITEM_VS_SEEKER,
.price = 0,
- .description = sVSSeekerDesc,
+ .description = sVsSeekerDesc,
.importance = 1,
.registrability = TRUE,
.pocket = POCKET_KEY_ITEMS,
@@ -4354,22 +9440,9 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_FAME_CHECKER] =
- {
- .name = _("FAME CHECKER"),
- .itemId = ITEM_FAME_CHECKER,
- .price = 0,
- .description = sFameCheckerDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
[ITEM_TM_CASE] =
{
- .name = _("TM CASE"),
+ .name = _("TM Case"),
.itemId = ITEM_TM_CASE,
.price = 0,
.description = sTMCaseDesc,
@@ -4382,7 +9455,7 @@ const struct Item gItems[] =
[ITEM_BERRY_POUCH] =
{
- .name = _("BERRY POUCH"),
+ .name = _("Berry Pouch"),
.itemId = ITEM_BERRY_POUCH,
.price = 0,
.description = sBerryPouchDesc,
@@ -4393,9 +9466,120 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
+ [ITEM_POKEMON_BOX_LINK] =
+ {
+ .name = _("{PKMN} Box Link"),
+ .itemId = ITEM_POKEMON_BOX_LINK,
+ .price = 0,
+ .description = sPokemonBoxLinkDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ },
+
+ [ITEM_COIN_CASE] =
+ {
+ .name = _("Coin Case"),
+ .itemId = ITEM_COIN_CASE,
+ .price = 0,
+ .description = sCoinCaseDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CoinCase,
+ },
+
+ [ITEM_POWDER_JAR] =
+ {
+ .name = _("Powder Jar"),
+ .itemId = ITEM_POWDER_JAR,
+ .price = 0,
+ .description = sPowderJarDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_PowderJar,
+ },
+
+ [ITEM_WAILMER_PAIL] =
+ {
+ .name = _("Wailmer Pail"),
+ .itemId = ITEM_WAILMER_PAIL,
+ .price = 0,
+ .description = sWailmerPailDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_FIELD,
+ .fieldUseFunc = ItemUseOutOfBattle_WailmerPail,
+ },
+
+ [ITEM_POKE_RADAR] =
+ {
+ .name = _("Poké Radar"),
+ .itemId = ITEM_POKE_RADAR,
+ .price = 0,
+ .description = sPokeRadarDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ },
+
+ [ITEM_POKEBLOCK_CASE] =
+ {
+ .name = _("{POKEBLOCK} Case"),
+ .itemId = ITEM_POKEBLOCK_CASE,
+ .price = 0,
+ .description = sPokeblockCaseDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_PBLOCK_CASE,
+ .fieldUseFunc = ItemUseOutOfBattle_PokeblockCase,
+ },
+
+ [ITEM_SOOT_SACK] =
+ {
+ .name = _("Soot Sack"),
+ .itemId = ITEM_SOOT_SACK,
+ .price = 0,
+ .description = sSootSackDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_POKE_FLUTE] =
+ {
+ .name = _("Poké Flute"),
+ .itemId = ITEM_POKE_FLUTE,
+ .price = 0,
+ .description = sPokeFluteDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_FAME_CHECKER] =
+ {
+ .name = _("Fame Checker"),
+ .itemId = ITEM_FAME_CHECKER,
+ .price = 0,
+ .description = sFameCheckerDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
[ITEM_TEACHY_TV] =
{
- .name = _("TEACHY TV"),
+ .name = _("Teachy TV"),
.itemId = ITEM_TEACHY_TV,
.price = 0,
.description = sTeachyTVDesc,
@@ -4406,48 +9590,36 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_TRI_PASS] =
+// Story Key Items
+
+ [ITEM_SS_TICKET] =
{
- .name = _("TRI-PASS"),
- .itemId = ITEM_TRI_PASS,
+ .name = _("S.S. Ticket"),
+ .itemId = ITEM_SS_TICKET,
.price = 0,
- .description = sTriPassDesc,
+ .description = sSSTicketDesc,
.importance = 1,
- .registrability = TRUE,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_RAINBOW_PASS] =
+ [ITEM_EON_TICKET] =
{
- .name = _("RAINBOW PASS"),
- .itemId = ITEM_RAINBOW_PASS,
+ .name = _("Eon Ticket"),
+ .itemId = ITEM_EON_TICKET,
.price = 0,
- .description = sRainbowPassDesc,
+ .description = sEonTicketDesc,
.importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_TEA] =
- {
- .name = _("TEA"),
- .itemId = ITEM_TEA,
- .price = 0,
- .description = sTeaDesc,
- .importance = 1,
- .registrability = TRUE,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .secondaryId = 1,
},
[ITEM_MYSTIC_TICKET] =
{
- .name = _("MYSTICTICKET"),
+ .name = _("Mystic Ticket"),
.itemId = ITEM_MYSTIC_TICKET,
.price = 0,
.description = sMysticTicketDesc,
@@ -4460,7 +9632,7 @@ const struct Item gItems[] =
[ITEM_AURORA_TICKET] =
{
- .name = _("AURORATICKET"),
+ .name = _("Aurora Ticket"),
.itemId = ITEM_AURORA_TICKET,
.price = 0,
.description = sAuroraTicketDesc,
@@ -4471,22 +9643,314 @@ const struct Item gItems[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
- [ITEM_POWDER_JAR] =
+ [ITEM_OLD_SEA_MAP] =
{
- .name = _("POWDER JAR"),
- .itemId = ITEM_POWDER_JAR,
+ .name = _("Old Sea Map"),
+ .itemId = ITEM_OLD_SEA_MAP,
.price = 0,
- .description = sPowderJarDesc,
+ .description = sOldSeaMapDesc,
.importance = 1,
.registrability = TRUE,
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_PowderJar,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_LETTER] =
+ {
+ .name = _("Letter"),
+ .itemId = ITEM_LETTER,
+ .price = 0,
+ .description = sLetterDesc,
+ .importance = 2,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_DEVON_PARTS] =
+ {
+ .name = _("Devon Parts"),
+ .itemId = ITEM_DEVON_PARTS,
+ .price = 0,
+ .description = sDevonPartsDesc,
+ .importance = 2,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_GO_GOGGLES] =
+ {
+ .name = _("Go-Goggles"),
+ .itemId = ITEM_GO_GOGGLES,
+ .price = 0,
+ .description = sGoGogglesDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_DEVON_SCOPE] =
+ {
+ .name = _("Devon Scope"),
+ .itemId = ITEM_DEVON_SCOPE,
+ .price = 0,
+ .description = sDevonScopeDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_BASEMENT_KEY] =
+ {
+ .name = _("Basement Key"),
+ .itemId = ITEM_BASEMENT_KEY,
+ .price = 0,
+ .description = sBasementKeyDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_SCANNER] =
+ {
+ .name = _("Scanner"),
+ .itemId = ITEM_SCANNER,
+ .price = 0,
+ .description = sScannerDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_STORAGE_KEY] =
+ {
+ .name = _("Storage Key"),
+ .itemId = ITEM_STORAGE_KEY,
+ .price = 0,
+ .description = sStorageKeyDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_KEY_TO_ROOM_1] =
+ {
+ .name = _("Key to Room 1"),
+ .itemId = ITEM_KEY_TO_ROOM_1,
+ .price = 0,
+ .description = sKeyToRoom1Desc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_KEY_TO_ROOM_2] =
+ {
+ .name = _("Key to Room 2"),
+ .itemId = ITEM_KEY_TO_ROOM_2,
+ .price = 0,
+ .description = sKeyToRoom2Desc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_KEY_TO_ROOM_4] =
+ {
+ .name = _("Key to Room 4"),
+ .itemId = ITEM_KEY_TO_ROOM_4,
+ .price = 0,
+ .description = sKeyToRoom4Desc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_KEY_TO_ROOM_6] =
+ {
+ .name = _("Key to Room 6"),
+ .itemId = ITEM_KEY_TO_ROOM_6,
+ .price = 0,
+ .description = sKeyToRoom6Desc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_METEORITE] =
+ {
+ .name = _("Meteorite"),
+ .itemId = ITEM_METEORITE,
+ .price = 0,
+ .description = sMeteoriteDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_MAGMA_EMBLEM] =
+ {
+ .name = _("Magma Emblem"),
+ .itemId = ITEM_MAGMA_EMBLEM,
+ .price = 0,
+ .description = sMagmaEmblemDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_CONTEST_PASS] =
+ {
+ .name = _("Contest Pass"),
+ .itemId = ITEM_CONTEST_PASS,
+ .price = 0,
+ .description = sContestPassDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_OAKS_PARCEL] =
+ {
+ .name = _("Oak's Parcel"),
+ .itemId = ITEM_OAKS_PARCEL,
+ .price = 0,
+ .description = sOaksParcelDesc,
+ .importance = 2,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_SECRET_KEY] =
+ {
+ .name = _("Secret Key"),
+ .itemId = ITEM_SECRET_KEY,
+ .price = 0,
+ .description = sSecretKeyDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_BIKE_VOUCHER] =
+ {
+ .name = _("Bike Voucher"),
+ .itemId = ITEM_BIKE_VOUCHER,
+ .price = 0,
+ .description = sBikeVoucherDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_GOLD_TEETH] =
+ {
+ .name = _("Gold Teeth"),
+ .itemId = ITEM_GOLD_TEETH,
+ .price = 0,
+ .description = sGoldTeethDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_CARD_KEY] =
+ {
+ .name = _("Card Key"),
+ .itemId = ITEM_CARD_KEY,
+ .price = 0,
+ .description = sCardKeyDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_LIFT_KEY] =
+ {
+ .name = _("Lift Key"),
+ .itemId = ITEM_LIFT_KEY,
+ .price = 0,
+ .description = sLiftKeyDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_SILPH_SCOPE] =
+ {
+ .name = _("Silph Scope"),
+ .itemId = ITEM_SILPH_SCOPE,
+ .price = 0,
+ .description = sSilphScopeDesc,
+ .importance = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_TRI_PASS] =
+ {
+ .name = _("Tri-Pass"),
+ .itemId = ITEM_TRI_PASS,
+ .price = 0,
+ .description = sTriPassDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_RAINBOW_PASS] =
+ {
+ .name = _("Rainbow Pass"),
+ .itemId = ITEM_RAINBOW_PASS,
+ .price = 0,
+ .description = sRainbowPassDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ },
+
+ [ITEM_TEA] =
+ {
+ .name = _("Tea"),
+ .itemId = ITEM_TEA,
+ .price = 0,
+ .description = sTeaDesc,
+ .importance = 1,
+ .registrability = TRUE,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = ITEM_USE_BAG_MENU,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
[ITEM_RUBY] =
{
- .name = _("RUBY"),
+ .name = _("Ruby"),
.itemId = ITEM_RUBY,
.price = 0,
.description = sRubyDesc,
@@ -4499,7 +9963,7 @@ const struct Item gItems[] =
[ITEM_SAPPHIRE] =
{
- .name = _("SAPPHIRE"),
+ .name = _("Sapphire"),
.itemId = ITEM_SAPPHIRE,
.price = 0,
.description = sSapphireDesc,
@@ -4509,32 +9973,4 @@ const struct Item gItems[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
},
-
-// Emerald-specific key items
-
- [ITEM_MAGMA_EMBLEM] =
- {
- .name = _("MAGMA EMBLEM"),
- .itemId = ITEM_MAGMA_EMBLEM,
- .price = 0,
- .description = sMagmaEmblemDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
-
- [ITEM_OLD_SEA_MAP] =
- {
- .name = _("OLD SEA MAP"),
- .itemId = ITEM_OLD_SEA_MAP,
- .price = 0,
- .description = sOldSeaMapDesc,
- .importance = 1,
- .registrability = TRUE,
- .pocket = POCKET_KEY_ITEMS,
- .type = ITEM_USE_BAG_MENU,
- .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- },
};
diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h
index 4a3a7a7194..bff13c504d 100644
--- a/src/data/lilycove_lady.h
+++ b/src/data/lilycove_lady.h
@@ -360,7 +360,7 @@ static const u16 sFavorLadyAcceptedItems_Shiny[] =
ITEM_HEAL_POWDER,
ITEM_X_SPEED,
ITEM_X_ATTACK,
- ITEM_X_DEFEND,
+ ITEM_X_DEFENSE,
ITEM_BLUE_FLUTE,
ITEM_YELLOW_FLUTE,
ITEM_RED_FLUTE,
diff --git a/src/data/object_events/berry_tree_graphics_tables.h b/src/data/object_events/berry_tree_graphics_tables.h
index fe41bda3b1..2969b6a78e 100755
--- a/src/data/object_events/berry_tree_graphics_tables.h
+++ b/src/data/object_events/berry_tree_graphics_tables.h
@@ -1,59 +1,3 @@
-static const struct SpriteFrameImage sPicTable_PechaBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Pecha[] = {3, 4, 4, 4, 4};
-
-static const struct SpriteFrameImage sPicTable_KelpsyBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Kelpsy[] = {3, 4, 2, 2, 2};
-
-static const struct SpriteFrameImage sPicTable_WepearBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Wepear[] = {3, 4, 2, 2, 2};
-
-static const struct SpriteFrameImage sPicTable_IapapaBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Iapapa[] = {3, 4, 3, 3, 3};
-
static const struct SpriteFrameImage sPicTable_CheriBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
@@ -68,187 +12,33 @@ static const struct SpriteFrameImage sPicTable_CheriBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Cheri[] = {3, 4, 4, 4, 4};
-static const struct SpriteFrameImage sPicTable_FigyBerryTree[] = {
+static const struct SpriteFrameImage sPicTable_ChestoBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 5),
+ overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 5),
};
-const u8 gBerryTreePaletteSlotTable_Figy[] = {3, 4, 3, 3, 3};
+const u8 gBerryTreePaletteSlotTable_Chesto[] = {3, 4, 2, 2, 2};
-static const struct SpriteFrameImage sPicTable_MagoBerryTree[] = {
+static const struct SpriteFrameImage sPicTable_PechaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 5),
+ overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_PechaBerryTree, 2, 4, 5),
};
-const u8 gBerryTreePaletteSlotTable_Mago[] = {3, 4, 3, 3, 3};
-
-static const struct SpriteFrameImage sPicTable_LumBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Lum[] = {3, 4, 4, 4, 4};
-
-static const struct SpriteFrameImage sPicTable_RazzBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Razz[] = {3, 4, 4, 4, 4};
-
-static const struct SpriteFrameImage sPicTable_GrepaBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Grepa[] = {3, 4, 3, 3, 3};
-
-static const struct SpriteFrameImage sPicTable_RabutaBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Rabuta[] = {3, 4, 4, 4, 4};
-
-static const struct SpriteFrameImage sPicTable_NomelBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Nomel[] = {3, 4, 3, 3, 3};
-
-static const struct SpriteFrameImage sPicTable_LeppaBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Leppa[] = {3, 4, 3, 3, 3};
-
-static const struct SpriteFrameImage sPicTable_LiechiBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Liechi[] = {3, 4, 4, 4, 4};
-
-static const struct SpriteFrameImage sPicTable_HondewBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Hondew[] = {3, 4, 5, 5, 5};
-
-static const struct SpriteFrameImage sPicTable_AguavBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Aguav[] = {3, 4, 4, 4, 4};
-
-static const struct SpriteFrameImage sPicTable_WikiBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Wiki[] = {3, 4, 3, 3, 3};
-
-static const struct SpriteFrameImage sPicTable_PomegBerryTree[] = {
- overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
- overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 5),
-};
-
-const u8 gBerryTreePaletteSlotTable_Pomeg[] = {3, 4, 3, 3, 3};
+const u8 gBerryTreePaletteSlotTable_Pecha[] = {3, 4, 4, 4, 4};
static const struct SpriteFrameImage sPicTable_RawstBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
@@ -264,33 +54,33 @@ static const struct SpriteFrameImage sPicTable_RawstBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Rawst[] = {3, 4, 4, 4, 4};
-static const struct SpriteFrameImage sPicTable_SpelonBerryTree[] = {
+static const struct SpriteFrameImage sPicTable_AspearBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 5),
+ overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 5),
};
-const u8 gBerryTreePaletteSlotTable_Spelon[] = {3, 4, 3, 3, 3};
+const u8 gBerryTreePaletteSlotTable_Aspear[] = {3, 4, 3, 3, 3};
-static const struct SpriteFrameImage sPicTable_ChestoBerryTree[] = {
+static const struct SpriteFrameImage sPicTable_LeppaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_ChestoBerryTree, 2, 4, 5),
+ overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_LeppaBerryTree, 2, 4, 5),
};
-const u8 gBerryTreePaletteSlotTable_Chesto[] = {3, 4, 2, 2, 2};
+const u8 gBerryTreePaletteSlotTable_Leppa[] = {3, 4, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_OranBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
@@ -320,6 +110,20 @@ static const struct SpriteFrameImage sPicTable_PersimBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Persim[] = {3, 4, 2, 2, 2};
+static const struct SpriteFrameImage sPicTable_LumBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_LumBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Lum[] = {3, 4, 4, 4, 4};
+
static const struct SpriteFrameImage sPicTable_SitrusBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
@@ -334,75 +138,159 @@ static const struct SpriteFrameImage sPicTable_SitrusBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Sitrus[] = {3, 4, 4, 4, 4};
-static const struct SpriteFrameImage sPicTable_AspearBerryTree[] = {
+static const struct SpriteFrameImage sPicTable_FigyBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_AspearBerryTree, 2, 4, 5),
+ overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_FigyBerryTree, 2, 4, 5),
};
-const u8 gBerryTreePaletteSlotTable_Aspear[] = {3, 4, 3, 3, 3};
+const u8 gBerryTreePaletteSlotTable_Figy[] = {3, 4, 3, 3, 3};
-static const struct SpriteFrameImage sPicTable_PamtreBerryTree[] = {
+static const struct SpriteFrameImage sPicTable_WikiBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 5),
+ overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_WikiBerryTree, 2, 4, 5),
};
-const u8 gBerryTreePaletteSlotTable_Pamtre[] = {3, 4, 2, 2, 2};
+const u8 gBerryTreePaletteSlotTable_Wiki[] = {3, 4, 3, 3, 3};
-static const struct SpriteFrameImage sPicTable_CornnBerryTree[] = {
+static const struct SpriteFrameImage sPicTable_MagoBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 5),
+ overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_MagoBerryTree, 2, 4, 5),
};
-const u8 gBerryTreePaletteSlotTable_Cornn[] = {3, 4, 2, 2, 2};
+const u8 gBerryTreePaletteSlotTable_Mago[] = {3, 4, 3, 3, 3};
-static const struct SpriteFrameImage sPicTable_LansatBerryTree[] = {
+static const struct SpriteFrameImage sPicTable_AguavBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 5),
+ overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_AguavBerryTree, 2, 4, 5),
};
-const u8 gBerryTreePaletteSlotTable_Lansat[] = {3, 4, 2, 2, 2};
+const u8 gBerryTreePaletteSlotTable_Aguav[] = {3, 4, 4, 4, 4};
-static const struct SpriteFrameImage sPicTable_DurinBerryTree[] = {
+static const struct SpriteFrameImage sPicTable_IapapaBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
- overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 0),
- overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 1),
- overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 2),
- overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 3),
- overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 4),
- overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 5),
+ overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_IapapaBerryTree, 2, 4, 5),
};
-const u8 gBerryTreePaletteSlotTable_Durin[] = {3, 4, 4, 4, 4};
+const u8 gBerryTreePaletteSlotTable_Iapapa[] = {3, 4, 3, 3, 3};
+
+static const struct SpriteFrameImage sPicTable_RazzBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_RazzBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Razz[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_WepearBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_WepearBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Wepear[] = {3, 4, 2, 2, 2};
+
+static const struct SpriteFrameImage sPicTable_PomegBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_PomegBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Pomeg[] = {3, 4, 3, 3, 3};
+
+static const struct SpriteFrameImage sPicTable_KelpsyBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_KelpsyBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Kelpsy[] = {3, 4, 2, 2, 2};
+
+static const struct SpriteFrameImage sPicTable_HondewBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_HondewBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Hondew[] = {3, 4, 5, 5, 5};
+
+static const struct SpriteFrameImage sPicTable_GrepaBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_GrepaBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Grepa[] = {3, 4, 3, 3, 3};
static const struct SpriteFrameImage sPicTable_TamatoBerryTree[] = {
overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
@@ -418,54 +306,401 @@ static const struct SpriteFrameImage sPicTable_TamatoBerryTree[] = {
const u8 gBerryTreePaletteSlotTable_Tamato[] = {3, 4, 2, 2, 2};
+static const struct SpriteFrameImage sPicTable_CornnBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_CornnBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Cornn[] = {3, 4, 2, 2, 2};
+
+static const struct SpriteFrameImage sPicTable_RabutaBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_RabutaBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Rabuta[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_NomelBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_NomelBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Nomel[] = {3, 4, 3, 3, 3};
+
+static const struct SpriteFrameImage sPicTable_SpelonBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_SpelonBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Spelon[] = {3, 4, 3, 3, 3};
+
+static const struct SpriteFrameImage sPicTable_PamtreBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_PamtreBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Pamtre[] = {3, 4, 2, 2, 2};
+
+static const struct SpriteFrameImage sPicTable_DurinBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_DurinBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Durin[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_OccaBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_OccaBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Occa[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_YacheBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_YacheBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Yache[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_ChopleBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_ChopleBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Chople[] = {3, 4, 3, 3, 3};
+
+static const struct SpriteFrameImage sPicTable_KebiaBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_KebiaBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Kebia[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_ShucaBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_ShucaBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Shuca[] = {3, 4, 5, 5, 5};
+
+static const struct SpriteFrameImage sPicTable_PayapaBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_PayapaBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Payapa[] = {3, 4, 5, 5, 5};
+
+static const struct SpriteFrameImage sPicTable_TangaBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_TangaBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Tanga[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_KasibBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_KasibBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Kasib[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_HabanBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_HabanBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Haban[] = {3, 4, 3, 3, 3};
+
+static const struct SpriteFrameImage sPicTable_ColburBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_ColburBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Colbur[] = {3, 4, 5, 5, 5};
+
+static const struct SpriteFrameImage sPicTable_RoseliBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_RoseliBerryTree, 2, 4, 5)
+};
+
+const u8 gBerryTreePaletteSlotTable_Roseli[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_LiechiBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_LiechiBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Liechi[] = {3, 4, 4, 4, 4};
+
+static const struct SpriteFrameImage sPicTable_LansatBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_LansatBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Lansat[] = {3, 4, 2, 2, 2};
+
+const struct SpriteFrameImage sPicTable_MicleBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_MicleBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Micle[] = {3, 4, 4, 4, 4};
+
+const struct SpriteFrameImage sPicTable_CustapBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_CustapBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Custap[] = {3, 4, 5, 5, 5};
+
+const struct SpriteFrameImage sPicTable_JabocaBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_JabocaBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Jaboca[] = {3, 4, 5, 5, 5};
+
+const struct SpriteFrameImage sPicTable_RowapBerryTree[] = {
+ overworld_frame(gObjectEventPic_BerryTreeDirtPile, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 0),
+ overworld_frame(gObjectEventPic_BerryTreeSprout, 2, 2, 1),
+ overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 2),
+ overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 3),
+ overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 4),
+ overworld_frame(gObjectEventPic_RowapBerryTree, 2, 4, 5),
+};
+
+const u8 gBerryTreePaletteSlotTable_Rowap[] = {3, 4, 5, 5, 5};
+
const u8 gDeadBerryTreeObjectEventGraphicsIdTable[] = {OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES};
const u8 gBerryTreeObjectEventGraphicsIdTable[] = {OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES, OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES};
const struct SpriteFrameImage *const gBerryTreePicTablePointers[] = {
- [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = sPicTable_CheriBerryTree,
- [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = sPicTable_ChestoBerryTree,
- [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PechaBerryTree,
- [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = sPicTable_RawstBerryTree,
- [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_AspearBerryTree,
- [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_LeppaBerryTree,
- [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_OranBerryTree,
- [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = sPicTable_PersimBerryTree,
- [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = sPicTable_LumBerryTree,
- [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = sPicTable_SitrusBerryTree,
- [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = sPicTable_FigyBerryTree,
- [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = sPicTable_WikiBerryTree,
- [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree,
- [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree,
- [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree,
- [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree,
- [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree,
- [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree,
- [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree,
- [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree,
- [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree,
- [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = sPicTable_KelpsyBerryTree,
- [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree,
- [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree,
- [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree,
- [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = sPicTable_TamatoBerryTree,
- [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree,
- [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree,
- [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree,
- [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_NomelBerryTree,
- [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = sPicTable_SpelonBerryTree,
- [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = sPicTable_PamtreBerryTree,
- [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree,
- [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree,
- [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree,
- [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LiechiBerryTree,
- [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree,
- [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree,
- [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree,
- [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree,
- [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = sPicTable_LansatBerryTree,
- [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree,
- [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree,
+ [ITEM_CHERI_BERRY - FIRST_BERRY_INDEX] = sPicTable_CheriBerryTree,
+ [ITEM_CHESTO_BERRY - FIRST_BERRY_INDEX] = sPicTable_ChestoBerryTree,
+ [ITEM_PECHA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PechaBerryTree,
+ [ITEM_RAWST_BERRY - FIRST_BERRY_INDEX] = sPicTable_RawstBerryTree,
+ [ITEM_ASPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_AspearBerryTree,
+ [ITEM_LEPPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_LeppaBerryTree,
+ [ITEM_ORAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_OranBerryTree,
+ [ITEM_PERSIM_BERRY - FIRST_BERRY_INDEX] = sPicTable_PersimBerryTree,
+ [ITEM_LUM_BERRY - FIRST_BERRY_INDEX] = sPicTable_LumBerryTree,
+ [ITEM_SITRUS_BERRY - FIRST_BERRY_INDEX] = sPicTable_SitrusBerryTree,
+ [ITEM_FIGY_BERRY - FIRST_BERRY_INDEX] = sPicTable_FigyBerryTree,
+ [ITEM_WIKI_BERRY - FIRST_BERRY_INDEX] = sPicTable_WikiBerryTree,
+ [ITEM_MAGO_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree,
+ [ITEM_AGUAV_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree,
+ [ITEM_IAPAPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree,
+ [ITEM_RAZZ_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree,
+ [ITEM_BLUK_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree,
+ [ITEM_NANAB_BERRY - FIRST_BERRY_INDEX] = sPicTable_MagoBerryTree,
+ [ITEM_WEPEAR_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree,
+ [ITEM_PINAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_IapapaBerryTree,
+ [ITEM_POMEG_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree,
+ [ITEM_KELPSY_BERRY - FIRST_BERRY_INDEX] = sPicTable_KelpsyBerryTree,
+ [ITEM_QUALOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_WepearBerryTree,
+ [ITEM_HONDEW_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree,
+ [ITEM_GREPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree,
+ [ITEM_TAMATO_BERRY - FIRST_BERRY_INDEX] = sPicTable_TamatoBerryTree,
+ [ITEM_CORNN_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree,
+ [ITEM_MAGOST_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree,
+ [ITEM_RABUTA_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree,
+ [ITEM_NOMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_NomelBerryTree,
+ [ITEM_SPELON_BERRY - FIRST_BERRY_INDEX] = sPicTable_SpelonBerryTree,
+ [ITEM_PAMTRE_BERRY - FIRST_BERRY_INDEX] = sPicTable_PamtreBerryTree,
+ [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = sPicTable_RabutaBerryTree,
+ [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree,
+ [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree,
+ [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree,
+ [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = sPicTable_OccaBerryTree,
+ [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree,
+ [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_RazzBerryTree,
+ [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = sPicTable_TamatoBerryTree,
+ [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = sPicTable_YacheBerryTree,
+ [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = sPicTable_ChopleBerryTree,
+ [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = sPicTable_KebiaBerryTree,
+ [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = sPicTable_ShucaBerryTree,
+ [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = sPicTable_RawstBerryTree,
+ [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PayapaBerryTree,
+ [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = sPicTable_TangaBerryTree,
+ [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LansatBerryTree,
+ [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = sPicTable_KasibBerryTree,
+ [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = sPicTable_HabanBerryTree,
+ [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = sPicTable_ColburBerryTree,
+ [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LiechiBerryTree,
+ [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = sPicTable_RoseliBerryTree,
+ [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = sPicTable_LiechiBerryTree,
+ [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = sPicTable_HondewBerryTree,
+ [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = sPicTable_AguavBerryTree,
+ [ITEM_PETAYA_BERRY - FIRST_BERRY_INDEX] = sPicTable_PomegBerryTree,
+ [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = sPicTable_GrepaBerryTree,
+ [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = sPicTable_LansatBerryTree,
+ [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = sPicTable_CornnBerryTree,
+ [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree,
+ [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = sPicTable_MicleBerryTree,
+ [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_CustapBerryTree,
+ [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = sPicTable_JabocaBerryTree,
+ [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = sPicTable_RowapBerryTree,
+ [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = sPicTable_PechaBerryTree,
+ [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = sPicTable_OccaBerryTree,
+ [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = sPicTable_DurinBerryTree,
};
const u8 *const gBerryTreePaletteSlotTablePointers[] = {
@@ -504,6 +739,24 @@ const u8 *const gBerryTreePaletteSlotTablePointers[] = {
[ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rabuta,
[ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Durin,
[ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Hondew,
+ [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Grepa,
+ [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Occa,
+ [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Cornn,
+ [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Razz,
+ [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Tamato,
+ [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Yache,
+ [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Chople,
+ [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Kebia,
+ [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Shuca,
+ [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rawst,
+ [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Payapa,
+ [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Tanga,
+ [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Lansat,
+ [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Kasib,
+ [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Haban,
+ [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Colbur,
+ [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Liechi,
+ [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Roseli,
[ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Liechi,
[ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Hondew,
[ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Aguav,
@@ -512,6 +765,13 @@ const u8 *const gBerryTreePaletteSlotTablePointers[] = {
[ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Lansat,
[ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Cornn,
[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Durin,
+ [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Micle,
+ [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Custap,
+ [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Jaboca,
+ [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Rowap,
+ [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Pecha,
+ [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Occa,
+ [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = gBerryTreePaletteSlotTable_Durin,
};
const u8 *const gBerryTreeObjectEventGraphicsIdTablePointers[] = {
@@ -550,6 +810,24 @@ const u8 *const gBerryTreeObjectEventGraphicsIdTablePointers[] = {
[ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
[ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
[ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
[ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
[ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
[ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
@@ -558,8 +836,11 @@ const u8 *const gBerryTreeObjectEventGraphicsIdTablePointers[] = {
[ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
[ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
- // 3 unused berries.
- [ITEM_UNUSED_BERRY_1 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
- [ITEM_UNUSED_BERRY_2 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
- [ITEM_UNUSED_BERRY_3 - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
+ [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = gBerryTreeObjectEventGraphicsIdTable,
};
diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h
index 8070e98774..2e1b6b3b31 100755
--- a/src/data/object_events/movement_action_func_tables.h
+++ b/src/data/object_events/movement_action_func_tables.h
@@ -253,9 +253,9 @@ u8 MovementAction_AcroEndWheelieMoveRight_Step1(struct ObjectEvent *, struct Spr
u8 MovementAction_Levitate_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_StopLevitate_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_StopLevitateAtTop_Step0(struct ObjectEvent *, struct Sprite *);
-u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *, struct Sprite *);
+u8 MovementAction_LockAnim_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_Finish(struct ObjectEvent *, struct Sprite *);
-u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *, struct Sprite *);
+u8 MovementAction_UnlockAnim_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_FlyUp_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_FlyUp_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_Fly_Finish(struct ObjectEvent *, struct Sprite *);
@@ -410,8 +410,8 @@ u8 (*const gMovementActionFuncs_WalkSlowDiagonalUpLeft[])(struct ObjectEvent *,
u8 (*const gMovementActionFuncs_WalkSlowDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkSlowDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkSlowDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *);
-u8 (*const gMovementActionFuncs_StoreAndLockAnim[])(struct ObjectEvent *, struct Sprite *);
-u8 (*const gMovementActionFuncs_FreeAndUnlockAnim[])(struct ObjectEvent *, struct Sprite *);
+u8 (*const gMovementActionFuncs_LockAnim[])(struct ObjectEvent *, struct Sprite *);
+u8 (*const gMovementActionFuncs_UnlockAnim[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkLeftAffine[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkRightAffine[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_Levitate[])(struct ObjectEvent *, struct Sprite *);
@@ -570,8 +570,8 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *)
[MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT] = gMovementActionFuncs_WalkSlowDiagonalUpRight,
[MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT] = gMovementActionFuncs_WalkSlowDiagonalDownLeft,
[MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT] = gMovementActionFuncs_WalkSlowDiagonalDownRight,
- [MOVEMENT_ACTION_STORE_AND_LOCK_ANIM] = gMovementActionFuncs_StoreAndLockAnim,
- [MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM] = gMovementActionFuncs_FreeAndUnlockAnim,
+ [MOVEMENT_ACTION_LOCK_ANIM] = gMovementActionFuncs_LockAnim,
+ [MOVEMENT_ACTION_UNLOCK_ANIM] = gMovementActionFuncs_UnlockAnim,
[MOVEMENT_ACTION_WALK_LEFT_AFFINE] = gMovementActionFuncs_WalkLeftAffine,
[MOVEMENT_ACTION_WALK_RIGHT_AFFINE] = gMovementActionFuncs_WalkRightAffine,
[MOVEMENT_ACTION_LEVITATE] = gMovementActionFuncs_Levitate,
diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h
index 6ee56cc78e..2f2cf689be 100755
--- a/src/data/object_events/object_event_graphics.h
+++ b/src/data/object_events/object_event_graphics.h
@@ -255,36 +255,51 @@ const u16 gObjectEventPal_SSTidal[] = INCBIN_U16("graphics/object_events/palette
const u32 gFieldEffectObjectPic_Sparkle[] = INCBIN_U32("graphics/field_effects/pics/sparkle.4bpp");
const u32 gObjectEventPic_BerryTreeDirtPile[] = INCBIN_U32("graphics/object_events/pics/berry_trees/dirt_pile.4bpp");
const u32 gObjectEventPic_BerryTreeSprout[] = INCBIN_U32("graphics/object_events/pics/berry_trees/sprout.4bpp");
-const u32 gObjectEventPic_PechaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pecha.4bpp");
-const u32 gObjectEventPic_KelpsyBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/kelpsy.4bpp");
-const u32 gObjectEventPic_WepearBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/wepear.4bpp");
-const u32 gObjectEventPic_IapapaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/iapapa.4bpp");
const u32 gObjectEventPic_CheriBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/cheri.4bpp");
-const u32 gObjectEventPic_FigyBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/figy.4bpp");
-const u32 gObjectEventPic_MagoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/mago.4bpp");
-const u32 gObjectEventPic_LumBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/lum.4bpp");
-const u32 gObjectEventPic_RazzBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/razz.4bpp");
-const u32 gObjectEventPic_GrepaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/grepa.4bpp");
-const u32 gObjectEventPic_RabutaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rabuta.4bpp");
-const u32 gObjectEventPic_NomelBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/nomel.4bpp");
-const u32 gObjectEventPic_LeppaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/leppa.4bpp");
-const u32 gObjectEventPic_LiechiBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/liechi.4bpp");
-const u32 gObjectEventPic_HondewBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/hondew.4bpp");
-const u32 gObjectEventPic_AguavBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/aguav.4bpp");
-const u32 gObjectEventPic_WikiBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/wiki.4bpp");
-const u32 gObjectEventPic_PomegBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pomeg.4bpp");
-const u32 gObjectEventPic_RawstBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rawst.4bpp");
-const u32 gObjectEventPic_SpelonBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/spelon.4bpp");
const u32 gObjectEventPic_ChestoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/chesto.4bpp");
+const u32 gObjectEventPic_PechaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pecha.4bpp");
+const u32 gObjectEventPic_RawstBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rawst.4bpp");
+const u32 gObjectEventPic_AspearBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/aspear.4bpp");
+const u32 gObjectEventPic_LeppaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/leppa.4bpp");
const u32 gObjectEventPic_OranBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/oran.4bpp");
const u32 gObjectEventPic_PersimBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/persim.4bpp");
+const u32 gObjectEventPic_LumBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/lum.4bpp");
const u32 gObjectEventPic_SitrusBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/sitrus.4bpp");
-const u32 gObjectEventPic_AspearBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/aspear.4bpp");
-const u32 gObjectEventPic_PamtreBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pamtre.4bpp");
-const u32 gObjectEventPic_CornnBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/cornn.4bpp");
-const u32 gObjectEventPic_LansatBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/lansat.4bpp");
-const u32 gObjectEventPic_DurinBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/durin.4bpp");
+const u32 gObjectEventPic_FigyBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/figy.4bpp");
+const u32 gObjectEventPic_WikiBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/wiki.4bpp");
+const u32 gObjectEventPic_MagoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/mago.4bpp");
+const u32 gObjectEventPic_AguavBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/aguav.4bpp");
+const u32 gObjectEventPic_IapapaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/iapapa.4bpp");
+const u32 gObjectEventPic_RazzBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/razz.4bpp");
+const u32 gObjectEventPic_WepearBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/wepear.4bpp");
+const u32 gObjectEventPic_PomegBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pomeg.4bpp");
+const u32 gObjectEventPic_KelpsyBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/kelpsy.4bpp");
+const u32 gObjectEventPic_HondewBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/hondew.4bpp");
+const u32 gObjectEventPic_GrepaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/grepa.4bpp");
const u32 gObjectEventPic_TamatoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/tamato.4bpp");
+const u32 gObjectEventPic_CornnBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/cornn.4bpp");
+const u32 gObjectEventPic_RabutaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rabuta.4bpp");
+const u32 gObjectEventPic_NomelBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/nomel.4bpp");
+const u32 gObjectEventPic_SpelonBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/spelon.4bpp");
+const u32 gObjectEventPic_PamtreBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/pamtre.4bpp");
+const u32 gObjectEventPic_DurinBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/durin.4bpp");
+const u32 gObjectEventPic_OccaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/occa.4bpp");
+const u32 gObjectEventPic_YacheBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/yache.4bpp");
+const u32 gObjectEventPic_ChopleBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/chople.4bpp");
+const u32 gObjectEventPic_KebiaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/kebia.4bpp");
+const u32 gObjectEventPic_ShucaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/shuca.4bpp");
+const u32 gObjectEventPic_PayapaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/payapa.4bpp");
+const u32 gObjectEventPic_TangaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/tanga.4bpp");
+const u32 gObjectEventPic_KasibBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/kasib.4bpp");
+const u32 gObjectEventPic_HabanBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/haban.4bpp");
+const u32 gObjectEventPic_ColburBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/colbur.4bpp");
+const u32 gObjectEventPic_RoseliBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/roseli.4bpp");
+const u32 gObjectEventPic_LiechiBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/liechi.4bpp");
+const u32 gObjectEventPic_LansatBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/lansat.4bpp");
+const u32 gObjectEventPic_MicleBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/micle.4bpp");
+const u32 gObjectEventPic_CustapBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/custap.4bpp");
+const u32 gObjectEventPic_JabocaBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/jaboca.4bpp");
+const u32 gObjectEventPic_RowapBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/rowap.4bpp");
const u32 gFieldEffectObjectPic_SurfBlob[] = INCBIN_U32("graphics/field_effects/pics/surf_blob.4bpp");
const u32 gObjectEventPic_QuintyPlump[] = INCBIN_U32("graphics/object_events/pics/people/quinty_plump.4bpp");
const u16 gObjectEventPal_QuintyPlump[] = INCBIN_U16("graphics/object_events/palettes/quinty_plump.gbapal");
diff --git a/src/data/party_menu.h b/src/data/party_menu.h
index 2e3a56b221..9411ec3bb7 100644
--- a/src/data/party_menu.h
+++ b/src/data/party_menu.h
@@ -1,9 +1,3 @@
-enum {
- TAG_POKEBALL = 1200,
- TAG_POKEBALL_SMALL,
- TAG_STATUS_ICONS,
-};
-
static const struct BgTemplate sPartyMenuBgTemplates[] =
{
{
@@ -35,12 +29,6 @@ static const struct BgTemplate sPartyMenuBgTemplates[] =
},
};
-enum
-{
- PARTY_BOX_LEFT_COLUMN,
- PARTY_BOX_RIGHT_COLUMN
-};
-
static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] =
{
[PARTY_BOX_LEFT_COLUMN] =
@@ -663,51 +651,6 @@ static const u16 sUnusedData[] =
0x0121, 0x013b, 0x000f, 0x0013, 0x0039, 0x0046, 0x0094, 0x00f9, 0x007f, 0x0123,
};
-enum
-{
- MENU_SUMMARY,
- MENU_SWITCH,
- MENU_CANCEL1,
- MENU_ITEM,
- MENU_GIVE,
- MENU_TAKE_ITEM,
- MENU_MAIL,
- MENU_TAKE_MAIL,
- MENU_READ,
- MENU_CANCEL2,
- MENU_SHIFT,
- MENU_SEND_OUT,
- MENU_ENTER,
- MENU_NO_ENTRY,
- MENU_STORE,
- MENU_REGISTER,
- MENU_TRADE1,
- MENU_TRADE2,
- MENU_TOSS,
- MENU_FIELD_MOVES,
-};
-
-enum
-{
- FIELD_MOVE_CUT,
- FIELD_MOVE_FLASH,
- FIELD_MOVE_ROCK_SMASH,
- FIELD_MOVE_STRENGTH,
- FIELD_MOVE_SURF,
- FIELD_MOVE_FLY,
- FIELD_MOVE_DIVE,
- FIELD_MOVE_WATERFALL,
- FIELD_MOVE_TELEPORT,
- FIELD_MOVE_DIG,
- FIELD_MOVE_SECRET_POWER,
- FIELD_MOVE_MILK_DRINK,
- FIELD_MOVE_SOFT_BOILED,
- FIELD_MOVE_SWEET_SCENT,
-};
-
-// What a weird choice of table termination;
-#define FIELD_MOVE_TERMINATOR MOVE_SWORDS_DANCE
-
struct
{
const u8 *text;
@@ -763,25 +706,6 @@ static const u8 sPartyMenuAction_TradeSummaryCancel1[] = {MENU_TRADE1, MENU_SUMM
static const u8 sPartyMenuAction_TradeSummaryCancel2[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1};
static const u8 sPartyMenuAction_TakeItemTossCancel[] = {MENU_TAKE_ITEM, MENU_TOSS, MENU_CANCEL1};
-// IDs for the action lists that appear when a party mon is selected
-enum
-{
- ACTIONS_NONE,
- ACTIONS_SWITCH,
- ACTIONS_SHIFT,
- ACTIONS_SEND_OUT,
- ACTIONS_ENTER,
- ACTIONS_NO_ENTRY,
- ACTIONS_STORE,
- ACTIONS_SUMMARY_ONLY,
- ACTIONS_ITEM,
- ACTIONS_MAIL,
- ACTIONS_REGISTER,
- ACTIONS_TRADE,
- ACTIONS_SPIN_TRADE,
- ACTIONS_TAKEITEM_TOSS
-};
-
static const u8 *const sPartyMenuActions[] =
{
[ACTIONS_NONE] = NULL,
@@ -818,17 +742,32 @@ static const u8 sPartyMenuActionCounts[] =
[ACTIONS_TAKEITEM_TOSS] = ARRAY_COUNT(sPartyMenuAction_TakeItemTossCancel)
};
-static const u16 sFieldMoves[] =
+static const u16 sFieldMoves[FIELD_MOVES_COUNT + 1] =
{
- MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, MOVE_TELEPORT,
- MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, FIELD_MOVE_TERMINATOR
+ [FIELD_MOVE_CUT] = MOVE_CUT,
+ [FIELD_MOVE_FLASH] = MOVE_FLASH,
+ [FIELD_MOVE_ROCK_SMASH] = MOVE_ROCK_SMASH,
+ [FIELD_MOVE_STRENGTH] = MOVE_STRENGTH,
+ [FIELD_MOVE_SURF] = MOVE_SURF,
+ [FIELD_MOVE_FLY] = MOVE_FLY,
+ [FIELD_MOVE_DIVE] = MOVE_DIVE,
+ [FIELD_MOVE_WATERFALL] = MOVE_WATERFALL,
+ [FIELD_MOVE_TELEPORT] = MOVE_TELEPORT,
+ [FIELD_MOVE_DIG] = MOVE_DIG,
+ [FIELD_MOVE_SECRET_POWER] = MOVE_SECRET_POWER,
+ [FIELD_MOVE_MILK_DRINK] = MOVE_MILK_DRINK,
+ [FIELD_MOVE_SOFT_BOILED] = MOVE_SOFT_BOILED,
+ [FIELD_MOVE_SWEET_SCENT] = MOVE_SWEET_SCENT,
+ // NOTE: This value is used as the terminal value for the table. There's no reason to do this, as the size of the table is known.
+ // Whichever move shares this value (MOVE_SWORDS_DANCE by default) if present will be treated as the end of the array rather than a field move.
+ [FIELD_MOVES_COUNT] = FIELD_MOVES_COUNT
};
struct
{
bool8 (*fieldMoveFunc)(void);
u8 msgId;
-} static const sFieldMoveCursorCallbacks[] =
+} static const sFieldMoveCursorCallbacks[FIELD_MOVES_COUNT] =
{
[FIELD_MOVE_CUT] = {SetUpFieldMove_Cut, PARTY_MSG_NOTHING_TO_CUT},
[FIELD_MOVE_FLASH] = {SetUpFieldMove_Flash, PARTY_MSG_CANT_USE_HERE},
@@ -867,7 +806,7 @@ static const struct OamData sOamData_HeldItem =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -899,23 +838,23 @@ static const union AnimCmd *const sSpriteAnimTable_HeldItem[] =
static const struct SpriteSheet sSpriteSheet_HeldItem =
{
- sHeldItemGfx, sizeof(sHeldItemGfx), 0xd750
+ .data = sHeldItemGfx, .size = sizeof(sHeldItemGfx), .tag = TAG_HELD_ITEM
};
static const struct SpritePalette sSpritePalette_HeldItem =
{
- sHeldItemPalette, 0xd750
+ .data = sHeldItemPalette, .tag = TAG_HELD_ITEM
};
static const struct SpriteTemplate sSpriteTemplate_HeldItem =
{
- 0xd750,
- 0xd750,
- &sOamData_HeldItem,
- sSpriteAnimTable_HeldItem,
- NULL,
- gDummySpriteAffineAnimTable,
- SpriteCallbackDummy
+ .tileTag = TAG_HELD_ITEM,
+ .paletteTag = TAG_HELD_ITEM,
+ .oam = &sOamData_HeldItem,
+ .anims = sSpriteAnimTable_HeldItem,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
};
static const struct OamData sOamData_MenuPokeball =
@@ -923,7 +862,7 @@ static const struct OamData sOamData_MenuPokeball =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -980,7 +919,7 @@ static const struct OamData sOamData_MenuPokeballSmall =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -1061,7 +1000,7 @@ static const struct OamData sOamData_StatusCondition =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
@@ -1216,6 +1155,56 @@ static const u16 sTMHMMoves[] =
[ITEM_TM48 - ITEM_TM01] = MOVE_SKILL_SWAP,
[ITEM_TM49 - ITEM_TM01] = MOVE_SNATCH,
[ITEM_TM50 - ITEM_TM01] = MOVE_OVERHEAT,
+ [ITEM_TM51 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM52 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM53 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM54 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM55 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM56 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM57 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM58 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM59 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM60 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM61 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM62 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM63 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM64 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM65 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM66 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM67 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM68 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM69 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM70 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM71 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM72 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM73 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM74 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM75 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM76 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM77 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM78 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM79 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM80 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM81 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM82 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM83 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM84 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM85 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM86 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM87 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM88 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM89 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM90 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM91 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM92 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM93 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM94 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM95 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM96 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM97 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM98 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM99 - ITEM_TM01] = MOVE_NONE, // Todo
+ [ITEM_TM100 - ITEM_TM01] = MOVE_NONE, // Todo
[ITEM_HM01 - ITEM_TM01] = MOVE_CUT,
[ITEM_HM02 - ITEM_TM01] = MOVE_FLY,
[ITEM_HM03 - ITEM_TM01] = MOVE_SURF,
diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h
index 2e56cab4b4..41b5143cf1 100644
--- a/src/data/pokemon/base_stats.h
+++ b/src/data/pokemon/base_stats.h
@@ -1558,9 +1558,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 255,
.expYield = 60,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_GRIP_CLAW,
- #endif
+ .itemRare = ITEM_GRIP_CLAW,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -1585,9 +1583,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 90,
.expYield = 158,
.evYield_Defense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_GRIP_CLAW,
- #endif
+ .itemRare = ITEM_GRIP_CLAW,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -1991,9 +1987,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 255,
.expYield = 64,
.evYield_SpAttack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ABSORB_BULB,
- #endif
+ .itemRare = ITEM_ABSORB_BULB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -2018,9 +2012,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 120,
.expYield = 138,
.evYield_SpAttack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ABSORB_BULB,
- #endif
+ .itemRare = ITEM_ABSORB_BULB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -2049,9 +2041,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 221,
.evYield_SpAttack = 3,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ABSORB_BULB,
- #endif
+ .itemRare = ITEM_ABSORB_BULB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -2154,9 +2144,7 @@ const struct BaseStats gBaseStats[] =
.expYield = 158,
.evYield_Speed = 1,
.evYield_SpAttack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SHED_SHELL,
- #endif
+ .itemRare = ITEM_SHED_SHELL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -2914,9 +2902,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 63,
.evYield_HP = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LAGGING_TAIL,
- #endif
+ .itemRare = ITEM_LAGGING_TAIL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -3020,7 +3006,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 132,
.evYield_Attack = 1,
- .itemRare = ITEM_STICK,
+ .itemRare = ITEM_LEEK,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -3147,9 +3133,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 65,
.evYield_HP = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_BLACK_SLUDGE,
- #endif
+ .itemRare = ITEM_BLACK_SLUDGE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -3175,9 +3159,7 @@ const struct BaseStats gBaseStats[] =
.expYield = 175,
.evYield_HP = 1,
.evYield_Attack = 1,
- #ifdef ITEM_EXPANSION
- .itemCommon = ITEM_BLACK_SLUDGE,
- #endif
+ .itemCommon = ITEM_BLACK_SLUDGE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -3502,9 +3484,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 90,
.expYield = 65,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_PSYCHIC_SEED,
- #endif
+ .itemRare = ITEM_PSYCHIC_SEED,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -3655,9 +3635,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 77,
.evYield_HP = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LAGGING_TAIL,
- #endif
+ .itemRare = ITEM_LAGGING_TAIL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -4083,9 +4061,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 172,
.evYield_Speed = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ELECTIRIZER,
- #endif
+ .itemRare = ITEM_ELECTIRIZER,
.genderRatio = PERCENT_FEMALE(25),
.eggCycles = 25,
.friendship = 70,
@@ -4110,9 +4086,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 173,
.evYield_SpAttack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_MAGMARIZER,
- #endif
+ .itemRare = ITEM_MAGMARIZER,
.genderRatio = PERCENT_FEMALE(25),
.eggCycles = 25,
.friendship = 70,
@@ -4260,9 +4234,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 35,
.expYield = 101,
.evYield_HP = 1,
- #ifdef ITEM_EXPANSION
- .itemCommon = ITEM_QUICK_POWDER,
- #endif
+ .itemCommon = ITEM_QUICK_POWDER,
.itemRare = ITEM_METAL_POWDER,
.genderRatio = MON_GENDERLESS,
.eggCycles = 20,
@@ -5504,9 +5476,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 221,
.evYield_SpDefense = 3,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ABSORB_BULB,
- #endif
+ .itemRare = ITEM_ABSORB_BULB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -5790,9 +5760,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 75,
.expYield = 78,
.evYield_Speed = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_WIDE_LENS,
- #endif
+ .itemRare = ITEM_WIDE_LENS,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -6501,9 +6469,7 @@ const struct BaseStats gBaseStats[] =
.expYield = 144,
.evYield_Defense = 1,
.evYield_SpDefense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LUMINOUS_MOSS,
- #endif
+ .itemRare = ITEM_LUMINOUS_MOSS,
.genderRatio = PERCENT_FEMALE(75),
.eggCycles = 20,
.friendship = 70,
@@ -6922,9 +6888,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 72,
.evYield_Speed = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ELECTIRIZER,
- #endif
+ .itemRare = ITEM_ELECTIRIZER,
.genderRatio = PERCENT_FEMALE(25),
.eggCycles = 25,
.friendship = 70,
@@ -6949,9 +6913,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 73,
.evYield_Speed = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_MAGMARIZER,
- #endif
+ .itemRare = ITEM_MAGMARIZER,
.genderRatio = PERCENT_FEMALE(25),
.eggCycles = 25,
.friendship = 70,
@@ -7639,9 +7601,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 178,
.evYield_SpAttack = 3,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SHED_SHELL,
- #endif
+ .itemRare = ITEM_SHED_SHELL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -7690,9 +7650,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 173,
.evYield_SpDefense = 3,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SHED_SHELL,
- #endif
+ .itemRare = ITEM_SHED_SHELL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -7792,9 +7750,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 255,
.expYield = 44,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_POWER_HERB,
- #endif
+ .itemRare = ITEM_POWER_HERB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -7819,9 +7775,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 120,
.expYield = 119,
.evYield_Attack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_POWER_HERB,
- #endif
+ .itemRare = ITEM_POWER_HERB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -7846,9 +7800,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 216,
.evYield_Attack = 3,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_POWER_HERB,
- #endif
+ .itemRare = ITEM_POWER_HERB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -7925,9 +7877,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 54,
.evYield_Speed = 1,
- #ifdef ITEM_EXPANSION
- .itemCommon = ITEM_PRETTY_FEATHER,
- #endif
+ .itemCommon = ITEM_PRETTY_FEATHER,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -7956,9 +7906,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 154,
.evYield_Defense = 2,
- #ifdef ITEM_EXPANSION
- .itemCommon = ITEM_PRETTY_FEATHER,
- #endif
+ .itemCommon = ITEM_PRETTY_FEATHER,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -8569,9 +8517,7 @@ const struct BaseStats gBaseStats[] =
.expYield = 133,
.evYield_Attack = 1,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_WIDE_LENS,
- #endif
+ .itemRare = ITEM_WIDE_LENS,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 25,
.friendship = 35,
@@ -8602,9 +8548,7 @@ const struct BaseStats gBaseStats[] =
.expYield = 133,
.evYield_Attack = 1,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_IRON_BALL,
- #endif
+ .itemRare = ITEM_IRON_BALL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -8800,9 +8744,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 200,
.expYield = 142,
.evYield_Speed = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_CELL_BATTERY,
- #endif
+ .itemRare = ITEM_CELL_BATTERY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -8827,9 +8769,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 200,
.expYield = 142,
.evYield_Speed = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_CELL_BATTERY,
- #endif
+ .itemRare = ITEM_CELL_BATTERY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -9322,9 +9262,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 67,
.evYield_SpAttack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_STICKY_BARB,
- #endif
+ .itemRare = ITEM_STICKY_BARB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 35,
@@ -9350,9 +9288,7 @@ const struct BaseStats gBaseStats[] =
.expYield = 166,
.evYield_Attack = 1,
.evYield_SpAttack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_STICKY_BARB,
- #endif
+ .itemRare = ITEM_STICKY_BARB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 35,
@@ -9451,9 +9387,7 @@ const struct BaseStats gBaseStats[] =
.expYield = 160,
.evYield_Attack = 1,
.evYield_SpAttack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SHED_SHELL,
- #endif
+ .itemRare = ITEM_SHED_SHELL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -9634,9 +9568,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 255,
.expYield = 60,
.evYield_SpDefense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LIGHT_CLAY,
- #endif
+ .itemRare = ITEM_LIGHT_CLAY,
.genderRatio = MON_GENDERLESS,
.eggCycles = 20,
.friendship = 70,
@@ -9661,9 +9593,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 90,
.expYield = 175,
.evYield_SpDefense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LIGHT_CLAY,
- #endif
+ .itemRare = ITEM_LIGHT_CLAY,
.genderRatio = MON_GENDERLESS,
.eggCycles = 20,
.friendship = 70,
@@ -9688,9 +9618,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 71,
.evYield_SpDefense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_BIG_ROOT,
- #endif
+ .itemRare = ITEM_BIG_ROOT,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 30,
.friendship = 70,
@@ -9715,9 +9643,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 173,
.evYield_SpDefense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_BIG_ROOT,
- #endif
+ .itemRare = ITEM_BIG_ROOT,
.genderRatio = PERCENT_FEMALE(12.5),
.eggCycles = 30,
.friendship = 70,
@@ -10069,9 +9995,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 60,
.evYield_HP = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SNOWBALL,
- #endif
+ .itemRare = ITEM_SNOWBALL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -10713,6 +10637,7 @@ const struct BaseStats gBaseStats[] =
.flags = FLAG_MYTHICAL,
},
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] =
{
.baseHP = 55,
@@ -11074,9 +10999,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 255,
.expYield = 39,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_METRONOME,
- #endif
+ .itemRare = ITEM_METRONOME,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -11102,9 +11025,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 134,
.evYield_Attack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_METRONOME,
- #endif
+ .itemRare = ITEM_METRONOME,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -11955,9 +11876,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 130,
.expYield = 110,
.evYield_HP = 1,
- #ifdef ITEM_EXPANSION
- .itemCommon = ITEM_OVAL_STONE,
- #endif
+ .itemCommon = ITEM_OVAL_STONE,
.genderRatio = MON_FEMALE,
.eggCycles = 40,
.friendship = 140,
@@ -11982,9 +11901,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 30,
.expYield = 144,
.evYield_Attack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_METRONOME,
- #endif
+ .itemRare = ITEM_METRONOME,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 35,
@@ -12281,9 +12198,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 140,
.expYield = 60,
.evYield_Attack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_BLACK_SLUDGE,
- #endif
+ .itemRare = ITEM_BLACK_SLUDGE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 10,
.friendship = 100,
@@ -12308,9 +12223,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 75,
.expYield = 172,
.evYield_Attack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_BLACK_SLUDGE,
- #endif
+ .itemRare = ITEM_BLACK_SLUDGE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -12533,9 +12446,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 30,
.expYield = 180,
.evYield_HP = 3,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LAGGING_TAIL,
- #endif
+ .itemRare = ITEM_LAGGING_TAIL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -12608,9 +12519,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 30,
.expYield = 243,
.evYield_Attack = 3,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ELECTIRIZER,
- #endif
+ .itemRare = ITEM_ELECTIRIZER,
.genderRatio = PERCENT_FEMALE(25),
.eggCycles = 25,
.friendship = 70,
@@ -12635,9 +12544,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 30,
.expYield = 243,
.evYield_SpAttack = 3,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_MAGMARIZER,
- #endif
+ .itemRare = ITEM_MAGMARIZER,
.genderRatio = PERCENT_FEMALE(25),
.eggCycles = 25,
.friendship = 70,
@@ -12692,9 +12599,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 30,
.expYield = 180,
.evYield_Attack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_WIDE_LENS,
- #endif
+ .itemRare = ITEM_WIDE_LENS,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -14637,9 +14542,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 56,
.evYield_Speed = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ABSORB_BULB,
- #endif
+ .itemRare = ITEM_ABSORB_BULB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -14669,9 +14572,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 75,
.expYield = 168,
.evYield_Speed = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ABSORB_BULB,
- #endif
+ .itemRare = ITEM_ABSORB_BULB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -14696,9 +14597,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 56,
.evYield_SpAttack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ABSORB_BULB,
- #endif
+ .itemRare = ITEM_ABSORB_BULB,
.genderRatio = MON_FEMALE,
.eggCycles = 20,
.friendship = 70,
@@ -14723,9 +14622,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 75,
.expYield = 168,
.evYield_SpAttack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ABSORB_BULB,
- #endif
+ .itemRare = ITEM_ABSORB_BULB,
.genderRatio = MON_FEMALE,
.eggCycles = 20,
.friendship = 70,
@@ -14981,9 +14878,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 180,
.expYield = 70,
.evYield_Attack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SHED_SHELL,
- #endif
+ .itemRare = ITEM_SHED_SHELL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 35,
@@ -15009,9 +14904,7 @@ const struct BaseStats gBaseStats[] =
.expYield = 171,
.evYield_Defense = 1,
.evYield_SpDefense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SHED_SHELL,
- #endif
+ .itemRare = ITEM_SHED_SHELL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -15232,9 +15125,7 @@ const struct BaseStats gBaseStats[] =
.expYield = 166,
.evYield_Attack = 2,
.itemCommon = ITEM_SILK_SCARF,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_BLACK_SLUDGE,
- #endif
+ .itemRare = ITEM_BLACK_SLUDGE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -15872,9 +15763,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 255,
.expYield = 61,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_STICKY_BARB,
- #endif
+ .itemRare = ITEM_STICKY_BARB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -15899,9 +15788,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 90,
.expYield = 171,
.evYield_Defense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_STICKY_BARB,
- #endif
+ .itemRare = ITEM_STICKY_BARB,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -16502,9 +16389,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 61,
.evYield_Attack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LIGHT_CLAY,
- #endif
+ .itemRare = ITEM_LIGHT_CLAY,
.genderRatio = MON_GENDERLESS,
.eggCycles = 25,
.friendship = 70,
@@ -16529,9 +16414,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 90,
.expYield = 169,
.evYield_Attack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LIGHT_CLAY,
- #endif
+ .itemRare = ITEM_LIGHT_CLAY,
.genderRatio = MON_GENDERLESS,
.eggCycles = 25,
.friendship = 70,
@@ -18379,9 +18262,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 60,
.evYield_SpDefense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SHED_SHELL,
- #endif
+ .itemRare = ITEM_SHED_SHELL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 40,
.friendship = 35,
@@ -18406,9 +18287,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 158,
.evYield_SpDefense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SHED_SHELL,
- #endif
+ .itemRare = ITEM_SHED_SHELL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 40,
.friendship = 35,
@@ -19133,9 +19012,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 120,
.expYield = 140,
.evYield_Defense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_CELL_BATTERY,
- #endif
+ .itemRare = ITEM_CELL_BATTERY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -19386,9 +19263,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 77,
.evYield_Attack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LIGHT_CLAY,
- #endif
+ .itemRare = ITEM_LIGHT_CLAY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -19413,9 +19288,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 60,
.expYield = 175,
.evYield_Attack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LIGHT_CLAY,
- #endif
+ .itemRare = ITEM_LIGHT_CLAY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -19690,9 +19563,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 235,
.expYield = 42,
.evYield_HP = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_GRASSY_SEED,
- #endif
+ .itemRare = ITEM_GRASSY_SEED,
.genderRatio = MON_FEMALE,
.eggCycles = 20,
.friendship = 70,
@@ -19717,9 +19588,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 120,
.expYield = 102,
.evYield_Speed = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_GRASSY_SEED,
- #endif
+ .itemRare = ITEM_GRASSY_SEED,
.genderRatio = MON_FEMALE,
.eggCycles = 20,
.friendship = 70,
@@ -19744,9 +19613,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 230,
.evYield_Attack = 3,
- #ifdef ITEM_EXPANSION
- .itemCommon = ITEM_GRASSY_SEED,
- #endif
+ .itemCommon = ITEM_GRASSY_SEED,
.genderRatio = MON_FEMALE,
.eggCycles = 20,
.friendship = 70,
@@ -19771,9 +19638,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 60,
.expYield = 170,
.evYield_SpDefense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_MISTY_SEED,
- #endif
+ .itemRare = ITEM_MISTY_SEED,
.genderRatio = PERCENT_FEMALE(75),
.eggCycles = 20,
.friendship = 70,
@@ -20046,9 +19911,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 180,
.expYield = 152,
.evYield_Attack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_ELECTRIC_SEED,
- #endif
+ .itemRare = ITEM_ELECTRIC_SEED,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 10,
.friendship = 70,
@@ -20075,9 +19938,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 80,
.expYield = 166,
.evYield_Attack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_RAZOR_FANG,
- #endif
+ .itemRare = ITEM_RAZOR_FANG,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -20151,9 +20012,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 60,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_RAZOR_CLAW,
- #endif
+ .itemRare = ITEM_RAZOR_CLAW,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 40,
.friendship = 70,
@@ -20178,9 +20037,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 147,
.evYield_Defense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_RAZOR_CLAW,
- #endif
+ .itemRare = ITEM_RAZOR_CLAW,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 40,
.friendship = 70,
@@ -20205,9 +20062,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 270,
.evYield_Defense = 3,
- #ifdef ITEM_EXPANSION
- .itemCommon = ITEM_RAZOR_CLAW,
- #endif
+ .itemCommon = ITEM_RAZOR_CLAW,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 40,
.friendship = 70,
@@ -21203,9 +21058,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 120,
.expYield = 117,
.evYield_SpDefense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_PSYCHIC_SEED,
- #endif
+ .itemRare = ITEM_PSYCHIC_SEED,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -21230,9 +21083,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 253,
.evYield_SpDefense = 3,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_PSYCHIC_SEED,
- #endif
+ .itemRare = ITEM_PSYCHIC_SEED,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -22081,7 +21932,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 177,
.evYield_Attack = 2,
- .itemRare = ITEM_STICK,
+ .itemRare = ITEM_LEEK,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -22229,9 +22080,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 37,
.evYield_SpAttack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SNOWBALL,
- #endif
+ .itemRare = ITEM_SNOWBALL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -22354,9 +22203,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 66,
.evYield_Attack = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LAGGING_TAIL,
- #endif
+ .itemRare = ITEM_LAGGING_TAIL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 25,
.friendship = 70,
@@ -22381,9 +22228,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 90,
.expYield = 175,
.evYield_Attack = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_LAGGING_TAIL,
- #endif
+ .itemRare = ITEM_LAGGING_TAIL,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 25,
.friendship = 70,
@@ -24333,9 +24178,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 255,
.expYield = 60,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_GRIP_CLAW,
- #endif
+ .itemRare = ITEM_GRIP_CLAW,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -24386,9 +24229,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 60,
.evYield_Speed = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_SNOWBALL,
- #endif
+ .itemRare = ITEM_SNOWBALL,
.genderRatio = PERCENT_FEMALE(75),
.eggCycles = 20,
.friendship = 70,
@@ -24544,9 +24385,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 255,
.expYield = 60,
.evYield_Defense = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_CELL_BATTERY,
- #endif
+ .itemRare = ITEM_CELL_BATTERY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -24572,9 +24411,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 120,
.expYield = 137,
.evYield_Defense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_CELL_BATTERY,
- #endif
+ .itemRare = ITEM_CELL_BATTERY,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 15,
.friendship = 70,
@@ -24625,9 +24462,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 190,
.expYield = 65,
.evYield_HP = 1,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_BLACK_SLUDGE,
- #endif
+ .itemRare = ITEM_BLACK_SLUDGE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -24854,7 +24689,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 45,
.expYield = 132,
.evYield_Attack = 1,
- .itemCommon = ITEM_STICK,
+ .itemCommon = ITEM_LEEK,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -24880,9 +24715,7 @@ const struct BaseStats gBaseStats[] =
.catchRate = 60,
.expYield = 172,
.evYield_Defense = 2,
- #ifdef ITEM_EXPANSION
- .itemRare = ITEM_MISTY_SEED,
- #endif
+ .itemRare = ITEM_MISTY_SEED,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 70,
@@ -25620,7 +25453,7 @@ const struct BaseStats gBaseStats[] =
[SPECIES_PIKACHU_WORLD_CAP] = CAP_PIKACHU_BASE_STATS(FLIP),
[SPECIES_PICHU_SPIKY_EARED] = PICHU_BASE_STATS(NO_FLIP),
-
+#endif
[SPECIES_UNOWN_B] = UNOWN_BASE_STATS(NO_FLIP),
[SPECIES_UNOWN_C] = UNOWN_BASE_STATS(NO_FLIP),
[SPECIES_UNOWN_D] = UNOWN_BASE_STATS(NO_FLIP),
@@ -25727,6 +25560,7 @@ const struct BaseStats gBaseStats[] =
.noFlip = TRUE,
},
+#if P_NEW_POKEMON == TRUE
[SPECIES_BURMY_SANDY_CLOAK] = BURMY_BASE_STATS(BODY_COLOR_BROWN),
[SPECIES_BURMY_TRASH_CLOAK] = BURMY_BASE_STATS(BODY_COLOR_RED),
@@ -26929,4 +26763,5 @@ const struct BaseStats gBaseStats[] =
.bodyColor = BODY_COLOR_BLACK,
.noFlip = FALSE,
},
+#endif
};
diff --git a/src/data/pokemon/egg_moves.h b/src/data/pokemon/egg_moves.h
index 18853e0c87..3a5f3c332c 100644
--- a/src/data/pokemon/egg_moves.h
+++ b/src/data/pokemon/egg_moves.h
@@ -2387,6 +2387,7 @@ const u16 gEggMoves[] = {
MOVE_ENDURE,
MOVE_DEFENSE_CURL),
+#if P_NEW_POKEMON == TRUE
egg_moves(TURTWIG,
MOVE_WORRY_SEED,
MOVE_GROWTH,
@@ -4409,6 +4410,7 @@ const u16 gEggMoves[] = {
MOVE_FAKE_OUT,
MOVE_PSYCHO_SHIFT,
MOVE_HEAL_PULSE),
+#endif
EGG_MOVES_TERMINATOR
};
diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h
index db900edd05..bf15638f2a 100644
--- a/src/data/pokemon/evolution.h
+++ b/src/data/pokemon/evolution.h
@@ -105,7 +105,7 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
{EVO_SPECIFIC_MAP, MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM, SPECIES_GLACEON},
{EVO_ITEM, ITEM_ICE_STONE, SPECIES_GLACEON},
{EVO_MOVE_TYPE, TYPE_FAIRY, SPECIES_SYLVEON}},
- [SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UP_GRADE, SPECIES_PORYGON2}},
+ [SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2}},
[SPECIES_OMANYTE] = {{EVO_LEVEL, 40, SPECIES_OMASTAR}},
[SPECIES_KABUTO] = {{EVO_LEVEL, 40, SPECIES_KABUTOPS}},
[SPECIES_AERODACTYL] = {{EVO_MEGA_EVOLUTION, ITEM_AERODACTYLITE, SPECIES_AERODACTYL_MEGA}},
diff --git a/src/data/pokemon/evolution_old.h b/src/data/pokemon/evolution_old.h
new file mode 100644
index 0000000000..0a604defb3
--- /dev/null
+++ b/src/data/pokemon/evolution_old.h
@@ -0,0 +1,188 @@
+const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
+{
+ [SPECIES_BULBASAUR] = {{EVO_LEVEL, 16, SPECIES_IVYSAUR}},
+ [SPECIES_IVYSAUR] = {{EVO_LEVEL, 32, SPECIES_VENUSAUR}},
+ [SPECIES_CHARMANDER] = {{EVO_LEVEL, 16, SPECIES_CHARMELEON}},
+ [SPECIES_CHARMELEON] = {{EVO_LEVEL, 36, SPECIES_CHARIZARD}},
+ [SPECIES_SQUIRTLE] = {{EVO_LEVEL, 16, SPECIES_WARTORTLE}},
+ [SPECIES_WARTORTLE] = {{EVO_LEVEL, 36, SPECIES_BLASTOISE}},
+ [SPECIES_CATERPIE] = {{EVO_LEVEL, 7, SPECIES_METAPOD}},
+ [SPECIES_METAPOD] = {{EVO_LEVEL, 10, SPECIES_BUTTERFREE}},
+ [SPECIES_WEEDLE] = {{EVO_LEVEL, 7, SPECIES_KAKUNA}},
+ [SPECIES_KAKUNA] = {{EVO_LEVEL, 10, SPECIES_BEEDRILL}},
+ [SPECIES_PIDGEY] = {{EVO_LEVEL, 18, SPECIES_PIDGEOTTO}},
+ [SPECIES_PIDGEOTTO] = {{EVO_LEVEL, 36, SPECIES_PIDGEOT}},
+ [SPECIES_RATTATA] = {{EVO_LEVEL, 20, SPECIES_RATICATE}},
+ [SPECIES_SPEAROW] = {{EVO_LEVEL, 20, SPECIES_FEAROW}},
+ [SPECIES_EKANS] = {{EVO_LEVEL, 22, SPECIES_ARBOK}},
+ [SPECIES_PIKACHU] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}},
+ [SPECIES_SANDSHREW] = {{EVO_LEVEL, 22, SPECIES_SANDSLASH}},
+ [SPECIES_NIDORAN_F] = {{EVO_LEVEL, 16, SPECIES_NIDORINA}},
+ [SPECIES_NIDORINA] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOQUEEN}},
+ [SPECIES_NIDORAN_M] = {{EVO_LEVEL, 16, SPECIES_NIDORINO}},
+ [SPECIES_NIDORINO] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOKING}},
+ [SPECIES_CLEFAIRY] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_CLEFABLE}},
+ [SPECIES_VULPIX] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_NINETALES}},
+ [SPECIES_JIGGLYPUFF] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_WIGGLYTUFF}},
+ [SPECIES_ZUBAT] = {{EVO_LEVEL, 22, SPECIES_GOLBAT}},
+ [SPECIES_GOLBAT] = {{EVO_FRIENDSHIP, 0, SPECIES_CROBAT}},
+ [SPECIES_ODDISH] = {{EVO_LEVEL, 21, SPECIES_GLOOM}},
+ [SPECIES_GLOOM] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VILEPLUME},
+ {EVO_ITEM, ITEM_SUN_STONE, SPECIES_BELLOSSOM}},
+ [SPECIES_PARAS] = {{EVO_LEVEL, 24, SPECIES_PARASECT}},
+ [SPECIES_VENONAT] = {{EVO_LEVEL, 31, SPECIES_VENOMOTH}},
+ [SPECIES_DIGLETT] = {{EVO_LEVEL, 26, SPECIES_DUGTRIO}},
+ [SPECIES_MEOWTH] = {{EVO_LEVEL, 28, SPECIES_PERSIAN}},
+ [SPECIES_PSYDUCK] = {{EVO_LEVEL, 33, SPECIES_GOLDUCK}},
+ [SPECIES_MANKEY] = {{EVO_LEVEL, 28, SPECIES_PRIMEAPE}},
+ [SPECIES_GROWLITHE] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE}},
+ [SPECIES_POLIWAG] = {{EVO_LEVEL, 25, SPECIES_POLIWHIRL}},
+ [SPECIES_POLIWHIRL] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_POLIWRATH},
+ {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED}},
+ [SPECIES_ABRA] = {{EVO_LEVEL, 16, SPECIES_KADABRA}},
+ [SPECIES_KADABRA] = {{EVO_TRADE, 0, SPECIES_ALAKAZAM}},
+ [SPECIES_MACHOP] = {{EVO_LEVEL, 28, SPECIES_MACHOKE}},
+ [SPECIES_MACHOKE] = {{EVO_TRADE, 0, SPECIES_MACHAMP}},
+ [SPECIES_BELLSPROUT] = {{EVO_LEVEL, 21, SPECIES_WEEPINBELL}},
+ [SPECIES_WEEPINBELL] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VICTREEBEL}},
+ [SPECIES_TENTACOOL] = {{EVO_LEVEL, 30, SPECIES_TENTACRUEL}},
+ [SPECIES_GEODUDE] = {{EVO_LEVEL, 25, SPECIES_GRAVELER}},
+ [SPECIES_GRAVELER] = {{EVO_TRADE, 0, SPECIES_GOLEM}},
+ [SPECIES_PONYTA] = {{EVO_LEVEL, 40, SPECIES_RAPIDASH}},
+ [SPECIES_SLOWPOKE] = {{EVO_LEVEL, 37, SPECIES_SLOWBRO},
+ {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING}},
+ [SPECIES_MAGNEMITE] = {{EVO_LEVEL, 30, SPECIES_MAGNETON}},
+ [SPECIES_DODUO] = {{EVO_LEVEL, 31, SPECIES_DODRIO}},
+ [SPECIES_SEEL] = {{EVO_LEVEL, 34, SPECIES_DEWGONG}},
+ [SPECIES_GRIMER] = {{EVO_LEVEL, 38, SPECIES_MUK}},
+ [SPECIES_SHELLDER] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_CLOYSTER}},
+ [SPECIES_GASTLY] = {{EVO_LEVEL, 25, SPECIES_HAUNTER}},
+ [SPECIES_HAUNTER] = {{EVO_TRADE, 0, SPECIES_GENGAR}},
+ [SPECIES_ONIX] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}},
+ [SPECIES_DROWZEE] = {{EVO_LEVEL, 26, SPECIES_HYPNO}},
+ [SPECIES_KRABBY] = {{EVO_LEVEL, 28, SPECIES_KINGLER}},
+ [SPECIES_VOLTORB] = {{EVO_LEVEL, 30, SPECIES_ELECTRODE}},
+ [SPECIES_EXEGGCUTE] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_EXEGGUTOR}},
+ [SPECIES_CUBONE] = {{EVO_LEVEL, 28, SPECIES_MAROWAK}},
+ [SPECIES_KOFFING] = {{EVO_LEVEL, 35, SPECIES_WEEZING}},
+ [SPECIES_RHYHORN] = {{EVO_LEVEL, 42, SPECIES_RHYDON}},
+ [SPECIES_CHANSEY] = {{EVO_FRIENDSHIP, 0, SPECIES_BLISSEY}},
+ [SPECIES_HORSEA] = {{EVO_LEVEL, 32, SPECIES_SEADRA}},
+ [SPECIES_SEADRA] = {{EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA}},
+ [SPECIES_GOLDEEN] = {{EVO_LEVEL, 33, SPECIES_SEAKING}},
+ [SPECIES_STARYU] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_STARMIE}},
+ [SPECIES_SCYTHER] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR}},
+ [SPECIES_MAGIKARP] = {{EVO_LEVEL, 20, SPECIES_GYARADOS}},
+ [SPECIES_EEVEE] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_JOLTEON},
+ {EVO_ITEM, ITEM_WATER_STONE, SPECIES_VAPOREON},
+ {EVO_ITEM, ITEM_FIRE_STONE, SPECIES_FLAREON},
+ {EVO_FRIENDSHIP_DAY, 0, SPECIES_ESPEON},
+ {EVO_FRIENDSHIP_NIGHT, 0, SPECIES_UMBREON}},
+ [SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2}},
+ [SPECIES_OMANYTE] = {{EVO_LEVEL, 40, SPECIES_OMASTAR}},
+ [SPECIES_KABUTO] = {{EVO_LEVEL, 40, SPECIES_KABUTOPS}},
+ [SPECIES_DRATINI] = {{EVO_LEVEL, 30, SPECIES_DRAGONAIR}},
+ [SPECIES_DRAGONAIR] = {{EVO_LEVEL, 55, SPECIES_DRAGONITE}},
+ [SPECIES_CHIKORITA] = {{EVO_LEVEL, 16, SPECIES_BAYLEEF}},
+ [SPECIES_BAYLEEF] = {{EVO_LEVEL, 32, SPECIES_MEGANIUM}},
+ [SPECIES_CYNDAQUIL] = {{EVO_LEVEL, 14, SPECIES_QUILAVA}},
+ [SPECIES_QUILAVA] = {{EVO_LEVEL, 36, SPECIES_TYPHLOSION}},
+ [SPECIES_TOTODILE] = {{EVO_LEVEL, 18, SPECIES_CROCONAW}},
+ [SPECIES_CROCONAW] = {{EVO_LEVEL, 30, SPECIES_FERALIGATR}},
+ [SPECIES_SENTRET] = {{EVO_LEVEL, 15, SPECIES_FURRET}},
+ [SPECIES_HOOTHOOT] = {{EVO_LEVEL, 20, SPECIES_NOCTOWL}},
+ [SPECIES_LEDYBA] = {{EVO_LEVEL, 18, SPECIES_LEDIAN}},
+ [SPECIES_SPINARAK] = {{EVO_LEVEL, 22, SPECIES_ARIADOS}},
+ [SPECIES_CHINCHOU] = {{EVO_LEVEL, 27, SPECIES_LANTURN}},
+ [SPECIES_PICHU] = {{EVO_FRIENDSHIP, 0, SPECIES_PIKACHU}},
+ [SPECIES_CLEFFA] = {{EVO_FRIENDSHIP, 0, SPECIES_CLEFAIRY}},
+ [SPECIES_IGGLYBUFF] = {{EVO_FRIENDSHIP, 0, SPECIES_JIGGLYPUFF}},
+ [SPECIES_TOGEPI] = {{EVO_FRIENDSHIP, 0, SPECIES_TOGETIC}},
+ [SPECIES_NATU] = {{EVO_LEVEL, 25, SPECIES_XATU}},
+ [SPECIES_MAREEP] = {{EVO_LEVEL, 15, SPECIES_FLAAFFY}},
+ [SPECIES_FLAAFFY] = {{EVO_LEVEL, 30, SPECIES_AMPHAROS}},
+ [SPECIES_MARILL] = {{EVO_LEVEL, 18, SPECIES_AZUMARILL}},
+ [SPECIES_HOPPIP] = {{EVO_LEVEL, 18, SPECIES_SKIPLOOM}},
+ [SPECIES_SKIPLOOM] = {{EVO_LEVEL, 27, SPECIES_JUMPLUFF}},
+ [SPECIES_SUNKERN] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_SUNFLORA}},
+ [SPECIES_WOOPER] = {{EVO_LEVEL, 20, SPECIES_QUAGSIRE}},
+ [SPECIES_PINECO] = {{EVO_LEVEL, 31, SPECIES_FORRETRESS}},
+ [SPECIES_SNUBBULL] = {{EVO_LEVEL, 23, SPECIES_GRANBULL}},
+ [SPECIES_TEDDIURSA] = {{EVO_LEVEL, 30, SPECIES_URSARING}},
+ [SPECIES_SLUGMA] = {{EVO_LEVEL, 38, SPECIES_MAGCARGO}},
+ [SPECIES_SWINUB] = {{EVO_LEVEL, 33, SPECIES_PILOSWINE}},
+ [SPECIES_REMORAID] = {{EVO_LEVEL, 25, SPECIES_OCTILLERY}},
+ [SPECIES_HOUNDOUR] = {{EVO_LEVEL, 24, SPECIES_HOUNDOOM}},
+ [SPECIES_PHANPY] = {{EVO_LEVEL, 25, SPECIES_DONPHAN}},
+ [SPECIES_TYROGUE] = {{EVO_LEVEL_ATK_LT_DEF, 20, SPECIES_HITMONCHAN},
+ {EVO_LEVEL_ATK_GT_DEF, 20, SPECIES_HITMONLEE},
+ {EVO_LEVEL_ATK_EQ_DEF, 20, SPECIES_HITMONTOP}},
+ [SPECIES_SMOOCHUM] = {{EVO_LEVEL, 30, SPECIES_JYNX}},
+ [SPECIES_ELEKID] = {{EVO_LEVEL, 30, SPECIES_ELECTABUZZ}},
+ [SPECIES_MAGBY] = {{EVO_LEVEL, 30, SPECIES_MAGMAR}},
+ [SPECIES_LARVITAR] = {{EVO_LEVEL, 30, SPECIES_PUPITAR}},
+ [SPECIES_PUPITAR] = {{EVO_LEVEL, 55, SPECIES_TYRANITAR}},
+ [SPECIES_TREECKO] = {{EVO_LEVEL, 16, SPECIES_GROVYLE}},
+ [SPECIES_GROVYLE] = {{EVO_LEVEL, 36, SPECIES_SCEPTILE}},
+ [SPECIES_TORCHIC] = {{EVO_LEVEL, 16, SPECIES_COMBUSKEN}},
+ [SPECIES_COMBUSKEN] = {{EVO_LEVEL, 36, SPECIES_BLAZIKEN}},
+ [SPECIES_MUDKIP] = {{EVO_LEVEL, 16, SPECIES_MARSHTOMP}},
+ [SPECIES_MARSHTOMP] = {{EVO_LEVEL, 36, SPECIES_SWAMPERT}},
+ [SPECIES_POOCHYENA] = {{EVO_LEVEL, 18, SPECIES_MIGHTYENA}},
+ [SPECIES_ZIGZAGOON] = {{EVO_LEVEL, 20, SPECIES_LINOONE}},
+ [SPECIES_WURMPLE] = {{EVO_LEVEL_SILCOON, 7, SPECIES_SILCOON},
+ {EVO_LEVEL_CASCOON, 7, SPECIES_CASCOON}},
+ [SPECIES_SILCOON] = {{EVO_LEVEL, 10, SPECIES_BEAUTIFLY}},
+ [SPECIES_CASCOON] = {{EVO_LEVEL, 10, SPECIES_DUSTOX}},
+ [SPECIES_LOTAD] = {{EVO_LEVEL, 14, SPECIES_LOMBRE}},
+ [SPECIES_LOMBRE] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_LUDICOLO}},
+ [SPECIES_SEEDOT] = {{EVO_LEVEL, 14, SPECIES_NUZLEAF}},
+ [SPECIES_NUZLEAF] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_SHIFTRY}},
+ [SPECIES_NINCADA] = {{EVO_LEVEL_NINJASK, 20, SPECIES_NINJASK},
+ {EVO_LEVEL_SHEDINJA, 20, SPECIES_SHEDINJA}},
+ [SPECIES_TAILLOW] = {{EVO_LEVEL, 22, SPECIES_SWELLOW}},
+ [SPECIES_SHROOMISH] = {{EVO_LEVEL, 23, SPECIES_BRELOOM}},
+ [SPECIES_WINGULL] = {{EVO_LEVEL, 25, SPECIES_PELIPPER}},
+ [SPECIES_SURSKIT] = {{EVO_LEVEL, 22, SPECIES_MASQUERAIN}},
+ [SPECIES_WAILMER] = {{EVO_LEVEL, 40, SPECIES_WAILORD}},
+ [SPECIES_SKITTY] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_DELCATTY}},
+ [SPECIES_BALTOY] = {{EVO_LEVEL, 36, SPECIES_CLAYDOL}},
+ [SPECIES_BARBOACH] = {{EVO_LEVEL, 30, SPECIES_WHISCASH}},
+ [SPECIES_CORPHISH] = {{EVO_LEVEL, 30, SPECIES_CRAWDAUNT}},
+ [SPECIES_FEEBAS] = {{EVO_BEAUTY, 170, SPECIES_MILOTIC},
+ {EVO_TRADE_ITEM, ITEM_PRISM_SCALE, SPECIES_MILOTIC}},
+ [SPECIES_CARVANHA] = {{EVO_LEVEL, 30, SPECIES_SHARPEDO}},
+ [SPECIES_TRAPINCH] = {{EVO_LEVEL, 35, SPECIES_VIBRAVA}},
+ [SPECIES_VIBRAVA] = {{EVO_LEVEL, 45, SPECIES_FLYGON}},
+ [SPECIES_MAKUHITA] = {{EVO_LEVEL, 24, SPECIES_HARIYAMA}},
+ [SPECIES_ELECTRIKE] = {{EVO_LEVEL, 26, SPECIES_MANECTRIC}},
+ [SPECIES_NUMEL] = {{EVO_LEVEL, 33, SPECIES_CAMERUPT}},
+ [SPECIES_SPHEAL] = {{EVO_LEVEL, 32, SPECIES_SEALEO}},
+ [SPECIES_SEALEO] = {{EVO_LEVEL, 44, SPECIES_WALREIN}},
+ [SPECIES_CACNEA] = {{EVO_LEVEL, 32, SPECIES_CACTURNE}},
+ [SPECIES_SNORUNT] = {{EVO_LEVEL, 42, SPECIES_GLALIE}},
+ [SPECIES_AZURILL] = {{EVO_FRIENDSHIP, 0, SPECIES_MARILL}},
+ [SPECIES_SPOINK] = {{EVO_LEVEL, 32, SPECIES_GRUMPIG}},
+ [SPECIES_MEDITITE] = {{EVO_LEVEL, 37, SPECIES_MEDICHAM}},
+ [SPECIES_SWABLU] = {{EVO_LEVEL, 35, SPECIES_ALTARIA}},
+ [SPECIES_WYNAUT] = {{EVO_LEVEL, 15, SPECIES_WOBBUFFET}},
+ [SPECIES_DUSKULL] = {{EVO_LEVEL, 37, SPECIES_DUSCLOPS}},
+ [SPECIES_SLAKOTH] = {{EVO_LEVEL, 18, SPECIES_VIGOROTH}},
+ [SPECIES_VIGOROTH] = {{EVO_LEVEL, 36, SPECIES_SLAKING}},
+ [SPECIES_GULPIN] = {{EVO_LEVEL, 26, SPECIES_SWALOT}},
+ [SPECIES_WHISMUR] = {{EVO_LEVEL, 20, SPECIES_LOUDRED}},
+ [SPECIES_LOUDRED] = {{EVO_LEVEL, 40, SPECIES_EXPLOUD}},
+ [SPECIES_CLAMPERL] = {{EVO_TRADE_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL},
+ {EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS}},
+ [SPECIES_SHUPPET] = {{EVO_LEVEL, 37, SPECIES_BANETTE}},
+ [SPECIES_ARON] = {{EVO_LEVEL, 32, SPECIES_LAIRON}},
+ [SPECIES_LAIRON] = {{EVO_LEVEL, 42, SPECIES_AGGRON}},
+ [SPECIES_LILEEP] = {{EVO_LEVEL, 40, SPECIES_CRADILY}},
+ [SPECIES_ANORITH] = {{EVO_LEVEL, 40, SPECIES_ARMALDO}},
+ [SPECIES_RALTS] = {{EVO_LEVEL, 20, SPECIES_KIRLIA}},
+ [SPECIES_KIRLIA] = {{EVO_LEVEL, 30, SPECIES_GARDEVOIR}},
+ [SPECIES_BAGON] = {{EVO_LEVEL, 30, SPECIES_SHELGON}},
+ [SPECIES_SHELGON] = {{EVO_LEVEL, 50, SPECIES_SALAMENCE}},
+ [SPECIES_BELDUM] = {{EVO_LEVEL, 20, SPECIES_METANG}},
+ [SPECIES_METANG] = {{EVO_LEVEL, 45, SPECIES_METAGROSS}},
+};
diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h
index d40d332abf..a324fd55a8 100644
--- a/src/data/pokemon/form_change_table_pointers.h
+++ b/src/data/pokemon/form_change_table_pointers.h
@@ -1,5 +1,6 @@
const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
{
+#if P_NEW_POKEMON == TRUE
[SPECIES_GIRATINA] = sGiratinaFormChangeTable,
[SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable,
[SPECIES_SHAYMIN] = sShayminFormChangeTable,
@@ -28,6 +29,8 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
[SPECIES_THUNDURUS_THERIAN] = sThundurusTherianFormChangeTable,
[SPECIES_LANDORUS] = sLandorusFormChangeTable,
[SPECIES_LANDORUS_THERIAN] = sLandorusTherianFormChangeTable,
+ [SPECIES_ENAMORUS] = sEnamorusFormChangeTable,
+ [SPECIES_ENAMORUS_THERIAN] = sEnamorusTherianFormChangeTable,
[SPECIES_KELDEO] = sKeldeoFormChangeTable,
[SPECIES_KELDEO_RESOLUTE] = sKeldeoResoluteFormChangeTable,
[SPECIES_GENESECT] = sGenesectFormChangeTable,
@@ -59,4 +62,5 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] =
[SPECIES_SILVALLY_ROCK] = sSilvallyFormChangeTable,
[SPECIES_SILVALLY_STEEL] = sSilvallyFormChangeTable,
[SPECIES_SILVALLY_WATER] = sSilvallyFormChangeTable,
+#endif
};
diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h
index c224a1a028..5f8541c402 100644
--- a/src/data/pokemon/form_change_tables.h
+++ b/src/data/pokemon/form_change_tables.h
@@ -43,6 +43,7 @@ FORM_ITEM_USE_TIME:
#define DAY 0
#define NIGHT 1
+#if P_NEW_POKEMON == TRUE
static const struct FormChange sGiratinaFormChangeTable[] = {
{FORM_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE},
{FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB},
@@ -124,6 +125,16 @@ static const struct FormChange sLandorusTherianFormChangeTable[] = {
{FORM_CHANGE_END},
};
+static const struct FormChange sEnamorusFormChangeTable[] = {
+ {FORM_ITEM_USE, SPECIES_ENAMORUS, ITEM_REVEAL_GLASS},
+ {FORM_CHANGE_END},
+};
+
+static const struct FormChange sEnamorusTherianFormChangeTable[] = {
+ {FORM_ITEM_USE, SPECIES_ENAMORUS_THERIAN, ITEM_REVEAL_GLASS},
+ {FORM_CHANGE_END},
+};
+
static const struct FormChange sKeldeoFormChangeTable[] = {
{FORM_MOVE, SPECIES_KELDEO_RESOLUTE, MOVE_SECRET_SWORD, WHEN_LEARNED},
{FORM_CHANGE_END},
@@ -182,6 +193,7 @@ static const struct FormChange sSilvallyFormChangeTable[] = {
{FORM_ITEM_HOLD_ABILITY, SPECIES_SILVALLY_FAIRY, ITEM_FAIRY_MEMORY, ABILITY_RKS_SYSTEM},
{FORM_CHANGE_END},
};
+#endif
#undef WHEN_LEARNED
#undef WHEN_FORGOTTEN
diff --git a/src/data/pokemon/form_species_table_pointers.h b/src/data/pokemon/form_species_table_pointers.h
index f516d4e7b3..71a210e402 100644
--- a/src/data/pokemon/form_species_table_pointers.h
+++ b/src/data/pokemon/form_species_table_pointers.h
@@ -1,5 +1,6 @@
const u16 *const gFormSpeciesIdTables[NUM_SPECIES] =
{
+#if P_NEW_POKEMON == TRUE
[SPECIES_VENUSAUR] = sVenusaurFormSpeciesIdTable,
[SPECIES_CHARIZARD] = sCharizardFormSpeciesIdTable,
[SPECIES_BLASTOISE] = sBlastoiseFormSpeciesIdTable,
@@ -51,7 +52,9 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] =
[SPECIES_SLOWKING] = sSlowkingFormSpeciesIdTable,
[SPECIES_QWILFISH] = sQwilfishFormSpeciesIdTable,
[SPECIES_SNEASEL] = sSneaselFormSpeciesIdTable,
+#endif
[SPECIES_UNOWN] = sUnownFormSpeciesIdTable,
+#if P_NEW_POKEMON == TRUE
[SPECIES_STEELIX] = sSteelixFormSpeciesIdTable,
[SPECIES_SCIZOR] = sScizorFormSpeciesIdTable,
[SPECIES_HERACROSS] = sHeracrossFormSpeciesIdTable,
@@ -72,7 +75,9 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] =
[SPECIES_SHARPEDO] = sSharpedoFormSpeciesIdTable,
[SPECIES_CAMERUPT] = sCameruptFormSpeciesIdTable,
[SPECIES_ALTARIA] = sAltariaFormSpeciesIdTable,
+#endif
[SPECIES_CASTFORM] = sCastformFormSpeciesIdTable,
+#if P_NEW_POKEMON == TRUE
[SPECIES_BANETTE] = sBanetteFormSpeciesIdTable,
[SPECIES_ABSOL] = sAbsolFormSpeciesIdTable,
[SPECIES_GLALIE] = sGlalieFormSpeciesIdTable,
@@ -83,7 +88,9 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] =
[SPECIES_KYOGRE] = sKyogreFormSpeciesIdTable,
[SPECIES_GROUDON] = sGroudonFormSpeciesIdTable,
[SPECIES_RAYQUAZA] = sRayquazaFormSpeciesIdTable,
+#endif
[SPECIES_DEOXYS] = sDeoxysFormSpeciesIdTable,
+#if P_NEW_POKEMON == TRUE
[SPECIES_BURMY] = sBurmyFormSpeciesIdTable,
[SPECIES_WORMADAM] = sWormadamFormSpeciesIdTable,
[SPECIES_CHERRIM] = sCherrimFormSpeciesIdTable,
@@ -289,6 +296,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] =
[SPECIES_PIKACHU_WORLD_CAP] = sPikachuFormSpeciesIdTable,
// Pichu
[SPECIES_PICHU_SPIKY_EARED] = sPichuFormSpeciesIdTable,
+#endif
// Unown
[SPECIES_UNOWN_B] = sUnownFormSpeciesIdTable,
[SPECIES_UNOWN_C] = sUnownFormSpeciesIdTable,
@@ -325,6 +333,7 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] =
[SPECIES_DEOXYS_ATTACK] = sDeoxysFormSpeciesIdTable,
[SPECIES_DEOXYS_DEFENSE] = sDeoxysFormSpeciesIdTable,
[SPECIES_DEOXYS_SPEED] = sDeoxysFormSpeciesIdTable,
+#if P_NEW_POKEMON == TRUE
// Burmy
[SPECIES_BURMY_SANDY_CLOAK] = sBurmyFormSpeciesIdTable,
[SPECIES_BURMY_TRASH_CLOAK] = sBurmyFormSpeciesIdTable,
@@ -556,4 +565,5 @@ const u16 *const gFormSpeciesIdTables[NUM_SPECIES] =
// Calyrex
[SPECIES_CALYREX_ICE_RIDER] = sCalyrexFormSpeciesIdTable,
[SPECIES_CALYREX_SHADOW_RIDER] = sCalyrexFormSpeciesIdTable,
+#endif
};
diff --git a/src/data/pokemon/form_species_tables.h b/src/data/pokemon/form_species_tables.h
index c6660f6e7a..9467006452 100644
--- a/src/data/pokemon/form_species_tables.h
+++ b/src/data/pokemon/form_species_tables.h
@@ -1,3 +1,4 @@
+#if P_NEW_POKEMON == TRUE
static const u16 sVenusaurFormSpeciesIdTable[] = {
SPECIES_VENUSAUR,
SPECIES_VENUSAUR_MEGA,
@@ -308,6 +309,7 @@ static const u16 sSlowkingFormSpeciesIdTable[] = {
SPECIES_SLOWKING_GALARIAN,
FORM_SPECIES_END,
};
+#endif
static const u16 sQwilfishFormSpeciesIdTable[] = {
SPECIES_QWILFISH,
@@ -353,6 +355,7 @@ static const u16 sUnownFormSpeciesIdTable[] = {
FORM_SPECIES_END,
};
+#if P_NEW_POKEMON == TRUE
static const u16 sSteelixFormSpeciesIdTable[] = {
SPECIES_STEELIX,
SPECIES_STEELIX_MEGA,
@@ -472,7 +475,7 @@ static const u16 sAltariaFormSpeciesIdTable[] = {
SPECIES_ALTARIA_MEGA,
FORM_SPECIES_END,
};
-
+#endif
static const u16 sCastformFormSpeciesIdTable[] = {
SPECIES_CASTFORM,
SPECIES_CASTFORM_SUNNY,
@@ -481,6 +484,7 @@ static const u16 sCastformFormSpeciesIdTable[] = {
FORM_SPECIES_END,
};
+#if P_NEW_POKEMON == TRUE
static const u16 sBanetteFormSpeciesIdTable[] = {
SPECIES_BANETTE,
SPECIES_BANETTE_MEGA,
@@ -540,7 +544,7 @@ static const u16 sRayquazaFormSpeciesIdTable[] = {
SPECIES_RAYQUAZA_MEGA,
FORM_SPECIES_END,
};
-
+#endif
static const u16 sDeoxysFormSpeciesIdTable[] = {
SPECIES_DEOXYS,
SPECIES_DEOXYS_ATTACK,
@@ -548,7 +552,7 @@ static const u16 sDeoxysFormSpeciesIdTable[] = {
SPECIES_DEOXYS_SPEED,
FORM_SPECIES_END,
};
-
+#if P_NEW_POKEMON == TRUE
static const u16 sBurmyFormSpeciesIdTable[] = {
SPECIES_BURMY,
SPECIES_BURMY_SANDY_CLOAK,
@@ -1135,3 +1139,4 @@ static const u16 sCalyrexFormSpeciesIdTable[] = {
SPECIES_CALYREX_SHADOW_RIDER,
FORM_SPECIES_END,
};
+#endif
diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h
index 00872a9b26..f2290351a3 100644
--- a/src/data/pokemon/item_effects.h
+++ b/src/data/pokemon/item_effects.h
@@ -36,12 +36,20 @@ const u8 gItemEffect_MaxPotion[7] = {
const u8 gItemEffect_HyperPotion[7] = {
[4] = ITEM4_HEAL_HP,
+#if I_HEALTH_RECOVERY >= GEN_7
+ [6] = 120, // Amount of HP to recover
+#else
[6] = 200, // Amount of HP to recover
+#endif
};
const u8 gItemEffect_SuperPotion[7] = {
[4] = ITEM4_HEAL_HP,
+#if I_HEALTH_RECOVERY >= GEN_7
+ [6] = 60, // Amount of HP to recover
+#else
[6] = 50, // Amount of HP to recover
+#endif
};
const u8 gItemEffect_FullHeal[6] = {
@@ -60,17 +68,29 @@ const u8 gItemEffect_MaxRevive[7] = {
const u8 gItemEffect_FreshWater[7] = {
[4] = ITEM4_HEAL_HP,
+#if I_HEALTH_RECOVERY >= GEN_7
+ [6] = 30, // Amount of HP to recover
+#else
[6] = 50, // Amount of HP to recover
+#endif
};
const u8 gItemEffect_SodaPop[7] = {
[4] = ITEM4_HEAL_HP,
+#if I_HEALTH_RECOVERY >= GEN_7
+ [6] = 50, // Amount of HP to recover
+#else
[6] = 60, // Amount of HP to recover
+#endif
};
const u8 gItemEffect_Lemonade[7] = {
[4] = ITEM4_HEAL_HP,
+#if I_HEALTH_RECOVERY >= GEN_7
+ [6] = 70, // Amount of HP to recover
+#else
[6] = 80, // Amount of HP to recover
+#endif
};
const u8 gItemEffect_MoomooMilk[7] = {
@@ -81,16 +101,24 @@ const u8 gItemEffect_MoomooMilk[7] = {
const u8 gItemEffect_EnergyPowder[10] = {
[4] = ITEM4_HEAL_HP,
[5] = ITEM5_FRIENDSHIP_ALL,
- [6] = 50, // Amount of HP to recover
- [7] = -5, // Friendship change, low
- [8] = -5, // Friendship change, mid
+#if I_HEALTH_RECOVERY >= GEN_7
+ [6] = 60, // Amount of HP to recover
+#else
+ [6] = 50, // Amount of HP to recover
+#endif
+ [7] = -5, // Friendship change, low
+ [8] = -5, // Friendship change, mid
[9] = -10, // Friendship change, high
};
const u8 gItemEffect_EnergyRoot[10] = {
[4] = ITEM4_HEAL_HP,
[5] = ITEM5_FRIENDSHIP_ALL,
+#if I_HEALTH_RECOVERY >= GEN_7
+ [6] = 120, // Amount of HP to recover
+#else
[6] = 200, // Amount of HP to recover
+#endif
[7] = -10, // Friendship change, low
[8] = -10, // Friendship change, mid
[9] = -15, // Friendship change, high
@@ -133,10 +161,6 @@ const u8 gItemEffect_MaxElixir[7] = {
[6] = ITEM6_HEAL_PP_FULL,
};
-const u8 gItemEffect_LavaCookie[6] = {
- [3] = ITEM3_STATUS_ALL,
-};
-
const u8 gItemEffect_BlueFlute[6] = {
[3] = ITEM3_SLEEP,
};
@@ -165,36 +189,97 @@ const u8 gItemEffect_SacredAsh[7] = {
[(i) + 1] = 3, /* Friendship change, mid */ \
[(i) + 2] = 2 /* Friendship change, high */
-const u8 gItemEffect_HPUp[10] = {
+const u8 gItemEffect_HPUp[11] = {
[4] = ITEM4_EV_HP,
[5] = ITEM5_FRIENDSHIP_ALL,
[6] = ITEM6_ADD_EV,
VITAMIN_FRIENDSHIP_CHANGE(7),
+ [10] = ITEM10_IS_VITAMIN,
};
-const u8 gItemEffect_Protein[10] = {
+const u8 gItemEffect_Protein[11] = {
[4] = ITEM4_EV_ATK,
[5] = ITEM5_FRIENDSHIP_ALL,
[6] = ITEM6_ADD_EV,
VITAMIN_FRIENDSHIP_CHANGE(7),
+ [10] = ITEM10_IS_VITAMIN,
};
-const u8 gItemEffect_Iron[10] = {
+const u8 gItemEffect_Iron[11] = {
[5] = ITEM5_EV_DEF | ITEM5_FRIENDSHIP_ALL,
[6] = ITEM6_ADD_EV,
VITAMIN_FRIENDSHIP_CHANGE(7),
+ [10] = ITEM10_IS_VITAMIN,
};
-const u8 gItemEffect_Carbos[10] = {
+const u8 gItemEffect_Carbos[11] = {
[5] = ITEM5_EV_SPEED | ITEM5_FRIENDSHIP_ALL,
[6] = ITEM6_ADD_EV,
VITAMIN_FRIENDSHIP_CHANGE(7),
+ [10] = ITEM10_IS_VITAMIN,
};
-const u8 gItemEffect_Calcium[10] = {
+const u8 gItemEffect_Calcium[11] = {
[5] = ITEM5_EV_SPATK | ITEM5_FRIENDSHIP_ALL,
[6] = ITEM6_ADD_EV,
VITAMIN_FRIENDSHIP_CHANGE(7),
+ [10] = ITEM10_IS_VITAMIN,
+};
+
+const u8 gItemEffect_Zinc[11] = {
+ [5] = ITEM5_EV_SPDEF | ITEM5_FRIENDSHIP_ALL,
+ [6] = ITEM6_ADD_EV,
+ VITAMIN_FRIENDSHIP_CHANGE(7),
+ [10] = ITEM10_IS_VITAMIN,
+};
+
+#define FEATHER_FRIENDSHIP_CHANGE(i) \
+ [(i) + 0] = 3, /* Friendship change, low */ \
+ [(i) + 1] = 2, /* Friendship change, mid */ \
+ [(i) + 2] = 1 /* Friendship change, high */
+
+const u8 gItemEffect_HpFeather[11] = {
+ [4] = ITEM4_EV_HP,
+ [5] = ITEM5_FRIENDSHIP_ALL,
+ [6] = ITEM6_ADD_ONE_EV,
+ FEATHER_FRIENDSHIP_CHANGE(7),
+ [10] = 0,
+};
+
+const u8 gItemEffect_AtkFeather[11] = {
+ [4] = ITEM4_EV_ATK,
+ [5] = ITEM5_FRIENDSHIP_ALL,
+ [6] = ITEM6_ADD_ONE_EV,
+ FEATHER_FRIENDSHIP_CHANGE(7),
+ [10] = 0,
+};
+
+const u8 gItemEffect_DefFeather[11] = {
+ [5] = ITEM5_EV_DEF | ITEM5_FRIENDSHIP_ALL,
+ [6] = ITEM6_ADD_ONE_EV,
+ FEATHER_FRIENDSHIP_CHANGE(7),
+ [10] = 0,
+};
+
+const u8 gItemEffect_SpeedFeather[11] = {
+ [5] = ITEM5_EV_SPEED | ITEM5_FRIENDSHIP_ALL,
+ [6] = ITEM6_ADD_ONE_EV,
+ FEATHER_FRIENDSHIP_CHANGE(7),
+ [10] = 0,
+};
+
+const u8 gItemEffect_SpatkFeather[11] = {
+ [5] = ITEM5_EV_SPATK | ITEM5_FRIENDSHIP_ALL,
+ [6] = ITEM6_ADD_ONE_EV,
+ FEATHER_FRIENDSHIP_CHANGE(7),
+ [10] = 0,
+};
+
+const u8 gItemEffect_SpdefFeather[11] = {
+ [5] = ITEM5_EV_SPDEF | ITEM5_FRIENDSHIP_ALL,
+ [6] = ITEM6_ADD_ONE_EV,
+ FEATHER_FRIENDSHIP_CHANGE(7),
+ [10] = 0,
};
const u8 gItemEffect_RareCandy[10] = {
@@ -211,12 +296,6 @@ const u8 gItemEffect_PPUp[9] = {
VITAMIN_FRIENDSHIP_CHANGE(6),
};
-const u8 gItemEffect_Zinc[10] = {
- [5] = ITEM5_EV_SPDEF | ITEM5_FRIENDSHIP_ALL,
- [6] = ITEM6_ADD_EV,
- VITAMIN_FRIENDSHIP_CHANGE(7),
-};
-
const u8 gItemEffect_PPMax[9] = {
[5] = ITEM5_PP_MAX | ITEM5_FRIENDSHIP_ALL,
VITAMIN_FRIENDSHIP_CHANGE(6),
@@ -243,56 +322,42 @@ const u8 gItemEffect_DireHit[8] = {
};
const u8 gItemEffect_XAttack[8] = {
- [0] = 1, // ITEM0_X_ATTACK
+ [1] = ITEM1_X_ATTACK,
[5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID,
STAT_BOOST_FRIENDSHIP_CHANGE,
};
-const u8 gItemEffect_XDefend[8] = {
- [1] = 1 << 4, /// ITEM1_X_DEFEND
+const u8 gItemEffect_XDefense[8] = {
+ [1] = ITEM1_X_DEFENSE,
[5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID,
STAT_BOOST_FRIENDSHIP_CHANGE,
};
const u8 gItemEffect_XSpeed[8] = {
- [1] = 1, // ITEM1_X_SPEED
+ [1] = ITEM1_X_SPEED,
[5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID,
STAT_BOOST_FRIENDSHIP_CHANGE,
};
const u8 gItemEffect_XAccuracy[8] = {
- [2] = 1 << 4, // ITEM2_X_ACCURACY
+ [1] = ITEM1_X_ACCURACY,
[5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID,
STAT_BOOST_FRIENDSHIP_CHANGE,
};
-const u8 gItemEffect_XSpecial[8] = {
- [2] = 1, // ITEM2_X_SPATK
+const u8 gItemEffect_XSpecialAttack[8] = {
+ [1] = ITEM1_X_SPATK,
[5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID,
STAT_BOOST_FRIENDSHIP_CHANGE,
};
-const u8 gItemEffect_SunStone[6] = {
- [4] = ITEM4_EVO_STONE,
+const u8 gItemEffect_XSpecialDefense[8] = {
+ [1] = ITEM1_X_SPDEF,
+ [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID,
+ STAT_BOOST_FRIENDSHIP_CHANGE,
};
-const u8 gItemEffect_MoonStone[6] = {
- [4] = ITEM4_EVO_STONE,
-};
-
-const u8 gItemEffect_FireStone[6] = {
- [4] = ITEM4_EVO_STONE,
-};
-
-const u8 gItemEffect_ThunderStone[6] = {
- [4] = ITEM4_EVO_STONE,
-};
-
-const u8 gItemEffect_WaterStone[6] = {
- [4] = ITEM4_EVO_STONE,
-};
-
-const u8 gItemEffect_LeafStone[6] = {
+const u8 gItemEffect_EvoItem[6] = {
[4] = ITEM4_EVO_STONE,
};
@@ -330,13 +395,13 @@ const u8 gItemEffect_PersimBerry[6] = {
[3] = ITEM3_CONFUSION,
};
-const u8 gItemEffect_LumBerry[6] = {
- [3] = ITEM3_STATUS_ALL,
-};
-
const u8 gItemEffect_SitrusBerry[7] = {
[4] = ITEM4_HEAL_HP,
+#if I_SITRUS_BERRY_HEAL >= GEN_4
+ [6] = ITEM6_HEAL_HP_QUARTER,
+#else
[6] = 30, // Amount of HP to recover
+#endif
};
#define EV_BERRY_FRIENDSHIP_CHANGE \
@@ -384,74 +449,126 @@ const u8 gItemEffect_TamatoBerry[10] = {
const u8 *const gItemEffectTable[] =
{
- [ITEM_POTION - ITEM_POTION] = gItemEffect_Potion,
- [ITEM_ANTIDOTE - ITEM_POTION] = gItemEffect_Antidote,
- [ITEM_BURN_HEAL - ITEM_POTION] = gItemEffect_BurnHeal,
- [ITEM_ICE_HEAL - ITEM_POTION] = gItemEffect_IceHeal,
- [ITEM_AWAKENING - ITEM_POTION] = gItemEffect_Awakening,
- [ITEM_PARALYZE_HEAL - ITEM_POTION] = gItemEffect_ParalyzeHeal,
- [ITEM_FULL_RESTORE - ITEM_POTION] = gItemEffect_FullRestore,
- [ITEM_MAX_POTION - ITEM_POTION] = gItemEffect_MaxPotion,
- [ITEM_HYPER_POTION - ITEM_POTION] = gItemEffect_HyperPotion,
- [ITEM_SUPER_POTION - ITEM_POTION] = gItemEffect_SuperPotion,
- [ITEM_FULL_HEAL - ITEM_POTION] = gItemEffect_FullHeal,
- [ITEM_REVIVE - ITEM_POTION] = gItemEffect_Revive,
- [ITEM_MAX_REVIVE - ITEM_POTION] = gItemEffect_MaxRevive,
- [ITEM_FRESH_WATER - ITEM_POTION] = gItemEffect_FreshWater,
- [ITEM_SODA_POP - ITEM_POTION] = gItemEffect_SodaPop,
- [ITEM_LEMONADE - ITEM_POTION] = gItemEffect_Lemonade,
- [ITEM_MOOMOO_MILK - ITEM_POTION] = gItemEffect_MoomooMilk,
- [ITEM_ENERGY_POWDER - ITEM_POTION] = gItemEffect_EnergyPowder,
- [ITEM_ENERGY_ROOT - ITEM_POTION] = gItemEffect_EnergyRoot,
- [ITEM_HEAL_POWDER - ITEM_POTION] = gItemEffect_HealPowder,
- [ITEM_REVIVAL_HERB - ITEM_POTION] = gItemEffect_RevivalHerb,
- [ITEM_ETHER - ITEM_POTION] = gItemEffect_Ether,
- [ITEM_MAX_ETHER - ITEM_POTION] = gItemEffect_MaxEther,
- [ITEM_ELIXIR - ITEM_POTION] = gItemEffect_Elixir,
- [ITEM_MAX_ELIXIR - ITEM_POTION] = gItemEffect_MaxElixir,
- [ITEM_LAVA_COOKIE - ITEM_POTION] = gItemEffect_LavaCookie,
- [ITEM_BLUE_FLUTE - ITEM_POTION] = gItemEffect_BlueFlute,
- [ITEM_YELLOW_FLUTE - ITEM_POTION] = gItemEffect_YellowFlute,
- [ITEM_RED_FLUTE - ITEM_POTION] = gItemEffect_RedFlute,
- [ITEM_BERRY_JUICE - ITEM_POTION] = gItemEffect_BerryJuice,
- [ITEM_SACRED_ASH - ITEM_POTION] = gItemEffect_SacredAsh,
- [ITEM_HP_UP - ITEM_POTION] = gItemEffect_HPUp,
- [ITEM_PROTEIN - ITEM_POTION] = gItemEffect_Protein,
- [ITEM_IRON - ITEM_POTION] = gItemEffect_Iron,
- [ITEM_CARBOS - ITEM_POTION] = gItemEffect_Carbos,
- [ITEM_CALCIUM - ITEM_POTION] = gItemEffect_Calcium,
- [ITEM_RARE_CANDY - ITEM_POTION] = gItemEffect_RareCandy,
- [ITEM_PP_UP - ITEM_POTION] = gItemEffect_PPUp,
- [ITEM_ZINC - ITEM_POTION] = gItemEffect_Zinc,
- [ITEM_PP_MAX - ITEM_POTION] = gItemEffect_PPMax,
- [ITEM_GUARD_SPEC - ITEM_POTION] = gItemEffect_GuardSpec,
- [ITEM_DIRE_HIT - ITEM_POTION] = gItemEffect_DireHit,
- [ITEM_X_ATTACK - ITEM_POTION] = gItemEffect_XAttack,
- [ITEM_X_DEFEND - ITEM_POTION] = gItemEffect_XDefend,
- [ITEM_X_SPEED - ITEM_POTION] = gItemEffect_XSpeed,
- [ITEM_X_ACCURACY - ITEM_POTION] = gItemEffect_XAccuracy,
- [ITEM_X_SPECIAL - ITEM_POTION] = gItemEffect_XSpecial,
- [ITEM_SUN_STONE - ITEM_POTION] = gItemEffect_SunStone,
- [ITEM_MOON_STONE - ITEM_POTION] = gItemEffect_MoonStone,
- [ITEM_FIRE_STONE - ITEM_POTION] = gItemEffect_FireStone,
- [ITEM_THUNDER_STONE - ITEM_POTION] = gItemEffect_ThunderStone,
- [ITEM_WATER_STONE - ITEM_POTION] = gItemEffect_WaterStone,
- [ITEM_LEAF_STONE - ITEM_POTION] = gItemEffect_LeafStone,
- [ITEM_CHERI_BERRY - ITEM_POTION] = gItemEffect_CheriBerry,
- [ITEM_CHESTO_BERRY - ITEM_POTION] = gItemEffect_ChestoBerry,
- [ITEM_PECHA_BERRY - ITEM_POTION] = gItemEffect_PechaBerry,
- [ITEM_RAWST_BERRY - ITEM_POTION] = gItemEffect_RawstBerry,
- [ITEM_ASPEAR_BERRY - ITEM_POTION] = gItemEffect_AspearBerry,
- [ITEM_LEPPA_BERRY - ITEM_POTION] = gItemEffect_LeppaBerry,
- [ITEM_ORAN_BERRY - ITEM_POTION] = gItemEffect_OranBerry,
- [ITEM_PERSIM_BERRY - ITEM_POTION] = gItemEffect_PersimBerry,
- [ITEM_LUM_BERRY - ITEM_POTION] = gItemEffect_LumBerry,
- [ITEM_SITRUS_BERRY - ITEM_POTION] = gItemEffect_SitrusBerry,
- [ITEM_POMEG_BERRY - ITEM_POTION] = gItemEffect_PomegBerry,
- [ITEM_KELPSY_BERRY - ITEM_POTION] = gItemEffect_KelpsyBerry,
- [ITEM_QUALOT_BERRY - ITEM_POTION] = gItemEffect_QualotBerry,
- [ITEM_HONDEW_BERRY - ITEM_POTION] = gItemEffect_HondewBerry,
- [ITEM_GREPA_BERRY - ITEM_POTION] = gItemEffect_GrepaBerry,
- [ITEM_TAMATO_BERRY - ITEM_POTION] = gItemEffect_TamatoBerry,
- [LAST_BERRY_INDEX - ITEM_POTION] = NULL
+ // Medicine
+ [ITEM_POTION - ITEM_POTION] = gItemEffect_Potion,
+ [ITEM_SUPER_POTION - ITEM_POTION] = gItemEffect_SuperPotion,
+ [ITEM_HYPER_POTION - ITEM_POTION] = gItemEffect_HyperPotion,
+ [ITEM_MAX_POTION - ITEM_POTION] = gItemEffect_MaxPotion,
+ [ITEM_FULL_RESTORE - ITEM_POTION] = gItemEffect_FullRestore,
+ [ITEM_REVIVE - ITEM_POTION] = gItemEffect_Revive,
+ [ITEM_MAX_REVIVE - ITEM_POTION] = gItemEffect_MaxRevive,
+ [ITEM_FRESH_WATER - ITEM_POTION] = gItemEffect_FreshWater,
+ [ITEM_SODA_POP - ITEM_POTION] = gItemEffect_SodaPop,
+ [ITEM_LEMONADE - ITEM_POTION] = gItemEffect_Lemonade,
+ [ITEM_MOOMOO_MILK - ITEM_POTION] = gItemEffect_MoomooMilk,
+ [ITEM_ENERGY_POWDER - ITEM_POTION] = gItemEffect_EnergyPowder,
+ [ITEM_ENERGY_ROOT - ITEM_POTION] = gItemEffect_EnergyRoot,
+ [ITEM_HEAL_POWDER - ITEM_POTION] = gItemEffect_HealPowder,
+ [ITEM_REVIVAL_HERB - ITEM_POTION] = gItemEffect_RevivalHerb,
+ [ITEM_ANTIDOTE - ITEM_POTION] = gItemEffect_Antidote,
+ [ITEM_PARALYZE_HEAL - ITEM_POTION] = gItemEffect_ParalyzeHeal,
+ [ITEM_BURN_HEAL - ITEM_POTION] = gItemEffect_BurnHeal,
+ [ITEM_ICE_HEAL - ITEM_POTION] = gItemEffect_IceHeal,
+ [ITEM_AWAKENING - ITEM_POTION] = gItemEffect_Awakening,
+ [ITEM_FULL_HEAL - ITEM_POTION] = gItemEffect_FullHeal,
+ [ITEM_ETHER - ITEM_POTION] = gItemEffect_Ether,
+ [ITEM_MAX_ETHER - ITEM_POTION] = gItemEffect_MaxEther,
+ [ITEM_ELIXIR - ITEM_POTION] = gItemEffect_Elixir,
+ [ITEM_MAX_ELIXIR - ITEM_POTION] = gItemEffect_MaxElixir,
+ [ITEM_BERRY_JUICE - ITEM_POTION] = gItemEffect_BerryJuice,
+ [ITEM_SACRED_ASH - ITEM_POTION] = gItemEffect_SacredAsh,
+ [ITEM_SWEET_HEART - ITEM_POTION] = gItemEffect_Potion,
+ [ITEM_MAX_HONEY - ITEM_POTION] = gItemEffect_MaxRevive,
+
+ // Regional Specialties
+ [ITEM_PEWTER_CRUNCHIES - ITEM_POTION] = gItemEffect_FullHeal,
+ [ITEM_RAGE_CANDY_BAR - ITEM_POTION] = gItemEffect_FullHeal,
+ [ITEM_LAVA_COOKIE - ITEM_POTION] = gItemEffect_FullHeal,
+ [ITEM_OLD_GATEAU - ITEM_POTION] = gItemEffect_FullHeal,
+ [ITEM_CASTELIACONE - ITEM_POTION] = gItemEffect_FullHeal,
+ [ITEM_LUMIOSE_GALETTE - ITEM_POTION] = gItemEffect_FullHeal,
+ [ITEM_SHALOUR_SABLE - ITEM_POTION] = gItemEffect_FullHeal,
+ [ITEM_BIG_MALASADA - ITEM_POTION] = gItemEffect_FullHeal,
+
+ // Vitamins
+ [ITEM_HP_UP - ITEM_POTION] = gItemEffect_HPUp,
+ [ITEM_PROTEIN - ITEM_POTION] = gItemEffect_Protein,
+ [ITEM_IRON - ITEM_POTION] = gItemEffect_Iron,
+ [ITEM_CALCIUM - ITEM_POTION] = gItemEffect_Calcium,
+ [ITEM_ZINC - ITEM_POTION] = gItemEffect_Zinc,
+ [ITEM_CARBOS - ITEM_POTION] = gItemEffect_Carbos,
+ [ITEM_PP_UP - ITEM_POTION] = gItemEffect_PPUp,
+ [ITEM_PP_MAX - ITEM_POTION] = gItemEffect_PPMax,
+
+ // EV Feathers
+ [ITEM_HEALTH_FEATHER - ITEM_POTION] = gItemEffect_HpFeather,
+ [ITEM_MUSCLE_FEATHER - ITEM_POTION] = gItemEffect_AtkFeather,
+ [ITEM_RESIST_FEATHER - ITEM_POTION] = gItemEffect_DefFeather,
+ [ITEM_GENIUS_FEATHER - ITEM_POTION] = gItemEffect_SpatkFeather,
+ [ITEM_CLEVER_FEATHER - ITEM_POTION] = gItemEffect_SpdefFeather,
+ [ITEM_SWIFT_FEATHER - ITEM_POTION] = gItemEffect_SpeedFeather,
+
+ // Candy
+ [ITEM_RARE_CANDY - ITEM_POTION] = gItemEffect_RareCandy,
+ //[ITEM_EXP_CANDY_XS - ITEM_POTION] = gItemEffect_ExpCandy, // Todo
+ //[ITEM_EXP_CANDY_S - ITEM_POTION] = gItemEffect_ExpCandy, // Todo
+ //[ITEM_EXP_CANDY_M - ITEM_POTION] = gItemEffect_ExpCandy, // Todo
+ //[ITEM_EXP_CANDY_L - ITEM_POTION] = gItemEffect_ExpCandy, // Todo
+ //[ITEM_EXP_CANDY_XL - ITEM_POTION] = gItemEffect_ExpCandy, // Todo
+ //[ITEM_DYNAMAX_CANDY - ITEM_POTION] = gItemEffect_DynamaxCandy, // Todo
+
+ // Medicinal Flutes
+ [ITEM_BLUE_FLUTE - ITEM_POTION] = gItemEffect_BlueFlute,
+ [ITEM_YELLOW_FLUTE - ITEM_POTION] = gItemEffect_YellowFlute,
+ [ITEM_RED_FLUTE - ITEM_POTION] = gItemEffect_RedFlute,
+
+ // X Items
+ [ITEM_X_ATTACK - ITEM_POTION] = gItemEffect_XAttack,
+ [ITEM_X_DEFENSE - ITEM_POTION] = gItemEffect_XDefense,
+ [ITEM_X_SPEED - ITEM_POTION] = gItemEffect_XSpeed,
+ [ITEM_X_ACCURACY - ITEM_POTION] = gItemEffect_XAccuracy,
+ [ITEM_X_SP_ATK - ITEM_POTION] = gItemEffect_XSpecialAttack,
+ [ITEM_X_SP_DEF - ITEM_POTION] = gItemEffect_XSpecialDefense,
+
+ [ITEM_DIRE_HIT - ITEM_POTION] = gItemEffect_DireHit,
+ [ITEM_GUARD_SPEC - ITEM_POTION] = gItemEffect_GuardSpec,
+
+ //[ITEM_MAX_MUSHROOMS - ITEM_POTION] = gItemEffect_MaxMushrooms, // Todo
+
+ // Evolution Items
+ [ITEM_FIRE_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_WATER_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_THUNDER_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_LEAF_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_ICE_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_SUN_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_MOON_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_SHINY_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_DUSK_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_DAWN_STONE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_SWEET_APPLE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_TART_APPLE - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_CRACKED_POT - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_CHIPPED_POT - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_GALARICA_CUFF - ITEM_POTION] = gItemEffect_EvoItem,
+ [ITEM_GALARICA_WREATH - ITEM_POTION] = gItemEffect_EvoItem,
+
+ // Berries
+ [ITEM_CHERI_BERRY - ITEM_POTION] = gItemEffect_CheriBerry,
+ [ITEM_CHESTO_BERRY - ITEM_POTION] = gItemEffect_ChestoBerry,
+ [ITEM_PECHA_BERRY - ITEM_POTION] = gItemEffect_PechaBerry,
+ [ITEM_RAWST_BERRY - ITEM_POTION] = gItemEffect_RawstBerry,
+ [ITEM_ASPEAR_BERRY - ITEM_POTION] = gItemEffect_AspearBerry,
+ [ITEM_LEPPA_BERRY - ITEM_POTION] = gItemEffect_LeppaBerry,
+ [ITEM_ORAN_BERRY - ITEM_POTION] = gItemEffect_OranBerry,
+ [ITEM_PERSIM_BERRY - ITEM_POTION] = gItemEffect_PersimBerry,
+ [ITEM_LUM_BERRY - ITEM_POTION] = gItemEffect_FullHeal,
+ [ITEM_SITRUS_BERRY - ITEM_POTION] = gItemEffect_SitrusBerry,
+ [ITEM_POMEG_BERRY - ITEM_POTION] = gItemEffect_PomegBerry,
+ [ITEM_KELPSY_BERRY - ITEM_POTION] = gItemEffect_KelpsyBerry,
+ [ITEM_QUALOT_BERRY - ITEM_POTION] = gItemEffect_QualotBerry,
+ [ITEM_HONDEW_BERRY - ITEM_POTION] = gItemEffect_HondewBerry,
+ [ITEM_GREPA_BERRY - ITEM_POTION] = gItemEffect_GrepaBerry,
+ [ITEM_TAMATO_BERRY - ITEM_POTION] = gItemEffect_TamatoBerry,
+ [LAST_BERRY_INDEX - ITEM_POTION] = NULL,
};
diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h
index ff592dbe92..27c7b522f8 100644
--- a/src/data/pokemon/level_up_learnset_pointers.h
+++ b/src/data/pokemon/level_up_learnset_pointers.h
@@ -387,6 +387,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] =
[SPECIES_JIRACHI] = sJirachiLevelUpLearnset,
[SPECIES_DEOXYS] = sDeoxysLevelUpLearnset,
[SPECIES_CHIMECHO] = sChimechoLevelUpLearnset,
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] = sTurtwigLevelUpLearnset,
[SPECIES_GROTLE] = sGrotleLevelUpLearnset,
[SPECIES_TORTERRA] = sTorterraLevelUpLearnset,
@@ -1033,6 +1034,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] =
[SPECIES_PIKACHU_WORLD_CAP] = sPikachuLevelUpLearnset,
// Pichu
[SPECIES_PICHU_SPIKY_EARED] = sPichuLevelUpLearnset,
+#endif
// Unown
[SPECIES_UNOWN_B] = sUnownLevelUpLearnset,
[SPECIES_UNOWN_C] = sUnownLevelUpLearnset,
@@ -1069,6 +1071,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] =
[SPECIES_DEOXYS_ATTACK] = sDeoxysAttackLevelUpLearnset,
[SPECIES_DEOXYS_DEFENSE] = sDeoxysDefenseLevelUpLearnset,
[SPECIES_DEOXYS_SPEED] = sDeoxysSpeedLevelUpLearnset,
+#if P_NEW_POKEMON == TRUE
// Burmy
[SPECIES_BURMY_SANDY_CLOAK] = sBurmyLevelUpLearnset,
[SPECIES_BURMY_TRASH_CLOAK] = sBurmyLevelUpLearnset,
@@ -1300,4 +1303,5 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] =
// Calyrex
[SPECIES_CALYREX_ICE_RIDER] = sCalyrexIceRiderLevelUpLearnset,
[SPECIES_CALYREX_SHADOW_RIDER] = sCalyrexShadowRiderLevelUpLearnset,
+#endif
};
diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h
index 93e51c6c8b..a8c696f1f4 100644
--- a/src/data/pokemon/level_up_learnsets.h
+++ b/src/data/pokemon/level_up_learnsets.h
@@ -12,9 +12,9 @@ static const struct LevelUpMove sBulbasaurLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(25, MOVE_GROWTH),
LEVEL_UP_MOVE(27, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(31, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(31, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(33, MOVE_SYNTHESIS),
- //LEVEL_UP_MOVE(37, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(37, MOVE_SEED_BOMB),
LEVEL_UP_END
};
@@ -32,14 +32,14 @@ static const struct LevelUpMove sIvysaurLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(28, MOVE_GROWTH),
LEVEL_UP_MOVE(31, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(36, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(36, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(39, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(44, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sVenusaurLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE),
+ //LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -55,9 +55,9 @@ static const struct LevelUpMove sVenusaurLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(28, MOVE_GROWTH),
LEVEL_UP_MOVE(31, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(39, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(39, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(45, MOVE_SYNTHESIS),
- //LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(53, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
@@ -69,12 +69,12 @@ static const struct LevelUpMove sCharmanderLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(16, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(19, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(25, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE(28, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(25, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(28, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(34, MOVE_SLASH),
LEVEL_UP_MOVE(37, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(43, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(46, MOVE_INFERNO),
+ LEVEL_UP_MOVE(46, MOVE_INFERNO),
LEVEL_UP_END
};
@@ -86,23 +86,23 @@ static const struct LevelUpMove sCharmeleonLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(17, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(21, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(28, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE(32, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(28, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(32, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(39, MOVE_SLASH),
LEVEL_UP_MOVE(43, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(50, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(54, MOVE_INFERNO),
+ LEVEL_UP_MOVE(54, MOVE_INFERNO),
LEVEL_UP_END
};
static const struct LevelUpMove sCharizardLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK),
+ //LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW),
- //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -110,14 +110,14 @@ static const struct LevelUpMove sCharizardLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(17, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(21, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(28, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE(32, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(28, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(32, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(41, MOVE_SLASH),
LEVEL_UP_MOVE(47, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(56, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(62, MOVE_INFERNO),
+ LEVEL_UP_MOVE(62, MOVE_INFERNO),
LEVEL_UP_MOVE(71, MOVE_HEAT_WAVE),
- //LEVEL_UP_MOVE(77, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(77, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
@@ -131,7 +131,7 @@ static const struct LevelUpMove sSquirtleLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(22, MOVE_PROTECT),
LEVEL_UP_MOVE(25, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(31, MOVE_SKULL_BASH),
LEVEL_UP_MOVE(34, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(37, MOVE_RAIN_DANCE),
@@ -151,7 +151,7 @@ static const struct LevelUpMove sWartortleLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(25, MOVE_PROTECT),
LEVEL_UP_MOVE(29, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(37, MOVE_SKULL_BASH),
LEVEL_UP_MOVE(41, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(45, MOVE_RAIN_DANCE),
@@ -160,7 +160,7 @@ static const struct LevelUpMove sWartortleLevelUpLearnset[] = {
};
static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE( 1, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -173,7 +173,7 @@ static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(25, MOVE_PROTECT),
LEVEL_UP_MOVE(29, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(40, MOVE_SKULL_BASH),
LEVEL_UP_MOVE(47, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(54, MOVE_RAIN_DANCE),
@@ -184,18 +184,18 @@ static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = {
static const struct LevelUpMove sCaterpieLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
- //LEVEL_UP_MOVE( 9, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 9, MOVE_BUG_BITE),
LEVEL_UP_END
};
static const struct LevelUpMove sMetapodLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_HARDEN),
+ //LEVEL_UP_MOVE( 0, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_END
};
static const struct LevelUpMove sButterfreeLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_GUST),
+ //LEVEL_UP_MOVE( 0, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE(11, MOVE_CONFUSION),
@@ -207,44 +207,44 @@ static const struct LevelUpMove sButterfreeLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_SUPERSONIC),
LEVEL_UP_MOVE(25, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(29, MOVE_WHIRLWIND),
- //LEVEL_UP_MOVE(31, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(35, MOVE_RAGE_POWDER),
- //LEVEL_UP_MOVE(37, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(41, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(43, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(47, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(31, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(35, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE(37, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(41, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(43, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(47, MOVE_QUIVER_DANCE),
LEVEL_UP_END
};
static const struct LevelUpMove sWeedleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
- //LEVEL_UP_MOVE( 9, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 9, MOVE_BUG_BITE),
LEVEL_UP_END
};
static const struct LevelUpMove sKakunaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_HARDEN),
+ //LEVEL_UP_MOVE( 0, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_END
};
static const struct LevelUpMove sBeedrillLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_TWINEEDLE),
+ //LEVEL_UP_MOVE( 0, MOVE_TWINEEDLE),
LEVEL_UP_MOVE( 1, MOVE_TWINEEDLE),
LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(11, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(14, MOVE_RAGE),
LEVEL_UP_MOVE(17, MOVE_PURSUIT),
LEVEL_UP_MOVE(20, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(23, MOVE_VENOSHOCK),
- //LEVEL_UP_MOVE(26, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(29, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(23, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(26, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(29, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(32, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(35, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(35, MOVE_POISON_JAB),
LEVEL_UP_MOVE(38, MOVE_AGILITY),
LEVEL_UP_MOVE(41, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(44, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(44, MOVE_FELL_STINGER),
LEVEL_UP_END
};
@@ -258,11 +258,11 @@ static const struct LevelUpMove sPidgeyLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(29, MOVE_AGILITY),
LEVEL_UP_MOVE(33, MOVE_WING_ATTACK),
- //LEVEL_UP_MOVE(37, MOVE_ROOST),
- //LEVEL_UP_MOVE(41, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(37, MOVE_ROOST),
+ LEVEL_UP_MOVE(41, MOVE_TAILWIND),
LEVEL_UP_MOVE(45, MOVE_MIRROR_MOVE),
- //LEVEL_UP_MOVE(49, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(53, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(49, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(53, MOVE_HURRICANE),
LEVEL_UP_END
};
@@ -278,16 +278,16 @@ static const struct LevelUpMove sPidgeottoLevelUpLearnset[] = {
LEVEL_UP_MOVE(27, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(32, MOVE_AGILITY),
LEVEL_UP_MOVE(37, MOVE_WING_ATTACK),
- //LEVEL_UP_MOVE(42, MOVE_ROOST),
- //LEVEL_UP_MOVE(47, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(42, MOVE_ROOST),
+ LEVEL_UP_MOVE(47, MOVE_TAILWIND),
LEVEL_UP_MOVE(52, MOVE_MIRROR_MOVE),
- //LEVEL_UP_MOVE(57, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(62, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(57, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(62, MOVE_HURRICANE),
LEVEL_UP_END
};
static const struct LevelUpMove sPidgeotLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
+ LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_GUST),
@@ -300,11 +300,11 @@ static const struct LevelUpMove sPidgeotLevelUpLearnset[] = {
LEVEL_UP_MOVE(27, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(32, MOVE_AGILITY),
LEVEL_UP_MOVE(38, MOVE_WING_ATTACK),
- //LEVEL_UP_MOVE(44, MOVE_ROOST),
- //LEVEL_UP_MOVE(50, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(44, MOVE_ROOST),
+ LEVEL_UP_MOVE(50, MOVE_TAILWIND),
LEVEL_UP_MOVE(56, MOVE_MIRROR_MOVE),
- //LEVEL_UP_MOVE(62, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(68, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(62, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(68, MOVE_HURRICANE),
LEVEL_UP_END
};
@@ -316,9 +316,9 @@ static const struct LevelUpMove sRattataLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_BITE),
LEVEL_UP_MOVE(13, MOVE_PURSUIT),
LEVEL_UP_MOVE(16, MOVE_HYPER_FANG),
- //LEVEL_UP_MOVE(19, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(19, MOVE_ASSURANCE),
LEVEL_UP_MOVE(22, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(28, MOVE_SUPER_FANG),
LEVEL_UP_MOVE(31, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(34, MOVE_ENDEAVOR),
@@ -326,7 +326,7 @@ static const struct LevelUpMove sRattataLevelUpLearnset[] = {
};
static const struct LevelUpMove sRaticateLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE),
+ //LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
@@ -338,9 +338,9 @@ static const struct LevelUpMove sRaticateLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_BITE),
LEVEL_UP_MOVE(13, MOVE_PURSUIT),
LEVEL_UP_MOVE(16, MOVE_HYPER_FANG),
- //LEVEL_UP_MOVE(19, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(19, MOVE_ASSURANCE),
LEVEL_UP_MOVE(24, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(34, MOVE_SUPER_FANG),
LEVEL_UP_MOVE(39, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(44, MOVE_ENDEAVOR),
@@ -355,17 +355,17 @@ static const struct LevelUpMove sSpearowLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(15, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(18, MOVE_MIRROR_MOVE),
- //LEVEL_UP_MOVE(22, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(22, MOVE_ASSURANCE),
LEVEL_UP_MOVE(25, MOVE_AGILITY),
LEVEL_UP_MOVE(29, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(32, MOVE_ROOST),
+ LEVEL_UP_MOVE(32, MOVE_ROOST),
LEVEL_UP_MOVE(36, MOVE_DRILL_PECK),
LEVEL_UP_END
};
static const struct LevelUpMove sFearowLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_DRILL_RUN),
- //LEVEL_UP_MOVE( 1, MOVE_PLUCK),
+ LEVEL_UP_MOVE( 1, MOVE_DRILL_RUN),
+ LEVEL_UP_MOVE( 1, MOVE_PLUCK),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -375,12 +375,12 @@ static const struct LevelUpMove sFearowLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(15, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(18, MOVE_MIRROR_MOVE),
- //LEVEL_UP_MOVE(23, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(23, MOVE_ASSURANCE),
LEVEL_UP_MOVE(27, MOVE_AGILITY),
LEVEL_UP_MOVE(32, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(36, MOVE_ROOST),
+ LEVEL_UP_MOVE(36, MOVE_ROOST),
LEVEL_UP_MOVE(41, MOVE_DRILL_PECK),
- //LEVEL_UP_MOVE(45, MOVE_DRILL_RUN),
+ LEVEL_UP_MOVE(45, MOVE_DRILL_RUN),
LEVEL_UP_END
};
@@ -395,22 +395,22 @@ static const struct LevelUpMove sEkansLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_STOCKPILE),
LEVEL_UP_MOVE(25, MOVE_SWALLOW),
LEVEL_UP_MOVE(25, MOVE_SPIT_UP),
- //LEVEL_UP_MOVE(28, MOVE_ACID_SPRAY),
- //LEVEL_UP_MOVE(33, MOVE_MUD_BOMB),
- //LEVEL_UP_MOVE(36, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(38, MOVE_BELCH),
+ LEVEL_UP_MOVE(28, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(33, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(36, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(38, MOVE_BELCH),
LEVEL_UP_MOVE(41, MOVE_HAZE),
- //LEVEL_UP_MOVE(44, MOVE_COIL),
- //LEVEL_UP_MOVE(49, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(44, MOVE_COIL),
+ LEVEL_UP_MOVE(49, MOVE_GUNK_SHOT),
LEVEL_UP_END
};
static const struct LevelUpMove sArbokLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_CRUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
@@ -423,13 +423,13 @@ static const struct LevelUpMove sArbokLevelUpLearnset[] = {
LEVEL_UP_MOVE(27, MOVE_STOCKPILE),
LEVEL_UP_MOVE(27, MOVE_SWALLOW),
LEVEL_UP_MOVE(27, MOVE_SPIT_UP),
- //LEVEL_UP_MOVE(32, MOVE_ACID_SPRAY),
- //LEVEL_UP_MOVE(39, MOVE_MUD_BOMB),
- //LEVEL_UP_MOVE(44, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(48, MOVE_BELCH),
+ LEVEL_UP_MOVE(32, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(39, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(44, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(48, MOVE_BELCH),
LEVEL_UP_MOVE(51, MOVE_HAZE),
- //LEVEL_UP_MOVE(56, MOVE_COIL),
- //LEVEL_UP_MOVE(63, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(56, MOVE_COIL),
+ LEVEL_UP_MOVE(63, MOVE_GUNK_SHOT),
LEVEL_UP_END
};
@@ -437,19 +437,19 @@ static const struct LevelUpMove sPikachuLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 5, MOVE_GROWL),
- //LEVEL_UP_MOVE( 7, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 7, MOVE_PLAY_NICE),
LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK),
- //LEVEL_UP_MOVE(13, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(13, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(18, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(21, MOVE_FEINT),
+ LEVEL_UP_MOVE(21, MOVE_FEINT),
LEVEL_UP_MOVE(23, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(26, MOVE_SPARK),
- //LEVEL_UP_MOVE(29, MOVE_NUZZLE),
- //LEVEL_UP_MOVE(34, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(29, MOVE_NUZZLE),
+ LEVEL_UP_MOVE(34, MOVE_DISCHARGE),
LEVEL_UP_MOVE(37, MOVE_SLAM),
LEVEL_UP_MOVE(42, MOVE_THUNDERBOLT),
LEVEL_UP_MOVE(45, MOVE_AGILITY),
- //LEVEL_UP_MOVE(50, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(50, MOVE_WILD_CHARGE),
LEVEL_UP_MOVE(53, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(58, MOVE_THUNDER),
LEVEL_UP_END
@@ -477,7 +477,7 @@ static const struct LevelUpMove sSandshrewLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(26, MOVE_SLASH),
LEVEL_UP_MOVE(30, MOVE_DIG),
- //LEVEL_UP_MOVE(34, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(34, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(38, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(42, MOVE_SANDSTORM),
LEVEL_UP_MOVE(46, MOVE_EARTHQUAKE),
@@ -485,7 +485,7 @@ static const struct LevelUpMove sSandshrewLevelUpLearnset[] = {
};
static const struct LevelUpMove sSandslashLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_CRUSH_CLAW),
+ //LEVEL_UP_MOVE( 0, MOVE_CRUSH_CLAW),
LEVEL_UP_MOVE( 1, MOVE_CRUSH_CLAW),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
@@ -502,7 +502,7 @@ static const struct LevelUpMove sSandslashLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(28, MOVE_SLASH),
LEVEL_UP_MOVE(33, MOVE_DIG),
- //LEVEL_UP_MOVE(38, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(38, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(43, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(48, MOVE_SANDSTORM),
LEVEL_UP_MOVE(53, MOVE_EARTHQUAKE),
@@ -518,10 +518,10 @@ static const struct LevelUpMove sNidoranFLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(21, MOVE_BITE),
LEVEL_UP_MOVE(25, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(31, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(31, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(33, MOVE_FLATTER),
LEVEL_UP_MOVE(37, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(43, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(43, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(45, MOVE_POISON_FANG),
LEVEL_UP_END
};
@@ -535,10 +535,10 @@ static const struct LevelUpMove sNidorinaLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(23, MOVE_BITE),
LEVEL_UP_MOVE(28, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(35, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(35, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(38, MOVE_FLATTER),
LEVEL_UP_MOVE(43, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(50, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(50, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(58, MOVE_POISON_FANG),
LEVEL_UP_END
};
@@ -549,9 +549,9 @@ static const struct LevelUpMove sNidoqueenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
- //LEVEL_UP_MOVE(23, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(23, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(35, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(43, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(43, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(58, MOVE_SUPERPOWER),
LEVEL_UP_END
};
@@ -565,10 +565,10 @@ static const struct LevelUpMove sNidoranMLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(21, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE(25, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(31, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(31, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(33, MOVE_FLATTER),
- //LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(43, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(43, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(45, MOVE_HORN_DRILL),
LEVEL_UP_END
};
@@ -582,10 +582,10 @@ static const struct LevelUpMove sNidorinoLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(23, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE(28, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(35, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(35, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(38, MOVE_FLATTER),
- //LEVEL_UP_MOVE(43, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(50, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(43, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(50, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(58, MOVE_HORN_DRILL),
LEVEL_UP_END
};
@@ -596,16 +596,16 @@ static const struct LevelUpMove sNidokingLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
- //LEVEL_UP_MOVE(23, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(23, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(35, MOVE_THRASH),
- //LEVEL_UP_MOVE(43, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(43, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(58, MOVE_MEGAHORN),
LEVEL_UP_END
};
static const struct LevelUpMove sClefairyLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT),
- //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_ENCORE),
@@ -613,26 +613,26 @@ static const struct LevelUpMove sClefairyLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE(16, MOVE_FOLLOW_ME),
- //LEVEL_UP_MOVE(19, MOVE_BESTOW),
- //LEVEL_UP_MOVE(22, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(19, MOVE_BESTOW),
+ LEVEL_UP_MOVE(22, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(25, MOVE_MINIMIZE),
- //LEVEL_UP_MOVE(28, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(28, MOVE_STORED_POWER),
LEVEL_UP_MOVE(31, MOVE_METRONOME),
LEVEL_UP_MOVE(34, MOVE_COSMIC_POWER),
- //LEVEL_UP_MOVE(37, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(37, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(40, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(43, MOVE_MOONLIGHT),
- //LEVEL_UP_MOVE(46, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(49, MOVE_GRAVITY),
+ LEVEL_UP_MOVE(46, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(49, MOVE_GRAVITY),
LEVEL_UP_MOVE(50, MOVE_METEOR_MASH),
- //LEVEL_UP_MOVE(55, MOVE_HEALING_WISH),
- //LEVEL_UP_MOVE(58, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(55, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(58, MOVE_AFTER_YOU),
LEVEL_UP_END
};
static const struct LevelUpMove sClefableLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT),
- //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE( 1, MOVE_MINIMIZE),
@@ -644,29 +644,29 @@ static const struct LevelUpMove sVulpixLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 7, MOVE_ROAR),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(15, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(18, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(18, MOVE_PAYBACK),
LEVEL_UP_MOVE(20, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(26, MOVE_HEX),
- //LEVEL_UP_MOVE(28, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(26, MOVE_HEX),
+ LEVEL_UP_MOVE(28, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(34, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(39, MOVE_IMPRISON),
LEVEL_UP_MOVE(42, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(44, MOVE_GRUDGE),
- //LEVEL_UP_MOVE(47, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(50, MOVE_INFERNO),
+ LEVEL_UP_MOVE(47, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(50, MOVE_INFERNO),
LEVEL_UP_END
};
static const struct LevelUpMove sNinetalesLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
- //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
@@ -678,19 +678,19 @@ static const struct LevelUpMove sJigglypuffLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 3, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 5, MOVE_POUND),
- //LEVEL_UP_MOVE( 9, MOVE_PLAY_NICE),
- //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 9, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(14, MOVE_DISABLE),
LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(20, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE(22, MOVE_ROUND),
+ LEVEL_UP_MOVE(22, MOVE_ROUND),
LEVEL_UP_MOVE(25, MOVE_STOCKPILE),
LEVEL_UP_MOVE(25, MOVE_SWALLOW),
LEVEL_UP_MOVE(25, MOVE_SPIT_UP),
- //LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(30, MOVE_REST),
LEVEL_UP_MOVE(32, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(35, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(35, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(38, MOVE_MIMIC),
LEVEL_UP_MOVE(41, MOVE_HYPER_VOICE),
LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE),
@@ -699,7 +699,7 @@ static const struct LevelUpMove sJigglypuffLevelUpLearnset[] = {
static const struct LevelUpMove sWigglytuffLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -720,9 +720,9 @@ static const struct LevelUpMove sZubatLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE(31, MOVE_LEECH_LIFE),
LEVEL_UP_MOVE(35, MOVE_HAZE),
- //LEVEL_UP_MOVE(37, MOVE_VENOSHOCK),
- //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(43, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(37, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(43, MOVE_QUICK_GUARD),
LEVEL_UP_END
};
@@ -743,9 +743,9 @@ static const struct LevelUpMove sGolbatLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE(35, MOVE_LEECH_LIFE),
LEVEL_UP_MOVE(40, MOVE_HAZE),
- //LEVEL_UP_MOVE(43, MOVE_VENOSHOCK),
- //LEVEL_UP_MOVE(48, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(51, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(43, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(48, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(51, MOVE_QUICK_GUARD),
LEVEL_UP_END
};
@@ -758,13 +758,13 @@ static const struct LevelUpMove sOddishLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_STUN_SPORE),
LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE(19, MOVE_MEGA_DRAIN),
- //LEVEL_UP_MOVE(23, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(23, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(27, MOVE_MOONLIGHT),
LEVEL_UP_MOVE(31, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(35, MOVE_TOXIC),
- //LEVEL_UP_MOVE(39, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(43, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(47, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(39, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(43, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(47, MOVE_GRASSY_TERRAIN),
LEVEL_UP_MOVE(51, MOVE_PETAL_DANCE),
LEVEL_UP_END
};
@@ -780,13 +780,13 @@ static const struct LevelUpMove sGloomLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_STUN_SPORE),
LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE(19, MOVE_MEGA_DRAIN),
- //LEVEL_UP_MOVE(24, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(24, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(29, MOVE_MOONLIGHT),
LEVEL_UP_MOVE(34, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(39, MOVE_TOXIC),
- //LEVEL_UP_MOVE(44, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD),
- //LEVEL_UP_MOVE(54, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(44, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(54, MOVE_GRASSY_TERRAIN),
LEVEL_UP_MOVE(59, MOVE_PETAL_DANCE),
LEVEL_UP_END
};
@@ -796,7 +796,7 @@ static const struct LevelUpMove sVileplumeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
- //LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(59, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE(69, MOVE_SOLAR_BEAM),
LEVEL_UP_END
@@ -813,13 +813,13 @@ static const struct LevelUpMove sParasLevelUpLearnset[] = {
LEVEL_UP_MOVE(33, MOVE_GROWTH),
LEVEL_UP_MOVE(38, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(43, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(49, MOVE_RAGE_POWDER),
- //LEVEL_UP_MOVE(54, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(49, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE(54, MOVE_X_SCISSOR),
LEVEL_UP_END
};
static const struct LevelUpMove sParasectLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_CROSS_POISON),
+ LEVEL_UP_MOVE( 1, MOVE_CROSS_POISON),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
@@ -833,8 +833,8 @@ static const struct LevelUpMove sParasectLevelUpLearnset[] = {
LEVEL_UP_MOVE(37, MOVE_GROWTH),
LEVEL_UP_MOVE(44, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(51, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(59, MOVE_RAGE_POWDER),
- //LEVEL_UP_MOVE(66, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(59, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE(66, MOVE_X_SCISSOR),
LEVEL_UP_END
};
@@ -850,17 +850,17 @@ static const struct LevelUpMove sVenonatLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(29, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE(35, MOVE_LEECH_LIFE),
- //LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(41, MOVE_POISON_FANG),
LEVEL_UP_MOVE(47, MOVE_PSYCHIC),
LEVEL_UP_END
};
static const struct LevelUpMove sVenomothLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_GUST),
+ //LEVEL_UP_MOVE( 0, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_GUST),
- //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE( 1, MOVE_SILVER_WIND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -874,11 +874,11 @@ static const struct LevelUpMove sVenomothLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(29, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE(37, MOVE_LEECH_LIFE),
- //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(47, MOVE_POISON_FANG),
LEVEL_UP_MOVE(55, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(59, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(63, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(59, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(63, MOVE_QUIVER_DANCE),
LEVEL_UP_END
};
@@ -889,10 +889,10 @@ static const struct LevelUpMove sDiglettLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_ASTONISH),
LEVEL_UP_MOVE(10, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(14, MOVE_MAGNITUDE),
- //LEVEL_UP_MOVE(18, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(25, MOVE_MUD_BOMB),
- //LEVEL_UP_MOVE(28, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(18, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(25, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(28, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(31, MOVE_DIG),
LEVEL_UP_MOVE(35, MOVE_SLASH),
LEVEL_UP_MOVE(39, MOVE_EARTHQUAKE),
@@ -901,10 +901,10 @@ static const struct LevelUpMove sDiglettLevelUpLearnset[] = {
};
static const struct LevelUpMove sDugtrioLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SAND_TOMB),
+ //LEVEL_UP_MOVE( 0, MOVE_SAND_TOMB),
LEVEL_UP_MOVE( 1, MOVE_SAND_TOMB),
- //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
@@ -913,10 +913,10 @@ static const struct LevelUpMove sDugtrioLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_ASTONISH),
LEVEL_UP_MOVE(10, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(14, MOVE_MAGNITUDE),
- //LEVEL_UP_MOVE(18, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(25, MOVE_MUD_BOMB),
- //LEVEL_UP_MOVE(30, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(18, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(25, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(30, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(35, MOVE_DIG),
LEVEL_UP_MOVE(41, MOVE_SLASH),
LEVEL_UP_MOVE(47, MOVE_EARTHQUAKE),
@@ -935,19 +935,19 @@ static const struct LevelUpMove sMeowthLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_TAUNT),
LEVEL_UP_MOVE(30, MOVE_PAY_DAY),
LEVEL_UP_MOVE(33, MOVE_SLASH),
- //LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(41, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(46, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(50, MOVE_FEINT),
+ LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(41, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(46, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(50, MOVE_FEINT),
LEVEL_UP_END
};
static const struct LevelUpMove sPersianLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SWIFT),
+ //LEVEL_UP_MOVE( 0, MOVE_SWIFT),
LEVEL_UP_MOVE( 1, MOVE_SWIFT),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -958,13 +958,13 @@ static const struct LevelUpMove sPersianLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_SCREECH),
LEVEL_UP_MOVE(22, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(25, MOVE_TAUNT),
- //LEVEL_UP_MOVE(32, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(32, MOVE_POWER_GEM),
LEVEL_UP_MOVE(37, MOVE_SLASH),
- //LEVEL_UP_MOVE(44, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(49, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(56, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(61, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(65, MOVE_FEINT),
+ LEVEL_UP_MOVE(44, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(49, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(56, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(61, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(65, MOVE_FEINT),
LEVEL_UP_END
};
@@ -978,19 +978,19 @@ static const struct LevelUpMove sPsyduckLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(19, MOVE_DISABLE),
LEVEL_UP_MOVE(22, MOVE_SCREECH),
- //LEVEL_UP_MOVE(25, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(31, MOVE_SOAK),
+ LEVEL_UP_MOVE(25, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(31, MOVE_SOAK),
LEVEL_UP_MOVE(34, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(37, MOVE_AMNESIA),
LEVEL_UP_MOVE(40, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(43, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(43, MOVE_WONDER_ROOM),
LEVEL_UP_END
};
static const struct LevelUpMove sGolduckLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ME_FIRST),
- //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 1, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -1002,13 +1002,13 @@ static const struct LevelUpMove sGolduckLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(19, MOVE_DISABLE),
LEVEL_UP_MOVE(22, MOVE_SCREECH),
- //LEVEL_UP_MOVE(25, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(31, MOVE_SOAK),
+ LEVEL_UP_MOVE(25, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(31, MOVE_SOAK),
LEVEL_UP_MOVE(36, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(41, MOVE_AMNESIA),
LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(51, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(51, MOVE_WONDER_ROOM),
LEVEL_UP_END
};
@@ -1024,22 +1024,22 @@ static const struct LevelUpMove sMankeyLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS),
LEVEL_UP_MOVE(19, MOVE_SWAGGER),
LEVEL_UP_MOVE(22, MOVE_CROSS_CHOP),
- //LEVEL_UP_MOVE(26, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(29, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(26, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(29, MOVE_PUNISHMENT),
LEVEL_UP_MOVE(33, MOVE_THRASH),
- //LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(40, MOVE_SCREECH),
- //LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM),
+ LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM),
LEVEL_UP_MOVE(47, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE(50, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(50, MOVE_FINAL_GAMBIT),
LEVEL_UP_END
};
static const struct LevelUpMove sPrimeapeLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_RAGE),
+ //LEVEL_UP_MOVE( 0, MOVE_RAGE),
LEVEL_UP_MOVE( 1, MOVE_RAGE),
- //LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT),
- //LEVEL_UP_MOVE( 1, MOVE_FLING),
+ LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE( 1, MOVE_FLING),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LOW_KICK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -1050,14 +1050,14 @@ static const struct LevelUpMove sPrimeapeLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS),
LEVEL_UP_MOVE(19, MOVE_SWAGGER),
LEVEL_UP_MOVE(22, MOVE_CROSS_CHOP),
- //LEVEL_UP_MOVE(26, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(30, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(26, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(30, MOVE_PUNISHMENT),
LEVEL_UP_MOVE(35, MOVE_THRASH),
- //LEVEL_UP_MOVE(39, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(39, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(44, MOVE_SCREECH),
- //LEVEL_UP_MOVE(48, MOVE_STOMPING_TANTRUM),
+ LEVEL_UP_MOVE(48, MOVE_STOMPING_TANTRUM),
LEVEL_UP_MOVE(53, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE(57, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(57, MOVE_FINAL_GAMBIT),
LEVEL_UP_END
};
@@ -1070,25 +1070,25 @@ static const struct LevelUpMove sGrowlitheLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(17, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(19, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(21, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(21, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(23, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(28, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(28, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(30, MOVE_AGILITY),
- //LEVEL_UP_MOVE(32, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(32, MOVE_RETALIATE),
LEVEL_UP_MOVE(34, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(39, MOVE_CRUNCH),
LEVEL_UP_MOVE(41, MOVE_HEAT_WAVE),
LEVEL_UP_MOVE(43, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE(45, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(45, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
static const struct LevelUpMove sArcanineLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(34, MOVE_EXTREME_SPEED),
LEVEL_UP_END
};
@@ -1104,9 +1104,9 @@ static const struct LevelUpMove sPoliwagLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(28, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(31, MOVE_BELLY_DRUM),
- //LEVEL_UP_MOVE(35, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(35, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(38, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(41, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(41, MOVE_MUD_BOMB),
LEVEL_UP_END
};
@@ -1123,22 +1123,22 @@ static const struct LevelUpMove sPoliwhirlLevelUpLearnset[] = {
LEVEL_UP_MOVE(27, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(32, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(37, MOVE_BELLY_DRUM),
- //LEVEL_UP_MOVE(43, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(43, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(48, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(53, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(53, MOVE_MUD_BOMB),
LEVEL_UP_END
};
static const struct LevelUpMove sPoliwrathLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SUBMISSION),
+ //LEVEL_UP_MOVE( 0, MOVE_SUBMISSION),
LEVEL_UP_MOVE( 1, MOVE_SUBMISSION),
- //LEVEL_UP_MOVE( 1, MOVE_CIRCLE_THROW),
+ LEVEL_UP_MOVE( 1, MOVE_CIRCLE_THROW),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(32, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(43, MOVE_MIND_READER),
- //LEVEL_UP_MOVE(53, MOVE_CIRCLE_THROW),
+ LEVEL_UP_MOVE(53, MOVE_CIRCLE_THROW),
LEVEL_UP_END
};
@@ -1148,19 +1148,19 @@ static const struct LevelUpMove sAbraLevelUpLearnset[] = {
};
static const struct LevelUpMove sKadabraLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_KINESIS),
+ //LEVEL_UP_MOVE( 0, MOVE_KINESIS),
LEVEL_UP_MOVE( 1, MOVE_KINESIS),
LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE(16, MOVE_CONFUSION),
LEVEL_UP_MOVE(18, MOVE_DISABLE),
LEVEL_UP_MOVE(21, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(23, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE(23, MOVE_MIRACLE_EYE),
LEVEL_UP_MOVE(26, MOVE_REFLECT),
- //LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE(31, MOVE_RECOVER),
- //LEVEL_UP_MOVE(33, MOVE_TELEKINESIS),
- //LEVEL_UP_MOVE(36, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE(33, MOVE_TELEKINESIS),
+ LEVEL_UP_MOVE(36, MOVE_ALLY_SWITCH),
LEVEL_UP_MOVE(38, MOVE_PSYCHIC),
LEVEL_UP_MOVE(41, MOVE_ROLE_PLAY),
LEVEL_UP_MOVE(43, MOVE_FUTURE_SIGHT),
@@ -1169,19 +1169,19 @@ static const struct LevelUpMove sKadabraLevelUpLearnset[] = {
};
static const struct LevelUpMove sAlakazamLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_KINESIS),
+ //LEVEL_UP_MOVE( 0, MOVE_KINESIS),
LEVEL_UP_MOVE( 1, MOVE_KINESIS),
LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE(16, MOVE_CONFUSION),
LEVEL_UP_MOVE(18, MOVE_DISABLE),
LEVEL_UP_MOVE(21, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(23, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE(23, MOVE_MIRACLE_EYE),
LEVEL_UP_MOVE(26, MOVE_REFLECT),
- //LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(28, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE(31, MOVE_RECOVER),
- //LEVEL_UP_MOVE(33, MOVE_TELEKINESIS),
- //LEVEL_UP_MOVE(36, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE(33, MOVE_TELEKINESIS),
+ LEVEL_UP_MOVE(36, MOVE_ALLY_SWITCH),
LEVEL_UP_MOVE(38, MOVE_PSYCHIC),
LEVEL_UP_MOVE(41, MOVE_CALM_MIND),
LEVEL_UP_MOVE(43, MOVE_FUTURE_SIGHT),
@@ -1195,13 +1195,13 @@ static const struct LevelUpMove sMachopLevelUpLearnset[] = {
LEVEL_UP_MOVE( 3, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 7, MOVE_KARATE_CHOP),
LEVEL_UP_MOVE( 9, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP),
+ LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP),
LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS),
LEVEL_UP_MOVE(19, MOVE_REVENGE),
LEVEL_UP_MOVE(21, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(25, MOVE_VITAL_THROW),
- //LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(31, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(31, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE(33, MOVE_SUBMISSION),
LEVEL_UP_MOVE(37, MOVE_BULK_UP),
LEVEL_UP_MOVE(39, MOVE_CROSS_CHOP),
@@ -1218,13 +1218,13 @@ static const struct LevelUpMove sMachokeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 3, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 7, MOVE_KARATE_CHOP),
LEVEL_UP_MOVE( 9, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP),
+ LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP),
LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS),
LEVEL_UP_MOVE(19, MOVE_REVENGE),
LEVEL_UP_MOVE(21, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(25, MOVE_VITAL_THROW),
- //LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(33, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(33, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE(37, MOVE_SUBMISSION),
LEVEL_UP_MOVE(43, MOVE_BULK_UP),
LEVEL_UP_MOVE(47, MOVE_CROSS_CHOP),
@@ -1234,9 +1234,9 @@ static const struct LevelUpMove sMachokeLevelUpLearnset[] = {
};
static const struct LevelUpMove sMachampLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_STRENGTH),
+ //LEVEL_UP_MOVE( 0, MOVE_STRENGTH),
LEVEL_UP_MOVE( 1, MOVE_STRENGTH),
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE( 1, MOVE_LOW_KICK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -1244,13 +1244,13 @@ static const struct LevelUpMove sMachampLevelUpLearnset[] = {
LEVEL_UP_MOVE( 3, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 7, MOVE_KARATE_CHOP),
LEVEL_UP_MOVE( 9, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP),
+ LEVEL_UP_MOVE(13, MOVE_LOW_SWEEP),
LEVEL_UP_MOVE(15, MOVE_SEISMIC_TOSS),
LEVEL_UP_MOVE(19, MOVE_REVENGE),
LEVEL_UP_MOVE(21, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(25, MOVE_VITAL_THROW),
- //LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(33, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE(27, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(33, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE(37, MOVE_SUBMISSION),
LEVEL_UP_MOVE(43, MOVE_BULK_UP),
LEVEL_UP_MOVE(47, MOVE_CROSS_CHOP),
@@ -1269,11 +1269,11 @@ static const struct LevelUpMove sBellsproutLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_ACID),
LEVEL_UP_MOVE(27, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(29, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(35, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(35, MOVE_GASTRO_ACID),
LEVEL_UP_MOVE(39, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(41, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(41, MOVE_POISON_JAB),
LEVEL_UP_MOVE(47, MOVE_SLAM),
- //LEVEL_UP_MOVE(50, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(50, MOVE_WRING_OUT),
LEVEL_UP_END
};
@@ -1289,17 +1289,17 @@ static const struct LevelUpMove sWeepinbellLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_ACID),
LEVEL_UP_MOVE(29, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(32, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(39, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(39, MOVE_GASTRO_ACID),
LEVEL_UP_MOVE(44, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(47, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(47, MOVE_POISON_JAB),
LEVEL_UP_MOVE(54, MOVE_SLAM),
- //LEVEL_UP_MOVE(58, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(58, MOVE_WRING_OUT),
LEVEL_UP_END
};
static const struct LevelUpMove sVictreebelLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_LEAF_TORNADO),
- //LEVEL_UP_MOVE( 1, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE( 1, MOVE_LEAF_TORNADO),
LEVEL_UP_MOVE( 1, MOVE_STOCKPILE),
LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
LEVEL_UP_MOVE( 1, MOVE_SPIT_UP),
@@ -1307,7 +1307,7 @@ static const struct LevelUpMove sVictreebelLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(32, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(32, MOVE_LEAF_STORM),
LEVEL_UP_MOVE(44, MOVE_LEAF_BLADE),
LEVEL_UP_END
};
@@ -1317,25 +1317,25 @@ static const struct LevelUpMove sTentacoolLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 7, MOVE_CONSTRICT),
LEVEL_UP_MOVE(10, MOVE_ACID),
- //LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(16, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(19, MOVE_WRAP),
- //LEVEL_UP_MOVE(22, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(22, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(28, MOVE_BARRIER),
- //LEVEL_UP_MOVE(31, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(34, MOVE_BRINE),
+ LEVEL_UP_MOVE(31, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(34, MOVE_BRINE),
LEVEL_UP_MOVE(37, MOVE_SCREECH),
- //LEVEL_UP_MOVE(40, MOVE_HEX),
- //LEVEL_UP_MOVE(43, MOVE_SLUDGE_WAVE),
+ LEVEL_UP_MOVE(40, MOVE_HEX),
+ LEVEL_UP_MOVE(43, MOVE_SLUDGE_WAVE),
LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(49, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(49, MOVE_WRING_OUT),
LEVEL_UP_END
};
static const struct LevelUpMove sTentacruelLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE),
- //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE),
+ LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
@@ -1343,19 +1343,19 @@ static const struct LevelUpMove sTentacruelLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 7, MOVE_CONSTRICT),
LEVEL_UP_MOVE(10, MOVE_ACID),
- //LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(16, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(19, MOVE_WRAP),
- //LEVEL_UP_MOVE(22, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(22, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(28, MOVE_BARRIER),
- //LEVEL_UP_MOVE(32, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(36, MOVE_BRINE),
+ LEVEL_UP_MOVE(32, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(36, MOVE_BRINE),
LEVEL_UP_MOVE(40, MOVE_SCREECH),
- //LEVEL_UP_MOVE(44, MOVE_HEX),
- //LEVEL_UP_MOVE(48, MOVE_SLUDGE_WAVE),
+ LEVEL_UP_MOVE(44, MOVE_HEX),
+ LEVEL_UP_MOVE(48, MOVE_SLUDGE_WAVE),
LEVEL_UP_MOVE(52, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(56, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(56, MOVE_WRING_OUT),
LEVEL_UP_END
};
@@ -1363,19 +1363,19 @@ static const struct LevelUpMove sGeodudeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT),
- //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
LEVEL_UP_MOVE(12, MOVE_MAGNITUDE),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(22, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(22, MOVE_BULLDOZE),
LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE(28, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(28, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(30, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE(34, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(36, MOVE_EXPLOSION),
LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(42, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(42, MOVE_STONE_EDGE),
LEVEL_UP_END
};
@@ -1383,45 +1383,45 @@ static const struct LevelUpMove sGravelerLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT),
- //LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT),
- //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
LEVEL_UP_MOVE(12, MOVE_MAGNITUDE),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(22, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(22, MOVE_BULLDOZE),
LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE(40, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(44, MOVE_EXPLOSION),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sGolemLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT),
- //LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT),
- //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
- //LEVEL_UP_MOVE(10, MOVE_STEAMROLLER),
+ LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(10, MOVE_STEAMROLLER),
LEVEL_UP_MOVE(12, MOVE_MAGNITUDE),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(22, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(22, MOVE_BULLDOZE),
LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE(40, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(44, MOVE_EXPLOSION),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
@@ -1432,21 +1432,21 @@ static const struct LevelUpMove sPonytaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_EMBER),
LEVEL_UP_MOVE(13, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(17, MOVE_STOMP),
- //LEVEL_UP_MOVE(21, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(21, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(25, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(33, MOVE_INFERNO),
+ LEVEL_UP_MOVE(33, MOVE_INFERNO),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
LEVEL_UP_MOVE(41, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(45, MOVE_BOUNCE),
- //LEVEL_UP_MOVE(49, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(49, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
static const struct LevelUpMove sRapidashLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK),
+ //LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
LEVEL_UP_MOVE( 1, MOVE_MEGAHORN),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -1456,14 +1456,14 @@ static const struct LevelUpMove sRapidashLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_EMBER),
LEVEL_UP_MOVE(13, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(17, MOVE_STOMP),
- //LEVEL_UP_MOVE(21, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(21, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(25, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(33, MOVE_INFERNO),
+ LEVEL_UP_MOVE(33, MOVE_INFERNO),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
LEVEL_UP_MOVE(41, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(45, MOVE_BOUNCE),
- //LEVEL_UP_MOVE(49, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(49, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
@@ -1477,20 +1477,20 @@ static const struct LevelUpMove sSlowpokeLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_DISABLE),
LEVEL_UP_MOVE(23, MOVE_HEADBUTT),
LEVEL_UP_MOVE(28, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(36, MOVE_SLACK_OFF),
LEVEL_UP_MOVE(41, MOVE_AMNESIA),
LEVEL_UP_MOVE(45, MOVE_PSYCHIC),
LEVEL_UP_MOVE(49, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(54, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(58, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(58, MOVE_HEAL_PULSE),
LEVEL_UP_END
};
static const struct LevelUpMove sSlowbroLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_WITHDRAW),
+ //LEVEL_UP_MOVE( 0, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
- //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE( 1, MOVE_CURSE),
LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
@@ -1501,13 +1501,13 @@ static const struct LevelUpMove sSlowbroLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_DISABLE),
LEVEL_UP_MOVE(23, MOVE_HEADBUTT),
LEVEL_UP_MOVE(28, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(36, MOVE_SLACK_OFF),
LEVEL_UP_MOVE(43, MOVE_AMNESIA),
LEVEL_UP_MOVE(49, MOVE_PSYCHIC),
LEVEL_UP_MOVE(55, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(62, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(68, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(68, MOVE_HEAL_PULSE),
LEVEL_UP_END
};
@@ -1516,54 +1516,54 @@ static const struct LevelUpMove sMagnemiteLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 5, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 7, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB),
+ LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB),
LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(17, MOVE_SONIC_BOOM),
LEVEL_UP_MOVE(19, MOVE_SPARK),
- //LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(25, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
- //LEVEL_UP_MOVE(31, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(31, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE(35, MOVE_SCREECH),
- //LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
LEVEL_UP_MOVE(41, MOVE_LOCK_ON),
- //LEVEL_UP_MOVE(43, MOVE_MAGNET_RISE),
- //LEVEL_UP_MOVE(47, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(43, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(47, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(49, MOVE_ZAP_CANNON),
LEVEL_UP_END
};
static const struct LevelUpMove sMagnetonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK),
+ //LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON),
- //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 5, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 7, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB),
+ LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB),
LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(17, MOVE_SONIC_BOOM),
LEVEL_UP_MOVE(19, MOVE_SPARK),
- //LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(25, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
- //LEVEL_UP_MOVE(33, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(33, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE(39, MOVE_SCREECH),
- //LEVEL_UP_MOVE(43, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(43, MOVE_DISCHARGE),
LEVEL_UP_MOVE(49, MOVE_LOCK_ON),
- //LEVEL_UP_MOVE(53, MOVE_MAGNET_RISE),
- //LEVEL_UP_MOVE(59, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(53, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(59, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(63, MOVE_ZAP_CANNON),
LEVEL_UP_END
};
static const struct LevelUpMove sFarfetchdLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -1575,12 +1575,12 @@ static const struct LevelUpMove sFarfetchdLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(31, MOVE_AGILITY),
- //LEVEL_UP_MOVE(33, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(37, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(43, MOVE_FEINT),
+ LEVEL_UP_MOVE(33, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(37, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(43, MOVE_FEINT),
LEVEL_UP_MOVE(45, MOVE_FALSE_SWIPE),
- //LEVEL_UP_MOVE(49, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(55, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(49, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(55, MOVE_BRAVE_BIRD),
LEVEL_UP_END
};
@@ -1591,11 +1591,11 @@ static const struct LevelUpMove sDoduoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_RAGE),
LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(15, MOVE_PURSUIT),
- //LEVEL_UP_MOVE(19, MOVE_PLUCK),
- //LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(19, MOVE_PLUCK),
+ LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE(26, MOVE_AGILITY),
LEVEL_UP_MOVE(29, MOVE_UPROAR),
- //LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE),
LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(40, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(43, MOVE_DRILL_PECK),
@@ -1605,7 +1605,7 @@ static const struct LevelUpMove sDoduoLevelUpLearnset[] = {
};
static const struct LevelUpMove sDodrioLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK),
+ //LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -1615,11 +1615,11 @@ static const struct LevelUpMove sDodrioLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_RAGE),
LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(15, MOVE_PURSUIT),
- //LEVEL_UP_MOVE(19, MOVE_PLUCK),
- //LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(19, MOVE_PLUCK),
+ LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE(26, MOVE_AGILITY),
LEVEL_UP_MOVE(29, MOVE_UPROAR),
- //LEVEL_UP_MOVE(34, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(34, MOVE_ACUPRESSURE),
LEVEL_UP_MOVE(38, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(43, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(47, MOVE_DRILL_PECK),
@@ -1634,15 +1634,15 @@ static const struct LevelUpMove sSeelLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_WATER_SPORT),
LEVEL_UP_MOVE(11, MOVE_ICY_WIND),
LEVEL_UP_MOVE(13, MOVE_ENCORE),
- //LEVEL_UP_MOVE(17, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(17, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(21, MOVE_REST),
- //LEVEL_UP_MOVE(23, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(23, MOVE_AQUA_RING),
LEVEL_UP_MOVE(27, MOVE_AURORA_BEAM),
- //LEVEL_UP_MOVE(31, MOVE_AQUA_JET),
- //LEVEL_UP_MOVE(33, MOVE_BRINE),
+ LEVEL_UP_MOVE(31, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(33, MOVE_BRINE),
LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(41, MOVE_DIVE),
- //LEVEL_UP_MOVE(43, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(43, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(47, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(51, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(53, MOVE_HAIL),
@@ -1650,7 +1650,7 @@ static const struct LevelUpMove sSeelLevelUpLearnset[] = {
};
static const struct LevelUpMove sDewgongLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SHEER_COLD),
+ //LEVEL_UP_MOVE( 0, MOVE_SHEER_COLD),
LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD),
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -1660,15 +1660,15 @@ static const struct LevelUpMove sDewgongLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(11, MOVE_ICY_WIND),
LEVEL_UP_MOVE(13, MOVE_ENCORE),
- //LEVEL_UP_MOVE(17, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(17, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(21, MOVE_REST),
- //LEVEL_UP_MOVE(23, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(23, MOVE_AQUA_RING),
LEVEL_UP_MOVE(27, MOVE_AURORA_BEAM),
- //LEVEL_UP_MOVE(31, MOVE_AQUA_JET),
- //LEVEL_UP_MOVE(33, MOVE_BRINE),
+ LEVEL_UP_MOVE(31, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(33, MOVE_BRINE),
LEVEL_UP_MOVE(39, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(45, MOVE_DIVE),
- //LEVEL_UP_MOVE(49, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(49, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(55, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(61, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(65, MOVE_HAIL),
@@ -1682,22 +1682,22 @@ static const struct LevelUpMove sGrimerLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(12, MOVE_DISABLE),
LEVEL_UP_MOVE(15, MOVE_SLUDGE),
- //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(21, MOVE_MINIMIZE),
- //LEVEL_UP_MOVE(26, MOVE_FLING),
+ LEVEL_UP_MOVE(26, MOVE_FLING),
LEVEL_UP_MOVE(29, MOVE_SLUDGE_BOMB),
- //LEVEL_UP_MOVE(32, MOVE_SLUDGE_WAVE),
+ LEVEL_UP_MOVE(32, MOVE_SLUDGE_WAVE),
LEVEL_UP_MOVE(37, MOVE_SCREECH),
- //LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT),
LEVEL_UP_MOVE(43, MOVE_ACID_ARMOR),
- //LEVEL_UP_MOVE(46, MOVE_BELCH),
+ LEVEL_UP_MOVE(46, MOVE_BELCH),
LEVEL_UP_MOVE(48, MOVE_MEMENTO),
LEVEL_UP_END
};
static const struct LevelUpMove sMukLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
@@ -1706,15 +1706,15 @@ static const struct LevelUpMove sMukLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(12, MOVE_DISABLE),
LEVEL_UP_MOVE(15, MOVE_SLUDGE),
- //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(21, MOVE_MINIMIZE),
- //LEVEL_UP_MOVE(26, MOVE_FLING),
+ LEVEL_UP_MOVE(26, MOVE_FLING),
LEVEL_UP_MOVE(29, MOVE_SLUDGE_BOMB),
- //LEVEL_UP_MOVE(32, MOVE_SLUDGE_WAVE),
+ LEVEL_UP_MOVE(32, MOVE_SLUDGE_WAVE),
LEVEL_UP_MOVE(37, MOVE_SCREECH),
- //LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT),
LEVEL_UP_MOVE(46, MOVE_ACID_ARMOR),
- //LEVEL_UP_MOVE(52, MOVE_BELCH),
+ LEVEL_UP_MOVE(52, MOVE_BELCH),
LEVEL_UP_MOVE(57, MOVE_MEMENTO),
LEVEL_UP_END
};
@@ -1728,29 +1728,29 @@ static const struct LevelUpMove sShellderLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_PROTECT),
LEVEL_UP_MOVE(20, MOVE_LEER),
LEVEL_UP_MOVE(25, MOVE_CLAMP),
- //LEVEL_UP_MOVE(28, MOVE_ICE_SHARD),
- //LEVEL_UP_MOVE(32, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE(28, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(32, MOVE_RAZOR_SHELL),
LEVEL_UP_MOVE(37, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(40, MOVE_WHIRLPOOL),
- //LEVEL_UP_MOVE(44, MOVE_BRINE),
+ LEVEL_UP_MOVE(44, MOVE_BRINE),
LEVEL_UP_MOVE(49, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(52, MOVE_ICE_BEAM),
- //LEVEL_UP_MOVE(56, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(56, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(61, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
static const struct LevelUpMove sCloysterLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
- //LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(13, MOVE_SPIKE_CANNON),
LEVEL_UP_MOVE(28, MOVE_SPIKES),
- //LEVEL_UP_MOVE(50, MOVE_ICICLE_CRASH),
+ LEVEL_UP_MOVE(50, MOVE_ICICLE_CRASH),
LEVEL_UP_END
};
@@ -1762,19 +1762,19 @@ static const struct LevelUpMove sGastlyLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_CURSE),
LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(19, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(26, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(26, MOVE_PAYBACK),
LEVEL_UP_MOVE(29, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(33, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(36, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(36, MOVE_DARK_PULSE),
LEVEL_UP_MOVE(40, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE(43, MOVE_HEX),
+ LEVEL_UP_MOVE(43, MOVE_HEX),
LEVEL_UP_MOVE(47, MOVE_NIGHTMARE),
LEVEL_UP_END
};
static const struct LevelUpMove sHaunterLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 1, MOVE_LICK),
@@ -1784,19 +1784,19 @@ static const struct LevelUpMove sHaunterLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_CURSE),
LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(19, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(28, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(28, MOVE_PAYBACK),
LEVEL_UP_MOVE(33, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(39, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(44, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(44, MOVE_DARK_PULSE),
LEVEL_UP_MOVE(50, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE(55, MOVE_HEX),
+ LEVEL_UP_MOVE(55, MOVE_HEX),
LEVEL_UP_MOVE(61, MOVE_NIGHTMARE),
LEVEL_UP_END
};
static const struct LevelUpMove sGengarLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 1, MOVE_LICK),
@@ -1806,13 +1806,13 @@ static const struct LevelUpMove sGengarLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_CURSE),
LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(19, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(28, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(28, MOVE_PAYBACK),
LEVEL_UP_MOVE(33, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(39, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(44, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(44, MOVE_DARK_PULSE),
LEVEL_UP_MOVE(50, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE(55, MOVE_HEX),
+ LEVEL_UP_MOVE(55, MOVE_HEX),
LEVEL_UP_MOVE(61, MOVE_NIGHTMARE),
LEVEL_UP_END
};
@@ -1826,10 +1826,10 @@ static const struct LevelUpMove sOnixLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(10, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(13, MOVE_RAGE),
- //LEVEL_UP_MOVE(16, MOVE_STEALTH_ROCK),
- //LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH),
- //LEVEL_UP_MOVE(20, MOVE_GYRO_BALL),
- //LEVEL_UP_MOVE(22, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(16, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(20, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(25, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(28, MOVE_SLAM),
LEVEL_UP_MOVE(31, MOVE_SCREECH),
@@ -1837,7 +1837,7 @@ static const struct LevelUpMove sOnixLevelUpLearnset[] = {
LEVEL_UP_MOVE(37, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(40, MOVE_IRON_TAIL),
LEVEL_UP_MOVE(43, MOVE_DIG),
- //LEVEL_UP_MOVE(46, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(46, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(52, MOVE_SANDSTORM),
LEVEL_UP_END
@@ -1852,23 +1852,23 @@ static const struct LevelUpMove sDrowzeeLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_POISON_GAS),
LEVEL_UP_MOVE(21, MOVE_MEDITATE),
LEVEL_UP_MOVE(25, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(33, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(37, MOVE_SYNCHRONOISE),
- //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(37, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(45, MOVE_SWAGGER),
LEVEL_UP_MOVE(49, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(53, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(57, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(53, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(57, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(61, MOVE_FUTURE_SIGHT),
LEVEL_UP_END
};
static const struct LevelUpMove sHypnoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE( 1, MOVE_NIGHTMARE),
- //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -1879,14 +1879,14 @@ static const struct LevelUpMove sHypnoLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_POISON_GAS),
LEVEL_UP_MOVE(21, MOVE_MEDITATE),
LEVEL_UP_MOVE(25, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(33, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(37, MOVE_SYNCHRONOISE),
- //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(37, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(45, MOVE_SWAGGER),
LEVEL_UP_MOVE(49, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(53, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(57, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(53, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(57, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(61, MOVE_FUTURE_SIGHT),
LEVEL_UP_END
};
@@ -1904,14 +1904,14 @@ static const struct LevelUpMove sKrabbyLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_PROTECT),
LEVEL_UP_MOVE(31, MOVE_GUILLOTINE),
LEVEL_UP_MOVE(35, MOVE_SLAM),
- //LEVEL_UP_MOVE(39, MOVE_BRINE),
+ LEVEL_UP_MOVE(39, MOVE_BRINE),
LEVEL_UP_MOVE(41, MOVE_CRABHAMMER),
LEVEL_UP_MOVE(45, MOVE_FLAIL),
LEVEL_UP_END
};
static const struct LevelUpMove sKinglerLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP),
@@ -1926,7 +1926,7 @@ static const struct LevelUpMove sKinglerLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_PROTECT),
LEVEL_UP_MOVE(37, MOVE_GUILLOTINE),
LEVEL_UP_MOVE(44, MOVE_SLAM),
- //LEVEL_UP_MOVE(51, MOVE_BRINE),
+ LEVEL_UP_MOVE(51, MOVE_BRINE),
LEVEL_UP_MOVE(56, MOVE_CRABHAMMER),
LEVEL_UP_MOVE(63, MOVE_FLAIL),
LEVEL_UP_END
@@ -1936,43 +1936,43 @@ static const struct LevelUpMove sVoltorbLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 4, MOVE_SONIC_BOOM),
- //LEVEL_UP_MOVE( 6, MOVE_EERIE_IMPULSE),
+ LEVEL_UP_MOVE( 6, MOVE_EERIE_IMPULSE),
LEVEL_UP_MOVE( 9, MOVE_SPARK),
LEVEL_UP_MOVE(11, MOVE_ROLLOUT),
LEVEL_UP_MOVE(13, MOVE_SCREECH),
- //LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE(20, MOVE_SWIFT),
- //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(26, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(29, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(34, MOVE_MAGNET_RISE),
- //LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(34, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
LEVEL_UP_MOVE(41, MOVE_EXPLOSION),
- //LEVEL_UP_MOVE(46, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(46, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(48, MOVE_MIRROR_COAT),
LEVEL_UP_END
};
static const struct LevelUpMove sElectrodeLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SONIC_BOOM),
- //LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
+ LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
LEVEL_UP_MOVE( 4, MOVE_SONIC_BOOM),
- //LEVEL_UP_MOVE( 6, MOVE_EERIE_IMPULSE),
+ LEVEL_UP_MOVE( 6, MOVE_EERIE_IMPULSE),
LEVEL_UP_MOVE( 9, MOVE_SPARK),
LEVEL_UP_MOVE(11, MOVE_ROLLOUT),
LEVEL_UP_MOVE(13, MOVE_SCREECH),
- //LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(16, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE(20, MOVE_SWIFT),
- //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(26, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(29, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(36, MOVE_MAGNET_RISE),
- //LEVEL_UP_MOVE(41, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(36, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(41, MOVE_DISCHARGE),
LEVEL_UP_MOVE(47, MOVE_EXPLOSION),
- //LEVEL_UP_MOVE(54, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(54, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(58, MOVE_MIRROR_COAT),
LEVEL_UP_END
};
@@ -1988,25 +1988,25 @@ static const struct LevelUpMove sExeggcuteLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_POISON_POWDER),
LEVEL_UP_MOVE(23, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE(27, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(33, MOVE_WORRY_SEED),
- //LEVEL_UP_MOVE(37, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(33, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(37, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(43, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE(47, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE(50, MOVE_BESTOW),
+ LEVEL_UP_MOVE(50, MOVE_BESTOW),
LEVEL_UP_END
};
static const struct LevelUpMove sExeggutorLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_STOMP),
+ //LEVEL_UP_MOVE( 0, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
- //LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
LEVEL_UP_MOVE( 1, MOVE_BARRAGE),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(17, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(17, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(27, MOVE_EGG_BOMB),
- //LEVEL_UP_MOVE(37, MOVE_WOOD_HAMMER),
- //LEVEL_UP_MOVE(47, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(37, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(47, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -2021,11 +2021,11 @@ static const struct LevelUpMove sCuboneLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_RAGE),
LEVEL_UP_MOVE(27, MOVE_FALSE_SWIPE),
LEVEL_UP_MOVE(31, MOVE_THRASH),
- //LEVEL_UP_MOVE(33, MOVE_FLING),
- //LEVEL_UP_MOVE(37, MOVE_STOMPING_TANTRUM),
+ LEVEL_UP_MOVE(33, MOVE_FLING),
+ LEVEL_UP_MOVE(37, MOVE_STOMPING_TANTRUM),
LEVEL_UP_MOVE(41, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(47, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(47, MOVE_RETALIATE),
LEVEL_UP_MOVE(51, MOVE_BONE_RUSH),
LEVEL_UP_END
};
@@ -2044,20 +2044,20 @@ static const struct LevelUpMove sMarowakLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_RAGE),
LEVEL_UP_MOVE(27, MOVE_FALSE_SWIPE),
LEVEL_UP_MOVE(33, MOVE_THRASH),
- //LEVEL_UP_MOVE(37, MOVE_FLING),
- //LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM),
+ LEVEL_UP_MOVE(37, MOVE_FLING),
+ LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM),
LEVEL_UP_MOVE(49, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(53, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(59, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(59, MOVE_RETALIATE),
LEVEL_UP_MOVE(65, MOVE_BONE_RUSH),
LEVEL_UP_END
};
static const struct LevelUpMove sHitmonleeLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK),
+ //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_REVERSAL),
- //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE( 1, MOVE_MEGA_KICK),
LEVEL_UP_MOVE( 1, MOVE_REVENGE),
LEVEL_UP_MOVE( 1, MOVE_MEDITATE),
@@ -2068,23 +2068,23 @@ static const struct LevelUpMove sHitmonleeLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(17, MOVE_BRICK_BREAK),
LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(25, MOVE_FEINT),
+ LEVEL_UP_MOVE(25, MOVE_FEINT),
LEVEL_UP_MOVE(29, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_MOVE(33, MOVE_MIND_READER),
LEVEL_UP_MOVE(37, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(41, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(41, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(45, MOVE_BLAZE_KICK),
LEVEL_UP_MOVE(49, MOVE_ENDURE),
LEVEL_UP_MOVE(53, MOVE_MEGA_KICK),
- //LEVEL_UP_MOVE(57, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(57, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(61, MOVE_REVERSAL),
LEVEL_UP_END
};
static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_COMET_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_COMET_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_COMET_PUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_REVENGE),
@@ -2094,10 +2094,10 @@ static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_AGILITY),
LEVEL_UP_MOVE(11, MOVE_PURSUIT),
LEVEL_UP_MOVE(16, MOVE_MACH_PUNCH),
- //LEVEL_UP_MOVE(16, MOVE_BULLET_PUNCH),
- //LEVEL_UP_MOVE(21, MOVE_FEINT),
- //LEVEL_UP_MOVE(26, MOVE_VACUUM_WAVE),
- //LEVEL_UP_MOVE(31, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(16, MOVE_BULLET_PUNCH),
+ LEVEL_UP_MOVE(21, MOVE_FEINT),
+ LEVEL_UP_MOVE(26, MOVE_VACUUM_WAVE),
+ LEVEL_UP_MOVE(31, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(36, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE(36, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE(36, MOVE_FIRE_PUNCH),
@@ -2106,7 +2106,7 @@ static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = {
LEVEL_UP_MOVE(50, MOVE_DETECT),
LEVEL_UP_MOVE(56, MOVE_FOCUS_PUNCH),
LEVEL_UP_MOVE(61, MOVE_COUNTER),
- //LEVEL_UP_MOVE(66, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(66, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
@@ -2120,12 +2120,12 @@ static const struct LevelUpMove sLickitungLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_DISABLE),
LEVEL_UP_MOVE(29, MOVE_SLAM),
LEVEL_UP_MOVE(33, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY),
- //LEVEL_UP_MOVE(41, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(41, MOVE_ME_FIRST),
LEVEL_UP_MOVE(45, MOVE_REFRESH),
LEVEL_UP_MOVE(49, MOVE_SCREECH),
- //LEVEL_UP_MOVE(53, MOVE_POWER_WHIP),
- //LEVEL_UP_MOVE(57, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(53, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(57, MOVE_WRING_OUT),
LEVEL_UP_END
};
@@ -2134,39 +2134,39 @@ static const struct LevelUpMove sKoffingLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 4, MOVE_SMOG),
LEVEL_UP_MOVE( 7, MOVE_SMOKESCREEN),
- //LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(15, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(15, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(18, MOVE_SLUDGE),
LEVEL_UP_MOVE(23, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(26, MOVE_HAZE),
- //LEVEL_UP_MOVE(29, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(29, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(34, MOVE_SLUDGE_BOMB),
LEVEL_UP_MOVE(37, MOVE_EXPLOSION),
LEVEL_UP_MOVE(40, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE(42, MOVE_BELCH),
+ LEVEL_UP_MOVE(42, MOVE_BELCH),
LEVEL_UP_MOVE(45, MOVE_MEMENTO),
LEVEL_UP_END
};
static const struct LevelUpMove sWeezingLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 4, MOVE_SMOG),
LEVEL_UP_MOVE( 7, MOVE_SMOKESCREEN),
- //LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(15, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(15, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(18, MOVE_SLUDGE),
LEVEL_UP_MOVE(23, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(26, MOVE_HAZE),
- //LEVEL_UP_MOVE(29, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(29, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(34, MOVE_SLUDGE_BOMB),
LEVEL_UP_MOVE(40, MOVE_EXPLOSION),
LEVEL_UP_MOVE(46, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE(51, MOVE_BELCH),
+ LEVEL_UP_MOVE(51, MOVE_BELCH),
LEVEL_UP_MOVE(57, MOVE_MEMENTO),
LEVEL_UP_END
};
@@ -2176,14 +2176,14 @@ static const struct LevelUpMove sRhyhornLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 9, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(17, MOVE_STOMP),
- //LEVEL_UP_MOVE(21, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(21, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(29, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(33, MOVE_DRILL_RUN),
+ LEVEL_UP_MOVE(33, MOVE_DRILL_RUN),
LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(41, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(41, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(45, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(49, MOVE_MEGAHORN),
LEVEL_UP_MOVE(53, MOVE_HORN_DRILL),
@@ -2192,7 +2192,7 @@ static const struct LevelUpMove sRhyhornLevelUpLearnset[] = {
static const struct LevelUpMove sRhydonLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_HORN_DRILL),
LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -2200,14 +2200,14 @@ static const struct LevelUpMove sRhydonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 9, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(17, MOVE_STOMP),
- //LEVEL_UP_MOVE(21, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(21, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(29, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(33, MOVE_DRILL_RUN),
+ LEVEL_UP_MOVE(33, MOVE_DRILL_RUN),
LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(41, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(41, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(48, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(55, MOVE_MEGAHORN),
LEVEL_UP_MOVE(62, MOVE_HORN_DRILL),
@@ -2223,15 +2223,15 @@ static const struct LevelUpMove sChanseyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_REFRESH),
LEVEL_UP_MOVE(12, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(16, MOVE_SOFT_BOILED),
- //LEVEL_UP_MOVE(20, MOVE_BESTOW),
+ LEVEL_UP_MOVE(20, MOVE_BESTOW),
LEVEL_UP_MOVE(23, MOVE_MINIMIZE),
LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(31, MOVE_SING),
- //LEVEL_UP_MOVE(35, MOVE_FLING),
- //LEVEL_UP_MOVE(39, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(35, MOVE_FLING),
+ LEVEL_UP_MOVE(39, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(44, MOVE_EGG_BOMB),
LEVEL_UP_MOVE(50, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(57, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(57, MOVE_HEALING_WISH),
LEVEL_UP_MOVE(65, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
@@ -2248,14 +2248,14 @@ static const struct LevelUpMove sTangelaLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(27, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(30, MOVE_STUN_SPORE),
- //LEVEL_UP_MOVE(33, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(33, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(38, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(41, MOVE_SLAM),
LEVEL_UP_MOVE(44, MOVE_TICKLE),
- //LEVEL_UP_MOVE(46, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(48, MOVE_GRASSY_TERRAIN),
- //LEVEL_UP_MOVE(50, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(46, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(48, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(50, MOVE_POWER_WHIP),
LEVEL_UP_END
};
@@ -2265,15 +2265,15 @@ static const struct LevelUpMove sKangaskhanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_FAKE_OUT),
LEVEL_UP_MOVE(10, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE(13, MOVE_BITE),
- //LEVEL_UP_MOVE(19, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(19, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE(22, MOVE_RAGE),
LEVEL_UP_MOVE(25, MOVE_MEGA_PUNCH),
- //LEVEL_UP_MOVE(31, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(31, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(34, MOVE_DIZZY_PUNCH),
LEVEL_UP_MOVE(37, MOVE_CRUNCH),
LEVEL_UP_MOVE(43, MOVE_ENDURE),
LEVEL_UP_MOVE(46, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE(49, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(49, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(50, MOVE_REVERSAL),
LEVEL_UP_END
};
@@ -2286,9 +2286,9 @@ static const struct LevelUpMove sHorseaLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_TWISTER),
LEVEL_UP_MOVE(21, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(26, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(31, MOVE_BRINE),
+ LEVEL_UP_MOVE(31, MOVE_BRINE),
LEVEL_UP_MOVE(36, MOVE_AGILITY),
- //LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(46, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(52, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -2306,9 +2306,9 @@ static const struct LevelUpMove sSeadraLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_TWISTER),
LEVEL_UP_MOVE(21, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(26, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(31, MOVE_BRINE),
+ LEVEL_UP_MOVE(31, MOVE_BRINE),
LEVEL_UP_MOVE(38, MOVE_AGILITY),
- //LEVEL_UP_MOVE(45, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(45, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(52, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(60, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -2322,19 +2322,19 @@ static const struct LevelUpMove sGoldeenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE(13, MOVE_FLAIL),
LEVEL_UP_MOVE(16, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(21, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(21, MOVE_AQUA_RING),
LEVEL_UP_MOVE(24, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(29, MOVE_AGILITY),
LEVEL_UP_MOVE(32, MOVE_WATERFALL),
LEVEL_UP_MOVE(37, MOVE_HORN_DRILL),
- //LEVEL_UP_MOVE(40, MOVE_SOAK),
+ LEVEL_UP_MOVE(40, MOVE_SOAK),
LEVEL_UP_MOVE(45, MOVE_MEGAHORN),
LEVEL_UP_END
};
static const struct LevelUpMove sSeakingLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MEGAHORN),
- //LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT),
@@ -2343,12 +2343,12 @@ static const struct LevelUpMove sSeakingLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE(13, MOVE_FLAIL),
LEVEL_UP_MOVE(16, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(21, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(21, MOVE_AQUA_RING),
LEVEL_UP_MOVE(24, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(29, MOVE_AGILITY),
LEVEL_UP_MOVE(32, MOVE_WATERFALL),
LEVEL_UP_MOVE(40, MOVE_HORN_DRILL),
- //LEVEL_UP_MOVE(46, MOVE_SOAK),
+ LEVEL_UP_MOVE(46, MOVE_SOAK),
LEVEL_UP_MOVE(54, MOVE_MEGAHORN),
LEVEL_UP_END
};
@@ -2363,11 +2363,11 @@ static const struct LevelUpMove sStaryuLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_SWIFT),
LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(22, MOVE_CAMOUFLAGE),
- //LEVEL_UP_MOVE(24, MOVE_GYRO_BALL),
- //LEVEL_UP_MOVE(28, MOVE_BRINE),
+ LEVEL_UP_MOVE(24, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(28, MOVE_BRINE),
LEVEL_UP_MOVE(31, MOVE_MINIMIZE),
- //LEVEL_UP_MOVE(35, MOVE_REFLECT_TYPE),
- //LEVEL_UP_MOVE(37, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(35, MOVE_REFLECT_TYPE),
+ LEVEL_UP_MOVE(37, MOVE_POWER_GEM),
LEVEL_UP_MOVE(40, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(42, MOVE_PSYCHIC),
LEVEL_UP_MOVE(46, MOVE_LIGHT_SCREEN),
@@ -2378,7 +2378,7 @@ static const struct LevelUpMove sStaryuLevelUpLearnset[] = {
static const struct LevelUpMove sStarmieLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT),
+ LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 1, MOVE_RECOVER),
@@ -2388,16 +2388,16 @@ static const struct LevelUpMove sStarmieLevelUpLearnset[] = {
};
static const struct LevelUpMove sMrMimeLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP),
- //LEVEL_UP_MOVE( 1, MOVE_GUARD_SWAP),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP),
+ LEVEL_UP_MOVE( 1, MOVE_GUARD_SWAP),
LEVEL_UP_MOVE( 1, MOVE_BARRIER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE( 4, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 4, MOVE_COPYCAT),
LEVEL_UP_MOVE( 8, MOVE_MEDITATE),
LEVEL_UP_MOVE(11, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(15, MOVE_MIMIC),
@@ -2417,7 +2417,7 @@ static const struct LevelUpMove sMrMimeLevelUpLearnset[] = {
};
static const struct LevelUpMove sScytherLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE),
+ LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_FOCUS_ENERGY),
@@ -2429,17 +2429,17 @@ static const struct LevelUpMove sScytherLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_SLASH),
LEVEL_UP_MOVE(33, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE(37, MOVE_DOUBLE_TEAM),
- //LEVEL_UP_MOVE(41, MOVE_X_SCISSOR),
- //LEVEL_UP_MOVE(45, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(49, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE(50, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(41, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(45, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(49, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(50, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(57, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(61, MOVE_FEINT),
+ LEVEL_UP_MOVE(61, MOVE_FEINT),
LEVEL_UP_END
};
static const struct LevelUpMove sJynxLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE( 1, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE( 1, MOVE_PERISH_SONG),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_LICK),
@@ -2450,13 +2450,13 @@ static const struct LevelUpMove sJynxLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(15, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(18, MOVE_ICE_PUNCH),
- //LEVEL_UP_MOVE(21, MOVE_HEART_STAMP),
+ LEVEL_UP_MOVE(21, MOVE_HEART_STAMP),
LEVEL_UP_MOVE(25, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE(28, MOVE_FAKE_TEARS),
- //LEVEL_UP_MOVE(33, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(39, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(33, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(39, MOVE_AVALANCHE),
LEVEL_UP_MOVE(44, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(49, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(49, MOVE_WRING_OUT),
LEVEL_UP_MOVE(55, MOVE_PERISH_SONG),
LEVEL_UP_MOVE(60, MOVE_BLIZZARD),
LEVEL_UP_END
@@ -2471,10 +2471,10 @@ static const struct LevelUpMove sElectabuzzLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_SWIFT),
LEVEL_UP_MOVE(15, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(19, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(26, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(29, MOVE_THUNDER_PUNCH),
- //LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
LEVEL_UP_MOVE(42, MOVE_SCREECH),
LEVEL_UP_MOVE(49, MOVE_THUNDERBOLT),
LEVEL_UP_MOVE(55, MOVE_THUNDER),
@@ -2489,11 +2489,11 @@ static const struct LevelUpMove sMagmarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(12, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(15, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG),
- //LEVEL_UP_MOVE(22, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(22, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(26, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(29, MOVE_FIRE_PUNCH),
- //LEVEL_UP_MOVE(36, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(36, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(42, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(55, MOVE_FIRE_BLAST),
@@ -2508,11 +2508,11 @@ static const struct LevelUpMove sPinsirLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_HARDEN),
LEVEL_UP_MOVE(15, MOVE_REVENGE),
LEVEL_UP_MOVE(18, MOVE_VITAL_THROW),
- //LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE(26, MOVE_BRICK_BREAK),
- //LEVEL_UP_MOVE(29, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(29, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(33, MOVE_SUBMISSION),
- //LEVEL_UP_MOVE(36, MOVE_STORM_THROW),
+ LEVEL_UP_MOVE(36, MOVE_STORM_THROW),
LEVEL_UP_MOVE(40, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(43, MOVE_THRASH),
LEVEL_UP_MOVE(47, MOVE_SUPERPOWER),
@@ -2528,14 +2528,14 @@ static const struct LevelUpMove sTaurosLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(15, MOVE_PURSUIT),
LEVEL_UP_MOVE(19, MOVE_REST),
- //LEVEL_UP_MOVE(24, MOVE_PAYBACK),
- //LEVEL_UP_MOVE(29, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(24, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(29, MOVE_WORK_UP),
LEVEL_UP_MOVE(35, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(48, MOVE_SWAGGER),
LEVEL_UP_MOVE(55, MOVE_THRASH),
LEVEL_UP_MOVE(63, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(71, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(71, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
@@ -2547,19 +2547,19 @@ static const struct LevelUpMove sMagikarpLevelUpLearnset[] = {
};
static const struct LevelUpMove sGyaradosLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BITE),
+ //LEVEL_UP_MOVE( 0, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_THRASH),
LEVEL_UP_MOVE(21, MOVE_LEER),
LEVEL_UP_MOVE(24, MOVE_TWISTER),
- //LEVEL_UP_MOVE(27, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE(30, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(27, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(30, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(33, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(36, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(39, MOVE_CRUNCH),
LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(45, MOVE_DRAGON_DANCE),
- //LEVEL_UP_MOVE(48, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(48, MOVE_HURRICANE),
LEVEL_UP_MOVE(51, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(54, MOVE_HYPER_BEAM),
LEVEL_UP_END
@@ -2571,13 +2571,13 @@ static const struct LevelUpMove sLaprasLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 4, MOVE_MIST),
LEVEL_UP_MOVE( 7, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(14, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(18, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(22, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(27, MOVE_PERISH_SONG),
LEVEL_UP_MOVE(32, MOVE_ICE_BEAM),
- //LEVEL_UP_MOVE(37, MOVE_BRINE),
+ LEVEL_UP_MOVE(37, MOVE_BRINE),
LEVEL_UP_MOVE(43, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(47, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(50, MOVE_SHEER_COLD),
@@ -2596,7 +2596,7 @@ static const struct LevelUpMove sEeveeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_BITE),
LEVEL_UP_MOVE(17, MOVE_SWIFT),
@@ -2605,68 +2605,68 @@ static const struct LevelUpMove sEeveeLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_CHARM),
LEVEL_UP_MOVE(33, MOVE_BATON_PASS),
LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(45, MOVE_TRUMP_CARD),
+ LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(45, MOVE_TRUMP_CARD),
LEVEL_UP_END
};
static const struct LevelUpMove sVaporeonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_WATER_GUN),
+ //LEVEL_UP_MOVE( 0, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(20, MOVE_AURORA_BEAM),
- //LEVEL_UP_MOVE(25, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(25, MOVE_AQUA_RING),
LEVEL_UP_MOVE(29, MOVE_ACID_ARMOR),
LEVEL_UP_MOVE(33, MOVE_HAZE),
LEVEL_UP_MOVE(37, MOVE_MUDDY_WATER),
- //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
static const struct LevelUpMove sJolteonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_THUNDER_SHOCK),
+ //LEVEL_UP_MOVE( 0, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE(20, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE(20, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE(25, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(29, MOVE_AGILITY),
LEVEL_UP_MOVE(33, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(45, MOVE_THUNDER),
LEVEL_UP_END
};
static const struct LevelUpMove sFlareonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_EMBER),
+ //LEVEL_UP_MOVE( 0, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_BITE),
- //LEVEL_UP_MOVE(20, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(20, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(25, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE(29, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(33, MOVE_SMOG),
- //LEVEL_UP_MOVE(37, MOVE_LAVA_PLUME),
- //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(45, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(37, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(45, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
@@ -2678,10 +2678,10 @@ static const struct LevelUpMove sPorygonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_PSYBEAM),
LEVEL_UP_MOVE(12, MOVE_AGILITY),
LEVEL_UP_MOVE(18, MOVE_RECOVER),
- //LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE(29, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(34, MOVE_RECYCLE),
- //LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
LEVEL_UP_MOVE(45, MOVE_LOCK_ON),
LEVEL_UP_MOVE(50, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE(56, MOVE_MAGIC_COAT),
@@ -2697,18 +2697,18 @@ static const struct LevelUpMove sOmanyteLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_ROLLOUT),
LEVEL_UP_MOVE(19, MOVE_LEER),
LEVEL_UP_MOVE(25, MOVE_MUD_SHOT),
- //LEVEL_UP_MOVE(28, MOVE_BRINE),
+ LEVEL_UP_MOVE(28, MOVE_BRINE),
LEVEL_UP_MOVE(34, MOVE_PROTECT),
LEVEL_UP_MOVE(37, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(43, MOVE_TICKLE),
LEVEL_UP_MOVE(46, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(50, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(50, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(55, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
static const struct LevelUpMove sOmastarLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SPIKE_CANNON),
+ //LEVEL_UP_MOVE( 0, MOVE_SPIKE_CANNON),
LEVEL_UP_MOVE( 1, MOVE_SPIKE_CANNON),
LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
@@ -2719,12 +2719,12 @@ static const struct LevelUpMove sOmastarLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_ROLLOUT),
LEVEL_UP_MOVE(19, MOVE_LEER),
LEVEL_UP_MOVE(25, MOVE_MUD_SHOT),
- //LEVEL_UP_MOVE(28, MOVE_BRINE),
+ LEVEL_UP_MOVE(28, MOVE_BRINE),
LEVEL_UP_MOVE(34, MOVE_PROTECT),
LEVEL_UP_MOVE(37, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(48, MOVE_TICKLE),
LEVEL_UP_MOVE(56, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(67, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(67, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(75, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
@@ -2737,19 +2737,19 @@ static const struct LevelUpMove sKabutoLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(21, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(26, MOVE_ENDURE),
- //LEVEL_UP_MOVE(31, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(31, MOVE_AQUA_JET),
LEVEL_UP_MOVE(36, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(41, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(46, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(50, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(50, MOVE_WRING_OUT),
LEVEL_UP_END
};
static const struct LevelUpMove sKabutopsLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SLASH),
+ //LEVEL_UP_MOVE( 0, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
@@ -2759,20 +2759,20 @@ static const struct LevelUpMove sKabutopsLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(21, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(26, MOVE_ENDURE),
- //LEVEL_UP_MOVE(31, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(31, MOVE_AQUA_JET),
LEVEL_UP_MOVE(36, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(45, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(54, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(63, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(72, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(63, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(72, MOVE_NIGHT_SLASH),
LEVEL_UP_END
};
static const struct LevelUpMove sAerodactylLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -2782,11 +2782,11 @@ static const struct LevelUpMove sAerodactylLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(33, MOVE_CRUNCH),
LEVEL_UP_MOVE(41, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(49, MOVE_SKY_DROP),
- //LEVEL_UP_MOVE(57, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(49, MOVE_SKY_DROP),
+ LEVEL_UP_MOVE(57, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM),
LEVEL_UP_MOVE(73, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(81, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(81, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
@@ -2795,19 +2795,19 @@ static const struct LevelUpMove sSnorlaxLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 9, MOVE_AMNESIA),
LEVEL_UP_MOVE(12, MOVE_LICK),
- //LEVEL_UP_MOVE(17, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(17, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(20, MOVE_YAWN),
LEVEL_UP_MOVE(25, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(28, MOVE_REST),
LEVEL_UP_MOVE(28, MOVE_SNORE),
LEVEL_UP_MOVE(33, MOVE_SLEEP_TALK),
- //LEVEL_UP_MOVE(35, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(35, MOVE_GIGA_IMPACT),
LEVEL_UP_MOVE(36, MOVE_ROLLOUT),
LEVEL_UP_MOVE(41, MOVE_BLOCK),
LEVEL_UP_MOVE(44, MOVE_BELLY_DRUM),
LEVEL_UP_MOVE(49, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE(57, MOVE_HIGH_HORSEPOWER),
+ LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(57, MOVE_HIGH_HORSEPOWER),
LEVEL_UP_END
};
@@ -2815,18 +2815,18 @@ static const struct LevelUpMove sArticunoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 8, MOVE_MIST),
- //LEVEL_UP_MOVE(15, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(15, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(22, MOVE_MIND_READER),
LEVEL_UP_MOVE(29, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(36, MOVE_AGILITY),
- //LEVEL_UP_MOVE(43, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE(43, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE(50, MOVE_REFLECT),
LEVEL_UP_MOVE(57, MOVE_HAIL),
- //LEVEL_UP_MOVE(64, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(64, MOVE_TAILWIND),
LEVEL_UP_MOVE(71, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(78, MOVE_BLIZZARD),
- //LEVEL_UP_MOVE(85, MOVE_ROOST),
- //LEVEL_UP_MOVE(92, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(85, MOVE_ROOST),
+ LEVEL_UP_MOVE(92, MOVE_HURRICANE),
LEVEL_UP_MOVE(99, MOVE_SHEER_COLD),
LEVEL_UP_END
};
@@ -2836,17 +2836,17 @@ static const struct LevelUpMove sZapdosLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 8, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE(15, MOVE_DETECT),
- //LEVEL_UP_MOVE(22, MOVE_PLUCK),
+ LEVEL_UP_MOVE(22, MOVE_PLUCK),
LEVEL_UP_MOVE(29, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(36, MOVE_CHARGE),
LEVEL_UP_MOVE(43, MOVE_AGILITY),
- //LEVEL_UP_MOVE(50, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(50, MOVE_DISCHARGE),
LEVEL_UP_MOVE(57, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(64, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(71, MOVE_DRILL_PECK),
LEVEL_UP_MOVE(78, MOVE_THUNDER),
- //LEVEL_UP_MOVE(85, MOVE_ROOST),
- //LEVEL_UP_MOVE(92, MOVE_MAGNETIC_FLUX),
+ LEVEL_UP_MOVE(85, MOVE_ROOST),
+ LEVEL_UP_MOVE(92, MOVE_MAGNETIC_FLUX),
LEVEL_UP_MOVE(99, MOVE_ZAP_CANNON),
LEVEL_UP_END
};
@@ -2860,14 +2860,14 @@ static const struct LevelUpMove sMoltresLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(43, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE(50, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(50, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(57, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE(64, MOVE_HEAT_WAVE),
LEVEL_UP_MOVE(71, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE(78, MOVE_SKY_ATTACK),
- //LEVEL_UP_MOVE(85, MOVE_ROOST),
- //LEVEL_UP_MOVE(92, MOVE_HURRICANE),
- //LEVEL_UP_MOVE(99, MOVE_BURN_UP),
+ LEVEL_UP_MOVE(85, MOVE_ROOST),
+ LEVEL_UP_MOVE(92, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(99, MOVE_BURN_UP),
LEVEL_UP_END
};
@@ -2879,9 +2879,9 @@ static const struct LevelUpMove sDratiniLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(21, MOVE_SLAM),
LEVEL_UP_MOVE(25, MOVE_AGILITY),
- //LEVEL_UP_MOVE(31, MOVE_DRAGON_TAIL),
- //LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(41, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(31, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(41, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(45, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(51, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(55, MOVE_OUTRAGE),
@@ -2899,9 +2899,9 @@ static const struct LevelUpMove sDragonairLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(21, MOVE_SLAM),
LEVEL_UP_MOVE(25, MOVE_AGILITY),
- //LEVEL_UP_MOVE(33, MOVE_DRAGON_TAIL),
- //LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(33, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(53, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(61, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(67, MOVE_OUTRAGE),
@@ -2910,12 +2910,12 @@ static const struct LevelUpMove sDragonairLevelUpLearnset[] = {
};
static const struct LevelUpMove sDragoniteLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK),
+ //LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
+ LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_ROOST),
+ LEVEL_UP_MOVE( 1, MOVE_ROOST),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
@@ -2925,19 +2925,19 @@ static const struct LevelUpMove sDragoniteLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(21, MOVE_SLAM),
LEVEL_UP_MOVE(25, MOVE_AGILITY),
- //LEVEL_UP_MOVE(33, MOVE_DRAGON_TAIL),
- //LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(33, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(53, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(61, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(67, MOVE_OUTRAGE),
LEVEL_UP_MOVE(75, MOVE_HYPER_BEAM),
- //LEVEL_UP_MOVE(81, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(81, MOVE_HURRICANE),
LEVEL_UP_END
};
static const struct LevelUpMove sMewtwoLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS),
LEVEL_UP_MOVE( 1, MOVE_PSYWAVE),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -2945,24 +2945,24 @@ static const struct LevelUpMove sMewtwoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_SWIFT),
LEVEL_UP_MOVE(15, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(22, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE),
- //LEVEL_UP_MOVE(36, MOVE_PSYCHO_CUT),
- //LEVEL_UP_MOVE(43, MOVE_POWER_SWAP),
- //LEVEL_UP_MOVE(43, MOVE_GUARD_SWAP),
+ LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE(36, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(43, MOVE_POWER_SWAP),
+ LEVEL_UP_MOVE(43, MOVE_GUARD_SWAP),
LEVEL_UP_MOVE(50, MOVE_RECOVER),
LEVEL_UP_MOVE(57, MOVE_PSYCHIC),
LEVEL_UP_MOVE(64, MOVE_BARRIER),
- //LEVEL_UP_MOVE(70, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE(70, MOVE_AURA_SPHERE),
LEVEL_UP_MOVE(79, MOVE_AMNESIA),
LEVEL_UP_MOVE(86, MOVE_MIST),
- //LEVEL_UP_MOVE(93, MOVE_ME_FIRST),
- //LEVEL_UP_MOVE(100, MOVE_PSYSTRIKE),
+ LEVEL_UP_MOVE(93, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(100, MOVE_PSYSTRIKE),
LEVEL_UP_END
};
static const struct LevelUpMove sMewLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
- //LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE),
+ LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE),
LEVEL_UP_MOVE( 1, MOVE_TRANSFORM),
LEVEL_UP_MOVE(10, MOVE_MEGA_PUNCH),
LEVEL_UP_MOVE(20, MOVE_METRONOME),
@@ -2970,10 +2970,10 @@ static const struct LevelUpMove sMewLevelUpLearnset[] = {
LEVEL_UP_MOVE(40, MOVE_BARRIER),
LEVEL_UP_MOVE(50, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(60, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(70, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(70, MOVE_ME_FIRST),
LEVEL_UP_MOVE(80, MOVE_BATON_PASS),
- //LEVEL_UP_MOVE(90, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(100, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE(90, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(100, MOVE_AURA_SPHERE),
LEVEL_UP_END
};
@@ -2985,7 +2985,7 @@ static const struct LevelUpMove sChikoritaLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(17, MOVE_REFLECT),
LEVEL_UP_MOVE(20, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(28, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(34, MOVE_BODY_SLAM),
@@ -3005,7 +3005,7 @@ static const struct LevelUpMove sBayleefLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(18, MOVE_REFLECT),
LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE(26, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(26, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(32, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(36, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(40, MOVE_BODY_SLAM),
@@ -3016,9 +3016,9 @@ static const struct LevelUpMove sBayleefLevelUpLearnset[] = {
};
static const struct LevelUpMove sMeganiumLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE),
+ //LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
@@ -3028,14 +3028,14 @@ static const struct LevelUpMove sMeganiumLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(18, MOVE_REFLECT),
LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE(26, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(26, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(34, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(40, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(46, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(54, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(60, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(66, MOVE_SOLAR_BEAM),
- //LEVEL_UP_MOVE(70, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(70, MOVE_PETAL_BLIZZARD),
LEVEL_UP_END
};
@@ -3047,14 +3047,14 @@ static const struct LevelUpMove sCyndaquilLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(19, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(22, MOVE_DEFENSE_CURL),
- //LEVEL_UP_MOVE(28, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(28, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(31, MOVE_SWIFT),
- //LEVEL_UP_MOVE(37, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(37, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(40, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(46, MOVE_INFERNO),
+ LEVEL_UP_MOVE(46, MOVE_INFERNO),
LEVEL_UP_MOVE(49, MOVE_ROLLOUT),
LEVEL_UP_MOVE(55, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(58, MOVE_BURN_UP),
+ LEVEL_UP_MOVE(58, MOVE_BURN_UP),
LEVEL_UP_MOVE(64, MOVE_ERUPTION),
LEVEL_UP_END
};
@@ -3069,13 +3069,13 @@ static const struct LevelUpMove sQuilavaLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(24, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE(31, MOVE_SWIFT),
- //LEVEL_UP_MOVE(35, MOVE_FLAME_CHARGE),
- //LEVEL_UP_MOVE(42, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(35, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(42, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(46, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(53, MOVE_INFERNO),
+ LEVEL_UP_MOVE(53, MOVE_INFERNO),
LEVEL_UP_MOVE(57, MOVE_ROLLOUT),
LEVEL_UP_MOVE(64, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(68, MOVE_BURN_UP),
+ LEVEL_UP_MOVE(68, MOVE_BURN_UP),
LEVEL_UP_MOVE(75, MOVE_ERUPTION),
LEVEL_UP_END
};
@@ -3083,7 +3083,7 @@ static const struct LevelUpMove sQuilavaLevelUpLearnset[] = {
static const struct LevelUpMove sTyphlosionLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ERUPTION),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE( 1, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE( 1, MOVE_GYRO_BALL),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
@@ -3094,13 +3094,13 @@ static const struct LevelUpMove sTyphlosionLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(24, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE(31, MOVE_SWIFT),
- //LEVEL_UP_MOVE(35, MOVE_FLAME_CHARGE),
- //LEVEL_UP_MOVE(43, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(35, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(43, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(48, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(56, MOVE_INFERNO),
+ LEVEL_UP_MOVE(56, MOVE_INFERNO),
LEVEL_UP_MOVE(61, MOVE_ROLLOUT),
LEVEL_UP_MOVE(69, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(74, MOVE_BURN_UP),
+ LEVEL_UP_MOVE(74, MOVE_BURN_UP),
LEVEL_UP_MOVE(82, MOVE_ERUPTION),
LEVEL_UP_END
};
@@ -3112,14 +3112,14 @@ static const struct LevelUpMove sTotodileLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_RAGE),
LEVEL_UP_MOVE(13, MOVE_BITE),
LEVEL_UP_MOVE(15, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(20, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(20, MOVE_ICE_FANG),
LEVEL_UP_MOVE(22, MOVE_FLAIL),
LEVEL_UP_MOVE(27, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(29, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(29, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(34, MOVE_SLASH),
LEVEL_UP_MOVE(36, MOVE_SCREECH),
LEVEL_UP_MOVE(41, MOVE_THRASH),
- //LEVEL_UP_MOVE(43, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(43, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(48, MOVE_SUPERPOWER),
LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -3133,14 +3133,14 @@ static const struct LevelUpMove sCroconawLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_RAGE),
LEVEL_UP_MOVE(13, MOVE_BITE),
LEVEL_UP_MOVE(15, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(21, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(21, MOVE_ICE_FANG),
LEVEL_UP_MOVE(24, MOVE_FLAIL),
LEVEL_UP_MOVE(30, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(33, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(33, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(39, MOVE_SLASH),
LEVEL_UP_MOVE(42, MOVE_SCREECH),
LEVEL_UP_MOVE(48, MOVE_THRASH),
- //LEVEL_UP_MOVE(51, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(51, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(57, MOVE_SUPERPOWER),
LEVEL_UP_MOVE(60, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -3156,14 +3156,14 @@ static const struct LevelUpMove sFeraligatrLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_RAGE),
LEVEL_UP_MOVE(13, MOVE_BITE),
LEVEL_UP_MOVE(15, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(21, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(21, MOVE_ICE_FANG),
LEVEL_UP_MOVE(24, MOVE_FLAIL),
LEVEL_UP_MOVE(32, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(45, MOVE_SLASH),
LEVEL_UP_MOVE(50, MOVE_SCREECH),
LEVEL_UP_MOVE(58, MOVE_THRASH),
- //LEVEL_UP_MOVE(63, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(63, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(71, MOVE_SUPERPOWER),
LEVEL_UP_MOVE(76, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -3179,18 +3179,18 @@ static const struct LevelUpMove sSentretLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_FOLLOW_ME),
LEVEL_UP_MOVE(25, MOVE_SLAM),
LEVEL_UP_MOVE(28, MOVE_REST),
- //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(36, MOVE_AMNESIA),
LEVEL_UP_MOVE(39, MOVE_BATON_PASS),
- //LEVEL_UP_MOVE(42, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(42, MOVE_ME_FIRST),
LEVEL_UP_MOVE(47, MOVE_HYPER_VOICE),
LEVEL_UP_END
};
static const struct LevelUpMove sFurretLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_AGILITY),
+ //LEVEL_UP_MOVE( 0, MOVE_AGILITY),
LEVEL_UP_MOVE( 1, MOVE_AGILITY),
- //LEVEL_UP_MOVE( 1, MOVE_COIL),
+ LEVEL_UP_MOVE( 1, MOVE_COIL),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_FORESIGHT),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
@@ -3202,10 +3202,10 @@ static const struct LevelUpMove sFurretLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_FOLLOW_ME),
LEVEL_UP_MOVE(28, MOVE_SLAM),
LEVEL_UP_MOVE(32, MOVE_REST),
- //LEVEL_UP_MOVE(36, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(36, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(42, MOVE_AMNESIA),
LEVEL_UP_MOVE(46, MOVE_BATON_PASS),
- //LEVEL_UP_MOVE(50, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(50, MOVE_ME_FIRST),
LEVEL_UP_MOVE(56, MOVE_HYPER_VOICE),
LEVEL_UP_END
};
@@ -3217,17 +3217,17 @@ static const struct LevelUpMove sHoothootLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 7, MOVE_PECK),
LEVEL_UP_MOVE(10, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE),
- //LEVEL_UP_MOVE(16, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(19, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(16, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(19, MOVE_PSYCHO_SHIFT),
LEVEL_UP_MOVE(22, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(28, MOVE_REFLECT),
- //LEVEL_UP_MOVE(31, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(31, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(34, MOVE_UPROAR),
- //LEVEL_UP_MOVE(37, MOVE_ROOST),
- //LEVEL_UP_MOVE(40, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(43, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(37, MOVE_ROOST),
+ LEVEL_UP_MOVE(40, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(43, MOVE_SYNCHRONOISE),
LEVEL_UP_MOVE(46, MOVE_DREAM_EATER),
LEVEL_UP_END
};
@@ -3242,17 +3242,17 @@ static const struct LevelUpMove sNoctowlLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 7, MOVE_PECK),
LEVEL_UP_MOVE(10, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE),
- //LEVEL_UP_MOVE(16, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(19, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(16, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(19, MOVE_PSYCHO_SHIFT),
LEVEL_UP_MOVE(23, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(31, MOVE_REFLECT),
- //LEVEL_UP_MOVE(35, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(35, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(39, MOVE_UPROAR),
- //LEVEL_UP_MOVE(43, MOVE_ROOST),
- //LEVEL_UP_MOVE(47, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(51, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(43, MOVE_ROOST),
+ LEVEL_UP_MOVE(47, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(51, MOVE_SYNCHRONOISE),
LEVEL_UP_MOVE(55, MOVE_DREAM_EATER),
LEVEL_UP_END
};
@@ -3269,8 +3269,8 @@ static const struct LevelUpMove sLedybaLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_COMET_PUNCH),
LEVEL_UP_MOVE(26, MOVE_BATON_PASS),
LEVEL_UP_MOVE(29, MOVE_AGILITY),
- //LEVEL_UP_MOVE(33, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(33, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
@@ -3289,8 +3289,8 @@ static const struct LevelUpMove sLedianLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_COMET_PUNCH),
LEVEL_UP_MOVE(29, MOVE_BATON_PASS),
LEVEL_UP_MOVE(33, MOVE_AGILITY),
- //LEVEL_UP_MOVE(38, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(42, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(38, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(42, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
@@ -3300,55 +3300,55 @@ static const struct LevelUpMove sSpinarakLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
LEVEL_UP_MOVE( 5, MOVE_ABSORB),
- //LEVEL_UP_MOVE( 8, MOVE_INFESTATION),
+ LEVEL_UP_MOVE( 8, MOVE_INFESTATION),
LEVEL_UP_MOVE(12, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE),
- //LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(22, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE(26, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(26, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(29, MOVE_SPIDER_WEB),
LEVEL_UP_MOVE(33, MOVE_AGILITY),
LEVEL_UP_MOVE(36, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(40, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(43, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(47, MOVE_CROSS_POISON),
- //LEVEL_UP_MOVE(50, MOVE_STICKY_WEB),
- //LEVEL_UP_MOVE(54, MOVE_TOXIC_THREAD),
+ LEVEL_UP_MOVE(43, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(47, MOVE_CROSS_POISON),
+ LEVEL_UP_MOVE(50, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE(54, MOVE_TOXIC_THREAD),
LEVEL_UP_END
};
static const struct LevelUpMove sAriadosLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SWORDS_DANCE),
+ //LEVEL_UP_MOVE( 0, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 5, MOVE_ABSORB),
- //LEVEL_UP_MOVE( 8, MOVE_INFESTATION),
+ LEVEL_UP_MOVE( 8, MOVE_INFESTATION),
LEVEL_UP_MOVE(12, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE),
- //LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(23, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(32, MOVE_SPIDER_WEB),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
LEVEL_UP_MOVE(41, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(46, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(50, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(55, MOVE_CROSS_POISON),
- //LEVEL_UP_MOVE(58, MOVE_STICKY_WEB),
- //LEVEL_UP_MOVE(63, MOVE_TOXIC_THREAD),
+ LEVEL_UP_MOVE(50, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(55, MOVE_CROSS_POISON),
+ LEVEL_UP_MOVE(58, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE(63, MOVE_TOXIC_THREAD),
LEVEL_UP_END
};
static const struct LevelUpMove sCrobatLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_CROSS_POISON),
- //LEVEL_UP_MOVE( 1, MOVE_CROSS_POISON),
+ LEVEL_UP_MOVE( 1, MOVE_CROSS_POISON),
LEVEL_UP_MOVE( 1, MOVE_SCREECH),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -3365,9 +3365,9 @@ static const struct LevelUpMove sCrobatLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE(35, MOVE_LEECH_LIFE),
LEVEL_UP_MOVE(40, MOVE_HAZE),
- //LEVEL_UP_MOVE(43, MOVE_VENOSHOCK),
- //LEVEL_UP_MOVE(48, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(51, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(43, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(48, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(51, MOVE_QUICK_GUARD),
LEVEL_UP_END
};
@@ -3375,48 +3375,48 @@ static const struct LevelUpMove sChinchouLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 6, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE( 9, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE( 9, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(12, MOVE_WATER_GUN),
LEVEL_UP_MOVE(17, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(20, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(23, MOVE_SPARK),
LEVEL_UP_MOVE(28, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(31, MOVE_FLAIL),
- //LEVEL_UP_MOVE(34, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(34, MOVE_DISCHARGE),
LEVEL_UP_MOVE(39, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(42, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(42, MOVE_AQUA_RING),
LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(47, MOVE_ION_DELUGE),
+ LEVEL_UP_MOVE(47, MOVE_ION_DELUGE),
LEVEL_UP_MOVE(50, MOVE_CHARGE),
LEVEL_UP_END
};
static const struct LevelUpMove sLanturnLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_STOCKPILE),
- LEVEL_UP_MOVE( 0, MOVE_SWALLOW),
- LEVEL_UP_MOVE( 0, MOVE_SPIT_UP),
+ //LEVEL_UP_MOVE( 0, MOVE_STOCKPILE),
+ //LEVEL_UP_MOVE( 0, MOVE_SWALLOW),
+ //LEVEL_UP_MOVE( 0, MOVE_SPIT_UP),
LEVEL_UP_MOVE( 1, MOVE_STOCKPILE),
LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
LEVEL_UP_MOVE( 1, MOVE_SPIT_UP),
- //LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
- //LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT),
+ LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
+ LEVEL_UP_MOVE( 1, MOVE_SPOTLIGHT),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE( 1, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE( 6, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE( 9, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE( 9, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(12, MOVE_WATER_GUN),
LEVEL_UP_MOVE(17, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(20, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(23, MOVE_SPARK),
LEVEL_UP_MOVE(29, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(33, MOVE_FLAIL),
- //LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
LEVEL_UP_MOVE(43, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(47, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(47, MOVE_AQUA_RING),
LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(54, MOVE_ION_DELUGE),
+ LEVEL_UP_MOVE(54, MOVE_ION_DELUGE),
LEVEL_UP_MOVE(58, MOVE_CHARGE),
LEVEL_UP_END
};
@@ -3426,7 +3426,7 @@ static const struct LevelUpMove sPichuLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CHARM),
LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE(10, MOVE_SWEET_KISS),
- //LEVEL_UP_MOVE(13, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(13, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(18, MOVE_THUNDER_WAVE),
LEVEL_UP_END
};
@@ -3437,7 +3437,7 @@ static const struct LevelUpMove sCleffaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_ENCORE),
LEVEL_UP_MOVE( 7, MOVE_SING),
LEVEL_UP_MOVE(10, MOVE_SWEET_KISS),
- //LEVEL_UP_MOVE(13, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(13, MOVE_COPYCAT),
LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF),
LEVEL_UP_END
};
@@ -3448,7 +3448,7 @@ static const struct LevelUpMove sIgglybuffLevelUpLearnset[] = {
LEVEL_UP_MOVE( 3, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 5, MOVE_POUND),
LEVEL_UP_MOVE( 9, MOVE_SWEET_KISS),
- //LEVEL_UP_MOVE(11, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(11, MOVE_COPYCAT),
LEVEL_UP_END
};
@@ -3460,14 +3460,14 @@ static const struct LevelUpMove sTogepiLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_YAWN),
LEVEL_UP_MOVE(17, MOVE_ENCORE),
LEVEL_UP_MOVE(21, MOVE_FOLLOW_ME),
- //LEVEL_UP_MOVE(25, MOVE_BESTOW),
+ LEVEL_UP_MOVE(25, MOVE_BESTOW),
LEVEL_UP_MOVE(29, MOVE_WISH),
LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(37, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(41, MOVE_BATON_PASS),
LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(49, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(53, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(49, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(53, MOVE_AFTER_YOU),
LEVEL_UP_END
};
@@ -3480,17 +3480,17 @@ static const struct LevelUpMove sTogeticLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_METRONOME),
LEVEL_UP_MOVE( 9, MOVE_SWEET_KISS),
LEVEL_UP_MOVE(13, MOVE_YAWN),
- //LEVEL_UP_MOVE(14, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE(14, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE(17, MOVE_ENCORE),
LEVEL_UP_MOVE(21, MOVE_FOLLOW_ME),
- //LEVEL_UP_MOVE(25, MOVE_BESTOW),
+ LEVEL_UP_MOVE(25, MOVE_BESTOW),
LEVEL_UP_MOVE(29, MOVE_WISH),
LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(37, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(41, MOVE_BATON_PASS),
LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(49, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(53, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(49, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(53, MOVE_AFTER_YOU),
LEVEL_UP_END
};
@@ -3499,43 +3499,43 @@ static const struct LevelUpMove sNatuLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 6, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE( 9, MOVE_TELEPORT),
- //LEVEL_UP_MOVE(12, MOVE_LUCKY_CHANT),
- //LEVEL_UP_MOVE(17, MOVE_STORED_POWER),
- //LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(12, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(17, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(23, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(28, MOVE_WISH),
LEVEL_UP_MOVE(33, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(36, MOVE_MIRACLE_EYE),
- //LEVEL_UP_MOVE(39, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(36, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE(39, MOVE_PSYCHO_SHIFT),
LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(47, MOVE_POWER_SWAP),
- //LEVEL_UP_MOVE(47, MOVE_GUARD_SWAP),
- //LEVEL_UP_MOVE(50, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(47, MOVE_POWER_SWAP),
+ LEVEL_UP_MOVE(47, MOVE_GUARD_SWAP),
+ LEVEL_UP_MOVE(50, MOVE_ME_FIRST),
LEVEL_UP_END
};
static const struct LevelUpMove sXatuLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_TAILWIND),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_TAILWIND),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_MOVE( 6, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE( 9, MOVE_TELEPORT),
- //LEVEL_UP_MOVE(12, MOVE_LUCKY_CHANT),
- //LEVEL_UP_MOVE(17, MOVE_STORED_POWER),
- //LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(12, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(17, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(23, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(29, MOVE_WISH),
LEVEL_UP_MOVE(35, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(39, MOVE_MIRACLE_EYE),
- //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(39, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
LEVEL_UP_MOVE(49, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(53, MOVE_POWER_SWAP),
- //LEVEL_UP_MOVE(53, MOVE_GUARD_SWAP),
- //LEVEL_UP_MOVE(57, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(53, MOVE_POWER_SWAP),
+ LEVEL_UP_MOVE(53, MOVE_GUARD_SWAP),
+ LEVEL_UP_MOVE(57, MOVE_ME_FIRST),
LEVEL_UP_END
};
@@ -3547,11 +3547,11 @@ static const struct LevelUpMove sMareepLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE(15, MOVE_CHARGE),
LEVEL_UP_MOVE(18, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(25, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(29, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE(32, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(36, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(29, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(32, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(36, MOVE_COTTON_GUARD),
LEVEL_UP_MOVE(39, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(43, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(46, MOVE_THUNDER),
@@ -3568,11 +3568,11 @@ static const struct LevelUpMove sFlaaffyLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE(16, MOVE_CHARGE),
LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(29, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(34, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE(38, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(43, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(34, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(38, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(43, MOVE_COTTON_GUARD),
LEVEL_UP_MOVE(47, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(52, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(56, MOVE_THUNDER),
@@ -3580,12 +3580,12 @@ static const struct LevelUpMove sFlaaffyLevelUpLearnset[] = {
};
static const struct LevelUpMove sAmpharosLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_THUNDER_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
- //LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
+ LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -3596,31 +3596,31 @@ static const struct LevelUpMove sAmpharosLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE(16, MOVE_CHARGE),
LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(29, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(35, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(46, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(35, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(46, MOVE_COTTON_GUARD),
LEVEL_UP_MOVE(51, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(57, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(62, MOVE_THUNDER),
- //LEVEL_UP_MOVE(65, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(65, MOVE_DRAGON_PULSE),
LEVEL_UP_END
};
static const struct LevelUpMove sBellossomLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_MAGICAL_LEAF),
+ //LEVEL_UP_MOVE( 0, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
LEVEL_UP_MOVE( 1, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(39, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(39, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(49, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(59, MOVE_PETAL_DANCE),
- //LEVEL_UP_MOVE(69, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(69, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -3634,9 +3634,9 @@ static const struct LevelUpMove sMarillLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(16, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(20, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(23, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(28, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(20, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(23, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(28, MOVE_AQUA_RING),
LEVEL_UP_MOVE(31, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(40, MOVE_SUPERPOWER),
@@ -3656,9 +3656,9 @@ static const struct LevelUpMove sAzumarillLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(16, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(21, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(25, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(31, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(21, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(25, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(31, MOVE_AQUA_RING),
LEVEL_UP_MOVE(35, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(46, MOVE_SUPERPOWER),
@@ -3667,10 +3667,10 @@ static const struct LevelUpMove sAzumarillLevelUpLearnset[] = {
};
static const struct LevelUpMove sSudowoodoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SLAM),
+ //LEVEL_UP_MOVE( 0, MOVE_SLAM),
LEVEL_UP_MOVE( 1, MOVE_SLAM),
- //LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
- //LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
LEVEL_UP_MOVE( 1, MOVE_FLAIL),
LEVEL_UP_MOVE( 1, MOVE_LOW_KICK),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
@@ -3679,16 +3679,16 @@ static const struct LevelUpMove sSudowoodoLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(15, MOVE_MIMIC),
LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK),
+ LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK),
LEVEL_UP_MOVE(26, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(29, MOVE_BLOCK),
LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(36, MOVE_COUNTER),
- //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(47, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(50, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE(54, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(47, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(50, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(54, MOVE_HEAD_SMASH),
LEVEL_UP_END
};
@@ -3709,18 +3709,18 @@ static const struct LevelUpMove sHoppipLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_SYNTHESIS),
LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 8, MOVE_TACKLE),
- //LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE(12, MOVE_POISON_POWDER),
LEVEL_UP_MOVE(14, MOVE_STUN_SPORE),
LEVEL_UP_MOVE(16, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE(19, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(22, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(25, MOVE_MEGA_DRAIN),
- //LEVEL_UP_MOVE(28, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(31, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE(28, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(31, MOVE_RAGE_POWDER),
LEVEL_UP_MOVE(34, MOVE_COTTON_SPORE),
- //LEVEL_UP_MOVE(37, MOVE_U_TURN),
- //LEVEL_UP_MOVE(40, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(37, MOVE_U_TURN),
+ LEVEL_UP_MOVE(40, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(43, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(46, MOVE_BOUNCE),
LEVEL_UP_MOVE(49, MOVE_MEMENTO),
@@ -3735,18 +3735,18 @@ static const struct LevelUpMove sSkiploomLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_SYNTHESIS),
LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 8, MOVE_TACKLE),
- //LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE(12, MOVE_POISON_POWDER),
LEVEL_UP_MOVE(14, MOVE_STUN_SPORE),
LEVEL_UP_MOVE(16, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE(20, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(24, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(28, MOVE_MEGA_DRAIN),
- //LEVEL_UP_MOVE(32, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(36, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE(32, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(36, MOVE_RAGE_POWDER),
LEVEL_UP_MOVE(40, MOVE_COTTON_SPORE),
- //LEVEL_UP_MOVE(44, MOVE_U_TURN),
- //LEVEL_UP_MOVE(48, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(44, MOVE_U_TURN),
+ LEVEL_UP_MOVE(48, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(52, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(56, MOVE_BOUNCE),
LEVEL_UP_MOVE(60, MOVE_MEMENTO),
@@ -3761,18 +3761,18 @@ static const struct LevelUpMove sJumpluffLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_SYNTHESIS),
LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 8, MOVE_TACKLE),
- //LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE(10, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE(12, MOVE_POISON_POWDER),
LEVEL_UP_MOVE(14, MOVE_STUN_SPORE),
LEVEL_UP_MOVE(16, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE(20, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(24, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(29, MOVE_MEGA_DRAIN),
- //LEVEL_UP_MOVE(34, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(39, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE(34, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(39, MOVE_RAGE_POWDER),
LEVEL_UP_MOVE(44, MOVE_COTTON_SPORE),
- //LEVEL_UP_MOVE(49, MOVE_U_TURN),
- //LEVEL_UP_MOVE(54, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(49, MOVE_U_TURN),
+ LEVEL_UP_MOVE(54, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(59, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(64, MOVE_BOUNCE),
LEVEL_UP_MOVE(69, MOVE_MEMENTO),
@@ -3790,10 +3790,10 @@ static const struct LevelUpMove sAipomLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_SWIFT),
LEVEL_UP_MOVE(25, MOVE_SCREECH),
LEVEL_UP_MOVE(29, MOVE_AGILITY),
- //LEVEL_UP_MOVE(32, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE(36, MOVE_FLING),
- //LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(43, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(32, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(36, MOVE_FLING),
+ LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(43, MOVE_LAST_RESORT),
LEVEL_UP_END
};
@@ -3805,20 +3805,20 @@ static const struct LevelUpMove sSunkernLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(13, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(16, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(19, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(19, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(22, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(25, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(28, MOVE_SYNTHESIS),
- //LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(34, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(40, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(43, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(43, MOVE_SEED_BOMB),
LEVEL_UP_END
};
static const struct LevelUpMove sSunfloraLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD),
+ LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
@@ -3827,16 +3827,16 @@ static const struct LevelUpMove sSunfloraLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(13, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(16, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(19, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(19, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(22, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(25, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(28, MOVE_PETAL_DANCE),
- //LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(34, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(40, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(43, MOVE_LEAF_STORM),
- //LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(43, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD),
LEVEL_UP_END
};
@@ -3854,9 +3854,9 @@ static const struct LevelUpMove sYanmaLevelUpLearnset[] = {
LEVEL_UP_MOVE(38, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(43, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(46, MOVE_SCREECH),
- //LEVEL_UP_MOVE(49, MOVE_U_TURN),
- //LEVEL_UP_MOVE(54, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(57, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(49, MOVE_U_TURN),
+ LEVEL_UP_MOVE(54, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(57, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
@@ -3866,7 +3866,7 @@ static const struct LevelUpMove sWooperLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 9, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(15, MOVE_SLAM),
- //LEVEL_UP_MOVE(19, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(19, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(23, MOVE_AMNESIA),
LEVEL_UP_MOVE(29, MOVE_YAWN),
LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE),
@@ -3884,7 +3884,7 @@ static const struct LevelUpMove sQuagsireLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 9, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(15, MOVE_SLAM),
- //LEVEL_UP_MOVE(19, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(19, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(24, MOVE_AMNESIA),
LEVEL_UP_MOVE(31, MOVE_YAWN),
LEVEL_UP_MOVE(36, MOVE_EARTHQUAKE),
@@ -3896,13 +3896,13 @@ static const struct LevelUpMove sQuagsireLevelUpLearnset[] = {
};
static const struct LevelUpMove sEspeonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_CONFUSION),
+ //LEVEL_UP_MOVE( 0, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_SWIFT),
LEVEL_UP_MOVE(20, MOVE_PSYBEAM),
@@ -3910,28 +3910,28 @@ static const struct LevelUpMove sEspeonLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(33, MOVE_MORNING_SUN),
LEVEL_UP_MOVE(37, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(45, MOVE_POWER_SWAP),
+ LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(45, MOVE_POWER_SWAP),
LEVEL_UP_END
};
static const struct LevelUpMove sUmbreonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_PURSUIT),
+ //LEVEL_UP_MOVE( 0, MOVE_PURSUIT),
LEVEL_UP_MOVE( 1, MOVE_PURSUIT),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(20, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(25, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(25, MOVE_ASSURANCE),
LEVEL_UP_MOVE(29, MOVE_SCREECH),
LEVEL_UP_MOVE(33, MOVE_MOONLIGHT),
LEVEL_UP_MOVE(37, MOVE_MEAN_LOOK),
- //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(45, MOVE_GUARD_SWAP),
+ LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(45, MOVE_GUARD_SWAP),
LEVEL_UP_END
};
@@ -3942,21 +3942,21 @@ static const struct LevelUpMove sMurkrowLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_HAZE),
LEVEL_UP_MOVE(15, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(21, MOVE_NIGHT_SHADE),
- //LEVEL_UP_MOVE(25, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(25, MOVE_ASSURANCE),
LEVEL_UP_MOVE(31, MOVE_TAUNT),
LEVEL_UP_MOVE(35, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(41, MOVE_MEAN_LOOK),
- //LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY),
- //LEVEL_UP_MOVE(50, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(55, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(50, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(55, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(61, MOVE_TORMENT),
- //LEVEL_UP_MOVE(65, MOVE_QUASH),
+ LEVEL_UP_MOVE(65, MOVE_QUASH),
LEVEL_UP_END
};
static const struct LevelUpMove sSlowkingLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
LEVEL_UP_MOVE( 1, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE( 1, MOVE_CURSE),
LEVEL_UP_MOVE( 1, MOVE_YAWN),
@@ -3967,13 +3967,13 @@ static const struct LevelUpMove sSlowkingLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_DISABLE),
LEVEL_UP_MOVE(23, MOVE_HEADBUTT),
LEVEL_UP_MOVE(28, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(36, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(36, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(41, MOVE_SWAGGER),
LEVEL_UP_MOVE(45, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(49, MOVE_TRUMP_CARD),
+ LEVEL_UP_MOVE(49, MOVE_TRUMP_CARD),
LEVEL_UP_MOVE(54, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(58, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(58, MOVE_HEAL_PULSE),
LEVEL_UP_END
};
@@ -3984,14 +3984,14 @@ static const struct LevelUpMove sMisdreavusLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_ASTONISH),
LEVEL_UP_MOVE(14, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(19, MOVE_MEAN_LOOK),
- //LEVEL_UP_MOVE(23, MOVE_HEX),
+ LEVEL_UP_MOVE(23, MOVE_HEX),
LEVEL_UP_MOVE(28, MOVE_PSYBEAM),
LEVEL_UP_MOVE(32, MOVE_PAIN_SPLIT),
- //LEVEL_UP_MOVE(37, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(37, MOVE_PAYBACK),
LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(46, MOVE_PERISH_SONG),
LEVEL_UP_MOVE(50, MOVE_GRUDGE),
- //LEVEL_UP_MOVE(55, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(55, MOVE_POWER_GEM),
LEVEL_UP_END
};
@@ -4009,22 +4009,22 @@ static const struct LevelUpMove sWobbuffetLevelUpLearnset[] = {
};
static const struct LevelUpMove sGirafarigLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP),
- //LEVEL_UP_MOVE( 1, MOVE_GUARD_SWAP),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP),
+ LEVEL_UP_MOVE( 1, MOVE_GUARD_SWAP),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 5, MOVE_ODOR_SLEUTH),
- //LEVEL_UP_MOVE(10, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(10, MOVE_ASSURANCE),
LEVEL_UP_MOVE(14, MOVE_STOMP),
LEVEL_UP_MOVE(19, MOVE_PSYBEAM),
LEVEL_UP_MOVE(23, MOVE_AGILITY),
- //LEVEL_UP_MOVE(28, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(28, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(37, MOVE_CRUNCH),
LEVEL_UP_MOVE(41, MOVE_BATON_PASS),
- //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(50, MOVE_PSYCHIC),
LEVEL_UP_END
};
@@ -4033,16 +4033,16 @@ static const struct LevelUpMove sPinecoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 6, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE( 9, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 9, MOVE_BUG_BITE),
LEVEL_UP_MOVE(12, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(17, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(20, MOVE_BIDE),
- //LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(28, MOVE_SPIKES),
- //LEVEL_UP_MOVE(31, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(31, MOVE_PAYBACK),
LEVEL_UP_MOVE(34, MOVE_EXPLOSION),
LEVEL_UP_MOVE(39, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(42, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(42, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
@@ -4050,31 +4050,31 @@ static const struct LevelUpMove sPinecoLevelUpLearnset[] = {
static const struct LevelUpMove sForretressLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_MIRROR_SHOT),
//LEVEL_UP_MOVE( 0, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE( 1, MOVE_MIRROR_SHOT),
- //LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE( 1, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
- //LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE( 6, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE( 9, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 9, MOVE_BUG_BITE),
LEVEL_UP_MOVE(12, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(17, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(20, MOVE_BIDE),
- //LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(23, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(28, MOVE_SPIKES),
- //LEVEL_UP_MOVE(32, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(32, MOVE_PAYBACK),
LEVEL_UP_MOVE(36, MOVE_EXPLOSION),
LEVEL_UP_MOVE(42, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(46, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(46, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(56, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(56, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON),
- //LEVEL_UP_MOVE(64, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(64, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
@@ -4089,16 +4089,16 @@ static const struct LevelUpMove sDunsparceLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_YAWN),
LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(21, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(23, MOVE_DRILL_RUN),
- //LEVEL_UP_MOVE(26, MOVE_ROOST),
+ LEVEL_UP_MOVE(23, MOVE_DRILL_RUN),
+ LEVEL_UP_MOVE(26, MOVE_ROOST),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(31, MOVE_COIL),
+ LEVEL_UP_MOVE(31, MOVE_COIL),
LEVEL_UP_MOVE(33, MOVE_DIG),
LEVEL_UP_MOVE(36, MOVE_GLARE),
LEVEL_UP_MOVE(38, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(41, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(43, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(46, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(43, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(46, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(48, MOVE_ENDURE),
LEVEL_UP_MOVE(51, MOVE_FLAIL),
LEVEL_UP_END
@@ -4112,11 +4112,11 @@ static const struct LevelUpMove sGligarLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(22, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(22, MOVE_ACROBATICS),
LEVEL_UP_MOVE(27, MOVE_SLASH),
- //LEVEL_UP_MOVE(30, MOVE_U_TURN),
+ LEVEL_UP_MOVE(30, MOVE_U_TURN),
LEVEL_UP_MOVE(35, MOVE_SCREECH),
- //LEVEL_UP_MOVE(40, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(40, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(45, MOVE_SKY_UPPERCUT),
LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(55, MOVE_GUILLOTINE),
@@ -4124,9 +4124,9 @@ static const struct LevelUpMove sGligarLevelUpLearnset[] = {
};
static const struct LevelUpMove sSteelixLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
@@ -4135,10 +4135,10 @@ static const struct LevelUpMove sSteelixLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(10, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(13, MOVE_RAGE),
- //LEVEL_UP_MOVE(16, MOVE_STEALTH_ROCK),
- //LEVEL_UP_MOVE(19, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(20, MOVE_GYRO_BALL),
- //LEVEL_UP_MOVE(22, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(16, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(19, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(20, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(25, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(28, MOVE_SLAM),
LEVEL_UP_MOVE(31, MOVE_SCREECH),
@@ -4146,16 +4146,16 @@ static const struct LevelUpMove sSteelixLevelUpLearnset[] = {
LEVEL_UP_MOVE(37, MOVE_CRUNCH),
LEVEL_UP_MOVE(40, MOVE_IRON_TAIL),
LEVEL_UP_MOVE(43, MOVE_DIG),
- //LEVEL_UP_MOVE(46, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(46, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(52, MOVE_SANDSTORM),
LEVEL_UP_END
};
static const struct LevelUpMove sSnubbullLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -4165,17 +4165,17 @@ static const struct LevelUpMove sSnubbullLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_HEADBUTT),
LEVEL_UP_MOVE(25, MOVE_ROAR),
LEVEL_UP_MOVE(31, MOVE_RAGE),
- //LEVEL_UP_MOVE(37, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(43, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(37, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(43, MOVE_PAYBACK),
LEVEL_UP_MOVE(49, MOVE_CRUNCH),
LEVEL_UP_END
};
static const struct LevelUpMove sGranbullLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -4185,15 +4185,15 @@ static const struct LevelUpMove sGranbullLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_HEADBUTT),
LEVEL_UP_MOVE(27, MOVE_ROAR),
LEVEL_UP_MOVE(35, MOVE_RAGE),
- //LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(51, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(51, MOVE_PAYBACK),
LEVEL_UP_MOVE(59, MOVE_CRUNCH),
LEVEL_UP_MOVE(67, MOVE_OUTRAGE),
LEVEL_UP_END
};
static const struct LevelUpMove sQwilfishLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -4204,24 +4204,24 @@ static const struct LevelUpMove sQwilfishLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_MINIMIZE),
LEVEL_UP_MOVE(13, MOVE_BUBBLE),
LEVEL_UP_MOVE(17, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE(21, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(21, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(25, MOVE_STOCKPILE),
LEVEL_UP_MOVE(25, MOVE_SPIT_UP),
LEVEL_UP_MOVE(29, MOVE_REVENGE),
- //LEVEL_UP_MOVE(33, MOVE_BRINE),
+ LEVEL_UP_MOVE(33, MOVE_BRINE),
LEVEL_UP_MOVE(37, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(41, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(45, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(49, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(45, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(49, MOVE_POISON_JAB),
LEVEL_UP_MOVE(53, MOVE_DESTINY_BOND),
LEVEL_UP_MOVE(57, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(60, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(60, MOVE_FELL_STINGER),
LEVEL_UP_END
};
static const struct LevelUpMove sScizorLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FEINT),
- //LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_FOCUS_ENERGY),
@@ -4233,57 +4233,57 @@ static const struct LevelUpMove sScizorLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_SLASH),
LEVEL_UP_MOVE(33, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(41, MOVE_X_SCISSOR),
- //LEVEL_UP_MOVE(45, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(49, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE(50, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(41, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(45, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(49, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(50, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(57, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(61, MOVE_FEINT),
+ LEVEL_UP_MOVE(61, MOVE_FEINT),
LEVEL_UP_END
};
static const struct LevelUpMove sShuckleLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
LEVEL_UP_MOVE( 5, MOVE_ENCORE),
LEVEL_UP_MOVE( 9, MOVE_WRAP),
- //LEVEL_UP_MOVE(12, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(12, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(16, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(20, MOVE_REST),
LEVEL_UP_MOVE(23, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(27, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(31, MOVE_POWER_TRICK),
- //LEVEL_UP_MOVE(34, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(27, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(31, MOVE_POWER_TRICK),
+ LEVEL_UP_MOVE(34, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(38, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(42, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(45, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(45, MOVE_GUARD_SPLIT),
- //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(53, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE(42, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(45, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(45, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(53, MOVE_STICKY_WEB),
LEVEL_UP_END
};
static const struct LevelUpMove sHeracrossLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST),
LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_ENDURE),
- //LEVEL_UP_MOVE( 7, MOVE_FEINT),
+ LEVEL_UP_MOVE( 7, MOVE_FEINT),
LEVEL_UP_MOVE(10, MOVE_AERIAL_ACE),
- //LEVEL_UP_MOVE(16, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(16, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(19, MOVE_COUNTER),
LEVEL_UP_MOVE(25, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(28, MOVE_BRICK_BREAK),
LEVEL_UP_MOVE(31, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(34, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(37, MOVE_MEGAHORN),
- //LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(46, MOVE_REVERSAL),
LEVEL_UP_END
};
@@ -4298,38 +4298,38 @@ static const struct LevelUpMove sSneaselLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(20, MOVE_AGILITY),
LEVEL_UP_MOVE(22, MOVE_METAL_CLAW),
- //LEVEL_UP_MOVE(25, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(25, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(28, MOVE_BEAT_UP),
LEVEL_UP_MOVE(32, MOVE_SCREECH),
LEVEL_UP_MOVE(35, MOVE_SLASH),
LEVEL_UP_MOVE(40, MOVE_SNATCH),
- //LEVEL_UP_MOVE(44, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE(47, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(44, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(47, MOVE_ICE_SHARD),
LEVEL_UP_END
};
static const struct LevelUpMove sTeddiursaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FLING),
+ LEVEL_UP_MOVE( 1, MOVE_FLING),
LEVEL_UP_MOVE( 1, MOVE_COVET),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- //LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 1, MOVE_FAKE_TEARS),
LEVEL_UP_MOVE( 8, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(15, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(22, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(25, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE(25, MOVE_PLAY_NICE),
LEVEL_UP_MOVE(29, MOVE_SLASH),
LEVEL_UP_MOVE(36, MOVE_CHARM),
LEVEL_UP_MOVE(43, MOVE_REST),
LEVEL_UP_MOVE(43, MOVE_SNORE),
LEVEL_UP_MOVE(50, MOVE_THRASH),
- //LEVEL_UP_MOVE(57, MOVE_FLING),
+ LEVEL_UP_MOVE(57, MOVE_FLING),
LEVEL_UP_END
};
static const struct LevelUpMove sUrsaringLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_COVET),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -4338,13 +4338,13 @@ static const struct LevelUpMove sUrsaringLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(15, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(22, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(25, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE(25, MOVE_PLAY_NICE),
LEVEL_UP_MOVE(29, MOVE_SLASH),
LEVEL_UP_MOVE(38, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(47, MOVE_REST),
LEVEL_UP_MOVE(49, MOVE_SNORE),
LEVEL_UP_MOVE(58, MOVE_THRASH),
- //LEVEL_UP_MOVE(67, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(67, MOVE_HAMMER_ARM),
LEVEL_UP_END
};
@@ -4354,24 +4354,24 @@ static const struct LevelUpMove sSlugmaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_EMBER),
LEVEL_UP_MOVE( 8, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(13, MOVE_HARDEN),
- //LEVEL_UP_MOVE(15, MOVE_INCINERATE),
- //LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(15, MOVE_INCINERATE),
+ LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(22, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(27, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(27, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(36, MOVE_AMNESIA),
LEVEL_UP_MOVE(41, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(43, MOVE_RECOVER),
LEVEL_UP_MOVE(48, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(50, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(50, MOVE_EARTH_POWER),
LEVEL_UP_END
};
static const struct LevelUpMove sMagcargoLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SHELL_SMASH),
- //LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
- //LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -4379,17 +4379,17 @@ static const struct LevelUpMove sMagcargoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_EMBER),
LEVEL_UP_MOVE( 8, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(13, MOVE_HARDEN),
- //LEVEL_UP_MOVE(15, MOVE_INCINERATE),
- //LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(15, MOVE_INCINERATE),
+ LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(22, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(27, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(27, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(36, MOVE_AMNESIA),
LEVEL_UP_MOVE(43, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(47, MOVE_RECOVER),
LEVEL_UP_MOVE(54, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(58, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(58, MOVE_EARTH_POWER),
LEVEL_UP_END
};
@@ -4400,9 +4400,9 @@ static const struct LevelUpMove sSwinubLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(11, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(14, MOVE_ENDURE),
- //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(21, MOVE_ICY_WIND),
- //LEVEL_UP_MOVE(24, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(24, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(35, MOVE_MIST),
LEVEL_UP_MOVE(37, MOVE_EARTHQUAKE),
@@ -4413,7 +4413,7 @@ static const struct LevelUpMove sSwinubLevelUpLearnset[] = {
};
static const struct LevelUpMove sPiloswineLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK),
+ //LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_PECK),
@@ -4424,9 +4424,9 @@ static const struct LevelUpMove sPiloswineLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(11, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(14, MOVE_ENDURE),
- //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(21, MOVE_ICY_WIND),
- //LEVEL_UP_MOVE(24, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(24, MOVE_ICE_FANG),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(37, MOVE_MIST),
LEVEL_UP_MOVE(41, MOVE_THRASH),
@@ -4445,15 +4445,15 @@ static const struct LevelUpMove sCorsolaLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_REFRESH),
LEVEL_UP_MOVE(17, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(20, MOVE_SPIKE_CANNON),
- //LEVEL_UP_MOVE(23, MOVE_LUCKY_CHANT),
- //LEVEL_UP_MOVE(27, MOVE_BRINE),
+ LEVEL_UP_MOVE(23, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(27, MOVE_BRINE),
LEVEL_UP_MOVE(29, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(31, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE(35, MOVE_ENDURE),
- //LEVEL_UP_MOVE(38, MOVE_AQUA_RING),
- //LEVEL_UP_MOVE(41, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(38, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(41, MOVE_POWER_GEM),
LEVEL_UP_MOVE(45, MOVE_MIRROR_COAT),
- //LEVEL_UP_MOVE(47, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(47, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(50, MOVE_FLAIL),
LEVEL_UP_END
};
@@ -4471,14 +4471,14 @@ static const struct LevelUpMove sRemoraidLevelUpLearnset[] = {
LEVEL_UP_MOVE(38, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(46, MOVE_HYPER_BEAM),
- //LEVEL_UP_MOVE(50, MOVE_SOAK),
+ LEVEL_UP_MOVE(50, MOVE_SOAK),
LEVEL_UP_END
};
static const struct LevelUpMove sOctilleryLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_OCTAZOOKA),
+ //LEVEL_UP_MOVE( 0, MOVE_OCTAZOOKA),
LEVEL_UP_MOVE( 1, MOVE_OCTAZOOKA),
- //LEVEL_UP_MOVE( 1, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_GUNK_SHOT),
LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
@@ -4489,13 +4489,13 @@ static const struct LevelUpMove sOctilleryLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(22, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(28, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(28, MOVE_WRING_OUT),
LEVEL_UP_MOVE(34, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(40, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(46, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(52, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(58, MOVE_HYPER_BEAM),
- //LEVEL_UP_MOVE(64, MOVE_SOAK),
+ LEVEL_UP_MOVE(64, MOVE_SOAK),
LEVEL_UP_END
};
@@ -4509,7 +4509,7 @@ static const struct LevelUpMove sMantineLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PSYBEAM),
LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED),
LEVEL_UP_MOVE( 1, MOVE_SIGNAL_BEAM),
- //LEVEL_UP_MOVE( 1, MOVE_ROOST),
+ LEVEL_UP_MOVE( 1, MOVE_ROOST),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -4520,11 +4520,11 @@ static const struct LevelUpMove sMantineLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(16, MOVE_HEADBUTT),
LEVEL_UP_MOVE(19, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(32, MOVE_AGILITY),
- //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(39, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(39, MOVE_AQUA_RING),
LEVEL_UP_MOVE(46, MOVE_BOUNCE),
LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -4537,16 +4537,16 @@ static const struct LevelUpMove sSkarmoryLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(12, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE(17, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(20, MOVE_FEINT),
+ LEVEL_UP_MOVE(20, MOVE_FEINT),
LEVEL_UP_MOVE(23, MOVE_SWIFT),
LEVEL_UP_MOVE(28, MOVE_SPIKES),
LEVEL_UP_MOVE(31, MOVE_AGILITY),
LEVEL_UP_MOVE(34, MOVE_STEEL_WING),
LEVEL_UP_MOVE(39, MOVE_SLASH),
LEVEL_UP_MOVE(42, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(45, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(50, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(53, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(45, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(50, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(53, MOVE_NIGHT_SLASH),
LEVEL_UP_END
};
@@ -4559,21 +4559,21 @@ static const struct LevelUpMove sHoundourLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_BITE),
LEVEL_UP_MOVE(20, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(25, MOVE_BEAT_UP),
- //LEVEL_UP_MOVE(28, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(28, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(32, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(37, MOVE_EMBARGO),
- //LEVEL_UP_MOVE(40, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(37, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(40, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(44, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(49, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(52, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(56, MOVE_INFERNO),
+ LEVEL_UP_MOVE(52, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(56, MOVE_INFERNO),
LEVEL_UP_END
};
static const struct LevelUpMove sHoundoomLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_INFERNO),
- //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_INFERNO),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_HOWL),
@@ -4584,14 +4584,14 @@ static const struct LevelUpMove sHoundoomLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_BITE),
LEVEL_UP_MOVE(20, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(26, MOVE_BEAT_UP),
- //LEVEL_UP_MOVE(30, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(30, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(35, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(41, MOVE_EMBARGO),
- //LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(41, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(50, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(56, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(60, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(65, MOVE_INFERNO),
+ LEVEL_UP_MOVE(60, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(65, MOVE_INFERNO),
LEVEL_UP_END
};
@@ -4608,9 +4608,9 @@ static const struct LevelUpMove sKingdraLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_TWISTER),
LEVEL_UP_MOVE(21, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(26, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(31, MOVE_BRINE),
+ LEVEL_UP_MOVE(31, MOVE_BRINE),
LEVEL_UP_MOVE(38, MOVE_AGILITY),
- //LEVEL_UP_MOVE(45, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(45, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(52, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(60, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -4623,34 +4623,34 @@ static const struct LevelUpMove sPhanpyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 6, MOVE_FLAIL),
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE(15, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(15, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(19, MOVE_ENDURE),
LEVEL_UP_MOVE(24, MOVE_SLAM),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(33, MOVE_CHARM),
- //LEVEL_UP_MOVE(37, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(37, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sDonphanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK),
+ //LEVEL_UP_MOVE( 0, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 6, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE(15, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(15, MOVE_ASSURANCE),
LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(24, MOVE_SLAM),
LEVEL_UP_MOVE(30, MOVE_MAGNITUDE),
LEVEL_UP_MOVE(37, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(43, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(50, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(50, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
@@ -4664,10 +4664,10 @@ static const struct LevelUpMove sPorygon2LevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_PSYBEAM),
LEVEL_UP_MOVE(12, MOVE_AGILITY),
LEVEL_UP_MOVE(18, MOVE_RECOVER),
- //LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE(29, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(34, MOVE_RECYCLE),
- //LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
LEVEL_UP_MOVE(45, MOVE_LOCK_ON),
LEVEL_UP_MOVE(50, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE(56, MOVE_MAGIC_COAT),
@@ -4677,7 +4677,7 @@ static const struct LevelUpMove sPorygon2LevelUpLearnset[] = {
};
static const struct LevelUpMove sStantlerLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE( 1, MOVE_ME_FIRST),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 3, MOVE_LEER),
LEVEL_UP_MOVE( 7, MOVE_ASTONISH),
@@ -4688,11 +4688,11 @@ static const struct LevelUpMove sStantlerLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(27, MOVE_CALM_MIND),
LEVEL_UP_MOVE(33, MOVE_ROLE_PLAY),
- //LEVEL_UP_MOVE(38, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(38, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(43, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(49, MOVE_IMPRISON),
- //LEVEL_UP_MOVE(50, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(55, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(50, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(55, MOVE_ME_FIRST),
LEVEL_UP_END
};
@@ -4719,10 +4719,10 @@ static const struct LevelUpMove sTyrogueLevelUpLearnset[] = {
};
static const struct LevelUpMove sHitmontopLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ROLLING_KICK),
+ //LEVEL_UP_MOVE( 0, MOVE_ROLLING_KICK),
LEVEL_UP_MOVE( 1, MOVE_ROLLING_KICK),
LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE( 1, MOVE_DETECT),
LEVEL_UP_MOVE( 1, MOVE_REVENGE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -4732,15 +4732,15 @@ static const struct LevelUpMove sHitmontopLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_PURSUIT),
LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(19, MOVE_RAPID_SPIN),
- //LEVEL_UP_MOVE(24, MOVE_FEINT),
+ LEVEL_UP_MOVE(24, MOVE_FEINT),
LEVEL_UP_MOVE(28, MOVE_COUNTER),
LEVEL_UP_MOVE(33, MOVE_TRIPLE_KICK),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
- //LEVEL_UP_MOVE(42, MOVE_GYRO_BALL),
- //LEVEL_UP_MOVE(46, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE(46, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(42, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(46, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(46, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(50, MOVE_DETECT),
- //LEVEL_UP_MOVE(55, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(55, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(60, MOVE_ENDEAVOR),
LEVEL_UP_END
};
@@ -4752,13 +4752,13 @@ static const struct LevelUpMove sSmoochumLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(15, MOVE_CONFUSION),
LEVEL_UP_MOVE(18, MOVE_SING),
- //LEVEL_UP_MOVE(21, MOVE_HEART_STAMP),
+ LEVEL_UP_MOVE(21, MOVE_HEART_STAMP),
LEVEL_UP_MOVE(25, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE(28, MOVE_FAKE_TEARS),
- //LEVEL_UP_MOVE(31, MOVE_LUCKY_CHANT),
- //LEVEL_UP_MOVE(35, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(31, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(35, MOVE_AVALANCHE),
LEVEL_UP_MOVE(38, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(41, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(41, MOVE_COPYCAT),
LEVEL_UP_MOVE(45, MOVE_PERISH_SONG),
LEVEL_UP_MOVE(48, MOVE_BLIZZARD),
LEVEL_UP_END
@@ -4772,10 +4772,10 @@ static const struct LevelUpMove sElekidLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_SWIFT),
LEVEL_UP_MOVE(15, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(19, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(26, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(29, MOVE_THUNDER_PUNCH),
- //LEVEL_UP_MOVE(33, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(33, MOVE_DISCHARGE),
LEVEL_UP_MOVE(36, MOVE_SCREECH),
LEVEL_UP_MOVE(40, MOVE_THUNDERBOLT),
LEVEL_UP_MOVE(43, MOVE_THUNDER),
@@ -4789,11 +4789,11 @@ static const struct LevelUpMove sMagbyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(12, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(15, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG),
- //LEVEL_UP_MOVE(22, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(22, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(26, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(29, MOVE_FIRE_PUNCH),
- //LEVEL_UP_MOVE(33, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(33, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(36, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE(40, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(43, MOVE_FIRE_BLAST),
@@ -4809,11 +4809,11 @@ static const struct LevelUpMove sMiltankLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_BIDE),
LEVEL_UP_MOVE(19, MOVE_ROLLOUT),
LEVEL_UP_MOVE(24, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(35, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(41, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(35, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(41, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(48, MOVE_HEAL_BELL),
- //LEVEL_UP_MOVE(50, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(50, MOVE_WAKE_UP_SLAP),
LEVEL_UP_END
};
@@ -4826,22 +4826,22 @@ static const struct LevelUpMove sBlisseyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_REFRESH),
LEVEL_UP_MOVE(12, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(16, MOVE_SOFT_BOILED),
- //LEVEL_UP_MOVE(20, MOVE_BESTOW),
+ LEVEL_UP_MOVE(20, MOVE_BESTOW),
LEVEL_UP_MOVE(23, MOVE_MINIMIZE),
LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(31, MOVE_SING),
- //LEVEL_UP_MOVE(34, MOVE_FLING),
- //LEVEL_UP_MOVE(39, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(34, MOVE_FLING),
+ LEVEL_UP_MOVE(39, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(44, MOVE_EGG_BOMB),
LEVEL_UP_MOVE(50, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(57, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(57, MOVE_HEALING_WISH),
LEVEL_UP_MOVE(65, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sRaikouLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE( 1, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE( 1, MOVE_DISCHARGE),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 8, MOVE_THUNDER_SHOCK),
@@ -4850,8 +4850,8 @@ static const struct LevelUpMove sRaikouLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_SPARK),
LEVEL_UP_MOVE(36, MOVE_REFLECT),
LEVEL_UP_MOVE(43, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(50, MOVE_THUNDER_FANG),
- //LEVEL_UP_MOVE(57, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(50, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE(57, MOVE_DISCHARGE),
LEVEL_UP_MOVE(64, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(71, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(78, MOVE_CALM_MIND),
@@ -4863,7 +4863,7 @@ static const struct LevelUpMove sEnteiLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SACRED_FIRE),
LEVEL_UP_MOVE( 1, MOVE_ERUPTION),
LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE( 1, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE( 1, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 8, MOVE_EMBER),
@@ -4872,8 +4872,8 @@ static const struct LevelUpMove sEnteiLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_STOMP),
LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(43, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(50, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE(57, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(50, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(57, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(64, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(71, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(78, MOVE_CALM_MIND),
@@ -4893,8 +4893,8 @@ static const struct LevelUpMove sSuicuneLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(36, MOVE_MIST),
LEVEL_UP_MOVE(43, MOVE_MIRROR_COAT),
- //LEVEL_UP_MOVE(50, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE(57, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(50, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(57, MOVE_TAILWIND),
LEVEL_UP_MOVE(64, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(71, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(78, MOVE_CALM_MIND),
@@ -4907,15 +4907,15 @@ static const struct LevelUpMove sLarvitarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_SANDSTORM),
LEVEL_UP_MOVE(10, MOVE_SCREECH),
- //LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(19, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(23, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(28, MOVE_THRASH),
- //LEVEL_UP_MOVE(32, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(37, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(32, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(37, MOVE_PAYBACK),
LEVEL_UP_MOVE(41, MOVE_CRUNCH),
LEVEL_UP_MOVE(46, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(50, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(50, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(55, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
@@ -4927,40 +4927,40 @@ static const struct LevelUpMove sPupitarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCREECH),
LEVEL_UP_MOVE( 5, MOVE_SANDSTORM),
LEVEL_UP_MOVE(10, MOVE_SCREECH),
- //LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(19, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(23, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(28, MOVE_THRASH),
- //LEVEL_UP_MOVE(34, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(41, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(34, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(41, MOVE_PAYBACK),
LEVEL_UP_MOVE(47, MOVE_CRUNCH),
LEVEL_UP_MOVE(54, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(60, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(60, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(67, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sTyranitarLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_SANDSTORM),
LEVEL_UP_MOVE( 1, MOVE_SCREECH),
LEVEL_UP_MOVE( 5, MOVE_SANDSTORM),
LEVEL_UP_MOVE(10, MOVE_SCREECH),
- //LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(14, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(19, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(23, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(28, MOVE_THRASH),
- //LEVEL_UP_MOVE(34, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(41, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(34, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(41, MOVE_PAYBACK),
LEVEL_UP_MOVE(47, MOVE_CRUNCH),
LEVEL_UP_MOVE(54, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(63, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(63, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(73, MOVE_HYPER_BEAM),
- //LEVEL_UP_MOVE(82, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(82, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
@@ -4968,17 +4968,17 @@ static const struct LevelUpMove sLugiaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL),
LEVEL_UP_MOVE( 9, MOVE_GUST),
- //LEVEL_UP_MOVE(15, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(15, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(23, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(29, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(37, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(43, MOVE_AEROBLAST),
- //LEVEL_UP_MOVE(50, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(50, MOVE_PUNISHMENT),
LEVEL_UP_MOVE(57, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(65, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(71, MOVE_RECOVER),
LEVEL_UP_MOVE(79, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(85, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(85, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(93, MOVE_CALM_MIND),
LEVEL_UP_MOVE(99, MOVE_SKY_ATTACK),
LEVEL_UP_END
@@ -4988,17 +4988,17 @@ static const struct LevelUpMove sHoOhLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL),
LEVEL_UP_MOVE( 9, MOVE_GUST),
- //LEVEL_UP_MOVE(15, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(15, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE(23, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(29, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE(37, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(43, MOVE_SACRED_FIRE),
- //LEVEL_UP_MOVE(50, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(50, MOVE_PUNISHMENT),
LEVEL_UP_MOVE(57, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(65, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(71, MOVE_RECOVER),
LEVEL_UP_MOVE(79, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(85, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(85, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(93, MOVE_CALM_MIND),
LEVEL_UP_MOVE(99, MOVE_SKY_ATTACK),
LEVEL_UP_END
@@ -5013,11 +5013,11 @@ static const struct LevelUpMove sCelebiLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(37, MOVE_BATON_PASS),
- //LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(55, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(55, MOVE_HEAL_BLOCK),
LEVEL_UP_MOVE(64, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(73, MOVE_HEALING_WISH),
- //LEVEL_UP_MOVE(82, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(73, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(82, MOVE_LEAF_STORM),
LEVEL_UP_MOVE(91, MOVE_PERISH_SONG),
LEVEL_UP_END
};
@@ -5158,15 +5158,15 @@ static const struct LevelUpMove sTreeckoLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_AGILITY),
LEVEL_UP_MOVE(29, MOVE_SLAM),
LEVEL_UP_MOVE(33, MOVE_DETECT),
- //LEVEL_UP_MOVE(37, MOVE_ENERGY_BALL),
- //LEVEL_UP_MOVE(41, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(37, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(41, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(45, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(49, MOVE_SCREECH),
LEVEL_UP_END
};
static const struct LevelUpMove sGrovyleLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER),
+ //LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -5180,20 +5180,20 @@ static const struct LevelUpMove sGrovyleLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_AGILITY),
LEVEL_UP_MOVE(33, MOVE_SLAM),
LEVEL_UP_MOVE(38, MOVE_DETECT),
- //LEVEL_UP_MOVE(43, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(43, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(48, MOVE_FALSE_SWIPE),
- //LEVEL_UP_MOVE(53, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(58, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(53, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(58, MOVE_LEAF_STORM),
LEVEL_UP_MOVE(63, MOVE_SCREECH),
LEVEL_UP_END
};
static const struct LevelUpMove sSceptileLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DUAL_CHOP),
- //LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
@@ -5206,10 +5206,10 @@ static const struct LevelUpMove sSceptileLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_AGILITY),
LEVEL_UP_MOVE(33, MOVE_SLAM),
LEVEL_UP_MOVE(39, MOVE_DETECT),
- //LEVEL_UP_MOVE(45, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(45, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(51, MOVE_FALSE_SWIPE),
- //LEVEL_UP_MOVE(57, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(63, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(57, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(63, MOVE_LEAF_STORM),
LEVEL_UP_MOVE(69, MOVE_SCREECH),
LEVEL_UP_END
};
@@ -5222,7 +5222,7 @@ static const struct LevelUpMove sTorchicLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_PECK),
LEVEL_UP_MOVE(19, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE(23, MOVE_QUICK_ATTACK),
- //LEVEL_UP_MOVE(28, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(28, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(32, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(37, MOVE_SLASH),
LEVEL_UP_MOVE(41, MOVE_MIRROR_MOVE),
@@ -5231,7 +5231,7 @@ static const struct LevelUpMove sTorchicLevelUpLearnset[] = {
};
static const struct LevelUpMove sCombuskenLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK),
+ //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -5240,22 +5240,22 @@ static const struct LevelUpMove sCombuskenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_EMBER),
LEVEL_UP_MOVE(10, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(14, MOVE_PECK),
- //LEVEL_UP_MOVE(20, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(20, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(25, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(31, MOVE_BULK_UP),
LEVEL_UP_MOVE(36, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(42, MOVE_SLASH),
LEVEL_UP_MOVE(47, MOVE_MIRROR_MOVE),
LEVEL_UP_MOVE(53, MOVE_SKY_UPPERCUT),
- //LEVEL_UP_MOVE(58, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(58, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
static const struct LevelUpMove sBlazikenLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BLAZE_KICK),
+ //LEVEL_UP_MOVE( 0, MOVE_BLAZE_KICK),
LEVEL_UP_MOVE( 1, MOVE_BLAZE_KICK),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
@@ -5265,14 +5265,14 @@ static const struct LevelUpMove sBlazikenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_EMBER),
LEVEL_UP_MOVE(10, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(14, MOVE_PECK),
- //LEVEL_UP_MOVE(20, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(20, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(25, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(31, MOVE_BULK_UP),
LEVEL_UP_MOVE(37, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(44, MOVE_SLASH),
- //LEVEL_UP_MOVE(50, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(50, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE(57, MOVE_SKY_UPPERCUT),
- //LEVEL_UP_MOVE(63, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(63, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
@@ -5294,7 +5294,7 @@ static const struct LevelUpMove sMudkipLevelUpLearnset[] = {
};
static const struct LevelUpMove sMarshtompLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_MUD_SHOT),
+ //LEVEL_UP_MOVE( 0, MOVE_MUD_SHOT),
LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -5304,7 +5304,7 @@ static const struct LevelUpMove sMarshtompLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(12, MOVE_FORESIGHT),
LEVEL_UP_MOVE(18, MOVE_BIDE),
- //LEVEL_UP_MOVE(22, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(22, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(28, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(32, MOVE_PROTECT),
LEVEL_UP_MOVE(38, MOVE_MUDDY_WATER),
@@ -5316,7 +5316,7 @@ static const struct LevelUpMove sMarshtompLevelUpLearnset[] = {
static const struct LevelUpMove sSwampertLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -5325,14 +5325,14 @@ static const struct LevelUpMove sSwampertLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(12, MOVE_FORESIGHT),
LEVEL_UP_MOVE(18, MOVE_BIDE),
- //LEVEL_UP_MOVE(22, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(22, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(28, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(32, MOVE_PROTECT),
LEVEL_UP_MOVE(39, MOVE_MUDDY_WATER),
LEVEL_UP_MOVE(44, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(51, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(56, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(63, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(63, MOVE_HAMMER_ARM),
LEVEL_UP_END
};
@@ -5344,24 +5344,24 @@ static const struct LevelUpMove sPoochyenaLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(16, MOVE_ROAR),
LEVEL_UP_MOVE(19, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(22, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(22, MOVE_ASSURANCE),
LEVEL_UP_MOVE(25, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(28, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(28, MOVE_EMBARGO),
LEVEL_UP_MOVE(31, MOVE_TAUNT),
LEVEL_UP_MOVE(34, MOVE_CRUNCH),
LEVEL_UP_MOVE(37, MOVE_YAWN),
LEVEL_UP_MOVE(40, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(43, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(43, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
static const struct LevelUpMove sMightyenaLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SNARL),
- //LEVEL_UP_MOVE( 1, MOVE_SNARL),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_SNARL),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_THIEF),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
@@ -5374,15 +5374,15 @@ static const struct LevelUpMove sMightyenaLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(16, MOVE_ROAR),
LEVEL_UP_MOVE(20, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(24, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(24, MOVE_ASSURANCE),
LEVEL_UP_MOVE(28, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(32, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(32, MOVE_EMBARGO),
LEVEL_UP_MOVE(36, MOVE_TAUNT),
LEVEL_UP_MOVE(40, MOVE_CRUNCH),
LEVEL_UP_MOVE(44, MOVE_YAWN),
LEVEL_UP_MOVE(48, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(52, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(56, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(52, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(56, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
@@ -5392,24 +5392,24 @@ static const struct LevelUpMove sZigzagoonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(11, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(12, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(12, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(17, MOVE_MUD_SPORT),
LEVEL_UP_MOVE(19, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(23, MOVE_COVET),
- //LEVEL_UP_MOVE(25, MOVE_BESTOW),
+ LEVEL_UP_MOVE(25, MOVE_BESTOW),
LEVEL_UP_MOVE(29, MOVE_FLAIL),
LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(35, MOVE_REST),
LEVEL_UP_MOVE(37, MOVE_BELLY_DRUM),
- //LEVEL_UP_MOVE(41, MOVE_FLING),
+ LEVEL_UP_MOVE(41, MOVE_FLING),
LEVEL_UP_END
};
static const struct LevelUpMove sLinooneLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
- //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -5421,12 +5421,12 @@ static const struct LevelUpMove sLinooneLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_MUD_SPORT),
LEVEL_UP_MOVE(19, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(24, MOVE_COVET),
- //LEVEL_UP_MOVE(27, MOVE_BESTOW),
+ LEVEL_UP_MOVE(27, MOVE_BESTOW),
LEVEL_UP_MOVE(32, MOVE_SLASH),
LEVEL_UP_MOVE(35, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(40, MOVE_REST),
LEVEL_UP_MOVE(43, MOVE_BELLY_DRUM),
- //LEVEL_UP_MOVE(48, MOVE_FLING),
+ LEVEL_UP_MOVE(48, MOVE_FLING),
LEVEL_UP_END
};
@@ -5434,18 +5434,18 @@ static const struct LevelUpMove sWurmpleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 5, MOVE_POISON_STING),
- //LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
LEVEL_UP_END
};
static const struct LevelUpMove sSilcoonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_HARDEN),
+ //LEVEL_UP_MOVE( 0, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_END
};
static const struct LevelUpMove sBeautiflyLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_GUST),
+ //LEVEL_UP_MOVE( 0, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE(12, MOVE_ABSORB),
LEVEL_UP_MOVE(15, MOVE_STUN_SPORE),
@@ -5456,33 +5456,33 @@ static const struct LevelUpMove sBeautiflyLevelUpLearnset[] = {
LEVEL_UP_MOVE(27, MOVE_ATTRACT),
LEVEL_UP_MOVE(30, MOVE_WHIRLWIND),
LEVEL_UP_MOVE(32, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(37, MOVE_RAGE),
- //LEVEL_UP_MOVE(40, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(40, MOVE_QUIVER_DANCE),
LEVEL_UP_END
};
static const struct LevelUpMove sCascoonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_HARDEN),
+ //LEVEL_UP_MOVE( 0, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_END
};
static const struct LevelUpMove sDustoxLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_GUST),
+ //LEVEL_UP_MOVE( 0, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE(12, MOVE_CONFUSION),
LEVEL_UP_MOVE(15, MOVE_POISON_POWDER),
LEVEL_UP_MOVE(17, MOVE_MOONLIGHT),
- //LEVEL_UP_MOVE(20, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(20, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(22, MOVE_PSYBEAM),
LEVEL_UP_MOVE(25, MOVE_SILVER_WIND),
LEVEL_UP_MOVE(27, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(30, MOVE_WHIRLWIND),
LEVEL_UP_MOVE(32, MOVE_TOXIC),
- //LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(37, MOVE_PROTECT),
- //LEVEL_UP_MOVE(40, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(40, MOVE_QUIVER_DANCE),
LEVEL_UP_END
};
@@ -5491,15 +5491,15 @@ static const struct LevelUpMove sLotadLevelUpLearnset[] = {
LEVEL_UP_MOVE( 3, MOVE_GROWL),
LEVEL_UP_MOVE( 6, MOVE_ABSORB),
LEVEL_UP_MOVE( 9, MOVE_BUBBLE),
- //LEVEL_UP_MOVE(12, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(12, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(15, MOVE_MIST),
LEVEL_UP_MOVE(18, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(21, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(24, MOVE_NATURE_POWER),
LEVEL_UP_MOVE(27, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(30, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL),
LEVEL_UP_END
};
@@ -5515,7 +5515,7 @@ static const struct LevelUpMove sLombreLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_NATURE_POWER),
LEVEL_UP_MOVE(32, MOVE_UPROAR),
LEVEL_UP_MOVE(36, MOVE_KNOCK_OFF),
- //LEVEL_UP_MOVE(40, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(40, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(44, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
@@ -5540,7 +5540,7 @@ static const struct LevelUpMove sSeedotLevelUpLearnset[] = {
};
static const struct LevelUpMove sNuzleafLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF),
+ //LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 3, MOVE_HARDEN),
@@ -5560,10 +5560,10 @@ static const struct LevelUpMove sShiftryLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
- //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(20, MOVE_LEAF_TORNADO),
- //LEVEL_UP_MOVE(32, MOVE_HURRICANE),
- //LEVEL_UP_MOVE(44, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(20, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(32, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(44, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -5583,13 +5583,13 @@ static const struct LevelUpMove sNincadaLevelUpLearnset[] = {
};
static const struct LevelUpMove sNinjaskLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_DOUBLE_TEAM),
- LEVEL_UP_MOVE( 0, MOVE_SCREECH),
- LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER),
+ //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_TEAM),
+ //LEVEL_UP_MOVE( 0, MOVE_SCREECH),
+ //LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SCREECH),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
@@ -5602,7 +5602,7 @@ static const struct LevelUpMove sNinjaskLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_MIND_READER),
LEVEL_UP_MOVE(35, MOVE_BATON_PASS),
LEVEL_UP_MOVE(41, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(47, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(47, MOVE_X_SCISSOR),
LEVEL_UP_END
};
@@ -5615,13 +5615,13 @@ static const struct LevelUpMove sShedinjaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(17, MOVE_SPITE),
- //LEVEL_UP_MOVE(21, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(21, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(25, MOVE_MIND_READER),
LEVEL_UP_MOVE(29, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(33, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(37, MOVE_GRUDGE),
- //LEVEL_UP_MOVE(41, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(41, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE),
LEVEL_UP_END
};
@@ -5633,19 +5633,19 @@ static const struct LevelUpMove sTaillowLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(17, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(21, MOVE_AERIAL_ACE),
- //LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(29, MOVE_AGILITY),
- //LEVEL_UP_MOVE(33, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(33, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(37, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(41, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(41, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE(45, MOVE_REVERSAL),
LEVEL_UP_END
};
static const struct LevelUpMove sSwellowLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_PLUCK),
+ LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_PLUCK),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -5655,11 +5655,11 @@ static const struct LevelUpMove sSwellowLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(17, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(21, MOVE_AERIAL_ACE),
- //LEVEL_UP_MOVE(27, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(27, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(33, MOVE_AGILITY),
- //LEVEL_UP_MOVE(39, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(39, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(45, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(51, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(51, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE(57, MOVE_REVERSAL),
LEVEL_UP_END
};
@@ -5672,17 +5672,17 @@ static const struct LevelUpMove sShroomishLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(15, MOVE_HEADBUTT),
LEVEL_UP_MOVE(19, MOVE_POISON_POWDER),
- //LEVEL_UP_MOVE(22, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(22, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(29, MOVE_GROWTH),
LEVEL_UP_MOVE(33, MOVE_TOXIC),
- //LEVEL_UP_MOVE(36, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(36, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(40, MOVE_SPORE),
LEVEL_UP_END
};
static const struct LevelUpMove sBreloomLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
@@ -5692,24 +5692,24 @@ static const struct LevelUpMove sBreloomLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(15, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(19, MOVE_FEINT),
+ LEVEL_UP_MOVE(19, MOVE_FEINT),
LEVEL_UP_MOVE(22, MOVE_COUNTER),
- //LEVEL_UP_MOVE(28, MOVE_FORCE_PALM),
+ LEVEL_UP_MOVE(28, MOVE_FORCE_PALM),
LEVEL_UP_MOVE(33, MOVE_MIND_READER),
LEVEL_UP_MOVE(39, MOVE_SKY_UPPERCUT),
- //LEVEL_UP_MOVE(44, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(44, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(50, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_END
};
static const struct LevelUpMove sSpindaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 5, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 5, MOVE_COPYCAT),
LEVEL_UP_MOVE(10, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(14, MOVE_PSYBEAM),
LEVEL_UP_MOVE(19, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(23, MOVE_DIZZY_PUNCH),
- //LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(32, MOVE_TEETER_DANCE),
LEVEL_UP_MOVE(37, MOVE_UPROAR),
LEVEL_UP_MOVE(41, MOVE_PSYCH_UP),
@@ -5730,20 +5730,20 @@ static const struct LevelUpMove sWingullLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE(26, MOVE_PURSUIT),
LEVEL_UP_MOVE(29, MOVE_AERIAL_ACE),
- //LEVEL_UP_MOVE(33, MOVE_ROOST),
+ LEVEL_UP_MOVE(33, MOVE_ROOST),
LEVEL_UP_MOVE(36, MOVE_AGILITY),
- //LEVEL_UP_MOVE(40, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(43, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(40, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(43, MOVE_HURRICANE),
LEVEL_UP_END
};
static const struct LevelUpMove sPelipperLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_PROTECT),
+ //LEVEL_UP_MOVE( 0, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
- //LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
+ LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE( 1, MOVE_TAILWIND),
- //LEVEL_UP_MOVE( 1, MOVE_SOAK),
+ LEVEL_UP_MOVE( 1, MOVE_TAILWIND),
+ LEVEL_UP_MOVE( 1, MOVE_SOAK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT),
@@ -5752,16 +5752,16 @@ static const struct LevelUpMove sPelipperLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(12, MOVE_MIST),
LEVEL_UP_MOVE(15, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(19, MOVE_PAYBACK),
- //LEVEL_UP_MOVE(22, MOVE_BRINE),
- //LEVEL_UP_MOVE(28, MOVE_FLING),
+ LEVEL_UP_MOVE(19, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(22, MOVE_BRINE),
+ LEVEL_UP_MOVE(28, MOVE_FLING),
LEVEL_UP_MOVE(33, MOVE_STOCKPILE),
LEVEL_UP_MOVE(33, MOVE_SWALLOW),
LEVEL_UP_MOVE(33, MOVE_SPIT_UP),
- //LEVEL_UP_MOVE(39, MOVE_ROOST),
- //LEVEL_UP_MOVE(44, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(39, MOVE_ROOST),
+ LEVEL_UP_MOVE(44, MOVE_TAILWIND),
LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(55, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(55, MOVE_HURRICANE),
LEVEL_UP_END
};
@@ -5774,17 +5774,17 @@ static const struct LevelUpMove sSurskitLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_AGILITY),
LEVEL_UP_MOVE(25, MOVE_MIST),
LEVEL_UP_MOVE(25, MOVE_HAZE),
- //LEVEL_UP_MOVE(30, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(30, MOVE_AQUA_JET),
LEVEL_UP_MOVE(35, MOVE_BATON_PASS),
- //LEVEL_UP_MOVE(38, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE(38, MOVE_STICKY_WEB),
LEVEL_UP_END
};
static const struct LevelUpMove sMasquerainLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
@@ -5797,10 +5797,10 @@ static const struct LevelUpMove sMasquerainLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE(26, MOVE_STUN_SPORE),
LEVEL_UP_MOVE(32, MOVE_SILVER_WIND),
- //LEVEL_UP_MOVE(38, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(42, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(38, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(42, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(48, MOVE_WHIRLWIND),
- //LEVEL_UP_MOVE(52, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(52, MOVE_QUIVER_DANCE),
LEVEL_UP_END
};
@@ -5813,21 +5813,21 @@ static const struct LevelUpMove sWailmerLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_ASTONISH),
LEVEL_UP_MOVE(19, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(22, MOVE_MIST),
- //LEVEL_UP_MOVE(25, MOVE_BRINE),
+ LEVEL_UP_MOVE(25, MOVE_BRINE),
LEVEL_UP_MOVE(29, MOVE_REST),
LEVEL_UP_MOVE(33, MOVE_WATER_SPOUT),
LEVEL_UP_MOVE(37, MOVE_AMNESIA),
LEVEL_UP_MOVE(41, MOVE_DIVE),
LEVEL_UP_MOVE(45, MOVE_BOUNCE),
LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(53, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(53, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
static const struct LevelUpMove sWailordLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SOAK),
- //LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
- //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE( 1, MOVE_SOAK),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE( 1, MOVE_SPLASH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -5839,14 +5839,14 @@ static const struct LevelUpMove sWailordLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_ASTONISH),
LEVEL_UP_MOVE(19, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(22, MOVE_MIST),
- //LEVEL_UP_MOVE(25, MOVE_BRINE),
+ LEVEL_UP_MOVE(25, MOVE_BRINE),
LEVEL_UP_MOVE(29, MOVE_REST),
LEVEL_UP_MOVE(33, MOVE_WATER_SPOUT),
LEVEL_UP_MOVE(37, MOVE_AMNESIA),
LEVEL_UP_MOVE(44, MOVE_DIVE),
LEVEL_UP_MOVE(51, MOVE_BOUNCE),
LEVEL_UP_MOVE(58, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(65, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(65, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
@@ -5858,18 +5858,18 @@ static const struct LevelUpMove sSkittyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_FORESIGHT),
LEVEL_UP_MOVE( 7, MOVE_SING),
LEVEL_UP_MOVE(10, MOVE_ATTRACT),
- //LEVEL_UP_MOVE(13, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(13, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(16, MOVE_DOUBLE_SLAP),
- //LEVEL_UP_MOVE(19, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(19, MOVE_COPYCAT),
LEVEL_UP_MOVE(22, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(25, MOVE_CHARM),
- //LEVEL_UP_MOVE(28, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(28, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(31, MOVE_ASSIST),
LEVEL_UP_MOVE(34, MOVE_COVET),
LEVEL_UP_MOVE(37, MOVE_HEAL_BELL),
LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(43, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(43, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
@@ -5888,19 +5888,19 @@ static const struct LevelUpMove sKecleonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 4, MOVE_BIND),
- //LEVEL_UP_MOVE( 7, MOVE_SHADOW_SNEAK),
- //LEVEL_UP_MOVE(10, MOVE_FEINT),
+ LEVEL_UP_MOVE( 7, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(10, MOVE_FEINT),
LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(16, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(18, MOVE_PSYBEAM),
LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(25, MOVE_SLASH),
LEVEL_UP_MOVE(30, MOVE_CAMOUFLAGE),
- //LEVEL_UP_MOVE(33, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE(33, MOVE_SHADOW_CLAW),
LEVEL_UP_MOVE(38, MOVE_SCREECH),
LEVEL_UP_MOVE(42, MOVE_SUBSTITUTE),
- //LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(50, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(50, MOVE_SYNCHRONOISE),
LEVEL_UP_END
};
@@ -5909,17 +5909,17 @@ static const struct LevelUpMove sBaltoyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 4, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP),
- //LEVEL_UP_MOVE(10, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(10, MOVE_HEAL_BLOCK),
LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(16, MOVE_PSYBEAM),
LEVEL_UP_MOVE(19, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(22, MOVE_COSMIC_POWER),
- //LEVEL_UP_MOVE(25, MOVE_POWER_TRICK),
+ LEVEL_UP_MOVE(25, MOVE_POWER_TRICK),
LEVEL_UP_MOVE(28, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE(34, MOVE_GUARD_SPLIT),
- //LEVEL_UP_MOVE(34, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(34, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(34, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(40, MOVE_SANDSTORM),
LEVEL_UP_MOVE(43, MOVE_IMPRISON),
LEVEL_UP_MOVE(46, MOVE_EXPLOSION),
@@ -5927,7 +5927,7 @@ static const struct LevelUpMove sBaltoyLevelUpLearnset[] = {
};
static const struct LevelUpMove sClaydolLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_HYPER_BEAM),
+ //LEVEL_UP_MOVE( 0, MOVE_HYPER_BEAM),
LEVEL_UP_MOVE( 1, MOVE_HYPER_BEAM),
LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
@@ -5935,17 +5935,17 @@ static const struct LevelUpMove sClaydolLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 4, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP),
- //LEVEL_UP_MOVE(10, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(10, MOVE_HEAL_BLOCK),
LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(16, MOVE_PSYBEAM),
LEVEL_UP_MOVE(19, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(22, MOVE_COSMIC_POWER),
- //LEVEL_UP_MOVE(25, MOVE_POWER_TRICK),
+ LEVEL_UP_MOVE(25, MOVE_POWER_TRICK),
LEVEL_UP_MOVE(28, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE(34, MOVE_GUARD_SPLIT),
- //LEVEL_UP_MOVE(34, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(40, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(34, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(34, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(40, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(46, MOVE_SANDSTORM),
LEVEL_UP_MOVE(52, MOVE_IMPRISON),
LEVEL_UP_MOVE(58, MOVE_EXPLOSION),
@@ -5961,12 +5961,12 @@ static const struct LevelUpMove sNosepassLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_REST),
LEVEL_UP_MOVE(19, MOVE_SPARK),
LEVEL_UP_MOVE(22, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(25, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(25, MOVE_POWER_GEM),
LEVEL_UP_MOVE(28, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
LEVEL_UP_MOVE(34, MOVE_SANDSTORM),
- //LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(40, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(40, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(43, MOVE_LOCK_ON),
LEVEL_UP_MOVE(43, MOVE_ZAP_CANNON),
LEVEL_UP_END
@@ -5981,7 +5981,7 @@ static const struct LevelUpMove sTorkoalLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(18, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(22, MOVE_CURSE),
- //LEVEL_UP_MOVE(25, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(25, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(27, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(30, MOVE_PROTECT),
LEVEL_UP_MOVE(34, MOVE_FLAMETHROWER),
@@ -5989,8 +5989,8 @@ static const struct LevelUpMove sTorkoalLevelUpLearnset[] = {
LEVEL_UP_MOVE(40, MOVE_AMNESIA),
LEVEL_UP_MOVE(42, MOVE_FLAIL),
LEVEL_UP_MOVE(45, MOVE_HEAT_WAVE),
- //LEVEL_UP_MOVE(47, MOVE_SHELL_SMASH),
- //LEVEL_UP_MOVE(50, MOVE_INFERNO),
+ LEVEL_UP_MOVE(47, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(50, MOVE_INFERNO),
LEVEL_UP_END
};
@@ -6002,18 +6002,18 @@ static const struct LevelUpMove sSableyeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_ASTONISH),
LEVEL_UP_MOVE(11, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(14, MOVE_DETECT),
- //LEVEL_UP_MOVE(16, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(16, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(21, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE(24, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(24, MOVE_PUNISHMENT),
LEVEL_UP_MOVE(26, MOVE_KNOCK_OFF),
- //LEVEL_UP_MOVE(29, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE(29, MOVE_SHADOW_CLAW),
LEVEL_UP_MOVE(31, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(34, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(36, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(34, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(36, MOVE_POWER_GEM),
LEVEL_UP_MOVE(39, MOVE_SHADOW_BALL),
- //LEVEL_UP_MOVE(41, MOVE_FOUL_PLAY),
- //LEVEL_UP_MOVE(44, MOVE_QUASH),
+ LEVEL_UP_MOVE(41, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(44, MOVE_QUASH),
LEVEL_UP_MOVE(46, MOVE_MEAN_LOOK),
LEVEL_UP_END
};
@@ -6023,13 +6023,13 @@ static const struct LevelUpMove sBarboachLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 6, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 9, MOVE_WATER_GUN),
- //LEVEL_UP_MOVE(13, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(13, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(15, MOVE_AMNESIA),
LEVEL_UP_MOVE(17, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(20, MOVE_MAGNITUDE),
LEVEL_UP_MOVE(25, MOVE_REST),
LEVEL_UP_MOVE(25, MOVE_SNORE),
- //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(32, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(35, MOVE_MUDDY_WATER),
LEVEL_UP_MOVE(39, MOVE_FUTURE_SIGHT),
@@ -6038,10 +6038,10 @@ static const struct LevelUpMove sBarboachLevelUpLearnset[] = {
};
static const struct LevelUpMove sWhiscashLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_THRASH),
+ //LEVEL_UP_MOVE( 0, MOVE_THRASH),
LEVEL_UP_MOVE( 1, MOVE_THRASH),
- //LEVEL_UP_MOVE( 1, MOVE_BELCH),
- //LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE( 1, MOVE_BELCH),
+ LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_TICKLE),
LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT),
@@ -6050,13 +6050,13 @@ static const struct LevelUpMove sWhiscashLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 6, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 9, MOVE_WATER_GUN),
- //LEVEL_UP_MOVE(13, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(13, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(15, MOVE_AMNESIA),
LEVEL_UP_MOVE(17, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(20, MOVE_MAGNITUDE),
LEVEL_UP_MOVE(25, MOVE_REST),
LEVEL_UP_MOVE(25, MOVE_SNORE),
- //LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(28, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(34, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(39, MOVE_MUDDY_WATER),
LEVEL_UP_MOVE(45, MOVE_FUTURE_SIGHT),
@@ -6069,17 +6069,17 @@ static const struct LevelUpMove sLuvdiscLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CHARM),
LEVEL_UP_MOVE( 4, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 7, MOVE_AGILITY),
- //LEVEL_UP_MOVE( 9, MOVE_DRAINING_KISS),
- //LEVEL_UP_MOVE(13, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE( 9, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(13, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(17, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(20, MOVE_ATTRACT),
- //LEVEL_UP_MOVE(22, MOVE_HEART_STAMP),
+ LEVEL_UP_MOVE(22, MOVE_HEART_STAMP),
LEVEL_UP_MOVE(26, MOVE_FLAIL),
LEVEL_UP_MOVE(31, MOVE_SWEET_KISS),
LEVEL_UP_MOVE(34, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(37, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(40, MOVE_AQUA_RING),
- //LEVEL_UP_MOVE(42, MOVE_SOAK),
+ LEVEL_UP_MOVE(37, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(40, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(42, MOVE_SOAK),
LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(49, MOVE_SAFEGUARD),
LEVEL_UP_END
@@ -6092,10 +6092,10 @@ static const struct LevelUpMove sCorphishLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_LEER),
LEVEL_UP_MOVE(14, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(17, MOVE_PROTECT),
- //LEVEL_UP_MOVE(20, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(20, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE(23, MOVE_KNOCK_OFF),
- //LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(31, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(31, MOVE_RAZOR_SHELL),
LEVEL_UP_MOVE(34, MOVE_TAUNT),
LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(39, MOVE_CRUNCH),
@@ -6105,7 +6105,7 @@ static const struct LevelUpMove sCorphishLevelUpLearnset[] = {
};
static const struct LevelUpMove sCrawdauntLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SWIFT),
+ //LEVEL_UP_MOVE( 0, MOVE_SWIFT),
LEVEL_UP_MOVE( 1, MOVE_SWIFT),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
@@ -6116,10 +6116,10 @@ static const struct LevelUpMove sCrawdauntLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_LEER),
LEVEL_UP_MOVE(14, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(17, MOVE_PROTECT),
- //LEVEL_UP_MOVE(20, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(20, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE(23, MOVE_KNOCK_OFF),
- //LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(32, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(32, MOVE_RAZOR_SHELL),
LEVEL_UP_MOVE(36, MOVE_TAUNT),
LEVEL_UP_MOVE(40, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(43, MOVE_CRUNCH),
@@ -6136,7 +6136,7 @@ static const struct LevelUpMove sFeebasLevelUpLearnset[] = {
};
static const struct LevelUpMove sMiloticLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_WATER_PULSE),
+ //LEVEL_UP_MOVE( 0, MOVE_WATER_PULSE),
LEVEL_UP_MOVE( 1, MOVE_WATER_PULSE),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -6144,16 +6144,16 @@ static const struct LevelUpMove sMiloticLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_REFRESH),
LEVEL_UP_MOVE( 4, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 7, MOVE_REFRESH),
- //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(14, MOVE_TWISTER),
- //LEVEL_UP_MOVE(17, MOVE_AQUA_RING),
- //LEVEL_UP_MOVE(21, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(24, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(17, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(21, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(24, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(27, MOVE_RECOVER),
- //LEVEL_UP_MOVE(31, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(31, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(34, MOVE_ATTRACT),
LEVEL_UP_MOVE(37, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE(41, MOVE_COIL),
+ LEVEL_UP_MOVE(41, MOVE_COIL),
LEVEL_UP_MOVE(44, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(47, MOVE_RAIN_DANCE),
LEVEL_UP_END
@@ -6164,11 +6164,11 @@ static const struct LevelUpMove sCarvanhaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 4, MOVE_RAGE),
LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(11, MOVE_AQUA_JET),
- //LEVEL_UP_MOVE(15, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(11, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(15, MOVE_ASSURANCE),
LEVEL_UP_MOVE(18, MOVE_SCREECH),
LEVEL_UP_MOVE(22, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(25, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(25, MOVE_ICE_FANG),
LEVEL_UP_MOVE(29, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(32, MOVE_POISON_FANG),
LEVEL_UP_MOVE(36, MOVE_CRUNCH),
@@ -6178,28 +6178,28 @@ static const struct LevelUpMove sCarvanhaLevelUpLearnset[] = {
};
static const struct LevelUpMove sSharpedoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SLASH),
+ //LEVEL_UP_MOVE( 0, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_RAGE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 4, MOVE_RAGE),
LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(11, MOVE_AQUA_JET),
- //LEVEL_UP_MOVE(15, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(11, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(15, MOVE_ASSURANCE),
LEVEL_UP_MOVE(18, MOVE_SCREECH),
LEVEL_UP_MOVE(22, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(25, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(25, MOVE_ICE_FANG),
LEVEL_UP_MOVE(29, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(34, MOVE_POISON_FANG),
LEVEL_UP_MOVE(40, MOVE_CRUNCH),
LEVEL_UP_MOVE(45, MOVE_AGILITY),
LEVEL_UP_MOVE(51, MOVE_SKULL_BASH),
LEVEL_UP_MOVE(56, MOVE_TAUNT),
- //LEVEL_UP_MOVE(62, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(62, MOVE_NIGHT_SLASH),
LEVEL_UP_END
};
@@ -6209,13 +6209,13 @@ static const struct LevelUpMove sTrapinchLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
LEVEL_UP_MOVE( 5, MOVE_MUD_SLAP),
- //LEVEL_UP_MOVE( 8, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 8, MOVE_BULLDOZE),
LEVEL_UP_MOVE(12, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(15, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(19, MOVE_DIG),
LEVEL_UP_MOVE(22, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(29, MOVE_FEINT),
+ LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(29, MOVE_FEINT),
LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(36, MOVE_SANDSTORM),
LEVEL_UP_MOVE(40, MOVE_SUPERPOWER),
@@ -6225,30 +6225,30 @@ static const struct LevelUpMove sTrapinchLevelUpLearnset[] = {
};
static const struct LevelUpMove sVibravaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH),
+ //LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_SONIC_BOOM),
LEVEL_UP_MOVE( 1, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
LEVEL_UP_MOVE( 5, MOVE_MUD_SLAP),
- //LEVEL_UP_MOVE( 8, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 8, MOVE_BULLDOZE),
LEVEL_UP_MOVE(12, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(15, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(19, MOVE_SUPERSONIC),
LEVEL_UP_MOVE(22, MOVE_SCREECH),
- //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(29, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(29, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(36, MOVE_SANDSTORM),
LEVEL_UP_MOVE(40, MOVE_UPROAR),
LEVEL_UP_MOVE(43, MOVE_HYPER_BEAM),
- //LEVEL_UP_MOVE(47, MOVE_BOOMBURST),
+ LEVEL_UP_MOVE(47, MOVE_BOOMBURST),
LEVEL_UP_END
};
static const struct LevelUpMove sFlygonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_DRAGON_CLAW),
+ //LEVEL_UP_MOVE( 0, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_DANCE),
@@ -6257,18 +6257,18 @@ static const struct LevelUpMove sFlygonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
LEVEL_UP_MOVE( 5, MOVE_MUD_SLAP),
- //LEVEL_UP_MOVE( 8, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 8, MOVE_BULLDOZE),
LEVEL_UP_MOVE(12, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(15, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(19, MOVE_SUPERSONIC),
LEVEL_UP_MOVE(22, MOVE_SCREECH),
- //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(29, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(29, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(36, MOVE_SANDSTORM),
LEVEL_UP_MOVE(40, MOVE_UPROAR),
LEVEL_UP_MOVE(43, MOVE_HYPER_BEAM),
- //LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(47, MOVE_DRAGON_RUSH),
LEVEL_UP_END
};
@@ -6278,23 +6278,23 @@ static const struct LevelUpMove sMakuhitaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 7, MOVE_ARM_THRUST),
LEVEL_UP_MOVE(10, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE(13, MOVE_FORCE_PALM),
+ LEVEL_UP_MOVE(13, MOVE_FORCE_PALM),
LEVEL_UP_MOVE(16, MOVE_WHIRLWIND),
LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(22, MOVE_VITAL_THROW),
LEVEL_UP_MOVE(25, MOVE_BELLY_DRUM),
LEVEL_UP_MOVE(28, MOVE_SMELLING_SALTS),
LEVEL_UP_MOVE(31, MOVE_SEISMIC_TOSS),
- //LEVEL_UP_MOVE(34, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(34, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(37, MOVE_ENDURE),
- //LEVEL_UP_MOVE(40, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(40, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(43, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
static const struct LevelUpMove sHariyamaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_BRINE),
+ LEVEL_UP_MOVE( 1, MOVE_BRINE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
@@ -6302,18 +6302,18 @@ static const struct LevelUpMove sHariyamaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 7, MOVE_ARM_THRUST),
LEVEL_UP_MOVE(10, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE(13, MOVE_FORCE_PALM),
+ LEVEL_UP_MOVE(13, MOVE_FORCE_PALM),
LEVEL_UP_MOVE(16, MOVE_WHIRLWIND),
LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(22, MOVE_VITAL_THROW),
LEVEL_UP_MOVE(26, MOVE_BELLY_DRUM),
LEVEL_UP_MOVE(30, MOVE_SMELLING_SALTS),
LEVEL_UP_MOVE(34, MOVE_SEISMIC_TOSS),
- //LEVEL_UP_MOVE(38, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(38, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(42, MOVE_ENDURE),
- //LEVEL_UP_MOVE(46, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(46, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(50, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(54, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(54, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
@@ -6325,19 +6325,19 @@ static const struct LevelUpMove sElectrikeLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(13, MOVE_SPARK),
LEVEL_UP_MOVE(16, MOVE_ODOR_SLEUTH),
- //LEVEL_UP_MOVE(19, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE(19, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE(24, MOVE_BITE),
- //LEVEL_UP_MOVE(29, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(29, MOVE_DISCHARGE),
LEVEL_UP_MOVE(34, MOVE_ROAR),
- //LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE),
LEVEL_UP_MOVE(44, MOVE_CHARGE),
LEVEL_UP_MOVE(49, MOVE_THUNDER),
LEVEL_UP_END
};
static const struct LevelUpMove sManectricLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -6347,14 +6347,14 @@ static const struct LevelUpMove sManectricLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(13, MOVE_SPARK),
LEVEL_UP_MOVE(16, MOVE_ODOR_SLEUTH),
- //LEVEL_UP_MOVE(19, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE(19, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE(24, MOVE_BITE),
- //LEVEL_UP_MOVE(30, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(30, MOVE_DISCHARGE),
LEVEL_UP_MOVE(36, MOVE_ROAR),
- //LEVEL_UP_MOVE(42, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(42, MOVE_WILD_CHARGE),
LEVEL_UP_MOVE(48, MOVE_CHARGE),
LEVEL_UP_MOVE(54, MOVE_THUNDER),
- //LEVEL_UP_MOVE(60, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE(60, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_END
};
@@ -6364,10 +6364,10 @@ static const struct LevelUpMove sNumelLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_EMBER),
LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(12, MOVE_MAGNITUDE),
- //LEVEL_UP_MOVE(15, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(15, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(19, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(22, MOVE_LAVA_PLUME),
- //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(22, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(29, MOVE_CURSE),
LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(36, MOVE_YAWN),
@@ -6378,7 +6378,7 @@ static const struct LevelUpMove sNumelLevelUpLearnset[] = {
};
static const struct LevelUpMove sCameruptLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE),
+ //LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE( 1, MOVE_FISSURE),
LEVEL_UP_MOVE( 1, MOVE_ERUPTION),
@@ -6389,10 +6389,10 @@ static const struct LevelUpMove sCameruptLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_EMBER),
LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(12, MOVE_MAGNITUDE),
- //LEVEL_UP_MOVE(15, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(15, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(19, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(22, MOVE_LAVA_PLUME),
- //LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(22, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(26, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(29, MOVE_CURSE),
LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(39, MOVE_YAWN),
@@ -6410,7 +6410,7 @@ static const struct LevelUpMove sSphealLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_ROLLOUT),
LEVEL_UP_MOVE( 9, MOVE_ENCORE),
LEVEL_UP_MOVE(13, MOVE_ICE_BALL),
- //LEVEL_UP_MOVE(17, MOVE_BRINE),
+ LEVEL_UP_MOVE(17, MOVE_BRINE),
LEVEL_UP_MOVE(21, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(26, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(31, MOVE_REST),
@@ -6422,7 +6422,7 @@ static const struct LevelUpMove sSphealLevelUpLearnset[] = {
};
static const struct LevelUpMove sSealeoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SWAGGER),
+ //LEVEL_UP_MOVE( 0, MOVE_SWAGGER),
LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
@@ -6431,7 +6431,7 @@ static const struct LevelUpMove sSealeoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_ROLLOUT),
LEVEL_UP_MOVE( 9, MOVE_ENCORE),
LEVEL_UP_MOVE(13, MOVE_ICE_BALL),
- //LEVEL_UP_MOVE(17, MOVE_BRINE),
+ LEVEL_UP_MOVE(17, MOVE_BRINE),
LEVEL_UP_MOVE(21, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(26, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(31, MOVE_REST),
@@ -6444,7 +6444,7 @@ static const struct LevelUpMove sSealeoLevelUpLearnset[] = {
static const struct LevelUpMove sWalreinLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
@@ -6454,7 +6454,7 @@ static const struct LevelUpMove sWalreinLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_ROLLOUT),
LEVEL_UP_MOVE( 7, MOVE_ENCORE),
LEVEL_UP_MOVE(13, MOVE_ICE_BALL),
- //LEVEL_UP_MOVE(19, MOVE_BRINE),
+ LEVEL_UP_MOVE(19, MOVE_BRINE),
LEVEL_UP_MOVE(19, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(25, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(31, MOVE_REST),
@@ -6475,11 +6475,11 @@ static const struct LevelUpMove sCacneaLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_NEEDLE_ARM),
LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(22, MOVE_INGRAIN),
- //LEVEL_UP_MOVE(26, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(26, MOVE_PAYBACK),
LEVEL_UP_MOVE(30, MOVE_SPIKES),
- //LEVEL_UP_MOVE(34, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(34, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(38, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(42, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(42, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(46, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE(50, MOVE_SANDSTORM),
LEVEL_UP_MOVE(54, MOVE_DESTINY_BOND),
@@ -6488,7 +6488,7 @@ static const struct LevelUpMove sCacneaLevelUpLearnset[] = {
static const struct LevelUpMove sCacturneLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SPIKY_SHIELD),
- //LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD),
+ LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD),
LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND),
LEVEL_UP_MOVE( 1, MOVE_REVENGE),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
@@ -6502,11 +6502,11 @@ static const struct LevelUpMove sCacturneLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_NEEDLE_ARM),
LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(22, MOVE_INGRAIN),
- //LEVEL_UP_MOVE(26, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(26, MOVE_PAYBACK),
LEVEL_UP_MOVE(30, MOVE_SPIKES),
- //LEVEL_UP_MOVE(35, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(35, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(38, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(49, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE(54, MOVE_SANDSTORM),
LEVEL_UP_MOVE(59, MOVE_DESTINY_BOND),
@@ -6517,13 +6517,13 @@ static const struct LevelUpMove sSnoruntLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM),
- //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(14, MOVE_ICY_WIND),
LEVEL_UP_MOVE(19, MOVE_BITE),
- //LEVEL_UP_MOVE(23, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(23, MOVE_ICE_FANG),
LEVEL_UP_MOVE(28, MOVE_HEADBUTT),
LEVEL_UP_MOVE(32, MOVE_PROTECT),
- //LEVEL_UP_MOVE(37, MOVE_FROST_BREATH),
+ LEVEL_UP_MOVE(37, MOVE_FROST_BREATH),
LEVEL_UP_MOVE(41, MOVE_CRUNCH),
LEVEL_UP_MOVE(46, MOVE_BLIZZARD),
LEVEL_UP_MOVE(50, MOVE_HAIL),
@@ -6532,20 +6532,20 @@ static const struct LevelUpMove sSnoruntLevelUpLearnset[] = {
static const struct LevelUpMove sGlalieLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_FREEZE_DRY),
- //LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD),
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM),
- //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(14, MOVE_ICY_WIND),
LEVEL_UP_MOVE(19, MOVE_BITE),
- //LEVEL_UP_MOVE(23, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(23, MOVE_ICE_FANG),
LEVEL_UP_MOVE(28, MOVE_HEADBUTT),
LEVEL_UP_MOVE(32, MOVE_PROTECT),
- //LEVEL_UP_MOVE(37, MOVE_FROST_BREATH),
+ LEVEL_UP_MOVE(37, MOVE_FROST_BREATH),
LEVEL_UP_MOVE(41, MOVE_CRUNCH),
LEVEL_UP_MOVE(48, MOVE_BLIZZARD),
LEVEL_UP_MOVE(54, MOVE_HAIL),
@@ -6554,46 +6554,46 @@ static const struct LevelUpMove sGlalieLevelUpLearnset[] = {
};
static const struct LevelUpMove sLunatoneLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK),
- //LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 5, MOVE_HYPNOSIS),
- //LEVEL_UP_MOVE( 9, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 9, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(13, MOVE_PSYWAVE),
- //LEVEL_UP_MOVE(17, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(17, MOVE_EMBARGO),
LEVEL_UP_MOVE(21, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(25, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE(29, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(37, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(37, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(41, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(45, MOVE_EXPLOSION),
- //LEVEL_UP_MOVE(49, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE(49, MOVE_MAGIC_ROOM),
LEVEL_UP_END
};
static const struct LevelUpMove sSolrockLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 5, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE( 9, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 9, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(13, MOVE_PSYWAVE),
- //LEVEL_UP_MOVE(17, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(17, MOVE_EMBARGO),
LEVEL_UP_MOVE(21, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(25, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE(29, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(37, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(37, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(41, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE(45, MOVE_EXPLOSION),
- //LEVEL_UP_MOVE(49, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(49, MOVE_WONDER_ROOM),
LEVEL_UP_END
};
@@ -6619,21 +6619,21 @@ static const struct LevelUpMove sSpoinkLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(18, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(21, MOVE_MAGIC_COAT),
- //LEVEL_UP_MOVE(26, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(29, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(26, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(29, MOVE_POWER_GEM),
LEVEL_UP_MOVE(29, MOVE_REST),
LEVEL_UP_MOVE(33, MOVE_SNORE),
- //LEVEL_UP_MOVE(38, MOVE_PSYSHOCK),
- //LEVEL_UP_MOVE(40, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(38, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(40, MOVE_PAYBACK),
LEVEL_UP_MOVE(44, MOVE_PSYCHIC),
LEVEL_UP_MOVE(50, MOVE_BOUNCE),
LEVEL_UP_END
};
static const struct LevelUpMove sGrumpigLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_TEETER_DANCE),
+ //LEVEL_UP_MOVE( 0, MOVE_TEETER_DANCE),
LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_BELCH),
+ LEVEL_UP_MOVE( 1, MOVE_BELCH),
LEVEL_UP_MOVE( 1, MOVE_SPLASH),
LEVEL_UP_MOVE( 1, MOVE_PSYWAVE),
LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH),
@@ -6644,73 +6644,73 @@ static const struct LevelUpMove sGrumpigLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(18, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(21, MOVE_MAGIC_COAT),
- //LEVEL_UP_MOVE(26, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(29, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(26, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(29, MOVE_POWER_GEM),
LEVEL_UP_MOVE(35, MOVE_REST),
LEVEL_UP_MOVE(35, MOVE_SNORE),
- //LEVEL_UP_MOVE(42, MOVE_PSYSHOCK),
- //LEVEL_UP_MOVE(46, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(42, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(46, MOVE_PAYBACK),
LEVEL_UP_MOVE(52, MOVE_PSYCHIC),
LEVEL_UP_MOVE(60, MOVE_BOUNCE),
LEVEL_UP_END
};
static const struct LevelUpMove sPlusleLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 4, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 7, MOVE_SPARK),
LEVEL_UP_MOVE(10, MOVE_ENCORE),
- //LEVEL_UP_MOVE(13, MOVE_BESTOW),
+ LEVEL_UP_MOVE(13, MOVE_BESTOW),
LEVEL_UP_MOVE(16, MOVE_SWIFT),
- //LEVEL_UP_MOVE(19, MOVE_ELECTRO_BALL),
- //LEVEL_UP_MOVE(22, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(19, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_COPYCAT),
LEVEL_UP_MOVE(25, MOVE_CHARM),
LEVEL_UP_MOVE(28, MOVE_CHARGE),
- //LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
LEVEL_UP_MOVE(34, MOVE_BATON_PASS),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
- //LEVEL_UP_MOVE(40, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(40, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(43, MOVE_THUNDER),
- //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(49, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(49, MOVE_ENTRAINMENT),
LEVEL_UP_END
};
static const struct LevelUpMove sMinunLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 4, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 7, MOVE_SPARK),
LEVEL_UP_MOVE(10, MOVE_ENCORE),
- //LEVEL_UP_MOVE(13, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE(13, MOVE_SWITCHEROO),
LEVEL_UP_MOVE(16, MOVE_SWIFT),
- //LEVEL_UP_MOVE(19, MOVE_ELECTRO_BALL),
- //LEVEL_UP_MOVE(22, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(19, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_COPYCAT),
LEVEL_UP_MOVE(25, MOVE_FAKE_TEARS),
LEVEL_UP_MOVE(28, MOVE_CHARGE),
- //LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
LEVEL_UP_MOVE(34, MOVE_BATON_PASS),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
- //LEVEL_UP_MOVE(40, MOVE_TRUMP_CARD),
+ LEVEL_UP_MOVE(40, MOVE_TRUMP_CARD),
LEVEL_UP_MOVE(43, MOVE_THUNDER),
- //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(49, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(49, MOVE_ENTRAINMENT),
LEVEL_UP_END
};
static const struct LevelUpMove sMawileLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE( 1, MOVE_TAUNT),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 1, MOVE_TAUNT),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 5, MOVE_FAKE_TEARS),
LEVEL_UP_MOVE( 9, MOVE_BITE),
@@ -6720,12 +6720,12 @@ static const struct LevelUpMove sMawileLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_BATON_PASS),
LEVEL_UP_MOVE(29, MOVE_CRUNCH),
LEVEL_UP_MOVE(33, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(37, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(37, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(41, MOVE_STOCKPILE),
LEVEL_UP_MOVE(41, MOVE_SWALLOW),
LEVEL_UP_MOVE(41, MOVE_SPIT_UP),
- //LEVEL_UP_MOVE(45, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(45, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
@@ -6735,15 +6735,15 @@ static const struct LevelUpMove sMedititeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_CONFUSION),
LEVEL_UP_MOVE( 9, MOVE_DETECT),
LEVEL_UP_MOVE(12, MOVE_ENDURE),
- //LEVEL_UP_MOVE(15, MOVE_FEINT),
- //LEVEL_UP_MOVE(17, MOVE_FORCE_PALM),
+ LEVEL_UP_MOVE(15, MOVE_FEINT),
+ LEVEL_UP_MOVE(17, MOVE_FORCE_PALM),
LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(23, MOVE_CALM_MIND),
LEVEL_UP_MOVE(25, MOVE_MIND_READER),
LEVEL_UP_MOVE(28, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_MOVE(31, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE),
- //LEVEL_UP_MOVE(36, MOVE_POWER_TRICK),
+ LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(36, MOVE_POWER_TRICK),
LEVEL_UP_MOVE(39, MOVE_REVERSAL),
LEVEL_UP_MOVE(41, MOVE_RECOVER),
LEVEL_UP_MOVE(44, MOVE_COUNTER),
@@ -6751,7 +6751,7 @@ static const struct LevelUpMove sMedititeLevelUpLearnset[] = {
};
static const struct LevelUpMove sMedichamLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH),
@@ -6763,15 +6763,15 @@ static const struct LevelUpMove sMedichamLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_CONFUSION),
LEVEL_UP_MOVE( 9, MOVE_DETECT),
LEVEL_UP_MOVE(12, MOVE_ENDURE),
- //LEVEL_UP_MOVE(15, MOVE_FEINT),
- //LEVEL_UP_MOVE(17, MOVE_FORCE_PALM),
+ LEVEL_UP_MOVE(15, MOVE_FEINT),
+ LEVEL_UP_MOVE(17, MOVE_FORCE_PALM),
LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(23, MOVE_CALM_MIND),
LEVEL_UP_MOVE(25, MOVE_MIND_READER),
LEVEL_UP_MOVE(28, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_MOVE(31, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE),
- //LEVEL_UP_MOVE(36, MOVE_POWER_TRICK),
+ LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(36, MOVE_POWER_TRICK),
LEVEL_UP_MOVE(42, MOVE_REVERSAL),
LEVEL_UP_MOVE(47, MOVE_RECOVER),
LEVEL_UP_MOVE(53, MOVE_COUNTER),
@@ -6785,25 +6785,25 @@ static const struct LevelUpMove sSwabluLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_SING),
LEVEL_UP_MOVE( 7, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 9, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(14, MOVE_MIST),
- //LEVEL_UP_MOVE(17, MOVE_ROUND),
- //LEVEL_UP_MOVE(20, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(17, MOVE_ROUND),
+ LEVEL_UP_MOVE(20, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(23, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(26, MOVE_REFRESH),
LEVEL_UP_MOVE(30, MOVE_MIRROR_MOVE),
- //LEVEL_UP_MOVE(34, MOVE_COTTON_GUARD),
- //LEVEL_UP_MOVE(38, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(34, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(38, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(42, MOVE_PERISH_SONG),
- //LEVEL_UP_MOVE(46, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(46, MOVE_MOONBLAST),
LEVEL_UP_END
};
static const struct LevelUpMove sAltariaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH),
+ //LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_PLUCK),
+ LEVEL_UP_MOVE( 1, MOVE_PLUCK),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -6812,17 +6812,17 @@ static const struct LevelUpMove sAltariaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_SING),
LEVEL_UP_MOVE( 7, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 9, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(14, MOVE_MIST),
- //LEVEL_UP_MOVE(17, MOVE_ROUND),
- //LEVEL_UP_MOVE(20, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(17, MOVE_ROUND),
+ LEVEL_UP_MOVE(20, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(23, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(26, MOVE_REFRESH),
LEVEL_UP_MOVE(30, MOVE_DRAGON_DANCE),
- //LEVEL_UP_MOVE(34, MOVE_COTTON_GUARD),
- //LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(34, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(46, MOVE_PERISH_SONG),
- //LEVEL_UP_MOVE(52, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(52, MOVE_MOONBLAST),
LEVEL_UP_MOVE(59, MOVE_SKY_ATTACK),
LEVEL_UP_END
};
@@ -6844,27 +6844,27 @@ static const struct LevelUpMove sDuskullLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_DISABLE),
LEVEL_UP_MOVE( 9, MOVE_ASTONISH),
LEVEL_UP_MOVE(14, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(22, MOVE_PURSUIT),
LEVEL_UP_MOVE(25, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(30, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(33, MOVE_CURSE),
- //LEVEL_UP_MOVE(38, MOVE_HEX),
+ LEVEL_UP_MOVE(38, MOVE_HEX),
LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(46, MOVE_MEAN_LOOK),
- //LEVEL_UP_MOVE(49, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(49, MOVE_PAYBACK),
LEVEL_UP_MOVE(54, MOVE_FUTURE_SIGHT),
LEVEL_UP_END
};
static const struct LevelUpMove sDusclopsLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
+ LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
LEVEL_UP_MOVE( 1, MOVE_BIND),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE),
@@ -6873,15 +6873,15 @@ static const struct LevelUpMove sDusclopsLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_DISABLE),
LEVEL_UP_MOVE( 9, MOVE_ASTONISH),
LEVEL_UP_MOVE(14, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(22, MOVE_PURSUIT),
LEVEL_UP_MOVE(25, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(30, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(33, MOVE_CURSE),
- //LEVEL_UP_MOVE(40, MOVE_HEX),
+ LEVEL_UP_MOVE(40, MOVE_HEX),
LEVEL_UP_MOVE(45, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(52, MOVE_MEAN_LOOK),
- //LEVEL_UP_MOVE(57, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(57, MOVE_PAYBACK),
LEVEL_UP_MOVE(64, MOVE_FUTURE_SIGHT),
LEVEL_UP_END
};
@@ -6896,10 +6896,10 @@ static const struct LevelUpMove sRoseliaLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(22, MOVE_GRASS_WHISTLE),
LEVEL_UP_MOVE(25, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(28, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(28, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(31, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(34, MOVE_INGRAIN),
- //LEVEL_UP_MOVE(37, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(37, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(40, MOVE_TOXIC),
LEVEL_UP_MOVE(43, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(46, MOVE_SYNTHESIS),
@@ -6915,10 +6915,10 @@ static const struct LevelUpMove sSlakothLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(17, MOVE_AMNESIA),
LEVEL_UP_MOVE(22, MOVE_COVET),
- //LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(30, MOVE_COUNTER),
LEVEL_UP_MOVE(33, MOVE_FLAIL),
- //LEVEL_UP_MOVE(38, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(38, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
@@ -6933,7 +6933,7 @@ static const struct LevelUpMove sVigorothLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(17, MOVE_ENDURE),
LEVEL_UP_MOVE(23, MOVE_SLASH),
- //LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(33, MOVE_COUNTER),
LEVEL_UP_MOVE(37, MOVE_FOCUS_PUNCH),
LEVEL_UP_MOVE(43, MOVE_REVERSAL),
@@ -6941,11 +6941,11 @@ static const struct LevelUpMove sVigorothLevelUpLearnset[] = {
};
static const struct LevelUpMove sSlakingLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SWAGGER),
+ //LEVEL_UP_MOVE( 0, MOVE_SWAGGER),
LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE( 1, MOVE_FLING),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE( 1, MOVE_FLING),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_ENCORE),
@@ -6955,12 +6955,12 @@ static const struct LevelUpMove sSlakingLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(17, MOVE_AMNESIA),
LEVEL_UP_MOVE(23, MOVE_COVET),
- //LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(33, MOVE_COUNTER),
LEVEL_UP_MOVE(39, MOVE_FLAIL),
- //LEVEL_UP_MOVE(47, MOVE_FLING),
- //LEVEL_UP_MOVE(53, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE(61, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(47, MOVE_FLING),
+ LEVEL_UP_MOVE(53, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(61, MOVE_HAMMER_ARM),
LEVEL_UP_END
};
@@ -6970,26 +6970,26 @@ static const struct LevelUpMove sGulpinLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_POISON_GAS),
LEVEL_UP_MOVE(10, MOVE_SLUDGE),
LEVEL_UP_MOVE(12, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(17, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(17, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(20, MOVE_ENCORE),
LEVEL_UP_MOVE(25, MOVE_TOXIC),
LEVEL_UP_MOVE(28, MOVE_STOCKPILE),
LEVEL_UP_MOVE(28, MOVE_SPIT_UP),
LEVEL_UP_MOVE(28, MOVE_SWALLOW),
LEVEL_UP_MOVE(33, MOVE_SLUDGE_BOMB),
- //LEVEL_UP_MOVE(36, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(41, MOVE_BELCH),
- //LEVEL_UP_MOVE(44, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(49, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(36, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(41, MOVE_BELCH),
+ LEVEL_UP_MOVE(44, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(49, MOVE_GUNK_SHOT),
LEVEL_UP_END
};
static const struct LevelUpMove sSwalotLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BODY_SLAM),
+ //LEVEL_UP_MOVE( 0, MOVE_BODY_SLAM),
LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE( 1, MOVE_GUNK_SHOT),
- //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE( 1, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
@@ -6998,22 +6998,22 @@ static const struct LevelUpMove sSwalotLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_POISON_GAS),
LEVEL_UP_MOVE(10, MOVE_SLUDGE),
LEVEL_UP_MOVE(12, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(17, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(17, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(20, MOVE_ENCORE),
LEVEL_UP_MOVE(25, MOVE_TOXIC),
LEVEL_UP_MOVE(30, MOVE_STOCKPILE),
LEVEL_UP_MOVE(30, MOVE_SPIT_UP),
LEVEL_UP_MOVE(30, MOVE_SWALLOW),
LEVEL_UP_MOVE(37, MOVE_SLUDGE_BOMB),
- //LEVEL_UP_MOVE(42, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(49, MOVE_BELCH),
- //LEVEL_UP_MOVE(54, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(61, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(42, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(49, MOVE_BELCH),
+ LEVEL_UP_MOVE(54, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(61, MOVE_GUNK_SHOT),
LEVEL_UP_END
};
static const struct LevelUpMove sTropiusLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
@@ -7022,20 +7022,20 @@ static const struct LevelUpMove sTropiusLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_STOMP),
LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(21, MOVE_WHIRLWIND),
- //LEVEL_UP_MOVE(26, MOVE_LEAF_TORNADO),
- //LEVEL_UP_MOVE(30, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(26, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(30, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(41, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(46, MOVE_BESTOW),
+ LEVEL_UP_MOVE(46, MOVE_BESTOW),
LEVEL_UP_MOVE(50, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(56, MOVE_SOLAR_BEAM),
- //LEVEL_UP_MOVE(61, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(61, MOVE_LEAF_STORM),
LEVEL_UP_END
};
static const struct LevelUpMove sWhismurLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
- //LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 8, MOVE_ASTONISH),
LEVEL_UP_MOVE(11, MOVE_HOWL),
LEVEL_UP_MOVE(15, MOVE_SCREECH),
@@ -7046,18 +7046,18 @@ static const struct LevelUpMove sWhismurLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_REST),
LEVEL_UP_MOVE(36, MOVE_SLEEP_TALK),
LEVEL_UP_MOVE(39, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(43, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(43, MOVE_SYNCHRONOISE),
LEVEL_UP_END
};
static const struct LevelUpMove sLoudredLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BITE),
+ //LEVEL_UP_MOVE( 0, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_POUND),
- //LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_HOWL),
- //LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 9, MOVE_ASTONISH),
LEVEL_UP_MOVE(11, MOVE_HOWL),
LEVEL_UP_MOVE(15, MOVE_SCREECH),
@@ -7068,23 +7068,23 @@ static const struct LevelUpMove sLoudredLevelUpLearnset[] = {
LEVEL_UP_MOVE(36, MOVE_REST),
LEVEL_UP_MOVE(41, MOVE_SLEEP_TALK),
LEVEL_UP_MOVE(45, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(50, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(50, MOVE_SYNCHRONOISE),
LEVEL_UP_END
};
static const struct LevelUpMove sExploudLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_CRUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_BITE),
- //LEVEL_UP_MOVE( 1, MOVE_BOOMBURST),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_BOOMBURST),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_POUND),
- //LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_HOWL),
- //LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 4, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 9, MOVE_ASTONISH),
LEVEL_UP_MOVE(11, MOVE_HOWL),
LEVEL_UP_MOVE(15, MOVE_SCREECH),
@@ -7095,8 +7095,8 @@ static const struct LevelUpMove sExploudLevelUpLearnset[] = {
LEVEL_UP_MOVE(36, MOVE_REST),
LEVEL_UP_MOVE(42, MOVE_SLEEP_TALK),
LEVEL_UP_MOVE(47, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(53, MOVE_SYNCHRONOISE),
- //LEVEL_UP_MOVE(58, MOVE_BOOMBURST),
+ LEVEL_UP_MOVE(53, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(58, MOVE_BOOMBURST),
LEVEL_UP_MOVE(64, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
@@ -7106,7 +7106,7 @@ static const struct LevelUpMove sClamperlLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_WHIRLPOOL),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(50, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(50, MOVE_SHELL_SMASH),
LEVEL_UP_END
};
@@ -7117,14 +7117,14 @@ static const struct LevelUpMove sHuntailLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(11, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(14, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(16, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE(19, MOVE_BRINE),
- //LEVEL_UP_MOVE(23, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(16, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(19, MOVE_BRINE),
+ LEVEL_UP_MOVE(23, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(26, MOVE_DIVE),
LEVEL_UP_MOVE(29, MOVE_BATON_PASS),
LEVEL_UP_MOVE(34, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(45, MOVE_COIL),
+ LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(45, MOVE_COIL),
LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
@@ -7134,16 +7134,16 @@ static const struct LevelUpMove sGorebyssLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 5, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 9, MOVE_AGILITY),
- //LEVEL_UP_MOVE(11, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(11, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(14, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(16, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(19, MOVE_AQUA_RING),
- //LEVEL_UP_MOVE(23, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(19, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(23, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(26, MOVE_DIVE),
LEVEL_UP_MOVE(29, MOVE_BATON_PASS),
LEVEL_UP_MOVE(34, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(45, MOVE_COIL),
+ LEVEL_UP_MOVE(39, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(45, MOVE_COIL),
LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
@@ -7152,7 +7152,7 @@ static const struct LevelUpMove sAbsolLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PERISH_SONG),
LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- //LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 4, MOVE_LEER),
@@ -7163,11 +7163,11 @@ static const struct LevelUpMove sAbsolLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(22, MOVE_SLASH),
LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(29, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(29, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(33, MOVE_DETECT),
- //LEVEL_UP_MOVE(37, MOVE_PSYCHO_CUT),
- //LEVEL_UP_MOVE(41, MOVE_ME_FIRST),
- //LEVEL_UP_MOVE(45, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(37, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(41, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(45, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(49, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE(53, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(57, MOVE_PERISH_SONG),
@@ -7179,23 +7179,23 @@ static const struct LevelUpMove sShuppetLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_SCREECH),
LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(10, MOVE_SPITE),
- //LEVEL_UP_MOVE(13, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(13, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(22, MOVE_HEX),
+ LEVEL_UP_MOVE(22, MOVE_HEX),
LEVEL_UP_MOVE(26, MOVE_CURSE),
LEVEL_UP_MOVE(30, MOVE_SHADOW_BALL),
- //LEVEL_UP_MOVE(34, MOVE_EMBARGO),
- //LEVEL_UP_MOVE(38, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(34, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(38, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(42, MOVE_SNATCH),
LEVEL_UP_MOVE(46, MOVE_GRUDGE),
LEVEL_UP_MOVE(50, MOVE_TRICK),
- //LEVEL_UP_MOVE(54, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(54, MOVE_PHANTOM_FORCE),
LEVEL_UP_END
};
static const struct LevelUpMove sBanetteLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE( 1, MOVE_SCREECH),
LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE),
@@ -7203,18 +7203,18 @@ static const struct LevelUpMove sBanetteLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_SCREECH),
LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(10, MOVE_SPITE),
- //LEVEL_UP_MOVE(13, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(13, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(22, MOVE_HEX),
+ LEVEL_UP_MOVE(22, MOVE_HEX),
LEVEL_UP_MOVE(26, MOVE_CURSE),
LEVEL_UP_MOVE(30, MOVE_SHADOW_BALL),
- //LEVEL_UP_MOVE(34, MOVE_EMBARGO),
- //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(34, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(46, MOVE_SNATCH),
LEVEL_UP_MOVE(52, MOVE_GRUDGE),
LEVEL_UP_MOVE(58, MOVE_TRICK),
- //LEVEL_UP_MOVE(64, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(64, MOVE_PHANTOM_FORCE),
LEVEL_UP_END
};
@@ -7224,21 +7224,21 @@ static const struct LevelUpMove sSeviperLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_BITE),
LEVEL_UP_MOVE( 6, MOVE_LICK),
LEVEL_UP_MOVE( 9, MOVE_POISON_TAIL),
- //LEVEL_UP_MOVE(11, MOVE_FEINT),
+ LEVEL_UP_MOVE(11, MOVE_FEINT),
LEVEL_UP_MOVE(14, MOVE_SCREECH),
- //LEVEL_UP_MOVE(16, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(16, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(19, MOVE_GLARE),
LEVEL_UP_MOVE(21, MOVE_POISON_FANG),
- //LEVEL_UP_MOVE(24, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(29, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(31, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(24, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(26, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(29, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(31, MOVE_POISON_JAB),
LEVEL_UP_MOVE(34, MOVE_HAZE),
LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(39, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(41, MOVE_BELCH),
- //LEVEL_UP_MOVE(44, MOVE_COIL),
- //LEVEL_UP_MOVE(46, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(41, MOVE_BELCH),
+ LEVEL_UP_MOVE(44, MOVE_COIL),
+ LEVEL_UP_MOVE(46, MOVE_WRING_OUT),
LEVEL_UP_END
};
@@ -7248,23 +7248,23 @@ static const struct LevelUpMove sZangooseLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 8, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(12, MOVE_PURSUIT),
- //LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(19, MOVE_SLASH),
LEVEL_UP_MOVE(22, MOVE_REVENGE),
LEVEL_UP_MOVE(26, MOVE_CRUSH_CLAW),
LEVEL_UP_MOVE(29, MOVE_FALSE_SWIPE),
- //LEVEL_UP_MOVE(33, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(33, MOVE_EMBARGO),
LEVEL_UP_MOVE(36, MOVE_DETECT),
- //LEVEL_UP_MOVE(40, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(40, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(43, MOVE_TAUNT),
LEVEL_UP_MOVE(47, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
static const struct LevelUpMove sRelicanthLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FLAIL),
- //LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT),
@@ -7279,7 +7279,7 @@ static const struct LevelUpMove sRelicanthLevelUpLearnset[] = {
LEVEL_UP_MOVE(41, MOVE_REST),
LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(56, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(56, MOVE_HEAD_SMASH),
LEVEL_UP_END
};
@@ -7292,16 +7292,16 @@ static const struct LevelUpMove sAronLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(16, MOVE_PROTECT),
LEVEL_UP_MOVE(19, MOVE_ROAR),
- //LEVEL_UP_MOVE(22, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(22, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(25, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(31, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(34, MOVE_IRON_TAIL),
LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(43, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE(49, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE(43, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(49, MOVE_METAL_BURST),
LEVEL_UP_END
};
@@ -7316,16 +7316,16 @@ static const struct LevelUpMove sLaironLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(16, MOVE_PROTECT),
LEVEL_UP_MOVE(19, MOVE_ROAR),
- //LEVEL_UP_MOVE(22, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(22, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(25, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(31, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(35, MOVE_IRON_TAIL),
LEVEL_UP_MOVE(39, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(47, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(51, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE(55, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE(47, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(51, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(55, MOVE_METAL_BURST),
LEVEL_UP_END
};
@@ -7340,16 +7340,16 @@ static const struct LevelUpMove sAggronLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(16, MOVE_PROTECT),
LEVEL_UP_MOVE(19, MOVE_ROAR),
- //LEVEL_UP_MOVE(22, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(22, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(25, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(31, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(35, MOVE_IRON_TAIL),
LEVEL_UP_MOVE(39, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(51, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(57, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE(63, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE(51, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(57, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(63, MOVE_METAL_BURST),
LEVEL_UP_END
};
@@ -7366,7 +7366,7 @@ static const struct LevelUpMove sCastformLevelUpLearnset[] = {
LEVEL_UP_MOVE(35, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(35, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(35, MOVE_BLIZZARD),
- //LEVEL_UP_MOVE(45, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(45, MOVE_HURRICANE),
LEVEL_UP_END
};
@@ -7376,37 +7376,37 @@ static const struct LevelUpMove sVolbeatLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 8, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK),
- //LEVEL_UP_MOVE(15, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(15, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(19, MOVE_MOONLIGHT),
LEVEL_UP_MOVE(22, MOVE_TAIL_GLOW),
LEVEL_UP_MOVE(26, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(29, MOVE_PROTECT),
- //LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(36, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(40, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(40, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(50, MOVE_INFESTATION),
+ LEVEL_UP_MOVE(50, MOVE_INFESTATION),
LEVEL_UP_END
};
static const struct LevelUpMove sIllumiseLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 5, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 9, MOVE_CHARM),
LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK),
- //LEVEL_UP_MOVE(15, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(15, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(19, MOVE_MOONLIGHT),
LEVEL_UP_MOVE(22, MOVE_WISH),
LEVEL_UP_MOVE(26, MOVE_ENCORE),
LEVEL_UP_MOVE(29, MOVE_FLATTER),
- //LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(36, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(40, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(40, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(47, MOVE_COVET),
- //LEVEL_UP_MOVE(50, MOVE_INFESTATION),
+ LEVEL_UP_MOVE(50, MOVE_INFESTATION),
LEVEL_UP_END
};
@@ -7417,20 +7417,20 @@ static const struct LevelUpMove sLileepLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_INGRAIN),
LEVEL_UP_MOVE(13, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(17, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(21, MOVE_BRINE),
+ LEVEL_UP_MOVE(21, MOVE_BRINE),
LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(31, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(31, MOVE_GASTRO_ACID),
LEVEL_UP_MOVE(36, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(41, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(41, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(46, MOVE_STOCKPILE),
LEVEL_UP_MOVE(46, MOVE_SPIT_UP),
LEVEL_UP_MOVE(46, MOVE_SWALLOW),
- //LEVEL_UP_MOVE(52, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(52, MOVE_WRING_OUT),
LEVEL_UP_END
};
static const struct LevelUpMove sCradilyLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
LEVEL_UP_MOVE( 1, MOVE_ACID),
@@ -7439,15 +7439,15 @@ static const struct LevelUpMove sCradilyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_INGRAIN),
LEVEL_UP_MOVE(13, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(17, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(21, MOVE_BRINE),
+ LEVEL_UP_MOVE(21, MOVE_BRINE),
LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(31, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(31, MOVE_GASTRO_ACID),
LEVEL_UP_MOVE(36, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(52, MOVE_STOCKPILE),
LEVEL_UP_MOVE(52, MOVE_SPIT_UP),
LEVEL_UP_MOVE(52, MOVE_SWALLOW),
- //LEVEL_UP_MOVE(61, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(61, MOVE_WRING_OUT),
LEVEL_UP_END
};
@@ -7457,14 +7457,14 @@ static const struct LevelUpMove sAnorithLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 7, MOVE_WATER_GUN),
LEVEL_UP_MOVE(10, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(17, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(25, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(29, MOVE_BRINE),
+ LEVEL_UP_MOVE(25, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(29, MOVE_BRINE),
LEVEL_UP_MOVE(34, MOVE_SLASH),
LEVEL_UP_MOVE(39, MOVE_CRUSH_CLAW),
- //LEVEL_UP_MOVE(44, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(44, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(49, MOVE_PROTECT),
LEVEL_UP_MOVE(55, MOVE_ROCK_BLAST),
LEVEL_UP_END
@@ -7478,14 +7478,14 @@ static const struct LevelUpMove sArmaldoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 7, MOVE_WATER_GUN),
LEVEL_UP_MOVE(10, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(17, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(25, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(29, MOVE_BRINE),
+ LEVEL_UP_MOVE(25, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(29, MOVE_BRINE),
LEVEL_UP_MOVE(34, MOVE_SLASH),
LEVEL_UP_MOVE(39, MOVE_CRUSH_CLAW),
- //LEVEL_UP_MOVE(46, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(46, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(53, MOVE_PROTECT),
LEVEL_UP_MOVE(61, MOVE_ROCK_BLAST),
LEVEL_UP_END
@@ -7496,11 +7496,11 @@ static const struct LevelUpMove sRaltsLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_CONFUSION),
LEVEL_UP_MOVE( 6, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 9, MOVE_TELEPORT),
- //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
- //LEVEL_UP_MOVE(14, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(14, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(17, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(22, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(22, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(24, MOVE_CALM_MIND),
LEVEL_UP_MOVE(27, MOVE_PSYCHIC),
LEVEL_UP_MOVE(29, MOVE_IMPRISON),
@@ -7508,7 +7508,7 @@ static const struct LevelUpMove sRaltsLevelUpLearnset[] = {
LEVEL_UP_MOVE(34, MOVE_CHARM),
LEVEL_UP_MOVE(37, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(39, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(42, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(42, MOVE_STORED_POWER),
LEVEL_UP_END
};
@@ -7520,11 +7520,11 @@ static const struct LevelUpMove sKirliaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_CONFUSION),
LEVEL_UP_MOVE( 6, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 9, MOVE_TELEPORT),
- //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
- //LEVEL_UP_MOVE(14, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(14, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(17, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(26, MOVE_CALM_MIND),
LEVEL_UP_MOVE(30, MOVE_PSYCHIC),
LEVEL_UP_MOVE(33, MOVE_IMPRISON),
@@ -7532,15 +7532,15 @@ static const struct LevelUpMove sKirliaLevelUpLearnset[] = {
LEVEL_UP_MOVE(40, MOVE_CHARM),
LEVEL_UP_MOVE(44, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(47, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(51, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(51, MOVE_STORED_POWER),
LEVEL_UP_END
};
static const struct LevelUpMove sGardevoirLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
- //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
@@ -7548,20 +7548,20 @@ static const struct LevelUpMove sGardevoirLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_CONFUSION),
LEVEL_UP_MOVE( 6, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 9, MOVE_TELEPORT),
- //LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(11, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(14, MOVE_WISH),
LEVEL_UP_MOVE(17, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(26, MOVE_CALM_MIND),
LEVEL_UP_MOVE(31, MOVE_PSYCHIC),
LEVEL_UP_MOVE(35, MOVE_IMPRISON),
LEVEL_UP_MOVE(40, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(44, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(44, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(49, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(53, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(58, MOVE_STORED_POWER),
- //LEVEL_UP_MOVE(62, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(58, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(62, MOVE_MOONBLAST),
LEVEL_UP_END
};
@@ -7575,7 +7575,7 @@ static const struct LevelUpMove sBagonLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(25, MOVE_CRUNCH),
LEVEL_UP_MOVE(29, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(34, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(34, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(39, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(44, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE),
@@ -7583,7 +7583,7 @@ static const struct LevelUpMove sBagonLevelUpLearnset[] = {
};
static const struct LevelUpMove sShelgonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_PROTECT),
+ //LEVEL_UP_MOVE( 0, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_RAGE),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -7597,7 +7597,7 @@ static const struct LevelUpMove sShelgonLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(25, MOVE_CRUNCH),
LEVEL_UP_MOVE(29, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(42, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE),
@@ -7605,12 +7605,12 @@ static const struct LevelUpMove sShelgonLevelUpLearnset[] = {
};
static const struct LevelUpMove sSalamenceLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_FLY),
+ //LEVEL_UP_MOVE( 0, MOVE_FLY),
LEVEL_UP_MOVE( 1, MOVE_FLY),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_RAGE),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -7623,7 +7623,7 @@ static const struct LevelUpMove sSalamenceLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(25, MOVE_CRUNCH),
LEVEL_UP_MOVE(29, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(42, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(63, MOVE_DOUBLE_EDGE),
@@ -7636,16 +7636,16 @@ static const struct LevelUpMove sBeldumLevelUpLearnset[] = {
};
static const struct LevelUpMove sMetangLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_CONFUSION),
- LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW),
+ //LEVEL_UP_MOVE( 0, MOVE_CONFUSION),
+ //LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(23, MOVE_PURSUIT),
- //LEVEL_UP_MOVE(26, MOVE_BULLET_PUNCH),
- //LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE),
- //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(26, MOVE_BULLET_PUNCH),
+ LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(35, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(38, MOVE_PSYCHIC),
LEVEL_UP_MOVE(41, MOVE_AGILITY),
@@ -7657,15 +7657,15 @@ static const struct LevelUpMove sMetangLevelUpLearnset[] = {
static const struct LevelUpMove sMetagrossLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(23, MOVE_PURSUIT),
- //LEVEL_UP_MOVE(26, MOVE_BULLET_PUNCH),
- //LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE),
- //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(26, MOVE_BULLET_PUNCH),
+ LEVEL_UP_MOVE(29, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(35, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(38, MOVE_PSYCHIC),
LEVEL_UP_MOVE(41, MOVE_AGILITY),
@@ -7679,16 +7679,16 @@ static const struct LevelUpMove sRegirockLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EXPLOSION),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
LEVEL_UP_MOVE( 7, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE(19, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(19, MOVE_BULLDOZE),
LEVEL_UP_MOVE(25, MOVE_CURSE),
LEVEL_UP_MOVE(31, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(43, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(43, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(55, MOVE_LOCK_ON),
LEVEL_UP_MOVE(55, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(61, MOVE_SUPERPOWER),
@@ -7700,16 +7700,16 @@ static const struct LevelUpMove sRegiceLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EXPLOSION),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_ICY_WIND),
- //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
LEVEL_UP_MOVE( 7, MOVE_ICY_WIND),
- //LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE(19, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(19, MOVE_BULLDOZE),
LEVEL_UP_MOVE(25, MOVE_CURSE),
LEVEL_UP_MOVE(31, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(37, MOVE_AMNESIA),
LEVEL_UP_MOVE(43, MOVE_ICE_BEAM),
- //LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(55, MOVE_LOCK_ON),
LEVEL_UP_MOVE(55, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(61, MOVE_SUPERPOWER),
@@ -7721,18 +7721,18 @@ static const struct LevelUpMove sRegisteelLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EXPLOSION),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
- //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
LEVEL_UP_MOVE( 7, MOVE_METAL_CLAW),
- //LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE(19, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(13, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(19, MOVE_BULLDOZE),
LEVEL_UP_MOVE(25, MOVE_CURSE),
LEVEL_UP_MOVE(31, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(37, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(43, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(43, MOVE_FLASH_CANNON),
- //LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(43, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(43, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(49, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(55, MOVE_LOCK_ON),
LEVEL_UP_MOVE(55, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(61, MOVE_SUPERPOWER),
@@ -7744,11 +7744,11 @@ static const struct LevelUpMove sKyogreLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_WATER_PULSE),
LEVEL_UP_MOVE( 5, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(15, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(15, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(20, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(30, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(30, MOVE_AQUA_RING),
LEVEL_UP_MOVE(35, MOVE_ICE_BEAM),
- //LEVEL_UP_MOVE(45, MOVE_ORIGIN_PULSE),
+ LEVEL_UP_MOVE(45, MOVE_ORIGIN_PULSE),
LEVEL_UP_MOVE(50, MOVE_CALM_MIND),
LEVEL_UP_MOVE(60, MOVE_MUDDY_WATER),
LEVEL_UP_MOVE(65, MOVE_SHEER_COLD),
@@ -7762,16 +7762,16 @@ static const struct LevelUpMove sGroudonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
LEVEL_UP_MOVE( 5, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(15, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(20, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(15, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(20, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(30, MOVE_REST),
LEVEL_UP_MOVE(35, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(45, MOVE_PRECIPICE_BLADES),
+ LEVEL_UP_MOVE(45, MOVE_PRECIPICE_BLADES),
LEVEL_UP_MOVE(50, MOVE_BULK_UP),
LEVEL_UP_MOVE(60, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE(65, MOVE_FISSURE),
LEVEL_UP_MOVE(75, MOVE_FIRE_BLAST),
- //LEVEL_UP_MOVE(80, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(80, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(90, MOVE_ERUPTION),
LEVEL_UP_END
};
@@ -7781,10 +7781,10 @@ static const struct LevelUpMove sRayquazaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(15, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(20, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(30, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(30, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(35, MOVE_REST),
LEVEL_UP_MOVE(45, MOVE_EXTREME_SPEED),
- //LEVEL_UP_MOVE(50, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(50, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(60, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(65, MOVE_FLY),
LEVEL_UP_MOVE(75, MOVE_HYPER_VOICE),
@@ -7794,49 +7794,49 @@ static const struct LevelUpMove sRayquazaLevelUpLearnset[] = {
};
static const struct LevelUpMove sLatiasLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_WISH),
LEVEL_UP_MOVE( 1, MOVE_PSYWAVE),
LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
LEVEL_UP_MOVE( 4, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 7, MOVE_CHARM),
- //LEVEL_UP_MOVE(10, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(10, MOVE_STORED_POWER),
LEVEL_UP_MOVE(13, MOVE_REFRESH),
- //LEVEL_UP_MOVE(16, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(16, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(24, MOVE_MIST_BALL),
- //LEVEL_UP_MOVE(28, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(28, MOVE_PSYCHO_SHIFT),
LEVEL_UP_MOVE(32, MOVE_RECOVER),
- //LEVEL_UP_MOVE(36, MOVE_REFLECT_TYPE),
- //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(46, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(36, MOVE_REFLECT_TYPE),
+ LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(46, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(51, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(61, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(61, MOVE_HEALING_WISH),
LEVEL_UP_END
};
static const struct LevelUpMove sLatiosLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_PSYWAVE),
LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
LEVEL_UP_MOVE( 4, MOVE_PROTECT),
LEVEL_UP_MOVE( 7, MOVE_DRAGON_DANCE),
- //LEVEL_UP_MOVE(10, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(10, MOVE_STORED_POWER),
LEVEL_UP_MOVE(13, MOVE_REFRESH),
- //LEVEL_UP_MOVE(16, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(16, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(24, MOVE_LUSTER_PURGE),
- //LEVEL_UP_MOVE(28, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(28, MOVE_PSYCHO_SHIFT),
LEVEL_UP_MOVE(32, MOVE_RECOVER),
- //LEVEL_UP_MOVE(36, MOVE_TELEKINESIS),
- //LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(46, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(36, MOVE_TELEKINESIS),
+ LEVEL_UP_MOVE(41, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(46, MOVE_POWER_SPLIT),
LEVEL_UP_MOVE(51, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(61, MOVE_MEMENTO),
LEVEL_UP_END
};
@@ -7849,14 +7849,14 @@ static const struct LevelUpMove sJirachiLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(20, MOVE_PSYCHIC),
LEVEL_UP_MOVE(25, MOVE_REFRESH),
- //LEVEL_UP_MOVE(30, MOVE_LUCKY_CHANT),
- //LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(30, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(35, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(45, MOVE_GRAVITY),
- //LEVEL_UP_MOVE(50, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(45, MOVE_GRAVITY),
+ LEVEL_UP_MOVE(50, MOVE_HEALING_WISH),
LEVEL_UP_MOVE(55, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(60, MOVE_COSMIC_POWER),
- //LEVEL_UP_MOVE(65, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(65, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(70, MOVE_DOOM_DESIRE),
LEVEL_UP_END
};
@@ -7870,8 +7870,8 @@ static const struct LevelUpMove sDeoxysLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_PURSUIT),
LEVEL_UP_MOVE(31, MOVE_PSYCHIC),
LEVEL_UP_MOVE(37, MOVE_SNATCH),
- //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
- //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(55, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE(61, MOVE_RECOVER),
LEVEL_UP_MOVE(67, MOVE_PSYCHO_BOOST),
@@ -7880,8 +7880,8 @@ static const struct LevelUpMove sDeoxysLevelUpLearnset[] = {
};
static const struct LevelUpMove sChimechoLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
- //LEVEL_UP_MOVE( 1, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE( 1, MOVE_SYNCHRONOISE),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -7897,12 +7897,13 @@ static const struct LevelUpMove sChimechoLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_UPROAR),
LEVEL_UP_MOVE(37, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(47, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(52, MOVE_SYNCHRONOISE),
- //LEVEL_UP_MOVE(57, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(47, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(52, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(57, MOVE_HEALING_WISH),
LEVEL_UP_END
};
+#if P_NEW_POKEMON == TRUE
static const struct LevelUpMove sTurtwigLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 5, MOVE_WITHDRAW),
@@ -7915,7 +7916,7 @@ static const struct LevelUpMove sTurtwigLevelUpLearnset[] = {
LEVEL_UP_MOVE(33, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(37, MOVE_CRUNCH),
LEVEL_UP_MOVE(41, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(45, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(45, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -7933,14 +7934,14 @@ static const struct LevelUpMove sGrotleLevelUpLearnset[] = {
LEVEL_UP_MOVE(37, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(42, MOVE_CRUNCH),
LEVEL_UP_MOVE(47, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(52, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(52, MOVE_LEAF_STORM),
LEVEL_UP_END
};
static const struct LevelUpMove sTorterraLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_EARTHQUAKE),
+ //LEVEL_UP_MOVE( 0, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
@@ -7955,7 +7956,7 @@ static const struct LevelUpMove sTorterraLevelUpLearnset[] = {
LEVEL_UP_MOVE(39, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(45, MOVE_CRUNCH),
LEVEL_UP_MOVE(51, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(57, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(57, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -7966,18 +7967,18 @@ static const struct LevelUpMove sChimcharLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_TAUNT),
LEVEL_UP_MOVE(15, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(17, MOVE_FLAME_WHEEL),
- //LEVEL_UP_MOVE(23, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(23, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(25, MOVE_TORMENT),
LEVEL_UP_MOVE(31, MOVE_FACADE),
LEVEL_UP_MOVE(33, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(39, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(39, MOVE_ACROBATICS),
LEVEL_UP_MOVE(41, MOVE_SLACK_OFF),
LEVEL_UP_MOVE(47, MOVE_FLAMETHROWER),
LEVEL_UP_END
};
static const struct LevelUpMove sMonfernoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -7986,21 +7987,21 @@ static const struct LevelUpMove sMonfernoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_TAUNT),
LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(19, MOVE_FLAME_WHEEL),
- //LEVEL_UP_MOVE(26, MOVE_FEINT),
+ LEVEL_UP_MOVE(26, MOVE_FEINT),
LEVEL_UP_MOVE(29, MOVE_TORMENT),
- //LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(39, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(46, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(46, MOVE_ACROBATICS),
LEVEL_UP_MOVE(49, MOVE_SLACK_OFF),
- //LEVEL_UP_MOVE(56, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(56, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
static const struct LevelUpMove sInfernapeLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -8009,12 +8010,12 @@ static const struct LevelUpMove sInfernapeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_TAUNT),
LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(19, MOVE_FLAME_WHEEL),
- //LEVEL_UP_MOVE(26, MOVE_FEINT),
- //LEVEL_UP_MOVE(29, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(26, MOVE_FEINT),
+ LEVEL_UP_MOVE(29, MOVE_PUNISHMENT),
LEVEL_UP_MOVE(42, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(52, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(52, MOVE_ACROBATICS),
LEVEL_UP_MOVE(58, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(68, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(68, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
@@ -8027,7 +8028,7 @@ static const struct LevelUpMove sPiplupLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(22, MOVE_BIDE),
LEVEL_UP_MOVE(25, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(29, MOVE_BRINE),
+ LEVEL_UP_MOVE(29, MOVE_BRINE),
LEVEL_UP_MOVE(32, MOVE_WHIRLPOOL),
LEVEL_UP_MOVE(36, MOVE_MIST),
LEVEL_UP_MOVE(39, MOVE_DRILL_PECK),
@@ -8036,7 +8037,7 @@ static const struct LevelUpMove sPiplupLevelUpLearnset[] = {
};
static const struct LevelUpMove sPrinplupLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW),
+ //LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -8048,7 +8049,7 @@ static const struct LevelUpMove sPrinplupLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(24, MOVE_BIDE),
LEVEL_UP_MOVE(28, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(33, MOVE_BRINE),
+ LEVEL_UP_MOVE(33, MOVE_BRINE),
LEVEL_UP_MOVE(37, MOVE_WHIRLPOOL),
LEVEL_UP_MOVE(42, MOVE_MIST),
LEVEL_UP_MOVE(46, MOVE_DRILL_PECK),
@@ -8058,7 +8059,7 @@ static const struct LevelUpMove sPrinplupLevelUpLearnset[] = {
static const struct LevelUpMove sEmpoleonLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_AQUA_JET),
- //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -8070,7 +8071,7 @@ static const struct LevelUpMove sEmpoleonLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(24, MOVE_SWAGGER),
LEVEL_UP_MOVE(28, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(33, MOVE_BRINE),
+ LEVEL_UP_MOVE(33, MOVE_BRINE),
LEVEL_UP_MOVE(39, MOVE_WHIRLPOOL),
LEVEL_UP_MOVE(46, MOVE_MIST),
LEVEL_UP_MOVE(52, MOVE_DRILL_PECK),
@@ -8089,8 +8090,8 @@ static const struct LevelUpMove sStarlyLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(33, MOVE_AGILITY),
- //LEVEL_UP_MOVE(37, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE(41, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(37, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(41, MOVE_FINAL_GAMBIT),
LEVEL_UP_END
};
@@ -8106,14 +8107,14 @@ static const struct LevelUpMove sStaraviaLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(33, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(38, MOVE_AGILITY),
- //LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE(48, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(48, MOVE_FINAL_GAMBIT),
LEVEL_UP_END
};
static const struct LevelUpMove sStaraptorLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -8126,8 +8127,8 @@ static const struct LevelUpMove sStaraptorLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(33, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(41, MOVE_AGILITY),
- //LEVEL_UP_MOVE(49, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE(57, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(49, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(57, MOVE_FINAL_GAMBIT),
LEVEL_UP_END
};
@@ -8150,10 +8151,10 @@ static const struct LevelUpMove sBidoofLevelUpLearnset[] = {
};
static const struct LevelUpMove sBibarelLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_WATER_GUN),
+ //LEVEL_UP_MOVE( 0, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
- //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 5, MOVE_DEFENSE_CURL),
@@ -8174,13 +8175,13 @@ static const struct LevelUpMove sBibarelLevelUpLearnset[] = {
static const struct LevelUpMove sKricketotLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
- //LEVEL_UP_MOVE( 6, MOVE_STRUGGLE_BUG),
- //LEVEL_UP_MOVE(16, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 6, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(16, MOVE_BUG_BITE),
LEVEL_UP_END
};
static const struct LevelUpMove sKricketuneLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER),
+ //LEVEL_UP_MOVE( 0, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
@@ -8188,13 +8189,13 @@ static const struct LevelUpMove sKricketuneLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_SING),
LEVEL_UP_MOVE(22, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(26, MOVE_SLASH),
- //LEVEL_UP_MOVE(30, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(30, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(34, MOVE_SCREECH),
- //LEVEL_UP_MOVE(36, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(36, MOVE_FELL_STINGER),
LEVEL_UP_MOVE(38, MOVE_TAUNT),
- //LEVEL_UP_MOVE(42, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(44, MOVE_STICKY_WEB),
- //LEVEL_UP_MOVE(46, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(42, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(44, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE(46, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(50, MOVE_PERISH_SONG),
LEVEL_UP_END
};
@@ -8203,16 +8204,16 @@ static const struct LevelUpMove sShinxLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 5, MOVE_LEER),
LEVEL_UP_MOVE( 9, MOVE_CHARGE),
- //LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_SPARK),
LEVEL_UP_MOVE(17, MOVE_BITE),
LEVEL_UP_MOVE(21, MOVE_ROAR),
LEVEL_UP_MOVE(25, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(29, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE(29, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE(33, MOVE_CRUNCH),
LEVEL_UP_MOVE(37, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(41, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(45, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(41, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(45, MOVE_WILD_CHARGE),
LEVEL_UP_END
};
@@ -8225,16 +8226,16 @@ static const struct LevelUpMove sLuxioLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_BITE),
LEVEL_UP_MOVE(23, MOVE_ROAR),
LEVEL_UP_MOVE(28, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(33, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE(33, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE(38, MOVE_CRUNCH),
LEVEL_UP_MOVE(43, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(48, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(53, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(48, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(53, MOVE_WILD_CHARGE),
LEVEL_UP_END
};
static const struct LevelUpMove sLuxrayLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
@@ -8244,12 +8245,12 @@ static const struct LevelUpMove sLuxrayLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_BITE),
LEVEL_UP_MOVE(23, MOVE_ROAR),
LEVEL_UP_MOVE(28, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(35, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE(35, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE(42, MOVE_CRUNCH),
LEVEL_UP_MOVE(49, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(56, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(63, MOVE_WILD_CHARGE),
- //LEVEL_UP_MOVE(67, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE(56, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(63, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(67, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_END
};
@@ -8259,13 +8260,13 @@ static const struct LevelUpMove sBudewLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_WATER_SPORT),
LEVEL_UP_MOVE(10, MOVE_STUN_SPORE),
LEVEL_UP_MOVE(13, MOVE_MEGA_DRAIN),
- //LEVEL_UP_MOVE(16, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(16, MOVE_WORRY_SEED),
LEVEL_UP_END
};
static const struct LevelUpMove sRoseradeLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
@@ -8281,17 +8282,17 @@ static const struct LevelUpMove sCranidosLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_PURSUIT),
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(19, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(24, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(28, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(24, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(28, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(42, MOVE_SCREECH),
- //LEVEL_UP_MOVE(46, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(46, MOVE_HEAD_SMASH),
LEVEL_UP_END
};
static const struct LevelUpMove sRampardosLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ENDEAVOR),
+ //LEVEL_UP_MOVE( 0, MOVE_ENDEAVOR),
LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR),
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -8301,12 +8302,12 @@ static const struct LevelUpMove sRampardosLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_PURSUIT),
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(19, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(24, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(28, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(24, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(28, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(36, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(51, MOVE_SCREECH),
- //LEVEL_UP_MOVE(58, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(58, MOVE_HEAD_SMASH),
LEVEL_UP_END
};
@@ -8320,14 +8321,14 @@ static const struct LevelUpMove sShieldonLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_SWAGGER),
LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(33, MOVE_ENDURE),
- //LEVEL_UP_MOVE(37, MOVE_METAL_BURST),
- //LEVEL_UP_MOVE(42, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(37, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE(42, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(46, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
static const struct LevelUpMove sBastiodonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BLOCK),
+ //LEVEL_UP_MOVE( 0, MOVE_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
@@ -8340,51 +8341,51 @@ static const struct LevelUpMove sBastiodonLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_SWAGGER),
LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(36, MOVE_ENDURE),
- //LEVEL_UP_MOVE(43, MOVE_METAL_BURST),
- //LEVEL_UP_MOVE(51, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(58, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(43, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE(51, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(58, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
static const struct LevelUpMove sBurmyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE(10, MOVE_TACKLE),
- //LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER),
LEVEL_UP_END
};
static const struct LevelUpMove sWormadamLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE(10, MOVE_PROTECT),
- //LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(23, MOVE_CONFUSION),
LEVEL_UP_MOVE(26, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(29, MOVE_GROWTH),
LEVEL_UP_MOVE(32, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(35, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(35, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(38, MOVE_FLAIL),
LEVEL_UP_MOVE(41, MOVE_ATTRACT),
LEVEL_UP_MOVE(44, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(47, MOVE_LEAF_STORM),
- //LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(47, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
static const struct LevelUpMove sMothimLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE(10, MOVE_PROTECT),
- //LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(23, MOVE_CONFUSION),
LEVEL_UP_MOVE(26, MOVE_GUST),
@@ -8392,25 +8393,25 @@ static const struct LevelUpMove sMothimLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_PSYBEAM),
LEVEL_UP_MOVE(35, MOVE_CAMOUFLAGE),
LEVEL_UP_MOVE(38, MOVE_SILVER_WIND),
- //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(44, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(47, MOVE_LUNGE),
- //LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(47, MOVE_LUNGE),
+ LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
static const struct LevelUpMove sCombeeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 1, MOVE_GUST),
- //LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(29, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(29, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
static const struct LevelUpMove sVespiquenLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SLASH),
+ //LEVEL_UP_MOVE( 0, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 1, MOVE_GUST),
@@ -8419,16 +8420,16 @@ static const struct LevelUpMove sVespiquenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 9, MOVE_PURSUIT),
LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE(17, MOVE_DEFEND_ORDER),
- //LEVEL_UP_MOVE(25, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE(29, MOVE_HEAL_ORDER),
+ LEVEL_UP_MOVE(17, MOVE_DEFEND_ORDER),
+ LEVEL_UP_MOVE(25, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(29, MOVE_HEAL_ORDER),
LEVEL_UP_MOVE(33, MOVE_TOXIC),
- //LEVEL_UP_MOVE(37, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(41, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(45, MOVE_ATTACK_ORDER),
+ LEVEL_UP_MOVE(37, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(41, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(45, MOVE_ATTACK_ORDER),
LEVEL_UP_MOVE(49, MOVE_SWAGGER),
LEVEL_UP_MOVE(53, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE(57, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(57, MOVE_FELL_STINGER),
LEVEL_UP_END
};
@@ -8439,14 +8440,14 @@ static const struct LevelUpMove sPachirisuLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_CHARM),
LEVEL_UP_MOVE(13, MOVE_SPARK),
LEVEL_UP_MOVE(17, MOVE_ENDURE),
- //LEVEL_UP_MOVE(19, MOVE_NUZZLE),
+ LEVEL_UP_MOVE(19, MOVE_NUZZLE),
LEVEL_UP_MOVE(21, MOVE_SWIFT),
- //LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(25, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(29, MOVE_SWEET_KISS),
LEVEL_UP_MOVE(33, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE(37, MOVE_SUPER_FANG),
- //LEVEL_UP_MOVE(41, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(45, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(41, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(45, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(49, MOVE_HYPER_FANG),
LEVEL_UP_END
};
@@ -8459,18 +8460,18 @@ static const struct LevelUpMove sBuizelLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_WATER_GUN),
LEVEL_UP_MOVE(18, MOVE_PURSUIT),
LEVEL_UP_MOVE(21, MOVE_SWIFT),
- //LEVEL_UP_MOVE(24, MOVE_AQUA_JET),
- //LEVEL_UP_MOVE(27, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(24, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(27, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE(31, MOVE_WHIRLPOOL),
LEVEL_UP_MOVE(35, MOVE_RAZOR_WIND),
- //LEVEL_UP_MOVE(38, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(38, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(41, MOVE_AGILITY),
LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
static const struct LevelUpMove sFloatzelLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_SONIC_BOOM),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -8482,11 +8483,11 @@ static const struct LevelUpMove sFloatzelLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_WATER_GUN),
LEVEL_UP_MOVE(18, MOVE_PURSUIT),
LEVEL_UP_MOVE(21, MOVE_SWIFT),
- //LEVEL_UP_MOVE(24, MOVE_AQUA_JET),
- //LEVEL_UP_MOVE(29, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(24, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(29, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE(35, MOVE_WHIRLPOOL),
LEVEL_UP_MOVE(41, MOVE_RAZOR_WIND),
- //LEVEL_UP_MOVE(46, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(46, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(51, MOVE_AGILITY),
LEVEL_UP_MOVE(57, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -8500,16 +8501,16 @@ static const struct LevelUpMove sCherubiLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(19, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(22, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(28, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(28, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(37, MOVE_SOLAR_BEAM),
- //LEVEL_UP_MOVE(40, MOVE_LUCKY_CHANT),
- //LEVEL_UP_MOVE(47, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(40, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(47, MOVE_PETAL_BLIZZARD),
LEVEL_UP_END
};
static const struct LevelUpMove sCherrimLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE),
+ //LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE( 1, MOVE_MORNING_SUN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
@@ -8520,11 +8521,11 @@ static const struct LevelUpMove sCherrimLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(19, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(22, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(30, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(30, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(35, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(43, MOVE_SOLAR_BEAM),
- //LEVEL_UP_MOVE(48, MOVE_LUCKY_CHANT),
- //LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(48, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD),
LEVEL_UP_END
};
@@ -8533,7 +8534,7 @@ static const struct LevelUpMove sShellosLevelUpLearnset[] = {
LEVEL_UP_MOVE( 2, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 4, MOVE_HARDEN),
LEVEL_UP_MOVE( 7, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(11, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(11, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(16, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(22, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(29, MOVE_BODY_SLAM),
@@ -8550,7 +8551,7 @@ static const struct LevelUpMove sGastrodonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 2, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 4, MOVE_HARDEN),
LEVEL_UP_MOVE( 7, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(11, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(11, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(16, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(22, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(29, MOVE_BODY_SLAM),
@@ -8560,7 +8561,7 @@ static const struct LevelUpMove sGastrodonLevelUpLearnset[] = {
};
static const struct LevelUpMove sAmbipomLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
@@ -8573,10 +8574,10 @@ static const struct LevelUpMove sAmbipomLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_SWIFT),
LEVEL_UP_MOVE(25, MOVE_SCREECH),
LEVEL_UP_MOVE(29, MOVE_AGILITY),
- //LEVEL_UP_MOVE(32, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE(36, MOVE_FLING),
- //LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(43, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(32, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(36, MOVE_FLING),
+ LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(43, MOVE_LAST_RESORT),
LEVEL_UP_END
};
@@ -8586,10 +8587,10 @@ static const struct LevelUpMove sDrifloonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_ASTONISH),
LEVEL_UP_MOVE( 8, MOVE_GUST),
LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(16, MOVE_PAYBACK),
- //LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(16, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(25, MOVE_STOCKPILE),
- //LEVEL_UP_MOVE(27, MOVE_HEX),
+ LEVEL_UP_MOVE(27, MOVE_HEX),
LEVEL_UP_MOVE(32, MOVE_SWALLOW),
LEVEL_UP_MOVE(32, MOVE_SPIT_UP),
LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL),
@@ -8600,7 +8601,7 @@ static const struct LevelUpMove sDrifloonLevelUpLearnset[] = {
};
static const struct LevelUpMove sDrifblimLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
LEVEL_UP_MOVE( 1, MOVE_MINIMIZE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -8608,17 +8609,17 @@ static const struct LevelUpMove sDrifblimLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_ASTONISH),
LEVEL_UP_MOVE( 8, MOVE_GUST),
LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(16, MOVE_PAYBACK),
- //LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(16, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(20, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(25, MOVE_STOCKPILE),
- //LEVEL_UP_MOVE(27, MOVE_HEX),
+ LEVEL_UP_MOVE(27, MOVE_HEX),
LEVEL_UP_MOVE(34, MOVE_SWALLOW),
LEVEL_UP_MOVE(34, MOVE_SPIT_UP),
LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(46, MOVE_AMNESIA),
LEVEL_UP_MOVE(52, MOVE_BATON_PASS),
LEVEL_UP_MOVE(60, MOVE_EXPLOSION),
- //LEVEL_UP_MOVE(65, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(65, MOVE_PHANTOM_FORCE),
LEVEL_UP_END
};
@@ -8629,26 +8630,26 @@ static const struct LevelUpMove sBunearyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_FORESIGHT),
LEVEL_UP_MOVE( 6, MOVE_ENDURE),
- //LEVEL_UP_MOVE(13, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(13, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(16, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(23, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(26, MOVE_BATON_PASS),
LEVEL_UP_MOVE(33, MOVE_AGILITY),
LEVEL_UP_MOVE(36, MOVE_DIZZY_PUNCH),
- //LEVEL_UP_MOVE(43, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(43, MOVE_AFTER_YOU),
LEVEL_UP_MOVE(46, MOVE_CHARM),
- //LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT),
LEVEL_UP_MOVE(56, MOVE_BOUNCE),
- //LEVEL_UP_MOVE(63, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(63, MOVE_HEALING_WISH),
LEVEL_UP_END
};
static const struct LevelUpMove sLopunnyLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_RETURN),
+ //LEVEL_UP_MOVE( 0, MOVE_RETURN),
LEVEL_UP_MOVE( 1, MOVE_RETURN),
- //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
LEVEL_UP_MOVE( 1, MOVE_BOUNCE),
- //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
LEVEL_UP_MOVE( 1, MOVE_MIRROR_COAT),
LEVEL_UP_MOVE( 1, MOVE_MAGIC_COAT),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
@@ -8656,26 +8657,26 @@ static const struct LevelUpMove sLopunnyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_FORESIGHT),
LEVEL_UP_MOVE( 6, MOVE_ENDURE),
- //LEVEL_UP_MOVE(13, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(13, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(16, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(23, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(26, MOVE_BATON_PASS),
LEVEL_UP_MOVE(33, MOVE_AGILITY),
LEVEL_UP_MOVE(36, MOVE_DIZZY_PUNCH),
- //LEVEL_UP_MOVE(43, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(43, MOVE_AFTER_YOU),
LEVEL_UP_MOVE(46, MOVE_CHARM),
- //LEVEL_UP_MOVE(53, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(53, MOVE_ENTRAINMENT),
LEVEL_UP_MOVE(56, MOVE_BOUNCE),
- //LEVEL_UP_MOVE(63, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(63, MOVE_HEALING_WISH),
LEVEL_UP_MOVE(66, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_END
};
static const struct LevelUpMove sMismagiusLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_MYSTICAL_FIRE),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
- //LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE( 1, MOVE_MYSTICAL_FIRE),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_PSYWAVE),
@@ -8685,18 +8686,18 @@ static const struct LevelUpMove sMismagiusLevelUpLearnset[] = {
};
static const struct LevelUpMove sHonchkrowLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_PURSUIT),
LEVEL_UP_MOVE( 1, MOVE_HAZE),
LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(25, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(35, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY),
- //LEVEL_UP_MOVE(55, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(65, MOVE_QUASH),
- //LEVEL_UP_MOVE(75, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(35, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(45, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(55, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(65, MOVE_QUASH),
+ LEVEL_UP_MOVE(75, MOVE_DARK_PULSE),
LEVEL_UP_END
};
@@ -8709,17 +8710,17 @@ static const struct LevelUpMove sGlameowLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(25, MOVE_CHARM),
LEVEL_UP_MOVE(29, MOVE_ASSIST),
- //LEVEL_UP_MOVE(32, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(32, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(37, MOVE_SLASH),
- //LEVEL_UP_MOVE(41, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(41, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(44, MOVE_ATTRACT),
- //LEVEL_UP_MOVE(48, MOVE_HONE_CLAWS),
- //LEVEL_UP_MOVE(50, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(48, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(50, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
static const struct LevelUpMove sPuruglyLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SWAGGER),
+ //LEVEL_UP_MOVE( 0, MOVE_SWAGGER),
LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
@@ -8731,11 +8732,11 @@ static const struct LevelUpMove sPuruglyLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(25, MOVE_CHARM),
LEVEL_UP_MOVE(29, MOVE_ASSIST),
- //LEVEL_UP_MOVE(32, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(32, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(37, MOVE_SLASH),
LEVEL_UP_MOVE(45, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(52, MOVE_ATTRACT),
- //LEVEL_UP_MOVE(60, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(60, MOVE_HONE_CLAWS),
LEVEL_UP_END
};
@@ -8745,8 +8746,8 @@ static const struct LevelUpMove sChinglingLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_ASTONISH),
LEVEL_UP_MOVE(10, MOVE_CONFUSION),
LEVEL_UP_MOVE(13, MOVE_YAWN),
- //LEVEL_UP_MOVE(16, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(19, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(16, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(19, MOVE_ENTRAINMENT),
LEVEL_UP_MOVE(32, MOVE_UPROAR),
LEVEL_UP_END
};
@@ -8758,22 +8759,22 @@ static const struct LevelUpMove sStunkyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE( 9, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(13, MOVE_SMOKESCREEN),
- //LEVEL_UP_MOVE(15, MOVE_FEINT),
- //LEVEL_UP_MOVE(19, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(15, MOVE_FEINT),
+ LEVEL_UP_MOVE(19, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(21, MOVE_BITE),
LEVEL_UP_MOVE(25, MOVE_SLASH),
LEVEL_UP_MOVE(27, MOVE_TOXIC),
- //LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(33, MOVE_MEMENTO),
- //LEVEL_UP_MOVE(37, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(39, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(43, MOVE_BELCH),
+ LEVEL_UP_MOVE(37, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(39, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(43, MOVE_BELCH),
LEVEL_UP_MOVE(45, MOVE_EXPLOSION),
LEVEL_UP_END
};
static const struct LevelUpMove sSkuntankLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_FLAMETHROWER),
+ //LEVEL_UP_MOVE( 0, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -8783,16 +8784,16 @@ static const struct LevelUpMove sSkuntankLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE( 9, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(13, MOVE_SMOKESCREEN),
- //LEVEL_UP_MOVE(15, MOVE_FEINT),
- //LEVEL_UP_MOVE(19, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(15, MOVE_FEINT),
+ LEVEL_UP_MOVE(19, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(21, MOVE_BITE),
LEVEL_UP_MOVE(25, MOVE_SLASH),
LEVEL_UP_MOVE(27, MOVE_TOXIC),
- //LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(33, MOVE_MEMENTO),
- //LEVEL_UP_MOVE(37, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(39, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(43, MOVE_BELCH),
+ LEVEL_UP_MOVE(37, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(39, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(43, MOVE_BELCH),
LEVEL_UP_MOVE(45, MOVE_EXPLOSION),
LEVEL_UP_END
};
@@ -8809,16 +8810,16 @@ static const struct LevelUpMove sBronzorLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(29, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(31, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(35, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(35, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(39, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE(41, MOVE_PAYBACK),
- //LEVEL_UP_MOVE(45, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(49, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(41, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(45, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(49, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
static const struct LevelUpMove sBronzongLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BLOCK),
+ //LEVEL_UP_MOVE( 0, MOVE_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE),
@@ -8835,28 +8836,28 @@ static const struct LevelUpMove sBronzongLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(29, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(31, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(36, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(36, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(42, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE(46, MOVE_PAYBACK),
- //LEVEL_UP_MOVE(52, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(58, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(46, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(52, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(58, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
static const struct LevelUpMove sBonslyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FAKE_TEARS),
- //LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
LEVEL_UP_MOVE( 5, MOVE_FLAIL),
LEVEL_UP_MOVE( 8, MOVE_LOW_KICK),
LEVEL_UP_MOVE(12, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(15, MOVE_MIMIC),
LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK),
+ LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK),
LEVEL_UP_MOVE(26, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(29, MOVE_BLOCK),
LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(36, MOVE_COUNTER),
- //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
@@ -8866,7 +8867,7 @@ static const struct LevelUpMove sMimeJrLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_BARRIER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE( 4, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 4, MOVE_COPYCAT),
LEVEL_UP_MOVE( 8, MOVE_MEDITATE),
LEVEL_UP_MOVE(11, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(15, MOVE_MIMIC),
@@ -8887,7 +8888,7 @@ static const struct LevelUpMove sMimeJrLevelUpLearnset[] = {
static const struct LevelUpMove sHappinyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_CHARM),
- //LEVEL_UP_MOVE( 5, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 5, MOVE_COPYCAT),
LEVEL_UP_MOVE( 9, MOVE_REFRESH),
LEVEL_UP_MOVE(12, MOVE_SWEET_KISS),
LEVEL_UP_END
@@ -8895,22 +8896,22 @@ static const struct LevelUpMove sHappinyLevelUpLearnset[] = {
static const struct LevelUpMove sChatotLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE( 1, MOVE_CHATTER),
- //LEVEL_UP_MOVE( 1, MOVE_CONFIDE),
+ LEVEL_UP_MOVE( 1, MOVE_CHATTER),
+ LEVEL_UP_MOVE( 1, MOVE_CONFIDE),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 5, MOVE_GROWL),
LEVEL_UP_MOVE( 9, MOVE_MIRROR_MOVE),
LEVEL_UP_MOVE(13, MOVE_SING),
LEVEL_UP_MOVE(17, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(21, MOVE_CHATTER),
+ LEVEL_UP_MOVE(21, MOVE_CHATTER),
LEVEL_UP_MOVE(25, MOVE_TAUNT),
- //LEVEL_UP_MOVE(29, MOVE_ROUND),
+ LEVEL_UP_MOVE(29, MOVE_ROUND),
LEVEL_UP_MOVE(33, MOVE_MIMIC),
- //LEVEL_UP_MOVE(37, MOVE_ECHOED_VOICE),
- //LEVEL_UP_MOVE(41, MOVE_ROOST),
+ LEVEL_UP_MOVE(37, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(41, MOVE_ROOST),
LEVEL_UP_MOVE(45, MOVE_UPROAR),
- //LEVEL_UP_MOVE(49, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(49, MOVE_SYNCHRONOISE),
LEVEL_UP_MOVE(50, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(57, MOVE_HYPER_VOICE),
LEVEL_UP_END
@@ -8921,15 +8922,15 @@ static const struct LevelUpMove sSpiritombLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PURSUIT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
- //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE( 7, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(13, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(19, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND),
- //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(37, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(37, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(43, MOVE_MEMENTO),
- //LEVEL_UP_MOVE(49, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(49, MOVE_DARK_PULSE),
LEVEL_UP_END
};
@@ -8943,13 +8944,13 @@ static const struct LevelUpMove sGibleLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_SLASH),
LEVEL_UP_MOVE(27, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(31, MOVE_DIG),
- //LEVEL_UP_MOVE(37, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(37, MOVE_DRAGON_RUSH),
LEVEL_UP_END
};
static const struct LevelUpMove sGabiteLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DUAL_CHOP),
- //LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE),
@@ -8961,15 +8962,15 @@ static const struct LevelUpMove sGabiteLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_SLASH),
LEVEL_UP_MOVE(33, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(40, MOVE_DIG),
- //LEVEL_UP_MOVE(49, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(49, MOVE_DRAGON_RUSH),
LEVEL_UP_END
};
static const struct LevelUpMove sGarchompLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_CRUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE),
@@ -8982,12 +8983,12 @@ static const struct LevelUpMove sGarchompLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_SLASH),
LEVEL_UP_MOVE(33, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(40, MOVE_DIG),
- //LEVEL_UP_MOVE(55, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(55, MOVE_DRAGON_RUSH),
LEVEL_UP_END
};
static const struct LevelUpMove sMunchlaxLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 1, MOVE_METRONOME),
@@ -8996,17 +8997,17 @@ static const struct LevelUpMove sMunchlaxLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 9, MOVE_AMNESIA),
LEVEL_UP_MOVE(12, MOVE_LICK),
- //LEVEL_UP_MOVE(17, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(17, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(20, MOVE_SCREECH),
LEVEL_UP_MOVE(25, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(28, MOVE_STOCKPILE),
LEVEL_UP_MOVE(33, MOVE_SWALLOW),
LEVEL_UP_MOVE(36, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE(41, MOVE_FLING),
+ LEVEL_UP_MOVE(41, MOVE_FLING),
LEVEL_UP_MOVE(44, MOVE_BELLY_DRUM),
- //LEVEL_UP_MOVE(49, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(49, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(50, MOVE_SNATCH),
- //LEVEL_UP_MOVE(57, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(57, MOVE_LAST_RESORT),
LEVEL_UP_END
};
@@ -9015,37 +9016,37 @@ static const struct LevelUpMove sRioluLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_ENDURE),
LEVEL_UP_MOVE( 6, MOVE_COUNTER),
- //LEVEL_UP_MOVE(11, MOVE_FEINT),
- //LEVEL_UP_MOVE(15, MOVE_FORCE_PALM),
- //LEVEL_UP_MOVE(19, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(11, MOVE_FEINT),
+ LEVEL_UP_MOVE(15, MOVE_FORCE_PALM),
+ LEVEL_UP_MOVE(19, MOVE_COPYCAT),
LEVEL_UP_MOVE(24, MOVE_SCREECH),
LEVEL_UP_MOVE(29, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(47, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(50, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(47, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(50, MOVE_FINAL_GAMBIT),
LEVEL_UP_END
};
static const struct LevelUpMove sLucarioLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_AURA_SPHERE),
- //LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE),
- //LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS),
LEVEL_UP_MOVE( 1, MOVE_FORESIGHT),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_DETECT),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 6, MOVE_COUNTER),
- //LEVEL_UP_MOVE(11, MOVE_FEINT),
- //LEVEL_UP_MOVE(15, MOVE_POWER_UP_PUNCH),
+ LEVEL_UP_MOVE(11, MOVE_FEINT),
+ LEVEL_UP_MOVE(15, MOVE_POWER_UP_PUNCH),
LEVEL_UP_MOVE(19, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(24, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(29, MOVE_BONE_RUSH),
- //LEVEL_UP_MOVE(33, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(37, MOVE_ME_FIRST),
- //LEVEL_UP_MOVE(42, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(33, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(37, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(42, MOVE_WORK_UP),
LEVEL_UP_MOVE(47, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(51, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(55, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE(60, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(51, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(55, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(60, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(65, MOVE_EXTREME_SPEED),
LEVEL_UP_END
};
@@ -9066,9 +9067,9 @@ static const struct LevelUpMove sHippopotasLevelUpLearnset[] = {
};
static const struct LevelUpMove sHippowdonLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -9091,43 +9092,43 @@ static const struct LevelUpMove sSkorupiLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE( 9, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(13, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(13, MOVE_ACUPRESSURE),
LEVEL_UP_MOVE(16, MOVE_PURSUIT),
- //LEVEL_UP_MOVE(20, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(20, MOVE_BUG_BITE),
LEVEL_UP_MOVE(23, MOVE_POISON_FANG),
- //LEVEL_UP_MOVE(27, MOVE_VENOSHOCK),
- //LEVEL_UP_MOVE(30, MOVE_HONE_CLAWS),
- //LEVEL_UP_MOVE(34, MOVE_TOXIC_SPIKES),
- //LEVEL_UP_MOVE(38, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(27, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(30, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(34, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(38, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(41, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(45, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(47, MOVE_FELL_STINGER),
- //LEVEL_UP_MOVE(49, MOVE_CROSS_POISON),
+ LEVEL_UP_MOVE(47, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(49, MOVE_CROSS_POISON),
LEVEL_UP_END
};
static const struct LevelUpMove sDrapionLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE( 5, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE( 9, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(13, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(13, MOVE_ACUPRESSURE),
LEVEL_UP_MOVE(16, MOVE_PURSUIT),
- //LEVEL_UP_MOVE(20, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(20, MOVE_BUG_BITE),
LEVEL_UP_MOVE(23, MOVE_POISON_FANG),
- //LEVEL_UP_MOVE(27, MOVE_VENOSHOCK),
- //LEVEL_UP_MOVE(30, MOVE_HONE_CLAWS),
- //LEVEL_UP_MOVE(34, MOVE_TOXIC_SPIKES),
- //LEVEL_UP_MOVE(38, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(27, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(30, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(34, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(38, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(43, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(49, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(53, MOVE_FELL_STINGER),
- //LEVEL_UP_MOVE(57, MOVE_CROSS_POISON),
+ LEVEL_UP_MOVE(53, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(57, MOVE_CROSS_POISON),
LEVEL_UP_END
};
@@ -9140,13 +9141,13 @@ static const struct LevelUpMove sCroagunkLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(22, MOVE_REVENGE),
LEVEL_UP_MOVE(24, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(29, MOVE_MUD_BOMB),
- //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(36, MOVE_VENOSHOCK),
- //LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(43, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(29, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(36, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(43, MOVE_POISON_JAB),
LEVEL_UP_MOVE(45, MOVE_SLUDGE_BOMB),
- //LEVEL_UP_MOVE(47, MOVE_BELCH),
+ LEVEL_UP_MOVE(47, MOVE_BELCH),
LEVEL_UP_MOVE(50, MOVE_FLATTER),
LEVEL_UP_END
};
@@ -9162,13 +9163,13 @@ static const struct LevelUpMove sToxicroakLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(22, MOVE_REVENGE),
LEVEL_UP_MOVE(24, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(29, MOVE_MUD_BOMB),
- //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(36, MOVE_VENOSHOCK),
- //LEVEL_UP_MOVE(41, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(49, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(29, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(36, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(41, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(49, MOVE_POISON_JAB),
LEVEL_UP_MOVE(54, MOVE_SLUDGE_BOMB),
- //LEVEL_UP_MOVE(58, MOVE_BELCH),
+ LEVEL_UP_MOVE(58, MOVE_BELCH),
LEVEL_UP_MOVE(62, MOVE_FLATTER),
LEVEL_UP_END
};
@@ -9181,13 +9182,13 @@ static const struct LevelUpMove sCarnivineLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(21, MOVE_INGRAIN),
LEVEL_UP_MOVE(27, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(31, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(31, MOVE_LEAF_TORNADO),
LEVEL_UP_MOVE(37, MOVE_STOCKPILE),
LEVEL_UP_MOVE(37, MOVE_SPIT_UP),
LEVEL_UP_MOVE(37, MOVE_SWALLOW),
LEVEL_UP_MOVE(41, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(47, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(50, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(47, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(50, MOVE_POWER_WHIP),
LEVEL_UP_END
};
@@ -9198,19 +9199,19 @@ static const struct LevelUpMove sFinneonLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(17, MOVE_GUST),
LEVEL_UP_MOVE(22, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(26, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(26, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(29, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE(33, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(33, MOVE_AQUA_RING),
LEVEL_UP_MOVE(38, MOVE_WHIRLPOOL),
- //LEVEL_UP_MOVE(42, MOVE_U_TURN),
+ LEVEL_UP_MOVE(42, MOVE_U_TURN),
LEVEL_UP_MOVE(45, MOVE_BOUNCE),
LEVEL_UP_MOVE(49, MOVE_SILVER_WIND),
- //LEVEL_UP_MOVE(54, MOVE_SOAK),
+ LEVEL_UP_MOVE(54, MOVE_SOAK),
LEVEL_UP_END
};
static const struct LevelUpMove sLumineonLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SOAK),
+ LEVEL_UP_MOVE( 1, MOVE_SOAK),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -9220,14 +9221,14 @@ static const struct LevelUpMove sLumineonLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(17, MOVE_GUST),
LEVEL_UP_MOVE(22, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(26, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(26, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(29, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE(35, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(35, MOVE_AQUA_RING),
LEVEL_UP_MOVE(42, MOVE_WHIRLPOOL),
- //LEVEL_UP_MOVE(48, MOVE_U_TURN),
+ LEVEL_UP_MOVE(48, MOVE_U_TURN),
LEVEL_UP_MOVE(53, MOVE_BOUNCE),
LEVEL_UP_MOVE(59, MOVE_SILVER_WIND),
- //LEVEL_UP_MOVE(66, MOVE_SOAK),
+ LEVEL_UP_MOVE(66, MOVE_SOAK),
LEVEL_UP_END
};
@@ -9240,11 +9241,11 @@ static const struct LevelUpMove sMantykeLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(16, MOVE_HEADBUTT),
LEVEL_UP_MOVE(19, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(32, MOVE_AGILITY),
- //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(39, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(39, MOVE_AQUA_RING),
LEVEL_UP_MOVE(46, MOVE_BOUNCE),
LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -9258,9 +9259,9 @@ static const struct LevelUpMove sSnoverLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_GRASS_WHISTLE),
LEVEL_UP_MOVE(17, MOVE_SWAGGER),
LEVEL_UP_MOVE(21, MOVE_MIST),
- //LEVEL_UP_MOVE(26, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(26, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(31, MOVE_INGRAIN),
- //LEVEL_UP_MOVE(36, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(36, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE(41, MOVE_BLIZZARD),
LEVEL_UP_MOVE(46, MOVE_SHEER_COLD),
LEVEL_UP_END
@@ -9277,18 +9278,18 @@ static const struct LevelUpMove sAbomasnowLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_GRASS_WHISTLE),
LEVEL_UP_MOVE(17, MOVE_SWAGGER),
LEVEL_UP_MOVE(21, MOVE_MIST),
- //LEVEL_UP_MOVE(26, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(26, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(31, MOVE_INGRAIN),
- //LEVEL_UP_MOVE(36, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(36, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE(47, MOVE_BLIZZARD),
LEVEL_UP_MOVE(58, MOVE_SHEER_COLD),
LEVEL_UP_END
};
static const struct LevelUpMove sWeavileLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_EMBARGO),
+ LEVEL_UP_MOVE( 1, MOVE_EMBARGO),
LEVEL_UP_MOVE( 1, MOVE_REVENGE),
- //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
@@ -9297,51 +9298,51 @@ static const struct LevelUpMove sWeavileLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(14, MOVE_ICY_WIND),
LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE(20, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(20, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(22, MOVE_METAL_CLAW),
- //LEVEL_UP_MOVE(25, MOVE_HONE_CLAWS),
- //LEVEL_UP_MOVE(28, MOVE_FLING),
+ LEVEL_UP_MOVE(25, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(28, MOVE_FLING),
LEVEL_UP_MOVE(32, MOVE_SCREECH),
- //LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(40, MOVE_SNATCH),
- //LEVEL_UP_MOVE(44, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE(47, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(44, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(47, MOVE_DARK_PULSE),
LEVEL_UP_END
};
static const struct LevelUpMove sMagnezoneLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
LEVEL_UP_MOVE( 1, MOVE_MIRROR_COAT),
LEVEL_UP_MOVE( 1, MOVE_BARRIER),
- //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 5, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 7, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB),
+ LEVEL_UP_MOVE(11, MOVE_MAGNET_BOMB),
LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(17, MOVE_SONIC_BOOM),
LEVEL_UP_MOVE(19, MOVE_SPARK),
- //LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(23, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(25, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
- //LEVEL_UP_MOVE(33, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(33, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE(39, MOVE_SCREECH),
- //LEVEL_UP_MOVE(43, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(43, MOVE_DISCHARGE),
LEVEL_UP_MOVE(49, MOVE_LOCK_ON),
- //LEVEL_UP_MOVE(53, MOVE_MAGNET_RISE),
- //LEVEL_UP_MOVE(59, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(53, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(59, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(63, MOVE_ZAP_CANNON),
LEVEL_UP_END
};
static const struct LevelUpMove sLickilickyLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC),
LEVEL_UP_MOVE( 9, MOVE_DEFENSE_CURL),
@@ -9351,39 +9352,39 @@ static const struct LevelUpMove sLickilickyLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_DISABLE),
LEVEL_UP_MOVE(29, MOVE_SLAM),
LEVEL_UP_MOVE(33, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY),
- //LEVEL_UP_MOVE(41, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(37, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(41, MOVE_ME_FIRST),
LEVEL_UP_MOVE(45, MOVE_REFRESH),
LEVEL_UP_MOVE(49, MOVE_SCREECH),
- //LEVEL_UP_MOVE(53, MOVE_POWER_WHIP),
- //LEVEL_UP_MOVE(57, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(61, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(53, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(57, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(61, MOVE_GYRO_BALL),
LEVEL_UP_END
};
static const struct LevelUpMove sRhyperiorLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_ROCK_WRECKER),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_WRECKER),
LEVEL_UP_MOVE( 1, MOVE_HORN_DRILL),
- //LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 9, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(13, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(17, MOVE_STOMP),
- //LEVEL_UP_MOVE(21, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(21, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(25, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(29, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(33, MOVE_DRILL_RUN),
+ LEVEL_UP_MOVE(33, MOVE_DRILL_RUN),
LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(41, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(41, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(48, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(55, MOVE_MEGAHORN),
LEVEL_UP_MOVE(62, MOVE_HORN_DRILL),
- //LEVEL_UP_MOVE(69, MOVE_ROCK_WRECKER),
+ LEVEL_UP_MOVE(69, MOVE_ROCK_WRECKER),
LEVEL_UP_END
};
@@ -9400,21 +9401,21 @@ static const struct LevelUpMove sTangrowthLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(27, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(30, MOVE_STUN_SPORE),
- //LEVEL_UP_MOVE(33, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(33, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(40, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(43, MOVE_SLAM),
LEVEL_UP_MOVE(46, MOVE_TICKLE),
- //LEVEL_UP_MOVE(49, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(50, MOVE_GRASSY_TERRAIN),
- //LEVEL_UP_MOVE(53, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(49, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(50, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(53, MOVE_POWER_WHIP),
LEVEL_UP_MOVE(56, MOVE_BLOCK),
LEVEL_UP_END
};
static const struct LevelUpMove sElectivireLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -9425,15 +9426,15 @@ static const struct LevelUpMove sElectivireLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_SWIFT),
LEVEL_UP_MOVE(15, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(19, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(22, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(26, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(29, MOVE_THUNDER_PUNCH),
- //LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
LEVEL_UP_MOVE(42, MOVE_SCREECH),
LEVEL_UP_MOVE(49, MOVE_THUNDERBOLT),
LEVEL_UP_MOVE(55, MOVE_THUNDER),
- //LEVEL_UP_MOVE(62, MOVE_GIGA_IMPACT),
- //LEVEL_UP_MOVE(65, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE(62, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(65, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_END
};
@@ -9447,11 +9448,11 @@ static const struct LevelUpMove sMagmortarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(12, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(15, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG),
- //LEVEL_UP_MOVE(22, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(19, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(22, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(26, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(29, MOVE_FIRE_PUNCH),
- //LEVEL_UP_MOVE(36, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(36, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(42, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(55, MOVE_FIRE_BLAST),
@@ -9460,19 +9461,19 @@ static const struct LevelUpMove sMagmortarLevelUpLearnset[] = {
};
static const struct LevelUpMove sTogekissLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED),
- //LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE),
- //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
LEVEL_UP_END
};
static const struct LevelUpMove sYanmegaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FORESIGHT),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -9485,23 +9486,23 @@ static const struct LevelUpMove sYanmegaLevelUpLearnset[] = {
LEVEL_UP_MOVE(27, MOVE_UPROAR),
LEVEL_UP_MOVE(30, MOVE_PURSUIT),
LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(38, MOVE_FEINT),
+ LEVEL_UP_MOVE(38, MOVE_FEINT),
LEVEL_UP_MOVE(43, MOVE_SLASH),
LEVEL_UP_MOVE(46, MOVE_SCREECH),
- //LEVEL_UP_MOVE(49, MOVE_U_TURN),
- //LEVEL_UP_MOVE(54, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(57, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(49, MOVE_U_TURN),
+ LEVEL_UP_MOVE(54, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(57, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
static const struct LevelUpMove sLeafeonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF),
+ //LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_GRASS_WHISTLE),
LEVEL_UP_MOVE(20, MOVE_MAGICAL_LEAF),
@@ -9509,37 +9510,37 @@ static const struct LevelUpMove sLeafeonLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(33, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(37, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(45, MOVE_LEAF_BLADE),
LEVEL_UP_END
};
static const struct LevelUpMove sGlaceonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ICY_WIND),
+ //LEVEL_UP_MOVE( 0, MOVE_ICY_WIND),
LEVEL_UP_MOVE( 1, MOVE_ICY_WIND),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_BITE),
- //LEVEL_UP_MOVE(20, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE(25, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(20, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(25, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(29, MOVE_BARRIER),
LEVEL_UP_MOVE(33, MOVE_MIRROR_COAT),
LEVEL_UP_MOVE(37, MOVE_HAIL),
- //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(45, MOVE_BLIZZARD),
LEVEL_UP_END
};
static const struct LevelUpMove sGliscorLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GUILLOTINE),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF),
@@ -9549,11 +9550,11 @@ static const struct LevelUpMove sGliscorLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(19, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(22, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(27, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(30, MOVE_U_TURN),
+ LEVEL_UP_MOVE(22, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(27, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(30, MOVE_U_TURN),
LEVEL_UP_MOVE(35, MOVE_SCREECH),
- //LEVEL_UP_MOVE(40, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(40, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(45, MOVE_SKY_UPPERCUT),
LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(55, MOVE_GUILLOTINE),
@@ -9572,11 +9573,11 @@ static const struct LevelUpMove sMamoswineLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(11, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(14, MOVE_ENDURE),
- //LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(18, MOVE_MUD_BOMB),
LEVEL_UP_MOVE(21, MOVE_HAIL),
- //LEVEL_UP_MOVE(24, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(24, MOVE_ICE_FANG),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(33, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(33, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE(37, MOVE_MIST),
LEVEL_UP_MOVE(41, MOVE_THRASH),
LEVEL_UP_MOVE(46, MOVE_EARTHQUAKE),
@@ -9586,20 +9587,20 @@ static const struct LevelUpMove sMamoswineLevelUpLearnset[] = {
};
static const struct LevelUpMove sPorygonZLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_TRICK_ROOM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK_ROOM),
LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE( 1, MOVE_MAGIC_COAT),
LEVEL_UP_MOVE( 1, MOVE_CONVERSION_2),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_CONVERSION),
- //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE( 7, MOVE_PSYBEAM),
LEVEL_UP_MOVE(12, MOVE_AGILITY),
LEVEL_UP_MOVE(18, MOVE_RECOVER),
- //LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(23, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE(29, MOVE_SIGNAL_BEAM),
- //LEVEL_UP_MOVE(34, MOVE_EMBARGO),
- //LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(34, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
LEVEL_UP_MOVE(45, MOVE_LOCK_ON),
LEVEL_UP_MOVE(50, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE(56, MOVE_MAGIC_COAT),
@@ -9609,12 +9610,12 @@ static const struct LevelUpMove sPorygonZLevelUpLearnset[] = {
};
static const struct LevelUpMove sGalladeLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SLASH),
+ //LEVEL_UP_MOVE( 0, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
- //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE( 1, MOVE_LEAF_BLADE),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
@@ -9622,46 +9623,46 @@ static const struct LevelUpMove sGalladeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_CONFUSION),
LEVEL_UP_MOVE( 6, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 9, MOVE_TELEPORT),
- //LEVEL_UP_MOVE(11, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(11, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(14, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(17, MOVE_AERIAL_ACE),
- //LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(19, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(23, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(26, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(31, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(31, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE(35, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(40, MOVE_FEINT),
+ LEVEL_UP_MOVE(40, MOVE_FEINT),
LEVEL_UP_MOVE(44, MOVE_FALSE_SWIPE),
LEVEL_UP_MOVE(49, MOVE_PROTECT),
- //LEVEL_UP_MOVE(53, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE(58, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(53, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(58, MOVE_STORED_POWER),
LEVEL_UP_END
};
static const struct LevelUpMove sProbopassLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK),
+ //LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
- //LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE( 1, MOVE_BLOCK),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNET_BOMB),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNET_BOMB),
LEVEL_UP_MOVE( 4, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE( 7, MOVE_BLOCK),
- //LEVEL_UP_MOVE(10, MOVE_MAGNET_BOMB),
+ LEVEL_UP_MOVE(10, MOVE_MAGNET_BOMB),
LEVEL_UP_MOVE(13, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE(16, MOVE_REST),
LEVEL_UP_MOVE(19, MOVE_SPARK),
LEVEL_UP_MOVE(22, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(25, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(25, MOVE_POWER_GEM),
LEVEL_UP_MOVE(28, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
LEVEL_UP_MOVE(34, MOVE_SANDSTORM),
- //LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(40, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(40, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(43, MOVE_LOCK_ON),
LEVEL_UP_MOVE(43, MOVE_ZAP_CANNON),
LEVEL_UP_END
@@ -9673,7 +9674,7 @@ static const struct LevelUpMove sDusknoirLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
+ LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
LEVEL_UP_MOVE( 1, MOVE_BIND),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE),
@@ -9682,36 +9683,36 @@ static const struct LevelUpMove sDusknoirLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_DISABLE),
LEVEL_UP_MOVE( 9, MOVE_ASTONISH),
LEVEL_UP_MOVE(14, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(17, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(22, MOVE_PURSUIT),
LEVEL_UP_MOVE(25, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(30, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(33, MOVE_CURSE),
- //LEVEL_UP_MOVE(40, MOVE_HEX),
+ LEVEL_UP_MOVE(40, MOVE_HEX),
LEVEL_UP_MOVE(45, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(52, MOVE_MEAN_LOOK),
- //LEVEL_UP_MOVE(57, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(57, MOVE_PAYBACK),
LEVEL_UP_MOVE(64, MOVE_FUTURE_SIGHT),
LEVEL_UP_END
};
static const struct LevelUpMove sFroslassLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_OMINOUS_WIND),
- //LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND),
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM),
- //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(14, MOVE_ICY_WIND),
LEVEL_UP_MOVE(19, MOVE_ASTONISH),
- //LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(23, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(28, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(32, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(37, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(41, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(37, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(41, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(42, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(48, MOVE_BLIZZARD),
LEVEL_UP_MOVE(54, MOVE_HAIL),
@@ -9720,7 +9721,7 @@ static const struct LevelUpMove sFroslassLevelUpLearnset[] = {
};
static const struct LevelUpMove sRotomLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE( 1, MOVE_DISCHARGE),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -9730,18 +9731,18 @@ static const struct LevelUpMove sRotomLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_UPROAR),
LEVEL_UP_MOVE(15, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(22, MOVE_SHOCK_WAVE),
- //LEVEL_UP_MOVE(29, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(29, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(36, MOVE_SUBSTITUTE),
- //LEVEL_UP_MOVE(43, MOVE_ELECTRO_BALL),
- //LEVEL_UP_MOVE(50, MOVE_HEX),
+ LEVEL_UP_MOVE(43, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(50, MOVE_HEX),
LEVEL_UP_MOVE(57, MOVE_CHARGE),
- //LEVEL_UP_MOVE(64, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(64, MOVE_DISCHARGE),
LEVEL_UP_END
};
static const struct LevelUpMove sUxieLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
- //LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE( 1, MOVE_FLAIL),
LEVEL_UP_MOVE( 1, MOVE_REST),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -9753,33 +9754,33 @@ static const struct LevelUpMove sUxieLevelUpLearnset[] = {
LEVEL_UP_MOVE(46, MOVE_AMNESIA),
LEVEL_UP_MOVE(50, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(61, MOVE_FLAIL),
- //LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(76, MOVE_MEMENTO),
LEVEL_UP_END
};
static const struct LevelUpMove sMespritLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
- //LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
LEVEL_UP_MOVE( 1, MOVE_REST),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 6, MOVE_IMPRISON),
LEVEL_UP_MOVE(16, MOVE_PROTECT),
LEVEL_UP_MOVE(21, MOVE_SWIFT),
- //LEVEL_UP_MOVE(31, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(31, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(46, MOVE_CHARM),
LEVEL_UP_MOVE(50, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE(61, MOVE_COPYCAT),
- //LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(76, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(61, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(76, MOVE_HEALING_WISH),
LEVEL_UP_END
};
static const struct LevelUpMove sAzelfLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
LEVEL_UP_MOVE( 1, MOVE_REST),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 6, MOVE_IMPRISON),
@@ -9787,10 +9788,10 @@ static const struct LevelUpMove sAzelfLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_SWIFT),
LEVEL_UP_MOVE(31, MOVE_UPROAR),
LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(50, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE(61, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(61, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(66, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(76, MOVE_EXPLOSION),
LEVEL_UP_END
};
@@ -9801,14 +9802,14 @@ static const struct LevelUpMove sDialgaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(10, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(15, MOVE_SLASH),
- //LEVEL_UP_MOVE(19, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE(24, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE(19, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(24, MOVE_METAL_BURST),
LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(33, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE(33, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE),
LEVEL_UP_MOVE(42, MOVE_IRON_TAIL),
- //LEVEL_UP_MOVE(46, MOVE_ROAR_OF_TIME),
- //LEVEL_UP_MOVE(50, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(46, MOVE_ROAR_OF_TIME),
+ LEVEL_UP_MOVE(50, MOVE_FLASH_CANNON),
LEVEL_UP_END
};
@@ -9818,42 +9819,42 @@ static const struct LevelUpMove sPalkiaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(10, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(15, MOVE_SLASH),
- //LEVEL_UP_MOVE(19, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE(24, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(19, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(24, MOVE_AQUA_RING),
LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(33, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE),
- //LEVEL_UP_MOVE(42, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(46, MOVE_SPACIAL_REND),
+ LEVEL_UP_MOVE(33, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE(42, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(46, MOVE_SPACIAL_REND),
LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
static const struct LevelUpMove sHeatranLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_MAGMA_STORM),
+ LEVEL_UP_MOVE( 1, MOVE_MAGMA_STORM),
LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE),
- //LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
LEVEL_UP_MOVE( 1, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 9, MOVE_LEER),
- //LEVEL_UP_MOVE(17, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(17, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(25, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(33, MOVE_CRUNCH),
LEVEL_UP_MOVE(41, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(49, MOVE_LAVA_PLUME),
+ LEVEL_UP_MOVE(49, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(57, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(65, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(73, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(65, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(73, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(81, MOVE_HEAT_WAVE),
- //LEVEL_UP_MOVE(88, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(96, MOVE_MAGMA_STORM),
+ LEVEL_UP_MOVE(88, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(96, MOVE_MAGMA_STORM),
LEVEL_UP_END
};
static const struct LevelUpMove sRegigigasLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE( 1, MOVE_CRUSH_GRIP),
+ LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE( 1, MOVE_CRUSH_GRIP),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
@@ -9862,36 +9863,36 @@ static const struct LevelUpMove sRegigigasLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_FORESIGHT),
LEVEL_UP_MOVE(25, MOVE_REVENGE),
- //LEVEL_UP_MOVE(40, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE(50, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(65, MOVE_PAYBACK),
- //LEVEL_UP_MOVE(75, MOVE_CRUSH_GRIP),
- //LEVEL_UP_MOVE(90, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE(100, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(40, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(50, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(65, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(75, MOVE_CRUSH_GRIP),
+ LEVEL_UP_MOVE(90, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(100, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
static const struct LevelUpMove sGiratinaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE( 6, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE( 6, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(10, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(15, MOVE_SLASH),
- //LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(24, MOVE_DESTINY_BOND),
LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(33, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE),
- //LEVEL_UP_MOVE(42, MOVE_SHADOW_CLAW),
- //LEVEL_UP_MOVE(46, MOVE_SHADOW_FORCE),
- //LEVEL_UP_MOVE(50, MOVE_HEX),
+ LEVEL_UP_MOVE(33, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(37, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE(42, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE(46, MOVE_SHADOW_FORCE),
+ LEVEL_UP_MOVE(50, MOVE_HEX),
LEVEL_UP_END
};
static const struct LevelUpMove sCresseliaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_LUNAR_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_SHIFT),
- //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE( 1, MOVE_LUNAR_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
@@ -9901,11 +9902,11 @@ static const struct LevelUpMove sCresseliaLevelUpLearnset[] = {
LEVEL_UP_MOVE(38, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(47, MOVE_SLASH),
LEVEL_UP_MOVE(57, MOVE_MOONLIGHT),
- //LEVEL_UP_MOVE(66, MOVE_PSYCHO_CUT),
- //LEVEL_UP_MOVE(75, MOVE_PSYCHO_SHIFT),
- //LEVEL_UP_MOVE(84, MOVE_LUNAR_DANCE),
+ LEVEL_UP_MOVE(66, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(75, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(84, MOVE_LUNAR_DANCE),
LEVEL_UP_MOVE(93, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(99, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(99, MOVE_MOONBLAST),
LEVEL_UP_END
};
@@ -9918,7 +9919,7 @@ static const struct LevelUpMove sPhioneLevelUpLearnset[] = {
LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR),
LEVEL_UP_MOVE(39, MOVE_WHIRLPOOL),
LEVEL_UP_MOVE(46, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(54, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(54, MOVE_AQUA_RING),
LEVEL_UP_MOVE(61, MOVE_DIVE),
LEVEL_UP_MOVE(69, MOVE_RAIN_DANCE),
LEVEL_UP_END
@@ -9934,15 +9935,15 @@ static const struct LevelUpMove sManaphyLevelUpLearnset[] = {
LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR),
LEVEL_UP_MOVE(39, MOVE_WHIRLPOOL),
LEVEL_UP_MOVE(46, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(54, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(54, MOVE_AQUA_RING),
LEVEL_UP_MOVE(61, MOVE_DIVE),
LEVEL_UP_MOVE(69, MOVE_RAIN_DANCE),
- //LEVEL_UP_MOVE(76, MOVE_HEART_SWAP),
+ LEVEL_UP_MOVE(76, MOVE_HEART_SWAP),
LEVEL_UP_END
};
static const struct LevelUpMove sDarkraiLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(20, MOVE_HYPNOSIS),
@@ -9950,10 +9951,10 @@ static const struct LevelUpMove sDarkraiLevelUpLearnset[] = {
LEVEL_UP_MOVE(38, MOVE_NIGHTMARE),
LEVEL_UP_MOVE(47, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(57, MOVE_HAZE),
- //LEVEL_UP_MOVE(66, MOVE_DARK_VOID),
- //LEVEL_UP_MOVE(75, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(66, MOVE_DARK_VOID),
+ LEVEL_UP_MOVE(75, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(84, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(93, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(93, MOVE_DARK_PULSE),
LEVEL_UP_END
};
@@ -9963,23 +9964,23 @@ static const struct LevelUpMove sShayminLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(28, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(37, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(55, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(55, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(64, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(82, MOVE_SWEET_KISS),
- //LEVEL_UP_MOVE(91, MOVE_HEALING_WISH),
- //LEVEL_UP_MOVE(100, MOVE_SEED_FLARE),
+ LEVEL_UP_MOVE(91, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(100, MOVE_SEED_FLARE),
LEVEL_UP_END
};
static const struct LevelUpMove sArceusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SEISMIC_TOSS),
LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
- //LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE(10, MOVE_GRAVITY),
- //LEVEL_UP_MOVE(20, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(10, MOVE_GRAVITY),
+ LEVEL_UP_MOVE(20, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(30, MOVE_HYPER_VOICE),
LEVEL_UP_MOVE(40, MOVE_EXTREME_SPEED),
LEVEL_UP_MOVE(50, MOVE_REFRESH),
@@ -9987,27 +9988,27 @@ static const struct LevelUpMove sArceusLevelUpLearnset[] = {
LEVEL_UP_MOVE(70, MOVE_RECOVER),
LEVEL_UP_MOVE(80, MOVE_HYPER_BEAM),
LEVEL_UP_MOVE(90, MOVE_PERISH_SONG),
- //LEVEL_UP_MOVE(100, MOVE_JUDGMENT),
+ LEVEL_UP_MOVE(100, MOVE_JUDGMENT),
LEVEL_UP_END
};
static const struct LevelUpMove sVictiniLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SEARING_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_SEARING_SHOT),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
+ LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 9, MOVE_ENDURE),
LEVEL_UP_MOVE(17, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(25, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(25, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(33, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(41, MOVE_FLAME_BURST),
- //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(57, MOVE_INFERNO),
+ LEVEL_UP_MOVE(41, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(57, MOVE_INFERNO),
LEVEL_UP_MOVE(65, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(73, MOVE_FLARE_BLITZ),
- //LEVEL_UP_MOVE(81, MOVE_FINAL_GAMBIT),
- //LEVEL_UP_MOVE(89, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(73, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(81, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(89, MOVE_STORED_POWER),
LEVEL_UP_MOVE(97, MOVE_OVERHEAT),
LEVEL_UP_END
};
@@ -10018,16 +10019,16 @@ static const struct LevelUpMove sSnivyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_VINE_WHIP),
LEVEL_UP_MOVE(10, MOVE_WRAP),
LEVEL_UP_MOVE(13, MOVE_GROWTH),
- //LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO),
LEVEL_UP_MOVE(19, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(22, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(25, MOVE_SLAM),
LEVEL_UP_MOVE(28, MOVE_LEAF_BLADE),
- //LEVEL_UP_MOVE(31, MOVE_COIL),
+ LEVEL_UP_MOVE(31, MOVE_COIL),
LEVEL_UP_MOVE(34, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(37, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(40, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(43, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(37, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(40, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(43, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -10040,16 +10041,16 @@ static const struct LevelUpMove sServineLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_VINE_WHIP),
LEVEL_UP_MOVE(10, MOVE_WRAP),
LEVEL_UP_MOVE(13, MOVE_GROWTH),
- //LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO),
LEVEL_UP_MOVE(20, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(24, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(28, MOVE_SLAM),
LEVEL_UP_MOVE(32, MOVE_LEAF_BLADE),
- //LEVEL_UP_MOVE(36, MOVE_COIL),
+ LEVEL_UP_MOVE(36, MOVE_COIL),
LEVEL_UP_MOVE(40, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(44, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(48, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(52, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(44, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(48, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(52, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -10062,16 +10063,16 @@ static const struct LevelUpMove sSerperiorLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_VINE_WHIP),
LEVEL_UP_MOVE(10, MOVE_WRAP),
LEVEL_UP_MOVE(13, MOVE_GROWTH),
- //LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO),
LEVEL_UP_MOVE(20, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(24, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(28, MOVE_SLAM),
LEVEL_UP_MOVE(32, MOVE_LEAF_BLADE),
- //LEVEL_UP_MOVE(38, MOVE_COIL),
+ LEVEL_UP_MOVE(38, MOVE_COIL),
LEVEL_UP_MOVE(44, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(50, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(56, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(62, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(50, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(56, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(62, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -10081,21 +10082,21 @@ static const struct LevelUpMove sTepigLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_EMBER),
LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL),
- //LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(19, MOVE_SMOG),
LEVEL_UP_MOVE(21, MOVE_ROLLOUT),
LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(27, MOVE_HEAT_CRASH),
- //LEVEL_UP_MOVE(31, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(27, MOVE_HEAT_CRASH),
+ LEVEL_UP_MOVE(31, MOVE_ASSURANCE),
LEVEL_UP_MOVE(33, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(37, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(37, MOVE_HEAD_SMASH),
LEVEL_UP_MOVE(39, MOVE_ROAR),
- //LEVEL_UP_MOVE(43, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(43, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
static const struct LevelUpMove sPigniteLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ARM_THRUST),
+ //LEVEL_UP_MOVE( 0, MOVE_ARM_THRUST),
LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -10105,22 +10106,22 @@ static const struct LevelUpMove sPigniteLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_EMBER),
LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL),
- //LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(20, MOVE_SMOG),
LEVEL_UP_MOVE(23, MOVE_ROLLOUT),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(31, MOVE_HEAT_CRASH),
- //LEVEL_UP_MOVE(36, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(31, MOVE_HEAT_CRASH),
+ LEVEL_UP_MOVE(36, MOVE_ASSURANCE),
LEVEL_UP_MOVE(39, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(44, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(44, MOVE_HEAD_SMASH),
LEVEL_UP_MOVE(47, MOVE_ROAR),
- //LEVEL_UP_MOVE(52, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(52, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
static const struct LevelUpMove sEmboarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -10129,16 +10130,16 @@ static const struct LevelUpMove sEmboarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_EMBER),
LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL),
- //LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(20, MOVE_SMOG),
LEVEL_UP_MOVE(23, MOVE_ROLLOUT),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(31, MOVE_HEAT_CRASH),
- //LEVEL_UP_MOVE(38, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(31, MOVE_HEAT_CRASH),
+ LEVEL_UP_MOVE(38, MOVE_ASSURANCE),
LEVEL_UP_MOVE(43, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(50, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(50, MOVE_HEAD_SMASH),
LEVEL_UP_MOVE(55, MOVE_ROAR),
- //LEVEL_UP_MOVE(62, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(62, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
@@ -10148,14 +10149,14 @@ static const struct LevelUpMove sOshawottLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_WATER_GUN),
LEVEL_UP_MOVE(11, MOVE_WATER_SPORT),
LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(17, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE(17, MOVE_RAZOR_SHELL),
LEVEL_UP_MOVE(19, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(23, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(25, MOVE_REVENGE),
- //LEVEL_UP_MOVE(29, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(29, MOVE_AQUA_JET),
LEVEL_UP_MOVE(31, MOVE_ENCORE),
- //LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(37, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(37, MOVE_RETALIATE),
LEVEL_UP_MOVE(41, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -10170,21 +10171,21 @@ static const struct LevelUpMove sDewottLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_WATER_GUN),
LEVEL_UP_MOVE(11, MOVE_WATER_SPORT),
LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(18, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE(18, MOVE_RAZOR_SHELL),
LEVEL_UP_MOVE(21, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(26, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(29, MOVE_REVENGE),
- //LEVEL_UP_MOVE(34, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(34, MOVE_AQUA_JET),
LEVEL_UP_MOVE(37, MOVE_ENCORE),
- //LEVEL_UP_MOVE(42, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(45, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(42, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(45, MOVE_RETALIATE),
LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(53, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
static const struct LevelUpMove sSamurottLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SLASH),
+ //LEVEL_UP_MOVE( 0, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_MEGAHORN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
@@ -10195,14 +10196,14 @@ static const struct LevelUpMove sSamurottLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_WATER_GUN),
LEVEL_UP_MOVE(11, MOVE_WATER_SPORT),
LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(18, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE(18, MOVE_RAZOR_SHELL),
LEVEL_UP_MOVE(21, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(25, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(29, MOVE_REVENGE),
- //LEVEL_UP_MOVE(34, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(34, MOVE_AQUA_JET),
LEVEL_UP_MOVE(39, MOVE_ENCORE),
- //LEVEL_UP_MOVE(46, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(51, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(46, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(51, MOVE_RETALIATE),
LEVEL_UP_MOVE(58, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(63, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -10218,11 +10219,11 @@ static const struct LevelUpMove sPatratLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_CRUNCH),
LEVEL_UP_MOVE(18, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(21, MOVE_SUPER_FANG),
- //LEVEL_UP_MOVE(23, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(23, MOVE_AFTER_YOU),
LEVEL_UP_MOVE(26, MOVE_FOCUS_ENERGY),
- //LEVEL_UP_MOVE(28, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(28, MOVE_WORK_UP),
LEVEL_UP_MOVE(31, MOVE_HYPER_FANG),
- //LEVEL_UP_MOVE(33, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(33, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(36, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE(38, MOVE_BATON_PASS),
LEVEL_UP_MOVE(41, MOVE_SLAM),
@@ -10230,9 +10231,9 @@ static const struct LevelUpMove sPatratLevelUpLearnset[] = {
};
static const struct LevelUpMove sWatchogLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_CONFUSE_RAY),
+ //LEVEL_UP_MOVE( 0, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -10245,11 +10246,11 @@ static const struct LevelUpMove sWatchogLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_CRUNCH),
LEVEL_UP_MOVE(18, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(22, MOVE_SUPER_FANG),
- //LEVEL_UP_MOVE(25, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(25, MOVE_AFTER_YOU),
LEVEL_UP_MOVE(29, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(32, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(36, MOVE_HYPER_FANG),
- //LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(39, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(43, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE(46, MOVE_BATON_PASS),
LEVEL_UP_MOVE(50, MOVE_SLAM),
@@ -10261,17 +10262,17 @@ static const struct LevelUpMove sLillipupLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 5, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE( 8, MOVE_BITE),
- //LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(12, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(19, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(19, MOVE_WORK_UP),
LEVEL_UP_MOVE(22, MOVE_CRUNCH),
LEVEL_UP_MOVE(26, MOVE_ROAR),
- //LEVEL_UP_MOVE(29, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(29, MOVE_RETALIATE),
LEVEL_UP_MOVE(33, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(36, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(40, MOVE_GIGA_IMPACT),
- //LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(36, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(40, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
@@ -10284,21 +10285,21 @@ static const struct LevelUpMove sHerdierLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_BITE),
LEVEL_UP_MOVE(12, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(20, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(20, MOVE_WORK_UP),
LEVEL_UP_MOVE(24, MOVE_CRUNCH),
LEVEL_UP_MOVE(29, MOVE_ROAR),
- //LEVEL_UP_MOVE(33, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(33, MOVE_RETALIATE),
LEVEL_UP_MOVE(38, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(42, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(47, MOVE_GIGA_IMPACT),
- //LEVEL_UP_MOVE(52, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(42, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(47, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(52, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
static const struct LevelUpMove sStoutlandLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH),
@@ -10307,14 +10308,14 @@ static const struct LevelUpMove sStoutlandLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_BITE),
LEVEL_UP_MOVE(12, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(20, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(20, MOVE_WORK_UP),
LEVEL_UP_MOVE(24, MOVE_CRUNCH),
LEVEL_UP_MOVE(29, MOVE_ROAR),
- //LEVEL_UP_MOVE(36, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(36, MOVE_RETALIATE),
LEVEL_UP_MOVE(42, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(51, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(59, MOVE_GIGA_IMPACT),
- //LEVEL_UP_MOVE(63, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(51, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(59, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(63, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
@@ -10327,15 +10328,15 @@ static const struct LevelUpMove sPurrloinLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_PURSUIT),
LEVEL_UP_MOVE(19, MOVE_TORMENT),
LEVEL_UP_MOVE(21, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE(24, MOVE_HONE_CLAWS),
- //LEVEL_UP_MOVE(28, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(24, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(28, MOVE_ASSURANCE),
LEVEL_UP_MOVE(30, MOVE_SLASH),
- //LEVEL_UP_MOVE(33, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(37, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(33, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(37, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(39, MOVE_SNATCH),
- //LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
@@ -10351,34 +10352,34 @@ static const struct LevelUpMove sLiepardLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_PURSUIT),
LEVEL_UP_MOVE(19, MOVE_TORMENT),
LEVEL_UP_MOVE(22, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE(26, MOVE_HONE_CLAWS),
- //LEVEL_UP_MOVE(31, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(26, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(31, MOVE_ASSURANCE),
LEVEL_UP_MOVE(34, MOVE_SLASH),
LEVEL_UP_MOVE(38, MOVE_TAUNT),
- //LEVEL_UP_MOVE(43, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(43, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(47, MOVE_SNATCH),
- //LEVEL_UP_MOVE(50, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(55, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(58, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(50, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(55, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(58, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
static const struct LevelUpMove sPansageLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 4, MOVE_LEER),
LEVEL_UP_MOVE( 7, MOVE_LICK),
LEVEL_UP_MOVE(10, MOVE_VINE_WHIP),
LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(16, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(19, MOVE_BITE),
- //LEVEL_UP_MOVE(22, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(22, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(25, MOVE_TORMENT),
- //LEVEL_UP_MOVE(28, MOVE_FLING),
- //LEVEL_UP_MOVE(31, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(34, MOVE_GRASS_KNOT),
+ LEVEL_UP_MOVE(28, MOVE_FLING),
+ LEVEL_UP_MOVE(31, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(34, MOVE_GRASS_KNOT),
LEVEL_UP_MOVE(37, MOVE_RECYCLE),
- //LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(43, MOVE_CRUNCH),
LEVEL_UP_END
};
@@ -10387,26 +10388,26 @@ static const struct LevelUpMove sSimisageLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
LEVEL_UP_END
};
static const struct LevelUpMove sPansearLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 4, MOVE_LEER),
LEVEL_UP_MOVE( 7, MOVE_LICK),
- //LEVEL_UP_MOVE(10, MOVE_INCINERATE),
+ LEVEL_UP_MOVE(10, MOVE_INCINERATE),
LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(16, MOVE_YAWN),
LEVEL_UP_MOVE(19, MOVE_BITE),
- //LEVEL_UP_MOVE(22, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(22, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(25, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(28, MOVE_FLING),
- //LEVEL_UP_MOVE(31, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(28, MOVE_FLING),
+ LEVEL_UP_MOVE(31, MOVE_ACROBATICS),
LEVEL_UP_MOVE(34, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(37, MOVE_RECYCLE),
- //LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(43, MOVE_CRUNCH),
LEVEL_UP_END
};
@@ -10415,26 +10416,26 @@ static const struct LevelUpMove sSimisearLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE( 1, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_FLAME_BURST),
LEVEL_UP_END
};
static const struct LevelUpMove sPanpourLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 4, MOVE_LEER),
LEVEL_UP_MOVE( 7, MOVE_LICK),
LEVEL_UP_MOVE(10, MOVE_WATER_GUN),
LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(16, MOVE_WATER_SPORT),
LEVEL_UP_MOVE(19, MOVE_BITE),
- //LEVEL_UP_MOVE(22, MOVE_SCALD),
+ LEVEL_UP_MOVE(22, MOVE_SCALD),
LEVEL_UP_MOVE(25, MOVE_TAUNT),
- //LEVEL_UP_MOVE(28, MOVE_FLING),
- //LEVEL_UP_MOVE(31, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(34, MOVE_BRINE),
+ LEVEL_UP_MOVE(28, MOVE_FLING),
+ LEVEL_UP_MOVE(31, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(34, MOVE_BRINE),
LEVEL_UP_MOVE(37, MOVE_RECYCLE),
- //LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(40, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(43, MOVE_CRUNCH),
LEVEL_UP_END
};
@@ -10443,35 +10444,35 @@ static const struct LevelUpMove sSimipourLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE( 1, MOVE_SCALD),
+ LEVEL_UP_MOVE( 1, MOVE_SCALD),
LEVEL_UP_END
};
static const struct LevelUpMove sMunnaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PSYWAVE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
- //LEVEL_UP_MOVE( 5, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE( 5, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE( 7, MOVE_YAWN),
LEVEL_UP_MOVE(11, MOVE_PSYBEAM),
LEVEL_UP_MOVE(13, MOVE_IMPRISON),
LEVEL_UP_MOVE(17, MOVE_MOONLIGHT),
LEVEL_UP_MOVE(19, MOVE_HYPNOSIS),
- //LEVEL_UP_MOVE(23, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(25, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(23, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(25, MOVE_SYNCHRONOISE),
LEVEL_UP_MOVE(29, MOVE_NIGHTMARE),
LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(35, MOVE_CALM_MIND),
LEVEL_UP_MOVE(37, MOVE_PSYCHIC),
LEVEL_UP_MOVE(41, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(43, MOVE_TELEKINESIS),
- //LEVEL_UP_MOVE(47, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(43, MOVE_TELEKINESIS),
+ LEVEL_UP_MOVE(47, MOVE_STORED_POWER),
LEVEL_UP_END
};
static const struct LevelUpMove sMusharnaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
- //LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE( 1, MOVE_PSYBEAM),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_END
@@ -10483,15 +10484,15 @@ static const struct LevelUpMove sPidoveLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_LEER),
LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(15, MOVE_AIR_CUTTER),
- //LEVEL_UP_MOVE(18, MOVE_ROOST),
+ LEVEL_UP_MOVE(18, MOVE_ROOST),
LEVEL_UP_MOVE(22, MOVE_DETECT),
LEVEL_UP_MOVE(25, MOVE_TAUNT),
- //LEVEL_UP_MOVE(29, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(29, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(32, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE(36, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(39, MOVE_SWAGGER),
LEVEL_UP_MOVE(43, MOVE_FACADE),
- //LEVEL_UP_MOVE(46, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(46, MOVE_TAILWIND),
LEVEL_UP_MOVE(50, MOVE_SKY_ATTACK),
LEVEL_UP_END
};
@@ -10505,15 +10506,15 @@ static const struct LevelUpMove sTranquillLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_LEER),
LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(15, MOVE_AIR_CUTTER),
- //LEVEL_UP_MOVE(18, MOVE_ROOST),
+ LEVEL_UP_MOVE(18, MOVE_ROOST),
LEVEL_UP_MOVE(23, MOVE_DETECT),
LEVEL_UP_MOVE(27, MOVE_TAUNT),
- //LEVEL_UP_MOVE(32, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(32, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(36, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE(41, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(45, MOVE_SWAGGER),
LEVEL_UP_MOVE(50, MOVE_FACADE),
- //LEVEL_UP_MOVE(54, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(54, MOVE_TAILWIND),
LEVEL_UP_MOVE(59, MOVE_SKY_ATTACK),
LEVEL_UP_END
};
@@ -10527,15 +10528,15 @@ static const struct LevelUpMove sUnfezantLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_LEER),
LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(15, MOVE_AIR_CUTTER),
- //LEVEL_UP_MOVE(18, MOVE_ROOST),
+ LEVEL_UP_MOVE(18, MOVE_ROOST),
LEVEL_UP_MOVE(23, MOVE_DETECT),
LEVEL_UP_MOVE(27, MOVE_TAUNT),
- //LEVEL_UP_MOVE(33, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(33, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(38, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE(44, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(49, MOVE_SWAGGER),
LEVEL_UP_MOVE(55, MOVE_FACADE),
- //LEVEL_UP_MOVE(60, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(60, MOVE_TAILWIND),
LEVEL_UP_MOVE(66, MOVE_SKY_ATTACK),
LEVEL_UP_END
};
@@ -10546,19 +10547,19 @@ static const struct LevelUpMove sBlitzleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_CHARGE),
LEVEL_UP_MOVE(11, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(15, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(22, MOVE_PURSUIT),
LEVEL_UP_MOVE(25, MOVE_SPARK),
LEVEL_UP_MOVE(29, MOVE_STOMP),
- //LEVEL_UP_MOVE(32, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(32, MOVE_DISCHARGE),
LEVEL_UP_MOVE(36, MOVE_AGILITY),
- //LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE),
LEVEL_UP_MOVE(43, MOVE_THRASH),
LEVEL_UP_END
};
static const struct LevelUpMove sZebstrikaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE),
+ LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
@@ -10567,15 +10568,15 @@ static const struct LevelUpMove sZebstrikaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_CHARGE),
LEVEL_UP_MOVE(11, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(15, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(22, MOVE_PURSUIT),
LEVEL_UP_MOVE(25, MOVE_SPARK),
LEVEL_UP_MOVE(31, MOVE_STOMP),
- //LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
LEVEL_UP_MOVE(42, MOVE_AGILITY),
- //LEVEL_UP_MOVE(47, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(47, MOVE_WILD_CHARGE),
LEVEL_UP_MOVE(53, MOVE_THRASH),
- //LEVEL_UP_MOVE(58, MOVE_ION_DELUGE),
+ LEVEL_UP_MOVE(58, MOVE_ION_DELUGE),
LEVEL_UP_END
};
@@ -10587,18 +10588,18 @@ static const struct LevelUpMove sRoggenrolaLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE(17, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(20, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(27, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(33, MOVE_SANDSTORM),
- //LEVEL_UP_MOVE(36, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(36, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(40, MOVE_EXPLOSION),
LEVEL_UP_END
};
static const struct LevelUpMove sBoldoreLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
@@ -10609,17 +10610,17 @@ static const struct LevelUpMove sBoldoreLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE(17, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(20, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(30, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(36, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(36, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(42, MOVE_SANDSTORM),
- //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(55, MOVE_EXPLOSION),
LEVEL_UP_END
};
static const struct LevelUpMove sGigalithLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
@@ -10630,11 +10631,11 @@ static const struct LevelUpMove sGigalithLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE(17, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(20, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(23, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(30, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(36, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(36, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(42, MOVE_SANDSTORM),
- //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(55, MOVE_EXPLOSION),
LEVEL_UP_END
};
@@ -10643,14 +10644,14 @@ static const struct LevelUpMove sWoobatLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 4, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE( 8, MOVE_GUST),
- //LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(15, MOVE_HEART_STAMP),
+ LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(15, MOVE_HEART_STAMP),
LEVEL_UP_MOVE(19, MOVE_IMPRISON),
LEVEL_UP_MOVE(21, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE(25, MOVE_ATTRACT),
LEVEL_UP_MOVE(29, MOVE_AMNESIA),
LEVEL_UP_MOVE(29, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(32, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(32, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(41, MOVE_PSYCHIC),
LEVEL_UP_MOVE(47, MOVE_ENDEAVOR),
@@ -10661,17 +10662,17 @@ static const struct LevelUpMove sSwoobatLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE( 1, MOVE_GUST),
- //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
LEVEL_UP_MOVE( 4, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE( 8, MOVE_GUST),
- //LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(15, MOVE_HEART_STAMP),
+ LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(15, MOVE_HEART_STAMP),
LEVEL_UP_MOVE(19, MOVE_IMPRISON),
LEVEL_UP_MOVE(21, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE(25, MOVE_ATTRACT),
LEVEL_UP_MOVE(29, MOVE_AMNESIA),
LEVEL_UP_MOVE(29, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(32, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(32, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(41, MOVE_PSYCHIC),
LEVEL_UP_MOVE(47, MOVE_ENDEAVOR),
@@ -10686,21 +10687,21 @@ static const struct LevelUpMove sDrilburLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(15, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(19, MOVE_DIG),
- //LEVEL_UP_MOVE(22, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(22, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(26, MOVE_SLASH),
LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(33, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(40, MOVE_SANDSTORM),
- //LEVEL_UP_MOVE(43, MOVE_DRILL_RUN),
+ LEVEL_UP_MOVE(43, MOVE_DRILL_RUN),
LEVEL_UP_MOVE(47, MOVE_FISSURE),
LEVEL_UP_END
};
static const struct LevelUpMove sExcadrillLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_HORN_DRILL),
+ //LEVEL_UP_MOVE( 0, MOVE_HORN_DRILL),
LEVEL_UP_MOVE( 1, MOVE_HORN_DRILL),
- //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
@@ -10710,39 +10711,39 @@ static const struct LevelUpMove sExcadrillLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(15, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(19, MOVE_DIG),
- //LEVEL_UP_MOVE(22, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(22, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(26, MOVE_SLASH),
LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(36, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(42, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(49, MOVE_SANDSTORM),
- //LEVEL_UP_MOVE(55, MOVE_DRILL_RUN),
+ LEVEL_UP_MOVE(55, MOVE_DRILL_RUN),
LEVEL_UP_MOVE(62, MOVE_FISSURE),
LEVEL_UP_END
};
static const struct LevelUpMove sAudinoLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE( 5, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 5, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE( 9, MOVE_REFRESH),
- //LEVEL_UP_MOVE(13, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(13, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(21, MOVE_ATTRACT),
LEVEL_UP_MOVE(25, MOVE_SECRET_POWER),
- //LEVEL_UP_MOVE(29, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(29, MOVE_ENTRAINMENT),
LEVEL_UP_MOVE(33, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(37, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(41, MOVE_AFTER_YOU),
- //LEVEL_UP_MOVE(45, MOVE_SIMPLE_BEAM),
+ LEVEL_UP_MOVE(37, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(41, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(45, MOVE_SIMPLE_BEAM),
LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(53, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(57, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(57, MOVE_LAST_RESORT),
LEVEL_UP_END
};
@@ -10753,14 +10754,14 @@ static const struct LevelUpMove sTimburrLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_BIDE),
LEVEL_UP_MOVE(12, MOVE_LOW_KICK),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(28, MOVE_BULK_UP),
LEVEL_UP_MOVE(31, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(34, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(37, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(40, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE(43, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(40, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(43, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(46, MOVE_FOCUS_PUNCH),
LEVEL_UP_MOVE(49, MOVE_SUPERPOWER),
LEVEL_UP_END
@@ -10775,14 +10776,14 @@ static const struct LevelUpMove sGurdurrLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_BIDE),
LEVEL_UP_MOVE(12, MOVE_LOW_KICK),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(29, MOVE_BULK_UP),
LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(37, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(41, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(45, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(45, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(53, MOVE_FOCUS_PUNCH),
LEVEL_UP_MOVE(57, MOVE_SUPERPOWER),
LEVEL_UP_END
@@ -10797,14 +10798,14 @@ static const struct LevelUpMove sConkeldurrLevelUpLearnset[] = {
LEVEL_UP_MOVE( 8, MOVE_BIDE),
LEVEL_UP_MOVE(12, MOVE_LOW_KICK),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(20, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(24, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(29, MOVE_BULK_UP),
LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(37, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(41, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(45, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(45, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(53, MOVE_FOCUS_PUNCH),
LEVEL_UP_MOVE(57, MOVE_SUPERPOWER),
LEVEL_UP_END
@@ -10814,15 +10815,15 @@ static const struct LevelUpMove sTympoleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC),
- //LEVEL_UP_MOVE( 9, MOVE_ROUND),
+ LEVEL_UP_MOVE( 9, MOVE_ROUND),
LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(16, MOVE_MUD_SHOT),
- //LEVEL_UP_MOVE(20, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(20, MOVE_AQUA_RING),
LEVEL_UP_MOVE(23, MOVE_UPROAR),
LEVEL_UP_MOVE(27, MOVE_MUDDY_WATER),
LEVEL_UP_MOVE(31, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(34, MOVE_FLAIL),
- //LEVEL_UP_MOVE(38, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(38, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(45, MOVE_HYPER_VOICE),
LEVEL_UP_END
@@ -10832,47 +10833,47 @@ static const struct LevelUpMove sPalpitoadLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
- //LEVEL_UP_MOVE( 1, MOVE_ROUND),
+ LEVEL_UP_MOVE( 1, MOVE_ROUND),
LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC),
- //LEVEL_UP_MOVE( 9, MOVE_ROUND),
+ LEVEL_UP_MOVE( 9, MOVE_ROUND),
LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(16, MOVE_MUD_SHOT),
- //LEVEL_UP_MOVE(20, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(20, MOVE_AQUA_RING),
LEVEL_UP_MOVE(23, MOVE_UPROAR),
LEVEL_UP_MOVE(28, MOVE_MUDDY_WATER),
LEVEL_UP_MOVE(33, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(37, MOVE_FLAIL),
- //LEVEL_UP_MOVE(42, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(42, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(47, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(51, MOVE_HYPER_VOICE),
LEVEL_UP_END
};
static const struct LevelUpMove sSeismitoadLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ACID),
+ //LEVEL_UP_MOVE( 0, MOVE_ACID),
LEVEL_UP_MOVE( 1, MOVE_ACID),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
- //LEVEL_UP_MOVE( 1, MOVE_ROUND),
+ LEVEL_UP_MOVE( 1, MOVE_ROUND),
LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC),
- //LEVEL_UP_MOVE( 9, MOVE_ROUND),
+ LEVEL_UP_MOVE( 9, MOVE_ROUND),
LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(16, MOVE_MUD_SHOT),
- //LEVEL_UP_MOVE(20, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(20, MOVE_AQUA_RING),
LEVEL_UP_MOVE(23, MOVE_UPROAR),
LEVEL_UP_MOVE(28, MOVE_MUDDY_WATER),
LEVEL_UP_MOVE(33, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(39, MOVE_FLAIL),
- //LEVEL_UP_MOVE(44, MOVE_DRAIN_PUNCH),
- //LEVEL_UP_MOVE(49, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(44, MOVE_DRAIN_PUNCH),
+ LEVEL_UP_MOVE(49, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(53, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(59, MOVE_HYPER_VOICE),
LEVEL_UP_END
};
static const struct LevelUpMove sThrohLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_MAT_BLOCK),
+ LEVEL_UP_MOVE( 1, MOVE_MAT_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_BIND),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
@@ -10880,12 +10881,12 @@ static const struct LevelUpMove sThrohLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_SEISMIC_TOSS),
LEVEL_UP_MOVE( 9, MOVE_VITAL_THROW),
LEVEL_UP_MOVE(13, MOVE_REVENGE),
- //LEVEL_UP_MOVE(17, MOVE_STORM_THROW),
+ LEVEL_UP_MOVE(17, MOVE_STORM_THROW),
LEVEL_UP_MOVE(21, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(25, MOVE_BULK_UP),
- //LEVEL_UP_MOVE(29, MOVE_CIRCLE_THROW),
+ LEVEL_UP_MOVE(29, MOVE_CIRCLE_THROW),
LEVEL_UP_MOVE(33, MOVE_ENDURE),
- //LEVEL_UP_MOVE(37, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(37, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(41, MOVE_SUPERPOWER),
LEVEL_UP_MOVE(45, MOVE_REVERSAL),
LEVEL_UP_END
@@ -10897,15 +10898,15 @@ static const struct LevelUpMove sSawkLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_BIDE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 5, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE( 9, MOVE_LOW_SWEEP),
+ LEVEL_UP_MOVE( 9, MOVE_LOW_SWEEP),
LEVEL_UP_MOVE(13, MOVE_COUNTER),
LEVEL_UP_MOVE(17, MOVE_KARATE_CHOP),
LEVEL_UP_MOVE(21, MOVE_BRICK_BREAK),
LEVEL_UP_MOVE(25, MOVE_BULK_UP),
- //LEVEL_UP_MOVE(29, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(29, MOVE_RETALIATE),
LEVEL_UP_MOVE(33, MOVE_ENDURE),
- //LEVEL_UP_MOVE(37, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(41, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(37, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(41, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(45, MOVE_REVERSAL),
LEVEL_UP_END
};
@@ -10913,45 +10914,45 @@ static const struct LevelUpMove sSawkLevelUpLearnset[] = {
static const struct LevelUpMove sSewaddleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
- //LEVEL_UP_MOVE( 8, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 8, MOVE_BUG_BITE),
LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(29, MOVE_ENDURE),
- //LEVEL_UP_MOVE(31, MOVE_STICKY_WEB),
- //LEVEL_UP_MOVE(36, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(31, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE(36, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(43, MOVE_FLAIL),
LEVEL_UP_END
};
static const struct LevelUpMove sSwadloonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_PROTECT),
+ //LEVEL_UP_MOVE( 0, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_GRASS_WHISTLE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
LEVEL_UP_END
};
static const struct LevelUpMove sLeavannyLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SLASH),
+ //LEVEL_UP_MOVE( 0, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE( 8, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 8, MOVE_BUG_BITE),
LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG),
- //LEVEL_UP_MOVE(29, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(29, MOVE_FELL_STINGER),
LEVEL_UP_MOVE(32, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(36, MOVE_LEAF_BLADE),
- //LEVEL_UP_MOVE(39, MOVE_X_SCISSOR),
- //LEVEL_UP_MOVE(43, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(39, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(43, MOVE_ENTRAINMENT),
LEVEL_UP_MOVE(46, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(50, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(50, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -10963,19 +10964,19 @@ static const struct LevelUpMove sVenipedeLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_PURSUIT),
LEVEL_UP_MOVE(15, MOVE_PROTECT),
LEVEL_UP_MOVE(19, MOVE_POISON_TAIL),
- //LEVEL_UP_MOVE(22, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(26, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(22, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(26, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(29, MOVE_AGILITY),
- //LEVEL_UP_MOVE(33, MOVE_STEAMROLLER),
+ LEVEL_UP_MOVE(33, MOVE_STEAMROLLER),
LEVEL_UP_MOVE(36, MOVE_TOXIC),
- //LEVEL_UP_MOVE(38, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(40, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(38, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(40, MOVE_ROCK_CLIMB),
LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sWhirlipedeLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_IRON_DEFENSE),
+ //LEVEL_UP_MOVE( 0, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
@@ -10986,19 +10987,19 @@ static const struct LevelUpMove sWhirlipedeLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_PURSUIT),
LEVEL_UP_MOVE(15, MOVE_PROTECT),
LEVEL_UP_MOVE(19, MOVE_POISON_TAIL),
- //LEVEL_UP_MOVE(23, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(28, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(23, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(28, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(32, MOVE_AGILITY),
- //LEVEL_UP_MOVE(37, MOVE_STEAMROLLER),
+ LEVEL_UP_MOVE(37, MOVE_STEAMROLLER),
LEVEL_UP_MOVE(41, MOVE_TOXIC),
- //LEVEL_UP_MOVE(43, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(46, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(43, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(46, MOVE_ROCK_CLIMB),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sScolipedeLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BATON_PASS),
+ //LEVEL_UP_MOVE( 0, MOVE_BATON_PASS),
LEVEL_UP_MOVE( 1, MOVE_BATON_PASS),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE( 1, MOVE_MEGAHORN),
@@ -11011,13 +11012,13 @@ static const struct LevelUpMove sScolipedeLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_PURSUIT),
LEVEL_UP_MOVE(15, MOVE_PROTECT),
LEVEL_UP_MOVE(19, MOVE_POISON_TAIL),
- //LEVEL_UP_MOVE(23, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(28, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(23, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(28, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(33, MOVE_AGILITY),
- //LEVEL_UP_MOVE(39, MOVE_STEAMROLLER),
+ LEVEL_UP_MOVE(39, MOVE_STEAMROLLER),
LEVEL_UP_MOVE(44, MOVE_TOXIC),
- //LEVEL_UP_MOVE(47, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(50, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(47, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(50, MOVE_ROCK_CLIMB),
LEVEL_UP_MOVE(55, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(65, MOVE_MEGAHORN),
LEVEL_UP_END
@@ -11025,7 +11026,7 @@ static const struct LevelUpMove sScolipedeLevelUpLearnset[] = {
static const struct LevelUpMove sCottoneeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 4, MOVE_GROWTH),
LEVEL_UP_MOVE( 8, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(10, MOVE_STUN_SPORE),
@@ -11036,8 +11037,8 @@ static const struct LevelUpMove sCottoneeLevelUpLearnset[] = {
LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(28, MOVE_CHARM),
LEVEL_UP_MOVE(31, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(35, MOVE_ENERGY_BALL),
- //LEVEL_UP_MOVE(37, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(35, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(37, MOVE_COTTON_GUARD),
LEVEL_UP_MOVE(40, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE(44, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(46, MOVE_SOLAR_BEAM),
@@ -11050,9 +11051,9 @@ static const struct LevelUpMove sWhimsicottLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE(10, MOVE_GUST),
- //LEVEL_UP_MOVE(28, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(46, MOVE_HURRICANE),
- //LEVEL_UP_MOVE(50, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(28, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(46, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(50, MOVE_MOONBLAST),
LEVEL_UP_END
};
@@ -11068,11 +11069,11 @@ static const struct LevelUpMove sPetililLevelUpLearnset[] = {
LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(28, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(31, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(35, MOVE_ENERGY_BALL),
- //LEVEL_UP_MOVE(37, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(35, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(37, MOVE_ENTRAINMENT),
LEVEL_UP_MOVE(40, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(44, MOVE_AFTER_YOU),
- //LEVEL_UP_MOVE(46, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(44, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(46, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -11082,9 +11083,9 @@ static const struct LevelUpMove sLilligantLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(10, MOVE_TEETER_DANCE),
- //LEVEL_UP_MOVE(28, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(28, MOVE_QUIVER_DANCE),
LEVEL_UP_MOVE(46, MOVE_PETAL_DANCE),
- //LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(50, MOVE_PETAL_BLIZZARD),
LEVEL_UP_END
};
@@ -11095,18 +11096,18 @@ static const struct LevelUpMove sBasculinLevelUpLearnset[] = {
LEVEL_UP_MOVE( 3, MOVE_UPROAR),
LEVEL_UP_MOVE( 5, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 7, MOVE_BITE),
- //LEVEL_UP_MOVE( 9, MOVE_AQUA_JET),
- //LEVEL_UP_MOVE(11, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE( 9, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(11, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(14, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(17, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(20, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(23, MOVE_SOAK),
+ LEVEL_UP_MOVE(20, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(23, MOVE_SOAK),
LEVEL_UP_MOVE(26, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(30, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(34, MOVE_FLAIL),
- //LEVEL_UP_MOVE(38, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(38, MOVE_FINAL_GAMBIT),
LEVEL_UP_MOVE(42, MOVE_THRASH),
- //LEVEL_UP_MOVE(46, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(46, MOVE_HEAD_SMASH),
LEVEL_UP_END
};
@@ -11117,14 +11118,14 @@ static const struct LevelUpMove sSandileLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(10, MOVE_TORMENT),
LEVEL_UP_MOVE(13, MOVE_SAND_TOMB),
- //LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
LEVEL_UP_MOVE(19, MOVE_MUD_SLAP),
- //LEVEL_UP_MOVE(22, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(22, MOVE_EMBARGO),
LEVEL_UP_MOVE(25, MOVE_SWAGGER),
LEVEL_UP_MOVE(28, MOVE_CRUNCH),
LEVEL_UP_MOVE(31, MOVE_DIG),
LEVEL_UP_MOVE(34, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(37, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(37, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(40, MOVE_SANDSTORM),
LEVEL_UP_MOVE(43, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(46, MOVE_THRASH),
@@ -11140,14 +11141,14 @@ static const struct LevelUpMove sKrokorokLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(10, MOVE_TORMENT),
LEVEL_UP_MOVE(13, MOVE_SAND_TOMB),
- //LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
LEVEL_UP_MOVE(19, MOVE_MUD_SLAP),
- //LEVEL_UP_MOVE(22, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(22, MOVE_EMBARGO),
LEVEL_UP_MOVE(25, MOVE_SWAGGER),
LEVEL_UP_MOVE(28, MOVE_CRUNCH),
LEVEL_UP_MOVE(32, MOVE_DIG),
LEVEL_UP_MOVE(36, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(40, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(40, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(44, MOVE_SANDSTORM),
LEVEL_UP_MOVE(48, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(52, MOVE_THRASH),
@@ -11155,7 +11156,7 @@ static const struct LevelUpMove sKrokorokLevelUpLearnset[] = {
};
static const struct LevelUpMove sKrookodileLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_RAGE),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -11164,14 +11165,14 @@ static const struct LevelUpMove sKrookodileLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(10, MOVE_TORMENT),
LEVEL_UP_MOVE(13, MOVE_SAND_TOMB),
- //LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
LEVEL_UP_MOVE(19, MOVE_MUD_SLAP),
- //LEVEL_UP_MOVE(22, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(22, MOVE_EMBARGO),
LEVEL_UP_MOVE(25, MOVE_SWAGGER),
LEVEL_UP_MOVE(28, MOVE_CRUNCH),
LEVEL_UP_MOVE(32, MOVE_DIG),
LEVEL_UP_MOVE(36, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(42, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(42, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(48, MOVE_SANDSTORM),
LEVEL_UP_MOVE(54, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(60, MOVE_OUTRAGE),
@@ -11181,17 +11182,17 @@ static const struct LevelUpMove sKrookodileLevelUpLearnset[] = {
static const struct LevelUpMove sDarumakaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 3, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE( 6, MOVE_INCINERATE),
+ LEVEL_UP_MOVE( 6, MOVE_INCINERATE),
LEVEL_UP_MOVE( 9, MOVE_RAGE),
- //LEVEL_UP_MOVE(11, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(11, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(14, MOVE_HEADBUTT),
LEVEL_UP_MOVE(17, MOVE_UPROAR),
LEVEL_UP_MOVE(19, MOVE_FACADE),
LEVEL_UP_MOVE(22, MOVE_FIRE_PUNCH),
- //LEVEL_UP_MOVE(25, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(25, MOVE_WORK_UP),
LEVEL_UP_MOVE(27, MOVE_THRASH),
LEVEL_UP_MOVE(30, MOVE_BELLY_DRUM),
- //LEVEL_UP_MOVE(33, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(33, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE(35, MOVE_TAUNT),
LEVEL_UP_MOVE(39, MOVE_SUPERPOWER),
LEVEL_UP_MOVE(42, MOVE_OVERHEAT),
@@ -11200,23 +11201,23 @@ static const struct LevelUpMove sDarumakaLevelUpLearnset[] = {
static const struct LevelUpMove sDarmanitanLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
+ LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
LEVEL_UP_MOVE( 1, MOVE_RAGE),
LEVEL_UP_MOVE( 3, MOVE_ROLLOUT),
- //LEVEL_UP_MOVE( 6, MOVE_INCINERATE),
+ LEVEL_UP_MOVE( 6, MOVE_INCINERATE),
LEVEL_UP_MOVE( 9, MOVE_RAGE),
- //LEVEL_UP_MOVE(11, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(11, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(14, MOVE_HEADBUTT),
LEVEL_UP_MOVE(17, MOVE_SWAGGER),
LEVEL_UP_MOVE(19, MOVE_FACADE),
LEVEL_UP_MOVE(22, MOVE_FIRE_PUNCH),
- //LEVEL_UP_MOVE(25, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(25, MOVE_WORK_UP),
LEVEL_UP_MOVE(27, MOVE_THRASH),
LEVEL_UP_MOVE(30, MOVE_BELLY_DRUM),
- //LEVEL_UP_MOVE(33, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(33, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE(39, MOVE_TAUNT),
LEVEL_UP_MOVE(47, MOVE_SUPERPOWER),
LEVEL_UP_MOVE(54, MOVE_OVERHEAT),
@@ -11224,9 +11225,9 @@ static const struct LevelUpMove sDarmanitanLevelUpLearnset[] = {
};
static const struct LevelUpMove sMaractusLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD),
- //LEVEL_UP_MOVE( 1, MOVE_COTTON_GUARD),
- //LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD),
+ LEVEL_UP_MOVE( 1, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 3, MOVE_SWEET_SCENT),
@@ -11237,15 +11238,15 @@ static const struct LevelUpMove sMaractusLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE(22, MOVE_NEEDLE_ARM),
LEVEL_UP_MOVE(26, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(29, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(29, MOVE_ACUPRESSURE),
LEVEL_UP_MOVE(33, MOVE_INGRAIN),
LEVEL_UP_MOVE(38, MOVE_PETAL_DANCE),
- //LEVEL_UP_MOVE(42, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(42, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(45, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(48, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(48, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(50, MOVE_SOLAR_BEAM),
- //LEVEL_UP_MOVE(55, MOVE_COTTON_GUARD),
- //LEVEL_UP_MOVE(57, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(55, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(57, MOVE_AFTER_YOU),
LEVEL_UP_END
};
@@ -11255,21 +11256,21 @@ static const struct LevelUpMove sDwebbleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_WITHDRAW),
LEVEL_UP_MOVE(11, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(13, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(17, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH),
- //LEVEL_UP_MOVE(23, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(17, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(23, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(31, MOVE_SLASH),
- //LEVEL_UP_MOVE(35, MOVE_X_SCISSOR),
- //LEVEL_UP_MOVE(37, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(35, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(37, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(41, MOVE_FLAIL),
- //LEVEL_UP_MOVE(43, MOVE_ROCK_WRECKER),
+ LEVEL_UP_MOVE(43, MOVE_ROCK_WRECKER),
LEVEL_UP_END
};
static const struct LevelUpMove sCrustleLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
@@ -11277,16 +11278,16 @@ static const struct LevelUpMove sCrustleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_WITHDRAW),
LEVEL_UP_MOVE(11, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(13, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(17, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH),
- //LEVEL_UP_MOVE(23, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(17, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(19, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(23, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(31, MOVE_SLASH),
- //LEVEL_UP_MOVE(38, MOVE_X_SCISSOR),
- //LEVEL_UP_MOVE(43, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(38, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(43, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(50, MOVE_FLAIL),
- //LEVEL_UP_MOVE(55, MOVE_ROCK_WRECKER),
+ LEVEL_UP_MOVE(55, MOVE_ROCK_WRECKER),
LEVEL_UP_END
};
@@ -11297,16 +11298,16 @@ static const struct LevelUpMove sScraggyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(12, MOVE_SWAGGER),
LEVEL_UP_MOVE(16, MOVE_LOW_KICK),
- //LEVEL_UP_MOVE(20, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(20, MOVE_PAYBACK),
LEVEL_UP_MOVE(23, MOVE_BRICK_BREAK),
- //LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(31, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_MOVE(34, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(38, MOVE_CRUNCH),
LEVEL_UP_MOVE(42, MOVE_FACADE),
- //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
LEVEL_UP_MOVE(48, MOVE_FOCUS_PUNCH),
- //LEVEL_UP_MOVE(50, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(50, MOVE_HEAD_SMASH),
LEVEL_UP_END
};
@@ -11319,34 +11320,34 @@ static const struct LevelUpMove sScraftyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(12, MOVE_SWAGGER),
LEVEL_UP_MOVE(16, MOVE_LOW_KICK),
- //LEVEL_UP_MOVE(20, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(20, MOVE_PAYBACK),
LEVEL_UP_MOVE(23, MOVE_BRICK_BREAK),
- //LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(27, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(31, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_MOVE(34, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(38, MOVE_CRUNCH),
LEVEL_UP_MOVE(45, MOVE_FACADE),
- //LEVEL_UP_MOVE(51, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(51, MOVE_ROCK_CLIMB),
LEVEL_UP_MOVE(58, MOVE_FOCUS_PUNCH),
- //LEVEL_UP_MOVE(65, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(65, MOVE_HEAD_SMASH),
LEVEL_UP_END
};
static const struct LevelUpMove sSigilyphLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GUST),
- //LEVEL_UP_MOVE( 1, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE( 1, MOVE_MIRACLE_EYE),
LEVEL_UP_MOVE( 4, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 8, MOVE_PSYWAVE),
- //LEVEL_UP_MOVE(11, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(11, MOVE_TAILWIND),
LEVEL_UP_MOVE(14, MOVE_WHIRLWIND),
LEVEL_UP_MOVE(18, MOVE_PSYBEAM),
LEVEL_UP_MOVE(21, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE(24, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(28, MOVE_REFLECT),
- //LEVEL_UP_MOVE(31, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(31, MOVE_SYNCHRONOISE),
LEVEL_UP_MOVE(34, MOVE_MIRROR_MOVE),
- //LEVEL_UP_MOVE(38, MOVE_GRAVITY),
- //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(38, MOVE_GRAVITY),
+ LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(44, MOVE_PSYCHIC),
LEVEL_UP_MOVE(48, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE(50, MOVE_SKY_ATTACK),
@@ -11359,12 +11360,12 @@ static const struct LevelUpMove sYamaskLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_DISABLE),
LEVEL_UP_MOVE( 9, MOVE_HAZE),
LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE),
- //LEVEL_UP_MOVE(17, MOVE_HEX),
+ LEVEL_UP_MOVE(17, MOVE_HEX),
LEVEL_UP_MOVE(21, MOVE_WILL_O_WISP),
- //LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(29, MOVE_CURSE),
- //LEVEL_UP_MOVE(33, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(33, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(33, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(33, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(37, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(41, MOVE_GRUDGE),
LEVEL_UP_MOVE(45, MOVE_MEAN_LOOK),
@@ -11373,7 +11374,7 @@ static const struct LevelUpMove sYamaskLevelUpLearnset[] = {
};
static const struct LevelUpMove sCofagrigusLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE),
+ //LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
@@ -11382,12 +11383,12 @@ static const struct LevelUpMove sCofagrigusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_DISABLE),
LEVEL_UP_MOVE( 9, MOVE_HAZE),
LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE),
- //LEVEL_UP_MOVE(17, MOVE_HEX),
+ LEVEL_UP_MOVE(17, MOVE_HEX),
LEVEL_UP_MOVE(21, MOVE_WILL_O_WISP),
- //LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(25, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(29, MOVE_CURSE),
- //LEVEL_UP_MOVE(33, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(33, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(33, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(33, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(39, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(45, MOVE_GRUDGE),
LEVEL_UP_MOVE(51, MOVE_MEAN_LOOK),
@@ -11402,15 +11403,15 @@ static const struct LevelUpMove sTirtougaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_ROLLOUT),
LEVEL_UP_MOVE( 8, MOVE_BITE),
LEVEL_UP_MOVE(11, MOVE_PROTECT),
- //LEVEL_UP_MOVE(15, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(15, MOVE_AQUA_JET),
LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(21, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(25, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE(28, MOVE_BRINE),
- //LEVEL_UP_MOVE(31, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(25, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(28, MOVE_BRINE),
+ LEVEL_UP_MOVE(31, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(35, MOVE_CURSE),
- //LEVEL_UP_MOVE(38, MOVE_SHELL_SMASH),
- //LEVEL_UP_MOVE(41, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(38, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(41, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(45, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(48, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP),
@@ -11425,15 +11426,15 @@ static const struct LevelUpMove sCarracostaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_ROLLOUT),
LEVEL_UP_MOVE( 8, MOVE_BITE),
LEVEL_UP_MOVE(11, MOVE_PROTECT),
- //LEVEL_UP_MOVE(15, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(15, MOVE_AQUA_JET),
LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(21, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(25, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE(28, MOVE_BRINE),
- //LEVEL_UP_MOVE(31, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(25, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(28, MOVE_BRINE),
+ LEVEL_UP_MOVE(31, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(35, MOVE_CURSE),
- //LEVEL_UP_MOVE(40, MOVE_SHELL_SMASH),
- //LEVEL_UP_MOVE(45, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(40, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(45, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(51, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(56, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(61, MOVE_HYDRO_PUMP),
@@ -11447,15 +11448,15 @@ static const struct LevelUpMove sArchenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 8, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(11, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(15, MOVE_PLUCK),
+ LEVEL_UP_MOVE(15, MOVE_PLUCK),
LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(21, MOVE_AGILITY),
- //LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(28, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(28, MOVE_ACROBATICS),
LEVEL_UP_MOVE(31, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(35, MOVE_CRUNCH),
LEVEL_UP_MOVE(38, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(41, MOVE_U_TURN),
+ LEVEL_UP_MOVE(41, MOVE_U_TURN),
LEVEL_UP_MOVE(45, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(48, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(50, MOVE_THRASH),
@@ -11470,15 +11471,15 @@ static const struct LevelUpMove sArcheopsLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 8, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(11, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(15, MOVE_PLUCK),
+ LEVEL_UP_MOVE(15, MOVE_PLUCK),
LEVEL_UP_MOVE(18, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(21, MOVE_AGILITY),
- //LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(28, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(25, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(28, MOVE_ACROBATICS),
LEVEL_UP_MOVE(31, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(35, MOVE_CRUNCH),
LEVEL_UP_MOVE(40, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(45, MOVE_U_TURN),
+ LEVEL_UP_MOVE(45, MOVE_U_TURN),
LEVEL_UP_MOVE(51, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(56, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(61, MOVE_THRASH),
@@ -11489,19 +11490,19 @@ static const struct LevelUpMove sTrubbishLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 3, MOVE_RECYCLE),
- //LEVEL_UP_MOVE( 7, MOVE_TOXIC_SPIKES),
- //LEVEL_UP_MOVE(12, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE( 7, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(12, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(18, MOVE_SLUDGE),
LEVEL_UP_MOVE(23, MOVE_STOCKPILE),
LEVEL_UP_MOVE(23, MOVE_SWALLOW),
LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(29, MOVE_SLUDGE_BOMB),
- //LEVEL_UP_MOVE(34, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(34, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(36, MOVE_TOXIC),
LEVEL_UP_MOVE(40, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(42, MOVE_BELCH),
- //LEVEL_UP_MOVE(45, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(42, MOVE_BELCH),
+ LEVEL_UP_MOVE(45, MOVE_GUNK_SHOT),
LEVEL_UP_MOVE(47, MOVE_EXPLOSION),
LEVEL_UP_END
};
@@ -11510,21 +11511,21 @@ static const struct LevelUpMove sGarbodorLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
- //LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE( 3, MOVE_RECYCLE),
- //LEVEL_UP_MOVE( 7, MOVE_TOXIC_SPIKES),
- //LEVEL_UP_MOVE(12, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE( 7, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(12, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(18, MOVE_SLUDGE),
LEVEL_UP_MOVE(23, MOVE_STOCKPILE),
LEVEL_UP_MOVE(23, MOVE_SWALLOW),
LEVEL_UP_MOVE(25, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(29, MOVE_SLUDGE_BOMB),
- //LEVEL_UP_MOVE(34, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(34, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(39, MOVE_TOXIC),
LEVEL_UP_MOVE(46, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(49, MOVE_BELCH),
- //LEVEL_UP_MOVE(54, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(49, MOVE_BELCH),
+ LEVEL_UP_MOVE(54, MOVE_GUNK_SHOT),
LEVEL_UP_MOVE(59, MOVE_EXPLOSION),
LEVEL_UP_END
};
@@ -11538,62 +11539,62 @@ static const struct LevelUpMove sZoruaLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(21, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(25, MOVE_TAUNT),
- //LEVEL_UP_MOVE(29, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(29, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(33, MOVE_TORMENT),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
- //LEVEL_UP_MOVE(41, MOVE_EMBARGO),
- //LEVEL_UP_MOVE(45, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE(49, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(41, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(45, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(49, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(53, MOVE_IMPRISON),
- //LEVEL_UP_MOVE(57, MOVE_NIGHT_DAZE),
+ LEVEL_UP_MOVE(57, MOVE_NIGHT_DAZE),
LEVEL_UP_END
};
static const struct LevelUpMove sZoroarkLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_DAZE),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_DAZE),
LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
- //LEVEL_UP_MOVE( 1, MOVE_U_TURN),
+ LEVEL_UP_MOVE( 1, MOVE_U_TURN),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_PURSUIT),
- //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 5, MOVE_PURSUIT),
- //LEVEL_UP_MOVE( 9, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 9, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(17, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(21, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(25, MOVE_TAUNT),
- //LEVEL_UP_MOVE(29, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(29, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(34, MOVE_TORMENT),
LEVEL_UP_MOVE(39, MOVE_AGILITY),
- //LEVEL_UP_MOVE(44, MOVE_EMBARGO),
- //LEVEL_UP_MOVE(49, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE(54, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(44, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(49, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(54, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(59, MOVE_IMPRISON),
- //LEVEL_UP_MOVE(64, MOVE_NIGHT_DAZE),
+ LEVEL_UP_MOVE(64, MOVE_NIGHT_DAZE),
LEVEL_UP_END
};
static const struct LevelUpMove sMinccinoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
- //LEVEL_UP_MOVE( 3, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 3, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE( 7, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 9, MOVE_TICKLE),
LEVEL_UP_MOVE(13, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(15, MOVE_ENCORE),
LEVEL_UP_MOVE(19, MOVE_SWIFT),
LEVEL_UP_MOVE(21, MOVE_SING),
- //LEVEL_UP_MOVE(25, MOVE_TAIL_SLAP),
+ LEVEL_UP_MOVE(25, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(27, MOVE_CHARM),
- //LEVEL_UP_MOVE(31, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(31, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(37, MOVE_SLAM),
- //LEVEL_UP_MOVE(39, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(39, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(43, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(45, MOVE_LAST_RESORT),
- //LEVEL_UP_MOVE(49, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(45, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(49, MOVE_AFTER_YOU),
LEVEL_UP_END
};
@@ -11603,7 +11604,7 @@ static const struct LevelUpMove sCinccinoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_TICKLE),
LEVEL_UP_MOVE( 1, MOVE_SING),
- //LEVEL_UP_MOVE( 1, MOVE_TAIL_SLAP),
+ LEVEL_UP_MOVE( 1, MOVE_TAIL_SLAP),
LEVEL_UP_END
};
@@ -11611,20 +11612,20 @@ static const struct LevelUpMove sGothitaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 3, MOVE_CONFUSION),
LEVEL_UP_MOVE( 7, MOVE_TICKLE),
- //LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE),
LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS),
LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(16, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(19, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(19, MOVE_EMBARGO),
LEVEL_UP_MOVE(24, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(28, MOVE_FLATTER),
LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(33, MOVE_HEAL_BLOCK),
LEVEL_UP_MOVE(37, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(40, MOVE_TELEKINESIS),
+ LEVEL_UP_MOVE(40, MOVE_TELEKINESIS),
LEVEL_UP_MOVE(46, MOVE_CHARM),
- //LEVEL_UP_MOVE(48, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE(48, MOVE_MAGIC_ROOM),
LEVEL_UP_END
};
@@ -11632,22 +11633,22 @@ static const struct LevelUpMove sGothoritaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_TICKLE),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 3, MOVE_CONFUSION),
LEVEL_UP_MOVE( 7, MOVE_TICKLE),
LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS),
LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(16, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(19, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(19, MOVE_EMBARGO),
LEVEL_UP_MOVE(24, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(28, MOVE_FLATTER),
LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(34, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(34, MOVE_HEAL_BLOCK),
LEVEL_UP_MOVE(39, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(43, MOVE_TELEKINESIS),
+ LEVEL_UP_MOVE(43, MOVE_TELEKINESIS),
LEVEL_UP_MOVE(50, MOVE_CHARM),
- //LEVEL_UP_MOVE(53, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE(53, MOVE_MAGIC_ROOM),
LEVEL_UP_END
};
@@ -11655,22 +11656,22 @@ static const struct LevelUpMove sGothitelleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_TICKLE),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 3, MOVE_CONFUSION),
LEVEL_UP_MOVE( 7, MOVE_TICKLE),
LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS),
LEVEL_UP_MOVE(14, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(16, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(19, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(19, MOVE_EMBARGO),
LEVEL_UP_MOVE(24, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(28, MOVE_FLATTER),
LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(34, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(34, MOVE_HEAL_BLOCK),
LEVEL_UP_MOVE(39, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(45, MOVE_TELEKINESIS),
+ LEVEL_UP_MOVE(45, MOVE_TELEKINESIS),
LEVEL_UP_MOVE(54, MOVE_CHARM),
- //LEVEL_UP_MOVE(59, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE(59, MOVE_MAGIC_ROOM),
LEVEL_UP_END
};
@@ -11683,14 +11684,14 @@ static const struct LevelUpMove sSolosisLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(19, MOVE_CHARM),
LEVEL_UP_MOVE(24, MOVE_RECOVER),
- //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(28, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(33, MOVE_PAIN_SPLIT),
LEVEL_UP_MOVE(37, MOVE_PSYCHIC),
LEVEL_UP_MOVE(40, MOVE_SKILL_SWAP),
- //LEVEL_UP_MOVE(46, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(48, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(46, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(48, MOVE_WONDER_ROOM),
LEVEL_UP_END
};
@@ -11706,19 +11707,19 @@ static const struct LevelUpMove sDuosionLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(19, MOVE_CHARM),
LEVEL_UP_MOVE(24, MOVE_RECOVER),
- //LEVEL_UP_MOVE (25, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE (25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(28, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(34, MOVE_PAIN_SPLIT),
LEVEL_UP_MOVE(39, MOVE_PSYCHIC),
LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP),
- //LEVEL_UP_MOVE(50, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(53, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(50, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(53, MOVE_WONDER_ROOM),
LEVEL_UP_END
};
static const struct LevelUpMove sReuniclusLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_DIZZY_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_DIZZY_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_DIZZY_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_PSYWAVE),
LEVEL_UP_MOVE( 1, MOVE_REFLECT),
@@ -11731,55 +11732,55 @@ static const struct LevelUpMove sReuniclusLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(19, MOVE_CHARM),
LEVEL_UP_MOVE(24, MOVE_RECOVER),
- //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(28, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(31, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(34, MOVE_PAIN_SPLIT),
LEVEL_UP_MOVE(39, MOVE_PSYCHIC),
LEVEL_UP_MOVE(45, MOVE_SKILL_SWAP),
- //LEVEL_UP_MOVE(54, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(59, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(54, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(59, MOVE_WONDER_ROOM),
LEVEL_UP_END
};
static const struct LevelUpMove sDucklettLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 3, MOVE_WATER_SPORT),
- //LEVEL_UP_MOVE( 6, MOVE_DEFOG),
+ LEVEL_UP_MOVE( 6, MOVE_DEFOG),
LEVEL_UP_MOVE( 9, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(13, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(15, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(21, MOVE_FEATHER_DANCE),
- //LEVEL_UP_MOVE(24, MOVE_AQUA_RING),
- //LEVEL_UP_MOVE(27, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(30, MOVE_ROOST),
+ LEVEL_UP_MOVE(24, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(27, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(30, MOVE_ROOST),
LEVEL_UP_MOVE(34, MOVE_RAIN_DANCE),
- //LEVEL_UP_MOVE(37, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(41, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE(46, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(37, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(41, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(46, MOVE_HURRICANE),
LEVEL_UP_END
};
static const struct LevelUpMove sSwannaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT),
- //LEVEL_UP_MOVE( 1, MOVE_DEFOG),
+ LEVEL_UP_MOVE( 1, MOVE_DEFOG),
LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
LEVEL_UP_MOVE( 3, MOVE_WATER_SPORT),
- //LEVEL_UP_MOVE( 6, MOVE_DEFOG),
+ LEVEL_UP_MOVE( 6, MOVE_DEFOG),
LEVEL_UP_MOVE( 9, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(13, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(15, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(21, MOVE_FEATHER_DANCE),
- //LEVEL_UP_MOVE(24, MOVE_AQUA_RING),
- //LEVEL_UP_MOVE(27, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(30, MOVE_ROOST),
+ LEVEL_UP_MOVE(24, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(27, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(30, MOVE_ROOST),
LEVEL_UP_MOVE(34, MOVE_RAIN_DANCE),
- //LEVEL_UP_MOVE(40, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(47, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE(55, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(40, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(47, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(55, MOVE_HURRICANE),
LEVEL_UP_END
};
@@ -11790,9 +11791,9 @@ static const struct LevelUpMove sVanilliteLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_UPROAR),
LEVEL_UP_MOVE(13, MOVE_ICY_WIND),
LEVEL_UP_MOVE(16, MOVE_MIST),
- //LEVEL_UP_MOVE(19, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(19, MOVE_AVALANCHE),
LEVEL_UP_MOVE(22, MOVE_TAUNT),
- //LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR),
LEVEL_UP_MOVE(35, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(40, MOVE_HAIL),
@@ -11812,9 +11813,9 @@ static const struct LevelUpMove sVanillishLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_UPROAR),
LEVEL_UP_MOVE(13, MOVE_ICY_WIND),
LEVEL_UP_MOVE(16, MOVE_MIST),
- //LEVEL_UP_MOVE(19, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(19, MOVE_AVALANCHE),
LEVEL_UP_MOVE(22, MOVE_TAUNT),
- //LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR),
LEVEL_UP_MOVE(36, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(42, MOVE_HAIL),
@@ -11826,7 +11827,7 @@ static const struct LevelUpMove sVanillishLevelUpLearnset[] = {
static const struct LevelUpMove sVanilluxeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD),
- //LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL),
LEVEL_UP_MOVE( 1, MOVE_ICICLE_SPEAR),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
@@ -11837,9 +11838,9 @@ static const struct LevelUpMove sVanilluxeLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_UPROAR),
LEVEL_UP_MOVE(13, MOVE_ICY_WIND),
LEVEL_UP_MOVE(16, MOVE_MIST),
- //LEVEL_UP_MOVE(19, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(19, MOVE_AVALANCHE),
LEVEL_UP_MOVE(22, MOVE_TAUNT),
- //LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(31, MOVE_ACID_ARMOR),
LEVEL_UP_MOVE(36, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(42, MOVE_HAIL),
@@ -11860,7 +11861,7 @@ static const struct LevelUpMove sDeerlingLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(24, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(28, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(32, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(32, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(36, MOVE_CHARM),
LEVEL_UP_MOVE(41, MOVE_NATURE_POWER),
LEVEL_UP_MOVE(46, MOVE_DOUBLE_EDGE),
@@ -11870,7 +11871,7 @@ static const struct LevelUpMove sDeerlingLevelUpLearnset[] = {
static const struct LevelUpMove sSawsbuckLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_HORN_LEECH),
- //LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_MEGAHORN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_CAMOUFLAGE),
@@ -11884,7 +11885,7 @@ static const struct LevelUpMove sSawsbuckLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(24, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(28, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(32, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(32, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(36, MOVE_CHARM),
LEVEL_UP_MOVE(44, MOVE_NATURE_POWER),
LEVEL_UP_MOVE(52, MOVE_DOUBLE_EDGE),
@@ -11898,17 +11899,17 @@ static const struct LevelUpMove sEmolgaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE(10, MOVE_CHARGE),
LEVEL_UP_MOVE(13, MOVE_SPARK),
- //LEVEL_UP_MOVE(15, MOVE_NUZZLE),
+ LEVEL_UP_MOVE(15, MOVE_NUZZLE),
LEVEL_UP_MOVE(16, MOVE_PURSUIT),
LEVEL_UP_MOVE(19, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(22, MOVE_SHOCK_WAVE),
- //LEVEL_UP_MOVE(26, MOVE_ELECTRO_BALL),
- //LEVEL_UP_MOVE(30, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(26, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(30, MOVE_ACROBATICS),
LEVEL_UP_MOVE(34, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(38, MOVE_ENCORE),
- //LEVEL_UP_MOVE(42, MOVE_VOLT_SWITCH),
+ LEVEL_UP_MOVE(42, MOVE_VOLT_SWITCH),
LEVEL_UP_MOVE(46, MOVE_AGILITY),
- //LEVEL_UP_MOVE(50, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(50, MOVE_DISCHARGE),
LEVEL_UP_END
};
@@ -11920,11 +11921,11 @@ static const struct LevelUpMove sKarrablastLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(20, MOVE_HEADBUTT),
LEVEL_UP_MOVE(25, MOVE_FALSE_SWIPE),
- //LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(32, MOVE_SLASH),
LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(40, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(44, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(44, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(49, MOVE_FLAIL),
LEVEL_UP_MOVE(52, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE),
@@ -11933,26 +11934,26 @@ static const struct LevelUpMove sKarrablastLevelUpLearnset[] = {
static const struct LevelUpMove sEscavalierLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE( 1, MOVE_TWINEEDLE),
LEVEL_UP_MOVE( 4, MOVE_LEER),
- //LEVEL_UP_MOVE( 8, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 8, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(13, MOVE_TWINEEDLE),
LEVEL_UP_MOVE(16, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(20, MOVE_HEADBUTT),
LEVEL_UP_MOVE(25, MOVE_FALSE_SWIPE),
- //LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(32, MOVE_SLASH),
- //LEVEL_UP_MOVE(37, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(37, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(40, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(44, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(44, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(49, MOVE_REVERSAL),
LEVEL_UP_MOVE(52, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(56, MOVE_GIGA_IMPACT),
- //LEVEL_UP_MOVE(60, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(56, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(60, MOVE_FELL_STINGER),
LEVEL_UP_END
};
@@ -11968,9 +11969,9 @@ static const struct LevelUpMove sFoongusLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(32, MOVE_TOXIC),
LEVEL_UP_MOVE(35, MOVE_SYNTHESIS),
- //LEVEL_UP_MOVE(39, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(39, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(43, MOVE_SOLAR_BEAM),
- //LEVEL_UP_MOVE(45, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE(45, MOVE_RAGE_POWDER),
LEVEL_UP_MOVE(50, MOVE_SPORE),
LEVEL_UP_END
};
@@ -11990,9 +11991,9 @@ static const struct LevelUpMove sAmoongussLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(32, MOVE_TOXIC),
LEVEL_UP_MOVE(35, MOVE_SYNTHESIS),
- //LEVEL_UP_MOVE(43, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(43, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(49, MOVE_SOLAR_BEAM),
- //LEVEL_UP_MOVE(54, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE(54, MOVE_RAGE_POWDER),
LEVEL_UP_MOVE(62, MOVE_SPORE),
LEVEL_UP_END
};
@@ -12005,19 +12006,19 @@ static const struct LevelUpMove sFrillishLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(17, MOVE_RECOVER),
LEVEL_UP_MOVE(22, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(27, MOVE_OMINOUS_WIND),
- //LEVEL_UP_MOVE(32, MOVE_BRINE),
+ LEVEL_UP_MOVE(27, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(32, MOVE_BRINE),
LEVEL_UP_MOVE(37, MOVE_RAIN_DANCE),
- //LEVEL_UP_MOVE(43, MOVE_HEX),
+ LEVEL_UP_MOVE(43, MOVE_HEX),
LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(55, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(55, MOVE_WRING_OUT),
LEVEL_UP_MOVE(61, MOVE_WATER_SPOUT),
LEVEL_UP_END
};
static const struct LevelUpMove sJellicentLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WATER_SPOUT),
- //LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_WRING_OUT),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
@@ -12027,39 +12028,39 @@ static const struct LevelUpMove sJellicentLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(17, MOVE_RECOVER),
LEVEL_UP_MOVE(22, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(27, MOVE_OMINOUS_WIND),
- //LEVEL_UP_MOVE(32, MOVE_BRINE),
+ LEVEL_UP_MOVE(27, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(32, MOVE_BRINE),
LEVEL_UP_MOVE(37, MOVE_RAIN_DANCE),
- //LEVEL_UP_MOVE(45, MOVE_HEX),
+ LEVEL_UP_MOVE(45, MOVE_HEX),
LEVEL_UP_MOVE(53, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(61, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(61, MOVE_WRING_OUT),
LEVEL_UP_MOVE(69, MOVE_WATER_SPOUT),
LEVEL_UP_END
};
static const struct LevelUpMove sAlomomolaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT),
- //LEVEL_UP_MOVE( 5, MOVE_AQUA_RING),
- //LEVEL_UP_MOVE( 9, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 5, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE( 9, MOVE_AQUA_JET),
LEVEL_UP_MOVE(13, MOVE_DOUBLE_SLAP),
- //LEVEL_UP_MOVE(17, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(17, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(21, MOVE_PROTECT),
LEVEL_UP_MOVE(25, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP),
- //LEVEL_UP_MOVE(33, MOVE_SOAK),
+ LEVEL_UP_MOVE(29, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(33, MOVE_SOAK),
LEVEL_UP_MOVE(37, MOVE_WISH),
- //LEVEL_UP_MOVE(41, MOVE_BRINE),
+ LEVEL_UP_MOVE(41, MOVE_BRINE),
LEVEL_UP_MOVE(45, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(49, MOVE_WHIRLPOOL),
LEVEL_UP_MOVE(53, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(57, MOVE_HEALING_WISH),
- //LEVEL_UP_MOVE(61, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(57, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(61, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(65, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
@@ -12071,22 +12072,22 @@ static const struct LevelUpMove sJoltikLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(12, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE(15, MOVE_ELECTROWEB),
- //LEVEL_UP_MOVE(18, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(23, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(15, MOVE_ELECTROWEB),
+ LEVEL_UP_MOVE(18, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(23, MOVE_GASTRO_ACID),
LEVEL_UP_MOVE(26, MOVE_SLASH),
- //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(34, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
- //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(45, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(48, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(45, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(48, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
static const struct LevelUpMove sGalvantulaLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_STICKY_WEB),
- //LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_SPIDER_WEB),
@@ -12094,16 +12095,16 @@ static const struct LevelUpMove sGalvantulaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(12, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE(15, MOVE_ELECTROWEB),
- //LEVEL_UP_MOVE(18, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(23, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(15, MOVE_ELECTROWEB),
+ LEVEL_UP_MOVE(18, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(23, MOVE_GASTRO_ACID),
LEVEL_UP_MOVE(26, MOVE_SLASH),
- //LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(29, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(34, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(40, MOVE_AGILITY),
- //LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(54, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(60, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(46, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(54, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(60, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
@@ -12114,22 +12115,22 @@ static const struct LevelUpMove sFerroseedLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_CURSE),
LEVEL_UP_MOVE(14, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(18, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(21, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(21, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(26, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(30, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(30, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(35, MOVE_INGRAIN),
LEVEL_UP_MOVE(38, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE(43, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(47, MOVE_PAYBACK),
- //LEVEL_UP_MOVE(52, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(43, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(47, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(52, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE(55, MOVE_EXPLOSION),
LEVEL_UP_END
};
static const struct LevelUpMove sFerrothornLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_POWER_WHIP),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP),
- //LEVEL_UP_MOVE( 1, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_CLIMB),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
@@ -12138,14 +12139,14 @@ static const struct LevelUpMove sFerrothornLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_CURSE),
LEVEL_UP_MOVE(14, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(18, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(21, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(21, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(26, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(30, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(30, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(35, MOVE_INGRAIN),
LEVEL_UP_MOVE(38, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE(46, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(53, MOVE_PAYBACK),
- //LEVEL_UP_MOVE(61, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(46, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(53, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(61, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE(67, MOVE_EXPLOSION),
LEVEL_UP_END
};
@@ -12154,15 +12155,15 @@ static const struct LevelUpMove sKlinkLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP),
LEVEL_UP_MOVE( 6, MOVE_CHARGE),
LEVEL_UP_MOVE(11, MOVE_THUNDER_SHOCK),
- //LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND),
+ LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND),
LEVEL_UP_MOVE(21, MOVE_BIND),
- //LEVEL_UP_MOVE(26, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(26, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(39, MOVE_SCREECH),
- //LEVEL_UP_MOVE(42, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(42, MOVE_DISCHARGE),
LEVEL_UP_MOVE(45, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(48, MOVE_SHIFT_GEAR),
+ LEVEL_UP_MOVE(48, MOVE_SHIFT_GEAR),
LEVEL_UP_MOVE(50, MOVE_LOCK_ON),
LEVEL_UP_MOVE(54, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(57, MOVE_HYPER_BEAM),
@@ -12173,18 +12174,18 @@ static const struct LevelUpMove sKlangLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
- //LEVEL_UP_MOVE( 1, MOVE_GEAR_GRIND),
+ LEVEL_UP_MOVE( 1, MOVE_GEAR_GRIND),
LEVEL_UP_MOVE( 6, MOVE_CHARGE),
LEVEL_UP_MOVE(11, MOVE_THUNDER_SHOCK),
- //LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND),
+ LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND),
LEVEL_UP_MOVE(21, MOVE_BIND),
- //LEVEL_UP_MOVE(26, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(26, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(40, MOVE_SCREECH),
- //LEVEL_UP_MOVE(44, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(44, MOVE_DISCHARGE),
LEVEL_UP_MOVE(48, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(52, MOVE_SHIFT_GEAR),
+ LEVEL_UP_MOVE(52, MOVE_SHIFT_GEAR),
LEVEL_UP_MOVE(56, MOVE_LOCK_ON),
LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(64, MOVE_HYPER_BEAM),
@@ -12193,23 +12194,23 @@ static const struct LevelUpMove sKlangLevelUpLearnset[] = {
static const struct LevelUpMove sKlinklangLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_MAGNETIC_FLUX),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
- //LEVEL_UP_MOVE( 1, MOVE_GEAR_UP),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
+ LEVEL_UP_MOVE( 1, MOVE_GEAR_UP),
LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
- //LEVEL_UP_MOVE( 1, MOVE_GEAR_GRIND),
+ LEVEL_UP_MOVE( 1, MOVE_GEAR_GRIND),
LEVEL_UP_MOVE( 6, MOVE_CHARGE),
LEVEL_UP_MOVE(11, MOVE_THUNDER_SHOCK),
- //LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND),
+ LEVEL_UP_MOVE(16, MOVE_GEAR_GRIND),
LEVEL_UP_MOVE(21, MOVE_BIND),
- //LEVEL_UP_MOVE(25, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(25, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(36, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(40, MOVE_SCREECH),
- //LEVEL_UP_MOVE(44, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(44, MOVE_DISCHARGE),
LEVEL_UP_MOVE(48, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(54, MOVE_SHIFT_GEAR),
+ LEVEL_UP_MOVE(54, MOVE_SHIFT_GEAR),
LEVEL_UP_MOVE(60, MOVE_LOCK_ON),
LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(72, MOVE_HYPER_BEAM),
@@ -12220,25 +12221,25 @@ static const struct LevelUpMove sTynamoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_SPARK),
- //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sEelektrikLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_CRUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_SPARK),
- //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE( 9, MOVE_BIND),
LEVEL_UP_MOVE(19, MOVE_ACID),
- //LEVEL_UP_MOVE(29, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(29, MOVE_DISCHARGE),
LEVEL_UP_MOVE(44, MOVE_THUNDERBOLT),
- //LEVEL_UP_MOVE(49, MOVE_ACID_SPRAY),
- //LEVEL_UP_MOVE(54, MOVE_COIL),
- //LEVEL_UP_MOVE(59, MOVE_WILD_CHARGE),
- //LEVEL_UP_MOVE(64, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(49, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(54, MOVE_COIL),
+ LEVEL_UP_MOVE(59, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(64, MOVE_GASTRO_ACID),
LEVEL_UP_MOVE(69, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(74, MOVE_THRASH),
LEVEL_UP_END
@@ -12248,63 +12249,63 @@ static const struct LevelUpMove sEelektrossLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_THRASH),
LEVEL_UP_MOVE( 1, MOVE_ZAP_CANNON),
- //LEVEL_UP_MOVE( 1, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE( 1, MOVE_COIL),
- //LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE),
+ LEVEL_UP_MOVE( 1, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE( 1, MOVE_COIL),
+ LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE),
LEVEL_UP_MOVE( 1, MOVE_CRUSH_CLAW),
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_ACID),
- //LEVEL_UP_MOVE( 1, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE( 1, MOVE_DISCHARGE),
LEVEL_UP_END
};
static const struct LevelUpMove sElgyemLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 4, MOVE_GROWL),
- //LEVEL_UP_MOVE( 8, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(11, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE( 8, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(11, MOVE_MIRACLE_EYE),
LEVEL_UP_MOVE(15, MOVE_PSYBEAM),
LEVEL_UP_MOVE(18, MOVE_HEADBUTT),
LEVEL_UP_MOVE(22, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(25, MOVE_IMPRISON),
- //LEVEL_UP_MOVE(29, MOVE_SIMPLE_BEAM),
- //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(29, MOVE_SIMPLE_BEAM),
+ LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(36, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(39, MOVE_PSYCHIC),
LEVEL_UP_MOVE(43, MOVE_CALM_MIND),
LEVEL_UP_MOVE(46, MOVE_RECOVER),
- //LEVEL_UP_MOVE(50, MOVE_GUARD_SPLIT),
- //LEVEL_UP_MOVE(50, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(53, MOVE_SYNCHRONOISE),
- //LEVEL_UP_MOVE(56, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(50, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(50, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(53, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(56, MOVE_WONDER_ROOM),
LEVEL_UP_END
};
static const struct LevelUpMove sBeheeyemLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM),
- //LEVEL_UP_MOVE( 1, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE( 1, MOVE_SYNCHRONOISE),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE( 1, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE( 1, MOVE_MIRACLE_EYE),
LEVEL_UP_MOVE( 4, MOVE_GROWL),
- //LEVEL_UP_MOVE( 8, MOVE_HEAL_BLOCK),
- //LEVEL_UP_MOVE(11, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE( 8, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(11, MOVE_MIRACLE_EYE),
LEVEL_UP_MOVE(15, MOVE_PSYBEAM),
LEVEL_UP_MOVE(18, MOVE_HEADBUTT),
LEVEL_UP_MOVE(22, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(25, MOVE_IMPRISON),
- //LEVEL_UP_MOVE(29, MOVE_SIMPLE_BEAM),
- //LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(29, MOVE_SIMPLE_BEAM),
+ LEVEL_UP_MOVE(32, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(36, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(39, MOVE_PSYCHIC),
LEVEL_UP_MOVE(45, MOVE_CALM_MIND),
LEVEL_UP_MOVE(50, MOVE_RECOVER),
- //LEVEL_UP_MOVE(56, MOVE_GUARD_SPLIT),
- //LEVEL_UP_MOVE(58, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(63, MOVE_SYNCHRONOISE),
- //LEVEL_UP_MOVE(68, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(56, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(58, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(63, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(68, MOVE_WONDER_ROOM),
LEVEL_UP_END
};
@@ -12317,11 +12318,11 @@ static const struct LevelUpMove sLitwickLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP),
- //LEVEL_UP_MOVE(20, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(20, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(24, MOVE_IMPRISON),
- //LEVEL_UP_MOVE(28, MOVE_HEX),
+ LEVEL_UP_MOVE(28, MOVE_HEX),
LEVEL_UP_MOVE(33, MOVE_MEMENTO),
- //LEVEL_UP_MOVE(38, MOVE_INFERNO),
+ LEVEL_UP_MOVE(38, MOVE_INFERNO),
LEVEL_UP_MOVE(43, MOVE_CURSE),
LEVEL_UP_MOVE(49, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(55, MOVE_PAIN_SPLIT),
@@ -12340,11 +12341,11 @@ static const struct LevelUpMove sLampentLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP),
- //LEVEL_UP_MOVE(20, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(20, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(24, MOVE_IMPRISON),
- //LEVEL_UP_MOVE(28, MOVE_HEX),
+ LEVEL_UP_MOVE(28, MOVE_HEX),
LEVEL_UP_MOVE(33, MOVE_MEMENTO),
- //LEVEL_UP_MOVE(38, MOVE_INFERNO),
+ LEVEL_UP_MOVE(38, MOVE_INFERNO),
LEVEL_UP_MOVE(45, MOVE_CURSE),
LEVEL_UP_MOVE(53, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(61, MOVE_PAIN_SPLIT),
@@ -12356,51 +12357,51 @@ static const struct LevelUpMove sChandelureLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PAIN_SPLIT),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE( 1, MOVE_FLAME_BURST),
- //LEVEL_UP_MOVE( 1, MOVE_HEX),
+ LEVEL_UP_MOVE( 1, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_HEX),
LEVEL_UP_END
};
static const struct LevelUpMove sAxewLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 4, MOVE_LEER),
- //LEVEL_UP_MOVE( 7, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 7, MOVE_ASSURANCE),
LEVEL_UP_MOVE(10, MOVE_DRAGON_RAGE),
- //LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE(16, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(20, MOVE_SLASH),
LEVEL_UP_MOVE(24, MOVE_FALSE_SWIPE),
LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(32, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(36, MOVE_TAUNT),
- //LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(46, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(50, MOVE_GUILLOTINE),
LEVEL_UP_MOVE(56, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE(61, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(61, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
static const struct LevelUpMove sFraxureLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE( 4, MOVE_LEER),
- //LEVEL_UP_MOVE( 7, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 7, MOVE_ASSURANCE),
LEVEL_UP_MOVE(10, MOVE_DRAGON_RAGE),
- //LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE(16, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(20, MOVE_SLASH),
LEVEL_UP_MOVE(24, MOVE_FALSE_SWIPE),
LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(32, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(36, MOVE_TAUNT),
- //LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(48, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(54, MOVE_GUILLOTINE),
LEVEL_UP_MOVE(60, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE(66, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(66, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
@@ -12408,23 +12409,23 @@ static const struct LevelUpMove sHaxorusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_OUTRAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE( 4, MOVE_LEER),
- //LEVEL_UP_MOVE( 7, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 7, MOVE_ASSURANCE),
LEVEL_UP_MOVE(10, MOVE_DRAGON_RAGE),
- //LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP),
+ LEVEL_UP_MOVE(13, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE(16, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(20, MOVE_SLASH),
LEVEL_UP_MOVE(24, MOVE_FALSE_SWIPE),
LEVEL_UP_MOVE(28, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(32, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(36, MOVE_TAUNT),
- //LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(58, MOVE_GUILLOTINE),
LEVEL_UP_MOVE(66, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE(74, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(74, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
@@ -12433,9 +12434,9 @@ static const struct LevelUpMove sCubchooLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 9, MOVE_BIDE),
LEVEL_UP_MOVE(13, MOVE_ICY_WIND),
- //LEVEL_UP_MOVE(15, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE(15, MOVE_PLAY_NICE),
LEVEL_UP_MOVE(17, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE(21, MOVE_BRINE),
+ LEVEL_UP_MOVE(21, MOVE_BRINE),
LEVEL_UP_MOVE(25, MOVE_ENDURE),
LEVEL_UP_MOVE(29, MOVE_CHARM),
LEVEL_UP_MOVE(33, MOVE_SLASH),
@@ -12450,11 +12451,11 @@ static const struct LevelUpMove sCubchooLevelUpLearnset[] = {
static const struct LevelUpMove sBearticLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_ICICLE_CRASH),
- //LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
+ LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD),
LEVEL_UP_MOVE( 1, MOVE_THRASH),
LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER),
- //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
@@ -12462,9 +12463,9 @@ static const struct LevelUpMove sBearticLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 9, MOVE_BIDE),
LEVEL_UP_MOVE(13, MOVE_ICY_WIND),
- //LEVEL_UP_MOVE(15, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE(15, MOVE_PLAY_NICE),
LEVEL_UP_MOVE(17, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE(21, MOVE_BRINE),
+ LEVEL_UP_MOVE(21, MOVE_BRINE),
LEVEL_UP_MOVE(25, MOVE_ENDURE),
LEVEL_UP_MOVE(29, MOVE_SWAGGER),
LEVEL_UP_MOVE(33, MOVE_SLASH),
@@ -12479,9 +12480,9 @@ static const struct LevelUpMove sBearticLevelUpLearnset[] = {
static const struct LevelUpMove sCryogonalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE( 1, MOVE_BIND),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
LEVEL_UP_MOVE( 1, MOVE_SHARPEN),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 5, MOVE_ICY_WIND),
@@ -12496,9 +12497,9 @@ static const struct LevelUpMove sCryogonalLevelUpLearnset[] = {
LEVEL_UP_MOVE(37, MOVE_SLASH),
LEVEL_UP_MOVE(41, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(45, MOVE_RECOVER),
- //LEVEL_UP_MOVE(49, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE(49, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE(50, MOVE_SOLAR_BEAM),
- //LEVEL_UP_MOVE(53, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(53, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(57, MOVE_SHEER_COLD),
LEVEL_UP_END
};
@@ -12508,42 +12509,42 @@ static const struct LevelUpMove sShelmetLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_ACID),
LEVEL_UP_MOVE( 8, MOVE_BIDE),
LEVEL_UP_MOVE(13, MOVE_CURSE),
- //LEVEL_UP_MOVE(16, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(16, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(20, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(25, MOVE_YAWN),
LEVEL_UP_MOVE(28, MOVE_PROTECT),
LEVEL_UP_MOVE(32, MOVE_ACID_ARMOR),
LEVEL_UP_MOVE(37, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(40, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(44, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(44, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(49, MOVE_RECOVER),
- //LEVEL_UP_MOVE(50, MOVE_GUARD_SWAP),
- //LEVEL_UP_MOVE(56, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(50, MOVE_GUARD_SWAP),
+ LEVEL_UP_MOVE(56, MOVE_FINAL_GAMBIT),
LEVEL_UP_END
};
static const struct LevelUpMove sAccelgorLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_WATER_SHURIKEN),
- //LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_SHURIKEN),
+ LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- //LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
- //LEVEL_UP_MOVE( 4, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE( 4, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE( 8, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
- //LEVEL_UP_MOVE(16, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(16, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(20, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(25, MOVE_SWIFT),
- //LEVEL_UP_MOVE(28, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(28, MOVE_ME_FIRST),
LEVEL_UP_MOVE(32, MOVE_AGILITY),
LEVEL_UP_MOVE(37, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(40, MOVE_U_TURN),
- //LEVEL_UP_MOVE(44, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(40, MOVE_U_TURN),
+ LEVEL_UP_MOVE(44, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(49, MOVE_RECOVER),
- //LEVEL_UP_MOVE(52, MOVE_POWER_SWAP),
- //LEVEL_UP_MOVE(56, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(52, MOVE_POWER_SWAP),
+ LEVEL_UP_MOVE(56, MOVE_FINAL_GAMBIT),
LEVEL_UP_END
};
@@ -12558,8 +12559,8 @@ static const struct LevelUpMove sStunfiskLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE(13, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(17, MOVE_CAMOUFLAGE),
- //LEVEL_UP_MOVE(21, MOVE_MUD_BOMB),
- //LEVEL_UP_MOVE(25, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(21, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(25, MOVE_DISCHARGE),
LEVEL_UP_MOVE(30, MOVE_ENDURE),
LEVEL_UP_MOVE(35, MOVE_BOUNCE),
LEVEL_UP_MOVE(40, MOVE_MUDDY_WATER),
@@ -12578,20 +12579,20 @@ static const struct LevelUpMove sMienfooLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(21, MOVE_SWIFT),
LEVEL_UP_MOVE(25, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(29, MOVE_FORCE_PALM),
- //LEVEL_UP_MOVE(33, MOVE_DRAIN_PUNCH),
+ LEVEL_UP_MOVE(29, MOVE_FORCE_PALM),
+ LEVEL_UP_MOVE(33, MOVE_DRAIN_PUNCH),
LEVEL_UP_MOVE(37, MOVE_JUMP_KICK),
- //LEVEL_UP_MOVE(41, MOVE_U_TURN),
- //LEVEL_UP_MOVE(45, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(41, MOVE_U_TURN),
+ LEVEL_UP_MOVE(45, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(49, MOVE_BOUNCE),
LEVEL_UP_MOVE(50, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_MOVE(57, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(61, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE(61, MOVE_AURA_SPHERE),
LEVEL_UP_END
};
static const struct LevelUpMove sMienshaoLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE),
LEVEL_UP_MOVE( 1, MOVE_REVERSAL),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_MEDITATE),
@@ -12603,33 +12604,33 @@ static const struct LevelUpMove sMienshaoLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(21, MOVE_SWIFT),
LEVEL_UP_MOVE(25, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(29, MOVE_FORCE_PALM),
- //LEVEL_UP_MOVE(33, MOVE_DRAIN_PUNCH),
+ LEVEL_UP_MOVE(29, MOVE_FORCE_PALM),
+ LEVEL_UP_MOVE(33, MOVE_DRAIN_PUNCH),
LEVEL_UP_MOVE(37, MOVE_JUMP_KICK),
- //LEVEL_UP_MOVE(41, MOVE_U_TURN),
- //LEVEL_UP_MOVE(45, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(41, MOVE_U_TURN),
+ LEVEL_UP_MOVE(45, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(49, MOVE_BOUNCE),
LEVEL_UP_MOVE(56, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_MOVE(63, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(70, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE(70, MOVE_AURA_SPHERE),
LEVEL_UP_END
};
static const struct LevelUpMove sDruddigonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- //LEVEL_UP_MOVE( 5, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 5, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 9, MOVE_BITE),
LEVEL_UP_MOVE(13, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(18, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(21, MOVE_SLASH),
LEVEL_UP_MOVE(25, MOVE_CRUNCH),
LEVEL_UP_MOVE(27, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(31, MOVE_CHIP_AWAY),
+ LEVEL_UP_MOVE(31, MOVE_CHIP_AWAY),
LEVEL_UP_MOVE(35, MOVE_REVENGE),
- //LEVEL_UP_MOVE(40, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(45, MOVE_DRAGON_TAIL),
- //LEVEL_UP_MOVE(49, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(40, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(45, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(49, MOVE_ROCK_CLIMB),
LEVEL_UP_MOVE(55, MOVE_SUPERPOWER),
LEVEL_UP_MOVE(62, MOVE_OUTRAGE),
LEVEL_UP_END
@@ -12643,22 +12644,22 @@ static const struct LevelUpMove sGolettLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_ROLLOUT),
LEVEL_UP_MOVE(13, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE(17, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(21, MOVE_STOMPING_TANTRUM),
+ LEVEL_UP_MOVE(21, MOVE_STOMPING_TANTRUM),
LEVEL_UP_MOVE(25, MOVE_MEGA_PUNCH),
LEVEL_UP_MOVE(30, MOVE_MAGNITUDE),
LEVEL_UP_MOVE(35, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(40, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(45, MOVE_CURSE),
LEVEL_UP_MOVE(50, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(55, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(55, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(61, MOVE_FOCUS_PUNCH),
LEVEL_UP_END
};
static const struct LevelUpMove sGolurkLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE( 1, MOVE_HIGH_HORSEPOWER),
+ LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE( 1, MOVE_HIGH_HORSEPOWER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
@@ -12667,16 +12668,16 @@ static const struct LevelUpMove sGolurkLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_ROLLOUT),
LEVEL_UP_MOVE(13, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE(17, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(21, MOVE_STOMPING_TANTRUM),
+ LEVEL_UP_MOVE(21, MOVE_STOMPING_TANTRUM),
LEVEL_UP_MOVE(25, MOVE_MEGA_PUNCH),
LEVEL_UP_MOVE(30, MOVE_MAGNITUDE),
LEVEL_UP_MOVE(35, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(40, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(47, MOVE_CURSE),
LEVEL_UP_MOVE(54, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(61, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(61, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(69, MOVE_FOCUS_PUNCH),
- //LEVEL_UP_MOVE(76, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(76, MOVE_PHANTOM_FORCE),
LEVEL_UP_END
};
@@ -12689,12 +12690,12 @@ static const struct LevelUpMove sPawniardLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(25, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(30, MOVE_SLASH),
- //LEVEL_UP_MOVE(33, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(33, MOVE_ASSURANCE),
LEVEL_UP_MOVE(38, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(41, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(41, MOVE_EMBARGO),
LEVEL_UP_MOVE(46, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(54, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(54, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(57, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(62, MOVE_GUILLOTINE),
LEVEL_UP_END
@@ -12702,8 +12703,8 @@ static const struct LevelUpMove sPawniardLevelUpLearnset[] = {
static const struct LevelUpMove sBisharpLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GUILLOTINE),
- //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
@@ -12715,12 +12716,12 @@ static const struct LevelUpMove sBisharpLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(25, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(30, MOVE_SLASH),
- //LEVEL_UP_MOVE(33, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(33, MOVE_ASSURANCE),
LEVEL_UP_MOVE(38, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(41, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(41, MOVE_EMBARGO),
LEVEL_UP_MOVE(46, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(57, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(57, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(63, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(71, MOVE_GUILLOTINE),
LEVEL_UP_END
@@ -12734,13 +12735,13 @@ static const struct LevelUpMove sBouffalantLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE(21, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(26, MOVE_REVENGE),
- //LEVEL_UP_MOVE(31, MOVE_HEAD_CHARGE),
+ LEVEL_UP_MOVE(31, MOVE_HEAD_CHARGE),
LEVEL_UP_MOVE(36, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(41, MOVE_MEGAHORN),
LEVEL_UP_MOVE(46, MOVE_REVERSAL),
LEVEL_UP_MOVE(50, MOVE_THRASH),
LEVEL_UP_MOVE(56, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(61, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(61, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
@@ -12749,26 +12750,26 @@ static const struct LevelUpMove sRuffletLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(10, MOVE_WING_ATTACK),
- //LEVEL_UP_MOVE(14, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(14, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(19, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(23, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(28, MOVE_SLASH),
- //LEVEL_UP_MOVE(32, MOVE_DEFOG),
- //LEVEL_UP_MOVE(37, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(32, MOVE_DEFOG),
+ LEVEL_UP_MOVE(37, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(46, MOVE_CRUSH_CLAW),
- //LEVEL_UP_MOVE(50, MOVE_SKY_DROP),
+ LEVEL_UP_MOVE(50, MOVE_SKY_DROP),
LEVEL_UP_MOVE(55, MOVE_WHIRLWIND),
- //LEVEL_UP_MOVE(59, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(59, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE(64, MOVE_THRASH),
LEVEL_UP_END
};
static const struct LevelUpMove sBraviaryLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SUPERPOWER),
+ //LEVEL_UP_MOVE( 0, MOVE_SUPERPOWER),
LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER),
LEVEL_UP_MOVE( 1, MOVE_THRASH),
- //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -12776,17 +12777,17 @@ static const struct LevelUpMove sBraviaryLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(10, MOVE_WING_ATTACK),
- //LEVEL_UP_MOVE(14, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(14, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(19, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(23, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(28, MOVE_SLASH),
- //LEVEL_UP_MOVE(32, MOVE_DEFOG),
- //LEVEL_UP_MOVE(37, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(32, MOVE_DEFOG),
+ LEVEL_UP_MOVE(37, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(46, MOVE_CRUSH_CLAW),
- //LEVEL_UP_MOVE(50, MOVE_SKY_DROP),
+ LEVEL_UP_MOVE(50, MOVE_SKY_DROP),
LEVEL_UP_MOVE(57, MOVE_WHIRLWIND),
- //LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE(70, MOVE_THRASH),
LEVEL_UP_END
};
@@ -12795,70 +12796,70 @@ static const struct LevelUpMove sVullabyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(10, MOVE_PLUCK),
- //LEVEL_UP_MOVE(14, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(10, MOVE_PLUCK),
+ LEVEL_UP_MOVE(14, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(19, MOVE_FLATTER),
LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(28, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE(32, MOVE_DEFOG),
- //LEVEL_UP_MOVE(37, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(46, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(50, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(28, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(32, MOVE_DEFOG),
+ LEVEL_UP_MOVE(37, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(46, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(50, MOVE_EMBARGO),
LEVEL_UP_MOVE(55, MOVE_WHIRLWIND),
- //LEVEL_UP_MOVE(59, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(59, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE(64, MOVE_MIRROR_MOVE),
LEVEL_UP_END
};
static const struct LevelUpMove sMandibuzzLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BONE_RUSH),
+ //LEVEL_UP_MOVE( 0, MOVE_BONE_RUSH),
LEVEL_UP_MOVE( 1, MOVE_BONE_RUSH),
LEVEL_UP_MOVE( 1, MOVE_MIRROR_MOVE),
- //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_PLUCK),
+ LEVEL_UP_MOVE( 1, MOVE_PLUCK),
LEVEL_UP_MOVE( 5, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(10, MOVE_PLUCK),
- //LEVEL_UP_MOVE(14, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(10, MOVE_PLUCK),
+ LEVEL_UP_MOVE(14, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(19, MOVE_FLATTER),
LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(28, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE(32, MOVE_DEFOG),
- //LEVEL_UP_MOVE(37, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(46, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(50, MOVE_EMBARGO),
+ LEVEL_UP_MOVE(28, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(32, MOVE_DEFOG),
+ LEVEL_UP_MOVE(37, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(41, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(46, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(50, MOVE_EMBARGO),
LEVEL_UP_MOVE(57, MOVE_WHIRLWIND),
- //LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD),
LEVEL_UP_MOVE(70, MOVE_MIRROR_MOVE),
LEVEL_UP_END
};
static const struct LevelUpMove sHeatmorLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
+ LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 6, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(11, MOVE_BIND),
LEVEL_UP_MOVE(16, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE(21, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(26, MOVE_SNATCH),
- //LEVEL_UP_MOVE(31, MOVE_FLAME_BURST),
- //LEVEL_UP_MOVE(36, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(31, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(36, MOVE_BUG_BITE),
LEVEL_UP_MOVE(41, MOVE_SLASH),
- //LEVEL_UP_MOVE(44, MOVE_FIRE_LASH),
+ LEVEL_UP_MOVE(44, MOVE_FIRE_LASH),
LEVEL_UP_MOVE(47, MOVE_AMNESIA),
LEVEL_UP_MOVE(50, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(56, MOVE_STOCKPILE),
LEVEL_UP_MOVE(56, MOVE_SPIT_UP),
LEVEL_UP_MOVE(56, MOVE_SWALLOW),
- //LEVEL_UP_MOVE(61, MOVE_FLARE_BLITZ),
- //LEVEL_UP_MOVE(66, MOVE_INFERNO),
+ LEVEL_UP_MOVE(61, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(66, MOVE_INFERNO),
LEVEL_UP_END
};
@@ -12871,12 +12872,12 @@ static const struct LevelUpMove sDurantLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 6, MOVE_AGILITY),
LEVEL_UP_MOVE(11, MOVE_METAL_CLAW),
- //LEVEL_UP_MOVE(16, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(16, MOVE_BUG_BITE),
LEVEL_UP_MOVE(21, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(26, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(26, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(31, MOVE_DIG),
- //LEVEL_UP_MOVE(36, MOVE_ENTRAINMENT),
- //LEVEL_UP_MOVE(41, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(36, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(41, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(46, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(51, MOVE_GUILLOTINE),
LEVEL_UP_MOVE(56, MOVE_METAL_SOUND),
@@ -12893,9 +12894,9 @@ static const struct LevelUpMove sDeinoLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_ROAR),
LEVEL_UP_MOVE(25, MOVE_CRUNCH),
LEVEL_UP_MOVE(28, MOVE_SLAM),
- //LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(38, MOVE_WORK_UP),
- //LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(38, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(48, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(50, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(58, MOVE_HYPER_VOICE),
@@ -12904,7 +12905,7 @@ static const struct LevelUpMove sDeinoLevelUpLearnset[] = {
};
static const struct LevelUpMove sZweilousLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -12915,9 +12916,9 @@ static const struct LevelUpMove sZweilousLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_ROAR),
LEVEL_UP_MOVE(25, MOVE_CRUNCH),
LEVEL_UP_MOVE(28, MOVE_SLAM),
- //LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(38, MOVE_WORK_UP),
- //LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(38, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(48, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(55, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(64, MOVE_HYPER_VOICE),
@@ -12939,9 +12940,9 @@ static const struct LevelUpMove sHydreigonLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_ROAR),
LEVEL_UP_MOVE(25, MOVE_CRUNCH),
LEVEL_UP_MOVE(28, MOVE_SLAM),
- //LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(38, MOVE_WORK_UP),
- //LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(32, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(38, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(42, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(48, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(55, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(68, MOVE_HYPER_VOICE),
@@ -12954,28 +12955,28 @@ static const struct LevelUpMove sLarvestaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
LEVEL_UP_MOVE(10, MOVE_ABSORB),
LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(30, MOVE_FLAME_CHARGE),
- //LEVEL_UP_MOVE(40, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(30, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(40, MOVE_BUG_BITE),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(60, MOVE_FLAME_WHEEL),
- //LEVEL_UP_MOVE(70, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(70, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(80, MOVE_AMNESIA),
LEVEL_UP_MOVE(90, MOVE_THRASH),
- //LEVEL_UP_MOVE(100, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(100, MOVE_FLARE_BLITZ),
LEVEL_UP_END
};
static const struct LevelUpMove sVolcaronaLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_FIERY_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
- //LEVEL_UP_MOVE( 1, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_FIERY_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
+ LEVEL_UP_MOVE( 1, MOVE_RAGE_POWDER),
LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE),
- //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE( 1, MOVE_THRASH),
LEVEL_UP_MOVE( 1, MOVE_AMNESIA),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE( 1, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
@@ -12987,54 +12988,54 @@ static const struct LevelUpMove sVolcaronaLevelUpLearnset[] = {
LEVEL_UP_MOVE(40, MOVE_WHIRLWIND),
LEVEL_UP_MOVE(50, MOVE_SILVER_WIND),
LEVEL_UP_MOVE(60, MOVE_HEAT_WAVE),
- //LEVEL_UP_MOVE(70, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(80, MOVE_RAGE_POWDER),
- //LEVEL_UP_MOVE(90, MOVE_HURRICANE),
- //LEVEL_UP_MOVE(100, MOVE_FIERY_DANCE),
+ LEVEL_UP_MOVE(70, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(80, MOVE_RAGE_POWDER),
+ LEVEL_UP_MOVE(90, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(100, MOVE_FIERY_DANCE),
LEVEL_UP_END
};
static const struct LevelUpMove sCobalionLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 7, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(13, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(19, MOVE_RETALIATE),
- //LEVEL_UP_MOVE(25, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD),
+ LEVEL_UP_MOVE(19, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(25, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD),
LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(49, MOVE_WORK_UP),
- //LEVEL_UP_MOVE(55, MOVE_METAL_BURST),
- //LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(49, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(55, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
static const struct LevelUpMove sTerrakionLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE( 7, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(13, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(19, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(19, MOVE_RETALIATE),
LEVEL_UP_MOVE(25, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD),
+ LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD),
LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(49, MOVE_WORK_UP),
- //LEVEL_UP_MOVE(55, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(49, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(55, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
static const struct LevelUpMove sVirizionLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE( 1, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -13042,21 +13043,21 @@ static const struct LevelUpMove sVirizionLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE( 7, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(13, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(19, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(19, MOVE_RETALIATE),
LEVEL_UP_MOVE(25, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD),
+ LEVEL_UP_MOVE(31, MOVE_SACRED_SWORD),
LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(49, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(42, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(49, MOVE_WORK_UP),
LEVEL_UP_MOVE(55, MOVE_LEAF_BLADE),
- //LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(61, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
static const struct LevelUpMove sTornadusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_THRASH),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
LEVEL_UP_MOVE( 1, MOVE_UPROAR),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_GUST),
@@ -13066,21 +13067,21 @@ static const struct LevelUpMove sTornadusLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE(25, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(31, MOVE_AGILITY),
- //LEVEL_UP_MOVE(37, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(37, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(43, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(49, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(49, MOVE_TAILWIND),
LEVEL_UP_MOVE(55, MOVE_RAIN_DANCE),
- //LEVEL_UP_MOVE(61, MOVE_HURRICANE),
- //LEVEL_UP_MOVE(67, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(61, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(67, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(79, MOVE_THRASH),
LEVEL_UP_END
};
static const struct LevelUpMove sThundurusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_THRASH),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE( 1, MOVE_UPROAR),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
@@ -13088,21 +13089,21 @@ static const struct LevelUpMove sThundurusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_BITE),
LEVEL_UP_MOVE(13, MOVE_REVENGE),
LEVEL_UP_MOVE(19, MOVE_SHOCK_WAVE),
- //LEVEL_UP_MOVE(25, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(25, MOVE_HEAL_BLOCK),
LEVEL_UP_MOVE(31, MOVE_AGILITY),
- //LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(37, MOVE_DISCHARGE),
LEVEL_UP_MOVE(43, MOVE_CRUNCH),
LEVEL_UP_MOVE(49, MOVE_CHARGE),
- //LEVEL_UP_MOVE(55, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(55, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(61, MOVE_THUNDER),
- //LEVEL_UP_MOVE(67, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(67, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(79, MOVE_THRASH),
LEVEL_UP_END
};
static const struct LevelUpMove sReshiramLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE( 8, MOVE_IMPRISON),
LEVEL_UP_MOVE(15, MOVE_ANCIENT_POWER),
@@ -13110,57 +13111,57 @@ static const struct LevelUpMove sReshiramLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(36, MOVE_SLASH),
LEVEL_UP_MOVE(43, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE(50, MOVE_FUSION_FLARE),
- //LEVEL_UP_MOVE(54, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(50, MOVE_FUSION_FLARE),
+ LEVEL_UP_MOVE(54, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(71, MOVE_CRUNCH),
LEVEL_UP_MOVE(78, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(85, MOVE_OUTRAGE),
LEVEL_UP_MOVE(92, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(100, MOVE_BLUE_FLARE),
+ LEVEL_UP_MOVE(100, MOVE_BLUE_FLARE),
LEVEL_UP_END
};
static const struct LevelUpMove sZekromLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE( 8, MOVE_IMPRISON),
LEVEL_UP_MOVE(15, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(22, MOVE_THUNDERBOLT),
LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(36, MOVE_SLASH),
- //LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(50, MOVE_FUSION_BOLT),
+ LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(50, MOVE_FUSION_BOLT),
LEVEL_UP_MOVE(54, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(71, MOVE_CRUNCH),
LEVEL_UP_MOVE(78, MOVE_THUNDER),
LEVEL_UP_MOVE(85, MOVE_OUTRAGE),
LEVEL_UP_MOVE(92, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(100, MOVE_BOLT_STRIKE),
+ LEVEL_UP_MOVE(100, MOVE_BOLT_STRIKE),
LEVEL_UP_END
};
static const struct LevelUpMove sLandorusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_FISSURE),
LEVEL_UP_MOVE( 1, MOVE_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
LEVEL_UP_MOVE( 1, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
- //LEVEL_UP_MOVE( 7, MOVE_PUNISHMENT),
- //LEVEL_UP_MOVE(13, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 7, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(13, MOVE_BULLDOZE),
LEVEL_UP_MOVE(19, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(25, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(31, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(43, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(49, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(55, MOVE_SANDSTORM),
LEVEL_UP_MOVE(61, MOVE_FISSURE),
- //LEVEL_UP_MOVE(67, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(67, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(73, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(79, MOVE_OUTRAGE),
LEVEL_UP_END
};
@@ -13174,9 +13175,9 @@ static const struct LevelUpMove sKyuremLevelUpLearnset[] = {
LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(36, MOVE_SLASH),
LEVEL_UP_MOVE(43, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(50, MOVE_GLACIATE),
- //LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(50, MOVE_GLACIATE),
+ LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(71, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(78, MOVE_BLIZZARD),
LEVEL_UP_MOVE(85, MOVE_OUTRAGE),
@@ -13185,7 +13186,7 @@ static const struct LevelUpMove sKyuremLevelUpLearnset[] = {
};
static const struct LevelUpMove sKeldeoLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM),
@@ -13193,19 +13194,19 @@ static const struct LevelUpMove sKeldeoLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(19, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(25, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(31, MOVE_RETALIATE),
- //LEVEL_UP_MOVE(37, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE(43, MOVE_SACRED_SWORD),
+ LEVEL_UP_MOVE(31, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(37, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(43, MOVE_SACRED_SWORD),
LEVEL_UP_MOVE(49, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(55, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(61, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(55, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(61, MOVE_WORK_UP),
LEVEL_UP_MOVE(67, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(73, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(73, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
static const struct LevelUpMove sMeloettaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ROUND),
+ LEVEL_UP_MOVE( 1, MOVE_ROUND),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_SING),
@@ -13213,37 +13214,37 @@ static const struct LevelUpMove sMeloettaLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_CONFUSION),
LEVEL_UP_MOVE(16, MOVE_SING),
LEVEL_UP_MOVE(21, MOVE_TEETER_DANCE),
- //LEVEL_UP_MOVE(26, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(26, MOVE_ACROBATICS),
LEVEL_UP_MOVE(31, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(36, MOVE_ECHOED_VOICE),
- //LEVEL_UP_MOVE(43, MOVE_U_TURN),
- //LEVEL_UP_MOVE(50, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE(36, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(43, MOVE_U_TURN),
+ LEVEL_UP_MOVE(50, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE(57, MOVE_PSYCHIC),
LEVEL_UP_MOVE(64, MOVE_HYPER_VOICE),
LEVEL_UP_MOVE(71, MOVE_ROLE_PLAY),
- //LEVEL_UP_MOVE(78, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(78, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(85, MOVE_PERISH_SONG),
LEVEL_UP_END
};
static const struct LevelUpMove sGenesectLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
- //LEVEL_UP_MOVE( 1, MOVE_TECHNO_BLAST),
+ LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE( 1, MOVE_TECHNO_BLAST),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_SCREECH),
LEVEL_UP_MOVE( 7, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(11, MOVE_LOCK_ON),
- //LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE),
- //LEVEL_UP_MOVE(22, MOVE_MAGNET_BOMB),
+ LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(22, MOVE_MAGNET_BOMB),
LEVEL_UP_MOVE(29, MOVE_SLASH),
LEVEL_UP_MOVE(33, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(40, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(44, MOVE_TRI_ATTACK),
- //LEVEL_UP_MOVE(51, MOVE_X_SCISSOR),
- //LEVEL_UP_MOVE(55, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(62, MOVE_SIMPLE_BEAM),
+ LEVEL_UP_MOVE(51, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(55, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(62, MOVE_SIMPLE_BEAM),
LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(73, MOVE_HYPER_BEAM),
LEVEL_UP_MOVE(77, MOVE_SELF_DESTRUCT),
@@ -13259,17 +13260,17 @@ static const struct LevelUpMove sChespinLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(18, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(32, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(32, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(35, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(39, MOVE_BULK_UP),
LEVEL_UP_MOVE(42, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(45, MOVE_PAIN_SPLIT),
- //LEVEL_UP_MOVE(48, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(48, MOVE_WOOD_HAMMER),
LEVEL_UP_END
};
static const struct LevelUpMove sQuilladinLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_NEEDLE_ARM),
+ //LEVEL_UP_MOVE( 0, MOVE_NEEDLE_ARM),
LEVEL_UP_MOVE( 1, MOVE_NEEDLE_ARM),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
@@ -13279,21 +13280,21 @@ static const struct LevelUpMove sQuilladinLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(19, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(35, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(35, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(39, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(44, MOVE_BULK_UP),
LEVEL_UP_MOVE(48, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(52, MOVE_PAIN_SPLIT),
- //LEVEL_UP_MOVE(56, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(56, MOVE_WOOD_HAMMER),
LEVEL_UP_END
};
static const struct LevelUpMove sChesnaughtLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SPIKY_SHIELD),
- //LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD),
+ LEVEL_UP_MOVE( 1, MOVE_SPIKY_SHIELD),
LEVEL_UP_MOVE( 1, MOVE_NEEDLE_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -13305,14 +13306,14 @@ static const struct LevelUpMove sChesnaughtLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(19, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(35, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(35, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(41, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(48, MOVE_BULK_UP),
LEVEL_UP_MOVE(54, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(60, MOVE_PAIN_SPLIT),
- //LEVEL_UP_MOVE(66, MOVE_WOOD_HAMMER),
- //LEVEL_UP_MOVE(72, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE(78, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(66, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(72, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(78, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
@@ -13321,17 +13322,17 @@ static const struct LevelUpMove sFennekinLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_EMBER),
LEVEL_UP_MOVE(11, MOVE_HOWL),
- //LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(17, MOVE_PSYBEAM),
LEVEL_UP_MOVE(20, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(25, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(25, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(27, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(31, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(31, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(35, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(38, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(41, MOVE_PSYCHIC),
LEVEL_UP_MOVE(43, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(46, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE(46, MOVE_MAGIC_ROOM),
LEVEL_UP_MOVE(48, MOVE_FIRE_BLAST),
LEVEL_UP_END
};
@@ -13342,27 +13343,27 @@ static const struct LevelUpMove sBraixenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 5, MOVE_EMBER),
LEVEL_UP_MOVE(11, MOVE_HOWL),
- //LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(18, MOVE_PSYBEAM),
LEVEL_UP_MOVE(22, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(28, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(28, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(36, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(36, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(41, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(45, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(49, MOVE_PSYCHIC),
LEVEL_UP_MOVE(52, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(56, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE(56, MOVE_MAGIC_ROOM),
LEVEL_UP_MOVE(59, MOVE_FIRE_BLAST),
LEVEL_UP_END
};
static const struct LevelUpMove sDelphoxLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_MYSTICAL_FIRE),
- //LEVEL_UP_MOVE( 1, MOVE_MYSTICAL_FIRE),
+ LEVEL_UP_MOVE( 1, MOVE_MYSTICAL_FIRE),
LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE( 1, MOVE_ROLE_PLAY),
- //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -13370,17 +13371,17 @@ static const struct LevelUpMove sDelphoxLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HOWL),
LEVEL_UP_MOVE( 5, MOVE_EMBER),
LEVEL_UP_MOVE(11, MOVE_HOWL),
- //LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(14, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(18, MOVE_PSYBEAM),
LEVEL_UP_MOVE(22, MOVE_FIRE_SPIN),
- //LEVEL_UP_MOVE(28, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE(28, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(38, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(38, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(45, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(51, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(57, MOVE_PSYCHIC),
LEVEL_UP_MOVE(62, MOVE_SUNNY_DAY),
- //LEVEL_UP_MOVE(68, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE(68, MOVE_MAGIC_ROOM),
LEVEL_UP_MOVE(74, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(80, MOVE_FUTURE_SIGHT),
LEVEL_UP_END
@@ -13394,9 +13395,9 @@ static const struct LevelUpMove sFroakieLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_LICK),
LEVEL_UP_MOVE(14, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(18, MOVE_SMOKESCREEN),
- //LEVEL_UP_MOVE(21, MOVE_ROUND),
- //LEVEL_UP_MOVE(25, MOVE_FLING),
- //LEVEL_UP_MOVE(29, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(21, MOVE_ROUND),
+ LEVEL_UP_MOVE(25, MOVE_FLING),
+ LEVEL_UP_MOVE(29, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(35, MOVE_SUBSTITUTE),
LEVEL_UP_MOVE(39, MOVE_BOUNCE),
LEVEL_UP_MOVE(43, MOVE_DOUBLE_TEAM),
@@ -13413,9 +13414,9 @@ static const struct LevelUpMove sFrogadierLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_LICK),
LEVEL_UP_MOVE(14, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(19, MOVE_SMOKESCREEN),
- //LEVEL_UP_MOVE(23, MOVE_ROUND),
- //LEVEL_UP_MOVE(28, MOVE_FLING),
- //LEVEL_UP_MOVE(33, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(23, MOVE_ROUND),
+ LEVEL_UP_MOVE(28, MOVE_FLING),
+ LEVEL_UP_MOVE(33, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(40, MOVE_SUBSTITUTE),
LEVEL_UP_MOVE(45, MOVE_BOUNCE),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_TEAM),
@@ -13425,11 +13426,11 @@ static const struct LevelUpMove sFrogadierLevelUpLearnset[] = {
static const struct LevelUpMove sGreninjaLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_WATER_SHURIKEN),
- //LEVEL_UP_MOVE( 1, MOVE_WATER_SHURIKEN),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_SHURIKEN),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE( 1, MOVE_HAZE),
LEVEL_UP_MOVE( 1, MOVE_ROLE_PLAY),
- //LEVEL_UP_MOVE( 1, MOVE_MAT_BLOCK),
+ LEVEL_UP_MOVE( 1, MOVE_MAT_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
@@ -13439,7 +13440,7 @@ static const struct LevelUpMove sGreninjaLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_LICK),
LEVEL_UP_MOVE(14, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(19, MOVE_SMOKESCREEN),
- //LEVEL_UP_MOVE(23, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(23, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(28, MOVE_SPIKES),
LEVEL_UP_MOVE(33, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(42, MOVE_SUBSTITUTE),
@@ -13447,7 +13448,7 @@ static const struct LevelUpMove sGreninjaLevelUpLearnset[] = {
LEVEL_UP_MOVE(56, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(68, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(70, MOVE_HAZE),
- //LEVEL_UP_MOVE(77, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(77, MOVE_NIGHT_SLASH),
LEVEL_UP_END
};
@@ -13472,9 +13473,9 @@ static const struct LevelUpMove sBunnelbyLevelUpLearnset[] = {
};
static const struct LevelUpMove sDiggersbyLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
- //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_AGILITY),
@@ -13492,7 +13493,7 @@ static const struct LevelUpMove sDiggersbyLevelUpLearnset[] = {
LEVEL_UP_MOVE(48, MOVE_SUPER_FANG),
LEVEL_UP_MOVE(54, MOVE_FACADE),
LEVEL_UP_MOVE(57, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(60, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(60, MOVE_HAMMER_ARM),
LEVEL_UP_END
};
@@ -13503,19 +13504,19 @@ static const struct LevelUpMove sFletchlingLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_PECK),
LEVEL_UP_MOVE(13, MOVE_AGILITY),
LEVEL_UP_MOVE(16, MOVE_FLAIL),
- //LEVEL_UP_MOVE(21, MOVE_ROOST),
+ LEVEL_UP_MOVE(21, MOVE_ROOST),
LEVEL_UP_MOVE(25, MOVE_RAZOR_WIND),
- //LEVEL_UP_MOVE(29, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(34, MOVE_FLAME_CHARGE),
- //LEVEL_UP_MOVE(39, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(41, MOVE_ME_FIRST),
- //LEVEL_UP_MOVE(45, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(29, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(34, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(39, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(41, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(45, MOVE_TAILWIND),
LEVEL_UP_MOVE(48, MOVE_STEEL_WING),
LEVEL_UP_END
};
static const struct LevelUpMove sFletchinderLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_EMBER),
+ //LEVEL_UP_MOVE( 0, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -13524,21 +13525,21 @@ static const struct LevelUpMove sFletchinderLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_PECK),
LEVEL_UP_MOVE(13, MOVE_AGILITY),
LEVEL_UP_MOVE(16, MOVE_FLAIL),
- //LEVEL_UP_MOVE(25, MOVE_ROOST),
+ LEVEL_UP_MOVE(25, MOVE_ROOST),
LEVEL_UP_MOVE(27, MOVE_RAZOR_WIND),
- //LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(38, MOVE_FLAME_CHARGE),
- //LEVEL_UP_MOVE(42, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(46, MOVE_ME_FIRST),
- //LEVEL_UP_MOVE(51, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(38, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(42, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(46, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(51, MOVE_TAILWIND),
LEVEL_UP_MOVE(55, MOVE_STEEL_WING),
LEVEL_UP_END
};
static const struct LevelUpMove sTalonflameLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EMBER),
- //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -13547,15 +13548,15 @@ static const struct LevelUpMove sTalonflameLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_PECK),
LEVEL_UP_MOVE(13, MOVE_AGILITY),
LEVEL_UP_MOVE(16, MOVE_FLAIL),
- //LEVEL_UP_MOVE(25, MOVE_ROOST),
+ LEVEL_UP_MOVE(25, MOVE_ROOST),
LEVEL_UP_MOVE(27, MOVE_RAZOR_WIND),
- //LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(39, MOVE_FLAME_CHARGE),
- //LEVEL_UP_MOVE(44, MOVE_ACROBATICS),
- //LEVEL_UP_MOVE(49, MOVE_ME_FIRST),
- //LEVEL_UP_MOVE(55, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(31, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(39, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(44, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(49, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(55, MOVE_TAILWIND),
LEVEL_UP_MOVE(60, MOVE_STEEL_WING),
- //LEVEL_UP_MOVE(64, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(64, MOVE_BRAVE_BIRD),
LEVEL_UP_END
};
@@ -13563,35 +13564,35 @@ static const struct LevelUpMove sScatterbugLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 6, MOVE_STUN_SPORE),
- //LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
LEVEL_UP_END
};
static const struct LevelUpMove sSpewpaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_PROTECT),
+ //LEVEL_UP_MOVE( 0, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_END
};
static const struct LevelUpMove sVivillonLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_GUST),
+ //LEVEL_UP_MOVE( 0, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_GUST),
- //LEVEL_UP_MOVE( 1, MOVE_POWDER),
+ LEVEL_UP_MOVE( 1, MOVE_POWDER),
LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
- //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(12, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(17, MOVE_PSYBEAM),
LEVEL_UP_MOVE(21, MOVE_SUPERSONIC),
- //LEVEL_UP_MOVE(25, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(25, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(31, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(35, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(41, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE(45, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE(50, MOVE_HURRICANE),
- //LEVEL_UP_MOVE(55, MOVE_POWDER),
+ LEVEL_UP_MOVE(45, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(50, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(55, MOVE_POWDER),
LEVEL_UP_END
};
@@ -13599,17 +13600,17 @@ static const struct LevelUpMove sLitleoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_EMBER),
- //LEVEL_UP_MOVE( 8, MOVE_WORK_UP),
+ LEVEL_UP_MOVE( 8, MOVE_WORK_UP),
LEVEL_UP_MOVE(11, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(15, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(15, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(23, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(23, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(28, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(39, MOVE_CRUNCH),
LEVEL_UP_MOVE(43, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(46, MOVE_INCINERATE),
+ LEVEL_UP_MOVE(46, MOVE_INCINERATE),
LEVEL_UP_MOVE(50, MOVE_OVERHEAT),
LEVEL_UP_END
};
@@ -13619,19 +13620,19 @@ static const struct LevelUpMove sPyroarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
- //LEVEL_UP_MOVE( 1, MOVE_WORK_UP),
+ LEVEL_UP_MOVE( 1, MOVE_WORK_UP),
LEVEL_UP_MOVE( 5, MOVE_EMBER),
- //LEVEL_UP_MOVE( 8, MOVE_WORK_UP),
+ LEVEL_UP_MOVE( 8, MOVE_WORK_UP),
LEVEL_UP_MOVE(11, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(15, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(15, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(20, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(23, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(23, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(28, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(33, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(38, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(42, MOVE_CRUNCH),
LEVEL_UP_MOVE(48, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(51, MOVE_INCINERATE),
+ LEVEL_UP_MOVE(51, MOVE_INCINERATE),
LEVEL_UP_MOVE(57, MOVE_OVERHEAT),
LEVEL_UP_END
};
@@ -13639,16 +13640,16 @@ static const struct LevelUpMove sPyroarLevelUpLearnset[] = {
static const struct LevelUpMove sFlabebeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
- //LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(20, MOVE_WISH),
LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE(24, MOVE_GRASSY_TERRAIN),
- //LEVEL_UP_MOVE(28, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(24, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(28, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(33, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(37, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE(41, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(37, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(41, MOVE_MOONBLAST),
LEVEL_UP_MOVE(45, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE(48, MOVE_SOLAR_BEAM),
LEVEL_UP_END
@@ -13657,33 +13658,33 @@ static const struct LevelUpMove sFlabebeLevelUpLearnset[] = {
static const struct LevelUpMove sFloetteLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(20, MOVE_WISH),
LEVEL_UP_MOVE(25, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE(27, MOVE_GRASSY_TERRAIN),
- //LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(27, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(38, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(43, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE(46, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(43, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(46, MOVE_MOONBLAST),
LEVEL_UP_MOVE(51, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE(58, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sFlorgesLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
- //LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE( 1, MOVE_WISH),
LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD),
- //LEVEL_UP_MOVE( 1, MOVE_GRASS_KNOT),
- //LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
- //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD),
+ LEVEL_UP_MOVE( 1, MOVE_GRASS_KNOT),
+ LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY),
LEVEL_UP_END
@@ -13696,21 +13697,21 @@ static const struct LevelUpMove sSkiddoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE(12, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(16, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(16, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(20, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(22, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(26, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(30, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(26, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(30, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(34, MOVE_BULK_UP),
LEVEL_UP_MOVE(38, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(42, MOVE_HORN_LEECH),
+ LEVEL_UP_MOVE(42, MOVE_HORN_LEECH),
LEVEL_UP_MOVE(45, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE(50, MOVE_MILK_DRINK),
LEVEL_UP_END
};
static const struct LevelUpMove sGogoatLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_AERIAL_ACE),
+ //LEVEL_UP_MOVE( 0, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE( 1, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
@@ -13721,14 +13722,14 @@ static const struct LevelUpMove sGogoatLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE(12, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(16, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(16, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(20, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(22, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(26, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(30, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(26, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(30, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(34, MOVE_BULK_UP),
LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(47, MOVE_HORN_LEECH),
+ LEVEL_UP_MOVE(47, MOVE_HORN_LEECH),
LEVEL_UP_MOVE(55, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE(58, MOVE_MILK_DRINK),
LEVEL_UP_END
@@ -13738,45 +13739,45 @@ static const struct LevelUpMove sPanchamLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 7, MOVE_ARM_THRUST),
- //LEVEL_UP_MOVE(10, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(10, MOVE_WORK_UP),
LEVEL_UP_MOVE(12, MOVE_KARATE_CHOP),
LEVEL_UP_MOVE(15, MOVE_COMET_PUNCH),
LEVEL_UP_MOVE(20, MOVE_SLASH),
- //LEVEL_UP_MOVE(25, MOVE_CIRCLE_THROW),
+ LEVEL_UP_MOVE(25, MOVE_CIRCLE_THROW),
LEVEL_UP_MOVE(27, MOVE_VITAL_THROW),
LEVEL_UP_MOVE(33, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(39, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(42, MOVE_ENTRAINMENT),
- //LEVEL_UP_MOVE(45, MOVE_PARTING_SHOT),
+ LEVEL_UP_MOVE(42, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(45, MOVE_PARTING_SHOT),
LEVEL_UP_MOVE(48, MOVE_SKY_UPPERCUT),
LEVEL_UP_END
};
static const struct LevelUpMove sPangoroLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_BULLET_PUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_LOW_SWEEP),
- //LEVEL_UP_MOVE( 1, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_LOW_SWEEP),
+ LEVEL_UP_MOVE( 1, MOVE_ENTRAINMENT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST),
- //LEVEL_UP_MOVE( 1, MOVE_WORK_UP),
+ LEVEL_UP_MOVE( 1, MOVE_WORK_UP),
LEVEL_UP_MOVE( 7, MOVE_ARM_THRUST),
- //LEVEL_UP_MOVE(10, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(10, MOVE_WORK_UP),
LEVEL_UP_MOVE(12, MOVE_KARATE_CHOP),
LEVEL_UP_MOVE(15, MOVE_COMET_PUNCH),
LEVEL_UP_MOVE(20, MOVE_SLASH),
- //LEVEL_UP_MOVE(25, MOVE_CIRCLE_THROW),
+ LEVEL_UP_MOVE(25, MOVE_CIRCLE_THROW),
LEVEL_UP_MOVE(27, MOVE_VITAL_THROW),
LEVEL_UP_MOVE(35, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(42, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(45, MOVE_ENTRAINMENT),
- //LEVEL_UP_MOVE(48, MOVE_PARTING_SHOT),
+ LEVEL_UP_MOVE(45, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(48, MOVE_PARTING_SHOT),
LEVEL_UP_MOVE(52, MOVE_SKY_UPPERCUT),
- //LEVEL_UP_MOVE(57, MOVE_LOW_SWEEP),
+ LEVEL_UP_MOVE(57, MOVE_LOW_SWEEP),
LEVEL_UP_MOVE(65, MOVE_TAUNT),
- //LEVEL_UP_MOVE(70, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(70, MOVE_HAMMER_ARM),
LEVEL_UP_END
};
@@ -13784,16 +13785,16 @@ static const struct LevelUpMove sFurfrouLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(12, MOVE_HEADBUTT),
LEVEL_UP_MOVE(15, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE(22, MOVE_BITE),
LEVEL_UP_MOVE(27, MOVE_ODOR_SLEUTH),
- //LEVEL_UP_MOVE(33, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(33, MOVE_RETALIATE),
LEVEL_UP_MOVE(35, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(38, MOVE_CHARM),
- //LEVEL_UP_MOVE(42, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(48, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(42, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(48, MOVE_COTTON_GUARD),
LEVEL_UP_END
};
@@ -13805,13 +13806,13 @@ static const struct LevelUpMove sEspurrLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(17, MOVE_PSYBEAM),
LEVEL_UP_MOVE(19, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE),
- //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_END
};
static const struct LevelUpMove sMeowsticLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
@@ -13823,17 +13824,17 @@ static const struct LevelUpMove sMeowsticLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(17, MOVE_PSYBEAM),
LEVEL_UP_MOVE(19, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE),
- //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(28, MOVE_CHARM),
- //LEVEL_UP_MOVE(31, MOVE_MIRACLE_EYE),
+ LEVEL_UP_MOVE(31, MOVE_MIRACLE_EYE),
LEVEL_UP_MOVE(35, MOVE_REFLECT),
LEVEL_UP_MOVE(40, MOVE_PSYCHIC),
LEVEL_UP_MOVE(43, MOVE_ROLE_PLAY),
LEVEL_UP_MOVE(45, MOVE_IMPRISON),
- //LEVEL_UP_MOVE(48, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(50, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE(53, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(48, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(50, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(53, MOVE_QUICK_GUARD),
LEVEL_UP_END
};
@@ -13843,16 +13844,16 @@ static const struct LevelUpMove sHonedgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 8, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(13, MOVE_PURSUIT),
- //LEVEL_UP_MOVE(18, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(20, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(18, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(20, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(22, MOVE_AERIAL_ACE),
- //LEVEL_UP_MOVE(26, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(26, MOVE_RETALIATE),
LEVEL_UP_MOVE(29, MOVE_SLASH),
LEVEL_UP_MOVE(32, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(39, MOVE_POWER_TRICK),
- //LEVEL_UP_MOVE(42, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(47, MOVE_SACRED_SWORD),
+ LEVEL_UP_MOVE(35, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(39, MOVE_POWER_TRICK),
+ LEVEL_UP_MOVE(42, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(47, MOVE_SACRED_SWORD),
LEVEL_UP_END
};
@@ -13863,78 +13864,78 @@ static const struct LevelUpMove sDoubladeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 8, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(13, MOVE_PURSUIT),
- //LEVEL_UP_MOVE(18, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(20, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(18, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(20, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(22, MOVE_AERIAL_ACE),
- //LEVEL_UP_MOVE(26, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(26, MOVE_RETALIATE),
LEVEL_UP_MOVE(29, MOVE_SLASH),
LEVEL_UP_MOVE(32, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(36, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(41, MOVE_POWER_TRICK),
- //LEVEL_UP_MOVE(45, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(51, MOVE_SACRED_SWORD),
+ LEVEL_UP_MOVE(36, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(41, MOVE_POWER_TRICK),
+ LEVEL_UP_MOVE(45, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(51, MOVE_SACRED_SWORD),
LEVEL_UP_END
};
static const struct LevelUpMove sAegislashLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_PURSUIT),
- //LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE( 1, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_TRICK),
- //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH),
LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE( 1, MOVE_AERIAL_ACE),
- //LEVEL_UP_MOVE( 1, MOVE_KINGS_SHIELD),
- //LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD),
+ LEVEL_UP_MOVE( 1, MOVE_KINGS_SHIELD),
+ LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD),
LEVEL_UP_END
};
static const struct LevelUpMove sSpritzeeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 6, MOVE_SWEET_KISS),
LEVEL_UP_MOVE( 8, MOVE_ODOR_SLEUTH),
- //LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(17, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(21, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(21, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(25, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(29, MOVE_ATTRACT),
- //LEVEL_UP_MOVE(31, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(31, MOVE_MOONBLAST),
LEVEL_UP_MOVE(35, MOVE_CHARM),
LEVEL_UP_MOVE(38, MOVE_FLAIL),
- //LEVEL_UP_MOVE(42, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(42, MOVE_MISTY_TERRAIN),
LEVEL_UP_MOVE(44, MOVE_SKILL_SWAP),
LEVEL_UP_MOVE(48, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(50, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(50, MOVE_DISARMING_VOICE),
LEVEL_UP_END
};
static const struct LevelUpMove sAromatisseLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
- //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS),
LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE( 6, MOVE_SWEET_KISS),
LEVEL_UP_MOVE( 8, MOVE_ODOR_SLEUTH),
- //LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(13, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(17, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(21, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(21, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(25, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(29, MOVE_ATTRACT),
- //LEVEL_UP_MOVE(31, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(31, MOVE_MOONBLAST),
LEVEL_UP_MOVE(35, MOVE_CHARM),
LEVEL_UP_MOVE(38, MOVE_FLAIL),
- //LEVEL_UP_MOVE(42, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(42, MOVE_MISTY_TERRAIN),
LEVEL_UP_MOVE(44, MOVE_SKILL_SWAP),
LEVEL_UP_MOVE(48, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(53, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(53, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(57, MOVE_REFLECT),
LEVEL_UP_MOVE(64, MOVE_PSYCH_UP),
LEVEL_UP_END
@@ -13943,18 +13944,18 @@ static const struct LevelUpMove sAromatisseLevelUpLearnset[] = {
static const struct LevelUpMove sSwirlixLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE),
LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS),
- //LEVEL_UP_MOVE(13, MOVE_ROUND),
+ LEVEL_UP_MOVE(13, MOVE_ROUND),
LEVEL_UP_MOVE(17, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE(21, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(26, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(31, MOVE_DRAINING_KISS),
- //LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL),
- //LEVEL_UP_MOVE(41, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(31, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(41, MOVE_COTTON_GUARD),
LEVEL_UP_MOVE(45, MOVE_WISH),
- //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(58, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(67, MOVE_SAFEGUARD),
LEVEL_UP_END
@@ -13963,20 +13964,20 @@ static const struct LevelUpMove sSwirlixLevelUpLearnset[] = {
static const struct LevelUpMove sSlurpuffLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
- //LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 8, MOVE_PLAY_NICE),
LEVEL_UP_MOVE(10, MOVE_FAKE_TEARS),
- //LEVEL_UP_MOVE(13, MOVE_ROUND),
+ LEVEL_UP_MOVE(13, MOVE_ROUND),
LEVEL_UP_MOVE(17, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE(21, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(26, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(31, MOVE_DRAINING_KISS),
- //LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL),
- //LEVEL_UP_MOVE(41, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(31, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(36, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(41, MOVE_COTTON_GUARD),
LEVEL_UP_MOVE(45, MOVE_WISH),
- //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(58, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(67, MOVE_SAFEGUARD),
LEVEL_UP_END
@@ -13987,19 +13988,19 @@ static const struct LevelUpMove sInkayLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
LEVEL_UP_MOVE( 4, MOVE_REFLECT),
- //LEVEL_UP_MOVE( 8, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE( 8, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(12, MOVE_SWAGGER),
LEVEL_UP_MOVE(13, MOVE_PSYWAVE),
- //LEVEL_UP_MOVE(15, MOVE_TOPSY_TURVY),
+ LEVEL_UP_MOVE(15, MOVE_TOPSY_TURVY),
LEVEL_UP_MOVE(18, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(21, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(23, MOVE_SWITCHEROO),
- //LEVEL_UP_MOVE(27, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(23, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE(27, MOVE_PAYBACK),
LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(35, MOVE_PLUCK),
- //LEVEL_UP_MOVE(39, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(35, MOVE_PLUCK),
+ LEVEL_UP_MOVE(39, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE(43, MOVE_SLASH),
- //LEVEL_UP_MOVE(46, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(46, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(48, MOVE_SUPERPOWER),
LEVEL_UP_END
};
@@ -14011,25 +14012,25 @@ static const struct LevelUpMove sMalamarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
LEVEL_UP_MOVE( 1, MOVE_REFLECT),
LEVEL_UP_MOVE( 4, MOVE_REFLECT),
- //LEVEL_UP_MOVE( 8, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE( 8, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(12, MOVE_SWAGGER),
LEVEL_UP_MOVE(13, MOVE_PSYWAVE),
- //LEVEL_UP_MOVE(15, MOVE_TOPSY_TURVY),
+ LEVEL_UP_MOVE(15, MOVE_TOPSY_TURVY),
LEVEL_UP_MOVE(18, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(21, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(23, MOVE_SWITCHEROO),
- //LEVEL_UP_MOVE(27, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(23, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE(27, MOVE_PAYBACK),
LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(35, MOVE_PLUCK),
- //LEVEL_UP_MOVE(39, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(35, MOVE_PLUCK),
+ LEVEL_UP_MOVE(39, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE(43, MOVE_SLASH),
- //LEVEL_UP_MOVE(46, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(46, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(48, MOVE_SUPERPOWER),
LEVEL_UP_END
};
static const struct LevelUpMove sBinacleLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 4, MOVE_WATER_GUN),
@@ -14038,20 +14039,20 @@ static const struct LevelUpMove sBinacleLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_SLASH),
LEVEL_UP_MOVE(18, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(20, MOVE_CLAMP),
- //LEVEL_UP_MOVE(24, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(24, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(32, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(32, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(37, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE(41, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(45, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE(41, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(45, MOVE_RAZOR_SHELL),
LEVEL_UP_MOVE(49, MOVE_CROSS_CHOP),
LEVEL_UP_END
};
static const struct LevelUpMove sBarbaracleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SKULL_BASH),
- //LEVEL_UP_MOVE( 1, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -14061,14 +14062,14 @@ static const struct LevelUpMove sBarbaracleLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_SLASH),
LEVEL_UP_MOVE(18, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(20, MOVE_CLAMP),
- //LEVEL_UP_MOVE(24, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(24, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(28, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(32, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(32, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(37, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE(44, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(48, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE(44, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(48, MOVE_RAZOR_SHELL),
LEVEL_UP_MOVE(55, MOVE_CROSS_CHOP),
- //LEVEL_UP_MOVE(60, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(60, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(65, MOVE_SKULL_BASH),
LEVEL_UP_END
};
@@ -14086,17 +14087,17 @@ static const struct LevelUpMove sSkrelpLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(28, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(32, MOVE_TOXIC),
- //LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(38, MOVE_SLUDGE_BOMB),
LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(49, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(49, MOVE_DRAGON_PULSE),
LEVEL_UP_END
};
static const struct LevelUpMove sDragalgeLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_TWISTER),
+ //LEVEL_UP_MOVE( 0, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -14110,11 +14111,11 @@ static const struct LevelUpMove sDragalgeLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(28, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(32, MOVE_TOXIC),
- //LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(35, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(38, MOVE_SLUDGE_BOMB),
LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(53, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(59, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(53, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(59, MOVE_DRAGON_TAIL),
LEVEL_UP_END
};
@@ -14129,18 +14130,18 @@ static const struct LevelUpMove sClauncherLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(30, MOVE_CRABHAMMER),
LEVEL_UP_MOVE(34, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(39, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(43, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(39, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(43, MOVE_AQUA_JET),
LEVEL_UP_MOVE(48, MOVE_MUDDY_WATER),
LEVEL_UP_END
};
static const struct LevelUpMove sClawitzerLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_AURA_SPHERE),
- //LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE),
- //LEVEL_UP_MOVE( 1, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE( 1, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE( 1, MOVE_SPLASH),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT),
@@ -14153,8 +14154,8 @@ static const struct LevelUpMove sClawitzerLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(30, MOVE_CRABHAMMER),
LEVEL_UP_MOVE(34, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(42, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(49, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(42, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(49, MOVE_AQUA_JET),
LEVEL_UP_MOVE(57, MOVE_MUDDY_WATER),
LEVEL_UP_END
};
@@ -14167,23 +14168,23 @@ static const struct LevelUpMove sHelioptileLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(17, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(22, MOVE_RAZOR_WIND),
- //LEVEL_UP_MOVE(25, MOVE_PARABOLIC_CHARGE),
+ LEVEL_UP_MOVE(25, MOVE_PARABOLIC_CHARGE),
LEVEL_UP_MOVE(31, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(35, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(40, MOVE_VOLT_SWITCH),
- //LEVEL_UP_MOVE(45, MOVE_ELECTRIFY),
+ LEVEL_UP_MOVE(35, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(40, MOVE_VOLT_SWITCH),
+ LEVEL_UP_MOVE(45, MOVE_ELECTRIFY),
LEVEL_UP_MOVE(49, MOVE_THUNDERBOLT),
LEVEL_UP_END
};
static const struct LevelUpMove sHelioliskLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
- //LEVEL_UP_MOVE( 1, MOVE_ELECTRIFY),
+ LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIFY),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_THUNDER),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
- //LEVEL_UP_MOVE( 1, MOVE_PARABOLIC_CHARGE),
+ LEVEL_UP_MOVE( 1, MOVE_PARABOLIC_CHARGE),
LEVEL_UP_END
};
@@ -14193,11 +14194,11 @@ static const struct LevelUpMove sTyruntLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_ROAR),
LEVEL_UP_MOVE(10, MOVE_STOMP),
LEVEL_UP_MOVE(12, MOVE_BIDE),
- //LEVEL_UP_MOVE(15, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(15, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(17, MOVE_BITE),
LEVEL_UP_MOVE(20, MOVE_CHARM),
LEVEL_UP_MOVE(26, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(34, MOVE_CRUNCH),
LEVEL_UP_MOVE(37, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(40, MOVE_THRASH),
@@ -14207,9 +14208,9 @@ static const struct LevelUpMove sTyruntLevelUpLearnset[] = {
};
static const struct LevelUpMove sTyrantrumLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE),
+ //LEVEL_UP_MOVE( 0, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_HEAD_SMASH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
@@ -14217,18 +14218,18 @@ static const struct LevelUpMove sTyrantrumLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_ROAR),
LEVEL_UP_MOVE(10, MOVE_STOMP),
LEVEL_UP_MOVE(12, MOVE_BIDE),
- //LEVEL_UP_MOVE(15, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(15, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(17, MOVE_BITE),
LEVEL_UP_MOVE(20, MOVE_CHARM),
LEVEL_UP_MOVE(26, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(34, MOVE_CRUNCH),
LEVEL_UP_MOVE(37, MOVE_DRAGON_CLAW),
LEVEL_UP_MOVE(42, MOVE_THRASH),
LEVEL_UP_MOVE(47, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(53, MOVE_HORN_DRILL),
- //LEVEL_UP_MOVE(58, MOVE_HEAD_SMASH),
- //LEVEL_UP_MOVE(68, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(58, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(68, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
@@ -14242,8 +14243,8 @@ static const struct LevelUpMove sAmauraLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_MIST),
LEVEL_UP_MOVE(20, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(26, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(30, MOVE_ROUND),
- //LEVEL_UP_MOVE(34, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(30, MOVE_ROUND),
+ LEVEL_UP_MOVE(34, MOVE_AVALANCHE),
LEVEL_UP_MOVE(38, MOVE_HAIL),
LEVEL_UP_MOVE(41, MOVE_NATURE_POWER),
LEVEL_UP_MOVE(44, MOVE_ENCORE),
@@ -14256,7 +14257,7 @@ static const struct LevelUpMove sAmauraLevelUpLearnset[] = {
static const struct LevelUpMove sAurorusLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_FREEZE_DRY),
- //LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
@@ -14268,8 +14269,8 @@ static const struct LevelUpMove sAurorusLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_MIST),
LEVEL_UP_MOVE(20, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(26, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(30, MOVE_ROUND),
- //LEVEL_UP_MOVE(34, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(30, MOVE_ROUND),
+ LEVEL_UP_MOVE(34, MOVE_AVALANCHE),
LEVEL_UP_MOVE(38, MOVE_HAIL),
LEVEL_UP_MOVE(43, MOVE_NATURE_POWER),
LEVEL_UP_MOVE(46, MOVE_ENCORE),
@@ -14282,21 +14283,21 @@ static const struct LevelUpMove sAurorusLevelUpLearnset[] = {
static const struct LevelUpMove sSylveonLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_SWIFT),
- //LEVEL_UP_MOVE(20, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(20, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(25, MOVE_SKILL_SWAP),
- //LEVEL_UP_MOVE(29, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(29, MOVE_MISTY_TERRAIN),
LEVEL_UP_MOVE(33, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(37, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(37, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(41, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(45, MOVE_PSYCH_UP),
LEVEL_UP_END
};
@@ -14304,20 +14305,20 @@ static const struct LevelUpMove sSylveonLevelUpLearnset[] = {
static const struct LevelUpMove sHawluchaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DETECT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 4, MOVE_KARATE_CHOP),
LEVEL_UP_MOVE( 8, MOVE_WING_ATTACK),
- //LEVEL_UP_MOVE(12, MOVE_ROOST),
+ LEVEL_UP_MOVE(12, MOVE_ROOST),
LEVEL_UP_MOVE(16, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(20, MOVE_ENCORE),
- //LEVEL_UP_MOVE(24, MOVE_FLING),
- //LEVEL_UP_MOVE(28, MOVE_FLYING_PRESS),
+ LEVEL_UP_MOVE(24, MOVE_FLING),
+ LEVEL_UP_MOVE(28, MOVE_FLYING_PRESS),
LEVEL_UP_MOVE(32, MOVE_BOUNCE),
LEVEL_UP_MOVE(36, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(40, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(44, MOVE_HIGH_JUMP_KICK),
LEVEL_UP_MOVE(48, MOVE_SKY_ATTACK),
- //LEVEL_UP_MOVE(55, MOVE_SKY_DROP),
+ LEVEL_UP_MOVE(55, MOVE_SKY_DROP),
LEVEL_UP_MOVE(60, MOVE_SWORDS_DANCE),
LEVEL_UP_END
};
@@ -14328,17 +14329,17 @@ static const struct LevelUpMove sDedenneLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE(11, MOVE_CHARGE),
LEVEL_UP_MOVE(14, MOVE_CHARM),
- //LEVEL_UP_MOVE(17, MOVE_PARABOLIC_CHARGE),
- //LEVEL_UP_MOVE(20, MOVE_NUZZLE),
+ LEVEL_UP_MOVE(17, MOVE_PARABOLIC_CHARGE),
+ LEVEL_UP_MOVE(20, MOVE_NUZZLE),
LEVEL_UP_MOVE(23, MOVE_THUNDER_WAVE),
- //LEVEL_UP_MOVE(26, MOVE_VOLT_SWITCH),
+ LEVEL_UP_MOVE(26, MOVE_VOLT_SWITCH),
LEVEL_UP_MOVE(30, MOVE_REST),
LEVEL_UP_MOVE(31, MOVE_SNORE),
- //LEVEL_UP_MOVE(34, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE(39, MOVE_ENTRAINMENT),
- //LEVEL_UP_MOVE(42, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(34, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(39, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(42, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(45, MOVE_THUNDER),
- //LEVEL_UP_MOVE(50, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(50, MOVE_DISCHARGE),
LEVEL_UP_END
};
@@ -14347,16 +14348,16 @@ static const struct LevelUpMove sCarbinkLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 5, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 8, MOVE_SHARPEN),
- //LEVEL_UP_MOVE(12, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(12, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(18, MOVE_REFLECT),
- //LEVEL_UP_MOVE(21, MOVE_STEALTH_ROCK),
- //LEVEL_UP_MOVE(27, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(21, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(27, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(31, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(35, MOVE_FLAIL),
LEVEL_UP_MOVE(40, MOVE_SKILL_SWAP),
- //LEVEL_UP_MOVE(46, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(50, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(46, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(50, MOVE_MOONBLAST),
LEVEL_UP_MOVE(60, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(70, MOVE_SAFEGUARD),
LEVEL_UP_END
@@ -14373,7 +14374,7 @@ static const struct LevelUpMove sGoomyLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_FLAIL),
LEVEL_UP_MOVE(32, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(38, MOVE_MUDDY_WATER),
- //LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(42, MOVE_DRAGON_PULSE),
LEVEL_UP_END
};
@@ -14389,15 +14390,15 @@ static const struct LevelUpMove sSliggooLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_FLAIL),
LEVEL_UP_MOVE(32, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(38, MOVE_MUDDY_WATER),
- //LEVEL_UP_MOVE(47, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(47, MOVE_DRAGON_PULSE),
LEVEL_UP_END
};
static const struct LevelUpMove sGoodraLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_AQUA_TAIL),
- //LEVEL_UP_MOVE( 1, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE( 1, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
@@ -14410,29 +14411,29 @@ static const struct LevelUpMove sGoodraLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_FLAIL),
LEVEL_UP_MOVE(32, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(38, MOVE_MUDDY_WATER),
- //LEVEL_UP_MOVE(47, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(50, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(47, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(50, MOVE_POWER_WHIP),
LEVEL_UP_MOVE(55, MOVE_OUTRAGE),
LEVEL_UP_END
};
static const struct LevelUpMove sKlefkiLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_LOCK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 5, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 8, MOVE_ASTONISH),
LEVEL_UP_MOVE(12, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(15, MOVE_SPIKES),
- //LEVEL_UP_MOVE(18, MOVE_DRAINING_KISS),
- //LEVEL_UP_MOVE(23, MOVE_CRAFTY_SHIELD),
- //LEVEL_UP_MOVE(27, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(18, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(23, MOVE_CRAFTY_SHIELD),
+ LEVEL_UP_MOVE(27, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(32, MOVE_TORMENT),
- //LEVEL_UP_MOVE(34, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(34, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(36, MOVE_IMPRISON),
LEVEL_UP_MOVE(40, MOVE_RECYCLE),
- //LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(44, MOVE_MAGIC_ROOM),
- //LEVEL_UP_MOVE(50, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(44, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE(50, MOVE_HEAL_BLOCK),
LEVEL_UP_END
};
@@ -14446,18 +14447,18 @@ static const struct LevelUpMove sPhantumpLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(28, MOVE_CURSE),
LEVEL_UP_MOVE(31, MOVE_WILL_O_WISP),
- //LEVEL_UP_MOVE(35, MOVE_FORESTS_CURSE),
+ LEVEL_UP_MOVE(35, MOVE_FORESTS_CURSE),
LEVEL_UP_MOVE(39, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE),
- //LEVEL_UP_MOVE(49, MOVE_WOOD_HAMMER),
- //LEVEL_UP_MOVE(54, MOVE_HORN_LEECH),
+ LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(49, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(54, MOVE_HORN_LEECH),
LEVEL_UP_END
};
static const struct LevelUpMove sTrevenantLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
- //LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW),
- //LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -14469,11 +14470,11 @@ static const struct LevelUpMove sTrevenantLevelUpLearnset[] = {
LEVEL_UP_MOVE(23, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(28, MOVE_CURSE),
LEVEL_UP_MOVE(31, MOVE_WILL_O_WISP),
- //LEVEL_UP_MOVE(35, MOVE_FORESTS_CURSE),
+ LEVEL_UP_MOVE(35, MOVE_FORESTS_CURSE),
LEVEL_UP_MOVE(39, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE),
- //LEVEL_UP_MOVE(49, MOVE_WOOD_HAMMER),
- //LEVEL_UP_MOVE(54, MOVE_HORN_LEECH),
+ LEVEL_UP_MOVE(45, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(49, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(54, MOVE_HORN_LEECH),
LEVEL_UP_END
};
@@ -14482,41 +14483,41 @@ static const struct LevelUpMove sPumpkabooLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 4, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE( 6, MOVE_TRICK_OR_TREAT),
- //LEVEL_UP_MOVE(11, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE( 6, MOVE_TRICK_OR_TREAT),
+ LEVEL_UP_MOVE(11, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(16, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(20, MOVE_LEECH_SEED),
- //LEVEL_UP_MOVE(23, MOVE_TRICK_OR_TREAT),
+ LEVEL_UP_MOVE(23, MOVE_TRICK_OR_TREAT),
LEVEL_UP_MOVE(26, MOVE_BULLET_SEED),
- //LEVEL_UP_MOVE(30, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(30, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL),
- //LEVEL_UP_MOVE(40, MOVE_TRICK_OR_TREAT),
+ LEVEL_UP_MOVE(40, MOVE_TRICK_OR_TREAT),
LEVEL_UP_MOVE(42, MOVE_PAIN_SPLIT),
- //LEVEL_UP_MOVE(48, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(48, MOVE_SEED_BOMB),
LEVEL_UP_END
};
static const struct LevelUpMove sGourgeistLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EXPLOSION),
- //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 4, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE( 6, MOVE_TRICK_OR_TREAT),
- //LEVEL_UP_MOVE(11, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE( 6, MOVE_TRICK_OR_TREAT),
+ LEVEL_UP_MOVE(11, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(16, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(20, MOVE_LEECH_SEED),
- //LEVEL_UP_MOVE(23, MOVE_TRICK_OR_TREAT),
+ LEVEL_UP_MOVE(23, MOVE_TRICK_OR_TREAT),
LEVEL_UP_MOVE(26, MOVE_BULLET_SEED),
- //LEVEL_UP_MOVE(30, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(30, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL),
- //LEVEL_UP_MOVE(40, MOVE_TRICK_OR_TREAT),
+ LEVEL_UP_MOVE(40, MOVE_TRICK_OR_TREAT),
LEVEL_UP_MOVE(42, MOVE_PAIN_SPLIT),
- //LEVEL_UP_MOVE(48, MOVE_SEED_BOMB),
- //LEVEL_UP_MOVE(57, MOVE_PHANTOM_FORCE),
- //LEVEL_UP_MOVE(63, MOVE_TRICK_OR_TREAT),
+ LEVEL_UP_MOVE(48, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(57, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(63, MOVE_TRICK_OR_TREAT),
LEVEL_UP_MOVE(70, MOVE_EXPLOSION),
LEVEL_UP_END
};
@@ -14530,10 +14531,10 @@ static const struct LevelUpMove sBergmiteLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(20, MOVE_SHARPEN),
LEVEL_UP_MOVE(22, MOVE_CURSE),
- //LEVEL_UP_MOVE(26, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(26, MOVE_ICE_FANG),
LEVEL_UP_MOVE(30, MOVE_ICE_BALL),
LEVEL_UP_MOVE(35, MOVE_RAPID_SPIN),
- //LEVEL_UP_MOVE(39, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(39, MOVE_AVALANCHE),
LEVEL_UP_MOVE(43, MOVE_BLIZZARD),
LEVEL_UP_MOVE(47, MOVE_RECOVER),
LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE),
@@ -14541,9 +14542,9 @@ static const struct LevelUpMove sBergmiteLevelUpLearnset[] = {
};
static const struct LevelUpMove sAvaluggLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BODY_SLAM),
+ //LEVEL_UP_MOVE( 0, MOVE_BODY_SLAM),
LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_SKULL_BASH),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
@@ -14556,10 +14557,10 @@ static const struct LevelUpMove sAvaluggLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(20, MOVE_SHARPEN),
LEVEL_UP_MOVE(22, MOVE_CURSE),
- //LEVEL_UP_MOVE(26, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(26, MOVE_ICE_FANG),
LEVEL_UP_MOVE(30, MOVE_ICE_BALL),
LEVEL_UP_MOVE(35, MOVE_RAPID_SPIN),
- //LEVEL_UP_MOVE(42, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(42, MOVE_AVALANCHE),
LEVEL_UP_MOVE(46, MOVE_BLIZZARD),
LEVEL_UP_MOVE(51, MOVE_RECOVER),
LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE),
@@ -14578,20 +14579,20 @@ static const struct LevelUpMove sNoibatLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(18, MOVE_AGILITY),
LEVEL_UP_MOVE(23, MOVE_AIR_CUTTER),
- //LEVEL_UP_MOVE(27, MOVE_ROOST),
+ LEVEL_UP_MOVE(27, MOVE_ROOST),
LEVEL_UP_MOVE(31, MOVE_RAZOR_WIND),
- //LEVEL_UP_MOVE(35, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(35, MOVE_TAILWIND),
LEVEL_UP_MOVE(40, MOVE_WHIRLWIND),
LEVEL_UP_MOVE(43, MOVE_SUPER_FANG),
- //LEVEL_UP_MOVE(48, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(58, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(48, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(58, MOVE_HURRICANE),
LEVEL_UP_END
};
static const struct LevelUpMove sNoivernLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_BOOMBURST),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
+ LEVEL_UP_MOVE( 1, MOVE_BOOMBURST),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
LEVEL_UP_MOVE( 1, MOVE_SCREECH),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -14603,57 +14604,57 @@ static const struct LevelUpMove sNoivernLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(18, MOVE_AGILITY),
LEVEL_UP_MOVE(23, MOVE_AIR_CUTTER),
- //LEVEL_UP_MOVE(27, MOVE_ROOST),
+ LEVEL_UP_MOVE(27, MOVE_ROOST),
LEVEL_UP_MOVE(31, MOVE_RAZOR_WIND),
- //LEVEL_UP_MOVE(35, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(35, MOVE_TAILWIND),
LEVEL_UP_MOVE(40, MOVE_WHIRLWIND),
LEVEL_UP_MOVE(43, MOVE_SUPER_FANG),
- //LEVEL_UP_MOVE(53, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(62, MOVE_HURRICANE),
- //LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(75, MOVE_BOOMBURST),
+ LEVEL_UP_MOVE(53, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(62, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(75, MOVE_BOOMBURST),
LEVEL_UP_END
};
static const struct LevelUpMove sXerneasLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE( 1, MOVE_INGRAIN),
LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE( 5, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(10, MOVE_AURORA_BEAM),
- //LEVEL_UP_MOVE(18, MOVE_GRAVITY),
- //LEVEL_UP_MOVE(26, MOVE_GEOMANCY),
- //LEVEL_UP_MOVE(35, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(18, MOVE_GRAVITY),
+ LEVEL_UP_MOVE(26, MOVE_GEOMANCY),
+ LEVEL_UP_MOVE(35, MOVE_MOONBLAST),
LEVEL_UP_MOVE(44, MOVE_MEGAHORN),
- //LEVEL_UP_MOVE(51, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(55, MOVE_HORN_LEECH),
+ LEVEL_UP_MOVE(51, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(55, MOVE_HORN_LEECH),
LEVEL_UP_MOVE(59, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(63, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(63, MOVE_MISTY_TERRAIN),
LEVEL_UP_MOVE(72, MOVE_NATURE_POWER),
- //LEVEL_UP_MOVE(80, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(80, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT),
LEVEL_UP_MOVE(93, MOVE_OUTRAGE),
LEVEL_UP_END
};
static const struct LevelUpMove sYveltalLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
+ LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
- //LEVEL_UP_MOVE( 1, MOVE_ROOST),
+ LEVEL_UP_MOVE( 1, MOVE_ROOST),
LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM),
- //LEVEL_UP_MOVE(10, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(18, MOVE_SNARL),
- //LEVEL_UP_MOVE(26, MOVE_OBLIVION_WING),
+ LEVEL_UP_MOVE(10, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(18, MOVE_SNARL),
+ LEVEL_UP_MOVE(26, MOVE_OBLIVION_WING),
LEVEL_UP_MOVE(35, MOVE_DISABLE),
- //LEVEL_UP_MOVE(44, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(51, MOVE_FOUL_PLAY),
- //LEVEL_UP_MOVE(55, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(44, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(51, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(55, MOVE_PHANTOM_FORCE),
LEVEL_UP_MOVE(59, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(63, MOVE_DRAGON_RUSH),
- //LEVEL_UP_MOVE(72, MOVE_FOCUS_BLAST),
- //LEVEL_UP_MOVE(80, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(63, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(72, MOVE_FOCUS_BLAST),
+ LEVEL_UP_MOVE(80, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(88, MOVE_HYPER_BEAM),
LEVEL_UP_MOVE(93, MOVE_SKY_ATTACK),
LEVEL_UP_END
@@ -14661,20 +14662,20 @@ static const struct LevelUpMove sYveltalLevelUpLearnset[] = {
static const struct LevelUpMove sZygardeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GLARE),
- //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 5, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(10, MOVE_DIG),
LEVEL_UP_MOVE(18, MOVE_BIND),
- //LEVEL_UP_MOVE(26, MOVE_LANDS_WRATH),
+ LEVEL_UP_MOVE(26, MOVE_LANDS_WRATH),
LEVEL_UP_MOVE(35, MOVE_SANDSTORM),
LEVEL_UP_MOVE(44, MOVE_HAZE),
LEVEL_UP_MOVE(51, MOVE_CRUNCH),
LEVEL_UP_MOVE(55, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(59, MOVE_CAMOUFLAGE),
- //LEVEL_UP_MOVE(63, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(72, MOVE_COIL),
+ LEVEL_UP_MOVE(63, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(72, MOVE_COIL),
LEVEL_UP_MOVE(80, MOVE_OUTRAGE),
LEVEL_UP_END
};
@@ -14684,134 +14685,134 @@ static const struct LevelUpMove sDiancieLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 5, MOVE_SHARPEN),
- //LEVEL_UP_MOVE( 8, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE( 8, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(12, MOVE_REFLECT),
- //LEVEL_UP_MOVE(18, MOVE_STEALTH_ROCK),
- //LEVEL_UP_MOVE(21, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(18, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(21, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(27, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(31, MOVE_FLAIL),
LEVEL_UP_MOVE(35, MOVE_SKILL_SWAP),
- //LEVEL_UP_MOVE(40, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE(46, MOVE_TRICK_ROOM),
- //LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(50, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(50, MOVE_DIAMOND_STORM),
+ LEVEL_UP_MOVE(40, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(46, MOVE_TRICK_ROOM),
+ LEVEL_UP_MOVE(49, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(50, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(50, MOVE_DIAMOND_STORM),
LEVEL_UP_MOVE(60, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(70, MOVE_SAFEGUARD),
LEVEL_UP_END
};
static const struct LevelUpMove sHoopaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HYPERSPACE_HOLE),
+ LEVEL_UP_MOVE( 1, MOVE_HYPERSPACE_HOLE),
LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 6, MOVE_ASTONISH),
LEVEL_UP_MOVE(10, MOVE_MAGIC_COAT),
LEVEL_UP_MOVE(15, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(19, MOVE_PSYBEAM),
LEVEL_UP_MOVE(25, MOVE_SKILL_SWAP),
- //LEVEL_UP_MOVE(29, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(29, MOVE_GUARD_SPLIT),
- //LEVEL_UP_MOVE(35, MOVE_PHANTOM_FORCE),
- //LEVEL_UP_MOVE(46, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(50, MOVE_WONDER_ROOM),
- //LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM),
+ LEVEL_UP_MOVE(29, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(29, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(35, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(46, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(50, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM),
LEVEL_UP_MOVE(55, MOVE_SHADOW_BALL),
- //LEVEL_UP_MOVE(68, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(68, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(75, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(85, MOVE_HYPERSPACE_HOLE),
+ LEVEL_UP_MOVE(85, MOVE_HYPERSPACE_HOLE),
LEVEL_UP_END
};
static const struct LevelUpMove sVolcanionLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_STEAM_ERUPTION),
- //LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE( 1, MOVE_STEAM_ERUPTION),
+ LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE( 8, MOVE_MIST),
LEVEL_UP_MOVE(11, MOVE_HAZE),
- //LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(21, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(28, MOVE_STOMP),
- //LEVEL_UP_MOVE(32, MOVE_SCALD),
+ LEVEL_UP_MOVE(32, MOVE_SCALD),
LEVEL_UP_MOVE(40, MOVE_WEATHER_BALL),
LEVEL_UP_MOVE(46, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(58, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(58, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE(65, MOVE_OVERHEAT),
LEVEL_UP_MOVE(76, MOVE_EXPLOSION),
- //LEVEL_UP_MOVE(85, MOVE_STEAM_ERUPTION),
+ LEVEL_UP_MOVE(85, MOVE_STEAM_ERUPTION),
LEVEL_UP_END
};
static const struct LevelUpMove sRowletLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
+ LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 4, MOVE_GROWL),
LEVEL_UP_MOVE( 8, MOVE_PECK),
LEVEL_UP_MOVE(11, MOVE_ASTONISH),
LEVEL_UP_MOVE(14, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(18, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(22, MOVE_PLUCK),
+ LEVEL_UP_MOVE(22, MOVE_PLUCK),
LEVEL_UP_MOVE(25, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(29, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(32, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(32, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(36, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE(39, MOVE_FEATHER_DANCE),
- //LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(43, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(46, MOVE_NASTY_PLOT),
LEVEL_UP_END
};
static const struct LevelUpMove sDartrixLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
+ LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 4, MOVE_GROWL),
LEVEL_UP_MOVE( 8, MOVE_PECK),
LEVEL_UP_MOVE(11, MOVE_ASTONISH),
LEVEL_UP_MOVE(14, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(19, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(24, MOVE_PLUCK),
+ LEVEL_UP_MOVE(24, MOVE_PLUCK),
LEVEL_UP_MOVE(28, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(33, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(37, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(37, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(42, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE(46, MOVE_FEATHER_DANCE),
- //LEVEL_UP_MOVE(51, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE(55, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(51, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(55, MOVE_NASTY_PLOT),
LEVEL_UP_END
};
static const struct LevelUpMove sDecidueyeLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SPIRIT_SHACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_SPIRIT_SHACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
- //LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
- //LEVEL_UP_MOVE( 1, MOVE_U_TURN),
- //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_SPIRIT_SHACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE( 1, MOVE_U_TURN),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
+ LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 4, MOVE_GROWL),
LEVEL_UP_MOVE( 8, MOVE_PECK),
LEVEL_UP_MOVE(11, MOVE_ASTONISH),
LEVEL_UP_MOVE(14, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND),
+ LEVEL_UP_MOVE(16, MOVE_OMINOUS_WIND),
LEVEL_UP_MOVE(19, MOVE_FORESIGHT),
- //LEVEL_UP_MOVE(24, MOVE_PLUCK),
+ LEVEL_UP_MOVE(24, MOVE_PLUCK),
LEVEL_UP_MOVE(28, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(33, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(38, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(38, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(44, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE(49, MOVE_FEATHER_DANCE),
- //LEVEL_UP_MOVE(55, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE(60, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(55, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(60, MOVE_NASTY_PLOT),
LEVEL_UP_END
};
@@ -14821,7 +14822,7 @@ static const struct LevelUpMove sLittenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_GROWL),
LEVEL_UP_MOVE( 8, MOVE_LICK),
LEVEL_UP_MOVE(11, MOVE_LEER),
- //LEVEL_UP_MOVE(14, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(14, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(18, MOVE_ROAR),
LEVEL_UP_MOVE(22, MOVE_BITE),
@@ -14830,7 +14831,7 @@ static const struct LevelUpMove sLittenLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_THRASH),
LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(39, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(43, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(43, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE(46, MOVE_OUTRAGE),
LEVEL_UP_END
};
@@ -14843,7 +14844,7 @@ static const struct LevelUpMove sTorracatLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_GROWL),
LEVEL_UP_MOVE( 8, MOVE_LICK),
LEVEL_UP_MOVE(11, MOVE_LEER),
- //LEVEL_UP_MOVE(14, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(14, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(19, MOVE_ROAR),
LEVEL_UP_MOVE(24, MOVE_BITE),
@@ -14852,16 +14853,16 @@ static const struct LevelUpMove sTorracatLevelUpLearnset[] = {
LEVEL_UP_MOVE(37, MOVE_THRASH),
LEVEL_UP_MOVE(42, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(46, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(51, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(51, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE(55, MOVE_OUTRAGE),
LEVEL_UP_END
};
static const struct LevelUpMove sIncineroarLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DARKEST_LARIAT),
- //LEVEL_UP_MOVE( 1, MOVE_DARKEST_LARIAT),
+ LEVEL_UP_MOVE( 1, MOVE_DARKEST_LARIAT),
LEVEL_UP_MOVE( 1, MOVE_BULK_UP),
- //LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP),
+ LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -14869,7 +14870,7 @@ static const struct LevelUpMove sIncineroarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_GROWL),
LEVEL_UP_MOVE( 8, MOVE_LICK),
LEVEL_UP_MOVE(11, MOVE_LEER),
- //LEVEL_UP_MOVE(14, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE(14, MOVE_FIRE_FANG),
LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(19, MOVE_ROAR),
LEVEL_UP_MOVE(24, MOVE_BITE),
@@ -14878,7 +14879,7 @@ static const struct LevelUpMove sIncineroarLevelUpLearnset[] = {
LEVEL_UP_MOVE(38, MOVE_THRASH),
LEVEL_UP_MOVE(44, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(49, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(55, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(55, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE(60, MOVE_OUTRAGE),
LEVEL_UP_MOVE(66, MOVE_CROSS_CHOP),
LEVEL_UP_END
@@ -14888,19 +14889,19 @@ static const struct LevelUpMove sPopplioLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 4, MOVE_GROWL),
- //LEVEL_UP_MOVE( 8, MOVE_DISARMING_VOICE),
- //LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES),
- //LEVEL_UP_MOVE(14, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 8, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(14, MOVE_AQUA_JET),
LEVEL_UP_MOVE(16, MOVE_ICY_WIND),
LEVEL_UP_MOVE(18, MOVE_ENCORE),
LEVEL_UP_MOVE(22, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(25, MOVE_SING),
LEVEL_UP_MOVE(29, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(32, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(36, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(39, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(36, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(39, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(46, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(46, MOVE_MISTY_TERRAIN),
LEVEL_UP_END
};
@@ -14908,56 +14909,56 @@ static const struct LevelUpMove sBrionneLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE( 4, MOVE_GROWL),
- //LEVEL_UP_MOVE( 8, MOVE_DISARMING_VOICE),
- //LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES),
- //LEVEL_UP_MOVE(14, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 8, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(14, MOVE_AQUA_JET),
LEVEL_UP_MOVE(16, MOVE_ICY_WIND),
LEVEL_UP_MOVE(19, MOVE_ENCORE),
LEVEL_UP_MOVE(24, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(28, MOVE_SING),
LEVEL_UP_MOVE(33, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(37, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(42, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(46, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(42, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(46, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(55, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(55, MOVE_MISTY_TERRAIN),
LEVEL_UP_END
};
static const struct LevelUpMove sPrimarinaLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SPARKLING_ARIA),
- //LEVEL_UP_MOVE( 1, MOVE_SPARKLING_ARIA),
+ LEVEL_UP_MOVE( 1, MOVE_SPARKLING_ARIA),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE( 4, MOVE_GROWL),
- //LEVEL_UP_MOVE( 9, MOVE_DISARMING_VOICE),
- //LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES),
- //LEVEL_UP_MOVE(14, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 9, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(11, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(14, MOVE_AQUA_JET),
LEVEL_UP_MOVE(16, MOVE_ICY_WIND),
LEVEL_UP_MOVE(19, MOVE_ENCORE),
LEVEL_UP_MOVE(24, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(28, MOVE_SING),
LEVEL_UP_MOVE(33, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(38, MOVE_HYPER_VOICE),
- //LEVEL_UP_MOVE(44, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(49, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(44, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(49, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(55, MOVE_HYDRO_PUMP),
- //LEVEL_UP_MOVE(60, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(60, MOVE_MISTY_TERRAIN),
LEVEL_UP_END
};
static const struct LevelUpMove sPikipekLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 3, MOVE_GROWL),
- //LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE(13, MOVE_SUPERSONIC),
- //LEVEL_UP_MOVE(15, MOVE_PLUCK),
- //LEVEL_UP_MOVE(19, MOVE_ROOST),
+ LEVEL_UP_MOVE(15, MOVE_PLUCK),
+ LEVEL_UP_MOVE(19, MOVE_ROOST),
LEVEL_UP_MOVE(21, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(25, MOVE_SCREECH),
LEVEL_UP_MOVE(27, MOVE_DRILL_PECK),
@@ -14971,14 +14972,14 @@ static const struct LevelUpMove sTrumbeakLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE( 3, MOVE_GROWL),
- //LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE(13, MOVE_SUPERSONIC),
- //LEVEL_UP_MOVE(16, MOVE_PLUCK),
- //LEVEL_UP_MOVE(21, MOVE_ROOST),
+ LEVEL_UP_MOVE(16, MOVE_PLUCK),
+ LEVEL_UP_MOVE(21, MOVE_ROOST),
LEVEL_UP_MOVE(24, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(29, MOVE_SCREECH),
LEVEL_UP_MOVE(32, MOVE_DRILL_PECK),
@@ -14990,18 +14991,18 @@ static const struct LevelUpMove sTrumbeakLevelUpLearnset[] = {
static const struct LevelUpMove sToucannonLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_BEAK_BLAST),
- //LEVEL_UP_MOVE( 1, MOVE_BEAK_BLAST),
+ LEVEL_UP_MOVE( 1, MOVE_BEAK_BLAST),
LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE( 3, MOVE_GROWL),
- //LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE(13, MOVE_SUPERSONIC),
- //LEVEL_UP_MOVE(16, MOVE_PLUCK),
- //LEVEL_UP_MOVE(21, MOVE_ROOST),
+ LEVEL_UP_MOVE(16, MOVE_PLUCK),
+ LEVEL_UP_MOVE(21, MOVE_ROOST),
LEVEL_UP_MOVE(24, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(30, MOVE_SCREECH),
LEVEL_UP_MOVE(34, MOVE_DRILL_PECK),
@@ -15059,17 +15060,17 @@ static const struct LevelUpMove sGrubbinLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(10, MOVE_BITE),
- //LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
LEVEL_UP_MOVE(16, MOVE_SPARK),
- //LEVEL_UP_MOVE(19, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(19, MOVE_ACROBATICS),
LEVEL_UP_MOVE(22, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(25, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(25, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(28, MOVE_DIG),
LEVEL_UP_END
};
static const struct LevelUpMove sCharjabugLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_CHARGE),
+ //LEVEL_UP_MOVE( 0, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
@@ -15078,21 +15079,21 @@ static const struct LevelUpMove sCharjabugLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(10, MOVE_BITE),
- //LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
LEVEL_UP_MOVE(16, MOVE_SPARK),
- //LEVEL_UP_MOVE(19, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(19, MOVE_ACROBATICS),
LEVEL_UP_MOVE(25, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(31, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(31, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(37, MOVE_DIG),
- //LEVEL_UP_MOVE(43, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(43, MOVE_DISCHARGE),
LEVEL_UP_MOVE(49, MOVE_IRON_DEFENSE),
LEVEL_UP_END
};
static const struct LevelUpMove sVikavoltLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_THUNDERBOLT),
+ //LEVEL_UP_MOVE( 0, MOVE_THUNDERBOLT),
LEVEL_UP_MOVE( 1, MOVE_THUNDERBOLT),
- //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
@@ -15101,11 +15102,11 @@ static const struct LevelUpMove sVikavoltLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(10, MOVE_BITE),
- //LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
LEVEL_UP_MOVE(16, MOVE_SPARK),
- //LEVEL_UP_MOVE(19, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE(19, MOVE_ACROBATICS),
LEVEL_UP_MOVE(25, MOVE_GUILLOTINE),
- //LEVEL_UP_MOVE(31, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(31, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(37, MOVE_DIG),
LEVEL_UP_MOVE(41, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(49, MOVE_AGILITY),
@@ -15118,19 +15119,19 @@ static const struct LevelUpMove sCrabrawlerLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_LEER),
LEVEL_UP_MOVE(13, MOVE_PURSUIT),
LEVEL_UP_MOVE(17, MOVE_BUBBLE_BEAM),
- //LEVEL_UP_MOVE(22, MOVE_POWER_UP_PUNCH),
+ LEVEL_UP_MOVE(22, MOVE_POWER_UP_PUNCH),
LEVEL_UP_MOVE(25, MOVE_DIZZY_PUNCH),
- //LEVEL_UP_MOVE(29, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(29, MOVE_PAYBACK),
LEVEL_UP_MOVE(33, MOVE_REVERSAL),
LEVEL_UP_MOVE(37, MOVE_CRABHAMMER),
LEVEL_UP_MOVE(42, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(45, MOVE_DYNAMIC_PUNCH),
- //LEVEL_UP_MOVE(49, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(49, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
static const struct LevelUpMove sCrabominableLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ICE_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
@@ -15140,14 +15141,14 @@ static const struct LevelUpMove sCrabominableLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_LEER),
LEVEL_UP_MOVE(13, MOVE_PURSUIT),
LEVEL_UP_MOVE(17, MOVE_BUBBLE_BEAM),
- //LEVEL_UP_MOVE(22, MOVE_POWER_UP_PUNCH),
+ LEVEL_UP_MOVE(22, MOVE_POWER_UP_PUNCH),
LEVEL_UP_MOVE(25, MOVE_DIZZY_PUNCH),
- //LEVEL_UP_MOVE(29, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(29, MOVE_AVALANCHE),
LEVEL_UP_MOVE(33, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(37, MOVE_ICE_HAMMER),
+ LEVEL_UP_MOVE(37, MOVE_ICE_HAMMER),
LEVEL_UP_MOVE(42, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(45, MOVE_DYNAMIC_PUNCH),
- //LEVEL_UP_MOVE(49, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(49, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
@@ -15161,48 +15162,48 @@ static const struct LevelUpMove sOricorioLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(23, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE(26, MOVE_TEETER_DANCE),
- //LEVEL_UP_MOVE(30, MOVE_ROOST),
- //LEVEL_UP_MOVE(33, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(40, MOVE_REVELATION_DANCE),
+ LEVEL_UP_MOVE(30, MOVE_ROOST),
+ LEVEL_UP_MOVE(33, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(36, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(40, MOVE_REVELATION_DANCE),
LEVEL_UP_MOVE(43, MOVE_MIRROR_MOVE),
LEVEL_UP_MOVE(46, MOVE_AGILITY),
- //LEVEL_UP_MOVE(50, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(50, MOVE_HURRICANE),
LEVEL_UP_END
};
static const struct LevelUpMove sCutieflyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- //LEVEL_UP_MOVE( 4, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 4, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE),
- //LEVEL_UP_MOVE(10, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(10, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(13, MOVE_SILVER_WIND),
- //LEVEL_UP_MOVE(16, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(16, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(21, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(26, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(31, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE(26, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(31, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(36, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(41, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(41, MOVE_QUIVER_DANCE),
LEVEL_UP_END
};
static const struct LevelUpMove sRibombeeLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_POLLEN_PUFF),
- //LEVEL_UP_MOVE( 1, MOVE_POLLEN_PUFF),
+ LEVEL_UP_MOVE( 1, MOVE_POLLEN_PUFF),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
- //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
- //LEVEL_UP_MOVE( 4, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE( 4, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE),
- //LEVEL_UP_MOVE(10, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(10, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(13, MOVE_SILVER_WIND),
- //LEVEL_UP_MOVE(16, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(16, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(21, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(42, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(49, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(49, MOVE_QUIVER_DANCE),
LEVEL_UP_END
};
@@ -15216,19 +15217,19 @@ static const struct LevelUpMove sRockruffLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(23, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(26, MOVE_ROAR),
- //LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(37, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(40, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
- //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sLycanrocLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_ACCELEROCK),
- //LEVEL_UP_MOVE( 1, MOVE_ACCELEROCK),
- //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_ACCELEROCK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -15241,12 +15242,12 @@ static const struct LevelUpMove sLycanrocLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(23, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(26, MOVE_ROAR),
- //LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(37, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(40, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
- //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
LEVEL_UP_END
};
@@ -15255,15 +15256,15 @@ static const struct LevelUpMove sWishiwashiLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 6, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 9, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(14, MOVE_BRINE),
- //LEVEL_UP_MOVE(17, MOVE_AQUA_RING),
- //LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK),
+ LEVEL_UP_MOVE(14, MOVE_BRINE),
+ LEVEL_UP_MOVE(17, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(22, MOVE_TEARFUL_LOOK),
LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(30, MOVE_DIVE),
LEVEL_UP_MOVE(33, MOVE_BEAT_UP),
- //LEVEL_UP_MOVE(38, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(38, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(41, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(46, MOVE_SOAK),
+ LEVEL_UP_MOVE(46, MOVE_SOAK),
LEVEL_UP_MOVE(49, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(54, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -15273,52 +15274,52 @@ static const struct LevelUpMove sMareanieLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
LEVEL_UP_MOVE( 5, MOVE_PECK),
LEVEL_UP_MOVE( 9, MOVE_BITE),
- //LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES),
- //LEVEL_UP_MOVE(17, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(17, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(21, MOVE_TOXIC),
- //LEVEL_UP_MOVE(25, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(25, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(29, MOVE_SPIKE_CANNON),
LEVEL_UP_MOVE(33, MOVE_RECOVER),
- //LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(41, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(41, MOVE_VENOM_DRENCH),
LEVEL_UP_MOVE(45, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(49, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(49, MOVE_LIQUIDATION),
LEVEL_UP_END
};
static const struct LevelUpMove sToxapexLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_BANEFUL_BUNKER),
- //LEVEL_UP_MOVE( 1, MOVE_BANEFUL_BUNKER),
+ LEVEL_UP_MOVE( 1, MOVE_BANEFUL_BUNKER),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
- //LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE( 5, MOVE_PECK),
LEVEL_UP_MOVE( 9, MOVE_BITE),
- //LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES),
- //LEVEL_UP_MOVE(17, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(13, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(17, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(21, MOVE_TOXIC),
- //LEVEL_UP_MOVE(25, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(25, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(29, MOVE_SPIKE_CANNON),
LEVEL_UP_MOVE(33, MOVE_RECOVER),
- //LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(44, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(44, MOVE_VENOM_DRENCH),
LEVEL_UP_MOVE(51, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(58, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(58, MOVE_LIQUIDATION),
LEVEL_UP_END
};
static const struct LevelUpMove sMudbrayLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
LEVEL_UP_MOVE( 3, MOVE_MUD_SPORT),
- //LEVEL_UP_MOVE( 8, MOVE_ROTOTILLER),
- //LEVEL_UP_MOVE(10, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 8, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE(10, MOVE_BULLDOZE),
LEVEL_UP_MOVE(15, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(17, MOVE_STOMP),
LEVEL_UP_MOVE(22, MOVE_BIDE),
- //LEVEL_UP_MOVE(24, MOVE_HIGH_HORSEPOWER),
+ LEVEL_UP_MOVE(24, MOVE_HIGH_HORSEPOWER),
LEVEL_UP_MOVE(29, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(31, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(31, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE(36, MOVE_COUNTER),
LEVEL_UP_MOVE(38, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(43, MOVE_MEGA_KICK),
@@ -15329,17 +15330,17 @@ static const struct LevelUpMove sMudbrayLevelUpLearnset[] = {
static const struct LevelUpMove sMudsdaleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT),
- //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
- //LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
LEVEL_UP_MOVE( 3, MOVE_MUD_SPORT),
- //LEVEL_UP_MOVE( 8, MOVE_ROTOTILLER),
- //LEVEL_UP_MOVE(10, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 8, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE(10, MOVE_BULLDOZE),
LEVEL_UP_MOVE(15, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(17, MOVE_STOMP),
LEVEL_UP_MOVE(22, MOVE_BIDE),
- //LEVEL_UP_MOVE(24, MOVE_HIGH_HORSEPOWER),
+ LEVEL_UP_MOVE(24, MOVE_HIGH_HORSEPOWER),
LEVEL_UP_MOVE(29, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(34, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(34, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE(42, MOVE_COUNTER),
LEVEL_UP_MOVE(47, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(55, MOVE_MEGA_KICK),
@@ -15350,46 +15351,46 @@ static const struct LevelUpMove sMudsdaleLevelUpLearnset[] = {
static const struct LevelUpMove sDewpiderLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
- //LEVEL_UP_MOVE( 5, MOVE_INFESTATION),
+ LEVEL_UP_MOVE( 5, MOVE_INFESTATION),
LEVEL_UP_MOVE( 8, MOVE_SPIDER_WEB),
- //LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
LEVEL_UP_MOVE(16, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(21, MOVE_BITE),
- //LEVEL_UP_MOVE(24, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(24, MOVE_AQUA_RING),
LEVEL_UP_MOVE(29, MOVE_LEECH_LIFE),
LEVEL_UP_MOVE(32, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(37, MOVE_LUNGE),
+ LEVEL_UP_MOVE(37, MOVE_LUNGE),
LEVEL_UP_MOVE(40, MOVE_MIRROR_COAT),
- //LEVEL_UP_MOVE(45, MOVE_LIQUIDATION),
- //LEVEL_UP_MOVE(48, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(45, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(48, MOVE_ENTRAINMENT),
LEVEL_UP_END
};
static const struct LevelUpMove sAraquanidLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE( 1, MOVE_SOAK),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOAK),
LEVEL_UP_MOVE( 1, MOVE_BUBBLE),
- //LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
+ LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
LEVEL_UP_MOVE( 1, MOVE_SPIDER_WEB),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE( 5, MOVE_INFESTATION),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 5, MOVE_INFESTATION),
LEVEL_UP_MOVE( 8, MOVE_SPIDER_WEB),
- //LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(13, MOVE_BUG_BITE),
LEVEL_UP_MOVE(16, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(21, MOVE_BITE),
- //LEVEL_UP_MOVE(26, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(26, MOVE_AQUA_RING),
LEVEL_UP_MOVE(33, MOVE_LEECH_LIFE),
LEVEL_UP_MOVE(38, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(45, MOVE_LUNGE),
+ LEVEL_UP_MOVE(45, MOVE_LUNGE),
LEVEL_UP_MOVE(50, MOVE_MIRROR_COAT),
- //LEVEL_UP_MOVE(57, MOVE_LIQUIDATION),
- //LEVEL_UP_MOVE(62, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(57, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(62, MOVE_ENTRAINMENT),
LEVEL_UP_END
};
static const struct LevelUpMove sFomantisLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE( 5, MOVE_LEAFAGE),
+ LEVEL_UP_MOVE( 5, MOVE_LEAFAGE),
LEVEL_UP_MOVE(10, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(14, MOVE_GROWTH),
LEVEL_UP_MOVE(19, MOVE_INGRAIN),
@@ -15404,14 +15405,14 @@ static const struct LevelUpMove sFomantisLevelUpLearnset[] = {
static const struct LevelUpMove sLurantisLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_PETAL_BLIZZARD),
- //LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
- //LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
- //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
+ LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
- //LEVEL_UP_MOVE( 5, MOVE_LEAFAGE),
+ LEVEL_UP_MOVE( 5, MOVE_LEAFAGE),
LEVEL_UP_MOVE(10, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(14, MOVE_GROWTH),
LEVEL_UP_MOVE(19, MOVE_INGRAIN),
@@ -15419,7 +15420,7 @@ static const struct LevelUpMove sLurantisLevelUpLearnset[] = {
LEVEL_UP_MOVE(28, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(32, MOVE_SLASH),
LEVEL_UP_MOVE(40, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(47, MOVE_SOLAR_BLADE),
+ LEVEL_UP_MOVE(47, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE(55, MOVE_SUNNY_DAY),
LEVEL_UP_END
};
@@ -15434,11 +15435,11 @@ static const struct LevelUpMove sMorelullLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_INGRAIN),
LEVEL_UP_MOVE(25, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(29, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(32, MOVE_STRENGTH_SAP),
+ LEVEL_UP_MOVE(32, MOVE_STRENGTH_SAP),
LEVEL_UP_MOVE(36, MOVE_SPORE),
- //LEVEL_UP_MOVE(39, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(39, MOVE_MOONBLAST),
LEVEL_UP_MOVE(43, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(46, MOVE_SPOTLIGHT),
+ LEVEL_UP_MOVE(46, MOVE_SPOTLIGHT),
LEVEL_UP_END
};
@@ -15455,11 +15456,11 @@ static const struct LevelUpMove sShiinoticLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_INGRAIN),
LEVEL_UP_MOVE(26, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(31, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP),
+ LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP),
LEVEL_UP_MOVE(40, MOVE_SPORE),
- //LEVEL_UP_MOVE(44, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(44, MOVE_MOONBLAST),
LEVEL_UP_MOVE(49, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(53, MOVE_SPOTLIGHT),
+ LEVEL_UP_MOVE(53, MOVE_SPOTLIGHT),
LEVEL_UP_END
};
@@ -15471,19 +15472,19 @@ static const struct LevelUpMove sSalanditLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(16, MOVE_SMOG),
LEVEL_UP_MOVE(21, MOVE_DOUBLE_SLAP),
- //LEVEL_UP_MOVE(24, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(24, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(29, MOVE_TOXIC),
- //LEVEL_UP_MOVE(32, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(37, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(32, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(37, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(40, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(45, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(48, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(45, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(48, MOVE_DRAGON_PULSE),
LEVEL_UP_END
};
static const struct LevelUpMove sSalazzleLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE( 1, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE( 1, MOVE_CAPTIVATE),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_ENCORE),
LEVEL_UP_MOVE( 1, MOVE_TORMENT),
@@ -15497,13 +15498,13 @@ static const struct LevelUpMove sSalazzleLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE(16, MOVE_SMOG),
LEVEL_UP_MOVE(21, MOVE_DOUBLE_SLAP),
- //LEVEL_UP_MOVE(24, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(24, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(29, MOVE_TOXIC),
- //LEVEL_UP_MOVE(32, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(39, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(32, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(39, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(44, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(51, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(51, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(56, MOVE_DRAGON_PULSE),
LEVEL_UP_END
};
@@ -15511,12 +15512,12 @@ static const struct LevelUpMove sStuffulLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_BIDE),
- //LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES),
- //LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING),
LEVEL_UP_MOVE(19, MOVE_FLAIL),
- //LEVEL_UP_MOVE(23, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(23, MOVE_PAYBACK),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(32, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(32, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(37, MOVE_THRASH),
LEVEL_UP_MOVE(41, MOVE_PAIN_SPLIT),
LEVEL_UP_MOVE(46, MOVE_DOUBLE_EDGE),
@@ -15525,17 +15526,17 @@ static const struct LevelUpMove sStuffulLevelUpLearnset[] = {
};
static const struct LevelUpMove sBewearLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_BIND),
+ //LEVEL_UP_MOVE( 0, MOVE_BIND),
LEVEL_UP_MOVE( 1, MOVE_BIND),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_BIDE),
- //LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES),
- //LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING),
LEVEL_UP_MOVE(19, MOVE_FLAIL),
- //LEVEL_UP_MOVE(23, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(23, MOVE_PAYBACK),
LEVEL_UP_MOVE(30, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(36, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(36, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(43, MOVE_THRASH),
LEVEL_UP_MOVE(49, MOVE_PAIN_SPLIT),
LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE),
@@ -15545,42 +15546,42 @@ static const struct LevelUpMove sBewearLevelUpLearnset[] = {
static const struct LevelUpMove sBounsweetLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SPLASH),
- //LEVEL_UP_MOVE( 5, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 5, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 9, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(17, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(21, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(25, MOVE_TEETER_DANCE),
LEVEL_UP_MOVE(29, MOVE_FLAIL),
- //LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST),
LEVEL_UP_END
};
static const struct LevelUpMove sSteeneeLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_DOUBLE_SLAP),
+ //LEVEL_UP_MOVE( 0, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE( 1, MOVE_SPLASH),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE( 5, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 5, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 9, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(17, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(21, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(25, MOVE_TEETER_DANCE),
LEVEL_UP_MOVE(29, MOVE_STOMP),
- //LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST),
- //LEVEL_UP_MOVE(37, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE(37, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(41, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(45, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(45, MOVE_LEAF_STORM),
LEVEL_UP_END
};
static const struct LevelUpMove sTsareenaLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_TROP_KICK),
- //LEVEL_UP_MOVE( 1, MOVE_TROP_KICK),
- //LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE( 1, MOVE_TROP_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_PUNISHMENT),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP),
LEVEL_UP_MOVE( 1, MOVE_SPLASH),
LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
@@ -15593,54 +15594,54 @@ static const struct LevelUpMove sTsareenaLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(25, MOVE_TEETER_DANCE),
LEVEL_UP_MOVE(29, MOVE_STOMP),
- //LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST),
- //LEVEL_UP_MOVE(37, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(33, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE(37, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(41, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(45, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(45, MOVE_LEAF_STORM),
LEVEL_UP_MOVE(49, MOVE_HIGH_JUMP_KICK),
- //LEVEL_UP_MOVE(53, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(53, MOVE_POWER_WHIP),
LEVEL_UP_END
};
static const struct LevelUpMove sComfeyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
- //LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD),
+ LEVEL_UP_MOVE( 1, MOVE_FLOWER_SHIELD),
LEVEL_UP_MOVE( 4, MOVE_LEECH_SEED),
- //LEVEL_UP_MOVE( 7, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE( 7, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(10, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(13, MOVE_GROWTH),
LEVEL_UP_MOVE(16, MOVE_WRAP),
LEVEL_UP_MOVE(19, MOVE_SWEET_KISS),
- //LEVEL_UP_MOVE(22, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(25, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(22, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(25, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(28, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(31, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(34, MOVE_GRASS_KNOT),
- //LEVEL_UP_MOVE(37, MOVE_FLORAL_HEALING),
+ LEVEL_UP_MOVE(34, MOVE_GRASS_KNOT),
+ LEVEL_UP_MOVE(37, MOVE_FLORAL_HEALING),
LEVEL_UP_MOVE(40, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE(43, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(46, MOVE_GRASSY_TERRAIN),
- //LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(46, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(49, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
static const struct LevelUpMove sOranguruLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE( 4, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE( 4, MOVE_AFTER_YOU),
LEVEL_UP_MOVE( 8, MOVE_TAUNT),
- //LEVEL_UP_MOVE(11, MOVE_QUASH),
- //LEVEL_UP_MOVE(15, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(11, MOVE_QUASH),
+ LEVEL_UP_MOVE(15, MOVE_STORED_POWER),
LEVEL_UP_MOVE(18, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(22, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(25, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(32, MOVE_INSTRUCT),
- //LEVEL_UP_MOVE(36, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(25, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(32, MOVE_INSTRUCT),
+ LEVEL_UP_MOVE(36, MOVE_FOUL_PLAY),
LEVEL_UP_MOVE(39, MOVE_CALM_MIND),
LEVEL_UP_MOVE(43, MOVE_PSYCHIC),
LEVEL_UP_MOVE(46, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM),
+ LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM),
LEVEL_UP_END
};
@@ -15652,41 +15653,41 @@ static const struct LevelUpMove sPassimianLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_BEAT_UP),
LEVEL_UP_MOVE(18, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(22, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(25, MOVE_BESTOW),
+ LEVEL_UP_MOVE(25, MOVE_BESTOW),
LEVEL_UP_MOVE(29, MOVE_THRASH),
LEVEL_UP_MOVE(32, MOVE_BULK_UP),
LEVEL_UP_MOVE(36, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(39, MOVE_FLING),
- //LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(39, MOVE_FLING),
+ LEVEL_UP_MOVE(43, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(46, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(50, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(50, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
static const struct LevelUpMove sWimpodLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_END
};
static const struct LevelUpMove sGolisopodLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_FIRST_IMPRESSION),
- //LEVEL_UP_MOVE( 1, MOVE_FIRST_IMPRESSION),
- //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRST_IMPRESSION),
+ LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE( 4, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 7, MOVE_ROCK_SMASH),
- //LEVEL_UP_MOVE(10, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(10, MOVE_BUG_BITE),
LEVEL_UP_MOVE(13, MOVE_SPITE),
LEVEL_UP_MOVE(16, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(21, MOVE_SLASH),
- //LEVEL_UP_MOVE(26, MOVE_RAZOR_SHELL),
- //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(26, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(41, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(48, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(48, MOVE_LIQUIDATION),
LEVEL_UP_END
};
@@ -15697,13 +15698,13 @@ static const struct LevelUpMove sSandygastLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(14, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(18, MOVE_MEGA_DRAIN),
- //LEVEL_UP_MOVE(23, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(23, MOVE_BULLDOZE),
LEVEL_UP_MOVE(27, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(32, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL),
- //LEVEL_UP_MOVE(45, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(50, MOVE_SHORE_UP),
+ LEVEL_UP_MOVE(45, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(50, MOVE_SHORE_UP),
LEVEL_UP_MOVE(54, MOVE_SANDSTORM),
LEVEL_UP_END
};
@@ -15717,13 +15718,13 @@ static const struct LevelUpMove sPalossandLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(14, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(18, MOVE_MEGA_DRAIN),
- //LEVEL_UP_MOVE(23, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(23, MOVE_BULLDOZE),
LEVEL_UP_MOVE(27, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(32, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL),
- //LEVEL_UP_MOVE(47, MOVE_EARTH_POWER),
- //LEVEL_UP_MOVE(54, MOVE_SHORE_UP),
+ LEVEL_UP_MOVE(47, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(54, MOVE_SHORE_UP),
LEVEL_UP_MOVE(60, MOVE_SANDSTORM),
LEVEL_UP_END
};
@@ -15738,12 +15739,12 @@ static const struct LevelUpMove sPyukumukuLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_TAUNT),
LEVEL_UP_MOVE(13, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(17, MOVE_COUNTER),
- //LEVEL_UP_MOVE(21, MOVE_PURIFY),
+ LEVEL_UP_MOVE(21, MOVE_PURIFY),
LEVEL_UP_MOVE(25, MOVE_CURSE),
- //LEVEL_UP_MOVE(29, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(29, MOVE_GASTRO_ACID),
LEVEL_UP_MOVE(33, MOVE_PAIN_SPLIT),
LEVEL_UP_MOVE(37, MOVE_RECOVER),
- //LEVEL_UP_MOVE(41, MOVE_SOAK),
+ LEVEL_UP_MOVE(41, MOVE_SOAK),
LEVEL_UP_MOVE(45, MOVE_TOXIC),
LEVEL_UP_MOVE(49, MOVE_MEMENTO),
LEVEL_UP_END
@@ -15757,30 +15758,30 @@ static const struct LevelUpMove sTypeNullLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(25, MOVE_CRUSH_CLAW),
LEVEL_UP_MOVE(30, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(35, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(35, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(40, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(45, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(50, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(55, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE(60, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(65, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(50, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(55, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(60, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(65, MOVE_PUNISHMENT),
LEVEL_UP_MOVE(70, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE(75, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE(80, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(85, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE(85, MOVE_HEAL_BLOCK),
LEVEL_UP_END
};
static const struct LevelUpMove sSilvallyLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_MULTI_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_MULTI_ATTACK),
- //LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK),
+ LEVEL_UP_MOVE( 1, MOVE_MULTI_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_HEAL_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
- //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
LEVEL_UP_MOVE( 1, MOVE_POISON_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- //LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 5, MOVE_RAGE),
LEVEL_UP_MOVE(10, MOVE_PURSUIT),
@@ -15788,17 +15789,17 @@ static const struct LevelUpMove sSilvallyLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(25, MOVE_CRUSH_CLAW),
LEVEL_UP_MOVE(30, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(35, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(35, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(40, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(45, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(50, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(55, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE(60, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(65, MOVE_PUNISHMENT),
+ LEVEL_UP_MOVE(55, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(60, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(65, MOVE_PUNISHMENT),
LEVEL_UP_MOVE(70, MOVE_RAZOR_WIND),
LEVEL_UP_MOVE(75, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE(80, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(85, MOVE_PARTING_SHOT),
+ LEVEL_UP_MOVE(85, MOVE_PARTING_SHOT),
LEVEL_UP_END
};
@@ -15810,13 +15811,13 @@ static const struct LevelUpMove sMiniorLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_SWIFT),
LEVEL_UP_MOVE(17, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(22, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
LEVEL_UP_MOVE(36, MOVE_COSMIC_POWER),
- //LEVEL_UP_MOVE(38, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(38, MOVE_POWER_GEM),
LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(45, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(45, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(50, MOVE_EXPLOSION),
LEVEL_UP_END
};
@@ -15831,9 +15832,9 @@ static const struct LevelUpMove sKomalaLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_YAWN),
LEVEL_UP_MOVE(21, MOVE_SLAM),
LEVEL_UP_MOVE(26, MOVE_FLAIL),
- //LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(36, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(41, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(41, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE(46, MOVE_THRASH),
LEVEL_UP_END
};
@@ -15843,15 +15844,15 @@ static const struct LevelUpMove sTurtonatorLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 5, MOVE_SMOG),
LEVEL_UP_MOVE( 9, MOVE_PROTECT),
- //LEVEL_UP_MOVE(13, MOVE_INCINERATE),
+ LEVEL_UP_MOVE(13, MOVE_INCINERATE),
LEVEL_UP_MOVE(17, MOVE_FLAIL),
LEVEL_UP_MOVE(21, MOVE_ENDURE),
LEVEL_UP_MOVE(25, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(29, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE(33, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(37, MOVE_SHELL_SMASH),
- //LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(45, MOVE_SHELL_TRAP),
+ LEVEL_UP_MOVE(37, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(45, MOVE_SHELL_TRAP),
LEVEL_UP_MOVE(49, MOVE_OVERHEAT),
LEVEL_UP_MOVE(53, MOVE_EXPLOSION),
LEVEL_UP_END
@@ -15864,34 +15865,34 @@ static const struct LevelUpMove sTogedemaruLevelUpLearnset[] = {
LEVEL_UP_MOVE( 9, MOVE_ROLLOUT),
LEVEL_UP_MOVE(13, MOVE_CHARGE),
LEVEL_UP_MOVE(17, MOVE_SPARK),
- //LEVEL_UP_MOVE(21, MOVE_NUZZLE),
- //LEVEL_UP_MOVE(25, MOVE_MAGNET_RISE),
- //LEVEL_UP_MOVE(29, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(33, MOVE_ZING_ZAP),
- //LEVEL_UP_MOVE(37, MOVE_ELECTRIC_TERRAIN),
- //LEVEL_UP_MOVE(41, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(21, MOVE_NUZZLE),
+ LEVEL_UP_MOVE(25, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(29, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(33, MOVE_ZING_ZAP),
+ LEVEL_UP_MOVE(37, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE(41, MOVE_WILD_CHARGE),
LEVEL_UP_MOVE(45, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE(49, MOVE_SPIKY_SHIELD),
- //LEVEL_UP_MOVE(53, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(49, MOVE_SPIKY_SHIELD),
+ LEVEL_UP_MOVE(53, MOVE_FELL_STINGER),
LEVEL_UP_END
};
static const struct LevelUpMove sMimikyuLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE( 1, MOVE_SPLASH),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- //LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM),
- //LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES),
- //LEVEL_UP_MOVE(14, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE(10, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(14, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(19, MOVE_MIMIC),
LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(28, MOVE_CHARM),
LEVEL_UP_MOVE(32, MOVE_SLASH),
- //LEVEL_UP_MOVE(37, MOVE_SHADOW_CLAW),
- //LEVEL_UP_MOVE(41, MOVE_HONE_CLAWS),
- //LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(37, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE(41, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(50, MOVE_PAIN_SPLIT),
LEVEL_UP_END
};
@@ -15901,30 +15902,30 @@ static const struct LevelUpMove sBruxishLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_ASTONISH),
LEVEL_UP_MOVE( 9, MOVE_CONFUSION),
LEVEL_UP_MOVE(12, MOVE_BITE),
- //LEVEL_UP_MOVE(17, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE(17, MOVE_AQUA_JET),
LEVEL_UP_MOVE(20, MOVE_DISABLE),
LEVEL_UP_MOVE(25, MOVE_PSYWAVE),
LEVEL_UP_MOVE(28, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(33, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(36, MOVE_SCREECH),
- //LEVEL_UP_MOVE(41, MOVE_PSYCHIC_FANGS),
- //LEVEL_UP_MOVE(44, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(41, MOVE_PSYCHIC_FANGS),
+ LEVEL_UP_MOVE(44, MOVE_SYNCHRONOISE),
LEVEL_UP_END
};
static const struct LevelUpMove sDrampaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
- //LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 5, MOVE_TWISTER),
LEVEL_UP_MOVE( 9, MOVE_PROTECT),
LEVEL_UP_MOVE(13, MOVE_GLARE),
LEVEL_UP_MOVE(17, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(21, MOVE_DRAGON_RAGE),
- //LEVEL_UP_MOVE(25, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(25, MOVE_NATURAL_GIFT),
LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(33, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(37, MOVE_EXTRASENSORY),
- //LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(41, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(45, MOVE_FLY),
LEVEL_UP_MOVE(49, MOVE_HYPER_VOICE),
LEVEL_UP_MOVE(53, MOVE_OUTRAGE),
@@ -15932,24 +15933,24 @@ static const struct LevelUpMove sDrampaLevelUpLearnset[] = {
};
static const struct LevelUpMove sDhelmiseLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 5, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 9, MOVE_WRAP),
- //LEVEL_UP_MOVE(14, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(14, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(18, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(23, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(27, MOVE_WHIRLPOOL),
- //LEVEL_UP_MOVE(32, MOVE_ANCHOR_SHOT),
+ LEVEL_UP_MOVE(32, MOVE_ANCHOR_SHOT),
LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL),
- //LEVEL_UP_MOVE(41, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(41, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(45, MOVE_SLAM),
- //LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE(54, MOVE_PHANTOM_FORCE),
- //LEVEL_UP_MOVE(59, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(50, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(54, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(59, MOVE_POWER_WHIP),
LEVEL_UP_END
};
@@ -15958,23 +15959,23 @@ static const struct LevelUpMove sJangmooLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_LEER),
LEVEL_UP_MOVE( 9, MOVE_BIDE),
LEVEL_UP_MOVE(13, MOVE_PROTECT),
- //LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(21, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(25, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(29, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(29, MOVE_WORK_UP),
LEVEL_UP_MOVE(33, MOVE_SCREECH),
LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(41, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(45, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(45, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(49, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(53, MOVE_OUTRAGE),
LEVEL_UP_END
};
static const struct LevelUpMove sHakamooLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SKY_UPPERCUT),
+ //LEVEL_UP_MOVE( 0, MOVE_SKY_UPPERCUT),
LEVEL_UP_MOVE( 1, MOVE_SKY_UPPERCUT),
- //LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
@@ -15982,26 +15983,26 @@ static const struct LevelUpMove sHakamooLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_LEER),
LEVEL_UP_MOVE( 9, MOVE_BIDE),
LEVEL_UP_MOVE(13, MOVE_PROTECT),
- //LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(21, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(25, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(29, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(29, MOVE_WORK_UP),
LEVEL_UP_MOVE(33, MOVE_SCREECH),
LEVEL_UP_MOVE(38, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(43, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(48, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(48, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(53, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(58, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
static const struct LevelUpMove sKommooLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_CLANGING_SCALES),
- //LEVEL_UP_MOVE( 1, MOVE_CLANGING_SCALES),
+ LEVEL_UP_MOVE( 1, MOVE_CLANGING_SCALES),
LEVEL_UP_MOVE( 1, MOVE_SKY_UPPERCUT),
LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM),
- //LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BIDE),
@@ -16009,24 +16010,24 @@ static const struct LevelUpMove sKommooLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_LEER),
LEVEL_UP_MOVE( 9, MOVE_BIDE),
LEVEL_UP_MOVE(13, MOVE_PROTECT),
- //LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(17, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(21, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(25, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(29, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(29, MOVE_WORK_UP),
LEVEL_UP_MOVE(33, MOVE_SCREECH),
LEVEL_UP_MOVE(38, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(43, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(51, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(51, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(59, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(67, MOVE_OUTRAGE),
- //LEVEL_UP_MOVE(75, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(75, MOVE_CLOSE_COMBAT),
LEVEL_UP_END
};
static const struct LevelUpMove sTapuKokoLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_SWAP),
LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE),
@@ -16036,21 +16037,21 @@ static const struct LevelUpMove sTapuKokoLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(20, MOVE_SCREECH),
LEVEL_UP_MOVE(26, MOVE_CHARGE),
- //LEVEL_UP_MOVE(32, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(32, MOVE_WILD_CHARGE),
LEVEL_UP_MOVE(38, MOVE_MIRROR_MOVE),
- //LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS),
- //LEVEL_UP_MOVE(48, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS),
+ LEVEL_UP_MOVE(48, MOVE_DISCHARGE),
LEVEL_UP_MOVE(53, MOVE_AGILITY),
- //LEVEL_UP_MOVE(58, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE(58, MOVE_ELECTRO_BALL),
LEVEL_UP_END
};
static const struct LevelUpMove sTapuLeleLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHIC_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
- //LEVEL_UP_MOVE( 1, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE( 1, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -16058,41 +16059,41 @@ static const struct LevelUpMove sTapuLeleLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_PSYBEAM),
LEVEL_UP_MOVE(20, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(26, MOVE_SKILL_SWAP),
- //LEVEL_UP_MOVE(32, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(32, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(38, MOVE_TICKLE),
- //LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS),
+ LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS),
LEVEL_UP_MOVE(48, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(53, MOVE_FLATTER),
- //LEVEL_UP_MOVE(58, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(58, MOVE_MOONBLAST),
LEVEL_UP_END
};
static const struct LevelUpMove sTapuBuluLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER),
LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
- //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
+ LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 8, MOVE_HORN_ATTACK),
LEVEL_UP_MOVE(14, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(20, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(26, MOVE_LEECH_SEED),
- //LEVEL_UP_MOVE(32, MOVE_HORN_LEECH),
- //LEVEL_UP_MOVE(38, MOVE_ROTOTILLER),
- //LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS),
- //LEVEL_UP_MOVE(48, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(32, MOVE_HORN_LEECH),
+ LEVEL_UP_MOVE(38, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS),
+ LEVEL_UP_MOVE(48, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(53, MOVE_MEGAHORN),
LEVEL_UP_MOVE(58, MOVE_SKULL_BASH),
LEVEL_UP_END
};
static const struct LevelUpMove sTapuFiniLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE( 1, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_HAZE),
LEVEL_UP_MOVE( 1, MOVE_MIST),
@@ -16100,13 +16101,13 @@ static const struct LevelUpMove sTapuFiniLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 8, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
- //LEVEL_UP_MOVE(20, MOVE_SOAK),
+ LEVEL_UP_MOVE(20, MOVE_SOAK),
LEVEL_UP_MOVE(26, MOVE_REFRESH),
- //LEVEL_UP_MOVE(32, MOVE_BRINE),
- //LEVEL_UP_MOVE(38, MOVE_DEFOG),
- //LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS),
+ LEVEL_UP_MOVE(32, MOVE_BRINE),
+ LEVEL_UP_MOVE(38, MOVE_DEFOG),
+ LEVEL_UP_MOVE(43, MOVE_NATURES_MADNESS),
LEVEL_UP_MOVE(48, MOVE_MUDDY_WATER),
- //LEVEL_UP_MOVE(53, MOVE_AQUA_RING),
+ LEVEL_UP_MOVE(53, MOVE_AQUA_RING),
LEVEL_UP_MOVE(58, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
@@ -16118,7 +16119,7 @@ static const struct LevelUpMove sCosmogLevelUpLearnset[] = {
};
static const struct LevelUpMove sCosmoemLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_COSMIC_POWER),
+ //LEVEL_UP_MOVE( 0, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_END
@@ -16126,78 +16127,78 @@ static const struct LevelUpMove sCosmoemLevelUpLearnset[] = {
static const struct LevelUpMove sSolgaleoLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SUNSTEEL_STRIKE),
- //LEVEL_UP_MOVE( 1, MOVE_SUNSTEEL_STRIKE),
+ LEVEL_UP_MOVE( 1, MOVE_SUNSTEEL_STRIKE),
LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
- //LEVEL_UP_MOVE( 1, MOVE_WAKE_UP_SLAP),
+ LEVEL_UP_MOVE( 1, MOVE_WAKE_UP_SLAP),
LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
- //LEVEL_UP_MOVE( 7, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 7, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(13, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(19, MOVE_ZEN_HEADBUTT),
- //LEVEL_UP_MOVE(23, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(19, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(23, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE(31, MOVE_MORNING_SUN),
LEVEL_UP_MOVE(37, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(43, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE(43, MOVE_METAL_BURST),
LEVEL_UP_MOVE(47, MOVE_SOLAR_BEAM),
- //LEVEL_UP_MOVE(59, MOVE_NOBLE_ROAR),
- //LEVEL_UP_MOVE(61, MOVE_FLARE_BLITZ),
- //LEVEL_UP_MOVE(67, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE(73, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(59, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(61, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(67, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(73, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
static const struct LevelUpMove sLunalaLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_MOONGEIST_BEAM),
- //LEVEL_UP_MOVE( 1, MOVE_MOONGEIST_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_MOONGEIST_BEAM),
LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(13, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE(19, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(19, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(23, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(31, MOVE_MOONLIGHT),
- //LEVEL_UP_MOVE(37, MOVE_NIGHT_DAZE),
+ LEVEL_UP_MOVE(37, MOVE_NIGHT_DAZE),
LEVEL_UP_MOVE(43, MOVE_MAGIC_COAT),
- //LEVEL_UP_MOVE(47, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(47, MOVE_MOONBLAST),
LEVEL_UP_MOVE(59, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(61, MOVE_PHANTOM_FORCE),
- //LEVEL_UP_MOVE(67, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(61, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(67, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(73, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sNihilegoLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE( 1, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE( 1, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE( 1, MOVE_TICKLE),
LEVEL_UP_MOVE( 1, MOVE_ACID),
LEVEL_UP_MOVE( 1, MOVE_CONSTRICT),
LEVEL_UP_MOVE( 1, MOVE_POUND),
- //LEVEL_UP_MOVE( 7, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE( 7, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(13, MOVE_PSYWAVE),
LEVEL_UP_MOVE(19, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(23, MOVE_VENOSHOCK),
- //LEVEL_UP_MOVE(29, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(23, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(29, MOVE_TOXIC_SPIKES),
LEVEL_UP_MOVE(31, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE(37, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(37, MOVE_POWER_GEM),
LEVEL_UP_MOVE(43, MOVE_MIRROR_COAT),
- //LEVEL_UP_MOVE(47, MOVE_ACID_SPRAY),
- //LEVEL_UP_MOVE(53, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(59, MOVE_STEALTH_ROCK),
- //LEVEL_UP_MOVE(67, MOVE_WONDER_ROOM),
- //LEVEL_UP_MOVE(73, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(47, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(53, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(59, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(67, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(73, MOVE_HEAD_SMASH),
LEVEL_UP_END
};
static const struct LevelUpMove sBuzzwoleLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_REVERSAL),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_UP_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_UP_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 7, MOVE_COMET_PUNCH),
LEVEL_UP_MOVE(13, MOVE_BULK_UP),
@@ -16207,8 +16208,8 @@ static const struct LevelUpMove sBuzzwoleLevelUpLearnset[] = {
LEVEL_UP_MOVE(31, MOVE_TAUNT),
LEVEL_UP_MOVE(37, MOVE_MEGA_PUNCH),
LEVEL_UP_MOVE(43, MOVE_COUNTER),
- //LEVEL_UP_MOVE(47, MOVE_HAMMER_ARM),
- //LEVEL_UP_MOVE(53, MOVE_LUNGE),
+ LEVEL_UP_MOVE(47, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(53, MOVE_LUNGE),
LEVEL_UP_MOVE(59, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(67, MOVE_SUPERPOWER),
LEVEL_UP_MOVE(73, MOVE_FOCUS_PUNCH),
@@ -16216,25 +16217,25 @@ static const struct LevelUpMove sBuzzwoleLevelUpLearnset[] = {
};
static const struct LevelUpMove sPheromosaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE( 1, MOVE_LOW_KICK),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 7, MOVE_SWIFT),
LEVEL_UP_MOVE(13, MOVE_STOMP),
- //LEVEL_UP_MOVE(19, MOVE_FEINT),
+ LEVEL_UP_MOVE(19, MOVE_FEINT),
LEVEL_UP_MOVE(23, MOVE_SILVER_WIND),
LEVEL_UP_MOVE(29, MOVE_BOUNCE),
LEVEL_UP_MOVE(31, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
LEVEL_UP_MOVE(43, MOVE_TRIPLE_KICK),
- //LEVEL_UP_MOVE(47, MOVE_LUNGE),
- //LEVEL_UP_MOVE(53, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(59, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE(47, MOVE_LUNGE),
+ LEVEL_UP_MOVE(53, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(59, MOVE_ME_FIRST),
LEVEL_UP_MOVE(67, MOVE_HIGH_JUMP_KICK),
- //LEVEL_UP_MOVE(73, MOVE_SPEED_SWAP),
+ LEVEL_UP_MOVE(73, MOVE_SPEED_SWAP),
LEVEL_UP_END
};
@@ -16248,45 +16249,45 @@ static const struct LevelUpMove sXurkitreeLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(19, MOVE_INGRAIN),
LEVEL_UP_MOVE(23, MOVE_THUNDER_PUNCH),
- //LEVEL_UP_MOVE(29, MOVE_EERIE_IMPULSE),
+ LEVEL_UP_MOVE(29, MOVE_EERIE_IMPULSE),
LEVEL_UP_MOVE(31, MOVE_SIGNAL_BEAM),
LEVEL_UP_MOVE(37, MOVE_THUNDERBOLT),
LEVEL_UP_MOVE(43, MOVE_HYPNOSIS),
- //LEVEL_UP_MOVE(47, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(53, MOVE_ELECTRIC_TERRAIN),
- //LEVEL_UP_MOVE(59, MOVE_POWER_WHIP),
- //LEVEL_UP_MOVE(67, MOVE_ION_DELUGE),
+ LEVEL_UP_MOVE(47, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(53, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE(59, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(67, MOVE_ION_DELUGE),
LEVEL_UP_MOVE(73, MOVE_ZAP_CANNON),
LEVEL_UP_END
};
static const struct LevelUpMove sCelesteelaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
LEVEL_UP_MOVE( 1, MOVE_INGRAIN),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 7, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE( 7, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(13, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(19, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(23, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(29, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(29, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(31, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(37, MOVE_FLASH_CANNON),
- //LEVEL_UP_MOVE(43, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(47, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE(37, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(43, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(47, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(53, MOVE_SKULL_BASH),
LEVEL_UP_MOVE(59, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(67, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(67, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE(73, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sKartanaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD),
- //LEVEL_UP_MOVE( 1, MOVE_DEFOG),
- //LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE),
+ LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD),
+ LEVEL_UP_MOVE( 1, MOVE_DEFOG),
+ LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE),
LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_CUT),
@@ -16294,148 +16295,148 @@ static const struct LevelUpMove sKartanaLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(19, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(23, MOVE_AERIAL_ACE),
- //LEVEL_UP_MOVE(29, MOVE_LASER_FOCUS),
- //LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(29, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(31, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(37, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(43, MOVE_LEAF_BLADE),
- //LEVEL_UP_MOVE(47, MOVE_X_SCISSOR),
+ LEVEL_UP_MOVE(47, MOVE_X_SCISSOR),
LEVEL_UP_MOVE(53, MOVE_DETECT),
- //LEVEL_UP_MOVE(59, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(67, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(59, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(67, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE(73, MOVE_GUILLOTINE),
LEVEL_UP_END
};
static const struct LevelUpMove sGuzzlordLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_BELCH),
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_BELCH),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
LEVEL_UP_MOVE( 1, MOVE_STOCKPILE),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_RAGE),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 7, MOVE_STOMP),
- //LEVEL_UP_MOVE(13, MOVE_BRUTAL_SWING),
- //LEVEL_UP_MOVE(19, MOVE_STEAMROLLER),
- //LEVEL_UP_MOVE(23, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(13, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(19, MOVE_STEAMROLLER),
+ LEVEL_UP_MOVE(23, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(29, MOVE_IRON_TAIL),
- //LEVEL_UP_MOVE(31, MOVE_STOMPING_TANTRUM),
+ LEVEL_UP_MOVE(31, MOVE_STOMPING_TANTRUM),
LEVEL_UP_MOVE(37, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(43, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(43, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(47, MOVE_THRASH),
- //LEVEL_UP_MOVE(53, MOVE_GASTRO_ACID),
- //LEVEL_UP_MOVE(59, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE(67, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(73, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(53, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(59, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(67, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(73, MOVE_DRAGON_RUSH),
LEVEL_UP_END
};
static const struct LevelUpMove sNecrozmaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
LEVEL_UP_MOVE( 1, MOVE_MORNING_SUN),
- //LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
- //LEVEL_UP_MOVE( 1, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 7, MOVE_SLASH),
- //LEVEL_UP_MOVE(13, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(13, MOVE_STORED_POWER),
LEVEL_UP_MOVE(19, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(23, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(31, MOVE_GRAVITY),
- //LEVEL_UP_MOVE(37, MOVE_PSYCHO_CUT),
- //LEVEL_UP_MOVE(43, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE(47, MOVE_AUTOTOMIZE),
- //LEVEL_UP_MOVE(50, MOVE_PHOTON_GEYSER),
- //LEVEL_UP_MOVE(53, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(23, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(31, MOVE_GRAVITY),
+ LEVEL_UP_MOVE(37, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(43, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(47, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(50, MOVE_PHOTON_GEYSER),
+ LEVEL_UP_MOVE(53, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(59, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(67, MOVE_WRING_OUT),
- //LEVEL_UP_MOVE(73, MOVE_PRISMATIC_LASER),
+ LEVEL_UP_MOVE(67, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(73, MOVE_PRISMATIC_LASER),
LEVEL_UP_END
};
static const struct LevelUpMove sMagearnaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_CRAFTY_SHIELD),
- //LEVEL_UP_MOVE( 1, MOVE_GEAR_UP),
- //LEVEL_UP_MOVE( 1, MOVE_SHIFT_GEAR),
- //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 1, MOVE_CRAFTY_SHIELD),
+ LEVEL_UP_MOVE( 1, MOVE_GEAR_UP),
+ LEVEL_UP_MOVE( 1, MOVE_SHIFT_GEAR),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_SONIC_BOOM),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE( 9, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE( 9, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(17, MOVE_AURORA_BEAM),
- //LEVEL_UP_MOVE(25, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(25, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(33, MOVE_MIND_READER),
- //LEVEL_UP_MOVE(41, MOVE_FLASH_CANNON),
- //LEVEL_UP_MOVE(49, MOVE_FLEUR_CANNON),
+ LEVEL_UP_MOVE(41, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(49, MOVE_FLEUR_CANNON),
LEVEL_UP_MOVE(57, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(65, MOVE_PAIN_SPLIT),
- //LEVEL_UP_MOVE(73, MOVE_SYNCHRONOISE),
- //LEVEL_UP_MOVE(81, MOVE_AURA_SPHERE),
- //LEVEL_UP_MOVE(89, MOVE_HEART_SWAP),
- //LEVEL_UP_MOVE(97, MOVE_TRUMP_CARD),
+ LEVEL_UP_MOVE(73, MOVE_SYNCHRONOISE),
+ LEVEL_UP_MOVE(81, MOVE_AURA_SPHERE),
+ LEVEL_UP_MOVE(89, MOVE_HEART_SWAP),
+ LEVEL_UP_MOVE(97, MOVE_TRUMP_CARD),
LEVEL_UP_END
};
static const struct LevelUpMove sMarshadowLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS),
- //LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_DRAIN_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_DRAIN_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_PURSUIT),
- //LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
- //LEVEL_UP_MOVE( 5, MOVE_FORCE_PALM),
- //LEVEL_UP_MOVE(11, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 5, MOVE_FORCE_PALM),
+ LEVEL_UP_MOVE(11, MOVE_FEINT),
LEVEL_UP_MOVE(15, MOVE_ROLLING_KICK),
- //LEVEL_UP_MOVE(20, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(20, MOVE_COPYCAT),
LEVEL_UP_MOVE(26, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE(30, MOVE_ROLE_PLAY),
LEVEL_UP_MOVE(35, MOVE_JUMP_KICK),
LEVEL_UP_MOVE(41, MOVE_PSYCH_UP),
- //LEVEL_UP_MOVE(45, MOVE_SPECTRAL_THIEF),
- //LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE(56, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(45, MOVE_SPECTRAL_THIEF),
+ LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(56, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(60, MOVE_ENDEAVOR),
LEVEL_UP_END
};
static const struct LevelUpMove sPoipoleLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_ACID),
LEVEL_UP_MOVE( 7, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(13, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(13, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(19, MOVE_CHARM),
- //LEVEL_UP_MOVE(23, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(31, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(23, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(31, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
LEVEL_UP_MOVE(41, MOVE_TOXIC),
- //LEVEL_UP_MOVE(47, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(47, MOVE_FELL_STINGER),
LEVEL_UP_END
};
static const struct LevelUpMove sNaganadelLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_AIR_CUTTER),
+ //LEVEL_UP_MOVE( 0, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_ACID),
LEVEL_UP_MOVE( 7, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(13, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(13, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(19, MOVE_CHARM),
- //LEVEL_UP_MOVE(23, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE(31, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(23, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(31, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(37, MOVE_POISON_JAB),
LEVEL_UP_MOVE(41, MOVE_TOXIC),
- //LEVEL_UP_MOVE(47, MOVE_FELL_STINGER),
- //LEVEL_UP_MOVE(53, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(61, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(47, MOVE_FELL_STINGER),
+ LEVEL_UP_MOVE(53, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(61, MOVE_DRAGON_PULSE),
LEVEL_UP_END
};
@@ -16443,15 +16444,15 @@ static const struct LevelUpMove sStakatakaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 5, MOVE_ROCK_SLIDE),
- //LEVEL_UP_MOVE(11, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(11, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(17, MOVE_BIDE),
LEVEL_UP_MOVE(19, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(23, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
LEVEL_UP_MOVE(37, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(43, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(43, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(47, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(53, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(53, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(61, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
@@ -16460,35 +16461,35 @@ static const struct LevelUpMove sBlacephalonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 7, MOVE_MAGIC_COAT),
- //LEVEL_UP_MOVE(13, MOVE_STORED_POWER),
- //LEVEL_UP_MOVE(17, MOVE_FLAME_BURST),
+ LEVEL_UP_MOVE(13, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(17, MOVE_FLAME_BURST),
LEVEL_UP_MOVE(23, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(29, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(31, MOVE_CALM_MIND),
LEVEL_UP_MOVE(37, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(47, MOVE_TRICK),
- //LEVEL_UP_MOVE(59, MOVE_MIND_BLOWN),
+ LEVEL_UP_MOVE(59, MOVE_MIND_BLOWN),
LEVEL_UP_END
};
static const struct LevelUpMove sZeraoraLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_SPARK),
- //LEVEL_UP_MOVE( 5, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 5, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES),
- //LEVEL_UP_MOVE(15, MOVE_VOLT_SWITCH),
- //LEVEL_UP_MOVE(19, MOVE_SNARL),
+ LEVEL_UP_MOVE(15, MOVE_VOLT_SWITCH),
+ LEVEL_UP_MOVE(19, MOVE_SNARL),
LEVEL_UP_MOVE(22, MOVE_FAKE_OUT),
LEVEL_UP_MOVE(26, MOVE_CHARGE),
LEVEL_UP_MOVE(29, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE(33, MOVE_SLASH),
- //LEVEL_UP_MOVE(36, MOVE_WILD_CHARGE),
- //LEVEL_UP_MOVE(40, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(43, MOVE_PLASMA_FISTS),
- //LEVEL_UP_MOVE(47, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE(50, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(36, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(40, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(43, MOVE_PLASMA_FISTS),
+ LEVEL_UP_MOVE(47, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(50, MOVE_DISCHARGE),
LEVEL_UP_END
};
@@ -16499,12 +16500,12 @@ static const struct LevelUpMove sMeltanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 18, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 27, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 36, MOVE_ACID_ARMOR),
- //LEVEL_UP_MOVE( 45, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE( 45, MOVE_FLASH_CANNON),
LEVEL_UP_END
};
static const struct LevelUpMove sMelmetalLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_THUNDER_PUNCH),
+ //LEVEL_UP_MOVE( 0, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
@@ -16514,10 +16515,10 @@ static const struct LevelUpMove sMelmetalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 18, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 27, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 36, MOVE_ACID_ARMOR),
- //LEVEL_UP_MOVE( 45, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE( 45, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE( 54, MOVE_MEGA_PUNCH),
LEVEL_UP_MOVE( 64, MOVE_PROTECT),
- //LEVEL_UP_MOVE( 72, MOVE_DOUBLE_IRON_BASH),
+ LEVEL_UP_MOVE( 72, MOVE_DOUBLE_IRON_BASH),
LEVEL_UP_MOVE( 81, MOVE_SUPERPOWER),
LEVEL_UP_MOVE( 90, MOVE_HYPER_BEAM),
LEVEL_UP_END
@@ -16525,53 +16526,53 @@ static const struct LevelUpMove sMelmetalLevelUpLearnset[] = {
static const struct LevelUpMove sGrookeyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 6, MOVE_BRANCH_POKE),
+ LEVEL_UP_MOVE( 6, MOVE_BRANCH_POKE),
LEVEL_UP_MOVE( 8, MOVE_TAUNT),
LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(17, MOVE_SCREECH),
LEVEL_UP_MOVE(20, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(24, MOVE_SLAM),
LEVEL_UP_MOVE(28, MOVE_UPROAR),
- //LEVEL_UP_MOVE(32, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(32, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE(36, MOVE_ENDEAVOR),
LEVEL_UP_END
};
static const struct LevelUpMove sThwackeyLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE),
+ LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(19, MOVE_SCREECH),
LEVEL_UP_MOVE(24, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(30, MOVE_SLAM),
LEVEL_UP_MOVE(36, MOVE_UPROAR),
- //LEVEL_UP_MOVE(42, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(42, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE(48, MOVE_ENDEAVOR),
LEVEL_UP_END
};
static const struct LevelUpMove sRillaboomLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DRUM_BEATING),
- //LEVEL_UP_MOVE( 1, MOVE_DRUM_BEATING),
- //LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
- //LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE( 1, MOVE_DRUM_BEATING),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE),
+ LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(19, MOVE_SCREECH),
LEVEL_UP_MOVE(24, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(30, MOVE_SLAM),
LEVEL_UP_MOVE(38, MOVE_UPROAR),
- //LEVEL_UP_MOVE(46, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(46, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE(54, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(62, MOVE_BOOMBURST),
+ LEVEL_UP_MOVE(62, MOVE_BOOMBURST),
LEVEL_UP_END
};
@@ -16581,7 +16582,7 @@ static const struct LevelUpMove sScorbunnyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_EMBER),
LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE(17, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(17, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(20, MOVE_AGILITY),
LEVEL_UP_MOVE(24, MOVE_HEADBUTT),
LEVEL_UP_MOVE(28, MOVE_COUNTER),
@@ -16596,7 +16597,7 @@ static const struct LevelUpMove sRabootLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE(19, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(19, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(24, MOVE_AGILITY),
LEVEL_UP_MOVE(30, MOVE_HEADBUTT),
LEVEL_UP_MOVE(36, MOVE_COUNTER),
@@ -16607,20 +16608,20 @@ static const struct LevelUpMove sRabootLevelUpLearnset[] = {
static const struct LevelUpMove sCinderaceLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_PYRO_BALL),
- //LEVEL_UP_MOVE( 1, MOVE_PYRO_BALL),
- //LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_PYRO_BALL),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE(19, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE(19, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(24, MOVE_AGILITY),
LEVEL_UP_MOVE(30, MOVE_HEADBUTT),
LEVEL_UP_MOVE(38, MOVE_COUNTER),
LEVEL_UP_MOVE(46, MOVE_BOUNCE),
LEVEL_UP_MOVE(54, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(62, MOVE_COURT_CHANGE),
+ LEVEL_UP_MOVE(62, MOVE_COURT_CHANGE),
LEVEL_UP_END
};
@@ -16630,11 +16631,11 @@ static const struct LevelUpMove sSobbleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 8, MOVE_BIND),
LEVEL_UP_MOVE(12, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(17, MOVE_TEARFUL_LOOK),
- //LEVEL_UP_MOVE(20, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(24, MOVE_U_TURN),
- //LEVEL_UP_MOVE(28, MOVE_LIQUIDATION),
- //LEVEL_UP_MOVE(32, MOVE_SOAK),
+ LEVEL_UP_MOVE(17, MOVE_TEARFUL_LOOK),
+ LEVEL_UP_MOVE(20, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(24, MOVE_U_TURN),
+ LEVEL_UP_MOVE(28, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(32, MOVE_SOAK),
LEVEL_UP_MOVE(36, MOVE_RAIN_DANCE),
LEVEL_UP_END
};
@@ -16645,29 +16646,29 @@ static const struct LevelUpMove sDrizzileLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_BIND),
LEVEL_UP_MOVE(12, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(19, MOVE_TEARFUL_LOOK),
- //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(30, MOVE_U_TURN),
- //LEVEL_UP_MOVE(36, MOVE_LIQUIDATION),
- //LEVEL_UP_MOVE(42, MOVE_SOAK),
+ LEVEL_UP_MOVE(19, MOVE_TEARFUL_LOOK),
+ LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(30, MOVE_U_TURN),
+ LEVEL_UP_MOVE(36, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(42, MOVE_SOAK),
LEVEL_UP_MOVE(48, MOVE_RAIN_DANCE),
LEVEL_UP_END
};
static const struct LevelUpMove sInteleonLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SNIPE_SHOT),
- //LEVEL_UP_MOVE( 1, MOVE_SNIPE_SHOT),
- //LEVEL_UP_MOVE( 1, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE( 1, MOVE_SNIPE_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_ACROBATICS),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_BIND),
LEVEL_UP_MOVE(12, MOVE_WATER_PULSE),
- //LEVEL_UP_MOVE(19, MOVE_TEARFUL_LOOK),
- //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(30, MOVE_U_TURN),
- //LEVEL_UP_MOVE(38, MOVE_LIQUIDATION),
- //LEVEL_UP_MOVE(46, MOVE_SOAK),
+ LEVEL_UP_MOVE(19, MOVE_TEARFUL_LOOK),
+ LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(30, MOVE_U_TURN),
+ LEVEL_UP_MOVE(38, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(46, MOVE_SOAK),
LEVEL_UP_MOVE(54, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(62, MOVE_HYDRO_PUMP),
LEVEL_UP_END
@@ -16677,7 +16678,7 @@ static const struct LevelUpMove sSkwovetLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_BITE),
- //LEVEL_UP_MOVE(10, MOVE_STUFF_CHEEKS),
+ LEVEL_UP_MOVE(10, MOVE_STUFF_CHEEKS),
LEVEL_UP_MOVE(15, MOVE_STOCKPILE),
LEVEL_UP_MOVE(15, MOVE_SWALLOW),
LEVEL_UP_MOVE(15, MOVE_SPIT_UP),
@@ -16686,17 +16687,17 @@ static const struct LevelUpMove sSkwovetLevelUpLearnset[] = {
LEVEL_UP_MOVE(30, MOVE_COUNTER),
LEVEL_UP_MOVE(35, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(40, MOVE_SUPER_FANG),
- //LEVEL_UP_MOVE(45, MOVE_BELCH),
+ LEVEL_UP_MOVE(45, MOVE_BELCH),
LEVEL_UP_END
};
static const struct LevelUpMove sGreedentLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_COVET),
+ //LEVEL_UP_MOVE( 0, MOVE_COVET),
LEVEL_UP_MOVE( 1, MOVE_COVET),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_BITE),
- //LEVEL_UP_MOVE( 1, MOVE_STUFF_CHEEKS),
+ LEVEL_UP_MOVE( 1, MOVE_STUFF_CHEEKS),
LEVEL_UP_MOVE(15, MOVE_STOCKPILE),
LEVEL_UP_MOVE(15, MOVE_SWALLOW),
LEVEL_UP_MOVE(15, MOVE_SPIT_UP),
@@ -16705,72 +16706,72 @@ static const struct LevelUpMove sGreedentLevelUpLearnset[] = {
LEVEL_UP_MOVE(34, MOVE_COUNTER),
LEVEL_UP_MOVE(41, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(48, MOVE_SUPER_FANG),
- //LEVEL_UP_MOVE(55, MOVE_BELCH),
+ LEVEL_UP_MOVE(55, MOVE_BELCH),
LEVEL_UP_END
};
static const struct LevelUpMove sRookideeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 4, MOVE_POWER_TRIP),
- //LEVEL_UP_MOVE( 8, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 4, MOVE_POWER_TRIP),
+ LEVEL_UP_MOVE( 8, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(16, MOVE_PLUCK),
+ LEVEL_UP_MOVE(16, MOVE_PLUCK),
LEVEL_UP_MOVE(20, MOVE_TAUNT),
LEVEL_UP_MOVE(24, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(28, MOVE_DRILL_PECK),
LEVEL_UP_MOVE(32, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(36, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(36, MOVE_BRAVE_BIRD),
LEVEL_UP_END
};
static const struct LevelUpMove sCorvisquireLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP),
- //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(16, MOVE_PLUCK),
+ LEVEL_UP_MOVE(16, MOVE_PLUCK),
LEVEL_UP_MOVE(22, MOVE_TAUNT),
LEVEL_UP_MOVE(28, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(34, MOVE_DRILL_PECK),
LEVEL_UP_MOVE(40, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(46, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(46, MOVE_BRAVE_BIRD),
LEVEL_UP_END
};
static const struct LevelUpMove sCorviknightLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_STEEL_WING),
+ //LEVEL_UP_MOVE( 0, MOVE_STEEL_WING),
LEVEL_UP_MOVE( 1, MOVE_STEEL_WING),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE( 1, MOVE_METAL_SOUND),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP),
- //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_TRIP),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(16, MOVE_PLUCK),
+ LEVEL_UP_MOVE(16, MOVE_PLUCK),
LEVEL_UP_MOVE(22, MOVE_TAUNT),
LEVEL_UP_MOVE(28, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(34, MOVE_DRILL_PECK),
LEVEL_UP_MOVE(42, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(50, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(50, MOVE_BRAVE_BIRD),
LEVEL_UP_END
};
static const struct LevelUpMove sBlipbugLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
LEVEL_UP_END
};
static const struct LevelUpMove sDottlerLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_REFLECT),
- LEVEL_UP_MOVE( 0, MOVE_LIGHT_SCREEN),
- LEVEL_UP_MOVE( 0, MOVE_CONFUSION),
+ //LEVEL_UP_MOVE( 0, MOVE_REFLECT),
+ //LEVEL_UP_MOVE( 0, MOVE_LIGHT_SCREEN),
+ //LEVEL_UP_MOVE( 0, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_REFLECT),
LEVEL_UP_MOVE( 1, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
LEVEL_UP_END
};
@@ -16778,19 +16779,19 @@ static const struct LevelUpMove sOrbeetleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_REFLECT),
LEVEL_UP_MOVE( 1, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE( 4, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 8, MOVE_MAGIC_COAT),
LEVEL_UP_MOVE(12, MOVE_AGILITY),
LEVEL_UP_MOVE(16, MOVE_PSYBEAM),
LEVEL_UP_MOVE(20, MOVE_HYPNOSIS),
- //LEVEL_UP_MOVE(24, MOVE_ALLY_SWITCH),
- //LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(24, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE(28, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(32, MOVE_MIRROR_COAT),
LEVEL_UP_MOVE(36, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(40, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(40, MOVE_AFTER_YOU),
LEVEL_UP_MOVE(44, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(48, MOVE_PSYCHIC_TERRAIN),
+ LEVEL_UP_MOVE(48, MOVE_PSYCHIC_TERRAIN),
LEVEL_UP_END
};
@@ -16798,65 +16799,65 @@ static const struct LevelUpMove sNickitLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 4, MOVE_BEAT_UP),
- //LEVEL_UP_MOVE( 8, MOVE_HONE_CLAWS),
- //LEVEL_UP_MOVE(12, MOVE_SNARL),
- //LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(20, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(28, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(32, MOVE_TAIL_SLAP),
- //LEVEL_UP_MOVE(36, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE( 8, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(12, MOVE_SNARL),
+ LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(20, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(28, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(32, MOVE_TAIL_SLAP),
+ LEVEL_UP_MOVE(36, MOVE_FOUL_PLAY),
LEVEL_UP_END
};
static const struct LevelUpMove sThievulLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_THIEF),
+ //LEVEL_UP_MOVE( 0, MOVE_THIEF),
LEVEL_UP_MOVE( 1, MOVE_THIEF),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_BEAT_UP),
- //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
- //LEVEL_UP_MOVE(12, MOVE_SNARL),
- //LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(22, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(34, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
- //LEVEL_UP_MOVE(46, MOVE_FOUL_PLAY),
- //LEVEL_UP_MOVE(52, MOVE_PARTING_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(12, MOVE_SNARL),
+ LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(22, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(34, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
+ LEVEL_UP_MOVE(46, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(52, MOVE_PARTING_SHOT),
LEVEL_UP_END
};
static const struct LevelUpMove sGossifleurLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
+ LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 4, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 8, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(16, MOVE_ROUND),
- //LEVEL_UP_MOVE(21, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(16, MOVE_ROUND),
+ LEVEL_UP_MOVE(21, MOVE_LEAF_TORNADO),
LEVEL_UP_MOVE(24, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(28, MOVE_HYPER_VOICE),
LEVEL_UP_MOVE(32, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(36, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(36, MOVE_LEAF_STORM),
LEVEL_UP_END
};
static const struct LevelUpMove sEldegossLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_COTTON_SPORE),
+ //LEVEL_UP_MOVE( 0, MOVE_COTTON_SPORE),
LEVEL_UP_MOVE( 1, MOVE_COTTON_SPORE),
- //LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
+ LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF),
- //LEVEL_UP_MOVE(16, MOVE_ROUND),
- //LEVEL_UP_MOVE(23, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(16, MOVE_ROUND),
+ LEVEL_UP_MOVE(23, MOVE_LEAF_TORNADO),
LEVEL_UP_MOVE(28, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(34, MOVE_HYPER_VOICE),
LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(46, MOVE_LEAF_STORM),
- //LEVEL_UP_MOVE(52, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(46, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(52, MOVE_COTTON_GUARD),
LEVEL_UP_END
};
@@ -16864,14 +16865,14 @@ static const struct LevelUpMove sWoolooLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL),
- //LEVEL_UP_MOVE( 8, MOVE_COPYCAT),
- //LEVEL_UP_MOVE(12, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE( 8, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(12, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(21, MOVE_HEADBUTT),
LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(28, MOVE_GUARD_SWAP),
+ LEVEL_UP_MOVE(28, MOVE_GUARD_SWAP),
LEVEL_UP_MOVE(32, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(36, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(36, MOVE_COTTON_GUARD),
LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
@@ -16880,16 +16881,16 @@ static const struct LevelUpMove sDubwoolLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
- //LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
- //LEVEL_UP_MOVE(12, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
+ LEVEL_UP_MOVE(12, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(21, MOVE_HEADBUTT),
LEVEL_UP_MOVE(27, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(32, MOVE_GUARD_SWAP),
+ LEVEL_UP_MOVE(32, MOVE_GUARD_SWAP),
LEVEL_UP_MOVE(38, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(44, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE(44, MOVE_COTTON_GUARD),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(56, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(56, MOVE_LAST_RESORT),
LEVEL_UP_END
};
@@ -16900,60 +16901,60 @@ static const struct LevelUpMove sChewtleLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_PROTECT),
LEVEL_UP_MOVE(21, MOVE_HEADBUTT),
LEVEL_UP_MOVE(28, MOVE_COUNTER),
- //LEVEL_UP_MOVE(35, MOVE_JAW_LOCK),
- //LEVEL_UP_MOVE(42, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(35, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE(42, MOVE_LIQUIDATION),
LEVEL_UP_MOVE(49, MOVE_BODY_SLAM),
LEVEL_UP_END
};
static const struct LevelUpMove sDrednawLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ROCK_TOMB),
+ //LEVEL_UP_MOVE( 0, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE( 1, MOVE_ROCK_TOMB),
- //LEVEL_UP_MOVE( 1, MOVE_RAZOR_SHELL),
+ LEVEL_UP_MOVE( 1, MOVE_RAZOR_SHELL),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
- //LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE(21, MOVE_HEADBUTT),
LEVEL_UP_MOVE(30, MOVE_COUNTER),
- //LEVEL_UP_MOVE(39, MOVE_JAW_LOCK),
- //LEVEL_UP_MOVE(48, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(39, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE(48, MOVE_LIQUIDATION),
LEVEL_UP_MOVE(57, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(66, MOVE_HEAD_SMASH),
+ LEVEL_UP_MOVE(66, MOVE_HEAD_SMASH),
LEVEL_UP_END
};
static const struct LevelUpMove sYamperLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
- //LEVEL_UP_MOVE( 5, MOVE_NUZZLE),
+ LEVEL_UP_MOVE( 5, MOVE_NUZZLE),
LEVEL_UP_MOVE(10, MOVE_BITE),
LEVEL_UP_MOVE(15, MOVE_ROAR),
LEVEL_UP_MOVE(20, MOVE_SPARK),
LEVEL_UP_MOVE(26, MOVE_CHARM),
LEVEL_UP_MOVE(30, MOVE_CRUNCH),
LEVEL_UP_MOVE(35, MOVE_CHARGE),
- //LEVEL_UP_MOVE(40, MOVE_WILD_CHARGE),
- //LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(40, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
static const struct LevelUpMove sBoltundLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ELECTRIFY),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIFY),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
- //LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
+ LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE(15, MOVE_ROAR),
LEVEL_UP_MOVE(20, MOVE_SPARK),
LEVEL_UP_MOVE(28, MOVE_CHARM),
LEVEL_UP_MOVE(34, MOVE_CRUNCH),
LEVEL_UP_MOVE(41, MOVE_CHARGE),
- //LEVEL_UP_MOVE(48, MOVE_WILD_CHARGE),
- //LEVEL_UP_MOVE(55, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(62, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE(48, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(55, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(62, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_END
};
@@ -16961,48 +16962,48 @@ static const struct LevelUpMove sRolycolyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 5, MOVE_RAPID_SPIN),
- //LEVEL_UP_MOVE(10, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(10, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(25, MOVE_INCINERATE),
- //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
- //LEVEL_UP_MOVE(35, MOVE_HEAT_CRASH),
+ LEVEL_UP_MOVE(25, MOVE_INCINERATE),
+ LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(35, MOVE_HEAT_CRASH),
LEVEL_UP_MOVE(40, MOVE_ROCK_BLAST),
LEVEL_UP_END
};
static const struct LevelUpMove sCarkolLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_FLAME_CHARGE),
- //LEVEL_UP_MOVE( 1, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE( 1, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
- //LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(27, MOVE_INCINERATE),
- //LEVEL_UP_MOVE(35, MOVE_STEALTH_ROCK),
- //LEVEL_UP_MOVE(41, MOVE_HEAT_CRASH),
+ LEVEL_UP_MOVE(27, MOVE_INCINERATE),
+ LEVEL_UP_MOVE(35, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(41, MOVE_HEAT_CRASH),
LEVEL_UP_MOVE(48, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(55, MOVE_BURN_UP),
+ LEVEL_UP_MOVE(55, MOVE_BURN_UP),
LEVEL_UP_END
};
static const struct LevelUpMove sCoalossalLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_TAR_SHOT),
- //LEVEL_UP_MOVE( 1, MOVE_TAR_SHOT),
- //LEVEL_UP_MOVE( 1, MOVE_FLAME_CHARGE),
+ LEVEL_UP_MOVE( 1, MOVE_TAR_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
- //LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN),
- //LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(15, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(27, MOVE_INCINERATE),
- //LEVEL_UP_MOVE(37, MOVE_STEALTH_ROCK),
- //LEVEL_UP_MOVE(45, MOVE_HEAT_CRASH),
+ LEVEL_UP_MOVE(27, MOVE_INCINERATE),
+ LEVEL_UP_MOVE(37, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(45, MOVE_HEAT_CRASH),
LEVEL_UP_MOVE(54, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(63, MOVE_BURN_UP),
+ LEVEL_UP_MOVE(63, MOVE_BURN_UP),
LEVEL_UP_END
};
@@ -17013,29 +17014,29 @@ static const struct LevelUpMove sApplinLevelUpLearnset[] = {
};
static const struct LevelUpMove sFlappleLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK),
+ //LEVEL_UP_MOVE( 0, MOVE_WING_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
- //LEVEL_UP_MOVE( 4, MOVE_ACID_SPRAY),
- //LEVEL_UP_MOVE( 8, MOVE_ACROBATICS),
+ LEVEL_UP_MOVE( 4, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE( 8, MOVE_ACROBATICS),
LEVEL_UP_MOVE(12, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(16, MOVE_PROTECT),
LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(24, MOVE_DRAGON_DANCE),
- //LEVEL_UP_MOVE(28, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(32, MOVE_GRAV_APPLE),
+ LEVEL_UP_MOVE(28, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(32, MOVE_GRAV_APPLE),
LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(40, MOVE_FLY),
- //LEVEL_UP_MOVE(44, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(44, MOVE_DRAGON_RUSH),
LEVEL_UP_END
};
static const struct LevelUpMove sAppletunLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_HEADBUTT),
+ //LEVEL_UP_MOVE( 0, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
@@ -17048,11 +17049,11 @@ static const struct LevelUpMove sAppletunLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_PROTECT),
LEVEL_UP_MOVE(20, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(24, MOVE_RECOVER),
- //LEVEL_UP_MOVE(28, MOVE_APPLE_ACID),
+ LEVEL_UP_MOVE(28, MOVE_APPLE_ACID),
LEVEL_UP_MOVE(32, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(44, MOVE_ENERGY_BALL),
LEVEL_UP_END
};
@@ -17060,14 +17061,14 @@ static const struct LevelUpMove sSilicobraLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 5, MOVE_MINIMIZE),
- //LEVEL_UP_MOVE(10, MOVE_BRUTAL_SWING),
- //LEVEL_UP_MOVE(15, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(10, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(15, MOVE_BULLDOZE),
LEVEL_UP_MOVE(20, MOVE_HEADBUTT),
LEVEL_UP_MOVE(25, MOVE_GLARE),
LEVEL_UP_MOVE(30, MOVE_DIG),
LEVEL_UP_MOVE(35, MOVE_SANDSTORM),
LEVEL_UP_MOVE(40, MOVE_SLAM),
- //LEVEL_UP_MOVE(45, MOVE_COIL),
+ LEVEL_UP_MOVE(45, MOVE_COIL),
LEVEL_UP_MOVE(50, MOVE_SAND_TOMB),
LEVEL_UP_END
};
@@ -17077,27 +17078,27 @@ static const struct LevelUpMove sSandacondaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_MINIMIZE),
- //LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING),
- //LEVEL_UP_MOVE(15, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(15, MOVE_BULLDOZE),
LEVEL_UP_MOVE(20, MOVE_HEADBUTT),
LEVEL_UP_MOVE(25, MOVE_GLARE),
LEVEL_UP_MOVE(30, MOVE_DIG),
LEVEL_UP_MOVE(35, MOVE_SANDSTORM),
LEVEL_UP_MOVE(42, MOVE_SLAM),
- //LEVEL_UP_MOVE(49, MOVE_COIL),
+ LEVEL_UP_MOVE(49, MOVE_COIL),
LEVEL_UP_MOVE(51, MOVE_SAND_TOMB),
LEVEL_UP_END
};
static const struct LevelUpMove sCramorantLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_BELCH),
+ LEVEL_UP_MOVE( 1, MOVE_BELCH),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_STOCKPILE),
LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
LEVEL_UP_MOVE( 1, MOVE_SPIT_UP),
LEVEL_UP_MOVE( 7, MOVE_WATER_GUN),
LEVEL_UP_MOVE(14, MOVE_FURY_ATTACK),
- //LEVEL_UP_MOVE(21, MOVE_PLUCK),
+ LEVEL_UP_MOVE(21, MOVE_PLUCK),
LEVEL_UP_MOVE(28, MOVE_DIVE),
LEVEL_UP_MOVE(35, MOVE_DRILL_PECK),
LEVEL_UP_MOVE(42, MOVE_AMNESIA),
@@ -17108,37 +17109,37 @@ static const struct LevelUpMove sCramorantLevelUpLearnset[] = {
static const struct LevelUpMove sArrokudaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_PECK),
- //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
LEVEL_UP_MOVE( 6, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(12, MOVE_BITE),
LEVEL_UP_MOVE(18, MOVE_AGILITY),
LEVEL_UP_MOVE(24, MOVE_DIVE),
- //LEVEL_UP_MOVE(30, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(30, MOVE_LASER_FOCUS),
LEVEL_UP_MOVE(36, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(42, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(42, MOVE_LIQUIDATION),
LEVEL_UP_MOVE(48, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sBarraskewdaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP),
+ LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP),
LEVEL_UP_MOVE( 1, MOVE_PECK),
- //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE(18, MOVE_AGILITY),
LEVEL_UP_MOVE(24, MOVE_DIVE),
- //LEVEL_UP_MOVE(32, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(32, MOVE_LASER_FOCUS),
LEVEL_UP_MOVE(40, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(48, MOVE_LIQUIDATION),
+ LEVEL_UP_MOVE(48, MOVE_LIQUIDATION),
LEVEL_UP_MOVE(56, MOVE_DOUBLE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sToxelLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_BELCH),
- //LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK),
- //LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
+ LEVEL_UP_MOVE( 1, MOVE_BELCH),
+ LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK),
+ LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_FLAIL),
LEVEL_UP_MOVE( 1, MOVE_ACID),
@@ -17146,32 +17147,32 @@ static const struct LevelUpMove sToxelLevelUpLearnset[] = {
};
static const struct LevelUpMove sToxtricityLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SPARK),
+ //LEVEL_UP_MOVE( 0, MOVE_SPARK),
LEVEL_UP_MOVE( 1, MOVE_SPARK),
- //LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
- //LEVEL_UP_MOVE( 1, MOVE_BELCH),
- //LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK),
- //LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
+ LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
+ LEVEL_UP_MOVE( 1, MOVE_BELCH),
+ LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK),
+ LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_FLAIL),
LEVEL_UP_MOVE( 1, MOVE_ACID),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
- //LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 4, MOVE_CHARGE),
LEVEL_UP_MOVE( 8, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(12, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(16, MOVE_TAUNT),
- //LEVEL_UP_MOVE(20, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(20, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(24, MOVE_SCREECH),
LEVEL_UP_MOVE(28, MOVE_SWAGGER),
LEVEL_UP_MOVE(32, MOVE_TOXIC),
- //LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(40, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(44, MOVE_OVERDRIVE),
- //LEVEL_UP_MOVE(48, MOVE_BOOMBURST),
- //LEVEL_UP_MOVE(52, MOVE_SHIFT_GEAR),
+ LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(40, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(44, MOVE_OVERDRIVE),
+ LEVEL_UP_MOVE(48, MOVE_BOOMBURST),
+ LEVEL_UP_MOVE(52, MOVE_SHIFT_GEAR),
LEVEL_UP_END
};
@@ -17181,39 +17182,39 @@ static const struct LevelUpMove sSizzlipedeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_WRAP),
LEVEL_UP_MOVE(10, MOVE_BITE),
LEVEL_UP_MOVE(15, MOVE_FLAME_WHEEL),
- //LEVEL_UP_MOVE(20, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(25, MOVE_COIL),
+ LEVEL_UP_MOVE(20, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(25, MOVE_COIL),
LEVEL_UP_MOVE(30, MOVE_SLAM),
LEVEL_UP_MOVE(35, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE(40, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(45, MOVE_FIRE_LASH),
- //LEVEL_UP_MOVE(50, MOVE_LUNGE),
- //LEVEL_UP_MOVE(55, MOVE_BURN_UP),
+ LEVEL_UP_MOVE(45, MOVE_FIRE_LASH),
+ LEVEL_UP_MOVE(50, MOVE_LUNGE),
+ LEVEL_UP_MOVE(55, MOVE_BURN_UP),
LEVEL_UP_END
};
static const struct LevelUpMove sCentiskorchLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_INFERNO),
+ LEVEL_UP_MOVE( 1, MOVE_INFERNO),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE(15, MOVE_FLAME_WHEEL),
- //LEVEL_UP_MOVE(20, MOVE_BUG_BITE),
- //LEVEL_UP_MOVE(25, MOVE_COIL),
+ LEVEL_UP_MOVE(20, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(25, MOVE_COIL),
LEVEL_UP_MOVE(32, MOVE_SLAM),
LEVEL_UP_MOVE(39, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE(46, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(53, MOVE_FIRE_LASH),
- //LEVEL_UP_MOVE(60, MOVE_LUNGE),
- //LEVEL_UP_MOVE(67, MOVE_BURN_UP),
+ LEVEL_UP_MOVE(53, MOVE_FIRE_LASH),
+ LEVEL_UP_MOVE(60, MOVE_LUNGE),
+ LEVEL_UP_MOVE(67, MOVE_BURN_UP),
LEVEL_UP_END
};
static const struct LevelUpMove sClobbopusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 5, MOVE_FEINT),
+ LEVEL_UP_MOVE( 5, MOVE_FEINT),
LEVEL_UP_MOVE(10, MOVE_BIND),
LEVEL_UP_MOVE(15, MOVE_DETECT),
LEVEL_UP_MOVE(20, MOVE_BRICK_BREAK),
@@ -17227,11 +17228,11 @@ static const struct LevelUpMove sClobbopusLevelUpLearnset[] = {
static const struct LevelUpMove sGrapploctLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_OCTOLOCK),
- //LEVEL_UP_MOVE( 1, MOVE_OCTOLOCK),
+ LEVEL_UP_MOVE( 1, MOVE_OCTOLOCK),
LEVEL_UP_MOVE( 1, MOVE_OCTAZOOKA),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
LEVEL_UP_MOVE( 1, MOVE_BIND),
LEVEL_UP_MOVE(15, MOVE_DETECT),
LEVEL_UP_MOVE(20, MOVE_BRICK_BREAK),
@@ -17240,172 +17241,172 @@ static const struct LevelUpMove sGrapploctLevelUpLearnset[] = {
LEVEL_UP_MOVE(35, MOVE_TAUNT),
LEVEL_UP_MOVE(40, MOVE_REVERSAL),
LEVEL_UP_MOVE(45, MOVE_SUPERPOWER),
- //LEVEL_UP_MOVE(50, MOVE_TOPSY_TURVY),
+ LEVEL_UP_MOVE(50, MOVE_TOPSY_TURVY),
LEVEL_UP_END
};
static const struct LevelUpMove sSinisteaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
- //LEVEL_UP_MOVE( 6, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE( 6, MOVE_AROMATIC_MIST),
LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(18, MOVE_PROTECT),
- //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(48, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(54, MOVE_MEMENTO),
- //LEVEL_UP_MOVE(60, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(60, MOVE_SHELL_SMASH),
LEVEL_UP_END
};
static const struct LevelUpMove sPolteageistLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_TEATIME),
- //LEVEL_UP_MOVE( 1, MOVE_TEATIME),
- //LEVEL_UP_MOVE( 1, MOVE_STRENGTH_SAP),
+ LEVEL_UP_MOVE( 1, MOVE_TEATIME),
+ LEVEL_UP_MOVE( 1, MOVE_STRENGTH_SAP),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
- //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(18, MOVE_PROTECT),
- //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(42, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE(48, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(54, MOVE_MEMENTO),
- //LEVEL_UP_MOVE(60, MOVE_SHELL_SMASH),
+ LEVEL_UP_MOVE(60, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(66, MOVE_CURSE),
LEVEL_UP_END
};
static const struct LevelUpMove sHatennaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
- //LEVEL_UP_MOVE( 5, MOVE_LIFE_DEW),
- //LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 5, MOVE_LIFE_DEW),
+ LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(15, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(20, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(35, MOVE_CALM_MIND),
LEVEL_UP_MOVE(40, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(45, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(45, MOVE_HEALING_WISH),
LEVEL_UP_END
};
static const struct LevelUpMove sHattremLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_BRUTAL_SWING),
- //LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
- //LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW),
- //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(15, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(20, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(37, MOVE_CALM_MIND),
LEVEL_UP_MOVE(44, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(51, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(51, MOVE_HEALING_WISH),
LEVEL_UP_END
};
static const struct LevelUpMove sHattereneLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_PSYCHO_CUT),
- //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT),
- //LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE( 1, MOVE_BRUTAL_SWING),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
- //LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW),
- //LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(15, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(20, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE),
- //LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE(25, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(30, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(37, MOVE_CALM_MIND),
LEVEL_UP_MOVE(46, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(55, MOVE_HEALING_WISH),
- //LEVEL_UP_MOVE(64, MOVE_MAGIC_POWDER),
+ LEVEL_UP_MOVE(55, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(64, MOVE_MAGIC_POWDER),
LEVEL_UP_END
};
static const struct LevelUpMove sImpidimpLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE( 1, MOVE_CONFIDE),
+ LEVEL_UP_MOVE( 1, MOVE_CONFIDE),
LEVEL_UP_MOVE( 4, MOVE_BITE),
LEVEL_UP_MOVE( 8, MOVE_FLATTER),
LEVEL_UP_MOVE(12, MOVE_FAKE_TEARS),
- //LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
LEVEL_UP_MOVE(20, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(28, MOVE_TORMENT),
- //LEVEL_UP_MOVE(33, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(36, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(40, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(44, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(33, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(36, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(40, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(44, MOVE_FOUL_PLAY),
LEVEL_UP_END
};
static const struct LevelUpMove sMorgremLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_FALSE_SURRENDER),
- //LEVEL_UP_MOVE( 1, MOVE_FALSE_SURRENDER),
+ LEVEL_UP_MOVE( 1, MOVE_FALSE_SURRENDER),
LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE( 1, MOVE_CONFIDE),
+ LEVEL_UP_MOVE( 1, MOVE_CONFIDE),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_FLATTER),
LEVEL_UP_MOVE(12, MOVE_FAKE_TEARS),
- //LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
LEVEL_UP_MOVE(20, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(28, MOVE_TORMENT),
- //LEVEL_UP_MOVE(35, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(40, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(52, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(35, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(40, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(52, MOVE_FOUL_PLAY),
LEVEL_UP_END
};
static const struct LevelUpMove sGrimmsnarlLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SPIRIT_BREAK),
- //LEVEL_UP_MOVE( 1, MOVE_SPIRIT_BREAK),
- //LEVEL_UP_MOVE( 1, MOVE_FALSE_SURRENDER),
+ LEVEL_UP_MOVE( 1, MOVE_SPIRIT_BREAK),
+ LEVEL_UP_MOVE( 1, MOVE_FALSE_SURRENDER),
LEVEL_UP_MOVE( 1, MOVE_BULK_UP),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_UP_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_UP_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE( 1, MOVE_CONFIDE),
+ LEVEL_UP_MOVE( 1, MOVE_CONFIDE),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_FLATTER),
LEVEL_UP_MOVE(12, MOVE_FAKE_TEARS),
- //LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
LEVEL_UP_MOVE(20, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(28, MOVE_TORMENT),
- //LEVEL_UP_MOVE(35, MOVE_DARK_PULSE),
- //LEVEL_UP_MOVE(40, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(48, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(56, MOVE_FOUL_PLAY),
- //LEVEL_UP_MOVE(64, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(35, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(40, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(48, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(56, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(64, MOVE_HAMMER_ARM),
LEVEL_UP_END
};
static const struct LevelUpMove sObstagoonLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_OBSTRUCT),
- //LEVEL_UP_MOVE( 1, MOVE_OBSTRUCT),
+ LEVEL_UP_MOVE( 1, MOVE_OBSTRUCT),
LEVEL_UP_MOVE( 1, MOVE_CROSS_CHOP),
LEVEL_UP_MOVE( 1, MOVE_SUBMISSION),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
LEVEL_UP_MOVE( 1, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LICK),
- //LEVEL_UP_MOVE( 9, MOVE_SNARL),
+ LEVEL_UP_MOVE( 9, MOVE_SNARL),
LEVEL_UP_MOVE(12, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(18, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(23, MOVE_REST),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
@@ -17418,12 +17419,12 @@ static const struct LevelUpMove sObstagoonLevelUpLearnset[] = {
static const struct LevelUpMove sPerrserkerLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE(12, MOVE_PAY_DAY),
LEVEL_UP_MOVE(16, MOVE_METAL_CLAW),
@@ -17445,10 +17446,10 @@ static const struct LevelUpMove sCursolaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE(15, MOVE_SPITE),
LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(25, MOVE_HEX),
+ LEVEL_UP_MOVE(25, MOVE_HEX),
LEVEL_UP_MOVE(30, MOVE_CURSE),
- //LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP),
- //LEVEL_UP_MOVE(40, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP),
+ LEVEL_UP_MOVE(40, MOVE_POWER_GEM),
LEVEL_UP_MOVE(45, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(50, MOVE_GRUDGE),
LEVEL_UP_MOVE(55, MOVE_MIRROR_COAT),
@@ -17456,34 +17457,34 @@ static const struct LevelUpMove sCursolaLevelUpLearnset[] = {
};
static const struct LevelUpMove sSirfetchdLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_IRON_DEFENSE),
+ //LEVEL_UP_MOVE( 0, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE( 1, MOVE_FIRST_IMPRESSION),
+ LEVEL_UP_MOVE( 1, MOVE_FIRST_IMPRESSION),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(15, MOVE_ROCK_SMASH),
- //LEVEL_UP_MOVE(20, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(20, MOVE_BRUTAL_SWING),
LEVEL_UP_MOVE(25, MOVE_DETECT),
LEVEL_UP_MOVE(30, MOVE_KNOCK_OFF),
- //LEVEL_UP_MOVE(35, MOVE_DEFOG),
+ LEVEL_UP_MOVE(35, MOVE_DEFOG),
LEVEL_UP_MOVE(40, MOVE_BRICK_BREAK),
LEVEL_UP_MOVE(45, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(50, MOVE_SLAM),
LEVEL_UP_MOVE(55, MOVE_LEAF_BLADE),
- //LEVEL_UP_MOVE(60, MOVE_FINAL_GAMBIT),
- //LEVEL_UP_MOVE(65, MOVE_BRAVE_BIRD),
- //LEVEL_UP_MOVE(70, MOVE_METEOR_ASSAULT),
+ LEVEL_UP_MOVE(60, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(65, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(70, MOVE_METEOR_ASSAULT),
LEVEL_UP_END
};
static const struct LevelUpMove sMrRimeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FAKE_TEARS),
LEVEL_UP_MOVE( 1, MOVE_SLACK_OFF),
- //LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
LEVEL_UP_MOVE( 1, MOVE_BLOCK),
- //LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
LEVEL_UP_MOVE( 1, MOVE_ENCORE),
LEVEL_UP_MOVE( 1, MOVE_ROLE_PLAY),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
@@ -17492,21 +17493,21 @@ static const struct LevelUpMove sMrRimeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE( 1, MOVE_REFLECT),
LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM),
- //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 1, MOVE_BATON_PASS),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(12, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(16, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE(16, MOVE_ALLY_SWITCH),
LEVEL_UP_MOVE(20, MOVE_ICY_WIND),
LEVEL_UP_MOVE(24, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(28, MOVE_PSYBEAM),
LEVEL_UP_MOVE(32, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(36, MOVE_MIRROR_COAT),
- //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(44, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(44, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE(48, MOVE_PSYCHIC),
LEVEL_UP_MOVE(52, MOVE_TEETER_DANCE),
LEVEL_UP_END
@@ -17514,58 +17515,58 @@ static const struct LevelUpMove sMrRimeLevelUpLearnset[] = {
static const struct LevelUpMove sRunerigusLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
- //LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW),
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_HAZE),
LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(12, MOVE_DISABLE),
- //LEVEL_UP_MOVE(16, MOVE_BRUTAL_SWING),
- //LEVEL_UP_MOVE(20, MOVE_CRAFTY_SHIELD),
- //LEVEL_UP_MOVE(24, MOVE_HEX),
+ LEVEL_UP_MOVE(16, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(20, MOVE_CRAFTY_SHIELD),
+ LEVEL_UP_MOVE(24, MOVE_HEX),
LEVEL_UP_MOVE(28, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE(32, MOVE_SLAM),
LEVEL_UP_MOVE(38, MOVE_CURSE),
LEVEL_UP_MOVE(44, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(50, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(56, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(56, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(56, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(56, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(62, MOVE_DESTINY_BOND),
LEVEL_UP_END
};
static const struct LevelUpMove sMilceryLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
LEVEL_UP_MOVE( 5, MOVE_SWEET_KISS),
LEVEL_UP_MOVE(10, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(20, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(25, MOVE_ATTRACT),
LEVEL_UP_MOVE(30, MOVE_ACID_ARMOR),
- //LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(40, MOVE_RECOVER),
- //LEVEL_UP_MOVE(45, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(45, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT),
LEVEL_UP_END
};
static const struct LevelUpMove sAlcremieLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DECORATE),
- //LEVEL_UP_MOVE( 1, MOVE_DECORATE),
+ LEVEL_UP_MOVE( 1, MOVE_DECORATE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS),
+ LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(20, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(25, MOVE_ATTRACT),
LEVEL_UP_MOVE(30, MOVE_ACID_ARMOR),
- //LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(40, MOVE_RECOVER),
- //LEVEL_UP_MOVE(45, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT),
+ LEVEL_UP_MOVE(45, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(50, MOVE_ENTRAINMENT),
LEVEL_UP_END
};
@@ -17578,10 +17579,10 @@ static const struct LevelUpMove sFalinksLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_BULK_UP),
LEVEL_UP_MOVE(25, MOVE_ENDURE),
LEVEL_UP_MOVE(30, MOVE_REVERSAL),
- //LEVEL_UP_MOVE(35, MOVE_FIRST_IMPRESSION),
- //LEVEL_UP_MOVE(40, MOVE_NO_RETREAT),
+ LEVEL_UP_MOVE(35, MOVE_FIRST_IMPRESSION),
+ LEVEL_UP_MOVE(40, MOVE_NO_RETREAT),
LEVEL_UP_MOVE(45, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(50, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(55, MOVE_MEGAHORN),
LEVEL_UP_MOVE(60, MOVE_COUNTER),
LEVEL_UP_END
@@ -17597,56 +17598,56 @@ static const struct LevelUpMove sPincurchinLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(30, MOVE_RECOVER),
LEVEL_UP_MOVE(35, MOVE_CURSE),
- //LEVEL_UP_MOVE(40, MOVE_ELECTRIC_TERRAIN),
- //LEVEL_UP_MOVE(45, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(50, MOVE_ZING_ZAP),
- //LEVEL_UP_MOVE(55, MOVE_ACUPRESSURE),
- //LEVEL_UP_MOVE(60, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(40, MOVE_ELECTRIC_TERRAIN),
+ LEVEL_UP_MOVE(45, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(50, MOVE_ZING_ZAP),
+ LEVEL_UP_MOVE(55, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(60, MOVE_DISCHARGE),
LEVEL_UP_END
};
static const struct LevelUpMove sSnomLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
- //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
LEVEL_UP_END
};
static const struct LevelUpMove sFrosmothLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ICY_WIND),
+ //LEVEL_UP_MOVE( 0, MOVE_ICY_WIND),
LEVEL_UP_MOVE( 1, MOVE_ICY_WIND),
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
- //LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE( 1, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_ATTRACT),
LEVEL_UP_MOVE( 4, MOVE_STUN_SPORE),
- //LEVEL_UP_MOVE( 8, MOVE_INFESTATION),
+ LEVEL_UP_MOVE( 8, MOVE_INFESTATION),
LEVEL_UP_MOVE(12, MOVE_MIST),
- //LEVEL_UP_MOVE(16, MOVE_DEFOG),
+ LEVEL_UP_MOVE(16, MOVE_DEFOG),
LEVEL_UP_MOVE(21, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE(24, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(28, MOVE_HAIL),
- //LEVEL_UP_MOVE(32, MOVE_BUG_BUZZ),
- //LEVEL_UP_MOVE(36, MOVE_AURORA_VEIL),
+ LEVEL_UP_MOVE(32, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(36, MOVE_AURORA_VEIL),
LEVEL_UP_MOVE(40, MOVE_BLIZZARD),
- //LEVEL_UP_MOVE(44, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(48, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE(52, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE(44, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(48, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(52, MOVE_QUIVER_DANCE),
LEVEL_UP_END
};
static const struct LevelUpMove sStonjournerLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_BLOCK),
- //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(12, MOVE_ROCK_TOMB),
- //LEVEL_UP_MOVE(18, MOVE_GRAVITY),
+ LEVEL_UP_MOVE(18, MOVE_GRAVITY),
LEVEL_UP_MOVE(24, MOVE_STOMP),
- //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(36, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(42, MOVE_BODY_SLAM),
- //LEVEL_UP_MOVE(48, MOVE_WIDE_GUARD),
- //LEVEL_UP_MOVE(54, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE(60, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(48, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(54, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(60, MOVE_STONE_EDGE),
LEVEL_UP_MOVE(66, MOVE_MEGA_KICK),
LEVEL_UP_END
};
@@ -17659,28 +17660,28 @@ static const struct LevelUpMove sEiscueLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_ICY_WIND),
LEVEL_UP_MOVE(24, MOVE_HEADBUTT),
LEVEL_UP_MOVE(30, MOVE_AMNESIA),
- //LEVEL_UP_MOVE(36, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE(36, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE(42, MOVE_HAIL),
- //LEVEL_UP_MOVE(48, MOVE_AURORA_VEIL),
+ LEVEL_UP_MOVE(48, MOVE_AURORA_VEIL),
LEVEL_UP_MOVE(54, MOVE_SURF),
LEVEL_UP_MOVE(60, MOVE_BLIZZARD),
LEVEL_UP_END
};
static const struct LevelUpMove sIndeedeeLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 5, MOVE_ENCORE),
- //LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(15, MOVE_PSYBEAM),
LEVEL_UP_MOVE(20, MOVE_HELPING_HAND),
- //LEVEL_UP_MOVE(25, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(25, MOVE_AFTER_YOU),
LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(35, MOVE_PSYCHIC),
LEVEL_UP_MOVE(40, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(45, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(50, MOVE_PSYCHIC_TERRAIN),
- //LEVEL_UP_MOVE(55, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(45, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(50, MOVE_PSYCHIC_TERRAIN),
+ LEVEL_UP_MOVE(55, MOVE_LAST_RESORT),
LEVEL_UP_END
};
@@ -17688,7 +17689,7 @@ static const struct LevelUpMove sMorpekoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 5, MOVE_LEER),
- //LEVEL_UP_MOVE(10, MOVE_POWER_TRIP),
+ LEVEL_UP_MOVE(10, MOVE_POWER_TRIP),
LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(20, MOVE_FLATTER),
LEVEL_UP_MOVE(25, MOVE_BITE),
@@ -17697,7 +17698,7 @@ static const struct LevelUpMove sMorpekoLevelUpLearnset[] = {
LEVEL_UP_MOVE(40, MOVE_AGILITY),
LEVEL_UP_MOVE(45, MOVE_BULLET_SEED),
LEVEL_UP_MOVE(50, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(55, MOVE_AURA_WHEEL),
+ LEVEL_UP_MOVE(55, MOVE_AURA_WHEEL),
LEVEL_UP_MOVE(60, MOVE_THRASH),
LEVEL_UP_END
};
@@ -17707,33 +17708,33 @@ static const struct LevelUpMove sCufantLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 5, MOVE_ROLLOUT),
LEVEL_UP_MOVE(10, MOVE_ROCK_SMASH),
- //LEVEL_UP_MOVE(15, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(15, MOVE_BULLDOZE),
LEVEL_UP_MOVE(20, MOVE_STOMP),
LEVEL_UP_MOVE(25, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(30, MOVE_DIG),
LEVEL_UP_MOVE(35, MOVE_STRENGTH),
- //LEVEL_UP_MOVE(40, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(50, MOVE_HIGH_HORSEPOWER),
+ LEVEL_UP_MOVE(40, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(45, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(50, MOVE_HIGH_HORSEPOWER),
LEVEL_UP_MOVE(55, MOVE_SUPERPOWER),
LEVEL_UP_END
};
static const struct LevelUpMove sCopperajahLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_HEAVY_SLAM),
- //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
- //LEVEL_UP_MOVE(15, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(15, MOVE_BULLDOZE),
LEVEL_UP_MOVE(20, MOVE_STOMP),
LEVEL_UP_MOVE(25, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(30, MOVE_DIG),
LEVEL_UP_MOVE(37, MOVE_STRENGTH),
- //LEVEL_UP_MOVE(44, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(51, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE(58, MOVE_HIGH_HORSEPOWER),
+ LEVEL_UP_MOVE(44, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(51, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(58, MOVE_HIGH_HORSEPOWER),
LEVEL_UP_MOVE(65, MOVE_SUPERPOWER),
LEVEL_UP_END
};
@@ -17744,14 +17745,14 @@ static const struct LevelUpMove sDracozoltLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_CHARGE),
LEVEL_UP_MOVE(14, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(28, MOVE_PLUCK),
- //LEVEL_UP_MOVE(35, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(28, MOVE_PLUCK),
+ LEVEL_UP_MOVE(35, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(42, MOVE_STOMP),
LEVEL_UP_MOVE(49, MOVE_SLAM),
- //LEVEL_UP_MOVE(56, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(63, MOVE_BOLT_BEAK),
- //LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(77, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(56, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(63, MOVE_BOLT_BEAK),
+ LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(77, MOVE_DRAGON_RUSH),
LEVEL_UP_END
};
@@ -17759,15 +17760,15 @@ static const struct LevelUpMove sArctozoltLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 7, MOVE_CHARGE),
- //LEVEL_UP_MOVE(14, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE(14, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(28, MOVE_PLUCK),
- //LEVEL_UP_MOVE(35, MOVE_AVALANCHE),
- //LEVEL_UP_MOVE(42, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE(28, MOVE_PLUCK),
+ LEVEL_UP_MOVE(35, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(42, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE(49, MOVE_SLAM),
- //LEVEL_UP_MOVE(56, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(63, MOVE_BOLT_BEAK),
- //LEVEL_UP_MOVE(70, MOVE_ICICLE_CRASH),
+ LEVEL_UP_MOVE(56, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(63, MOVE_BOLT_BEAK),
+ LEVEL_UP_MOVE(70, MOVE_ICICLE_CRASH),
LEVEL_UP_MOVE(77, MOVE_BLIZZARD),
LEVEL_UP_END
};
@@ -17776,16 +17777,16 @@ static const struct LevelUpMove sDracovishLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 7, MOVE_PROTECT),
- //LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(14, MOVE_BRUTAL_SWING),
LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(28, MOVE_BITE),
LEVEL_UP_MOVE(35, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(42, MOVE_STOMP),
LEVEL_UP_MOVE(49, MOVE_SUPER_FANG),
LEVEL_UP_MOVE(56, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(63, MOVE_FISHIOUS_REND),
- //LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(77, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(63, MOVE_FISHIOUS_REND),
+ LEVEL_UP_MOVE(70, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(77, MOVE_DRAGON_RUSH),
LEVEL_UP_END
};
@@ -17796,12 +17797,12 @@ static const struct LevelUpMove sArctovishLevelUpLearnset[] = {
LEVEL_UP_MOVE(14, MOVE_ICY_WIND),
LEVEL_UP_MOVE(21, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(28, MOVE_BITE),
- //LEVEL_UP_MOVE(35, MOVE_AURORA_VEIL),
- //LEVEL_UP_MOVE(42, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE(35, MOVE_AURORA_VEIL),
+ LEVEL_UP_MOVE(42, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE(49, MOVE_SUPER_FANG),
LEVEL_UP_MOVE(56, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(63, MOVE_FISHIOUS_REND),
- //LEVEL_UP_MOVE(70, MOVE_ICICLE_CRASH),
+ LEVEL_UP_MOVE(63, MOVE_FISHIOUS_REND),
+ LEVEL_UP_MOVE(70, MOVE_ICICLE_CRASH),
LEVEL_UP_MOVE(77, MOVE_BLIZZARD),
LEVEL_UP_END
};
@@ -17810,22 +17811,22 @@ static const struct LevelUpMove sDuraludonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 6, MOVE_ROCK_SMASH),
- //LEVEL_UP_MOVE(12, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(12, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(18, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(24, MOVE_BREAKING_SWIPE),
- //LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE(24, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE(30, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(42, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(42, MOVE_LASER_FOCUS),
LEVEL_UP_MOVE(48, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(54, MOVE_FLASH_CANNON),
- //LEVEL_UP_MOVE(60, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE(54, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(60, MOVE_METAL_BURST),
LEVEL_UP_MOVE(66, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sDreepyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- //LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
+ LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_END
@@ -17833,102 +17834,102 @@ static const struct LevelUpMove sDreepyLevelUpLearnset[] = {
static const struct LevelUpMove sDrakloakLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- //LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
+ LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 6, MOVE_LOCK_ON),
- //LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(18, MOVE_HEX),
+ LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(18, MOVE_HEX),
LEVEL_UP_MOVE(24, MOVE_AGILITY),
- //LEVEL_UP_MOVE(30, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE(36, MOVE_U_TURN),
+ LEVEL_UP_MOVE(30, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(36, MOVE_U_TURN),
LEVEL_UP_MOVE(42, MOVE_DRAGON_DANCE),
- //LEVEL_UP_MOVE(48, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(48, MOVE_PHANTOM_FORCE),
LEVEL_UP_MOVE(54, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(61, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(61, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(66, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(72, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(72, MOVE_LAST_RESORT),
LEVEL_UP_END
};
static const struct LevelUpMove sDragapultLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DRAGON_DARTS),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_DARTS),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_DARTS),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
- //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- //LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
+ LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 6, MOVE_LOCK_ON),
- //LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(18, MOVE_HEX),
+ LEVEL_UP_MOVE(12, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(18, MOVE_HEX),
LEVEL_UP_MOVE(24, MOVE_AGILITY),
- //LEVEL_UP_MOVE(30, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE(36, MOVE_U_TURN),
+ LEVEL_UP_MOVE(30, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(36, MOVE_U_TURN),
LEVEL_UP_MOVE(42, MOVE_DRAGON_DANCE),
- //LEVEL_UP_MOVE(48, MOVE_PHANTOM_FORCE),
+ LEVEL_UP_MOVE(48, MOVE_PHANTOM_FORCE),
LEVEL_UP_MOVE(54, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(63, MOVE_DRAGON_RUSH),
+ LEVEL_UP_MOVE(63, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE(70, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(78, MOVE_LAST_RESORT),
+ LEVEL_UP_MOVE(78, MOVE_LAST_RESORT),
LEVEL_UP_END
};
static const struct LevelUpMove sZacianLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD),
- //LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SACRED_SWORD),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_HOWL),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE(11, MOVE_SLASH),
LEVEL_UP_MOVE(22, MOVE_SWORDS_DANCE),
- //LEVEL_UP_MOVE(33, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(44, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(33, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(44, MOVE_LASER_FOCUS),
LEVEL_UP_MOVE(55, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(66, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(77, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(66, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(77, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
static const struct LevelUpMove sZamazentaLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
- //LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_HOWL),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE(11, MOVE_SLASH),
LEVEL_UP_MOVE(22, MOVE_IRON_DEFENSE),
- //LEVEL_UP_MOVE(33, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(44, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(33, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(44, MOVE_LASER_FOCUS),
LEVEL_UP_MOVE(55, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(66, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(77, MOVE_CLOSE_COMBAT),
- //LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT),
+ LEVEL_UP_MOVE(66, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(77, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(88, MOVE_GIGA_IMPACT),
LEVEL_UP_END
};
static const struct LevelUpMove sEternatusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POISON_TAIL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_TAIL),
LEVEL_UP_MOVE( 1, MOVE_AGILITY),
LEVEL_UP_MOVE( 8, MOVE_TOXIC),
- //LEVEL_UP_MOVE(16, MOVE_VENOSHOCK),
+ LEVEL_UP_MOVE(16, MOVE_VENOSHOCK),
LEVEL_UP_MOVE(24, MOVE_DRAGON_DANCE),
- //LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
- //LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
+ LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(48, MOVE_FLAMETHROWER),
- //LEVEL_UP_MOVE(56, MOVE_DYNAMAX_CANNON),
+ LEVEL_UP_MOVE(56, MOVE_DYNAMAX_CANNON),
LEVEL_UP_MOVE(64, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE(72, MOVE_RECOVER),
LEVEL_UP_MOVE(80, MOVE_HYPER_BEAM),
- //LEVEL_UP_MOVE(88, MOVE_ETERNABEAM),
+ LEVEL_UP_MOVE(88, MOVE_ETERNABEAM),
LEVEL_UP_END
};
@@ -17943,18 +17944,18 @@ static const struct LevelUpMove sKubfuLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_BRICK_BREAK),
LEVEL_UP_MOVE(28, MOVE_DETECT),
LEVEL_UP_MOVE(32, MOVE_BULK_UP),
- //LEVEL_UP_MOVE(36, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(36, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(40, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(44, MOVE_COUNTER),
- //LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(52, MOVE_FOCUS_PUNCH),
LEVEL_UP_END
};
static const struct LevelUpMove sUrshifuLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_WICKED_BLOW),
- //LEVEL_UP_MOVE( 1, MOVE_WICKED_BLOW),
- //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_WICKED_BLOW),
+ LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ENDURE),
@@ -17965,10 +17966,10 @@ static const struct LevelUpMove sUrshifuLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_BRICK_BREAK),
LEVEL_UP_MOVE(28, MOVE_DETECT),
LEVEL_UP_MOVE(32, MOVE_BULK_UP),
- //LEVEL_UP_MOVE(36, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(36, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(40, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(44, MOVE_COUNTER),
- //LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(52, MOVE_FOCUS_PUNCH),
LEVEL_UP_END
};
@@ -17981,30 +17982,30 @@ static const struct LevelUpMove sZarudeLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_GROWTH),
LEVEL_UP_MOVE(24, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(30, MOVE_SCARY_FACE),
- //LEVEL_UP_MOVE(36, MOVE_GRASS_KNOT),
+ LEVEL_UP_MOVE(36, MOVE_GRASS_KNOT),
LEVEL_UP_MOVE(42, MOVE_BITE),
- //LEVEL_UP_MOVE(48, MOVE_U_TURN),
+ LEVEL_UP_MOVE(48, MOVE_U_TURN),
LEVEL_UP_MOVE(54, MOVE_SWAGGER),
- //LEVEL_UP_MOVE(60, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(60, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(66, MOVE_SYNTHESIS),
- //LEVEL_UP_MOVE(72, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(72, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(78, MOVE_THRASH),
- //LEVEL_UP_MOVE(84, MOVE_POWER_WHIP),
- //LEVEL_UP_MOVE(90, MOVE_JUNGLE_HEALING),
+ LEVEL_UP_MOVE(84, MOVE_POWER_WHIP),
+ LEVEL_UP_MOVE(90, MOVE_JUNGLE_HEALING),
LEVEL_UP_END
};
static const struct LevelUpMove sRegielekiLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
- //LEVEL_UP_MOVE( 6, MOVE_ELECTROWEB),
+ LEVEL_UP_MOVE( 6, MOVE_ELECTROWEB),
LEVEL_UP_MOVE(12, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(18, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(24, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE(30, MOVE_EXTREME_SPEED),
- //LEVEL_UP_MOVE(36, MOVE_THUNDER_CAGE),
+ LEVEL_UP_MOVE(36, MOVE_THUNDER_CAGE),
LEVEL_UP_MOVE(42, MOVE_THUNDERBOLT),
- //LEVEL_UP_MOVE(48, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE(48, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE(54, MOVE_THRASH),
LEVEL_UP_MOVE(60, MOVE_LOCK_ON),
LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON),
@@ -18022,11 +18023,11 @@ static const struct LevelUpMove sRegidragoLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(30, MOVE_CRUNCH),
LEVEL_UP_MOVE(36, MOVE_DRAGON_CLAW),
- //LEVEL_UP_MOVE(42, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE(42, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(48, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(54, MOVE_THRASH),
- //LEVEL_UP_MOVE(60, MOVE_LASER_FOCUS),
- //LEVEL_UP_MOVE(66, MOVE_DRAGON_ENERGY),
+ LEVEL_UP_MOVE(60, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(66, MOVE_DRAGON_ENERGY),
LEVEL_UP_MOVE(72, MOVE_HYPER_BEAM),
LEVEL_UP_MOVE(78, MOVE_EXPLOSION),
LEVEL_UP_END
@@ -18036,11 +18037,11 @@ static const struct LevelUpMove sGlastrierLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 6, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE(12, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(12, MOVE_AVALANCHE),
LEVEL_UP_MOVE(18, MOVE_STOMP),
LEVEL_UP_MOVE(24, MOVE_TORMENT),
LEVEL_UP_MOVE(30, MOVE_MIST),
- //LEVEL_UP_MOVE(36, MOVE_ICICLE_CRASH),
+ LEVEL_UP_MOVE(36, MOVE_ICICLE_CRASH),
LEVEL_UP_MOVE(42, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(48, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(54, MOVE_THRASH),
@@ -18054,7 +18055,7 @@ static const struct LevelUpMove sSpectrierLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 6, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE(12, MOVE_HEX),
+ LEVEL_UP_MOVE(12, MOVE_HEX),
LEVEL_UP_MOVE(18, MOVE_STOMP),
LEVEL_UP_MOVE(24, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(30, MOVE_HAZE),
@@ -18064,7 +18065,7 @@ static const struct LevelUpMove sSpectrierLevelUpLearnset[] = {
LEVEL_UP_MOVE(54, MOVE_THRASH),
LEVEL_UP_MOVE(60, MOVE_DISABLE),
LEVEL_UP_MOVE(66, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(72, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(72, MOVE_NASTY_PLOT),
LEVEL_UP_END
};
@@ -18073,15 +18074,15 @@ static const struct LevelUpMove sCalyrexLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
- //LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW),
+ LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW),
LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(24, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(24, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(32, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(56, MOVE_PSYCHIC),
LEVEL_UP_MOVE(64, MOVE_LEECH_SEED),
- //LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(80, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE(88, MOVE_FUTURE_SIGHT),
LEVEL_UP_END
@@ -18185,9 +18186,9 @@ static const struct LevelUpMove sRattataAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_BITE),
LEVEL_UP_MOVE(13, MOVE_PURSUIT),
LEVEL_UP_MOVE(16, MOVE_HYPER_FANG),
- //LEVEL_UP_MOVE(19, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(19, MOVE_ASSURANCE),
LEVEL_UP_MOVE(22, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(28, MOVE_SUPER_FANG),
LEVEL_UP_MOVE(31, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(34, MOVE_ENDEAVOR),
@@ -18195,7 +18196,7 @@ static const struct LevelUpMove sRattataAlolanLevelUpLearnset[] = {
};
static const struct LevelUpMove sRaticateAlolanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE),
+ //LEVEL_UP_MOVE( 0, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
@@ -18207,9 +18208,9 @@ static const struct LevelUpMove sRaticateAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_BITE),
LEVEL_UP_MOVE(13, MOVE_PURSUIT),
LEVEL_UP_MOVE(16, MOVE_HYPER_FANG),
- //LEVEL_UP_MOVE(19, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(19, MOVE_ASSURANCE),
LEVEL_UP_MOVE(24, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(34, MOVE_SUPER_FANG),
LEVEL_UP_MOVE(39, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(44, MOVE_ENDEAVOR),
@@ -18217,9 +18218,9 @@ static const struct LevelUpMove sRaticateAlolanLevelUpLearnset[] = {
};
static const struct LevelUpMove sRaichuAlolanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_PSYCHIC),
+ //LEVEL_UP_MOVE( 0, MOVE_PSYCHIC),
LEVEL_UP_MOVE( 1, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE( 1, MOVE_SPEED_SWAP),
+ LEVEL_UP_MOVE( 1, MOVE_SPEED_SWAP),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -18240,8 +18241,8 @@ static const struct LevelUpMove sSandshrewAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(23, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(26, MOVE_SLASH),
- //LEVEL_UP_MOVE(30, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(34, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE(30, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(34, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(38, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(42, MOVE_HAIL),
LEVEL_UP_MOVE(46, MOVE_BLIZZARD),
@@ -18249,10 +18250,10 @@ static const struct LevelUpMove sSandshrewAlolanLevelUpLearnset[] = {
};
static const struct LevelUpMove sSandslashAlolanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_ICICLE_SPEAR),
+ //LEVEL_UP_MOVE( 0, MOVE_ICICLE_SPEAR),
LEVEL_UP_MOVE( 1, MOVE_ICICLE_SPEAR),
- //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
- //LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
LEVEL_UP_MOVE( 1, MOVE_SLASH),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_ICE_BALL),
@@ -18264,14 +18265,14 @@ static const struct LevelUpMove sVulpixAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 7, MOVE_ROAR),
- //LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
- //LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE( 9, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(10, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(15, MOVE_ICY_WIND),
- //LEVEL_UP_MOVE(18, MOVE_PAYBACK),
+ LEVEL_UP_MOVE(18, MOVE_PAYBACK),
LEVEL_UP_MOVE(20, MOVE_MIST),
LEVEL_UP_MOVE(23, MOVE_FEINT_ATTACK),
- //LEVEL_UP_MOVE(26, MOVE_HEX),
+ LEVEL_UP_MOVE(26, MOVE_HEX),
LEVEL_UP_MOVE(28, MOVE_AURORA_BEAM),
LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(34, MOVE_SAFEGUARD),
@@ -18279,18 +18280,18 @@ static const struct LevelUpMove sVulpixAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE(39, MOVE_IMPRISON),
LEVEL_UP_MOVE(42, MOVE_BLIZZARD),
LEVEL_UP_MOVE(44, MOVE_GRUDGE),
- //LEVEL_UP_MOVE(47, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(47, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(50, MOVE_SHEER_COLD),
LEVEL_UP_END
};
static const struct LevelUpMove sNinetalesAlolanLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DAZZLING_GLEAM),
- //LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
- //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE( 1, MOVE_ICE_BEAM),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
LEVEL_UP_END
@@ -18303,22 +18304,22 @@ static const struct LevelUpMove sDiglettAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_ASTONISH),
LEVEL_UP_MOVE(10, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(14, MOVE_MAGNITUDE),
- //LEVEL_UP_MOVE(18, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(25, MOVE_MUD_BOMB),
- //LEVEL_UP_MOVE(28, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(18, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(25, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(28, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(31, MOVE_DIG),
- //LEVEL_UP_MOVE(35, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(35, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(39, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(43, MOVE_FISSURE),
LEVEL_UP_END
};
static const struct LevelUpMove sDugtrioAlolanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SAND_TOMB),
+ //LEVEL_UP_MOVE( 0, MOVE_SAND_TOMB),
LEVEL_UP_MOVE( 1, MOVE_SAND_TOMB),
- //LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_ROTOTILLER),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
@@ -18327,12 +18328,12 @@ static const struct LevelUpMove sDugtrioAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_ASTONISH),
LEVEL_UP_MOVE(10, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(14, MOVE_MAGNITUDE),
- //LEVEL_UP_MOVE(18, MOVE_BULLDOZE),
- //LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(25, MOVE_MUD_BOMB),
- //LEVEL_UP_MOVE(30, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE(18, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE(22, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(25, MOVE_MUD_BOMB),
+ LEVEL_UP_MOVE(30, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(35, MOVE_DIG),
- //LEVEL_UP_MOVE(41, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(41, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(47, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(53, MOVE_FISSURE),
LEVEL_UP_END
@@ -18349,21 +18350,21 @@ static const struct LevelUpMove sMeowthAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_TAUNT),
LEVEL_UP_MOVE(30, MOVE_PAY_DAY),
LEVEL_UP_MOVE(33, MOVE_SLASH),
- //LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(41, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(46, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(50, MOVE_FEINT),
- //LEVEL_UP_MOVE(55, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(38, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(41, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(46, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(49, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(50, MOVE_FEINT),
+ LEVEL_UP_MOVE(55, MOVE_DARK_PULSE),
LEVEL_UP_END
};
static const struct LevelUpMove sPersianAlolanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SWIFT),
+ //LEVEL_UP_MOVE( 0, MOVE_SWIFT),
LEVEL_UP_MOVE( 1, MOVE_SWIFT),
- //LEVEL_UP_MOVE( 1, MOVE_QUASH),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
- //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -18374,14 +18375,14 @@ static const struct LevelUpMove sPersianAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE(17, MOVE_SCREECH),
LEVEL_UP_MOVE(22, MOVE_FEINT_ATTACK),
LEVEL_UP_MOVE(25, MOVE_TAUNT),
- //LEVEL_UP_MOVE(32, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(32, MOVE_POWER_GEM),
LEVEL_UP_MOVE(37, MOVE_SLASH),
- //LEVEL_UP_MOVE(44, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(49, MOVE_ASSURANCE),
- //LEVEL_UP_MOVE(56, MOVE_CAPTIVATE),
- //LEVEL_UP_MOVE(61, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE(65, MOVE_FEINT),
- //LEVEL_UP_MOVE(69, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(44, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(49, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE(56, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(61, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE(65, MOVE_FEINT),
+ LEVEL_UP_MOVE(69, MOVE_DARK_PULSE),
LEVEL_UP_END
};
@@ -18389,19 +18390,19 @@ static const struct LevelUpMove sGeodudeAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 4, MOVE_CHARGE),
- //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
LEVEL_UP_MOVE(12, MOVE_SPARK),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(22, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE(28, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(28, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(30, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(34, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(34, MOVE_DISCHARGE),
LEVEL_UP_MOVE(36, MOVE_EXPLOSION),
LEVEL_UP_MOVE(40, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(42, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(42, MOVE_STONE_EDGE),
LEVEL_UP_END
};
@@ -18409,45 +18410,45 @@ static const struct LevelUpMove sGravelerAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
- //LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE( 4, MOVE_CHARGE),
- //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
LEVEL_UP_MOVE(12, MOVE_SPARK),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(22, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
LEVEL_UP_MOVE(44, MOVE_EXPLOSION),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sGolemAlolanLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
- //LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE( 4, MOVE_CHARGE),
- //LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
- //LEVEL_UP_MOVE(10, MOVE_STEAMROLLER),
+ LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(10, MOVE_STEAMROLLER),
LEVEL_UP_MOVE(12, MOVE_SPARK),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
- //LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(22, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT),
- //LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST),
- //LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
LEVEL_UP_MOVE(44, MOVE_EXPLOSION),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
- //LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM),
+ LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
@@ -18457,23 +18458,23 @@ static const struct LevelUpMove sGrimerAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_HARDEN),
LEVEL_UP_MOVE( 7, MOVE_BITE),
LEVEL_UP_MOVE(12, MOVE_DISABLE),
- //LEVEL_UP_MOVE(15, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(15, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(18, MOVE_POISON_FANG),
LEVEL_UP_MOVE(21, MOVE_MINIMIZE),
- //LEVEL_UP_MOVE(26, MOVE_FLING),
+ LEVEL_UP_MOVE(26, MOVE_FLING),
LEVEL_UP_MOVE(29, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(32, MOVE_CRUNCH),
LEVEL_UP_MOVE(37, MOVE_SCREECH),
- //LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT),
LEVEL_UP_MOVE(43, MOVE_ACID_ARMOR),
- //LEVEL_UP_MOVE(46, MOVE_BELCH),
+ LEVEL_UP_MOVE(46, MOVE_BELCH),
LEVEL_UP_MOVE(48, MOVE_MEMENTO),
LEVEL_UP_END
};
static const struct LevelUpMove sMukAlolanLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_VENOM_DRENCH),
- //LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
@@ -18481,31 +18482,31 @@ static const struct LevelUpMove sMukAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_HARDEN),
LEVEL_UP_MOVE( 7, MOVE_BITE),
LEVEL_UP_MOVE(12, MOVE_DISABLE),
- //LEVEL_UP_MOVE(15, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE(15, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(18, MOVE_POISON_FANG),
LEVEL_UP_MOVE(21, MOVE_MINIMIZE),
- //LEVEL_UP_MOVE(26, MOVE_FLING),
+ LEVEL_UP_MOVE(26, MOVE_FLING),
LEVEL_UP_MOVE(29, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(32, MOVE_CRUNCH),
LEVEL_UP_MOVE(37, MOVE_SCREECH),
- //LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT),
+ LEVEL_UP_MOVE(40, MOVE_GUNK_SHOT),
LEVEL_UP_MOVE(46, MOVE_ACID_ARMOR),
- //LEVEL_UP_MOVE(52, MOVE_BELCH),
+ LEVEL_UP_MOVE(52, MOVE_BELCH),
LEVEL_UP_MOVE(57, MOVE_MEMENTO),
LEVEL_UP_END
};
static const struct LevelUpMove sExeggutorAlolanLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DRAGON_HAMMER),
- //LEVEL_UP_MOVE( 1, MOVE_DRAGON_HAMMER),
- //LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_HAMMER),
+ LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
LEVEL_UP_MOVE( 1, MOVE_BARRAGE),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(17, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(17, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(27, MOVE_EGG_BOMB),
- //LEVEL_UP_MOVE(37, MOVE_WOOD_HAMMER),
- //LEVEL_UP_MOVE(47, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(37, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE(47, MOVE_LEAF_STORM),
LEVEL_UP_END
};
@@ -18518,16 +18519,16 @@ static const struct LevelUpMove sMarowakAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_BONE_CLUB),
LEVEL_UP_MOVE(11, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(13, MOVE_LEER),
- //LEVEL_UP_MOVE(17, MOVE_HEX),
+ LEVEL_UP_MOVE(17, MOVE_HEX),
LEVEL_UP_MOVE(21, MOVE_BONEMERANG),
LEVEL_UP_MOVE(23, MOVE_WILL_O_WISP),
- //LEVEL_UP_MOVE(27, MOVE_SHADOW_BONE),
+ LEVEL_UP_MOVE(27, MOVE_SHADOW_BONE),
LEVEL_UP_MOVE(33, MOVE_THRASH),
- //LEVEL_UP_MOVE(37, MOVE_FLING),
- //LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM),
+ LEVEL_UP_MOVE(37, MOVE_FLING),
+ LEVEL_UP_MOVE(43, MOVE_STOMPING_TANTRUM),
LEVEL_UP_MOVE(49, MOVE_ENDEAVOR),
- //LEVEL_UP_MOVE(53, MOVE_FLARE_BLITZ),
- //LEVEL_UP_MOVE(59, MOVE_RETALIATE),
+ LEVEL_UP_MOVE(53, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(59, MOVE_RETALIATE),
LEVEL_UP_MOVE(65, MOVE_BONE_RUSH),
LEVEL_UP_END
};
@@ -18536,7 +18537,7 @@ static const struct LevelUpMove sMarowakAlolanLevelUpLearnset[] = {
static const struct LevelUpMove sMeowthGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- //LEVEL_UP_MOVE( 4, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 4, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 8, MOVE_SCRATCH),
LEVEL_UP_MOVE(12, MOVE_PAY_DAY),
LEVEL_UP_MOVE(16, MOVE_METAL_CLAW),
@@ -18555,36 +18556,36 @@ static const struct LevelUpMove sPonytaGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE(10, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(15, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE(15, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE(20, MOVE_AGILITY),
LEVEL_UP_MOVE(25, MOVE_PSYBEAM),
LEVEL_UP_MOVE(30, MOVE_STOMP),
- //LEVEL_UP_MOVE(35, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(35, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(41, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(45, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE(45, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(50, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(55, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(55, MOVE_HEALING_WISH),
LEVEL_UP_END
};
static const struct LevelUpMove sRapidashGalarianLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_PSYCHO_CUT),
- //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE( 1, MOVE_MEGAHORN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(15, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE(15, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE(20, MOVE_AGILITY),
LEVEL_UP_MOVE(25, MOVE_PSYBEAM),
LEVEL_UP_MOVE(30, MOVE_STOMP),
- //LEVEL_UP_MOVE(35, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(35, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(43, MOVE_TAKE_DOWN),
- //LEVEL_UP_MOVE(49, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE(49, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(56, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(63, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(63, MOVE_HEALING_WISH),
LEVEL_UP_END
};
@@ -18598,20 +18599,20 @@ static const struct LevelUpMove sSlowpokeGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_DISABLE),
LEVEL_UP_MOVE(18, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(21, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(27, MOVE_AMNESIA),
LEVEL_UP_MOVE(30, MOVE_SURF),
LEVEL_UP_MOVE(33, MOVE_SLACK_OFF),
LEVEL_UP_MOVE(36, MOVE_PSYCHIC),
LEVEL_UP_MOVE(39, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(42, MOVE_RAIN_DANCE),
- //LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE),
LEVEL_UP_END
};
static const struct LevelUpMove sSlowbroGalarianLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SHELL_SIDE_ARM),
- //LEVEL_UP_MOVE( 1, MOVE_SHELL_SIDE_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_SHELL_SIDE_ARM),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_CURSE),
@@ -18622,14 +18623,14 @@ static const struct LevelUpMove sSlowbroGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_DISABLE),
LEVEL_UP_MOVE(18, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(21, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(27, MOVE_AMNESIA),
LEVEL_UP_MOVE(30, MOVE_SURF),
LEVEL_UP_MOVE(33, MOVE_SLACK_OFF),
LEVEL_UP_MOVE(36, MOVE_PSYCHIC),
LEVEL_UP_MOVE(39, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(42, MOVE_RAIN_DANCE),
- //LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE),
LEVEL_UP_END
};
@@ -18639,49 +18640,49 @@ static const struct LevelUpMove sFarfetchdGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_LEER),
LEVEL_UP_MOVE(10, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(15, MOVE_ROCK_SMASH),
- //LEVEL_UP_MOVE(20, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(20, MOVE_BRUTAL_SWING),
LEVEL_UP_MOVE(25, MOVE_DETECT),
LEVEL_UP_MOVE(30, MOVE_KNOCK_OFF),
- //LEVEL_UP_MOVE(35, MOVE_DEFOG),
+ LEVEL_UP_MOVE(35, MOVE_DEFOG),
LEVEL_UP_MOVE(40, MOVE_BRICK_BREAK),
LEVEL_UP_MOVE(45, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(50, MOVE_SLAM),
LEVEL_UP_MOVE(55, MOVE_LEAF_BLADE),
- //LEVEL_UP_MOVE(60, MOVE_FINAL_GAMBIT),
- //LEVEL_UP_MOVE(65, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE(60, MOVE_FINAL_GAMBIT),
+ LEVEL_UP_MOVE(65, MOVE_BRAVE_BIRD),
LEVEL_UP_END
};
static const struct LevelUpMove sWeezingGalarianLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
- //LEVEL_UP_MOVE( 1, MOVE_STRANGE_STEAM),
- //LEVEL_UP_MOVE( 1, MOVE_DEFOG),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE( 1, MOVE_STRANGE_STEAM),
+ LEVEL_UP_MOVE( 1, MOVE_DEFOG),
LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 1, MOVE_HAZE),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
- //LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG),
- //LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG),
+ LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
LEVEL_UP_MOVE(20, MOVE_SLUDGE),
LEVEL_UP_MOVE(24, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(28, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(32, MOVE_SLUDGE_BOMB),
LEVEL_UP_MOVE(38, MOVE_TOXIC),
- //LEVEL_UP_MOVE(44, MOVE_BELCH),
+ LEVEL_UP_MOVE(44, MOVE_BELCH),
LEVEL_UP_MOVE(50, MOVE_EXPLOSION),
LEVEL_UP_MOVE(56, MOVE_MEMENTO),
LEVEL_UP_MOVE(62, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE(68, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(68, MOVE_MISTY_TERRAIN),
LEVEL_UP_END
};
static const struct LevelUpMove sMrMimeGalarianLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
+ LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
LEVEL_UP_MOVE( 1, MOVE_ENCORE),
LEVEL_UP_MOVE( 1, MOVE_ROLE_PLAY),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
@@ -18690,21 +18691,21 @@ static const struct LevelUpMove sMrMimeGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE( 1, MOVE_REFLECT),
LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
- //LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM),
- //LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM),
+ LEVEL_UP_MOVE( 1, MOVE_MISTY_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 1, MOVE_BATON_PASS),
- //LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(12, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(16, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE(16, MOVE_ALLY_SWITCH),
LEVEL_UP_MOVE(20, MOVE_ICY_WIND),
LEVEL_UP_MOVE(24, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(28, MOVE_PSYBEAM),
LEVEL_UP_MOVE(32, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(36, MOVE_MIRROR_COAT),
- //LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(44, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(44, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE(48, MOVE_PSYCHIC),
LEVEL_UP_MOVE(52, MOVE_TEETER_DANCE),
LEVEL_UP_END
@@ -18712,21 +18713,21 @@ static const struct LevelUpMove sMrMimeGalarianLevelUpLearnset[] = {
static const struct LevelUpMove sArticunoGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GUST),
- //LEVEL_UP_MOVE( 1, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHO_SHIFT),
LEVEL_UP_MOVE( 5, MOVE_CONFUSION),
LEVEL_UP_MOVE(10, MOVE_REFLECT),
LEVEL_UP_MOVE(15, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(20, MOVE_AGILITY),
LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(30, MOVE_TAILWIND),
- //LEVEL_UP_MOVE(35, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE(30, MOVE_TAILWIND),
+ LEVEL_UP_MOVE(35, MOVE_PSYCHO_CUT),
LEVEL_UP_MOVE(40, MOVE_RECOVER),
- //LEVEL_UP_MOVE(45, MOVE_FREEZING_GLARE),
+ LEVEL_UP_MOVE(45, MOVE_FREEZING_GLARE),
LEVEL_UP_MOVE(50, MOVE_DREAM_EATER),
- //LEVEL_UP_MOVE(55, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(55, MOVE_HURRICANE),
LEVEL_UP_MOVE(60, MOVE_MIND_READER),
LEVEL_UP_MOVE(65, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(70, MOVE_TRICK_ROOM),
+ LEVEL_UP_MOVE(70, MOVE_TRICK_ROOM),
LEVEL_UP_END
};
@@ -18735,17 +18736,17 @@ static const struct LevelUpMove sZapdosGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 5, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE(10, MOVE_LIGHT_SCREEN),
- //LEVEL_UP_MOVE(15, MOVE_PLUCK),
+ LEVEL_UP_MOVE(15, MOVE_PLUCK),
LEVEL_UP_MOVE(20, MOVE_AGILITY),
LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(30, MOVE_BRICK_BREAK),
LEVEL_UP_MOVE(35, MOVE_DRILL_PECK),
- //LEVEL_UP_MOVE(40, MOVE_QUICK_GUARD),
- //LEVEL_UP_MOVE(45, MOVE_THUNDEROUS_KICK),
+ LEVEL_UP_MOVE(40, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE(45, MOVE_THUNDEROUS_KICK),
LEVEL_UP_MOVE(50, MOVE_BULK_UP),
LEVEL_UP_MOVE(55, MOVE_COUNTER),
LEVEL_UP_MOVE(60, MOVE_DETECT),
- //LEVEL_UP_MOVE(65, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(65, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_REVERSAL),
LEVEL_UP_END
};
@@ -18753,17 +18754,17 @@ static const struct LevelUpMove sZapdosGalarianLevelUpLearnset[] = {
static const struct LevelUpMove sMoltresGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 5, MOVE_PAYBACK),
+ LEVEL_UP_MOVE( 5, MOVE_PAYBACK),
LEVEL_UP_MOVE(10, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(15, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(20, MOVE_AGILITY),
LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(30, MOVE_SUCKER_PUNCH),
- //LEVEL_UP_MOVE(35, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(40, MOVE_AFTER_YOU),
- //LEVEL_UP_MOVE(45, MOVE_FIERY_WRATH),
- //LEVEL_UP_MOVE(50, MOVE_NASTY_PLOT),
- //LEVEL_UP_MOVE(55, MOVE_HURRICANE),
+ LEVEL_UP_MOVE(30, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(35, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(40, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE(45, MOVE_FIERY_WRATH),
+ LEVEL_UP_MOVE(50, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE(55, MOVE_HURRICANE),
LEVEL_UP_MOVE(60, MOVE_ENDURE),
LEVEL_UP_MOVE(65, MOVE_MEMENTO),
LEVEL_UP_MOVE(70, MOVE_SKY_ATTACK),
@@ -18772,9 +18773,9 @@ static const struct LevelUpMove sMoltresGalarianLevelUpLearnset[] = {
static const struct LevelUpMove sSlowkingGalarianLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_EERIE_SPELL),
- //LEVEL_UP_MOVE( 1, MOVE_EERIE_SPELL),
- //LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
- //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_EERIE_SPELL),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_CURSE),
@@ -18785,14 +18786,14 @@ static const struct LevelUpMove sSlowkingGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_DISABLE),
LEVEL_UP_MOVE(18, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(21, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(27, MOVE_AMNESIA),
LEVEL_UP_MOVE(30, MOVE_SURF),
LEVEL_UP_MOVE(33, MOVE_SLACK_OFF),
LEVEL_UP_MOVE(36, MOVE_PSYCHIC),
LEVEL_UP_MOVE(39, MOVE_PSYCH_UP),
LEVEL_UP_MOVE(42, MOVE_RAIN_DANCE),
- //LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(45, MOVE_HEAL_PULSE),
LEVEL_UP_END
};
@@ -18803,10 +18804,10 @@ static const struct LevelUpMove sCorsolaGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_DISABLE),
LEVEL_UP_MOVE(15, MOVE_SPITE),
LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER),
- //LEVEL_UP_MOVE(25, MOVE_HEX),
+ LEVEL_UP_MOVE(25, MOVE_HEX),
LEVEL_UP_MOVE(30, MOVE_CURSE),
- //LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP),
- //LEVEL_UP_MOVE(40, MOVE_POWER_GEM),
+ LEVEL_UP_MOVE(35, MOVE_STRENGTH_SAP),
+ LEVEL_UP_MOVE(40, MOVE_POWER_GEM),
LEVEL_UP_MOVE(45, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(50, MOVE_GRUDGE),
LEVEL_UP_MOVE(55, MOVE_MIRROR_COAT),
@@ -18818,9 +18819,9 @@ static const struct LevelUpMove sZigzagoonGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 3, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 6, MOVE_LICK),
- //LEVEL_UP_MOVE( 9, MOVE_SNARL),
+ LEVEL_UP_MOVE( 9, MOVE_SNARL),
LEVEL_UP_MOVE(12, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(15, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE(15, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE(18, MOVE_PIN_MISSILE),
LEVEL_UP_MOVE(21, MOVE_REST),
LEVEL_UP_MOVE(24, MOVE_TAKE_DOWN),
@@ -18833,17 +18834,17 @@ static const struct LevelUpMove sZigzagoonGalarianLevelUpLearnset[] = {
static const struct LevelUpMove sLinooneGalarianLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- //LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SWITCHEROO),
LEVEL_UP_MOVE( 1, MOVE_PIN_MISSILE),
- //LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LICK),
- //LEVEL_UP_MOVE( 9, MOVE_SNARL),
+ LEVEL_UP_MOVE( 9, MOVE_SNARL),
LEVEL_UP_MOVE(12, MOVE_HEADBUTT),
- //LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE(15, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(18, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(23, MOVE_REST),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
@@ -18859,9 +18860,9 @@ static const struct LevelUpMove sDarumakaGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 4, MOVE_TAUNT),
LEVEL_UP_MOVE( 8, MOVE_BITE),
- //LEVEL_UP_MOVE(12, MOVE_AVALANCHE),
- //LEVEL_UP_MOVE(16, MOVE_WORK_UP),
- //LEVEL_UP_MOVE(20, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(12, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(16, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(20, MOVE_ICE_FANG),
LEVEL_UP_MOVE(24, MOVE_HEADBUTT),
LEVEL_UP_MOVE(28, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE(32, MOVE_UPROAR),
@@ -18874,14 +18875,14 @@ static const struct LevelUpMove sDarumakaGalarianLevelUpLearnset[] = {
static const struct LevelUpMove sDarmanitanGalarianLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_ICICLE_CRASH),
- //LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
+ LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
LEVEL_UP_MOVE( 1, MOVE_BITE),
- //LEVEL_UP_MOVE(12, MOVE_AVALANCHE),
- //LEVEL_UP_MOVE(16, MOVE_WORK_UP),
- //LEVEL_UP_MOVE(20, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE(12, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE(16, MOVE_WORK_UP),
+ LEVEL_UP_MOVE(20, MOVE_ICE_FANG),
LEVEL_UP_MOVE(24, MOVE_HEADBUTT),
LEVEL_UP_MOVE(28, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE(32, MOVE_UPROAR),
@@ -18898,16 +18899,16 @@ static const struct LevelUpMove sYamaskGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_HAZE),
LEVEL_UP_MOVE( 8, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(12, MOVE_DISABLE),
- //LEVEL_UP_MOVE(16, MOVE_BRUTAL_SWING),
- //LEVEL_UP_MOVE(20, MOVE_CRAFTY_SHIELD),
- //LEVEL_UP_MOVE(24, MOVE_HEX),
+ LEVEL_UP_MOVE(16, MOVE_BRUTAL_SWING),
+ LEVEL_UP_MOVE(20, MOVE_CRAFTY_SHIELD),
+ LEVEL_UP_MOVE(24, MOVE_HEX),
LEVEL_UP_MOVE(28, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE(32, MOVE_SLAM),
LEVEL_UP_MOVE(36, MOVE_CURSE),
LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(44, MOVE_EARTHQUAKE),
- //LEVEL_UP_MOVE(48, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(48, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(48, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(48, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(52, MOVE_DESTINY_BOND),
LEVEL_UP_END
};
@@ -18921,11 +18922,11 @@ static const struct LevelUpMove sStunfiskGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(15, MOVE_REVENGE),
LEVEL_UP_MOVE(20, MOVE_METAL_SOUND),
- //LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(25, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(30, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(35, MOVE_BOUNCE),
LEVEL_UP_MOVE(40, MOVE_MUDDY_WATER),
- //LEVEL_UP_MOVE(45, MOVE_SNAP_TRAP),
+ LEVEL_UP_MOVE(45, MOVE_SNAP_TRAP),
LEVEL_UP_MOVE(50, MOVE_FLAIL),
LEVEL_UP_MOVE(55, MOVE_FISSURE),
LEVEL_UP_END
@@ -19144,6 +19145,7 @@ static const struct LevelUpMove sDecidueyeHisuianLevelUpLearnset[] = {
//LEVEL_UP_MOVE(43, MOVE_LEAF_STORM),
LEVEL_UP_END
};
+#endif
static const struct LevelUpMove sDeoxysAttackLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -19154,8 +19156,8 @@ static const struct LevelUpMove sDeoxysAttackLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_PURSUIT),
LEVEL_UP_MOVE(31, MOVE_PSYCHIC),
LEVEL_UP_MOVE(37, MOVE_SUPERPOWER),
- //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
- //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(55, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE(61, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(67, MOVE_PSYCHO_BOOST),
@@ -19172,8 +19174,8 @@ static const struct LevelUpMove sDeoxysDefenseLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_SPIKES),
LEVEL_UP_MOVE(31, MOVE_PSYCHIC),
LEVEL_UP_MOVE(37, MOVE_SNATCH),
- //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
- //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(55, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(55, MOVE_AMNESIA),
LEVEL_UP_MOVE(61, MOVE_RECOVER),
@@ -19192,8 +19194,8 @@ static const struct LevelUpMove sDeoxysSpeedLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_PURSUIT),
LEVEL_UP_MOVE(31, MOVE_PSYCHIC),
LEVEL_UP_MOVE(37, MOVE_SWIFT),
- //LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
- //LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(55, MOVE_AGILITY),
LEVEL_UP_MOVE(61, MOVE_RECOVER),
LEVEL_UP_MOVE(67, MOVE_PSYCHO_BOOST),
@@ -19201,50 +19203,51 @@ static const struct LevelUpMove sDeoxysSpeedLevelUpLearnset[] = {
LEVEL_UP_END
};
+#if P_NEW_POKEMON == TRUE
static const struct LevelUpMove sWormadamSandyCloakLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE(10, MOVE_PROTECT),
- //LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(23, MOVE_CONFUSION),
LEVEL_UP_MOVE(26, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE(29, MOVE_HARDEN),
LEVEL_UP_MOVE(32, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(35, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(35, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(38, MOVE_FLAIL),
LEVEL_UP_MOVE(41, MOVE_ATTRACT),
LEVEL_UP_MOVE(44, MOVE_PSYCHIC),
LEVEL_UP_MOVE(47, MOVE_FISSURE),
- //LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
static const struct LevelUpMove sWormadamTrashCloakLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
- //LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
- //LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
- //LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE(10, MOVE_PROTECT),
- //LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE(15, MOVE_BUG_BITE),
LEVEL_UP_MOVE(20, MOVE_HIDDEN_POWER),
LEVEL_UP_MOVE(23, MOVE_CONFUSION),
- //LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT),
+ LEVEL_UP_MOVE(26, MOVE_MIRROR_SHOT),
LEVEL_UP_MOVE(29, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(32, MOVE_PSYBEAM),
- //LEVEL_UP_MOVE(35, MOVE_CAPTIVATE),
+ LEVEL_UP_MOVE(35, MOVE_CAPTIVATE),
LEVEL_UP_MOVE(38, MOVE_FLAIL),
LEVEL_UP_MOVE(41, MOVE_ATTRACT),
LEVEL_UP_MOVE(44, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(47, MOVE_IRON_HEAD),
- //LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(47, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(50, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
@@ -19254,13 +19257,13 @@ static const struct LevelUpMove sShayminSkyLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(28, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(37, MOVE_SWEET_SCENT),
- //LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT),
- //LEVEL_UP_MOVE(55, MOVE_WORRY_SEED),
- //LEVEL_UP_MOVE(64, MOVE_AIR_SLASH),
- //LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(46, MOVE_NATURAL_GIFT),
+ LEVEL_UP_MOVE(55, MOVE_WORRY_SEED),
+ LEVEL_UP_MOVE(64, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(82, MOVE_SWEET_KISS),
- //LEVEL_UP_MOVE(91, MOVE_LEAF_STORM),
- //LEVEL_UP_MOVE(100, MOVE_SEED_FLARE),
+ LEVEL_UP_MOVE(91, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(100, MOVE_SEED_FLARE),
LEVEL_UP_END
};
@@ -19272,10 +19275,10 @@ static const struct LevelUpMove sKyuremWhiteLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(36, MOVE_SLASH),
- //LEVEL_UP_MOVE(43, MOVE_FUSION_FLARE),
- //LEVEL_UP_MOVE(50, MOVE_ICE_BURN),
- //LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(43, MOVE_FUSION_FLARE),
+ LEVEL_UP_MOVE(50, MOVE_ICE_BURN),
+ LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(71, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(78, MOVE_BLIZZARD),
LEVEL_UP_MOVE(85, MOVE_OUTRAGE),
@@ -19291,10 +19294,10 @@ static const struct LevelUpMove sKyuremBlackLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(29, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(36, MOVE_SLASH),
- //LEVEL_UP_MOVE(43, MOVE_FUSION_BOLT),
- //LEVEL_UP_MOVE(50, MOVE_FREEZE_SHOCK),
- //LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE),
- //LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE(43, MOVE_FUSION_BOLT),
+ LEVEL_UP_MOVE(50, MOVE_FREEZE_SHOCK),
+ LEVEL_UP_MOVE(57, MOVE_DRAGON_PULSE),
+ LEVEL_UP_MOVE(64, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE(71, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(78, MOVE_BLIZZARD),
LEVEL_UP_MOVE(85, MOVE_OUTRAGE),
@@ -19305,26 +19308,26 @@ static const struct LevelUpMove sKyuremBlackLevelUpLearnset[] = {
static const struct LevelUpMove sFloetteEternalFlowerLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
- //LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND),
- //LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE( 6, MOVE_FAIRY_WIND),
+ LEVEL_UP_MOVE(10, MOVE_LUCKY_CHANT),
LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(20, MOVE_WISH),
LEVEL_UP_MOVE(25, MOVE_MAGICAL_LEAF),
- //LEVEL_UP_MOVE(27, MOVE_GRASSY_TERRAIN),
- //LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(27, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(38, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(43, MOVE_MISTY_TERRAIN),
- //LEVEL_UP_MOVE(46, MOVE_MOONBLAST),
- //LEVEL_UP_MOVE(50, MOVE_LIGHT_OF_RUIN),
+ LEVEL_UP_MOVE(43, MOVE_MISTY_TERRAIN),
+ LEVEL_UP_MOVE(46, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(50, MOVE_LIGHT_OF_RUIN),
LEVEL_UP_MOVE(51, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE(58, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sMeowsticFemaleLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
- //LEVEL_UP_MOVE( 1, MOVE_ME_FIRST),
+ LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_ME_FIRST),
LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -19335,44 +19338,44 @@ static const struct LevelUpMove sMeowsticFemaleLevelUpLearnset[] = {
LEVEL_UP_MOVE(13, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(17, MOVE_PSYBEAM),
LEVEL_UP_MOVE(19, MOVE_FAKE_OUT),
- //LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE),
- //LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
- //LEVEL_UP_MOVE(28, MOVE_CHARGE_BEAM),
+ LEVEL_UP_MOVE(22, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(28, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE(31, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(35, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(40, MOVE_PSYCHIC),
LEVEL_UP_MOVE(43, MOVE_ROLE_PLAY),
LEVEL_UP_MOVE(45, MOVE_SIGNAL_BEAM),
- //LEVEL_UP_MOVE(48, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(48, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(50, MOVE_FUTURE_SIGHT),
- //LEVEL_UP_MOVE(53, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE(53, MOVE_STORED_POWER),
LEVEL_UP_END
};
static const struct LevelUpMove sHoopaUnboundLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_HYPERSPACE_HOLE),
+ LEVEL_UP_MOVE( 1, MOVE_HYPERSPACE_HOLE),
LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND),
- //LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 6, MOVE_ASTONISH),
LEVEL_UP_MOVE(10, MOVE_MAGIC_COAT),
LEVEL_UP_MOVE(15, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(19, MOVE_PSYBEAM),
LEVEL_UP_MOVE(25, MOVE_SKILL_SWAP),
- //LEVEL_UP_MOVE(29, MOVE_POWER_SPLIT),
- //LEVEL_UP_MOVE(29, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(29, MOVE_POWER_SPLIT),
+ LEVEL_UP_MOVE(29, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(46, MOVE_KNOCK_OFF),
- //LEVEL_UP_MOVE(50, MOVE_WONDER_ROOM),
- //LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM),
- //LEVEL_UP_MOVE(55, MOVE_DARK_PULSE),
+ LEVEL_UP_MOVE(50, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE(50, MOVE_TRICK_ROOM),
+ LEVEL_UP_MOVE(55, MOVE_DARK_PULSE),
LEVEL_UP_MOVE(75, MOVE_PSYCHIC),
- //LEVEL_UP_MOVE(85, MOVE_HYPERSPACE_FURY),
+ LEVEL_UP_MOVE(85, MOVE_HYPERSPACE_FURY),
LEVEL_UP_END
};
static const struct LevelUpMove sLycanrocMidnightLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_COUNTER),
+ //LEVEL_UP_MOVE( 0, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_REVERSAL),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
@@ -19384,18 +19387,18 @@ static const struct LevelUpMove sLycanrocMidnightLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(23, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(26, MOVE_ROAR),
- //LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(37, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(40, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
- //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sLycanrocDuskLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_THRASH),
- //LEVEL_UP_MOVE( 1, MOVE_ACCELEROCK),
+ //LEVEL_UP_MOVE( 0, MOVE_THRASH),
+ LEVEL_UP_MOVE( 1, MOVE_ACCELEROCK),
LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -19406,66 +19409,66 @@ static const struct LevelUpMove sLycanrocDuskLevelUpLearnset[] = {
LEVEL_UP_MOVE(18, MOVE_ODOR_SLEUTH),
LEVEL_UP_MOVE(23, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(26, MOVE_ROAR),
- //LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK),
+ LEVEL_UP_MOVE(29, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(34, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(37, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(40, MOVE_CRUNCH),
- //LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
- //LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
+ LEVEL_UP_MOVE(45, MOVE_ROCK_CLIMB),
+ LEVEL_UP_MOVE(48, MOVE_STONE_EDGE),
LEVEL_UP_END
};
static const struct LevelUpMove sToxtricityLowKeyLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SPARK),
+ //LEVEL_UP_MOVE( 0, MOVE_SPARK),
LEVEL_UP_MOVE( 1, MOVE_SPARK),
- //LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
- //LEVEL_UP_MOVE( 1, MOVE_BELCH),
- //LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK),
- //LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
+ LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
+ LEVEL_UP_MOVE( 1, MOVE_BELCH),
+ LEVEL_UP_MOVE( 1, MOVE_TEARFUL_LOOK),
+ LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_FLAIL),
LEVEL_UP_MOVE( 1, MOVE_ACID),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
- //LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY),
+ LEVEL_UP_MOVE( 1, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- //LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 4, MOVE_CHARGE),
LEVEL_UP_MOVE( 8, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(12, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(16, MOVE_TAUNT),
- //LEVEL_UP_MOVE(20, MOVE_VENOM_DRENCH),
+ LEVEL_UP_MOVE(20, MOVE_VENOM_DRENCH),
LEVEL_UP_MOVE(24, MOVE_SCREECH),
LEVEL_UP_MOVE(28, MOVE_SWAGGER),
LEVEL_UP_MOVE(32, MOVE_TOXIC),
- //LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
- //LEVEL_UP_MOVE(40, MOVE_POISON_JAB),
- //LEVEL_UP_MOVE(44, MOVE_OVERDRIVE),
- //LEVEL_UP_MOVE(48, MOVE_BOOMBURST),
- //LEVEL_UP_MOVE(52, MOVE_MAGNETIC_FLUX),
+ LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(40, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(44, MOVE_OVERDRIVE),
+ LEVEL_UP_MOVE(48, MOVE_BOOMBURST),
+ LEVEL_UP_MOVE(52, MOVE_MAGNETIC_FLUX),
LEVEL_UP_END
};
static const struct LevelUpMove sIndeedeeFemaleLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
- //LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
+ LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 5, MOVE_BATON_PASS),
- //LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE(10, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE(15, MOVE_PSYBEAM),
LEVEL_UP_MOVE(20, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(25, MOVE_FOLLOW_ME),
LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY),
LEVEL_UP_MOVE(35, MOVE_PSYCHIC),
LEVEL_UP_MOVE(40, MOVE_CALM_MIND),
- //LEVEL_UP_MOVE(45, MOVE_GUARD_SPLIT),
- //LEVEL_UP_MOVE(50, MOVE_PSYCHIC_TERRAIN),
- //LEVEL_UP_MOVE(55, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(45, MOVE_GUARD_SPLIT),
+ LEVEL_UP_MOVE(50, MOVE_PSYCHIC_TERRAIN),
+ LEVEL_UP_MOVE(55, MOVE_HEALING_WISH),
LEVEL_UP_END
};
static const struct LevelUpMove sUrshifuRapidStrikeStyleLevelUpLearnset[] = {
//LEVEL_UP_MOVE( 0, MOVE_SURGING_STRIKES),
- //LEVEL_UP_MOVE( 1, MOVE_SURGING_STRIKES),
- //LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
+ LEVEL_UP_MOVE( 1, MOVE_SURGING_STRIKES),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ENDURE),
@@ -19476,24 +19479,24 @@ static const struct LevelUpMove sUrshifuRapidStrikeStyleLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_BRICK_BREAK),
LEVEL_UP_MOVE(28, MOVE_DETECT),
LEVEL_UP_MOVE(32, MOVE_BULK_UP),
- //LEVEL_UP_MOVE(36, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE(36, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(40, MOVE_DYNAMIC_PUNCH),
LEVEL_UP_MOVE(44, MOVE_COUNTER),
- //LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT),
+ LEVEL_UP_MOVE(48, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(52, MOVE_FOCUS_PUNCH),
LEVEL_UP_END
};
static const struct LevelUpMove sCalyrexIceRiderLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_GLACIAL_LANCE),
+ LEVEL_UP_MOVE( 1, MOVE_GLACIAL_LANCE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE( 1, MOVE_AVALANCHE),
+ LEVEL_UP_MOVE( 1, MOVE_AVALANCHE),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_TORMENT),
LEVEL_UP_MOVE( 1, MOVE_MIST),
- //LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
+ LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE( 1, MOVE_THRASH),
@@ -19504,26 +19507,26 @@ static const struct LevelUpMove sCalyrexIceRiderLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
- //LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW),
+ LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW),
LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(24, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(24, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(32, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(56, MOVE_PSYCHIC),
LEVEL_UP_MOVE(64, MOVE_LEECH_SEED),
- //LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(80, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE(88, MOVE_FUTURE_SIGHT),
LEVEL_UP_END
};
static const struct LevelUpMove sCalyrexShadowRiderLevelUpLearnset[] = {
- //LEVEL_UP_MOVE( 1, MOVE_ASTRAL_BARRAGE),
+ LEVEL_UP_MOVE( 1, MOVE_ASTRAL_BARRAGE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
- //LEVEL_UP_MOVE( 1, MOVE_HEX),
+ LEVEL_UP_MOVE( 1, MOVE_HEX),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_HAZE),
@@ -19533,21 +19536,22 @@ static const struct LevelUpMove sCalyrexShadowRiderLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_THRASH),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
- //LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
- //LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW),
+ LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW),
LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN),
- //LEVEL_UP_MOVE(24, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE(24, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(32, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY),
- //LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(56, MOVE_PSYCHIC),
LEVEL_UP_MOVE(64, MOVE_LEECH_SEED),
- //LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE),
+ LEVEL_UP_MOVE(72, MOVE_HEAL_PULSE),
LEVEL_UP_MOVE(80, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE(88, MOVE_FUTURE_SIGHT),
LEVEL_UP_END
};
+#endif
diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h
index e1e6426e30..38bbdb5a87 100644
--- a/src/data/pokemon/pokedex_entries.h
+++ b/src/data/pokemon/pokedex_entries.h
@@ -4644,6 +4644,7 @@ const struct PokedexEntry gPokedexEntries[] =
.trainerOffset = 2,
},
+#if P_NEW_POKEMON == TRUE
[NATIONAL_DEX_TURTWIG] =
{
.categoryName = _("Tiny Leaf"),
@@ -10871,4 +10872,5 @@ const struct PokedexEntry gPokedexEntries[] =
.trainerScale = 256,
.trainerOffset = 0,
},
+#endif
};
diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h
index b29e9db8ef..fbb8545ad0 100644
--- a/src/data/pokemon/pokedex_text.h
+++ b/src/data/pokemon/pokedex_text.h
@@ -2320,6 +2320,7 @@ const u8 gChimechoPokedexText[] = _(
"themselves using seven different and\n"
"distinguishing cries.");
+#if P_NEW_POKEMON == TRUE
const u8 gTurtwigPokedexText[] = _(
"The shell on its back is made of soil. \n"
"On a very healthy Turtwig, the shell \n"
@@ -5388,3 +5389,4 @@ const u8 gEnamorusPokedexText[] = _(
"winter. According to legend, this\n"
"Pokémon's love gives rise to the\n"
"budding of fresh life across the land.");
+#endif
diff --git a/src/data/pokemon/tmhm_learnsets.h b/src/data/pokemon/tmhm_learnsets.h
index 0c91bc25e3..8322562465 100644
--- a/src/data/pokemon/tmhm_learnsets.h
+++ b/src/data/pokemon/tmhm_learnsets.h
@@ -1,5 +1,5 @@
#define TMHM_LEARNSET(moves) {(u32)(moves), ((u64)(moves) >> 32)}
-#define TMHM(tmhm) ((u64)1 << (ITEM_##tmhm - ITEM_TM01_FOCUS_PUNCH))
+#define TMHM(tmhm) ((u64)1 << (ITEM_##tmhm - ITEM_TM01_FOCUS_PUNCH - ((ITEM_##tmhm > ITEM_TM100) ? 50 : 0)))
// 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
@@ -9614,6 +9614,7 @@ const u32 gTMHMLearnsets[][2] =
| TMHM(TM06_TOXIC)
| TMHM(TM03_WATER_PULSE)),
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] = TMHM_LEARNSET(TMHM(TM45_ATTRACT)
| TMHM(TM09_BULLET_SEED)
| TMHM(HM01_CUT)
@@ -21163,7 +21164,7 @@ const u32 gTMHMLearnsets[][2] =
| TMHM(TM25_THUNDER)
| TMHM(TM24_THUNDERBOLT)
| TMHM(TM06_TOXIC)),
-
+#endif
[SPECIES_UNOWN_B] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)),
[SPECIES_UNOWN_C] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)),
@@ -21329,6 +21330,7 @@ const u32 gTMHMLearnsets[][2] =
| TMHM(TM06_TOXIC)
| TMHM(TM03_WATER_PULSE)),
+#if P_NEW_POKEMON == TRUE
[SPECIES_BURMY_SANDY_CLOAK] = TMHM_LEARNSET(TMHM(TM10_HIDDEN_POWER)
| TMHM(TM17_PROTECT)),
@@ -24890,4 +24892,5 @@ const u32 gTMHMLearnsets[][2] =
| TMHM(TM22_SOLAR_BEAM)
| TMHM(TM11_SUNNY_DAY)
| TMHM(TM12_TAUNT)),
+#endif
};
diff --git a/src/data/pokemon/tutor_learnsets.h b/src/data/pokemon/tutor_learnsets.h
index 26ccbcd9b2..1da8d8889d 100644
--- a/src/data/pokemon/tutor_learnsets.h
+++ b/src/data/pokemon/tutor_learnsets.h
@@ -5893,6 +5893,7 @@ static const u32 sTutorLearnsets[] =
| TUTOR(MOVE_THUNDER_PUNCH)
| TUTOR(MOVE_THUNDER_WAVE)),
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] = TUTOR_LEARNSET(TUTOR(MOVE_BODY_SLAM)
| TUTOR(MOVE_DOUBLE_EDGE)
| TUTOR(MOVE_ENDURE)
@@ -10636,4 +10637,5 @@ static const u32 sTutorLearnsets[] =
| TUTOR(MOVE_SNORE)
| TUTOR(MOVE_SUBSTITUTE)
| TUTOR(MOVE_SWIFT)),
+#endif
};
diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h
index 9a1a662b14..e04afe339b 100644
--- a/src/data/pokemon_graphics/back_pic_coordinates.h
+++ b/src/data/pokemon_graphics/back_pic_coordinates.h
@@ -1939,6 +1939,7 @@ const struct MonCoords gMonBackPicCoords[] =
.size = MON_COORDS_SIZE(64, 56),
.y_offset = 9,
},
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] =
{
.size = MON_COORDS_SIZE(48, 56),
@@ -5133,6 +5134,7 @@ const struct MonCoords gMonBackPicCoords[] =
.size = MON_COORDS_SIZE(48, 56),
.y_offset = 8,
},
+#endif
// Unown
[SPECIES_UNOWN_B] =
{
@@ -5301,6 +5303,7 @@ const struct MonCoords gMonBackPicCoords[] =
.size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
+#if P_NEW_POKEMON == TRUE
// Burmy
[SPECIES_BURMY_SANDY_CLOAK] =
{
@@ -6240,6 +6243,7 @@ const struct MonCoords gMonBackPicCoords[] =
.size = MON_COORDS_SIZE(64, 56),
.y_offset = 7,
},
+#endif
// Egg
[SPECIES_EGG] =
{
diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h
index d2d02b5400..30a711fc4e 100644
--- a/src/data/pokemon_graphics/back_pic_table.h
+++ b/src/data/pokemon_graphics/back_pic_table.h
@@ -387,6 +387,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] =
SPECIES_SPRITE(JIRACHI, gMonBackPic_Jirachi),
SPECIES_SPRITE(DEOXYS, gMonBackPic_Deoxys),
SPECIES_SPRITE(CHIMECHO, gMonBackPic_Chimecho),
+#if P_NEW_POKEMON == TRUE
SPECIES_SPRITE(TURTWIG, gMonBackPic_Turtwig),
SPECIES_SPRITE(GROTLE, gMonBackPic_Grotle),
SPECIES_SPRITE(TORTERRA, gMonBackPic_Torterra),
@@ -1032,7 +1033,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] =
SPECIES_SPRITE(PIKACHU_WORLD_CAP, gMonBackPic_PikachuWorldCap),
SPECIES_SPRITE(PICHU_SPIKY_EARED, gMonBackPic_PichuSpikyEared),
-
+#endif
SPECIES_SPRITE(UNOWN_B, gMonBackPic_UnownB),
SPECIES_SPRITE(UNOWN_C, gMonBackPic_UnownC),
SPECIES_SPRITE(UNOWN_D, gMonBackPic_UnownD),
@@ -1068,7 +1069,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] =
SPECIES_SPRITE(DEOXYS_ATTACK, gMonBackPic_DeoxysAttack),
SPECIES_SPRITE(DEOXYS_DEFENSE, gMonBackPic_DeoxysDefense),
SPECIES_SPRITE(DEOXYS_SPEED, gMonBackPic_DeoxysSpeed),
-
+#if P_NEW_POKEMON == TRUE
SPECIES_SPRITE(BURMY_SANDY_CLOAK, gMonBackPic_BurmySandyCloak),
SPECIES_SPRITE(BURMY_TRASH_CLOAK, gMonBackPic_BurmyTrashCloak),
@@ -1299,13 +1300,14 @@ const struct CompressedSpriteSheet gMonBackPicTable[] =
SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonBackPic_CalyrexIceRider),
SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonBackPic_CalyrexShadowRider),
-
+#endif
SPECIES_SPRITE(EGG, gMonFrontPic_Egg),
};
const struct CompressedSpriteSheet gMonBackPicTableFemale[] =
{
SPECIES_SPRITE(EEVEE, gMonBackPic_EeveeF),
+#if P_NEW_POKEMON == TRUE
SPECIES_SPRITE(STARLY, gMonBackPic_StarlyF),
SPECIES_SPRITE(STARAVIA, gMonBackPic_StaraviaF),
SPECIES_SPRITE(STARAPTOR, gMonBackPic_Staraptor),
@@ -1321,4 +1323,5 @@ const struct CompressedSpriteSheet gMonBackPicTableFemale[] =
SPECIES_SPRITE(JELLICENT, gMonBackPic_JellicentF),
SPECIES_SPRITE(PYROAR, gMonBackPic_PyroarF),
SPECIES_SPRITE(BASCULEGION, gMonBackPic_CircledQuestionMark), //gMonBackPic_BasculegionF),
+#endif
};
diff --git a/src/data/pokemon_graphics/enemy_mon_elevation.h b/src/data/pokemon_graphics/enemy_mon_elevation.h
index 64bd433fa4..8499650e06 100644
--- a/src/data/pokemon_graphics/enemy_mon_elevation.h
+++ b/src/data/pokemon_graphics/enemy_mon_elevation.h
@@ -58,6 +58,7 @@ const u8 gEnemyMonElevation[NUM_SPECIES] =
[SPECIES_LATIOS] = 6,
[SPECIES_JIRACHI] = 14,
[SPECIES_CHIMECHO] = 16,
+#if P_NEW_POKEMON == TRUE
// Gen 4
[SPECIES_MOTHIM] = 10,
[SPECIES_COMBEE] = 8,
@@ -181,6 +182,7 @@ const u8 gEnemyMonElevation[NUM_SPECIES] =
[SPECIES_VOLTORB_HISUIAN] = 1,
[SPECIES_ELECTRODE_HISUIAN] = 4,
[SPECIES_BRAVIARY_HISUIAN] = 3,
+#endif
// Other Forms
[SPECIES_UNOWN_B] = 8,
[SPECIES_UNOWN_C] = 8,
@@ -212,6 +214,7 @@ const u8 gEnemyMonElevation[NUM_SPECIES] =
[SPECIES_CASTFORM_SUNNY] = 5,
[SPECIES_CASTFORM_RAINY] = 5,
[SPECIES_CASTFORM_SNOWY] = 5,
+#if P_NEW_POKEMON == TRUE
[SPECIES_ROTOM_HEAT] = 6,
[SPECIES_ROTOM_WASH] = 6,
[SPECIES_ROTOM_FROST] = 6,
@@ -268,4 +271,5 @@ const u8 gEnemyMonElevation[NUM_SPECIES] =
[SPECIES_SINISTEA_ANTIQUE] = 10,
[SPECIES_POLTEAGEIST_ANTIQUE] = 12,
[SPECIES_ETERNATUS_ETERNAMAX] = 13,
+#endif
};
diff --git a/src/data/pokemon_graphics/footprint_table.h b/src/data/pokemon_graphics/footprint_table.h
index da05b7fff8..cacf582ca5 100644
--- a/src/data/pokemon_graphics/footprint_table.h
+++ b/src/data/pokemon_graphics/footprint_table.h
@@ -387,6 +387,7 @@ const u8 *const gMonFootprintTable[] =
[SPECIES_JIRACHI] = gMonFootprint_Jirachi,
[SPECIES_DEOXYS] = gMonFootprint_Deoxys,
[SPECIES_CHIMECHO] = gMonFootprint_Chimecho,
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] = gMonFootprint_Turtwig,
[SPECIES_GROTLE] = gMonFootprint_Grotle,
[SPECIES_TORTERRA] = gMonFootprint_Torterra,
@@ -899,5 +900,6 @@ const u8 *const gMonFootprintTable[] =
[SPECIES_GLASTRIER] = gMonFootprint_Glastrier,
[SPECIES_SPECTRIER] = gMonFootprint_Spectrier,
[SPECIES_CALYREX] = gMonFootprint_Calyrex,
+#endif
[SPECIES_EGG] = gMonFootprint_Bulbasaur,
};
diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h
index 1e9dc41a8e..cf59f314c2 100644
--- a/src/data/pokemon_graphics/front_pic_anims.h
+++ b/src/data/pokemon_graphics/front_pic_anims.h
@@ -4805,6 +4805,7 @@ static const union AnimCmd sAnim_UNOWN_QMARK_1[] =
ANIMCMD_END,
};
+#if P_NEW_POKEMON == TRUE
static const union AnimCmd sAnim_TURTWIG_1[] =
{
ANIMCMD_FRAME(0, 15),
@@ -9324,7 +9325,7 @@ static const union AnimCmd sAnim_ZYGARDE_COMPLETE_1[] =
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-
+#endif
static const union AnimCmd sAnim_DEOXYS_ATTACK_1[] =
{
ANIMCMD_FRAME(0, 16),
@@ -9382,6 +9383,7 @@ static const union AnimCmd sAnim_DEOXYS_SPEED_2[] =
ANIMCMD_END,
};
+#if P_NEW_POKEMON == TRUE
static const union AnimCmd sAnim_PIKACHU_COSPLAY_1[] =
{
ANIMCMD_FRAME(0, 1),
@@ -9471,6 +9473,7 @@ static const union AnimCmd sAnim_PICHU_SPIKY_EARED_1[] =
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
+#endif
static const union AnimCmd *const sAnims_NONE[] ={
sAnim_GeneralFrame0,
@@ -11612,6 +11615,7 @@ static const union AnimCmd *const sAnims_UNOWN_QMARK[] ={
sAnim_UNOWN_QMARK_1,
};
+#if P_NEW_POKEMON == TRUE
static const union AnimCmd *const sAnims_TURTWIG[] ={
sAnim_GeneralFrame0,
sAnim_TURTWIG_1,
@@ -14861,7 +14865,7 @@ static const union AnimCmd *const sAnims_ZYGARDE_COMPLETE[] ={
sAnim_GeneralFrame0,
sAnim_ZYGARDE_COMPLETE_1,
};
-
+#endif
static const union AnimCmd *const sAnims_DEOXYS_ATTACK[] ={
sAnim_GeneralFrame0,
sAnim_DEOXYS_ATTACK_1,
@@ -14880,6 +14884,7 @@ static const union AnimCmd *const sAnims_DEOXYS_SPEED[] ={
sAnim_DEOXYS_SPEED_2,
};
+#if P_NEW_POKEMON == TRUE
static const union AnimCmd *const sAnims_PIKACHU_COSPLAY[] ={
sAnim_GeneralFrame0,
sAnim_PIKACHU_COSPLAY_1,
@@ -14954,6 +14959,7 @@ static const union AnimCmd *const sAnims_PICHU_SPIKY_EARED[] ={
sAnim_GeneralFrame0,
sAnim_PICHU_SPIKY_EARED_1,
};
+#endif
#define ANIM_CMD(name) [SPECIES_##name] = sAnims_##name
#define ANIM_CMD_FULL(name, anims) [SPECIES_##name] = anims
@@ -15347,6 +15353,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] =
ANIM_CMD(JIRACHI),
ANIM_CMD(DEOXYS),
ANIM_CMD(CHIMECHO),
+#if P_NEW_POKEMON == TRUE
ANIM_CMD(TURTWIG),
ANIM_CMD(GROTLE),
ANIM_CMD(TORTERRA),
@@ -15984,6 +15991,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] =
ANIM_CMD(PIKACHU_PARTNER_CAP),
ANIM_CMD(PIKACHU_WORLD_CAP),
ANIM_CMD(PICHU_SPIKY_EARED),
+#endif
ANIM_CMD(UNOWN_B),
ANIM_CMD(UNOWN_C),
ANIM_CMD(UNOWN_D),
@@ -16017,6 +16025,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] =
ANIM_CMD(DEOXYS_ATTACK),
ANIM_CMD(DEOXYS_DEFENSE),
ANIM_CMD(DEOXYS_SPEED),
+#if P_NEW_POKEMON == TRUE
ANIM_CMD_FULL(BURMY_SANDY_CLOAK, sAnims_BURMY),
ANIM_CMD_FULL(BURMY_TRASH_CLOAK, sAnims_BURMY),
ANIM_CMD_FULL(WORMADAM_SANDY_CLOAK, sAnims_WORMADAM),
@@ -16194,6 +16203,7 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] =
ANIM_CMD_FULL(ZARUDE_DADA, sAnims_ZARUDE),
ANIM_CMD_FULL(CALYREX_ICE_RIDER, sAnims_CALYREX),
ANIM_CMD_FULL(CALYREX_SHADOW_RIDER, sAnims_CALYREX),
+#endif
ANIM_CMD(EGG),
};
diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h
index d2cfdbedfd..4c41a50e1b 100644
--- a/src/data/pokemon_graphics/front_pic_coordinates.h
+++ b/src/data/pokemon_graphics/front_pic_coordinates.h
@@ -1939,6 +1939,7 @@ const struct MonCoords gMonFrontPicCoords[] =
.size = MON_COORDS_SIZE(48, 48),
.y_offset = 11,
},
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] =
{
.size = MON_COORDS_SIZE(40, 48),
@@ -5133,6 +5134,7 @@ const struct MonCoords gMonFrontPicCoords[] =
.size = MON_COORDS_SIZE(32, 40),
.y_offset = 14,
},
+#endif
// Unown
[SPECIES_UNOWN_B] =
{
@@ -5301,6 +5303,7 @@ const struct MonCoords gMonFrontPicCoords[] =
.size = MON_COORDS_SIZE(64, 64),
.y_offset = 1,
},
+#if P_NEW_POKEMON == TRUE
// Burmy
[SPECIES_BURMY_SANDY_CLOAK] =
{
@@ -6240,6 +6243,7 @@ const struct MonCoords gMonFrontPicCoords[] =
.size = MON_COORDS_SIZE(64, 64),
.y_offset = 0,
},
+#endif
// Egg
[SPECIES_EGG] =
{
diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h
index 0ec83bb29c..d94162a4b3 100644
--- a/src/data/pokemon_graphics/front_pic_table.h
+++ b/src/data/pokemon_graphics/front_pic_table.h
@@ -387,6 +387,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] =
SPECIES_SPRITE(JIRACHI, gMonFrontPic_Jirachi),
SPECIES_SPRITE(DEOXYS, gMonFrontPic_Deoxys),
SPECIES_SPRITE(CHIMECHO, gMonFrontPic_Chimecho),
+#if P_NEW_POKEMON == TRUE
SPECIES_SPRITE(TURTWIG, gMonFrontPic_Turtwig),
SPECIES_SPRITE(GROTLE, gMonFrontPic_Grotle),
SPECIES_SPRITE(TORTERRA, gMonFrontPic_Torterra),
@@ -1032,7 +1033,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] =
SPECIES_SPRITE(PIKACHU_WORLD_CAP, gMonFrontPic_PikachuWorldCap),
SPECIES_SPRITE(PICHU_SPIKY_EARED, gMonFrontPic_PichuSpikyEared),
-
+#endif
SPECIES_SPRITE(UNOWN_B, gMonFrontPic_UnownB),
SPECIES_SPRITE(UNOWN_C, gMonFrontPic_UnownC),
SPECIES_SPRITE(UNOWN_D, gMonFrontPic_UnownD),
@@ -1068,7 +1069,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] =
SPECIES_SPRITE(DEOXYS_ATTACK, gMonFrontPic_DeoxysAttack),
SPECIES_SPRITE(DEOXYS_DEFENSE, gMonFrontPic_DeoxysDefense),
SPECIES_SPRITE(DEOXYS_SPEED, gMonFrontPic_DeoxysSpeed),
-
+#if P_NEW_POKEMON == TRUE
SPECIES_SPRITE(BURMY_SANDY_CLOAK, gMonFrontPic_BurmySandyCloak),
SPECIES_SPRITE(BURMY_TRASH_CLOAK, gMonFrontPic_BurmyTrashCloak),
@@ -1299,13 +1300,14 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] =
SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonFrontPic_CalyrexIceRider),
SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonFrontPic_CalyrexShadowRider),
-
+#endif
SPECIES_SPRITE(EGG, gMonFrontPic_Egg),
};
const struct CompressedSpriteSheet gMonFrontPicTableFemale[] =
{
SPECIES_SPRITE(EEVEE, gMonFrontPic_EeveeF),
+#if P_NEW_POKEMON == TRUE
SPECIES_SPRITE(STARLY, gMonFrontPic_StarlyF),
SPECIES_SPRITE(STARAVIA, gMonFrontPic_StaraviaF),
SPECIES_SPRITE(STARAPTOR, gMonFrontPic_StaraptorF),
@@ -1321,4 +1323,5 @@ const struct CompressedSpriteSheet gMonFrontPicTableFemale[] =
SPECIES_SPRITE(JELLICENT, gMonFrontPic_JellicentF),
SPECIES_SPRITE(PYROAR, gMonFrontPic_PyroarF),
SPECIES_SPRITE(BASCULEGION, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_BasculegionF),
+#endif
};
diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h
index 16ba152cb9..65fbf835b4 100644
--- a/src/data/pokemon_graphics/palette_table.h
+++ b/src/data/pokemon_graphics/palette_table.h
@@ -387,6 +387,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] =
SPECIES_PAL(JIRACHI, gMonPalette_Jirachi),
SPECIES_PAL(DEOXYS, gMonPalette_Deoxys),
SPECIES_PAL(CHIMECHO, gMonPalette_Chimecho),
+#if P_NEW_POKEMON == TRUE
SPECIES_PAL(TURTWIG, gMonPalette_Turtwig),
SPECIES_PAL(GROTLE, gMonPalette_Grotle),
SPECIES_PAL(TORTERRA, gMonPalette_Torterra),
@@ -1032,7 +1033,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] =
SPECIES_PAL(PIKACHU_WORLD_CAP, gMonPalette_PikachuWorldCap),
SPECIES_PAL(PICHU_SPIKY_EARED, gMonPalette_PichuSpikyEared),
-
+#endif
SPECIES_PAL(UNOWN_B, gMonPalette_Unown),
SPECIES_PAL(UNOWN_C, gMonPalette_Unown),
SPECIES_PAL(UNOWN_D, gMonPalette_Unown),
@@ -1068,7 +1069,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] =
SPECIES_PAL(DEOXYS_ATTACK, gMonPalette_DeoxysAttack),
SPECIES_PAL(DEOXYS_DEFENSE, gMonPalette_DeoxysDefense),
SPECIES_PAL(DEOXYS_SPEED, gMonPalette_DeoxysSpeed),
-
+#if P_NEW_POKEMON == TRUE
SPECIES_PAL(BURMY_SANDY_CLOAK, gMonPalette_BurmySandyCloak),
SPECIES_PAL(BURMY_TRASH_CLOAK, gMonPalette_BurmyTrashCloak),
@@ -1299,13 +1300,14 @@ const struct CompressedSpritePalette gMonPaletteTable[] =
SPECIES_PAL(CALYREX_ICE_RIDER, gMonPalette_CalyrexIceRider),
SPECIES_PAL(CALYREX_SHADOW_RIDER, gMonPalette_CalyrexShadowRider),
-
+#endif
SPECIES_PAL(EGG, gMonPalette_Egg),
};
const struct CompressedSpritePalette gMonPaletteTableFemale[] =
{
SPECIES_PAL(EEVEE, gMonPalette_Eevee),
+#if P_NEW_POKEMON == TRUE
SPECIES_PAL(COMBEE, gMonPalette_Combee),
SPECIES_PAL(STARLY, gMonPalette_Starly),
SPECIES_PAL(STARAVIA, gMonPalette_Staravia),
@@ -1321,4 +1323,5 @@ const struct CompressedSpritePalette gMonPaletteTableFemale[] =
SPECIES_PAL(JELLICENT, gMonPalette_JellicentF),
SPECIES_PAL(PYROAR, gMonPalette_PyroarF),
SPECIES_PAL(BASCULEGION, gMonPalette_CircledQuestionMark), // gMonPalette_BasculegionF),
+#endif
};
diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h
index 6b4baa8c79..c029e91e1e 100644
--- a/src/data/pokemon_graphics/shiny_palette_table.h
+++ b/src/data/pokemon_graphics/shiny_palette_table.h
@@ -387,6 +387,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] =
SPECIES_SHINY_PAL(JIRACHI, gMonShinyPalette_Jirachi),
SPECIES_SHINY_PAL(DEOXYS, gMonShinyPalette_Deoxys),
SPECIES_SHINY_PAL(CHIMECHO, gMonShinyPalette_Chimecho),
+#if P_NEW_POKEMON == TRUE
SPECIES_SHINY_PAL(TURTWIG, gMonShinyPalette_Turtwig),
SPECIES_SHINY_PAL(GROTLE, gMonShinyPalette_Grotle),
SPECIES_SHINY_PAL(TORTERRA, gMonShinyPalette_Torterra),
@@ -1032,7 +1033,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] =
SPECIES_SHINY_PAL(PIKACHU_WORLD_CAP, gMonShinyPalette_PikachuWorldCap),
SPECIES_SHINY_PAL(PICHU_SPIKY_EARED, gMonShinyPalette_PichuSpikyEared),
-
+#endif
SPECIES_SHINY_PAL(UNOWN_B, gMonShinyPalette_Unown),
SPECIES_SHINY_PAL(UNOWN_C, gMonShinyPalette_Unown),
SPECIES_SHINY_PAL(UNOWN_D, gMonShinyPalette_Unown),
@@ -1068,7 +1069,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] =
SPECIES_SHINY_PAL(DEOXYS_ATTACK, gMonShinyPalette_DeoxysAttack),
SPECIES_SHINY_PAL(DEOXYS_DEFENSE, gMonShinyPalette_DeoxysDefense),
SPECIES_SHINY_PAL(DEOXYS_SPEED, gMonShinyPalette_DeoxysSpeed),
-
+#if P_NEW_POKEMON == TRUE
SPECIES_SHINY_PAL(BURMY_SANDY_CLOAK, gMonShinyPalette_BurmySandyCloak),
SPECIES_SHINY_PAL(BURMY_TRASH_CLOAK, gMonShinyPalette_BurmyTrashCloak),
@@ -1299,13 +1300,14 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] =
SPECIES_SHINY_PAL(CALYREX_ICE_RIDER, gMonShinyPalette_CalyrexIceRider),
SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider),
-
+#endif
SPECIES_SHINY_PAL(EGG, gMonPalette_Egg),
};
const struct CompressedSpritePalette gMonShinyPaletteTableFemale[] =
{
SPECIES_SHINY_PAL(EEVEE, gMonShinyPalette_Eevee),
+#if P_NEW_POKEMON == TRUE
SPECIES_SHINY_PAL(STARLY, gMonShinyPalette_Starly),
SPECIES_SHINY_PAL(STARAVIA, gMonShinyPalette_Staravia),
SPECIES_SHINY_PAL(STARAPTOR, gMonShinyPalette_Staraptor),
@@ -1321,4 +1323,5 @@ const struct CompressedSpritePalette gMonShinyPaletteTableFemale[] =
SPECIES_SHINY_PAL(JELLICENT, gMonShinyPalette_JellicentF),
SPECIES_SHINY_PAL(PYROAR, gMonShinyPalette_PyroarF),
SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_BasculegionF),
+#endif
};
diff --git a/src/data/region_map/region_map_entries.h b/src/data/region_map/region_map_entries.h
index 6b433f90fa..d1913cd8a0 100644
--- a/src/data/region_map/region_map_entries.h
+++ b/src/data/region_map/region_map_entries.h
@@ -299,8 +299,8 @@ const struct RegionMapLocation gRegionMapEntries[] = {
[MAPSEC_CINNABAR_ISLAND] = { 0, 0, 1, 1, sMapName_CinnabarIsland},
[MAPSEC_INDIGO_PLATEAU] = { 0, 0, 1, 1, sMapName_IndigoPlateau},
[MAPSEC_SAFFRON_CITY] = { 0, 0, 1, 1, sMapName_SaffronCity},
- [MAPSEC_ROUTE_4_FLYDUP] = { 0, 0, 1, 1, sMapName_Route4},
- [MAPSEC_ROUTE_10_FLYDUP] = { 0, 0, 1, 1, sMapName_Route10},
+ [MAPSEC_ROUTE_4_POKECENTER] = { 0, 0, 1, 1, sMapName_Route4},
+ [MAPSEC_ROUTE_10_POKECENTER] = { 0, 0, 1, 1, sMapName_Route10},
[MAPSEC_ROUTE_1] = { 0, 0, 1, 1, sMapName_Route1},
[MAPSEC_ROUTE_2] = { 0, 0, 1, 1, sMapName_Route2},
[MAPSEC_ROUTE_3] = { 0, 0, 1, 1, sMapName_Route3},
diff --git a/src/data/text/abilities.h b/src/data/text/abilities.h
index aa6f829062..cdc3276082 100644
--- a/src/data/text/abilities.h
+++ b/src/data/text/abilities.h
@@ -1,7 +1,7 @@
static const u8 sNoneDescription[] = _("No special ability.");
-static const u8 sStenchDescription[] = _("Helps repel wild POKéMON.");
+static const u8 sStenchDescription[] = _("May cause a foe to flinch.");
static const u8 sDrizzleDescription[] = _("Summons rain in battle.");
-static const u8 sSpeedBoostDescription[] = _("Gradually boosts SPEED.");
+static const u8 sSpeedBoostDescription[] = _("Gradually boosts Speed.");
static const u8 sBattleArmorDescription[] = _("Blocks critical hits.");
static const u8 sSturdyDescription[] = _("Negates 1-hit KO attacks.");
static const u8 sDampDescription[] = _("Prevents self-destruction.");
@@ -20,27 +20,27 @@ static const u8 sFlashFireDescription[] = _("Powers up if hit by fire.");
static const u8 sShieldDustDescription[] = _("Prevents added effects.");
static const u8 sOwnTempoDescription[] = _("Prevents confusion.");
static const u8 sSuctionCupsDescription[] = _("Firmly anchors the body.");
-static const u8 sIntimidateDescription[] = _("Lowers the foe's ATTACK.");
+static const u8 sIntimidateDescription[] = _("Lowers the foe's Attack.");
static const u8 sShadowTagDescription[] = _("Prevents the foe's escape.");
static const u8 sRoughSkinDescription[] = _("Hurts to touch.");
-static const u8 sWonderGuardDescription[] = _("“Super effective” hits.");
-static const u8 sLevitateDescription[] = _("Not hit by GROUND attacks.");
+static const u8 sWonderGuardDescription[] = _("“Supereffective” hits.");
+static const u8 sLevitateDescription[] = _("Not hit by Ground attacks.");
static const u8 sEffectSporeDescription[] = _("Leaves spores on contact.");
static const u8 sSynchronizeDescription[] = _("Passes on status problems.");
static const u8 sClearBodyDescription[] = _("Prevents ability reduction.");
static const u8 sNaturalCureDescription[] = _("Heals upon switching out.");
static const u8 sLightningRodDescription[] = _("Draws electrical moves.");
static const u8 sSereneGraceDescription[] = _("Promotes added effects.");
-static const u8 sSwiftSwimDescription[] = _("Raises SPEED in rain.");
-static const u8 sChlorophyllDescription[] = _("Raises SPEED in sunshine.");
+static const u8 sSwiftSwimDescription[] = _("Raises Speed in rain.");
+static const u8 sChlorophyllDescription[] = _("Raises Speed in sunshine.");
static const u8 sIlluminateDescription[] = _("Encounter rate increases.");
static const u8 sTraceDescription[] = _("Copies special ability.");
-static const u8 sHugePowerDescription[] = _("Raises ATTACK.");
+static const u8 sHugePowerDescription[] = _("Raises Attack.");
static const u8 sPoisonPointDescription[] = _("Poisons foe on contact.");
static const u8 sInnerFocusDescription[] = _("Prevents flinching.");
static const u8 sMagmaArmorDescription[] = _("Prevents freezing.");
static const u8 sWaterVeilDescription[] = _("Prevents burns.");
-static const u8 sMagnetPullDescription[] = _("Traps STEEL-type POKéMON.");
+static const u8 sMagnetPullDescription[] = _("Traps Steel-type Pokémon.");
static const u8 sSoundproofDescription[] = _("Avoids sound-based moves.");
static const u8 sRainDishDescription[] = _("Slight HP recovery in rain.");
static const u8 sSandStreamDescription[] = _("Summons a sandstorm.");
@@ -50,114 +50,756 @@ static const u8 sEarlyBirdDescription[] = _("Awakens quickly from sleep.");
static const u8 sFlameBodyDescription[] = _("Burns the foe on contact.");
static const u8 sRunAwayDescription[] = _("Makes escaping easier.");
static const u8 sKeenEyeDescription[] = _("Prevents loss of accuracy.");
-static const u8 sHyperCutterDescription[] = _("Prevents ATTACK reduction.");
+static const u8 sHyperCutterDescription[] = _("Prevents Attack reduction.");
static const u8 sPickupDescription[] = _("May pick up items.");
static const u8 sTruantDescription[] = _("Moves only every two turns.");
static const u8 sHustleDescription[] = _("Trades accuracy for power.");
static const u8 sCuteCharmDescription[] = _("Infatuates on contact.");
-static const u8 sPlusDescription[] = _("Powers up with MINUS.");
-static const u8 sMinusDescription[] = _("Powers up with PLUS.");
+static const u8 sPlusDescription[] = _("Powers up with Minus.");
+static const u8 sMinusDescription[] = _("Powers up with Plus.");
static const u8 sForecastDescription[] = _("Changes with the weather.");
static const u8 sStickyHoldDescription[] = _("Prevents item theft.");
static const u8 sShedSkinDescription[] = _("Heals the body by shedding.");
-static const u8 sGutsDescription[] = _("Ups ATTACK if suffering.");
-static const u8 sMarvelScaleDescription[] = _("Ups DEFENSE if suffering.");
+static const u8 sGutsDescription[] = _("Ups Attack if suffering.");
+static const u8 sMarvelScaleDescription[] = _("Ups Defense if suffering.");
static const u8 sLiquidOozeDescription[] = _("Draining causes injury.");
-static const u8 sOvergrowDescription[] = _("Ups GRASS moves in a pinch.");
-static const u8 sBlazeDescription[] = _("Ups FIRE moves in a pinch.");
-static const u8 sTorrentDescription[] = _("Ups WATER moves in a pinch.");
-static const u8 sSwarmDescription[] = _("Ups BUG moves in a pinch.");
+static const u8 sOvergrowDescription[] = _("Ups Grass moves in a pinch.");
+static const u8 sBlazeDescription[] = _("Ups Fire moves in a pinch.");
+static const u8 sTorrentDescription[] = _("Ups Water moves in a pinch.");
+static const u8 sSwarmDescription[] = _("Ups Bug moves in a pinch.");
static const u8 sRockHeadDescription[] = _("Prevents recoil damage.");
static const u8 sDroughtDescription[] = _("Summons sunlight in battle.");
static const u8 sArenaTrapDescription[] = _("Prevents fleeing.");
static const u8 sVitalSpiritDescription[] = _("Prevents sleep.");
static const u8 sWhiteSmokeDescription[] = _("Prevents ability reduction.");
-static const u8 sPurePowerDescription[] = _("Raises ATTACK.");
+static const u8 sPurePowerDescription[] = _("Raises Attack.");
static const u8 sShellArmorDescription[] = _("Blocks critical hits.");
-static const u8 sCacophonyDescription[] = _("Avoids sound-based moves.");
static const u8 sAirLockDescription[] = _("Negates weather effects.");
+static const u8 sTangledFeetDescription[] = _("Ups evasion if confused.");
+static const u8 sMotorDriveDescription[] = _("Electricity raises Speed.");
+static const u8 sRivalryDescription[] = _("Powers up against rivals.");
+static const u8 sSteadfastDescription[] = _("Flinching raises Speed.");
+static const u8 sSnowCloakDescription[] = _("Ups evasion in Hail.");
+static const u8 sGluttonyDescription[] = _("Eats Berries early.");
+static const u8 sAngerPointDescription[] = _("Critical hits raise Attack.");
+static const u8 sUnburdenDescription[] = _("Using a hold item ups Speed.");
+static const u8 sHeatproofDescription[] = _("Heat and burn protection.");
+static const u8 sSimpleDescription[] = _("Prone to wild stat changes.");
+static const u8 sDrySkinDescription[] = _("Prefers moisture to heat.");
+static const u8 sDownloadDescription[] = _("Adjusts power favorably.");
+static const u8 sIronFistDescription[] = _("Boosts punching moves.");
+static const u8 sPoisonHealDescription[] = _("Restores HP if poisoned.");
+static const u8 sAdaptabilityDescription[] = _("Boosts same type attacks.");
+static const u8 sSkillLinkDescription[] = _("Multi-hit moves hit 5 times.");
+static const u8 sHydrationDescription[] = _("Cures status in rain.");
+static const u8 sSolarPowerDescription[] = _("Powers up in sunshine.");
+static const u8 sQuickFeetDescription[] = _("Ups Speed if suffering.");
+static const u8 sNormalizeDescription[] = _("Moves become Normal-type.");
+static const u8 sSniperDescription[] = _("Boosts critical hits.");
+static const u8 sMagicGuardDescription[] = _("Only damaged by attacks.");
+static const u8 sNoGuardDescription[] = _("Ensures that all moves hit.");
+static const u8 sStallDescription[] = _("Always moves last.");
+static const u8 sTechnicianDescription[] = _("Boosts weaker moves.");
+static const u8 sLeafGuardDescription[] = _("Blocks status in sunshine.");
+static const u8 sKlutzDescription[] = _("Can't use hold items.");
+static const u8 sMoldBreakerDescription[] = _("Moves hit through abilities.");
+static const u8 sSuperLuckDescription[] = _("Critical hits land often.");
+static const u8 sAftermathDescription[] = _("Fainting damages the foe.");
+static const u8 sAnticipationDescription[] = _("Senses dangerous moves.");
+static const u8 sForewarnDescription[] = _("Determines a foe's move.");
+static const u8 sUnawareDescription[] = _("Ignores stat changes.");
+static const u8 sTintedLensDescription[] = _("Ups “not very effective”.");
+static const u8 sFilterDescription[] = _("Weakens “supereffective”.");
+static const u8 sSlowStartDescription[] = _("Takes a while to get going.");
+static const u8 sScrappyDescription[] = _("Hits Ghost-type Pokémon.");
+static const u8 sStormDrainDescription[] = _("Draws in Water moves.");
+static const u8 sIceBodyDescription[] = _("Slight HP recovery in Hail.");
+static const u8 sSnowWarningDescription[] = _("Summons a hailstorm.");
+static const u8 sHoneyGatherDescription[] = _("May gather Honey.");
+static const u8 sFriskDescription[] = _("Checks a foe's item.");
+static const u8 sRecklessDescription[] = _("Boosts moves with recoil.");
+static const u8 sMultitypeDescription[] = _("Changes type to its Plate.");
+static const u8 sFlowerGiftDescription[] = _("Transforms in sunshine.");
+static const u8 sBadDreamsDescription[] = _("Damages sleeping Pokémon.");
+static const u8 sPickpocketDescription[] = _("Steals the foe's held item.");
+static const u8 sSheerForceDescription[] = _("Trades effects for power.");
+static const u8 sContraryDescription[] = _("Inverts stat changes.");
+static const u8 sUnnerveDescription[] = _("Foes can't eat Berries.");
+static const u8 sDefiantDescription[] = _("Lowered stats up Attack.");
+static const u8 sDefeatistDescription[] = _("Gives up at half HP.");
+static const u8 sCursedBodyDescription[] = _("Disables moves on contact.");
+static const u8 sHealerDescription[] = _("Heals partner Pokémon.");
+static const u8 sFriendGuardDescription[] = _("Lowers damage to partner.");
+static const u8 sWeakArmorDescription[] = _("Its stats change when hit.");
+static const u8 sHeavyMetalDescription[] = _("Doubles weight.");
+static const u8 sLightMetalDescription[] = _("Halves weight.");
+static const u8 sMultiscaleDescription[] = _("Halves damage at full HP.");
+static const u8 sToxicBoostDescription[] = _("Ups Attack if poisoned.");
+static const u8 sFlareBoostDescription[] = _("Ups Sp. Atk if burned.");
+static const u8 sHarvestDescription[] = _("May recycle a used Berry.");
+static const u8 sTelepathyDescription[] = _("Can't be damaged by an ally.");
+static const u8 sMoodyDescription[] = _("Stats change gradually.");
+static const u8 sOvercoatDescription[] = _("Blocks weather and powder.");
+static const u8 sBigPecksDescription[] = _("Prevents Defense loss.");
+static const u8 sSandRushDescription[] = _("Ups Speed in a sandstorm.");
+static const u8 sWonderSkinDescription[] = _("May avoid status problems.");
+static const u8 sAnalyticDescription[] = _("Moving last boosts power.");
+static const u8 sIllusionDescription[] = _("Appears as a partner.");
+static const u8 sImposterDescription[] = _("Transforms into the foe.");
+static const u8 sInfiltratorDescription[] = _("Passes through barriers.");
+static const u8 sMummyDescription[] = _("Spreads with contact.");
+static const u8 sMoxieDescription[] = _("KOs raise Attack.");
+static const u8 sJustifiedDescription[] = _("Dark hits raise Attack.");
+static const u8 sRattledDescription[] = _("Raises Speed when scared.");
+static const u8 sMagicBounceDescription[] = _("Reflects status moves.");
+static const u8 sSapSipperDescription[] = _("Grass increases Attack.");
+static const u8 sPranksterDescription[] = _("Status moves go first.");
+static const u8 sSandForceDescription[] = _("Powers up in a sandstorm.");
+static const u8 sZenModeDescription[] = _("Transforms at half HP.");
+static const u8 sVictoryStarDescription[] = _("Raises party accuracy.");
+static const u8 sAromaVeilDescription[] = _("Prevents limiting of moves.");
+static const u8 sFlowerVeilDescription[] = _("Protects Grass-types.");
+static const u8 sCheekPouchDescription[] = _("Eating Berries restores HP.");
+static const u8 sProteanDescription[] = _("Changes type to used move.");
+static const u8 sFurCoatDescription[] = _("Raises Defense.");
+static const u8 sBulletproofDescription[] = _("Avoids some projectiles.");
+static const u8 sCompetitiveDescription[] = _("Lowered stats up Sp. Atk.");
+static const u8 sStrongJawDescription[] = _("Boosts biting moves.");
+static const u8 sRefrigerateDescription[] = _("Normal moves become Ice.");
+static const u8 sSweetVeilDescription[] = _("Prevents party from sleep.");
+static const u8 sStanceChangeDescription[] = _("Transforms as it battles.");
+static const u8 sGaleWingsDescription[] = _("Flying moves go first.");
+static const u8 sMegaLauncherDescription[] = _("Boosts pulse moves.");
+static const u8 sGrassPeltDescription[] = _("Ups Defense in grass.");
+static const u8 sSymbiosisDescription[] = _("Passes its item to an ally.");
+static const u8 sToughClawsDescription[] = _("Boosts contact moves.");
+static const u8 sPixilateDescription[] = _("Normal moves become Fairy.");
+static const u8 sGooeyDescription[] = _("Lowers Speed on contact.");
+static const u8 sAerilateDescription[] = _("Normal moves become Flying.");
+static const u8 sParentalBondDescription[] = _("Moves hit twice.");
+static const u8 sDarkAuraDescription[] = _("Boosts Dark moves.");
+static const u8 sFairyAuraDescription[] = _("Boosts Fairy moves.");
+static const u8 sAuraBreakDescription[] = _("Reverse aura abilities.");
+static const u8 sPrimordialSeaDescription[] = _("Summons heavy rain.");
+static const u8 sDesolateLandDescription[] = _("Summons intense sunlight.");
+static const u8 sDeltaStreamDescription[] = _("Summons strong winds.");
+static const u8 sStaminaDescription[] = _("Boosts Defense when hit.");
+static const u8 sWimpOutDescription[] = _("Flees at half HP.");
+static const u8 sWaterCompactionDescription[] = _("Water boosts Defense.");
+static const u8 sMercilessDescription[] = _("Criticals poisoned foes.");
+static const u8 sShieldsDownDescription[] = _("Shell breaks at half HP.");
+static const u8 sStakeoutDescription[] = _("Stronger as foes switch in.");
+static const u8 sWaterBubbleDescription[] = _("Guards from fire and burns.");
+static const u8 sSteelworkerDescription[] = _("Powers up Steel moves.");
+static const u8 sBerserkDescription[] = _("Boosts Sp. Atk at low HP.");
+static const u8 sSlushRushDescription[] = _("Raises Speed in hail.");
+static const u8 sLongReachDescription[] = _("Never makes contact.");
+static const u8 sLiquidVoiceDescription[] = _("Makes sound moves Water.");
+static const u8 sTriageDescription[] = _("Healing moves go first.");
+static const u8 sGalvanizeDescription[] = _("Normal moves turn Electric.");
+static const u8 sSurgeSurferDescription[] = _("Faster on electricity.");
+static const u8 sSchoolingDescription[] = _("Forms a school when strong.");
+static const u8 sDisguiseDescription[] = _("Decoy protects it once.");
+static const u8 sBattleBondDescription[] = _("Changes form after a KO.");
+static const u8 sPowerConstructDescription[] = _("Cells aid it when weakened.");
+static const u8 sCorrosionDescription[] = _("Poisons any type.");
+static const u8 sComatoseDescription[] = _("Always drowsing.");
+static const u8 sQueenlyMajestyDescription[] = _("Protects from priority.");
+static const u8 sInnardsOutDescription[] = _("Hurts foe when defeated.");
+static const u8 sDancerDescription[] = _("Dances along with others.");
+static const u8 sBatteryDescription[] = _("Boosts ally's Sp. Atk.");
+static const u8 sFluffyDescription[] = _("Tougher but flammable.");
+static const u8 sSoulHeartDescription[] = _("KOs raise Sp. Atk.");
+static const u8 sTanglingHairDescription[] = _("Contact lowers Speed.");
+static const u8 sReceiverDescription[] = _("Copies ally's ability.");
+static const u8 sBeastBoostDescription[] = _("KOs boost best stat.");
+static const u8 sRKSSystemDescription[] = _("Memories change its type.");
+static const u8 sElectricSurgeDescription[] = _("Field becomes Electric.");
+static const u8 sPsychicSurgeDescription[] = _("Field becomes weird.");
+static const u8 sMistySurgeDescription[] = _("Field becomes misty.");
+static const u8 sGrassySurgeDescription[] = _("Field becomes grassy.");
+static const u8 sFullMetalBodyDescription[] = _("Prevents stat reduction.");
+static const u8 sNeuroforceDescription[] = _("Ups “supereffective”.");
+static const u8 sIntrepidSwordDescription[] = _("Ups Attack on entry.");
+static const u8 sDauntlessShieldDescription[] = _("Ups Defense on entry.");
+static const u8 sLiberoDescription[] = _("Changes type to move's.");
+static const u8 sBallFetchDescription[] = _("Fetches failed Poké Ball.");
+static const u8 sCottonDownDescription[] = _("Lower Speed of all when hit.");
+static const u8 sPropellerTailDescription[] = _("Ignores foe's redirection.");
+static const u8 sMirrorArmorDescription[] = _("Reflect stat decreases.");
+static const u8 sGulpMissileDescription[] = _("If hit, spits prey from sea.");
+static const u8 sStalwartDescription[] = _("Ignores foe's redirection.");
+static const u8 sSteamEngineDescription[] = _("Fire or Water hits up Speed.");
+static const u8 sPunkRockDescription[] = _("Ups and resists sound.");
+static const u8 sSandSpitDescription[] = _("Creates a sandstorm if hit.");
+static const u8 sIceScalesDescription[] = _("Halves special damage.");
+static const u8 sRipenDescription[] = _("Doubles effect of Berries.");
+static const u8 sIceFaceDescription[] = _("Take a free hit. Hail renews.");
+static const u8 sPowerSpotDescription[] = _("Powers up ally moves.");
+static const u8 sMimicryDescription[] = _("Changes type on terrain.");
+static const u8 sScreenCleanerDescription[] = _("Removes walls of light.");
+static const u8 sSteelySpiritDescription[] = _("Boosts ally's Steel moves.");
+static const u8 sPerishBodyDescription[] = _("Foe faints in 3 turns if hit.");
+static const u8 sWanderingSpiritDescription[] = _("Trade abilities on contact.");
+static const u8 sGorillaTacticsDescription[] = _("Ups Attack and locks move.");
+static const u8 sNeutralizingGasDescription[] = _("All Abilities are nullified.");
+static const u8 sPastelVeilDescription[] = _("Protects team from poison.");
+static const u8 sHungerSwitchDescription[] = _("Changes form each turn.");;
+static const u8 sQuickDrawDescription[] = _("Moves first occasionally.");
+static const u8 sUnseenFistDescription[] = _("Contact evades protection.");
+static const u8 sCuriousMedicineDescription[] = _("Remove ally's stat changes.");
+static const u8 sTransistorDescription[] = _("Ups Electric-type moves.");
+static const u8 sDragonsMawDescription[] = _("Ups Dragon-type moves.");
+static const u8 sChillingNeighDescription[] = _("KOs boost Attack stat.");
+static const u8 sGrimNeighDescription[] = _("KOs boost Sp. Atk stat.");
+static const u8 sAsOneIceRiderDescription[] = _("Unnerve and Chilling Neigh.");
+static const u8 sAsOneShadowRiderDescription[] = _("Unnerve and Grim Neigh.");
+#if B_EXPANDED_ABILITY_NAMES == TRUE
const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
{
[ABILITY_NONE] = _("-------"),
- [ABILITY_STENCH] = _("STENCH"),
- [ABILITY_DRIZZLE] = _("DRIZZLE"),
- [ABILITY_SPEED_BOOST] = _("SPEED BOOST"),
- [ABILITY_BATTLE_ARMOR] = _("BATTLE ARMOR"),
- [ABILITY_STURDY] = _("STURDY"),
- [ABILITY_DAMP] = _("DAMP"),
- [ABILITY_LIMBER] = _("LIMBER"),
- [ABILITY_SAND_VEIL] = _("SAND VEIL"),
- [ABILITY_STATIC] = _("STATIC"),
- [ABILITY_VOLT_ABSORB] = _("VOLT ABSORB"),
- [ABILITY_WATER_ABSORB] = _("WATER ABSORB"),
- [ABILITY_OBLIVIOUS] = _("OBLIVIOUS"),
- [ABILITY_CLOUD_NINE] = _("CLOUD NINE"),
- [ABILITY_COMPOUND_EYES] = _("COMPOUNDEYES"),
- [ABILITY_INSOMNIA] = _("INSOMNIA"),
- [ABILITY_COLOR_CHANGE] = _("COLOR CHANGE"),
- [ABILITY_IMMUNITY] = _("IMMUNITY"),
- [ABILITY_FLASH_FIRE] = _("FLASH FIRE"),
- [ABILITY_SHIELD_DUST] = _("SHIELD DUST"),
- [ABILITY_OWN_TEMPO] = _("OWN TEMPO"),
- [ABILITY_SUCTION_CUPS] = _("SUCTION CUPS"),
- [ABILITY_INTIMIDATE] = _("INTIMIDATE"),
- [ABILITY_SHADOW_TAG] = _("SHADOW TAG"),
- [ABILITY_ROUGH_SKIN] = _("ROUGH SKIN"),
- [ABILITY_WONDER_GUARD] = _("WONDER GUARD"),
- [ABILITY_LEVITATE] = _("LEVITATE"),
- [ABILITY_EFFECT_SPORE] = _("EFFECT SPORE"),
- [ABILITY_SYNCHRONIZE] = _("SYNCHRONIZE"),
- [ABILITY_CLEAR_BODY] = _("CLEAR BODY"),
- [ABILITY_NATURAL_CURE] = _("NATURAL CURE"),
- [ABILITY_LIGHTNING_ROD] = _("LIGHTNINGROD"),
- [ABILITY_SERENE_GRACE] = _("SERENE GRACE"),
- [ABILITY_SWIFT_SWIM] = _("SWIFT SWIM"),
- [ABILITY_CHLOROPHYLL] = _("CHLOROPHYLL"),
- [ABILITY_ILLUMINATE] = _("ILLUMINATE"),
- [ABILITY_TRACE] = _("TRACE"),
- [ABILITY_HUGE_POWER] = _("HUGE POWER"),
- [ABILITY_POISON_POINT] = _("POISON POINT"),
- [ABILITY_INNER_FOCUS] = _("INNER FOCUS"),
- [ABILITY_MAGMA_ARMOR] = _("MAGMA ARMOR"),
- [ABILITY_WATER_VEIL] = _("WATER VEIL"),
- [ABILITY_MAGNET_PULL] = _("MAGNET PULL"),
- [ABILITY_SOUNDPROOF] = _("SOUNDPROOF"),
- [ABILITY_RAIN_DISH] = _("RAIN DISH"),
- [ABILITY_SAND_STREAM] = _("SAND STREAM"),
- [ABILITY_PRESSURE] = _("PRESSURE"),
- [ABILITY_THICK_FAT] = _("THICK FAT"),
- [ABILITY_EARLY_BIRD] = _("EARLY BIRD"),
- [ABILITY_FLAME_BODY] = _("FLAME BODY"),
- [ABILITY_RUN_AWAY] = _("RUN AWAY"),
- [ABILITY_KEEN_EYE] = _("KEEN EYE"),
- [ABILITY_HYPER_CUTTER] = _("HYPER CUTTER"),
- [ABILITY_PICKUP] = _("PICKUP"),
- [ABILITY_TRUANT] = _("TRUANT"),
- [ABILITY_HUSTLE] = _("HUSTLE"),
- [ABILITY_CUTE_CHARM] = _("CUTE CHARM"),
- [ABILITY_PLUS] = _("PLUS"),
- [ABILITY_MINUS] = _("MINUS"),
- [ABILITY_FORECAST] = _("FORECAST"),
- [ABILITY_STICKY_HOLD] = _("STICKY HOLD"),
- [ABILITY_SHED_SKIN] = _("SHED SKIN"),
- [ABILITY_GUTS] = _("GUTS"),
- [ABILITY_MARVEL_SCALE] = _("MARVEL SCALE"),
- [ABILITY_LIQUID_OOZE] = _("LIQUID OOZE"),
- [ABILITY_OVERGROW] = _("OVERGROW"),
- [ABILITY_BLAZE] = _("BLAZE"),
- [ABILITY_TORRENT] = _("TORRENT"),
- [ABILITY_SWARM] = _("SWARM"),
- [ABILITY_ROCK_HEAD] = _("ROCK HEAD"),
- [ABILITY_DROUGHT] = _("DROUGHT"),
- [ABILITY_ARENA_TRAP] = _("ARENA TRAP"),
- [ABILITY_VITAL_SPIRIT] = _("VITAL SPIRIT"),
- [ABILITY_WHITE_SMOKE] = _("WHITE SMOKE"),
- [ABILITY_PURE_POWER] = _("PURE POWER"),
- [ABILITY_SHELL_ARMOR] = _("SHELL ARMOR"),
-// [ABILITY_CACOPHONY] = _("CACOPHONY"),
- [ABILITY_AIR_LOCK] = _("AIR LOCK"),
+ [ABILITY_STENCH] = _("Stench"),
+ [ABILITY_DRIZZLE] = _("Drizzle"),
+ [ABILITY_SPEED_BOOST] = _("Speed Boost"),
+ [ABILITY_BATTLE_ARMOR] = _("Battle Armor"),
+ [ABILITY_STURDY] = _("Sturdy"),
+ [ABILITY_DAMP] = _("Damp"),
+ [ABILITY_LIMBER] = _("Limber"),
+ [ABILITY_SAND_VEIL] = _("Sand Veil"),
+ [ABILITY_STATIC] = _("Static"),
+ [ABILITY_VOLT_ABSORB] = _("Volt Absorb"),
+ [ABILITY_WATER_ABSORB] = _("Water Absorb"),
+ [ABILITY_OBLIVIOUS] = _("Oblivious"),
+ [ABILITY_CLOUD_NINE] = _("Cloud Nine"),
+ [ABILITY_COMPOUND_EYES] = _("Compound Eyes"),
+ [ABILITY_INSOMNIA] = _("Insomnia"),
+ [ABILITY_COLOR_CHANGE] = _("Color Change"),
+ [ABILITY_IMMUNITY] = _("Immunity"),
+ [ABILITY_FLASH_FIRE] = _("Flash Fire"),
+ [ABILITY_SHIELD_DUST] = _("Shield Dust"),
+ [ABILITY_OWN_TEMPO] = _("Own Tempo"),
+ [ABILITY_SUCTION_CUPS] = _("Suction Cups"),
+ [ABILITY_INTIMIDATE] = _("Intimidate"),
+ [ABILITY_SHADOW_TAG] = _("Shadow Tag"),
+ [ABILITY_ROUGH_SKIN] = _("Rough Skin"),
+ [ABILITY_WONDER_GUARD] = _("Wonder Guard"),
+ [ABILITY_LEVITATE] = _("Levitate"),
+ [ABILITY_EFFECT_SPORE] = _("Effect Spore"),
+ [ABILITY_SYNCHRONIZE] = _("Synchronize"),
+ [ABILITY_CLEAR_BODY] = _("Clear Body"),
+ [ABILITY_NATURAL_CURE] = _("Natural Cure"),
+ [ABILITY_LIGHTNING_ROD] = _("Lightning Rod"),
+ [ABILITY_SERENE_GRACE] = _("Serene Grace"),
+ [ABILITY_SWIFT_SWIM] = _("Swift Swim"),
+ [ABILITY_CHLOROPHYLL] = _("Chlorophyll"),
+ [ABILITY_ILLUMINATE] = _("Illuminate"),
+ [ABILITY_TRACE] = _("Trace"),
+ [ABILITY_HUGE_POWER] = _("Huge Power"),
+ [ABILITY_POISON_POINT] = _("Poison Point"),
+ [ABILITY_INNER_FOCUS] = _("Inner Focus"),
+ [ABILITY_MAGMA_ARMOR] = _("Magma Armor"),
+ [ABILITY_WATER_VEIL] = _("Water Veil"),
+ [ABILITY_MAGNET_PULL] = _("Magnet Pull"),
+ [ABILITY_SOUNDPROOF] = _("Soundproof"),
+ [ABILITY_RAIN_DISH] = _("Rain Dish"),
+ [ABILITY_SAND_STREAM] = _("Sand Stream"),
+ [ABILITY_PRESSURE] = _("Pressure"),
+ [ABILITY_THICK_FAT] = _("Thick Fat"),
+ [ABILITY_EARLY_BIRD] = _("Early Bird"),
+ [ABILITY_FLAME_BODY] = _("Flame Body"),
+ [ABILITY_RUN_AWAY] = _("Run Away"),
+ [ABILITY_KEEN_EYE] = _("Keen Eye"),
+ [ABILITY_HYPER_CUTTER] = _("Hyper Cutter"),
+ [ABILITY_PICKUP] = _("Pickup"),
+ [ABILITY_TRUANT] = _("Truant"),
+ [ABILITY_HUSTLE] = _("Hustle"),
+ [ABILITY_CUTE_CHARM] = _("Cute Charm"),
+ [ABILITY_PLUS] = _("Plus"),
+ [ABILITY_MINUS] = _("Minus"),
+ [ABILITY_FORECAST] = _("Forecast"),
+ [ABILITY_STICKY_HOLD] = _("Sticky Hold"),
+ [ABILITY_SHED_SKIN] = _("Shed Skin"),
+ [ABILITY_GUTS] = _("Guts"),
+ [ABILITY_MARVEL_SCALE] = _("Marvel Scale"),
+ [ABILITY_LIQUID_OOZE] = _("Liquid Ooze"),
+ [ABILITY_OVERGROW] = _("Overgrow"),
+ [ABILITY_BLAZE] = _("Blaze"),
+ [ABILITY_TORRENT] = _("Torrent"),
+ [ABILITY_SWARM] = _("Swarm"),
+ [ABILITY_ROCK_HEAD] = _("Rock Head"),
+ [ABILITY_DROUGHT] = _("Drought"),
+ [ABILITY_ARENA_TRAP] = _("Arena Trap"),
+ [ABILITY_VITAL_SPIRIT] = _("Vital Spirit"),
+ [ABILITY_WHITE_SMOKE] = _("White Smoke"),
+ [ABILITY_PURE_POWER] = _("Pure Power"),
+ [ABILITY_SHELL_ARMOR] = _("Shell Armor"),
+ [ABILITY_AIR_LOCK] = _("Air Lock"),
+ [ABILITY_TANGLED_FEET] = _("Tangled Feet"),
+ [ABILITY_MOTOR_DRIVE] = _("Motor Drive"),
+ [ABILITY_RIVALRY] = _("Rivalry"),
+ [ABILITY_STEADFAST] = _("Steadfast"),
+ [ABILITY_SNOW_CLOAK] = _("Snow Cloak"),
+ [ABILITY_GLUTTONY] = _("Gluttony"),
+ [ABILITY_ANGER_POINT] = _("Anger Point"),
+ [ABILITY_UNBURDEN] = _("Unburden"),
+ [ABILITY_HEATPROOF] = _("Heatproof"),
+ [ABILITY_SIMPLE] = _("Simple"),
+ [ABILITY_DRY_SKIN] = _("Dry Skin"),
+ [ABILITY_DOWNLOAD] = _("Download"),
+ [ABILITY_IRON_FIST] = _("Iron Fist"),
+ [ABILITY_POISON_HEAL] = _("Poison Heal"),
+ [ABILITY_ADAPTABILITY] = _("Adaptability"),
+ [ABILITY_SKILL_LINK] = _("Skill Link"),
+ [ABILITY_HYDRATION] = _("Hydration"),
+ [ABILITY_SOLAR_POWER] = _("Solar Power"),
+ [ABILITY_QUICK_FEET] = _("Quick Feet"),
+ [ABILITY_NORMALIZE] = _("Normalize"),
+ [ABILITY_SNIPER] = _("Sniper"),
+ [ABILITY_MAGIC_GUARD] = _("Magic Guard"),
+ [ABILITY_NO_GUARD] = _("No Guard"),
+ [ABILITY_STALL] = _("Stall"),
+ [ABILITY_TECHNICIAN] = _("Technician"),
+ [ABILITY_LEAF_GUARD] = _("Leaf Guard"),
+ [ABILITY_KLUTZ] = _("Klutz"),
+ [ABILITY_MOLD_BREAKER] = _("Mold Breaker"),
+ [ABILITY_SUPER_LUCK] = _("Super Luck"),
+ [ABILITY_AFTERMATH] = _("Aftermath"),
+ [ABILITY_ANTICIPATION] = _("Anticipation"),
+ [ABILITY_FOREWARN] = _("Forewarn"),
+ [ABILITY_UNAWARE] = _("Unaware"),
+ [ABILITY_TINTED_LENS] = _("Tinted Lens"),
+ [ABILITY_FILTER] = _("Filter"),
+ [ABILITY_SLOW_START] = _("Slow Start"),
+ [ABILITY_SCRAPPY] = _("Scrappy"),
+ [ABILITY_STORM_DRAIN] = _("Storm Drain"),
+ [ABILITY_ICE_BODY] = _("Ice Body"),
+ [ABILITY_SOLID_ROCK] = _("Solid Rock"),
+ [ABILITY_SNOW_WARNING] = _("Snow Warning"),
+ [ABILITY_HONEY_GATHER] = _("Honey Gather"),
+ [ABILITY_FRISK] = _("Frisk"),
+ [ABILITY_RECKLESS] = _("Reckless"),
+ [ABILITY_MULTITYPE] = _("Multitype"),
+ [ABILITY_FLOWER_GIFT] = _("Flower Gift"),
+ [ABILITY_BAD_DREAMS] = _("Bad Dreams"),
+ [ABILITY_PICKPOCKET] = _("Pickpocket"),
+ [ABILITY_SHEER_FORCE] = _("Sheer Force"),
+ [ABILITY_CONTRARY] = _("Contrary"),
+ [ABILITY_UNNERVE] = _("Unnerve"),
+ [ABILITY_DEFIANT] = _("Defiant"),
+ [ABILITY_DEFEATIST] = _("Defeatist"),
+ [ABILITY_CURSED_BODY] = _("Cursed Body"),
+ [ABILITY_HEALER] = _("Healer"),
+ [ABILITY_FRIEND_GUARD] = _("Friend Guard"),
+ [ABILITY_WEAK_ARMOR] = _("Weak Armor"),
+ [ABILITY_HEAVY_METAL] = _("Heavy Metal"),
+ [ABILITY_LIGHT_METAL] = _("Light Metal"),
+ [ABILITY_MULTISCALE] = _("Multiscale"),
+ [ABILITY_TOXIC_BOOST] = _("Toxic Boost"),
+ [ABILITY_FLARE_BOOST] = _("Flare Boost"),
+ [ABILITY_HARVEST] = _("Harvest"),
+ [ABILITY_TELEPATHY] = _("Telepathy"),
+ [ABILITY_MOODY] = _("Moody"),
+ [ABILITY_OVERCOAT] = _("Overcoat"),
+ [ABILITY_POISON_TOUCH] = _("Poison Touch"),
+ [ABILITY_REGENERATOR] = _("Regenerator"),
+ [ABILITY_BIG_PECKS] = _("Big Pecks"),
+ [ABILITY_SAND_RUSH] = _("Sand Rush"),
+ [ABILITY_WONDER_SKIN] = _("Wonder Skin"),
+ [ABILITY_ANALYTIC] = _("Analytic"),
+ [ABILITY_ILLUSION] = _("Illusion"),
+ [ABILITY_IMPOSTER] = _("Imposter"),
+ [ABILITY_INFILTRATOR] = _("Infiltrator"),
+ [ABILITY_MUMMY] = _("Mummy"),
+ [ABILITY_MOXIE] = _("Moxie"),
+ [ABILITY_JUSTIFIED] = _("Justified"),
+ [ABILITY_RATTLED] = _("Rattled"),
+ [ABILITY_MAGIC_BOUNCE] = _("Magic Bounce"),
+ [ABILITY_SAP_SIPPER] = _("Sap Sipper"),
+ [ABILITY_PRANKSTER] = _("Prankster"),
+ [ABILITY_SAND_FORCE] = _("Sand Force"),
+ [ABILITY_IRON_BARBS] = _("Iron Barbs"),
+ [ABILITY_ZEN_MODE] = _("Zen Mode"),
+ [ABILITY_VICTORY_STAR] = _("Victory Star"),
+ [ABILITY_TURBOBLAZE] = _("Turboblaze"),
+ [ABILITY_TERAVOLT] = _("Teravolt"),
+ [ABILITY_AROMA_VEIL] = _("Aroma Veil"),
+ [ABILITY_FLOWER_VEIL] = _("Flower Veil"),
+ [ABILITY_CHEEK_POUCH] = _("Cheek Pouch"),
+ [ABILITY_PROTEAN] = _("Protean"),
+ [ABILITY_FUR_COAT] = _("Fur Coat"),
+ [ABILITY_MAGICIAN] = _("Magician"),
+ [ABILITY_BULLETPROOF] = _("Bulletproof"),
+ [ABILITY_COMPETITIVE] = _("Competitive"),
+ [ABILITY_STRONG_JAW] = _("Strong Jaw"),
+ [ABILITY_REFRIGERATE] = _("Refrigerate"),
+ [ABILITY_SWEET_VEIL] = _("Sweet Veil"),
+ [ABILITY_STANCE_CHANGE] = _("Stance Change"),
+ [ABILITY_GALE_WINGS] = _("Gale Wings"),
+ [ABILITY_MEGA_LAUNCHER] = _("Mega Launcher"),
+ [ABILITY_GRASS_PELT] = _("Grass Pelt"),
+ [ABILITY_SYMBIOSIS] = _("Symbiosis"),
+ [ABILITY_TOUGH_CLAWS] = _("Tough Claws"),
+ [ABILITY_PIXILATE] = _("Pixilate"),
+ [ABILITY_GOOEY] = _("Gooey"),
+ [ABILITY_AERILATE] = _("Aerilate"),
+ [ABILITY_PARENTAL_BOND] = _("Parental Bond"),
+ [ABILITY_DARK_AURA] = _("Dark Aura"),
+ [ABILITY_FAIRY_AURA] = _("Fairy Aura"),
+ [ABILITY_AURA_BREAK] = _("Aura Break"),
+ [ABILITY_PRIMORDIAL_SEA] = _("Primordial Sea"),
+ [ABILITY_DESOLATE_LAND] = _("Desolate Land"),
+ [ABILITY_DELTA_STREAM] = _("Delta Stream"),
+ [ABILITY_STAMINA] = _("Stamina"),
+ [ABILITY_WIMP_OUT] = _("Wimp Out"),
+ [ABILITY_EMERGENCY_EXIT] = _("Emergency Exit"),
+ [ABILITY_WATER_COMPACTION] = _("Water Compaction"),
+ [ABILITY_MERCILESS] = _("Merciless"),
+ [ABILITY_SHIELDS_DOWN] = _("Shields Down"),
+ [ABILITY_STAKEOUT] = _("Stakeout"),
+ [ABILITY_WATER_BUBBLE] = _("Water Bubble"),
+ [ABILITY_STEELWORKER] = _("Steelworker"),
+ [ABILITY_BERSERK] = _("Berserk"),
+ [ABILITY_SLUSH_RUSH] = _("Slush Rush"),
+ [ABILITY_LONG_REACH] = _("Long Reach"),
+ [ABILITY_LIQUID_VOICE] = _("Liquid Voice"),
+ [ABILITY_TRIAGE] = _("Triage"),
+ [ABILITY_GALVANIZE] = _("Galvanize"),
+ [ABILITY_SURGE_SURFER] = _("Surge Surfer"),
+ [ABILITY_SCHOOLING] = _("Schooling"),
+ [ABILITY_DISGUISE] = _("Disguise"),
+ [ABILITY_BATTLE_BOND] = _("Battle Bond"),
+ [ABILITY_POWER_CONSTRUCT] = _("Power Construct"),
+ [ABILITY_CORROSION] = _("Corrosion"),
+ [ABILITY_COMATOSE] = _("Comatose"),
+ [ABILITY_QUEENLY_MAJESTY] = _("Queenly Majesty"),
+ [ABILITY_INNARDS_OUT] = _("Innards Out"),
+ [ABILITY_DANCER] = _("Dancer"),
+ [ABILITY_BATTERY] = _("Battery"),
+ [ABILITY_FLUFFY] = _("Fluffy"),
+ [ABILITY_DAZZLING] = _("Dazzling"),
+ [ABILITY_SOUL_HEART] = _("Soul-Heart"),
+ [ABILITY_TANGLING_HAIR] = _("Tangling Hair"),
+ [ABILITY_RECEIVER] = _("Receiver"),
+ [ABILITY_POWER_OF_ALCHEMY] = _("Power Of Alchemy"),
+ [ABILITY_BEAST_BOOST] = _("Beast Boost"),
+ [ABILITY_RKS_SYSTEM] = _("RKS System"),
+ [ABILITY_ELECTRIC_SURGE] = _("Electric Surge"),
+ [ABILITY_PSYCHIC_SURGE] = _("Psychic Surge"),
+ [ABILITY_MISTY_SURGE] = _("Misty Surge"),
+ [ABILITY_GRASSY_SURGE] = _("Grassy Surge"),
+ [ABILITY_FULL_METAL_BODY] = _("Full Metal Body"),
+ [ABILITY_SHADOW_SHIELD] = _("Shadow Shield"),
+ [ABILITY_PRISM_ARMOR] = _("Prism Armor"),
+ [ABILITY_NEUROFORCE] = _("Neuroforce"),
+ [ABILITY_INTREPID_SWORD] = _("Intrepid Sword"),
+ [ABILITY_DAUNTLESS_SHIELD] = _("Dauntless Shield"),
+ [ABILITY_LIBERO] = _("Libero"),
+ [ABILITY_BALL_FETCH] = _("Ball Fetch"),
+ [ABILITY_COTTON_DOWN] = _("Cotton Down"),
+ [ABILITY_PROPELLER_TAIL] = _("Propeller Tail"),
+ [ABILITY_MIRROR_ARMOR] = _("Mirror Armor"),
+ [ABILITY_GULP_MISSILE] = _("Gulp Missile"),
+ [ABILITY_STALWART] = _("Stalwart"),
+ [ABILITY_STEAM_ENGINE] = _("Steam Engine"),
+ [ABILITY_PUNK_ROCK] = _("Punk Rock"),
+ [ABILITY_SAND_SPIT] = _("Sand Spit"),
+ [ABILITY_ICE_SCALES] = _("Ice Scales"),
+ [ABILITY_RIPEN] = _("Ripen"),
+ [ABILITY_ICE_FACE] = _("Ice Face"),
+ [ABILITY_POWER_SPOT] = _("Power Spot"),
+ [ABILITY_MIMICRY] = _("Mimicry"),
+ [ABILITY_SCREEN_CLEANER] = _("Screen Cleaner"),
+ [ABILITY_STEELY_SPIRIT] = _("Steely Spirit"),
+ [ABILITY_PERISH_BODY] = _("Perish Body"),
+ [ABILITY_WANDERING_SPIRIT] = _("Wandering Spirit"),
+ [ABILITY_GORILLA_TACTICS] = _("Gorilla Tactics"),
+ [ABILITY_NEUTRALIZING_GAS] = _("Neutralizing Gas"),
+ [ABILITY_PASTEL_VEIL] = _("Pastel Veil"),
+ [ABILITY_HUNGER_SWITCH] = _("Hunger Switch"),
+ [ABILITY_QUICK_DRAW] = _("Quick Draw"),
+ [ABILITY_UNSEEN_FIST] = _("Unseen Fist"),
+ [ABILITY_CURIOUS_MEDICINE] = _("Curious Medicine"),
+ [ABILITY_TRANSISTOR] = _("Transistor"),
+ [ABILITY_DRAGONS_MAW] = _("Dragon's Maw"),
+ [ABILITY_CHILLING_NEIGH] = _("Chilling Neigh"),
+ [ABILITY_GRIM_NEIGH] = _("Grim Neigh"),
+ [ABILITY_AS_ONE_ICE_RIDER] = _("As One"),
+ [ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"),
};
+#else // 12 characters
+const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
+{
+ [ABILITY_NONE] = _("-------"),
+ [ABILITY_STENCH] = _("Stench"),
+ [ABILITY_DRIZZLE] = _("Drizzle"),
+ [ABILITY_SPEED_BOOST] = _("Speed Boost"),
+ [ABILITY_BATTLE_ARMOR] = _("Battle Armor"),
+ [ABILITY_STURDY] = _("Sturdy"),
+ [ABILITY_DAMP] = _("Damp"),
+ [ABILITY_LIMBER] = _("Limber"),
+ [ABILITY_SAND_VEIL] = _("Sand Veil"),
+ [ABILITY_STATIC] = _("Static"),
+ [ABILITY_VOLT_ABSORB] = _("Volt Absorb"),
+ [ABILITY_WATER_ABSORB] = _("Water Absorb"),
+ [ABILITY_OBLIVIOUS] = _("Oblivious"),
+ [ABILITY_CLOUD_NINE] = _("Cloud Nine"),
+ [ABILITY_COMPOUND_EYES] = _("CompoundEyes"),
+ [ABILITY_INSOMNIA] = _("Insomnia"),
+ [ABILITY_COLOR_CHANGE] = _("Color Change"),
+ [ABILITY_IMMUNITY] = _("Immunity"),
+ [ABILITY_FLASH_FIRE] = _("Flash Fire"),
+ [ABILITY_SHIELD_DUST] = _("Shield Dust"),
+ [ABILITY_OWN_TEMPO] = _("Own Tempo"),
+ [ABILITY_SUCTION_CUPS] = _("Suction Cups"),
+ [ABILITY_INTIMIDATE] = _("Intimidate"),
+ [ABILITY_SHADOW_TAG] = _("Shadow Tag"),
+ [ABILITY_ROUGH_SKIN] = _("Rough Skin"),
+ [ABILITY_WONDER_GUARD] = _("Wonder Guard"),
+ [ABILITY_LEVITATE] = _("Levitate"),
+ [ABILITY_EFFECT_SPORE] = _("Effect Spore"),
+ [ABILITY_SYNCHRONIZE] = _("Synchronize"),
+ [ABILITY_CLEAR_BODY] = _("Clear Body"),
+ [ABILITY_NATURAL_CURE] = _("Natural Cure"),
+ [ABILITY_LIGHTNING_ROD] = _("LightningRod"),
+ [ABILITY_SERENE_GRACE] = _("Serene Grace"),
+ [ABILITY_SWIFT_SWIM] = _("Swift Swim"),
+ [ABILITY_CHLOROPHYLL] = _("Chlorophyll"),
+ [ABILITY_ILLUMINATE] = _("Illuminate"),
+ [ABILITY_TRACE] = _("Trace"),
+ [ABILITY_HUGE_POWER] = _("Huge Power"),
+ [ABILITY_POISON_POINT] = _("Poison Point"),
+ [ABILITY_INNER_FOCUS] = _("Inner Focus"),
+ [ABILITY_MAGMA_ARMOR] = _("Magma Armor"),
+ [ABILITY_WATER_VEIL] = _("Water Veil"),
+ [ABILITY_MAGNET_PULL] = _("Magnet Pull"),
+ [ABILITY_SOUNDPROOF] = _("Soundproof"),
+ [ABILITY_RAIN_DISH] = _("Rain Dish"),
+ [ABILITY_SAND_STREAM] = _("Sand Stream"),
+ [ABILITY_PRESSURE] = _("Pressure"),
+ [ABILITY_THICK_FAT] = _("Thick Fat"),
+ [ABILITY_EARLY_BIRD] = _("Early Bird"),
+ [ABILITY_FLAME_BODY] = _("Flame Body"),
+ [ABILITY_RUN_AWAY] = _("Run Away"),
+ [ABILITY_KEEN_EYE] = _("Keen Eye"),
+ [ABILITY_HYPER_CUTTER] = _("Hyper Cutter"),
+ [ABILITY_PICKUP] = _("Pickup"),
+ [ABILITY_TRUANT] = _("Truant"),
+ [ABILITY_HUSTLE] = _("Hustle"),
+ [ABILITY_CUTE_CHARM] = _("Cute Charm"),
+ [ABILITY_PLUS] = _("Plus"),
+ [ABILITY_MINUS] = _("Minus"),
+ [ABILITY_FORECAST] = _("Forecast"),
+ [ABILITY_STICKY_HOLD] = _("Sticky Hold"),
+ [ABILITY_SHED_SKIN] = _("Shed Skin"),
+ [ABILITY_GUTS] = _("Guts"),
+ [ABILITY_MARVEL_SCALE] = _("Marvel Scale"),
+ [ABILITY_LIQUID_OOZE] = _("Liquid Ooze"),
+ [ABILITY_OVERGROW] = _("Overgrow"),
+ [ABILITY_BLAZE] = _("Blaze"),
+ [ABILITY_TORRENT] = _("Torrent"),
+ [ABILITY_SWARM] = _("Swarm"),
+ [ABILITY_ROCK_HEAD] = _("Rock Head"),
+ [ABILITY_DROUGHT] = _("Drought"),
+ [ABILITY_ARENA_TRAP] = _("Arena Trap"),
+ [ABILITY_VITAL_SPIRIT] = _("Vital Spirit"),
+ [ABILITY_WHITE_SMOKE] = _("White Smoke"),
+ [ABILITY_PURE_POWER] = _("Pure Power"),
+ [ABILITY_SHELL_ARMOR] = _("Shell Armor"),
+ [ABILITY_AIR_LOCK] = _("Air Lock"),
+ [ABILITY_TANGLED_FEET] = _("Tangled Feet"),
+ [ABILITY_MOTOR_DRIVE] = _("Motor Drive"),
+ [ABILITY_RIVALRY] = _("Rivalry"),
+ [ABILITY_STEADFAST] = _("Steadfast"),
+ [ABILITY_SNOW_CLOAK] = _("Snow Cloak"),
+ [ABILITY_GLUTTONY] = _("Gluttony"),
+ [ABILITY_ANGER_POINT] = _("Anger Point"),
+ [ABILITY_UNBURDEN] = _("Unburden"),
+ [ABILITY_HEATPROOF] = _("Heatproof"),
+ [ABILITY_SIMPLE] = _("Simple"),
+ [ABILITY_DRY_SKIN] = _("Dry Skin"),
+ [ABILITY_DOWNLOAD] = _("Download"),
+ [ABILITY_IRON_FIST] = _("Iron Fist"),
+ [ABILITY_POISON_HEAL] = _("Poison Heal"),
+ [ABILITY_ADAPTABILITY] = _("Adaptability"),
+ [ABILITY_SKILL_LINK] = _("Skill Link"),
+ [ABILITY_HYDRATION] = _("Hydration"),
+ [ABILITY_SOLAR_POWER] = _("Solar Power"),
+ [ABILITY_QUICK_FEET] = _("Quick Feet"),
+ [ABILITY_NORMALIZE] = _("Normalize"),
+ [ABILITY_SNIPER] = _("Sniper"),
+ [ABILITY_MAGIC_GUARD] = _("Magic Guard"),
+ [ABILITY_NO_GUARD] = _("No Guard"),
+ [ABILITY_STALL] = _("Stall"),
+ [ABILITY_TECHNICIAN] = _("Technician"),
+ [ABILITY_LEAF_GUARD] = _("Leaf Guard"),
+ [ABILITY_KLUTZ] = _("Klutz"),
+ [ABILITY_MOLD_BREAKER] = _("Mold Breaker"),
+ [ABILITY_SUPER_LUCK] = _("Super Luck"),
+ [ABILITY_AFTERMATH] = _("Aftermath"),
+ [ABILITY_ANTICIPATION] = _("Anticipation"),
+ [ABILITY_FOREWARN] = _("Forewarn"),
+ [ABILITY_UNAWARE] = _("Unaware"),
+ [ABILITY_TINTED_LENS] = _("Tinted Lens"),
+ [ABILITY_FILTER] = _("Filter"),
+ [ABILITY_SLOW_START] = _("Slow Start"),
+ [ABILITY_SCRAPPY] = _("Scrappy"),
+ [ABILITY_STORM_DRAIN] = _("Storm Drain"),
+ [ABILITY_ICE_BODY] = _("Ice Body"),
+ [ABILITY_SOLID_ROCK] = _("Solid Rock"),
+ [ABILITY_SNOW_WARNING] = _("Snow Warning"),
+ [ABILITY_HONEY_GATHER] = _("Honey Gather"),
+ [ABILITY_FRISK] = _("Frisk"),
+ [ABILITY_RECKLESS] = _("Reckless"),
+ [ABILITY_MULTITYPE] = _("Multitype"),
+ [ABILITY_FLOWER_GIFT] = _("Flower Gift"),
+ [ABILITY_BAD_DREAMS] = _("Bad Dreams"),
+ [ABILITY_PICKPOCKET] = _("Pickpocket"),
+ [ABILITY_SHEER_FORCE] = _("Sheer Force"),
+ [ABILITY_CONTRARY] = _("Contrary"),
+ [ABILITY_UNNERVE] = _("Unnerve"),
+ [ABILITY_DEFIANT] = _("Defiant"),
+ [ABILITY_DEFEATIST] = _("Defeatist"),
+ [ABILITY_CURSED_BODY] = _("Cursed Body"),
+ [ABILITY_HEALER] = _("Healer"),
+ [ABILITY_FRIEND_GUARD] = _("Friend Guard"),
+ [ABILITY_WEAK_ARMOR] = _("Weak Armor"),
+ [ABILITY_HEAVY_METAL] = _("Heavy Metal"),
+ [ABILITY_LIGHT_METAL] = _("Light Metal"),
+ [ABILITY_MULTISCALE] = _("Multiscale"),
+ [ABILITY_TOXIC_BOOST] = _("Toxic Boost"),
+ [ABILITY_FLARE_BOOST] = _("Flare Boost"),
+ [ABILITY_HARVEST] = _("Harvest"),
+ [ABILITY_TELEPATHY] = _("Telepathy"),
+ [ABILITY_MOODY] = _("Moody"),
+ [ABILITY_OVERCOAT] = _("Overcoat"),
+ [ABILITY_POISON_TOUCH] = _("Poison Touch"),
+ [ABILITY_REGENERATOR] = _("Regenerator"),
+ [ABILITY_BIG_PECKS] = _("Big Pecks"),
+ [ABILITY_SAND_RUSH] = _("Sand Rush"),
+ [ABILITY_WONDER_SKIN] = _("Wonder Skin"),
+ [ABILITY_ANALYTIC] = _("Analytic"),
+ [ABILITY_ILLUSION] = _("Illusion"),
+ [ABILITY_IMPOSTER] = _("Imposter"),
+ [ABILITY_INFILTRATOR] = _("Infiltrator"),
+ [ABILITY_MUMMY] = _("Mummy"),
+ [ABILITY_MOXIE] = _("Moxie"),
+ [ABILITY_JUSTIFIED] = _("Justified"),
+ [ABILITY_RATTLED] = _("Rattled"),
+ [ABILITY_MAGIC_BOUNCE] = _("Magic Bounce"),
+ [ABILITY_SAP_SIPPER] = _("Sap Sipper"),
+ [ABILITY_PRANKSTER] = _("Prankster"),
+ [ABILITY_SAND_FORCE] = _("Sand Force"),
+ [ABILITY_IRON_BARBS] = _("Iron Barbs"),
+ [ABILITY_ZEN_MODE] = _("Zen Mode"),
+ [ABILITY_VICTORY_STAR] = _("Victory Star"),
+ [ABILITY_TURBOBLAZE] = _("Turboblaze"),
+ [ABILITY_TERAVOLT] = _("Teravolt"),
+ [ABILITY_AROMA_VEIL] = _("Aroma Veil"),
+ [ABILITY_FLOWER_VEIL] = _("Flower Veil"),
+ [ABILITY_CHEEK_POUCH] = _("Cheek Pouch"),
+ [ABILITY_PROTEAN] = _("Protean"),
+ [ABILITY_FUR_COAT] = _("Fur Coat"),
+ [ABILITY_MAGICIAN] = _("Magician"),
+ [ABILITY_BULLETPROOF] = _("Bulletproof"),
+ [ABILITY_COMPETITIVE] = _("Competitive"),
+ [ABILITY_STRONG_JAW] = _("Strong Jaw"),
+ [ABILITY_REFRIGERATE] = _("Refrigerate"),
+ [ABILITY_SWEET_VEIL] = _("Sweet Veil"),
+ [ABILITY_STANCE_CHANGE] = _("StanceChange"),
+ [ABILITY_GALE_WINGS] = _("Gale Wings"),
+ [ABILITY_MEGA_LAUNCHER] = _("MegaLauncher"),
+ [ABILITY_GRASS_PELT] = _("Grass Pelt"),
+ [ABILITY_SYMBIOSIS] = _("Symbiosis"),
+ [ABILITY_TOUGH_CLAWS] = _("Tough Claws"),
+ [ABILITY_PIXILATE] = _("Pixilate"),
+ [ABILITY_GOOEY] = _("Gooey"),
+ [ABILITY_AERILATE] = _("Aerilate"),
+ [ABILITY_PARENTAL_BOND] = _("ParentalBond"),
+ [ABILITY_DARK_AURA] = _("Dark Aura"),
+ [ABILITY_FAIRY_AURA] = _("Fairy Aura"),
+ [ABILITY_AURA_BREAK] = _("Aura Break"),
+ [ABILITY_PRIMORDIAL_SEA] = _("PrimrdialSea"),
+ [ABILITY_DESOLATE_LAND] = _("DesolateLand"),
+ [ABILITY_DELTA_STREAM] = _("Delta Stream"),
+ [ABILITY_STAMINA] = _("Stamina"),
+ [ABILITY_WIMP_OUT] = _("Wimp Out"),
+ [ABILITY_EMERGENCY_EXIT] = _("EmergncyExit"),
+ [ABILITY_WATER_COMPACTION] = _("WtrCmpaction"),
+ [ABILITY_MERCILESS] = _("Merciless"),
+ [ABILITY_SHIELDS_DOWN] = _("Shields Down"),
+ [ABILITY_STAKEOUT] = _("Stakeout"),
+ [ABILITY_WATER_BUBBLE] = _("Water Bubble"),
+ [ABILITY_STEELWORKER] = _("Steelworker"),
+ [ABILITY_BERSERK] = _("Berserk"),
+ [ABILITY_SLUSH_RUSH] = _("Slush Rush"),
+ [ABILITY_LONG_REACH] = _("Long Reach"),
+ [ABILITY_LIQUID_VOICE] = _("Liquid Voice"),
+ [ABILITY_TRIAGE] = _("Triage"),
+ [ABILITY_GALVANIZE] = _("Galvanize"),
+ [ABILITY_SURGE_SURFER] = _("Surge Surfer"),
+ [ABILITY_SCHOOLING] = _("Schooling"),
+ [ABILITY_DISGUISE] = _("Disguise"),
+ [ABILITY_BATTLE_BOND] = _("Battle Bond"),
+ [ABILITY_POWER_CONSTRUCT] = _("PwrConstruct"),
+ [ABILITY_CORROSION] = _("Corrosion"),
+ [ABILITY_COMATOSE] = _("Comatose"),
+ [ABILITY_QUEENLY_MAJESTY] = _("QueenlyMjsty"),
+ [ABILITY_INNARDS_OUT] = _("Innards Out"),
+ [ABILITY_DANCER] = _("Dancer"),
+ [ABILITY_BATTERY] = _("Battery"),
+ [ABILITY_FLUFFY] = _("Fluffy"),
+ [ABILITY_DAZZLING] = _("Dazzling"),
+ [ABILITY_SOUL_HEART] = _("Soul-Heart"),
+ [ABILITY_TANGLING_HAIR] = _("TanglingHair"),
+ [ABILITY_RECEIVER] = _("Receiver"),
+ [ABILITY_POWER_OF_ALCHEMY] = _("PwrOfAlchemy"),
+ [ABILITY_BEAST_BOOST] = _("Beast Boost"),
+ [ABILITY_RKS_SYSTEM] = _("RKS System"),
+ [ABILITY_ELECTRIC_SURGE] = _("ElectrcSurge"),
+ [ABILITY_PSYCHIC_SURGE] = _("PsychicSurge"),
+ [ABILITY_MISTY_SURGE] = _("Misty Surge"),
+ [ABILITY_GRASSY_SURGE] = _("Grassy Surge"),
+ [ABILITY_FULL_METAL_BODY] = _("FullMetalBdy"),
+ [ABILITY_SHADOW_SHIELD] = _("ShadowShield"),
+ [ABILITY_PRISM_ARMOR] = _("Prism Armor"),
+ [ABILITY_NEUROFORCE] = _("Neuroforce"),
+ [ABILITY_INTREPID_SWORD] = _("IntrepidSwrd"),
+ [ABILITY_DAUNTLESS_SHIELD] = _("DauntlssShld"),
+ [ABILITY_LIBERO] = _("Libero"),
+ [ABILITY_BALL_FETCH] = _("Ball Fetch"),
+ [ABILITY_COTTON_DOWN] = _("Cotton Down"),
+ [ABILITY_PROPELLER_TAIL] = _("PropellrTail"),
+ [ABILITY_MIRROR_ARMOR] = _("Mirror Armor"),
+ [ABILITY_GULP_MISSILE] = _("Gulp Missile"),
+ [ABILITY_STALWART] = _("Stalwart"),
+ [ABILITY_STEAM_ENGINE] = _("Steam Engine"),
+ [ABILITY_PUNK_ROCK] = _("Punk Rock"),
+ [ABILITY_SAND_SPIT] = _("Sand Spit"),
+ [ABILITY_ICE_SCALES] = _("Ice Scales"),
+ [ABILITY_RIPEN] = _("Ripen"),
+ [ABILITY_ICE_FACE] = _("Ice Face"),
+ [ABILITY_POWER_SPOT] = _("Power Spot"),
+ [ABILITY_MIMICRY] = _("Mimicry"),
+ [ABILITY_SCREEN_CLEANER] = _("ScreenCleanr"),
+ [ABILITY_STEELY_SPIRIT] = _("SteelySpirit"),
+ [ABILITY_PERISH_BODY] = _("Perish Body"),
+ [ABILITY_WANDERING_SPIRIT] = _("WandrngSprit"),
+ [ABILITY_GORILLA_TACTICS] = _("GorillaTacti"),
+ [ABILITY_NEUTRALIZING_GAS] = _("NeutrlzngGas"),
+ [ABILITY_PASTEL_VEIL] = _("Pastel Veil"),
+ [ABILITY_HUNGER_SWITCH] = _("HungerSwitch"),
+ [ABILITY_QUICK_DRAW] = _("Quick Draw"),
+ [ABILITY_UNSEEN_FIST] = _("Unseen Fist"),
+ [ABILITY_CURIOUS_MEDICINE] = _("CuriusMedicn"),
+ [ABILITY_TRANSISTOR] = _("Transistor"),
+ [ABILITY_DRAGONS_MAW] = _("Dragon's Maw"),
+ [ABILITY_CHILLING_NEIGH] = _("ChillngNeigh"),
+ [ABILITY_GRIM_NEIGH] = _("Grim Neigh"),
+ [ABILITY_AS_ONE_ICE_RIDER] = _("As One"),
+ [ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"),
+};
+#endif
const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] =
{
@@ -237,6 +879,196 @@ const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] =
[ABILITY_WHITE_SMOKE] = sWhiteSmokeDescription,
[ABILITY_PURE_POWER] = sPurePowerDescription,
[ABILITY_SHELL_ARMOR] = sShellArmorDescription,
-// [ABILITY_CACOPHONY] = sCacophonyDescription,
[ABILITY_AIR_LOCK] = sAirLockDescription,
+ [ABILITY_TANGLED_FEET] = sTangledFeetDescription,
+ [ABILITY_MOTOR_DRIVE] = sMotorDriveDescription,
+ [ABILITY_RIVALRY] = sRivalryDescription,
+ [ABILITY_STEADFAST] = sSteadfastDescription,
+ [ABILITY_SNOW_CLOAK] = sSnowCloakDescription,
+ [ABILITY_GLUTTONY] = sGluttonyDescription,
+ [ABILITY_ANGER_POINT] = sAngerPointDescription,
+ [ABILITY_UNBURDEN] = sUnburdenDescription,
+ [ABILITY_HEATPROOF] = sHeatproofDescription,
+ [ABILITY_SIMPLE] = sSimpleDescription,
+ [ABILITY_DRY_SKIN] = sDrySkinDescription,
+ [ABILITY_DOWNLOAD] = sDownloadDescription,
+ [ABILITY_IRON_FIST] = sIronFistDescription,
+ [ABILITY_POISON_HEAL] = sPoisonHealDescription,
+ [ABILITY_ADAPTABILITY] = sAdaptabilityDescription,
+ [ABILITY_SKILL_LINK] = sSkillLinkDescription,
+ [ABILITY_HYDRATION] = sHydrationDescription,
+ [ABILITY_SOLAR_POWER] = sSolarPowerDescription,
+ [ABILITY_QUICK_FEET] = sQuickFeetDescription,
+ [ABILITY_NORMALIZE] = sNormalizeDescription,
+ [ABILITY_SNIPER] = sSniperDescription,
+ [ABILITY_MAGIC_GUARD] = sMagicGuardDescription,
+ [ABILITY_NO_GUARD] = sNoGuardDescription,
+ [ABILITY_STALL] = sStallDescription,
+ [ABILITY_TECHNICIAN] = sTechnicianDescription,
+ [ABILITY_LEAF_GUARD] = sLeafGuardDescription,
+ [ABILITY_KLUTZ] = sKlutzDescription,
+ [ABILITY_MOLD_BREAKER] = sMoldBreakerDescription,
+ [ABILITY_SUPER_LUCK] = sSuperLuckDescription,
+ [ABILITY_AFTERMATH] = sAftermathDescription,
+ [ABILITY_ANTICIPATION] = sAnticipationDescription,
+ [ABILITY_FOREWARN] = sForewarnDescription,
+ [ABILITY_UNAWARE] = sUnawareDescription,
+ [ABILITY_TINTED_LENS] = sTintedLensDescription,
+ [ABILITY_FILTER] = sFilterDescription,
+ [ABILITY_SLOW_START] = sSlowStartDescription,
+ [ABILITY_SCRAPPY] = sScrappyDescription,
+ [ABILITY_STORM_DRAIN] = sStormDrainDescription,
+ [ABILITY_ICE_BODY] = sIceBodyDescription,
+ [ABILITY_SOLID_ROCK] = sFilterDescription,
+ [ABILITY_SNOW_WARNING] = sSnowWarningDescription,
+ [ABILITY_HONEY_GATHER] = sHoneyGatherDescription,
+ [ABILITY_FRISK] = sFriskDescription,
+ [ABILITY_RECKLESS] = sRecklessDescription,
+ [ABILITY_MULTITYPE] = sMultitypeDescription,
+ [ABILITY_FLOWER_GIFT] = sFlowerGiftDescription,
+ [ABILITY_BAD_DREAMS] = sBadDreamsDescription,
+ [ABILITY_PICKPOCKET] = sPickpocketDescription,
+ [ABILITY_SHEER_FORCE] = sSheerForceDescription,
+ [ABILITY_CONTRARY] = sContraryDescription,
+ [ABILITY_UNNERVE] = sUnnerveDescription,
+ [ABILITY_DEFIANT] = sDefiantDescription,
+ [ABILITY_DEFEATIST] = sDefeatistDescription,
+ [ABILITY_CURSED_BODY] = sCursedBodyDescription,
+ [ABILITY_HEALER] = sHealerDescription,
+ [ABILITY_FRIEND_GUARD] = sFriendGuardDescription,
+ [ABILITY_WEAK_ARMOR] = sWeakArmorDescription,
+ [ABILITY_HEAVY_METAL] = sHeavyMetalDescription,
+ [ABILITY_LIGHT_METAL] = sLightMetalDescription,
+ [ABILITY_MULTISCALE] = sMultiscaleDescription,
+ [ABILITY_TOXIC_BOOST] = sToxicBoostDescription,
+ [ABILITY_FLARE_BOOST] = sFlareBoostDescription,
+ [ABILITY_HARVEST] = sHarvestDescription,
+ [ABILITY_TELEPATHY] = sTelepathyDescription,
+ [ABILITY_MOODY] = sMoodyDescription,
+ [ABILITY_OVERCOAT] = sOvercoatDescription,
+ [ABILITY_POISON_TOUCH] = sPoisonPointDescription,
+ [ABILITY_REGENERATOR] = sNaturalCureDescription,
+ [ABILITY_BIG_PECKS] = sBigPecksDescription,
+ [ABILITY_SAND_RUSH] = sSandRushDescription,
+ [ABILITY_WONDER_SKIN] = sWonderSkinDescription,
+ [ABILITY_ANALYTIC] = sAnalyticDescription,
+ [ABILITY_ILLUSION] = sIllusionDescription,
+ [ABILITY_IMPOSTER] = sImposterDescription,
+ [ABILITY_INFILTRATOR] = sInfiltratorDescription,
+ [ABILITY_MUMMY] = sMummyDescription,
+ [ABILITY_MOXIE] = sMoxieDescription,
+ [ABILITY_JUSTIFIED] = sJustifiedDescription,
+ [ABILITY_RATTLED] = sRattledDescription,
+ [ABILITY_MAGIC_BOUNCE] = sMagicBounceDescription,
+ [ABILITY_SAP_SIPPER] = sSapSipperDescription,
+ [ABILITY_PRANKSTER] = sPranksterDescription,
+ [ABILITY_SAND_FORCE] = sSandForceDescription,
+ [ABILITY_IRON_BARBS] = sRoughSkinDescription,
+ [ABILITY_ZEN_MODE] = sZenModeDescription,
+ [ABILITY_VICTORY_STAR] = sVictoryStarDescription,
+ [ABILITY_TURBOBLAZE] = sMoldBreakerDescription,
+ [ABILITY_TERAVOLT] = sMoldBreakerDescription,
+ [ABILITY_AROMA_VEIL] = sAromaVeilDescription,
+ [ABILITY_FLOWER_VEIL] = sFlowerVeilDescription,
+ [ABILITY_CHEEK_POUCH] = sCheekPouchDescription,
+ [ABILITY_PROTEAN] = sProteanDescription,
+ [ABILITY_FUR_COAT] = sFurCoatDescription,
+ [ABILITY_MAGICIAN] = sPickpocketDescription,
+ [ABILITY_BULLETPROOF] = sBulletproofDescription,
+ [ABILITY_COMPETITIVE] = sCompetitiveDescription,
+ [ABILITY_STRONG_JAW] = sStrongJawDescription,
+ [ABILITY_REFRIGERATE] = sRefrigerateDescription,
+ [ABILITY_SWEET_VEIL] = sSweetVeilDescription,
+ [ABILITY_STANCE_CHANGE] = sStanceChangeDescription,
+ [ABILITY_GALE_WINGS] = sGaleWingsDescription,
+ [ABILITY_MEGA_LAUNCHER] = sMegaLauncherDescription,
+ [ABILITY_GRASS_PELT] = sGrassPeltDescription,
+ [ABILITY_SYMBIOSIS] = sSymbiosisDescription,
+ [ABILITY_TOUGH_CLAWS] = sToughClawsDescription,
+ [ABILITY_PIXILATE] = sPixilateDescription,
+ [ABILITY_GOOEY] = sGooeyDescription,
+ [ABILITY_AERILATE] = sAerilateDescription,
+ [ABILITY_PARENTAL_BOND] = sParentalBondDescription,
+ [ABILITY_DARK_AURA] = sDarkAuraDescription,
+ [ABILITY_FAIRY_AURA] = sFairyAuraDescription,
+ [ABILITY_AURA_BREAK] = sAuraBreakDescription,
+ [ABILITY_PRIMORDIAL_SEA] = sPrimordialSeaDescription,
+ [ABILITY_DESOLATE_LAND] = sDesolateLandDescription,
+ [ABILITY_DELTA_STREAM] = sDeltaStreamDescription,
+ [ABILITY_STAMINA] = sStaminaDescription,
+ [ABILITY_WIMP_OUT] = sWimpOutDescription,
+ [ABILITY_EMERGENCY_EXIT] = sWimpOutDescription,
+ [ABILITY_WATER_COMPACTION] = sWaterCompactionDescription,
+ [ABILITY_MERCILESS] = sMercilessDescription,
+ [ABILITY_SHIELDS_DOWN] = sShieldsDownDescription,
+ [ABILITY_STAKEOUT] = sStakeoutDescription,
+ [ABILITY_WATER_BUBBLE] = sWaterBubbleDescription,
+ [ABILITY_STEELWORKER] = sSteelworkerDescription,
+ [ABILITY_BERSERK] = sBerserkDescription,
+ [ABILITY_SLUSH_RUSH] = sSlushRushDescription,
+ [ABILITY_LONG_REACH] = sLongReachDescription,
+ [ABILITY_LIQUID_VOICE] = sLiquidVoiceDescription,
+ [ABILITY_TRIAGE] = sTriageDescription,
+ [ABILITY_GALVANIZE] = sGalvanizeDescription,
+ [ABILITY_SURGE_SURFER] = sSurgeSurferDescription,
+ [ABILITY_SCHOOLING] = sSchoolingDescription,
+ [ABILITY_DISGUISE] = sDisguiseDescription,
+ [ABILITY_BATTLE_BOND] = sBattleBondDescription,
+ [ABILITY_POWER_CONSTRUCT] = sPowerConstructDescription,
+ [ABILITY_CORROSION] = sCorrosionDescription,
+ [ABILITY_COMATOSE] = sComatoseDescription,
+ [ABILITY_QUEENLY_MAJESTY] = sQueenlyMajestyDescription,
+ [ABILITY_INNARDS_OUT] = sInnardsOutDescription,
+ [ABILITY_DANCER] = sDancerDescription,
+ [ABILITY_BATTERY] = sBatteryDescription,
+ [ABILITY_FLUFFY] = sFluffyDescription,
+ [ABILITY_DAZZLING] = sQueenlyMajestyDescription,
+ [ABILITY_SOUL_HEART] = sSoulHeartDescription,
+ [ABILITY_TANGLING_HAIR] = sGooeyDescription,
+ [ABILITY_RECEIVER] = sReceiverDescription,
+ [ABILITY_POWER_OF_ALCHEMY] = sReceiverDescription,
+ [ABILITY_BEAST_BOOST] = sBeastBoostDescription,
+ [ABILITY_RKS_SYSTEM] = sRKSSystemDescription,
+ [ABILITY_ELECTRIC_SURGE] = sElectricSurgeDescription,
+ [ABILITY_PSYCHIC_SURGE] = sPsychicSurgeDescription,
+ [ABILITY_MISTY_SURGE] = sMistySurgeDescription,
+ [ABILITY_GRASSY_SURGE] = sGrassySurgeDescription,
+ [ABILITY_FULL_METAL_BODY] = sFullMetalBodyDescription,
+ [ABILITY_SHADOW_SHIELD] = sMultiscaleDescription,
+ [ABILITY_PRISM_ARMOR] = sFilterDescription,
+ [ABILITY_NEUROFORCE] = sNeuroforceDescription,
+ [ABILITY_INTREPID_SWORD] = sIntrepidSwordDescription,
+ [ABILITY_DAUNTLESS_SHIELD] = sDauntlessShieldDescription,
+ [ABILITY_LIBERO] = sLiberoDescription,
+ [ABILITY_BALL_FETCH] = sBallFetchDescription,
+ [ABILITY_COTTON_DOWN] = sCottonDownDescription,
+ [ABILITY_PROPELLER_TAIL] = sPropellerTailDescription,
+ [ABILITY_MIRROR_ARMOR] = sMirrorArmorDescription,
+ [ABILITY_GULP_MISSILE] = sGulpMissileDescription,
+ [ABILITY_STALWART] = sStalwartDescription,
+ [ABILITY_STEAM_ENGINE] = sSteamEngineDescription,
+ [ABILITY_PUNK_ROCK] = sPunkRockDescription,
+ [ABILITY_SAND_SPIT] = sSandSpitDescription,
+ [ABILITY_ICE_SCALES] = sIceScalesDescription,
+ [ABILITY_RIPEN] = sRipenDescription,
+ [ABILITY_ICE_FACE] = sIceFaceDescription,
+ [ABILITY_POWER_SPOT] = sPowerSpotDescription,
+ [ABILITY_MIMICRY] = sMimicryDescription,
+ [ABILITY_SCREEN_CLEANER] = sScreenCleanerDescription,
+ [ABILITY_STEELY_SPIRIT] = sSteelySpiritDescription,
+ [ABILITY_PERISH_BODY] = sPerishBodyDescription,
+ [ABILITY_WANDERING_SPIRIT] = sWanderingSpiritDescription,
+ [ABILITY_GORILLA_TACTICS] = sGorillaTacticsDescription,
+ [ABILITY_NEUTRALIZING_GAS] = sNeutralizingGasDescription,
+ [ABILITY_PASTEL_VEIL] = sPastelVeilDescription,
+ [ABILITY_HUNGER_SWITCH] = sHungerSwitchDescription,
+ [ABILITY_QUICK_DRAW] = sQuickDrawDescription,
+ [ABILITY_UNSEEN_FIST] = sUnseenFistDescription,
+ [ABILITY_CURIOUS_MEDICINE] = sCuriousMedicineDescription,
+ [ABILITY_TRANSISTOR] = sTransistorDescription,
+ [ABILITY_DRAGONS_MAW] = sDragonsMawDescription,
+ [ABILITY_CHILLING_NEIGH] = sChillingNeighDescription,
+ [ABILITY_GRIM_NEIGH] = sGrimNeighDescription,
+ [ABILITY_AS_ONE_ICE_RIDER] = sAsOneIceRiderDescription,
+ [ABILITY_AS_ONE_SHADOW_RIDER] = sAsOneShadowRiderDescription,
};
diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h
index 5f79efc57a..08e5fc8468 100644
--- a/src/data/text/item_descriptions.h
+++ b/src/data/text/item_descriptions.h
@@ -1,141 +1,214 @@
static const u8 sDummyDesc[] = _(
"?????");
-// Pokeballs
-static const u8 sMasterBallDesc[] = _(
- "The best BALL that\n"
- "catches a POKéMON\n"
- "without fail.");
-
-static const u8 sUltraBallDesc[] = _(
- "A better BALL with\n"
- "a higher catch rate\n"
- "than a GREAT BALL.");
-
-static const u8 sGreatBallDesc[] = _(
- "A good BALL with a\n"
- "higher catch rate\n"
- "than a POKé BALL.");
-
+// Poké Balls
static const u8 sPokeBallDesc[] = _(
"A tool used for\n"
"catching wild\n"
- "POKéMON.");
+ "Pokémon.");
-static const u8 sSafariBallDesc[] = _(
- "A special BALL that\n"
- "is used only in the\n"
- "SAFARI ZONE.");
+static const u8 sGreatBallDesc[] = _(
+ "A good Ball with a\n"
+ "higher catch rate\n"
+ "than a Poké Ball.");
+
+static const u8 sUltraBallDesc[] = _(
+ "A better Ball with\n"
+ "a higher catch rate\n"
+ "than a Great Ball.");
+
+static const u8 sMasterBallDesc[] = _(
+ "The best Ball that\n"
+ "catches a Pokémon\n"
+ "without fail.");
+
+static const u8 sPremierBallDesc[] = _(
+ "A rare Ball made\n"
+ "in commemoration\n"
+ "of some event.");
+
+static const u8 sHealBallDesc[] = _(
+ "A remedial Ball\n"
+ "that restores\n"
+ "caught Pokémon.");
static const u8 sNetBallDesc[] = _(
- "A BALL that works\n"
- "well on WATER- and\n"
- "BUG-type POKéMON.");
-
-static const u8 sDiveBallDesc[] = _(
- "A BALL that works\n"
- "better on POKéMON\n"
- "on the ocean floor.");
+ "A Ball that works\n"
+ "well on Water- and\n"
+ "Bug-type Pokémon.");
static const u8 sNestBallDesc[] = _(
- "A BALL that works\n"
+ "A Ball that works\n"
"better on weaker\n"
- "POKéMON.");
+ "Pokémon.");
-static const u8 sRepeatBallDesc[] = _(
- "A BALL that works\n"
- "better on POKéMON\n"
- "caught before.");
+static const u8 sDiveBallDesc[] = _(
+ "A Ball that works\n"
+ "better on Pokémon\n"
+ "on the ocean floor.");
+
+static const u8 sDuskBallDesc[] = _(
+ "Works well if\n"
+ "used in a\n"
+ "dark place.");
static const u8 sTimerBallDesc[] = _(
- "A BALL that gains\n"
+ "A Ball that gains\n"
"power in battles\n"
"taking many turns.");
+static const u8 sQuickBallDesc[] = _(
+ "Works well if\n"
+ "used on the\n"
+ "first turn.");
+
+static const u8 sRepeatBallDesc[] = _(
+ "A Ball that works\n"
+ "better on Pokémon\n"
+ "caught before.");
+
static const u8 sLuxuryBallDesc[] = _(
- "A cozy BALL that\n"
- "makes POKéMON\n"
+ "A cozy Ball that\n"
+ "makes Pokémon\n"
"more friendly.");
-static const u8 sPremierBallDesc[] = _(
- "A rare BALL made\n"
+static const u8 sLevelBallDesc[] = _(
+ "A Ball that works\n"
+ "well on lower\n"
+ "level Pokémon.");
+
+static const u8 sLureBallDesc[] = _(
+ "A Ball that works\n"
+ "well on fished\n"
+ "up Pokémon.");
+
+static const u8 sMoonBallDesc[] = _(
+ "A Ball that works\n"
+ "well on Moon\n"
+ "Stone users.");
+
+static const u8 sFriendBallDesc[] = _(
+ "A Ball that makes\n"
+ "a Pokémon friendly\n"
+ "when caught.");
+
+static const u8 sLoveBallDesc[] = _(
+ "Works well on\n"
+ "Pokémon of the\n"
+ "opposite gender.");
+
+static const u8 sFastBallDesc[] = _(
+ "Works well on\n"
+ "very fast\n"
+ "Pokémon.");
+
+static const u8 sHeavyBallDesc[] = _(
+ "Works well on\n"
+ "very heavy\n"
+ "Pokémon.");
+
+static const u8 sDreamBallDesc[] = _(
+#if B_DREAM_BALL_MODIFIER >= GEN_8
+ "A Ball that works\n"
+ "well on sleeping\n"
+ "Pokémon.");
+#else
+ "A Poké Ball used in\n"
+ "the Entree Forest.");
+#endif
+
+static const u8 sSafariBallDesc[] = _(
+ "A special Ball that\n"
+ "is used only in the\n"
+ "Safari Zone.");
+
+static const u8 sSportBallDesc[] = _(
+ "A special Ball used\n"
+ "in the Bug-Catching\n"
+ "Contest.");
+
+static const u8 sParkBallDesc[] = _(
+ "A special Ball for\n"
+ "the Pal Park.");
+
+static const u8 sBeastBallDesc[] = _(
+ "A Ball designed to\n"
+ "catch Ultra Beasts.");
+
+static const u8 sCherishBallDesc[] = _(
+ "A rare Ball made\n"
"in commemoration\n"
"of some event.");
// Medicine
static const u8 sPotionDesc[] = _(
"Restores the HP of\n"
- "a POKéMON by\n"
+ "a Pokémon by\n"
"20 points.");
-static const u8 sAntidoteDesc[] = _(
- "Heals a poisoned\n"
- "POKéMON.");
+static const u8 sSuperPotionDesc[] = _(
+ "Restores the HP of\n"
+ "a Pokémon by\n"
+#if I_HEALTH_RECOVERY >= GEN_7
+ "60 points.");
+#else
+ "50 points.");
+#endif
-static const u8 sBurnHealDesc[] = _(
- "Heals POKéMON\n"
- "of a burn.");
+static const u8 sHyperPotionDesc[] = _(
+ "Restores the HP of\n"
+ "a Pokémon by\n"
+#if I_HEALTH_RECOVERY >= GEN_7
+ "120 points.");
+#else
+ "200 points.");
+#endif
-static const u8 sIceHealDesc[] = _(
- "Defrosts a frozen\n"
- "POKéMON.");
-
-static const u8 sAwakeningDesc[] = _(
- "Awakens a sleeping\n"
- "POKéMON.");
-
-static const u8 sParalyzeHealDesc[] = _(
- "Heals a paralyzed\n"
- "POKéMON.");
+static const u8 sMaxPotionDesc[] = _(
+ "Fully restores the\n"
+ "HP of a Pokémon.");
static const u8 sFullRestoreDesc[] = _(
"Fully restores the\n"
"HP and status of a\n"
- "POKéMON.");
-
-static const u8 sMaxPotionDesc[] = _(
- "Fully restores the\n"
- "HP of a POKéMON.");
-
-static const u8 sHyperPotionDesc[] = _(
- "Restores the HP of\n"
- "a POKéMON by\n"
- "200 points.");
-
-static const u8 sSuperPotionDesc[] = _(
- "Restores the HP of\n"
- "a POKéMON by\n"
- "50 points.");
-
-static const u8 sFullHealDesc[] = _(
- "Heals all the\n"
- "status problems of\n"
- "one POKéMON.");
+ "Pokémon.");
static const u8 sReviveDesc[] = _(
"Revives a fainted\n"
- "POKéMON with half\n"
+ "Pokémon with half\n"
"its HP.");
static const u8 sMaxReviveDesc[] = _(
"Revives a fainted\n"
- "POKéMON with all\n"
+ "Pokémon with all\n"
"its HP.");
static const u8 sFreshWaterDesc[] = _(
"A mineral water\n"
"that restores HP\n"
+#if I_HEALTH_RECOVERY >= GEN_7
+ "by 30 points.");
+#else
"by 50 points.");
+#endif
static const u8 sSodaPopDesc[] = _(
"A fizzy soda drink\n"
"that restores HP\n"
+#if I_HEALTH_RECOVERY >= GEN_7
+ "by 50 points.");
+#else
"by 60 points.");
+#endif
static const u8 sLemonadeDesc[] = _(
"A very sweet drink\n"
"that restores HP\n"
+#if I_HEALTH_RECOVERY >= GEN_7
+ "by 70 points.");
+#else
"by 80 points.");
+#endif
static const u8 sMoomooMilkDesc[] = _(
"A nutritious milk\n"
@@ -145,12 +218,20 @@ static const u8 sMoomooMilkDesc[] = _(
static const u8 sEnergyPowderDesc[] = _(
"A bitter powder\n"
"that restores HP\n"
+#if I_HEALTH_RECOVERY >= GEN_7
+ "by 60 points.");
+#else
"by 50 points.");
+#endif
static const u8 sEnergyRootDesc[] = _(
"A bitter root\n"
"that restores HP\n"
+#if I_HEALTH_RECOVERY >= GEN_7
+ "by 120 points.");
+#else
"by 200 points.");
+#endif
static const u8 sHealPowderDesc[] = _(
"A bitter powder\n"
@@ -160,7 +241,32 @@ static const u8 sHealPowderDesc[] = _(
static const u8 sRevivalHerbDesc[] = _(
"A very bitter herb\n"
"that revives a\n"
- "fainted POKéMON.");
+ "fainted Pokémon.");
+
+static const u8 sAntidoteDesc[] = _(
+ "Heals a poisoned\n"
+ "Pokémon.");
+
+static const u8 sParalyzeHealDesc[] = _(
+ "Heals a paralyzed\n"
+ "Pokémon.");
+
+static const u8 sBurnHealDesc[] = _(
+ "Heals Pokémon\n"
+ "of a burn.");
+
+static const u8 sIceHealDesc[] = _(
+ "Defrosts a frozen\n"
+ "Pokémon.");
+
+static const u8 sAwakeningDesc[] = _(
+ "Awakens a sleeping\n"
+ "Pokémon.");
+
+static const u8 sFullHealDesc[] = _(
+ "Heals all the\n"
+ "status problems of\n"
+ "one Pokémon.");
static const u8 sEtherDesc[] = _(
"Restores the PP\n"
@@ -178,38 +284,9 @@ static const u8 sElixirDesc[] = _(
static const u8 sMaxElixirDesc[] = _(
"Fully restores the\n"
- "PP of a POKéMON's\n"
+ "PP of a Pokémon's\n"
"moves.");
-static const u8 sLavaCookieDesc[] = _(
- "A local specialty\n"
- "that heals all\n"
- "status problems.");
-
-static const u8 sBlueFluteDesc[] = _(
- "A glass flute that\n"
- "awakens sleeping\n"
- "POKéMON.");
-
-static const u8 sYellowFluteDesc[] = _(
- "A glass flute that\n"
- "snaps POKéMON\n"
- "out of confusion.");
-
-static const u8 sRedFluteDesc[] = _(
- "A glass flute that\n"
- "snaps POKéMON\n"
- "out of attraction.");
-
-static const u8 sBlackFluteDesc[] = _(
- "A glass flute that\n"
- "keeps away wild\n"
- "POKéMON.");
-
-static const u8 sWhiteFluteDesc[] = _(
- "A glass flute that\n"
- "lures wild POKéMON.");
-
static const u8 sBerryJuiceDesc[] = _(
"A 100% pure juice\n"
"that restores HP\n"
@@ -218,18 +295,516 @@ static const u8 sBerryJuiceDesc[] = _(
static const u8 sSacredAshDesc[] = _(
"Fully revives and\n"
"restores all\n"
- "fainted POKéMON.");
+ "fainted Pokémon.");
+
+static const u8 sSweetHeartDesc[] = _(
+ "A sweet chocolate\n"
+ "that restores HP\n"
+ "by 20 points.");
+
+static const u8 sMaxHoneyDesc[] = _(
+ "Revives a fainted\n"
+ "Pokémon with all\n"
+ "its HP.");
+
+static const u8 sPewterCrunchiesDesc[] = _(
+ "Heals all the\n"
+ "status problems of\n"
+ "one Pokémon.");
+
+static const u8 sRageCandyBarDesc[] = _(
+ "Heals all the\n"
+ "status problems of\n"
+ "one Pokémon.");
+
+static const u8 sLavaCookieDesc[] = _(
+ "A local specialty\n"
+ "that heals all\n"
+ "status problems.");
+
+static const u8 sOldGateauDesc[] = _(
+ "Heals all the\n"
+ "status problems of\n"
+ "one Pokémon.");
+
+static const u8 sCasteliaconeDesc[] = _(
+ "Heals all the\n"
+ "status problems of\n"
+ "one Pokémon.");
+
+static const u8 sLumioseGaletteDesc[] = _(
+ "Heals all the\n"
+ "status problems of\n"
+ "one Pokémon.");
+
+static const u8 sShalourSableDesc[] = _(
+ "Heals all the\n"
+ "status problems of\n"
+ "one Pokémon.");
+
+static const u8 sBigMalasadaDesc[] = _(
+ "Heals all the\n"
+ "status problems of\n"
+ "one Pokémon.");
+
+// Vitamins
+static const u8 sHPUpDesc[] = _(
+ "Raises the base HP\n"
+ "of one Pokémon.");
+
+static const u8 sProteinDesc[] = _(
+ "Raises the base\n"
+ "Attack stat of one\n"
+ "Pokémon.");
+
+static const u8 sIronDesc[] = _(
+ "Raises the base\n"
+ "Defense stat of\n"
+ "one Pokémon.");
+
+static const u8 sCalciumDesc[] = _(
+ "Raises the base\n"
+ "Sp. Atk stat of one\n"
+ "Pokémon.");
+
+static const u8 sZincDesc[] = _(
+ "Raises the base\n"
+ "Sp. Def stat of one\n"
+ "Pokémon.");
+
+static const u8 sCarbosDesc[] = _(
+ "Raises the base\n"
+ "Speed stat of one\n"
+ "Pokémon.");
+
+static const u8 sPPUpDesc[] = _(
+ "Raises the maximum\n"
+ "PP of a selected\n"
+ "move.");
+
+static const u8 sPPMaxDesc[] = _(
+ "Raises the PP of a\n"
+ "move to its maximum\n"
+ "points.");
+
+// EV Feathers
+static const u8 sHealthFeatherDesc[] = _(
+ "An item that raises\n"
+ "the base HP of\n"
+ "a Pokémon.");
+
+static const u8 sMuscleFeatherDesc[] = _(
+ "An item that raises\n"
+ "the base Attack of\n"
+ "a Pokémon.");
+
+static const u8 sResistFeatherDesc[] = _(
+ "An item that raises\n"
+ "the base Defense\n"
+ "of a Pokémon.");
+
+static const u8 sGeniusFeatherDesc[] = _(
+ "An item that raises\n"
+ "the base Sp. Atk.\n"
+ "of a Pokémon.");
+
+static const u8 sCleverFeatherDesc[] = _(
+ "An item that raises\n"
+ "the base Sp. Def.\n"
+ "of a Pokémon.");
+
+static const u8 sSwiftFeatherDesc[] = _(
+ "An item that raises\n"
+ "the base Speed of\n"
+ "a Pokémon.");
+
+// Ability Modifiers
+static const u8 sAbilityCapsuleDesc[] = _(
+ "Switches a Poké-\n"
+ "mon's ability.");
+
+static const u8 sAbilityPatchDesc[] = _(
+ "Turns the ability\n"
+ "of a Pokémon into\n"
+ "a rare ability.");
+
+// Mints
+static const u8 sLonelyMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Attack, but\n"
+ "reduces Defense.");
+
+static const u8 sAdamantMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Attack, but\n"
+ "reduces Sp. Atk.");
+
+static const u8 sNaughtyMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Attack, but\n"
+ "reduces Sp. Def.");
+
+static const u8 sBraveMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Attack, but\n"
+ "reduces Speed.");
+
+static const u8 sBoldMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Defense, but\n"
+ "reduces Attack.");
+
+static const u8 sImpishMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Defense, but\n"
+ "reduces Sp. Atk.");
+
+static const u8 sLaxMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Defense, but\n"
+ "reduces Sp. Def.");
+
+static const u8 sRelaxedMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Defense, but\n"
+ "reduces Speed.");
+
+static const u8 sModestMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Sp. Atk, but\n"
+ "reduces Attack.");
+
+static const u8 sMildMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Sp. Atk, but\n"
+ "reduces Defense.");
+
+static const u8 sRashMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Sp. Atk, but\n"
+ "reduces Sp. Def.");
+
+static const u8 sQuietMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Sp. Atk, but\n"
+ "reduces Speed.");
+
+static const u8 sCalmMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Sp. Def, but\n"
+ "reduces Attack.");
+
+static const u8 sGentleMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Sp. Def, but\n"
+ "reduces Defense.");
+
+static const u8 sCarefulMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Sp. Def, but\n"
+ "reduces Sp. Atk.");
+
+static const u8 sSassyMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Sp. Def, but\n"
+ "reduces Speed.");
+
+static const u8 sTimidMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Speed, but\n"
+ "reduces Attack.");
+
+static const u8 sHastyMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Speed, but\n"
+ "reduces Defense.");
+
+static const u8 sJollyMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Speed, but\n"
+ "reduces Sp. Atk.");
+
+static const u8 sNaiveMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Speed, but\n"
+ "reduces Sp. Def.");
+
+static const u8 sSeriousMintDesc[] = _(
+ "Can be smelled. It\n"
+ "ups Speed, but\n"
+ "reduces Attack.");
+
+// Candy
+static const u8 sRareCandyDesc[] = _(
+ "Raises the level\n"
+ "of a Pokémon by\n"
+ "one.");
+
+static const u8 sExpCandyXSDesc[] = _(
+ "Gives a very small\n"
+ "amount of Exp. to\n"
+ "a single Pokémon.");
+
+static const u8 sExpCandySDesc[] = _(
+ "Gives a small\n"
+ "amount of Exp. to\n"
+ "a single Pokémon.");
+
+static const u8 sExpCandyMDesc[] = _(
+ "Gives a moderate\n"
+ "amount of Exp. to\n"
+ "a single Pokémon.");
+
+static const u8 sExpCandyLDesc[] = _(
+ "Gives a large\n"
+ "amount of Exp. to\n"
+ "a single Pokémon.");
+
+static const u8 sExpCandyXLDesc[] = _(
+ "Gives a very large\n"
+ "amount of Exp. to\n"
+ "a single Pokémon.");
+
+static const u8 sDynamaxCandyDesc[] = _(
+ "Raises the Dynamax\n"
+ "Level of a single\n"
+ "Pokémon by one.");
+
+// Medicinal Flutes
+static const u8 sBlueFluteDesc[] = _(
+ "A glass flute that\n"
+ "awakens sleeping\n"
+ "Pokémon.");
+
+static const u8 sYellowFluteDesc[] = _(
+ "A glass flute that\n"
+ "snaps Pokémon\n"
+ "out of confusion.");
+
+static const u8 sRedFluteDesc[] = _(
+ "A glass flute that\n"
+ "snaps Pokémon\n"
+ "out of attraction.");
+
+// Encounter-modifying Flutes
+static const u8 sBlackFluteDesc[] = _(
+ "A glass flute that\n"
+ "keeps away wild\n"
+ "Pokémon.");
+
+static const u8 sWhiteFluteDesc[] = _(
+ "A glass flute that\n"
+ "lures wild Pokémon.");
+
+// Encounter Modifiers
+static const u8 sRepelDesc[] = _(
+ "Repels weak wild\n"
+ "Pokémon for 100\n"
+ "steps.");
+
+static const u8 sSuperRepelDesc[] = _(
+ "Repels weak wild\n"
+ "Pokémon for 200\n"
+ "steps.");
+
+static const u8 sMaxRepelDesc[] = _(
+ "Repels weak wild\n"
+ "Pokémon for 250\n"
+ "steps.");
+
+static const u8 sLureDesc[] = _(
+ "Makes Pokémon more\n"
+ "likely to appear\n"
+ "for 100 steps.");
+
+static const u8 sSuperLureDesc[] = _(
+ "Makes Pokémon more\n"
+ "likely to appear\n"
+ "for 200 steps.");
+
+static const u8 sMaxLureDesc[] = _(
+ "Makes Pokémon more\n"
+ "likely to appear\n"
+ "for 250 steps.");
+
+static const u8 sEscapeRopeDesc[] = _(
+ "Use to escape\n"
+ "instantly from a\n"
+ "cave or a dungeon.");
+
+// Battle items
+static const u8 sXAttackDesc[] = _(
+#if B_X_ITEMS_BUFF >= GEN_7
+ "Sharply raises stat\n"
+ "Attack during\n"
+ "one battle.");
+#else
+ "Raises the stat\n"
+ "Attack during one\n"
+ "battle.");
+#endif
+
+static const u8 sXDefenseDesc[] = _(
+#if B_X_ITEMS_BUFF >= GEN_7
+ "Sharply raises stat\n"
+ "Defense during\n"
+ "one battle.");
+#else
+ "Raises the stat\n"
+ "Defense during one\n"
+ "battle.");
+#endif
+
+static const u8 sXSpAtkDesc[] = _(
+#if B_X_ITEMS_BUFF >= GEN_7
+ "Sharply raises stat\n"
+ "Sp. Atk during\n"
+ "one battle.");
+#else
+ "Raises the stat\n"
+ "Sp. Atk during one\n"
+ "battle.");
+#endif
+
+static const u8 sXSpDefDesc[] = _(
+#if B_X_ITEMS_BUFF >= GEN_7
+ "Sharply raises stat\n"
+ "Sp. Def during\n"
+ "one battle.");
+#else
+ "Raises the stat\n"
+ "Sp. Def during one\n"
+ "battle.");
+#endif
+
+static const u8 sXSpeedDesc[] = _(
+#if B_X_ITEMS_BUFF >= GEN_7
+ "Sharply raises stat\n"
+ "Speed during\n"
+ "one battle.");
+#else
+ "Raises the stat\n"
+ "Speed during one\n"
+ "battle.");
+#endif
+
+static const u8 sXAccuracyDesc[] = _(
+#if B_X_ITEMS_BUFF >= GEN_7
+ "Sharply raises move\n"
+ "accuracy during\n"
+ "one battle.");
+#else
+ "Raises accuracy\n"
+ "of attack moves\n"
+ "during one battle.");
+#endif
+
+static const u8 sDireHitDesc[] = _(
+ "Raises the\n"
+ "critical-hit ratio\n"
+ "during one battle.");
+
+static const u8 sGuardSpecDesc[] = _(
+ "Prevents stat\n"
+ "reduction when\n"
+ "used in battle.");
+
+// Escape Items
+static const u8 sPokeDollDesc[] = _(
+ "Use to flee from\n"
+ "any battle with\n"
+ "a wild Pokémon.");
+
+static const u8 sFluffyTailDesc[] = _(
+ "Use to flee from\n"
+ "any battle with\n"
+ "a wild Pokémon.");
+
+static const u8 sPokeToyDesc[] = _(
+ "Use to flee from\n"
+ "any battle with\n"
+ "a wild Pokémon.");
+
+static const u8 sMaxMushroomsDesc[] = _(
+ "Raises every stat\n"
+ "during one battle\n"
+ "by one stage.");
+
+// Treasures
+static const u8 sBottleCapDesc[] = _(
+ "A beautiful bottle\n"
+ "cap that gives off\n"
+ "a silver gleam.");
+
+static const u8 sGoldBottleCapDesc[] = _(
+ "A beautiful bottle\n"
+ "cap that gives off\n"
+ "a golden gleam.");
+
+static const u8 sNuggetDesc[] = _(
+ "A nugget of pure\n"
+ "gold. Can be sold at\n"
+ "a high price.");
+
+static const u8 sBigNuggetDesc[] = _(
+ "A big nugget made\n"
+ "of gold, sellable\n"
+ "at a high price.");
+
+static const u8 sTinyMushroomDesc[] = _(
+ "A plain mushroom\n"
+ "that would sell\n"
+ "at a cheap price.");
+
+static const u8 sBigMushroomDesc[] = _(
+ "A rare mushroom\n"
+ "that would sell at a\n"
+ "high price.");
+
+static const u8 sBalmMushroomDesc[] = _(
+ "A rare mushroom\n"
+ "that would sell at a\n"
+ "high price.");
+
+static const u8 sPearlDesc[] = _(
+ "A pretty pearl\n"
+ "that would sell at a\n"
+ "cheap price.");
+
+static const u8 sBigPearlDesc[] = _(
+ "A lovely large pearl\n"
+ "that would sell at a\n"
+ "high price.");
+
+static const u8 sPearlStringDesc[] = _(
+ "Very large pearls\n"
+ "that would sell at a\n"
+ "high price.");
+
+static const u8 sStardustDesc[] = _(
+ "Beautiful red sand.\n"
+ "Can be sold at a\n"
+ "high price.");
+
+static const u8 sStarPieceDesc[] = _(
+ "A red gem shard.\n"
+ "It would sell for a\n"
+ "very high price.");
+
+static const u8 sCometShardDesc[] = _(
+ "A comet's shard.\n"
+ "It would sell for a\n"
+ "high price.");
-// Collectibles
static const u8 sShoalSaltDesc[] = _(
"Salt obtained from\n"
"deep inside the\n"
- "SHOAL CAVE.");
+ "Shoal Cave.");
static const u8 sShoalShellDesc[] = _(
"A seashell found\n"
"deep inside the\n"
- "SHOAL CAVE.");
+ "Shoal Cave.");
static const u8 sRedShardDesc[] = _(
"A shard from an\n"
@@ -251,250 +826,1841 @@ static const u8 sGreenShardDesc[] = _(
"ancient item. Can\n"
"be sold cheaply.");
-// Vitamins
-static const u8 sHPUpDesc[] = _(
- "Raises the base HP\n"
- "of one POKéMON.");
-
-static const u8 sProteinDesc[] = _(
- "Raises the base\n"
- "ATTACK stat of one\n"
- "POKéMON.");
-
-static const u8 sIronDesc[] = _(
- "Raises the base\n"
- "DEFENSE stat of\n"
- "one POKéMON.");
-
-static const u8 sCarbosDesc[] = _(
- "Raises the base\n"
- "SPEED stat of one\n"
- "POKéMON.");
-
-static const u8 sCalciumDesc[] = _(
- "Raises the base\n"
- "SP. ATK stat of one\n"
- "POKéMON.");
-
-static const u8 sRareCandyDesc[] = _(
- "Raises the level\n"
- "of a POKéMON by\n"
- "one.");
-
-static const u8 sPPUpDesc[] = _(
- "Raises the maximum\n"
- "PP of a selected\n"
- "move.");
-
-static const u8 sZincDesc[] = _(
- "Raises the base\n"
- "SP. DEF stat of one\n"
- "POKéMON.");
-
-static const u8 sPPMaxDesc[] = _(
- "Raises the PP of a\n"
- "move to its maximum\n"
- "points.");
-
-// Battle items
-static const u8 sGuardSpecDesc[] = _(
- "Prevents stat\n"
- "reduction when\n"
- "used in battle.");
-
-static const u8 sDireHitDesc[] = _(
- "Raises the\n"
- "critical-hit ratio\n"
- "during one battle.");
-
-static const u8 sXAttackDesc[] = _(
- "Raises the stat\n"
- "ATTACK during one\n"
- "battle.");
-
-static const u8 sXDefendDesc[] = _(
- "Raises the stat\n"
- "DEFENSE during one\n"
- "battle.");
-
-static const u8 sXSpeedDesc[] = _(
- "Raises the stat\n"
- "SPEED during one\n"
- "battle.");
-
-static const u8 sXAccuracyDesc[] = _(
- "Raises accuracy\n"
- "of attack moves\n"
- "during one battle.");
-
-static const u8 sXSpecialDesc[] = _(
- "Raises the stat\n"
- "SP. ATK during one\n"
- "battle.");
-
-static const u8 sPokeDollDesc[] = _(
- "Use to flee from\n"
- "any battle with\n"
- "a wild POKéMON.");
-
-static const u8 sFluffyTailDesc[] = _(
- "Use to flee from\n"
- "any battle with\n"
- "a wild POKéMON.");
-
-// Field items
-static const u8 sSuperRepelDesc[] = _(
- "Repels weak wild\n"
- "POKéMON for 200\n"
- "steps.");
-
-static const u8 sMaxRepelDesc[] = _(
- "Repels weak wild\n"
- "POKéMON for 250\n"
- "steps.");
-
-static const u8 sEscapeRopeDesc[] = _(
- "Use to escape\n"
- "instantly from a\n"
- "cave or a dungeon.");
-
-static const u8 sRepelDesc[] = _(
- "Repels weak wild\n"
- "POKéMON for 100\n"
- "steps.");
-
-// Evolution stones
-static const u8 sSunStoneDesc[] = _(
- "Makes certain\n"
- "species of POKéMON\n"
- "evolve.");
-
-static const u8 sMoonStoneDesc[] = _(
- "Makes certain\n"
- "species of POKéMON\n"
- "evolve.");
-
-static const u8 sFireStoneDesc[] = _(
- "Makes certain\n"
- "species of POKéMON\n"
- "evolve.");
-
-static const u8 sThunderStoneDesc[] = _(
- "Makes certain\n"
- "species of POKéMON\n"
- "evolve.");
-
-static const u8 sWaterStoneDesc[] = _(
- "Makes certain\n"
- "species of POKéMON\n"
- "evolve.");
-
-static const u8 sLeafStoneDesc[] = _(
- "Makes certain\n"
- "species of POKéMON\n"
- "evolve.");
-
-// Valuable items
-static const u8 sTinyMushroomDesc[] = _(
- "A plain mushroom\n"
- "that would sell\n"
- "at a cheap price.");
-
-static const u8 sBigMushroomDesc[] = _(
- "A rare mushroom\n"
- "that would sell at a\n"
- "high price.");
-
-static const u8 sPearlDesc[] = _(
- "A pretty pearl\n"
- "that would sell at a\n"
- "cheap price.");
-
-static const u8 sBigPearlDesc[] = _(
- "A lovely large pearl\n"
- "that would sell at a\n"
- "high price.");
-
-static const u8 sStardustDesc[] = _(
- "Beautiful red sand.\n"
- "Can be sold at a\n"
- "high price.");
-
-static const u8 sStarPieceDesc[] = _(
- "A red gem shard.\n"
- "It would sell for a\n"
- "very high price.");
-
-static const u8 sNuggetDesc[] = _(
- "A nugget of pure\n"
- "gold. Can be sold at\n"
- "a high price.");
-
static const u8 sHeartScaleDesc[] = _(
"A lovely scale.\n"
"It is coveted by\n"
"collectors.");
+static const u8 sHoneyDesc[] = _(
+ "Sweet honey that\n"
+ "attracts wild\n"
+ "Pokémon when used.");
+
+static const u8 sRareBoneDesc[] = _(
+ "A very rare bone.\n"
+ "It can be sold at\n"
+ "a high price.");
+
+static const u8 sOddKeystoneDesc[] = _(
+ "Voices can be heard\n"
+ "from this odd stone\n"
+ "occasionally.");
+
+static const u8 sPrettyFeatherDesc[] = _(
+ "A beautiful yet\n"
+ "plain feather that\n"
+ "does nothing.");
+
+static const u8 sRelicCopperDesc[] = _(
+ "A copper coin used\n"
+ "long ago. It sells\n"
+ "at a high price.");
+
+static const u8 sRelicSilverDesc[] = _(
+ "A silver coin used\n"
+ "long ago. It sells\n"
+ "at a high price.");
+
+static const u8 sRelicGoldDesc[] = _(
+ "A gold coin used\n"
+ "long ago. It sells\n"
+ "at a high price.");
+
+static const u8 sRelicVaseDesc[] = _(
+ "A vase made long\n"
+ "ago. It sells at\n"
+ "a high price.");
+
+static const u8 sRelicBandDesc[] = _(
+ "An old bracelet.\n"
+ "It sells at a\n"
+ "high price.");
+
+static const u8 sRelicStatueDesc[] = _(
+ "An old statue.\n"
+ "It sells at a\n"
+ "high price.");
+
+static const u8 sRelicCrownDesc[] = _(
+ "An old crown.\n"
+ "It sells at a\n"
+ "high price.");
+
+static const u8 sStrangeSouvenirDesc[] = _(
+ "An ornament that\n"
+ "depicts a Pokémon\n"
+ "from Alola.");
+
+// Fossils
+static const u8 sHelixFossilDesc[] = _(
+ "A piece of an\n"
+ "ancient marine\n"
+ "Pokémon's seashell.");
+
+static const u8 sDomeFossilDesc[] = _(
+ "A piece of an\n"
+ "ancient marine\n"
+ "Pokémon's shell.");
+
+static const u8 sOldAmberDesc[] = _(
+ "A stone containing\n"
+ "the genes of an\n"
+ "ancient Pokémon.");
+
+static const u8 sRootFossilDesc[] = _(
+ "A fossil of an\n"
+ "ancient, seafloor-\n"
+ "dwelling Pokémon.");
+
+static const u8 sClawFossilDesc[] = _(
+ "A fossil of an\n"
+ "ancient, seafloor-\n"
+ "dwelling Pokémon.");
+
+static const u8 sArmorFossilDesc[] = _(
+ "A piece of a\n"
+ "prehistoric Poké-\n"
+ "mon's head.");
+
+static const u8 sSkullFossilDesc[] = _(
+ "A piece of a\n"
+ "prehistoric Poké-\n"
+ "mon's head.");
+
+static const u8 sCoverFossilDesc[] = _(
+ "A piece of a\n"
+ "prehistoric Poké-\n"
+ "mon's back.");
+
+static const u8 sPlumeFossilDesc[] = _(
+ "A piece of a\n"
+ "prehistoric Poké-\n"
+ "mon's wing.");
+
+static const u8 sJawFossilDesc[] = _(
+ "A piece of a prehis-\n"
+ "toric Pokémon's\n"
+ "large jaw.");
+
+static const u8 sSailFossilDesc[] = _(
+ "A piece of a prehis-\n"
+ "toric Pokémon's\n"
+ "skin sail.");
+
+static const u8 sFossilizedBirdDesc[] = _(
+ "A fossil of an\n"
+ "ancient, sky-\n"
+ "soaring Pokémon.");
+
+static const u8 sFossilizedFishDesc[] = _(
+ "A fossil of an\n"
+ "ancient, sea-\n"
+ "dwelling Pokémon.");
+
+static const u8 sFossilizedDrakeDesc[] = _(
+ "A fossil of an\n"
+ "ancient, land-\n"
+ "roaming Pokémon.");
+
+static const u8 sFossilizedDinoDesc[] = _(
+ "A fossil of an\n"
+ "ancient, sea-\n"
+ "dwelling Pokémon.");
+
+// Mulch
+static const u8 sGrowthMulchDesc[] = _(
+ "A fertilizer that\n"
+ "accelerates the\n"
+ "growth of Berries.");
+
+static const u8 sDampMulchDesc[] = _(
+ "A fertilizer that\n"
+ "decelerates the\n"
+ "growth of Berries.");
+
+static const u8 sStableMulchDesc[] = _(
+ "A fertilizer that\n"
+ "ups the life time\n"
+ "of Berry trees.");
+
+static const u8 sGooeyMulchDesc[] = _(
+ "A fertilizer that\n"
+ "makes more Berries\n"
+ "regrow after fall.");
+
+static const u8 sRichMulchDesc[] = _(
+ "A fertilizer that\n"
+ "ups the number of\n"
+ "Berries harvested.");
+
+static const u8 sSurpriseMulchDesc[] = _(
+ "A fertilizer that\n"
+ "ups the chance of\n"
+ "Berry mutations.");
+
+static const u8 sBoostMulchDesc[] = _(
+ "A fertilizer that\n"
+ "ups the dry speed\n"
+ "of soft soil.");
+
+static const u8 sAmazeMulchDesc[] = _(
+ "A fertilizer Rich\n"
+ "Surprising and\n"
+ "Boosting as well.");
+
+// Apricorns
+static const u8 sRedApricornDesc[] = _(
+ "A red apricorn.\n"
+ "It assails your\n"
+ "nostrils.");
+
+static const u8 sBlueApricornDesc[] = _(
+ "A blue apricorn.\n"
+ "It smells a bit\n"
+ "like grass.");
+
+static const u8 sYellowApricornDesc[] = _(
+ "A yellow apricorn.\n"
+ "It has an invigor-\n"
+ "ating scent.");
+
+static const u8 sGreenApricornDesc[] = _(
+ "A green apricorn.\n"
+ "It has a strange,\n"
+ "aromatic scent.");
+
+static const u8 sPinkApricornDesc[] = _(
+ "A pink apricorn.\n"
+ "It has a nice,\n"
+ "sweet scent.");
+
+static const u8 sWhiteApricornDesc[] = _(
+ "A white apricorn.\n"
+ "It doesn't smell\n"
+ "like anything.");
+
+static const u8 sBlackApricornDesc[] = _(
+ "A black apricorn.\n"
+ "It has an inde-\n"
+ "scribable scent.");
+
+static const u8 sWishingPieceDesc[] = _(
+ "Throw into a\n"
+ "{PKMN} Den to attract\n"
+ "Dynamax Pokémon.");
+
+static const u8 sGalaricaTwigDesc[] = _(
+ "A twig from a tree\n"
+ "in Galar called\n"
+ "Galarica.");
+
+static const u8 sArmoriteOreDesc[] = _(
+ "A rare ore. Can be\n"
+ "found in the Isle\n"
+ "of Armor at Galar.");
+
+static const u8 sDyniteOreDesc[] = _(
+ "A mysterious ore.\n"
+ "It can be found in\n"
+ "Galar's Max Lair.");
+
// Mail
static const u8 sOrangeMailDesc[] = _(
- "A ZIGZAGOON-print\n"
- "MAIL to be held by\n"
- "a POKéMON.");
+ "A Zigzagoon-print\n"
+ "Mail to be held by\n"
+ "a Pokémon.");
static const u8 sHarborMailDesc[] = _(
- "A WINGULL-print\n"
- "MAIL to be held by\n"
- "a POKéMON.");
+ "A Wingull-print\n"
+ "Mail to be held by\n"
+ "a Pokémon.");
static const u8 sGlitterMailDesc[] = _(
- "A PIKACHU-print\n"
- "MAIL to be held by\n"
- "a POKéMON.");
+ "A Pikachu-print\n"
+ "Mail to be held by\n"
+ "a Pokémon.");
static const u8 sMechMailDesc[] = _(
- "A MAGNEMITE-print\n"
- "MAIL to be held by\n"
- "a POKéMON.");
+ "A Magnemite-print\n"
+ "Mail to be held by\n"
+ "a Pokémon.");
static const u8 sWoodMailDesc[] = _(
- "A SLAKOTH-print\n"
- "MAIL to be held by\n"
- "a POKéMON.");
+ "A Slakoth-print\n"
+ "Mail to be held by\n"
+ "a Pokémon.");
static const u8 sWaveMailDesc[] = _(
- "A WAILMER-print\n"
- "MAIL to be held by\n"
- "a POKéMON.");
+ "A Wailmer-print\n"
+ "Mail to be held by\n"
+ "a Pokémon.");
static const u8 sBeadMailDesc[] = _(
- "MAIL featuring a\n"
+ "Mail featuring a\n"
"sketch of the\n"
- "holding POKéMON.");
+ "holding Pokémon.");
static const u8 sShadowMailDesc[] = _(
- "A DUSKULL-print\n"
- "MAIL to be held by\n"
- "a POKéMON.");
+ "A Duskull-print\n"
+ "Mail to be held by\n"
+ "a Pokémon.");
static const u8 sTropicMailDesc[] = _(
- "A BELLOSSOM-print\n"
- "MAIL to be held by\n"
- "a POKéMON.");
+ "A Bellossom-print\n"
+ "Mail to be held by\n"
+ "a Pokémon.");
static const u8 sDreamMailDesc[] = _(
- "MAIL featuring a\n"
+ "Mail featuring a\n"
"sketch of the\n"
- "holding POKéMON.");
+ "holding Pokémon.");
static const u8 sFabMailDesc[] = _(
"A gorgeous-print\n"
- "MAIL to be held\n"
- "by a POKéMON.");
+ "Mail to be held\n"
+ "by a Pokémon.");
static const u8 sRetroMailDesc[] = _(
- "MAIL featuring the\n"
+ "Mail featuring the\n"
"drawings of three\n"
- "POKéMON.");
+ "Pokémon.");
+
+// Evolution Items
+static const u8 sFireStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sWaterStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sThunderStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sLeafStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sIceStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sSunStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sMoonStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sShinyStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sDuskStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sDawnStoneDesc[] = _(
+ "Makes certain\n"
+ "species of Pokémon\n"
+ "evolve.");
+
+static const u8 sSweetAppleDesc[] = _(
+ "A very sweet apple\n"
+ "that makes certain\n"
+ "Pokémon evolve.");
+
+static const u8 sTartAppleDesc[] = _(
+ "A very tart apple\n"
+ "that makes certain\n"
+ "Pokémon evolve.");
+
+static const u8 sCrackedPotDesc[] = _(
+ "A cracked teapot\n"
+ "that makes certain\n"
+ "Pokémon evolve.");
+
+static const u8 sChippedPotDesc[] = _(
+ "A chipped teapot\n"
+ "that makes certain\n"
+ "Pokémon evolve.");
+
+static const u8 sGalaricaCuffDesc[] = _(
+ "A cuff from Galar\n"
+ "that makes certain\n"
+ "Pokémon evolve.");
+
+static const u8 sGalaricaWreathDesc[] = _(
+ "A wreath made in\n"
+ "Galar. Makes some\n"
+ "Pokémon evolve.");
+
+static const u8 sDragonScaleDesc[] = _(
+ "A strange scale\n"
+ "held by Dragon-\n"
+ "type Pokémon.");
+
+static const u8 sUpgradeDesc[] = _(
+ "A peculiar box made\n"
+ "by Silph Co.");
+
+static const u8 sProtectorDesc[] = _(
+ "Loved by a certain\n"
+ "Pokémon. It's stiff\n"
+ "and heavy.");
+
+static const u8 sElectirizerDesc[] = _(
+ "Loved by a certain\n"
+ "Pokémon. It's full\n"
+ "of electric energy.");
+
+static const u8 sMagmarizerDesc[] = _(
+ "Loved by a certain\n"
+ "Pokémon. It's full\n"
+ "of magma energy.");
+
+static const u8 sDubiousDiscDesc[] = _(
+ "A transparent device\n"
+ "overflowing with\n"
+ "dubious data.");
+
+static const u8 sReaperClothDesc[] = _(
+ "Loved by a certain\n"
+ "Pokémon. Imbued with\n"
+ "spiritual energy.");
+
+static const u8 sPrismScaleDesc[] = _(
+ "A mysterious scale\n"
+ "that evolves certain\n"
+ "Pokémon. It shines.");
+
+static const u8 sWhippedDreamDesc[] = _(
+ "A soft and sweet\n"
+ "treat loved by\n"
+ "a certain Pokémon.");
+
+static const u8 sSachetDesc[] = _(
+ "A sachet filled with\n"
+ "perfumes loved by\n"
+ "a certain Pokémon.");
+
+static const u8 sOvalStoneDesc[] = _(
+ "Makes a certain\n"
+ "Pokémon evolve. It's\n"
+ "shaped like an egg.");
+
+static const u8 sStrawberrySweetDesc[] = _(
+ "Strawberry-shaped\n"
+ "sweet loved by\n"
+ "Milcery.");
+
+static const u8 sLoveSweetDesc[] = _(
+ "A heart-shaped\n"
+ "sweet loved by\n"
+ "Milcery.");
+
+static const u8 sBerrySweetDesc[] = _(
+ "A berry-shaped\n"
+ "sweet loved by\n"
+ "Milcery.");
+
+static const u8 sCloverSweetDesc[] = _(
+ "A clover-shaped\n"
+ "sweet loved by\n"
+ "Milcery.");
+
+static const u8 sFlowerSweetDesc[] = _(
+ "A flower-shaped\n"
+ "sweet loved by\n"
+ "Milcery.");
+
+static const u8 sStarSweetDesc[] = _(
+ "A star-shaped\n"
+ "sweet loved by\n"
+ "Milcery.");
+
+static const u8 sRibbonSweetDesc[] = _(
+ "A ribbon-shaped\n"
+ "sweet loved by\n"
+ "Milcery.");
+
+static const u8 sEverstoneDesc[] = _(
+ "A wondrous hold\n"
+ "item that prevents\n"
+ "evolution.");
+
+// Nectars
+static const u8 sRedNectarDesc[] = _(
+ "Flower nectar that\n"
+ "changes the form\n"
+ "of certain Pokémon.");
+
+static const u8 sYellowNectarDesc[] = _(
+ "Flower nectar that\n"
+ "changes the form\n"
+ "of certain Pokémon.");
+
+static const u8 sPinkNectarDesc[] = _(
+ "Flower nectar that\n"
+ "changes the form\n"
+ "of certain Pokémon.");
+
+static const u8 sPurpleNectarDesc[] = _(
+ "Flower nectar that\n"
+ "changes the form\n"
+ "of certain Pokémon.");
+
+// Plates
+static const u8 sFlamePlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Fire-type moves.");
+
+static const u8 sSplashPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Water-type moves.");
+
+static const u8 sZapPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of Elec-\n"
+ "tric-type moves.");
+
+static const u8 sMeadowPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Grass-type moves.");
+
+static const u8 sIciclePlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Ice-type moves.");
+
+static const u8 sFistPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of Fight-\n"
+ "ing-type moves.");
+
+static const u8 sToxicPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Poison-type moves.");
+
+static const u8 sEarthPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Ground-type moves.");
+
+static const u8 sSkyPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Flying-type moves.");
+
+static const u8 sMindPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of Psy\n"
+ "chic-type moves.");
+
+static const u8 sInsectPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Bug-type moves.");
+
+static const u8 sStonePlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Rock-type moves.");
+
+static const u8 sSpookyPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Ghost-type moves.");
+
+static const u8 sDracoPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Dragon-type moves.");
+
+static const u8 sDreadPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Dark-type moves.");
+
+static const u8 sIronPlateDesc[] = _(
+ "A tablet that ups\n"
+ "the power of\n"
+ "Steel-type moves.");
+
+static const u8 sPixiePlateDesc[] = _(
+ "A stone tablet that\n"
+ "boosts the power of\n"
+ "Fairy-type moves.");
+
+// Drives
+static const u8 sDouseDriveDesc[] = _(
+ "Changes Genesect's\n"
+ "Techno Blast to\n"
+ "Water-type.");
+
+static const u8 sShockDriveDesc[] = _(
+ "Changes Genesect's\n"
+ "Techno Blast to\n"
+ "Electric-type.");
+
+static const u8 sBurnDriveDesc[] = _(
+ "Changes Genesect's\n"
+ "Techno Blast to\n"
+ "Fire-type.");
+
+static const u8 sChillDriveDesc[] = _(
+ "Changes Genesect's\n"
+ "Techno Blast to\n"
+ "Ice-type.");
+
+// Memories
+static const u8 sFireMemoryDesc[] = _(
+ "A disc with Fire\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sWaterMemoryDesc[] = _(
+ "A disc with Water\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sElectricMemoryDesc[] = _(
+ "A disc with Electric\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sGrassMemoryDesc[] = _(
+ "A disc with Grass\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sIceMemoryDesc[] = _(
+ "A disc with Ice\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sFightingMemoryDesc[] = _(
+ "A disc with Fighting\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sPoisonMemoryDesc[] = _(
+ "A disc with Poison\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sGroundMemoryDesc[] = _(
+ "A disc with Ground\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sFlyingMemoryDesc[] = _(
+ "A disc with Flying\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sPsychicMemoryDesc[] = _(
+ "A disc with Psychic\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sBugMemoryDesc[] = _(
+ "A disc with Bug\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sRockMemoryDesc[] = _(
+ "A disc with Rock\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sGhostMemoryDesc[] = _(
+ "A disc with Ghost\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sDragonMemoryDesc[] = _(
+ "A disc with Dragon\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sDarkMemoryDesc[] = _(
+ "A disc with Dark\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sSteelMemoryDesc[] = _(
+ "A disc with Steel\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sFairyMemoryDesc[] = _(
+ "A disc with Fairy\n"
+ "type data. It swaps\n"
+ "Silvally's type.");
+
+static const u8 sRustedSwordDesc[] = _(
+ "A rusty sword. A\n"
+ "hero used it to\n"
+ "halt a disaster.");
+
+static const u8 sRustedShieldDesc[] = _(
+ "A rusty shield. A\n"
+ "hero used it to\n"
+ "halt a disaster.");
+
+// Colored Orbs
+static const u8 sRedOrbDesc[] = _(
+ "A red, glowing orb\n"
+ "said to contain an\n"
+ "ancient power.");
+
+static const u8 sBlueOrbDesc[] = _(
+ "A blue, glowing orb\n"
+ "said to contain an\n"
+ "ancient power.");
+
+// Mega Stones
+static const u8 sVenusauriteDesc[] = _(
+ "This stone enables\n"
+ "Venusaur to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sCharizarditeDesc[] = _(
+ "This stone enables\n"
+ "Charizard to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sBlastoisiniteDesc[] = _(
+ "This stone enables\n"
+ "Blastoise to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sBeedrilliteDesc[] = _(
+ "This stone enables\n"
+ "Beedrill to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sPidgeotiteDesc[] = _(
+ "This stone enables\n"
+ "Pidgeot to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sAlakaziteDesc[] = _(
+ "This stone enables\n"
+ "Alakazam to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sSlowbroniteDesc[] = _(
+ "This stone enables\n"
+ "Slowbro to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sGengariteDesc[] = _(
+ "This stone enables\n"
+ "Gengar to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sKangaskhaniteDesc[] = _(
+ "This stone enables\n"
+ "Kangaskhan to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sPinsiriteDesc[] = _(
+ "This stone enables\n"
+ "Pinsir to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sGyaradositeDesc[] = _(
+ "This stone enables\n"
+ "Gyarados to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sAerodactyliteDesc[] = _(
+ "This stone enables\n"
+ "Aerodactyl to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sMewtwoniteDesc[] = _(
+ "This stone enables\n"
+ "Mewtwo to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sAmpharositeDesc[] = _(
+ "This stone enables\n"
+ "Ampharos to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sSteelixiteDesc[] = _(
+ "This stone enables\n"
+ "Steelix to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sScizoriteDesc[] = _(
+ "This stone enables\n"
+ "Scizor to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sHeracroniteDesc[] = _(
+ "This stone enables\n"
+ "Heracross to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sHoundoominiteDesc[] = _(
+ "This stone enables\n"
+ "Houndoom to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sTyranitariteDesc[] = _(
+ "This stone enables\n"
+ "Tyranitar to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sSceptiliteDesc[] = _(
+ "This stone enables\n"
+ "Sceptile to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sBlazikeniteDesc[] = _(
+ "This stone enables\n"
+ "Blaziken to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sSwampertiteDesc[] = _(
+ "This stone enables\n"
+ "Swampert to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sGardevoiriteDesc[] = _(
+ "This stone enables\n"
+ "Gardevoir to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sSableniteDesc[] = _(
+ "This stone enables\n"
+ "Sableye to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sMawiliteDesc[] = _(
+ "This stone enables\n"
+ "Mawile to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sAggroniteDesc[] = _(
+ "This stone enables\n"
+ "Aggron to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sMedichamiteDesc[] = _(
+ "This stone enables\n"
+ "Medicham to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sManectiteDesc[] = _(
+ "This stone enables\n"
+ "Manectric to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sSharpedoniteDesc[] = _(
+ "This stone enables\n"
+ "Sharpedo to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sCameruptiteDesc[] = _(
+ "This stone enables\n"
+ "Camerupt to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sAltarianiteDesc[] = _(
+ "This stone enables\n"
+ "Altaria to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sBanettiteDesc[] = _(
+ "This stone enables\n"
+ "Banette to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sAbsoliteDesc[] = _(
+ "This stone enables\n"
+ "Absol to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sGlalititeDesc[] = _(
+ "This stone enables\n"
+ "Glalie to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sSalamenciteDesc[] = _(
+ "This stone enables\n"
+ "Salamence to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sMetagrossiteDesc[] = _(
+ "This stone enables\n"
+ "Metagross to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sLatiasiteDesc[] = _(
+ "This stone enables\n"
+ "Latias to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sLatiositeDesc[] = _(
+ "This stone enables\n"
+ "Latios to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sLopunniteDesc[] = _(
+ "This stone enables\n"
+ "Lopunny to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sGarchompiteDesc[] = _(
+ "This stone enables\n"
+ "Garchomp to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sLucarioniteDesc[] = _(
+ "This stone enables\n"
+ "Lucario to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sAbomasiteDesc[] = _(
+ "This stone enables\n"
+ "Abomasnow to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sGalladiteDesc[] = _(
+ "This stone enables\n"
+ "Gallade to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sAudiniteDesc[] = _(
+ "This stone enables\n"
+ "Audino to Mega\n"
+ "Evolve in battle.");
+
+static const u8 sDianciteDesc[] = _(
+ "This stone enables\n"
+ "Diancie to Mega\n"
+ "Evolve in battle.");
+
+// Gems
+static const u8 sNormalGemDesc[] = _(
+ "Increases the\n"
+ "power of Normal\n"
+ "Type moves.");
+
+static const u8 sFireGemDesc[] = _(
+ "Increases the\n"
+ "power of Fire\n"
+ "Type moves.");
+
+static const u8 sWaterGemDesc[] = _(
+ "Increases the\n"
+ "power of Water\n"
+ "Type moves.");
+
+static const u8 sElectricGemDesc[] = _(
+ "Increases the\n"
+ "power of Electric\n"
+ "Type moves.");
+
+static const u8 sGrassGemDesc[] = _(
+ "Increases the\n"
+ "power of Grass\n"
+ "Type moves.");
+
+static const u8 sIceGemDesc[] = _(
+ "Increases the\n"
+ "power of Ice\n"
+ "Type moves.");
+
+static const u8 sFightingGemDesc[] = _(
+ "Increases the\n"
+ "power of Fighting\n"
+ "Type moves.");
+
+static const u8 sPoisonGemDesc[] = _(
+ "Increases the\n"
+ "power of Poison\n"
+ "Type moves.");
+
+static const u8 sGroundGemDesc[] = _(
+ "Increases the\n"
+ "power of Ground\n"
+ "Type moves.");
+
+static const u8 sFlyingGemDesc[] = _(
+ "Increases the\n"
+ "power of Flying\n"
+ "Type moves.");
+
+static const u8 sPsychicGemDesc[] = _(
+ "Increases the\n"
+ "power of Psychic\n"
+ "Type moves.");
+
+static const u8 sBugGemDesc[] = _(
+ "Increases the\n"
+ "power of Bug\n"
+ "Type moves.");
+
+static const u8 sRockGemDesc[] = _(
+ "Increases the\n"
+ "power of Rock\n"
+ "Type moves.");
+
+static const u8 sGhostGemDesc[] = _(
+ "Increases the\n"
+ "power of Ghost\n"
+ "Type moves.");
+
+static const u8 sDragonGemDesc[] = _(
+ "Increases the\n"
+ "power of Dragon\n"
+ "Type moves.");
+
+static const u8 sDarkGemDesc[] = _(
+ "Increases the\n"
+ "power of Dark\n"
+ "Type moves.");
+
+static const u8 sSteelGemDesc[] = _(
+ "Increases the\n"
+ "power of Steel\n"
+ "Type moves.");
+
+static const u8 sFairyGemDesc[] = _(
+ "Increases the\n"
+ "power of Fairy\n"
+ "Type moves.");
+
+// Z-Crystals
+static const u8 sNormaliumZDesc[] = _(
+ "Upgrade Normal-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sFiriumZDesc[] = _(
+ "Upgrade Fire-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sWateriumZDesc[] = _(
+ "Upgrade Water-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sElectriumZDesc[] = _(
+ "Upgrade Electric-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sGrassiumZDesc[] = _(
+ "Upgrade Grass-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sIciumZDesc[] = _(
+ "Upgrade Ice-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sFightiniumZDesc[] = _(
+ "Upgrade Fighting-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sPoisoniumZDesc[] = _(
+ "Upgrade Poison-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sGroundiumZDesc[] = _(
+ "Upgrade Ground-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sFlyiniumZDesc[] = _(
+ "Upgrade Flying-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sPsychiumZDesc[] = _(
+ "Upgrade Psychic-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sBuginiumZDesc[] = _(
+ "Upgrade Bug-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sRockiumZDesc[] = _(
+ "Upgrade Rock-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sGhostiumZDesc[] = _(
+ "Upgrade Ghost-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sDragoniumZDesc[] = _(
+ "Upgrade Dragon-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sDarkiniumZDesc[] = _(
+ "Upgrade Dark-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sSteeliumZDesc[] = _(
+ "Upgrade Steel-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sFairiumZDesc[] = _(
+ "Upgrade Fairy-\n"
+ "type moves into\n"
+ "Z-Moves.");
+
+static const u8 sPikaniumZDesc[] = _(
+ "Upgrade Pikachu's\n"
+ "Volt Tackle\n"
+ "into a Z-Move.");
+
+static const u8 sEeviumZDesc[] = _(
+ "Upgrade Eevee's\n"
+ "Last Resort\n"
+ "into a Z-Move.");
+
+static const u8 sSnorliumZDesc[] = _(
+ "Upgrade Snorlax's\n"
+ "Giga Impact\n"
+ "into a Z-Move.");
+
+static const u8 sMewniumZDesc[] = _(
+ "Upgrade Mew's\n"
+ "Psychic into\n"
+ "a Z-Move.");
+
+static const u8 sDecidiumZDesc[] = _(
+ "Upgrade Decidu-\n"
+ "eye's Spirit Sha-\n"
+ "ckle into a Z-Move.");
+
+static const u8 sInciniumZDesc[] = _(
+ "Upgrade Incine-\n"
+ "roar's Darkest La-\n"
+ "riat into a Z-Move.");
+
+static const u8 sPrimariumZDesc[] = _(
+ "Upgrade Primarina's\n"
+ "Sparkling Aria\n"
+ "into a Z-Move.");
+
+static const u8 sLycaniumZDesc[] = _(
+ "Upgrade Lycanroc's\n"
+ "Stone Edge\n"
+ "into a Z-Move.");
+
+static const u8 sMimikiumZDesc[] = _(
+ "Upgrade Mimikyu's\n"
+ "Play Rough\n"
+ "into a Z-Move.");
+
+static const u8 sKommoniumZDesc[] = _(
+ "Upgrade Kommo-o's\n"
+ "Clanging Scales\n"
+ "into a Z-Move.");
+
+static const u8 sTapuniumZDesc[] = _(
+ "Upgrade the tapu's\n"
+ "Nature's Madness\n"
+ "into a Z-Move.");
+
+static const u8 sSolganiumZDesc[] = _(
+ "Upgrade Solgaleo's\n"
+ "Sunsteel Strike\n"
+ "into a Z-Move.");
+
+static const u8 sLunaliumZDesc[] = _(
+ "Upgrade Lunala's\n"
+ "Moongeist Beam\n"
+ "into a Z-Move.");
+
+static const u8 sMarshadiumZDesc[] = _(
+ "Upgrade Marsha-\n"
+ "dow's Spectral Thi-\n"
+ "ef into a Z-Move.");
+
+static const u8 sAloraichiumZDesc[] = _(
+ "Upgrade Alolan\n"
+ "Raichu's Thunder-\n"
+ "bolt into a Z-Move.");
+
+static const u8 sPikashuniumZDesc[] = _(
+ "Upgrade Pikachu w/\n"
+ "a cap's Thunderbolt\n"
+ "into a Z-Move.");
+
+static const u8 sUltranecroziumZDesc[] = _(
+ "A crystal to turn\n"
+ "fused Necrozma\n"
+ "into a new form.");
+
+// Species-specific Held Items
+static const u8 sLightBallDesc[] = _(
+ "A hold item that\n"
+ "raises the Atk and\n"
+ "Sp. Atk of Pikachu.");
+
+static const u8 sLeekDesc[] = _(
+ "A hold item that\n"
+ "raises Farfetch'd's\n"
+ "critical-hit ratio.");
+
+static const u8 sThickClubDesc[] = _(
+ "A hold item that \n"
+ "raises Cubone or\n"
+ "Marowak's Attack.");
+
+static const u8 sLuckyPunchDesc[] = _(
+ "A hold item that\n"
+ "raises Chansey's\n"
+ "critical-hit rate.");
+
+static const u8 sMetalPowderDesc[] = _(
+ "A hold item that\n"
+ "raises Ditto's\n"
+ "Defense.");
+
+static const u8 sQuickPowderDesc[] = _(
+ "An item to be held\n"
+ "by Ditto. This odd\n"
+ "powder boosts Speed.");
+
+static const u8 sDeepSeaScaleDesc[] = _(
+ "A hold item that\n"
+ "raises the Sp. Def\n"
+ "of Clamperl.");
+
+static const u8 sDeepSeaToothDesc[] = _(
+ "A hold item that\n"
+ "raises the Sp. Atk\n"
+ "of Clamperl.");
+
+static const u8 sSoulDewDesc[] = _(
+#if B_SOUL_DEW_BOOST >= GEN_7
+ "Powers up Latios' &\n"
+ "Latias' Psychic and\n"
+ "Dragon-type moves.");
+#else
+ "Hold item: raises\n"
+ "Sp. Atk & Sp. Def of\n"
+ "Latios & Latias.");
+#endif
+
+static const u8 sAdamantOrbDesc[] = _(
+ "Boosts the power of\n"
+ "Dialga's Dragon and\n"
+ "Steel-type moves.");
+
+static const u8 sLustrousOrbDesc[] = _(
+ "Boosts the power of\n"
+ "Palkia's Dragon and\n"
+ "Water-type moves.");
+
+static const u8 sGriseousOrbDesc[] = _(
+ "Powers up Giratina's\n"
+ "Dragon and Ghost-\n"
+ "type moves.");
+
+// Incenses
+static const u8 sSeaIncenseDesc[] = _(
+ "A hold item that\n"
+ "slightly boosts\n"
+ "Water-type moves.");
+
+static const u8 sLaxIncenseDesc[] = _(
+ "A hold item that\n"
+ "slightly lowers the\n"
+ "foe's accuracy.");
+
+static const u8 sOddIncenseDesc[] = _(
+ "A hold item that\n"
+ "boosts Psychic-\n"
+ "type moves.");
+
+static const u8 sRockIncenseDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Rock-type moves.");
+
+static const u8 sFullIncenseDesc[] = _(
+ "A held item that\n"
+ "makes the holder\n"
+ "move slower.");
+
+static const u8 sWaveIncenseDesc[] = _(
+ "A hold item that\n"
+ "slightly boosts\n"
+ "Water-type moves.");
+
+static const u8 sRoseIncenseDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Grass-type moves.");
+
+static const u8 sLuckIncenseDesc[] = _(
+ "Doubles money in\n"
+ "battle if the\n"
+ "holder takes part.");
+
+static const u8 sPureIncenseDesc[] = _(
+ "A hold item that\n"
+ "helps repel wild\n"
+ "Pokémon.");
+
+// Contest Scarves
+static const u8 sRedScarfDesc[] = _(
+ "A hold item that\n"
+ "raises Cool in\n"
+ "Contests.");
+
+static const u8 sBlueScarfDesc[] = _(
+ "A hold item that\n"
+ "raises Beauty in\n"
+ "Contests.");
+
+static const u8 sPinkScarfDesc[] = _(
+ "A hold item that\n"
+ "raises Cute in\n"
+ "Contests.");
+
+static const u8 sGreenScarfDesc[] = _(
+ "A hold item that\n"
+ "raises Smart in\n"
+ "Contests.");
+
+static const u8 sYellowScarfDesc[] = _(
+ "A hold item that\n"
+ "raises Tough in\n"
+ "Contests.");
+
+// EV Gain Modifiers
+static const u8 sMachoBraceDesc[] = _(
+ "A hold item that\n"
+ "promotes growth,\n"
+ "but reduces Speed.");
+
+static const u8 sPowerWeightDesc[] = _(
+ "A hold item that\n"
+ "promotes HP gain,\n"
+ "but reduces Speed.");
+
+static const u8 sPowerBracerDesc[] = _(
+ "A hold item that\n"
+ "promotes Atk gain,\n"
+ "but reduces Speed.");
+
+static const u8 sPowerBeltDesc[] = _(
+ "A hold item that\n"
+ "promotes Def gain,\n"
+ "but reduces Speed.");
+
+static const u8 sPowerLensDesc[] = _(
+ "Hold item that pro-\n"
+ "motes Sp. Atk gain,\n"
+ "but reduces Speed.");
+
+static const u8 sPowerBandDesc[] = _(
+ "Hold item that pro-\n"
+ "motes Sp. Def gain,\n"
+ "but reduces Speed.");
+
+static const u8 sPowerAnkletDesc[] = _(
+ "A hold item that\n"
+ "promotes Spd gain,\n"
+ "but reduces Speed.");
+
+// Type-boosting Held Items
+static const u8 sSilkScarfDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Normal-type moves.");
+
+static const u8 sCharcoalDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Fire-type moves.");
+
+static const u8 sMysticWaterDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Water-type moves.");
+
+static const u8 sMagnetDesc[] = _(
+ "A hold item that\n"
+ "boosts Electric-\n"
+ "type moves.");
+
+static const u8 sMiracleSeedDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Grass-type moves.");
+
+static const u8 sNeverMeltIceDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Ice-type moves.");
+
+static const u8 sBlackBeltDesc[] = _(
+ "A hold item that\n"
+ "boosts Fighting-\n"
+ "type moves.");
+
+static const u8 sPoisonBarbDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Poison-type moves.");
+
+static const u8 sSoftSandDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Ground-type moves.");
+
+static const u8 sSharpBeakDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Flying-type moves.");
+
+static const u8 sTwistedSpoonDesc[] = _(
+ "A hold item that\n"
+ "boosts Psychic-\n"
+ "type moves.");
+
+static const u8 sSilverPowderDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Bug-type moves.");
+
+static const u8 sHardStoneDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Rock-type moves.");
+
+static const u8 sSpellTagDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Ghost-type moves.");
+
+static const u8 sDragonFangDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Dragon-type moves.");
+
+static const u8 sBlackGlassesDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Dark-type moves.");
+
+static const u8 sMetalCoatDesc[] = _(
+ "A hold item that\n"
+ "raises the power of\n"
+ "Steel-type moves.");
+
+// Choice Items
+static const u8 sChoiceBandDesc[] = _(
+ "Raises a move's\n"
+ "power, but permits\n"
+ "only that move.");
+
+static const u8 sChoiceSpecsDesc[] = _(
+ "Boosts Sp. Atk, but\n"
+ "allows the use of\n"
+ "only one move.");
+
+static const u8 sChoiceScarfDesc[] = _(
+ "Boosts Speed, but\n"
+ "allows the use of\n"
+ "only one move.");
+
+// Status Orbs
+static const u8 sFlameOrbDesc[] = _(
+ "A bizarre orb that\n"
+ "inflicts a burn on\n"
+ "holder in battle.");
+
+static const u8 sToxicOrbDesc[] = _(
+ "A bizarre orb that\n"
+ "badly poisons the\n"
+ "holder in battle.");
+
+// Weather Rocks
+static const u8 sDampRockDesc[] = _(
+ "Extends the length\n"
+ "of Rain Dance if\n"
+ "used by the holder.");
+
+static const u8 sHeatRockDesc[] = _(
+ "Extends the length\n"
+ "of Sunny Day if\n"
+ "used by the holder.");
+
+static const u8 sSmoothRockDesc[] = _(
+ "Extends the length\n"
+ "of Sandstorm if\n"
+ "used by the holder.");
+
+static const u8 sIcyRockDesc[] = _(
+ "Extends the length\n"
+ "of the move Hail\n"
+ "used by the holder.");
+
+// Terrain Seeds
+static const u8 sElectricSeedDesc[] = _(
+ "Boosts Defense on\n"
+ "Electric Terrain,\n"
+ "but only one time.");
+
+static const u8 sPsychicSeedDesc[] = _(
+ "Boosts Sp. Def. on\n"
+ "Psychic Terrain,\n"
+ "but only one time.");
+
+static const u8 sMistySeedDesc[] = _(
+ "Boosts Sp. Def. on\n"
+ "Misty Terrain,\n"
+ "but only one time.");
+
+static const u8 sGrassySeedDesc[] = _(
+ "Boosts Defense on\n"
+ "Grassy Terrain,\n"
+ "but only one time.");
+
+// Type-activated Stat Modifiers
+static const u8 sAbsorbBulbDesc[] = _(
+ "Raises Sp. Atk if\n"
+ "the holder is hit by\n"
+ "a Water-type move.");
+
+static const u8 sCellBatteryDesc[] = _(
+ "Raises Atk if the\n"
+ "holder is hit by an\n"
+ "Electric-type move.");
+
+static const u8 sLuminousMossDesc[] = _(
+ "Raises Sp. Def if\n"
+ "the holder is hit by\n"
+ "a Water-type move.");
+
+static const u8 sSnowballDesc[] = _(
+ "Raises Atk if its\n"
+ "holder is hit by an\n"
+ "Ice-type move.");
+
+// Misc. Held Items
+static const u8 sBrightPowderDesc[] = _(
+ "A hold item that\n"
+ "casts a glare to\n"
+ "reduce accuracy.");
+
+static const u8 sWhiteHerbDesc[] = _(
+ "A hold item that\n"
+ "restores any\n"
+ "lowered stat.");
+
+static const u8 sExpShareDesc[] = _(
+ "A hold item that\n"
+ "gets Exp. points\n"
+ "from battles.");
+
+static const u8 sQuickClawDesc[] = _(
+ "A hold item that\n"
+ "occasionally allows\n"
+ "the first strike.");
+
+static const u8 sSootheBellDesc[] = _(
+ "A hold item that\n"
+ "calms spirits and\n"
+ "fosters friendship.");
+
+#if B_MENTAL_HERB >= GEN_5
+static const u8 sMentalHerbDesc[] = _(
+ "Snaps Pokémon out\n"
+ "of move-binding\n"
+ "effects.");
+#else
+static const u8 sMentalHerbDesc[] = _(
+ "A hold item that\n"
+ "snaps Pokémon out\n"
+ "of infatuation.");
+#endif
+
+static const u8 sKingsRockDesc[] = _(
+ "A hold item that\n"
+ "may cause flinching\n"
+ "when the foe is hit.");
+
+static const u8 sAmuletCoinDesc[] = _(
+ "Doubles money in\n"
+ "battle if the\n"
+ "holder takes part.");
+
+static const u8 sCleanseTagDesc[] = _(
+ "A hold item that\n"
+ "helps repel wild\n"
+ "Pokémon.");
+
+static const u8 sSmokeBallDesc[] = _(
+ "A hold item that\n"
+ "assures fleeing\n"
+ "from wild Pokémon.");
+
+static const u8 sFocusBandDesc[] = _(
+ "A hold item that\n"
+ "occasionally\n"
+ "prevents fainting.");
+
+static const u8 sLuckyEggDesc[] = _(
+ "A hold item that\n"
+ "boosts Exp. points\n"
+ "earned in battle.");
+
+static const u8 sScopeLensDesc[] = _(
+ "A hold item that\n"
+ "improves the\n"
+ "critical-hit rate.");
+
+static const u8 sLeftoversDesc[] = _(
+ "A hold item that\n"
+ "gradually restores\n"
+ "HP in battle.");
+
+static const u8 sShellBellDesc[] = _(
+ "A hold item that\n"
+ "restores HP upon\n"
+ "striking the foe.");
+
+static const u8 sWideLensDesc[] = _(
+ "A magnifying lens\n"
+ "that boosts the\n"
+ "accuracy of moves.");
+
+static const u8 sMuscleBandDesc[] = _(
+ "A headband that\n"
+ "boosts the power of\n"
+ "physical moves.");
+
+static const u8 sWiseGlassesDesc[] = _(
+ "A pair of glasses\n"
+ "that ups the power\n"
+ "of special moves.");
+
+static const u8 sExpertBeltDesc[] = _(
+ "A belt that boosts\n"
+ "the power of super\n"
+ "effective moves.");
+
+static const u8 sLightClayDesc[] = _(
+ "Extends the length\n"
+ "of barrier moves\n"
+ "used by the holder.");
+
+static const u8 sLifeOrbDesc[] = _(
+ "Boosts the power of\n"
+ "moves at the cost\n"
+ "of some HP per turn.");
+
+static const u8 sPowerHerbDesc[] = _(
+ "Allows immediate\n"
+ "use of a move that\n"
+ "charges first.");
+
+static const u8 sFocusSashDesc[] = _(
+ "If the holder has\n"
+ "full HP, it endures\n"
+ "KO hits with 1 HP.");
+
+static const u8 sZoomLensDesc[] = _(
+ "If the holder moves\n"
+ "after the foe, it'll\n"
+ "boost accuracy.");
+
+static const u8 sMetronomeDesc[] = _(
+ "A held item that\n"
+ "boosts a move used\n"
+ "consecutively.");
+
+static const u8 sIronBallDesc[] = _(
+ "Cuts Speed and lets\n"
+ "Flying-types be hit\n"
+ "by Ground moves.");
+
+static const u8 sLaggingTailDesc[] = _(
+ "A held item that\n"
+ "makes the holder\n"
+ "move slower.");
+
+static const u8 sDestinyKnotDesc[] = _(
+ "If the holder falls\n"
+ "in love, the foe\n"
+ "does too.");
+
+static const u8 sBlackSludgeDesc[] = _(
+ "Gradually restores\n"
+ "HP of Poison-types.\n"
+ "Damages others.");
+
+static const u8 sGripClawDesc[] = _(
+ "Makes binding moves\n"
+ "used by the holder\n"
+ "go on for 7 turns.");
+
+static const u8 sStickyBarbDesc[] = _(
+ "Damages the holder\n"
+ "each turn. May latch\n"
+ "on to foes.");
+
+static const u8 sShedShellDesc[] = _(
+ "Enables the holder\n"
+ "to switch out of\n"
+ "battle without fail.");
+
+static const u8 sBigRootDesc[] = _(
+ "A held item that\n"
+ "boosts the power of\n"
+ "HP-stealing moves.");
+
+static const u8 sRazorClawDesc[] = _(
+ "A hooked claw that\n"
+ "ups the holder's\n"
+ "critical-hit ratio.");
+
+static const u8 sRazorFangDesc[] = _(
+ "A hold item that\n"
+ "may cause flinching\n"
+ "when the foe is hit.");
+
+static const u8 sEvioliteDesc[] = _(
+ "Raises the Def and\n"
+ "Sp. Def of Pokémon\n"
+ "that can evolve.");
+
+static const u8 sFloatStoneDesc[] = _(
+ "It's so light that\n"
+ "when held, it halves\n"
+ "a Pokémon's weight.");
+
+static const u8 sRockyHelmetDesc[] = _(
+ "Hurts the foe if\n"
+ "they touch its\n"
+ "holder.");
+
+static const u8 sAirBalloonDesc[] = _(
+ "Elevates the holder\n"
+ "in the air. If hit,\n"
+ "this item will burst.");
+
+static const u8 sRedCardDesc[] = _(
+ "Switches out the\n"
+ "foe if they hit the\n"
+ "holder.");
+
+static const u8 sRingTargetDesc[] = _(
+ "Moves that wouldn't\n"
+ "have effect will\n"
+ "land on its holder.");
+
+static const u8 sBindingBandDesc[] = _(
+ "Increases the\n"
+ "power of binding\n"
+ "moves when held.");
+
+static const u8 sEjectButtonDesc[] = _(
+ "Switches out the\n"
+ "user if they're hit\n"
+ "by the foe.");
+
+static const u8 sWeaknessPolicyDesc[] = _(
+ "If hit by a Super\n"
+ "Effective move, ups\n"
+ "Atk and Sp. Atk.");
+
+static const u8 sAssaultVestDesc[] = _(
+ "Raises Sp. Def but\n"
+ "prevents the use\n"
+ "of status moves.");
+
+static const u8 sSafetyGogglesDesc[] = _(
+ "Protect from\n"
+ "weather damage and\n"
+ "powder moves.");
+
+static const u8 sAdrenalineOrbDesc[] = _(
+ "Boosts Speed if the\n"
+ "user is intimidated,\n"
+ "but only one time.");
+
+static const u8 sTerrainExtenderDesc[] = _(
+ "Extends the length\n"
+ "of the active\n"
+ "battle terrain.");
+
+static const u8 sProtectivePadsDesc[] = _(
+ "Guard the holder\n"
+ "from contact move\n"
+ "effects.");
+
+static const u8 sThroatSprayDesc[] = _(
+ "Raises Sp. Atk. if\n"
+ "a Pokémon is hit by\n"
+ "a sound-based move.");
+
+static const u8 sEjectPackDesc[] = _(
+ "Forces the user to\n"
+ "switch if its stats\n"
+ "are lowered.");
+
+static const u8 sHeavyDutyBootsDesc[] = _(
+ "Boots that prevent\n"
+ "effects of traps\n"
+ "set in the field.");
+
+static const u8 sBlunderPolicyDesc[] = _(
+ "Raises Speed if\n"
+ "the user misses\n"
+ "due to Accuracy.");
+
+static const u8 sRoomServiceDesc[] = _(
+ "Lowers Speed if\n"
+ "Trick Room is\n"
+ "active.");
+
+static const u8 sUtilityUmbrellaDesc[] = _(
+ "An umbrella that\n"
+ "protects from\n"
+ "weather effects.");
// Berries
static const u8 sCheriBerryDesc[] = _(
@@ -504,7 +2670,7 @@ static const u8 sCheriBerryDesc[] = _(
static const u8 sChestoBerryDesc[] = _(
"A hold item that\n"
- "awakens POKéMON\n"
+ "awakens Pokémon\n"
"in battle.");
static const u8 sPechaBerryDesc[] = _(
@@ -519,7 +2685,7 @@ static const u8 sRawstBerryDesc[] = _(
static const u8 sAspearBerryDesc[] = _(
"A hold item that\n"
- "defrosts POKéMON\n"
+ "defrosts Pokémon\n"
"in battle.");
static const u8 sLeppaBerryDesc[] = _(
@@ -543,9 +2709,15 @@ static const u8 sLumBerryDesc[] = _(
"problem in battle.");
static const u8 sSitrusBerryDesc[] = _(
+#if I_SITRUS_BERRY_HEAL >= GEN_4
+ "A hold item that\n"
+ "restores the user's\n"
+ "HP a little.");
+#else
"A hold item that\n"
"restores 30 HP in\n"
"battle.");
+#endif
static const u8 sFigyBerryDesc[] = _(
"A hold item that\n"
@@ -575,126 +2747,216 @@ static const u8 sIapapaBerryDesc[] = _(
static const u8 sRazzBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow RAZZ.");
+ "to grow Razz.");
static const u8 sBlukBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow BLUK.");
+ "to grow Bluk.");
static const u8 sNanabBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow NANAB.");
+ "to grow Nanab.");
static const u8 sWepearBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow WEPEAR.");
+ "to grow Wepear.");
static const u8 sPinapBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow PINAP.");
+ "to grow Pinap.");
static const u8 sPomegBerryDesc[] = _(
- "Makes a POKéMON\n"
+ "Makes a Pokémon\n"
"friendly but lowers\n"
"base HP.");
static const u8 sKelpsyBerryDesc[] = _(
- "Makes a POKéMON\n"
+ "Makes a Pokémon\n"
"friendly but lowers\n"
- "base ATTACK.");
+ "base Attack.");
static const u8 sQualotBerryDesc[] = _(
- "Makes a POKéMON\n"
+ "Makes a Pokémon\n"
"friendly but lowers\n"
- "base DEFENSE.");
+ "base Defense.");
static const u8 sHondewBerryDesc[] = _(
- "Makes a POKéMON\n"
+ "Makes a Pokémon\n"
"friendly but lowers\n"
- "base SP. ATK.");
+ "base Sp. Atk.");
static const u8 sGrepaBerryDesc[] = _(
- "Makes a POKéMON\n"
+ "Makes a Pokémon\n"
"friendly but lowers\n"
- "base SP. DEF.");
+ "base Sp. Def.");
static const u8 sTamatoBerryDesc[] = _(
- "Makes a POKéMON\n"
+ "Makes a Pokémon\n"
"friendly but lowers\n"
- "base SPEED.");
+ "base Speed.");
static const u8 sCornnBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow CORNN.");
+ "to grow Cornn.");
static const u8 sMagostBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow MAGOST.");
+ "to grow Magost.");
static const u8 sRabutaBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow RABUTA.");
+ "to grow Rabuta.");
static const u8 sNomelBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow NOMEL.");
+ "to grow Nomel.");
static const u8 sSpelonBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow SPELON.");
+ "to grow Spelon.");
static const u8 sPamtreBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow PAMTRE.");
+ "to grow Pamtre.");
static const u8 sWatmelBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow WATMEL.");
+ "to grow Watmel.");
static const u8 sDurinBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow DURIN.");
+ "to grow Durin.");
static const u8 sBelueBerryDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
- "to grow BELUE.");
+ "to grow Belue.");
+
+static const u8 sChilanBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Normal\n"
+ "move.");
+
+static const u8 sOccaBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Fire\n"
+ "move if weak to it.");
+
+static const u8 sPasshoBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Water\n"
+ "move if weak to it.");
+
+static const u8 sWacanBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Electric\n"
+ "move if weak to it.");
+
+static const u8 sRindoBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Grass\n"
+ "move if weak to it.");
+
+static const u8 sYacheBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Ice\n"
+ "move if weak to it.");
+
+static const u8 sChopleBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Fighting\n"
+ "move if weak to it.");
+
+static const u8 sKebiaBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Poison\n"
+ "move if weak to it.");
+
+static const u8 sShucaBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Ground\n"
+ "move if weak to it.");
+
+static const u8 sCobaBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Flying\n"
+ "move if weak to it.");
+
+static const u8 sPayapaBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Psychic\n"
+ "move if weak to it.");
+
+static const u8 sTangaBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Bug\n"
+ "move if weak to it.");
+
+static const u8 sChartiBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Rock\n"
+ "move if weak to it.");
+
+static const u8 sKasibBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Ghost\n"
+ "move if weak to it.");
+
+static const u8 sHabanBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Dragon\n"
+ "move if weak to it.");
+
+static const u8 sColburBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Dark\n"
+ "move if weak to it.");
+
+static const u8 sBabiriBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Steel\n"
+ "move if weak to it.");
+
+static const u8 sRoseliBerryDesc[] = _(
+ "A hold item that\n"
+ "weakens a Fairy\n"
+ "move if weak to it.");
static const u8 sLiechiBerryDesc[] = _(
"A hold item that\n"
- "raises ATTACK in\n"
+ "raises Attack in\n"
"a pinch.");
static const u8 sGanlonBerryDesc[] = _(
"A hold item that\n"
- "raises DEFENSE in\n"
+ "raises Defense in\n"
"a pinch.");
static const u8 sSalacBerryDesc[] = _(
"A hold item that\n"
- "raises SPEED in\n"
+ "raises Speed in\n"
"a pinch.");
static const u8 sPetayaBerryDesc[] = _(
"A hold item that\n"
- "raises SP. ATK in\n"
+ "raises Sp. Atk in\n"
"a pinch.");
static const u8 sApicotBerryDesc[] = _(
"A hold item that\n"
- "raises SP. DEF in\n"
+ "raises Sp. Def in\n"
"a pinch.");
static const u8 sLansatBerryDesc[] = _(
@@ -708,414 +2970,45 @@ static const u8 sStarfBerryDesc[] = _(
"stat in a pinch.");
static const u8 sEnigmaBerryDesc[] = _(
+ "A hold item that\n"
+ "heals from super\n"
+ "effective moves.");
+
+static const u8 sMicleBerryDesc[] = _(
+ "When held, it ups\n"
+ "the Accuracy of a\n"
+ "move in a pinch.");
+
+static const u8 sCustapBerryDesc[] = _(
+ "It allows a Pokémon\n"
+ "in a pinch to move\n"
+ "first just once.");
+
+static const u8 sJabocaBerryDesc[] = _(
+ "If hit by a physical\n"
+ "move, it will hurt\n"
+ "the attacker a bit.");
+
+static const u8 sRowapBerryDesc[] = _(
+ "If hit by a special\n"
+ "move, it will hurt\n"
+ "the attacker a bit.");
+
+static const u8 sKeeBerryDesc[] = _(
+ "If hit by a physical\n"
+ "move, it raises the\n"
+ "Defense a bit.");
+
+static const u8 sMarangaBerryDesc[] = _(
+ "If hit by a special\n"
+ "move, it raises the\n"
+ "Sp. Def. a bit.");
+
+static const u8 sEnigmaBerryEReaderDesc[] = _(
"{POKEBLOCK} ingredient.\n"
"Plant in loamy soil\n"
"to grow a mystery.");
-// Hold items
-static const u8 sBrightPowderDesc[] = _(
- "A hold item that\n"
- "casts a glare to\n"
- "reduce accuracy.");
-
-static const u8 sWhiteHerbDesc[] = _(
- "A hold item that\n"
- "restores any\n"
- "lowered stat.");
-
-static const u8 sMachoBraceDesc[] = _(
- "A hold item that\n"
- "promotes growth,\n"
- "but reduces SPEED.");
-
-static const u8 sExpShareDesc[] = _(
- "A hold item that\n"
- "gets EXP. points\n"
- "from battles.");
-
-static const u8 sQuickClawDesc[] = _(
- "A hold item that\n"
- "occasionally allows\n"
- "the first strike.");
-
-static const u8 sSootheBellDesc[] = _(
- "A hold item that\n"
- "calms spirits and\n"
- "fosters friendship.");
-
-static const u8 sMentalHerbDesc[] = _(
- "A hold item that\n"
- "snaps POKéMON out\n"
- "of infatuation.");
-
-static const u8 sChoiceBandDesc[] = _(
- "Raises a move's\n"
- "power, but permits\n"
- "only that move.");
-
-static const u8 sKingsRockDesc[] = _(
- "A hold item that\n"
- "may cause flinching\n"
- "when the foe is hit.");
-
-static const u8 sSilverPowderDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "BUG-type moves.");
-
-static const u8 sAmuletCoinDesc[] = _(
- "Doubles money in\n"
- "battle if the\n"
- "holder takes part.");
-
-static const u8 sCleanseTagDesc[] = _(
- "A hold item that\n"
- "helps repel wild\n"
- "POKéMON.");
-
-static const u8 sSoulDewDesc[] = _(
- "Hold item: raises\n"
- "SP. ATK & SP. DEF of\n"
- "LATIOS & LATIAS.");
-
-static const u8 sDeepSeaToothDesc[] = _(
- "A hold item that\n"
- "raises the SP. ATK\n"
- "of CLAMPERL.");
-
-static const u8 sDeepSeaScaleDesc[] = _(
- "A hold item that\n"
- "raises the SP. DEF\n"
- "of CLAMPERL.");
-
-static const u8 sSmokeBallDesc[] = _(
- "A hold item that\n"
- "assures fleeing\n"
- "from wild POKéMON.");
-
-static const u8 sEverstoneDesc[] = _(
- "A wondrous hold\n"
- "item that prevents\n"
- "evolution.");
-
-static const u8 sFocusBandDesc[] = _(
- "A hold item that\n"
- "occasionally\n"
- "prevents fainting.");
-
-static const u8 sLuckyEggDesc[] = _(
- "A hold item that\n"
- "boosts EXP. points\n"
- "earned in battle.");
-
-static const u8 sScopeLensDesc[] = _(
- "A hold item that\n"
- "improves the\n"
- "critical-hit rate.");
-
-static const u8 sMetalCoatDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "STEEL-type moves.");
-
-static const u8 sLeftoversDesc[] = _(
- "A hold item that\n"
- "gradually restores\n"
- "HP in battle.");
-
-static const u8 sDragonScaleDesc[] = _(
- "A strange scale\n"
- "held by DRAGON-\n"
- "type POKéMON.");
-
-static const u8 sLightBallDesc[] = _(
- "A hold item that\n"
- "raises the SP. ATK\n"
- "of PIKACHU.");
-
-static const u8 sSoftSandDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "GROUND-type moves.");
-
-static const u8 sHardStoneDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "ROCK-type moves.");
-
-static const u8 sMiracleSeedDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "GRASS-type moves.");
-
-static const u8 sBlackGlassesDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "DARK-type moves.");
-
-static const u8 sBlackBeltDesc[] = _(
- "A hold item that\n"
- "boosts FIGHTING-\n"
- "type moves.");
-
-static const u8 sMagnetDesc[] = _(
- "A hold item that\n"
- "boosts ELECTRIC-\n"
- "type moves.");
-
-static const u8 sMysticWaterDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "WATER-type moves.");
-
-static const u8 sSharpBeakDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "FLYING-type moves.");
-
-static const u8 sPoisonBarbDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "POISON-type moves.");
-
-static const u8 sNeverMeltIceDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "ICE-type moves.");
-
-static const u8 sSpellTagDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "GHOST-type moves.");
-
-static const u8 sTwistedSpoonDesc[] = _(
- "A hold item that\n"
- "boosts PSYCHIC-\n"
- "type moves.");
-
-static const u8 sCharcoalDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "FIRE-type moves.");
-
-static const u8 sDragonFangDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "DRAGON-type moves.");
-
-static const u8 sSilkScarfDesc[] = _(
- "A hold item that\n"
- "raises the power of\n"
- "NORMAL-type moves.");
-
-static const u8 sUpGradeDesc[] = _(
- "A peculiar box made\n"
- "by SILPH CO.");
-
-static const u8 sShellBellDesc[] = _(
- "A hold item that\n"
- "restores HP upon\n"
- "striking the foe.");
-
-static const u8 sSeaIncenseDesc[] = _(
- "A hold item that\n"
- "slightly boosts\n"
- "WATER-type moves.");
-
-static const u8 sLaxIncenseDesc[] = _(
- "A hold item that\n"
- "slightly lowers the\n"
- "foe's accuracy.");
-
-static const u8 sLuckyPunchDesc[] = _(
- "A hold item that\n"
- "raises CHANSEY's\n"
- "critical-hit rate.");
-
-static const u8 sMetalPowderDesc[] = _(
- "A hold item that\n"
- "raises DITTO's\n"
- "DEFENSE.");
-
-static const u8 sThickClubDesc[] = _(
- "A hold item that \n"
- "raises CUBONE or\n"
- "MAROWAK's ATTACK.");
-
-static const u8 sStickDesc[] = _(
- "A hold item that\n"
- "raises FARFETCH'D's\n"
- "critical-hit ratio.");
-
-static const u8 sRedScarfDesc[] = _(
- "A hold item that\n"
- "raises COOL in\n"
- "CONTESTS.");
-
-static const u8 sBlueScarfDesc[] = _(
- "A hold item that\n"
- "raises BEAUTY in\n"
- "CONTESTS.");
-
-static const u8 sPinkScarfDesc[] = _(
- "A hold item that\n"
- "raises CUTE in\n"
- "CONTESTS.");
-
-static const u8 sGreenScarfDesc[] = _(
- "A hold item that\n"
- "raises SMART in\n"
- "CONTESTS.");
-
-static const u8 sYellowScarfDesc[] = _(
- "A hold item that\n"
- "raises TOUGH in\n"
- "CONTESTS.");
-
-// Key items
-static const u8 sMachBikeDesc[] = _(
- "A folding bicycle\n"
- "that doubles your\n"
- "speed or better.");
-
-static const u8 sCoinCaseDesc[] = _(
- "A case that holds\n"
- "up to 9,999 COINS.");
-
-static const u8 sItemfinderDesc[] = _(
- "A device that\n"
- "signals an invisible\n"
- "item by sound.");
-
-static const u8 sOldRodDesc[] = _(
- "Use by any body of\n"
- "water to fish for\n"
- "wild POKéMON.");
-
-static const u8 sGoodRodDesc[] = _(
- "A decent fishing\n"
- "rod for catching\n"
- "wild POKéMON.");
-
-static const u8 sSuperRodDesc[] = _(
- "The best fishing\n"
- "rod for catching\n"
- "wild POKéMON.");
-
-static const u8 sSSTicketDesc[] = _(
- "The ticket required\n"
- "for sailing on a\n"
- "ferry.");
-
-static const u8 sContestPassDesc[] = _(
- "The pass required\n"
- "for entering\n"
- "POKéMON CONTESTS.");
-
-static const u8 sWailmerPailDesc[] = _(
- "A tool used for\n"
- "watering BERRIES\n"
- "and plants.");
-
-static const u8 sDevonGoodsDesc[] = _(
- "A package that\n"
- "contains DEVON's\n"
- "machine parts.");
-
-static const u8 sSootSackDesc[] = _(
- "A sack used to\n"
- "gather and hold\n"
- "volcanic ash.");
-
-static const u8 sBasementKeyDesc[] = _(
- "The key for NEW\n"
- "MAUVILLE beneath\n"
- "MAUVILLE CITY.");
-
-static const u8 sAcroBikeDesc[] = _(
- "A folding bicycle\n"
- "capable of jumps\n"
- "and wheelies.");
-
-static const u8 sPokeblockCaseDesc[] = _(
- "A case for holding\n"
- "{POKEBLOCK}S made with\n"
- "a BERRY BLENDER.");
-
-static const u8 sLetterDesc[] = _(
- "A letter to STEVEN\n"
- "from the PRESIDENT\n"
- "of the DEVON CORP.");
-
-static const u8 sEonTicketDesc[] = _(
- "The ticket for a\n"
- "ferry to a distant\n"
- "southern island.");
-
-static const u8 sRedOrbDesc[] = _(
- "A red, glowing orb\n"
- "said to contain an\n"
- "ancient power.");
-
-static const u8 sBlueOrbDesc[] = _(
- "A blue, glowing orb\n"
- "said to contain an\n"
- "ancient power.");
-
-static const u8 sScannerDesc[] = _(
- "A device found\n"
- "inside the\n"
- "ABANDONED SHIP.");
-
-static const u8 sGoGogglesDesc[] = _(
- "Nifty goggles that\n"
- "protect eyes from\n"
- "desert sandstorms.");
-
-static const u8 sMeteoriteDesc[] = _(
- "A meteorite found\n"
- "at METEOR FALLS.");
-
-static const u8 sRoom1KeyDesc[] = _(
- "A key that opens a\n"
- "door inside the\n"
- "ABANDONED SHIP.");
-
-static const u8 sRoom2KeyDesc[] = _(
- "A key that opens a\n"
- "door inside the\n"
- "ABANDONED SHIP.");
-
-static const u8 sRoom4KeyDesc[] = _(
- "A key that opens a\n"
- "door inside the\n"
- "ABANDONED SHIP.");
-
-static const u8 sRoom6KeyDesc[] = _(
- "A key that opens a\n"
- "door inside the\n"
- "ABANDONED SHIP.");
-
-static const u8 sStorageKeyDesc[] = _(
- "The key to the\n"
- "storage inside the\n"
- "ABANDONED SHIP.");
-
-static const u8 sRootFossilDesc[] = _(
- "A fossil of an\n"
- "ancient, seafloor-\n"
- "dwelling POKéMON.");
-
-static const u8 sClawFossilDesc[] = _(
- "A fossil of an\n"
- "ancient, seafloor-\n"
- "dwelling POKéMON.");
-
-static const u8 sDevonScopeDesc[] = _(
- "A device by DEVON\n"
- "that signals any\n"
- "unseeable POKéMON.");
-
// TMs/HMs
static const u8 sTM01Desc[] = _(
"Powerful, but makes\n"
@@ -1133,8 +3026,8 @@ static const u8 sTM03Desc[] = _(
"that may confuse.");
static const u8 sTM04Desc[] = _(
- "Raises SP. ATK and\n"
- "SP. DEF by focusing\n"
+ "Raises Sp. Atk and\n"
+ "Sp. Def by focusing\n"
"the mind.");
static const u8 sTM05Desc[] = _(
@@ -1150,12 +3043,12 @@ static const u8 sTM06Desc[] = _(
static const u8 sTM07Desc[] = _(
"Creates a hailstorm\n"
"that damages all\n"
- "types except ICE.");
+ "types except Ice.");
static const u8 sTM08Desc[] = _(
"Bulks up the body\n"
"to boost both\n"
- "ATTACK & DEFENSE.");
+ "Attack & Defense.");
static const u8 sTM09Desc[] = _(
"Shoots 2 to 5 seeds\n"
@@ -1165,11 +3058,11 @@ static const u8 sTM09Desc[] = _(
static const u8 sTM10Desc[] = _(
"The attack power\n"
"varies among\n"
- "different POKéMON.");
+ "different Pokémon.");
static const u8 sTM11Desc[] = _(
"Raises the power of\n"
- "FIRE-type moves\n"
+ "Fire-type moves\n"
"for 5 turns.");
static const u8 sTM12Desc[] = _(
@@ -1195,7 +3088,7 @@ static const u8 sTM15Desc[] = _(
static const u8 sTM16Desc[] = _(
"Creates a wall of\n"
"light that lowers\n"
- "SP. ATK damage.");
+ "Sp. Atk damage.");
static const u8 sTM17Desc[] = _(
"Negates all damage,\n"
@@ -1204,7 +3097,7 @@ static const u8 sTM17Desc[] = _(
static const u8 sTM18Desc[] = _(
"Raises the power of\n"
- "WATER-type moves\n"
+ "Water-type moves\n"
"for 5 turns.");
static const u8 sTM19Desc[] = _(
@@ -1230,7 +3123,7 @@ static const u8 sTM22Desc[] = _(
static const u8 sTM23Desc[] = _(
"Slams the foe with\n"
"a hard tail. It may\n"
- "lower DEFENSE.");
+ "lower Defense.");
static const u8 sTM24Desc[] = _(
"A powerful electric\n"
@@ -1260,16 +3153,16 @@ static const u8 sTM28Desc[] = _(
static const u8 sTM29Desc[] = _(
"A powerful psychic\n"
"attack that may\n"
- "lower SP. DEF.");
+ "lower Sp. Def.");
static const u8 sTM30Desc[] = _(
"Hurls a dark lump\n"
"at the foe. It may\n"
- "lower SP. DEF.");
+ "lower Sp. Def.");
static const u8 sTM31Desc[] = _(
"Destroys barriers\n"
- "like LIGHT SCREEN\n"
+ "like Light Screen\n"
"and causes damage.");
static const u8 sTM32Desc[] = _(
@@ -1310,7 +3203,7 @@ static const u8 sTM38Desc[] = _(
static const u8 sTM39Desc[] = _(
"Stops the foe from\n"
"moving with rocks.\n"
- "May lower SPEED.");
+ "May lower Speed.");
static const u8 sTM40Desc[] = _(
"An extremely fast\n"
@@ -1323,7 +3216,7 @@ static const u8 sTM41Desc[] = _(
"move in a row.");
static const u8 sTM42Desc[] = _(
- "Raises ATTACK when\n"
+ "Raises Attack when\n"
"poisoned, burned,\n"
"or paralyzed.");
@@ -1365,8 +3258,157 @@ static const u8 sTM49Desc[] = _(
static const u8 sTM50Desc[] = _(
"Enables full-power\n"
"attack, but sharply\n"
- "lowers SP. ATK.");
+ "lowers Sp. Atk.");
+static const u8 sTM51Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM52Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM53Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM54Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM55Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM56Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM57Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM58Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM59Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM60Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM61Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM62Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM63Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM64Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM65Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM66Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM67Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM68Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM69Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM70Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM71Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM72Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM73Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM74Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM75Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM76Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM77Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM78Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM79Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM80Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM81Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM82Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM83Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM84Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM85Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM86Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM87Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM88Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM89Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM90Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM91Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM92Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM93Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM94Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM95Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM96Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM97Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM98Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM99Desc[] = _( // Todo
+ "?????");
+
+static const u8 sTM100Desc[] = _( // Todo
+ "?????");
static const u8 sHM01Desc[] = _(
"Attacks the foe\n"
@@ -1396,7 +3438,7 @@ static const u8 sHM05Desc[] = _(
static const u8 sHM06Desc[] = _(
"A rock-crushingly\n"
"tough attack that\n"
- "may lower DEFENSE.");
+ "may lower Defense.");
static const u8 sHM07Desc[] = _(
"Attacks the foe\n"
@@ -1408,81 +3450,134 @@ static const u8 sHM08Desc[] = _(
"the 1st turn, then\n"
"attacks next turn.");
-// FireRed/LeafGreen key items
-static const u8 sOaksParcelDesc[] = _(
- "A parcel for PROF.\n"
- "OAK from a POKéMON\n"
- "MART's clerk.");
+// Charms
+static const u8 sOvalCharmDesc[] = _(
+ "Raises the chance\n"
+ "of finding eggs\n"
+ "at the daycare.");
-static const u8 sPokeFluteDesc[] = _(
- "A sweet-sounding\n"
- "flute that awakens\n"
- "POKéMON.");
+static const u8 sShinyCharmDesc[] = _(
+ "A charm that will\n"
+ "raise the chance\n"
+ "of Shiny Pokémon.");
-static const u8 sSecretKeyDesc[] = _(
- "The key to the\n"
- "CINNABAR ISLAND\n"
- "GYM's entrance.");
+static const u8 sCatchingCharmDesc[] = _(
+ "A charm that raises\n"
+ "the chance of\n"
+ "Critical Captures.");
-static const u8 sBikeVoucherDesc[] = _(
- "A voucher for\n"
- "obtaining a bicycle\n"
- "from the BIKE SHOP.");
+static const u8 sExpCharmDesc[] = _(
+ "A charm that raises\n"
+ "the amount of Exp.\n"
+ "earned in battle.");
-static const u8 sGoldTeethDesc[] = _(
- "Gold dentures lost\n"
- "by the SAFARI\n"
- "ZONE's WARDEN.");
+// Form-changing Key Items
+static const u8 sRotomCatalogDesc[] = _(
+ "A catalog full of\n"
+ "deviced liked by\n"
+ "Rotom.");
-static const u8 sOldAmberDesc[] = _(
- "A stone containing\n"
- "the genes of an\n"
- "ancient POKéMON.");
+static const u8 sGracideaDesc[] = _(
+ "Bouquets made with\n"
+ "it are offered as a\n"
+ "token of gratitude.");
-static const u8 sCardKeyDesc[] = _(
- "A card-type door\n"
- "key used in SILPH\n"
- "CO's office.");
+static const u8 sRevealGlassDesc[] = _(
+ "This glass returns\n"
+ "a Pokémon back to\n"
+ "its original form.");
-static const u8 sLiftKeyDesc[] = _(
- "An elevator key\n"
- "used in TEAM\n"
- "ROCKET's HIDEOUT.");
+static const u8 sDNASplicersDesc[] = _(
+ "Splicer that fuses\n"
+ "Kyurem and a\n"
+ "certain Pokémon.");
-static const u8 sHelixFossilDesc[] = _(
- "A piece of an\n"
- "ancient marine\n"
- "POKéMON's seashell.");
+static const u8 sZygardeCubeDesc[] = _(
+ "An item to store\n"
+ "Zygarde Cores and\n"
+ "Cells.");
-static const u8 sDomeFossilDesc[] = _(
- "A piece of an\n"
- "ancient marine\n"
- "POKéMON's shell.");
+static const u8 sPrisonBottleDesc[] = _(
+ "A bottle used to\n"
+ "seal a certain\n"
+ "Pokémon long ago.");
-static const u8 sSilphScopeDesc[] = _(
- "SILPH CO's scope\n"
- "makes unseeable\n"
- "POKéMON visible.");
+static const u8 sNSolarizerDesc[] = _(
+ "A device to fuse\n"
+ "and split Necrozma\n"
+ "using a Solgaleo.");
+static const u8 sNLunarizerDesc[] = _(
+ "A device to fuse\n"
+ "and split Necrozma\n"
+ "using a Lunala.");
+
+static const u8 sReinsOfUnityDesc[] = _(
+ "Reins that unite\n"
+ "Calyrex with its\n"
+ "beloved steed.");
+
+// Battle Mechanic Key Items
+static const u8 sMegaRingDesc[] = _(
+ "Enables {PKMN} holding\n"
+ "their Mega Stone to\n"
+ "Mega Evolve.");
+
+static const u8 sZPowerRingDesc[] = _(
+ "A strange ring\n"
+ "that enables\n"
+ "Z-Move usage.");
+
+static const u8 sDynamaxBandDesc[] = _(
+ "A band carrying a\n"
+ "Wishing Star that\n"
+ "allows Dynamaxing.");
+
+// Misc. Key Items
static const u8 sBicycleDesc[] = _(
"A folding bicycle\n"
"that is faster than\n"
- "the RUNNING SHOES.");
+ "the Running Shoes.");
+
+static const u8 sMachBikeDesc[] = _(
+ "A folding bicycle\n"
+ "that doubles your\n"
+ "speed or better.");
+
+static const u8 sAcroBikeDesc[] = _(
+ "A folding bicycle\n"
+ "capable of jumps\n"
+ "and wheelies.");
+
+static const u8 sOldRodDesc[] = _(
+ "Use by any body of\n"
+ "water to fish for\n"
+ "wild Pokémon.");
+
+static const u8 sGoodRodDesc[] = _(
+ "A decent fishing\n"
+ "rod for catching\n"
+ "wild Pokémon.");
+
+static const u8 sSuperRodDesc[] = _(
+ "The best fishing\n"
+ "rod for catching\n"
+ "wild Pokémon.");
+
+static const u8 sDowsingMachineDesc[] = _(
+ "A device that\n"
+ "signals an invisible\n"
+ "item by sound.");
static const u8 sTownMapDesc[] = _(
"Can be viewed\n"
"anytime. Shows your\n"
"present location.");
-static const u8 sVSSeekerDesc[] = _(
+static const u8 sVsSeekerDesc[] = _(
"A rechargeable unit\n"
"that flags battle-\n"
- "ready TRAINERS.");
-
-static const u8 sFameCheckerDesc[] = _(
- "Stores information\n"
- "on famous people\n"
- "for instant recall.");
+ "ready Trainers.");
static const u8 sTMCaseDesc[] = _(
"A convenient case \n"
@@ -1492,43 +3587,202 @@ static const u8 sTMCaseDesc[] = _(
static const u8 sBerryPouchDesc[] = _(
"A convenient\n"
"container that\n"
- "holds BERRIES.");
+ "holds Berries.");
+
+static const u8 sPokemonBoxLinkDesc[] = _(
+ "This device grants\n"
+ "access to the {PKMN}\n"
+ "Storage System.");
+
+static const u8 sCoinCaseDesc[] = _(
+ "A case that holds\n"
+ "up to 9,999 Coins.");
+
+static const u8 sPowderJarDesc[] = _(
+ "Stores Berry\n"
+ "Powder made using\n"
+ "a Berry Crusher.");
+
+static const u8 sWailmerPailDesc[] = _(
+ "A tool used for\n"
+ "watering Berries\n"
+ "and plants.");
+
+static const u8 sPokeRadarDesc[] = _(
+ "A tool used to\n"
+ "search out Pokémon\n"
+ "hiding in grass.");
+
+static const u8 sPokeblockCaseDesc[] = _(
+ "A case for holding\n"
+ "{POKEBLOCK}s made with\n"
+ "a Berry Blender.");
+
+static const u8 sSootSackDesc[] = _(
+ "A sack used to\n"
+ "gather and hold\n"
+ "volcanic ash.");
+
+static const u8 sPokeFluteDesc[] = _(
+ "A sweet-sounding\n"
+ "flute that awakens\n"
+ "Pokémon.");
+
+static const u8 sFameCheckerDesc[] = _(
+ "Stores information\n"
+ "on famous people\n"
+ "for instant recall.");
static const u8 sTeachyTVDesc[] = _(
"A TV set tuned to\n"
"an advice program\n"
- "for TRAINERS.");
+ "for Trainers.");
+
+// Story Key Items
+static const u8 sSSTicketDesc[] = _(
+ "The ticket required\n"
+ "for sailing on a\n"
+ "ferry.");
+
+static const u8 sEonTicketDesc[] = _(
+ "The ticket for a\n"
+ "ferry to a distant\n"
+ "southern island.");
+
+static const u8 sMysticTicketDesc[] = _(
+ "A ticket required\n"
+ "to board the ship\n"
+ "to Navel Rock.");
+
+static const u8 sAuroraTicketDesc[] = _(
+ "A ticket required\n"
+ "to board the ship\n"
+ "to Birth Island.");
+
+static const u8 sOldSeaMapDesc[] = _(
+ "A faded sea chart\n"
+ "that shows the way\n"
+ "to a certain island.");
+
+static const u8 sLetterDesc[] = _(
+ "A letter to Steven\n"
+ "from the President\n"
+ "of the Devon Corp.");
+
+static const u8 sDevonPartsDesc[] = _(
+ "A package that\n"
+ "contains Devon's\n"
+ "machine parts.");
+
+static const u8 sGoGogglesDesc[] = _(
+ "Nifty goggles that\n"
+ "protect eyes from\n"
+ "desert sandstorms.");
+
+static const u8 sDevonScopeDesc[] = _(
+ "A device by Devon\n"
+ "that signals any\n"
+ "unseeable Pokémon.");
+
+static const u8 sBasementKeyDesc[] = _(
+ "The key for New\n"
+ "Mauville beneath\n"
+ "Mauville City.");
+
+static const u8 sScannerDesc[] = _(
+ "A device found\n"
+ "inside the\n"
+ "Abandoned Ship.");
+
+static const u8 sStorageKeyDesc[] = _(
+ "The key to the\n"
+ "storage inside the\n"
+ "Abandoned Ship.");
+
+static const u8 sKeyToRoom1Desc[] = _(
+ "A key that opens a\n"
+ "door inside the\n"
+ "Abandoned Ship.");
+
+static const u8 sKeyToRoom2Desc[] = _(
+ "A key that opens a\n"
+ "door inside the\n"
+ "Abandoned Ship.");
+
+static const u8 sKeyToRoom4Desc[] = _(
+ "A key that opens a\n"
+ "door inside the\n"
+ "Abandoned Ship.");
+
+static const u8 sKeyToRoom6Desc[] = _(
+ "A key that opens a\n"
+ "door inside the\n"
+ "Abandoned Ship.");
+
+static const u8 sMeteoriteDesc[] = _(
+ "A meteorite found\n"
+ "at Meteor Falls.");
+
+static const u8 sMagmaEmblemDesc[] = _(
+ "A medal-like item in\n"
+ "the same shape as\n"
+ "Team Magma's mark.");
+
+static const u8 sContestPassDesc[] = _(
+ "The pass required\n"
+ "for entering\n"
+ "Pokémon Contests.");
+
+static const u8 sOaksParcelDesc[] = _(
+ "A parcel for Prof.\n"
+ "Oak from a Pokémon\n"
+ "Mart's clerk.");
+
+static const u8 sSecretKeyDesc[] = _(
+ "The key to the\n"
+ "Cinnabar Island\n"
+ "Gym's entrance.");
+
+static const u8 sBikeVoucherDesc[] = _(
+ "A voucher for\n"
+ "obtaining a bicycle\n"
+ "from the Bike Shop.");
+
+static const u8 sGoldTeethDesc[] = _(
+ "Gold dentures lost\n"
+ "by the Safari\n"
+ "Zone's Warden.");
+
+static const u8 sCardKeyDesc[] = _(
+ "A card-type door\n"
+ "key used in Silph\n"
+ "Co's office.");
+
+static const u8 sLiftKeyDesc[] = _(
+ "An elevator key\n"
+ "used in Team\n"
+ "Rocket's Hideout.");
+
+static const u8 sSilphScopeDesc[] = _(
+ "Silph Co's scope\n"
+ "makes unseeable\n"
+ "POKéMON visible.");
static const u8 sTriPassDesc[] = _(
"A pass for ferries\n"
- "between ONE, TWO,\n"
- "and THREE ISLAND.");
+ "between One, Two,\n"
+ "and Three Island.");
static const u8 sRainbowPassDesc[] = _(
"For ferries serving\n"
- "VERMILION and the\n"
- "SEVII ISLANDS.");
+ "Vermilion and the\n"
+ "Sevii Islands.");
static const u8 sTeaDesc[] = _(
"A thirst-quenching\n"
"tea prepared by an\n"
"old lady.");
-static const u8 sMysticTicketDesc[] = _(
- "A ticket required\n"
- "to board the ship\n"
- "to NAVEL ROCK.");
-
-static const u8 sAuroraTicketDesc[] = _(
- "A ticket required\n"
- "to board the ship\n"
- "to BIRTH ISLAND.");
-
-static const u8 sPowderJarDesc[] = _(
- "Stores BERRY\n"
- "POWDER made using\n"
- "a BERRY CRUSHER.");
-
static const u8 sRubyDesc[] = _(
"An exquisite, red-\n"
"glowing gem that\n"
@@ -1538,14 +3792,3 @@ static const u8 sSapphireDesc[] = _(
"A brilliant blue gem\n"
"that symbolizes\n"
"honesty.");
-
-// Emerald-specific key items
-static const u8 sMagmaEmblemDesc[] = _(
- "A medal-like item in\n"
- "the same shape as\n"
- "TEAM MAGMA's mark.");
-
-static const u8 sOldSeaMapDesc[] = _(
- "A faded sea chart\n"
- "that shows the way\n"
- "to a certain island.");
diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h
index e3c548e2d3..5f6bcfb0e4 100644
--- a/src/data/text/move_descriptions.h
+++ b/src/data/text/move_descriptions.h
@@ -55,7 +55,7 @@ static const u8 sRazorWindDescription[] = _(
static const u8 sSwordsDanceDescription[] = _(
"A fighting dance that\n"
- "sharply raises ATTACK.");
+ "sharply raises Attack.");
static const u8 sCutDescription[] = _(
"Cuts the foe with sharp\n"
@@ -79,7 +79,11 @@ static const u8 sFlyDescription[] = _(
static const u8 sBindDescription[] = _(
"Binds and squeezes the foe\n"
+#if B_BINDING_TURNS >= GEN_5
+ "for 4 or 5 turns.");
+#else
"for 2 to 5 turns.");
+#endif
static const u8 sSlamDescription[] = _(
"Slams the foe with a long\n"
@@ -139,7 +143,11 @@ static const u8 sBodySlamDescription[] = _(
static const u8 sWrapDescription[] = _(
"Wraps and squeezes the foe\n"
+#if B_BINDING_TURNS >= GEN_5
+ "4 or 5 times with vines, etc.");
+#else
"2 to 5 times with vines, etc.");
+#endif
static const u8 sTakeDownDescription[] = _(
"A reckless charge attack\n"
@@ -155,7 +163,7 @@ static const u8 sDoubleEdgeDescription[] = _(
static const u8 sTailWhipDescription[] = _(
"Wags the tail to lower the\n"
- "foe's DEFENSE.");
+ "foe's Defense.");
static const u8 sPoisonStingDescription[] = _(
"A toxic attack with barbs,\n"
@@ -171,7 +179,7 @@ static const u8 sPinMissileDescription[] = _(
static const u8 sLeerDescription[] = _(
"Frightens the foe with a\n"
- "leer to lower DEFENSE.");
+ "leer to lower Defense.");
static const u8 sBiteDescription[] = _(
"Bites with vicious fangs.\n"
@@ -179,7 +187,7 @@ static const u8 sBiteDescription[] = _(
static const u8 sGrowlDescription[] = _(
"Growls cutely to reduce the\n"
- "foe's ATTACK.");
+ "foe's Attack.");
static const u8 sRoarDescription[] = _(
"Makes the foe flee to end\n"
@@ -203,7 +211,7 @@ static const u8 sDisableDescription[] = _(
static const u8 sAcidDescription[] = _(
"Sprays a hide-melting acid.\n"
- "May lower DEFENSE.");
+ "May lower Defense.");
static const u8 sEmberDescription[] = _(
"A weak fire attack that may\n"
@@ -243,11 +251,11 @@ static const u8 sPsybeamDescription[] = _(
static const u8 sBubbleBeamDescription[] = _(
"Forcefully sprays bubbles\n"
- "that may lower SPEED.");
+ "that may lower Speed.");
static const u8 sAuroraBeamDescription[] = _(
"Fires a rainbow-colored\n"
- "beam that may lower ATTACK.");
+ "beam that may lower Attack.");
static const u8 sHyperBeamDescription[] = _(
"Powerful, but leaves the\n"
@@ -295,7 +303,7 @@ static const u8 sLeechSeedDescription[] = _(
static const u8 sGrowthDescription[] = _(
"Forces the body to grow\n"
- "and heightens SP. ATK.");
+ "and heightens Sp. Atk.");
static const u8 sRazorLeafDescription[] = _(
"Cuts the enemy with leaves.\n"
@@ -323,7 +331,7 @@ static const u8 sPetalDanceDescription[] = _(
static const u8 sStringShotDescription[] = _(
"Binds the foe with string\n"
- "to reduce its SPEED.");
+ "to reduce its Speed.");
static const u8 sDragonRageDescription[] = _(
"Launches shock waves that\n"
@@ -331,7 +339,11 @@ static const u8 sDragonRageDescription[] = _(
static const u8 sFireSpinDescription[] = _(
"Traps the foe in a ring of\n"
+#if B_BINDING_TURNS >= GEN_5
+ "fire for 4 or 5 turns.");
+#else
"fire for 2 to 5 turns.");
+#endif
static const u8 sThunderShockDescription[] = _(
"An electrical attack that\n"
@@ -375,7 +387,7 @@ static const u8 sConfusionDescription[] = _(
static const u8 sPsychicDescription[] = _(
"A powerful psychic attack\n"
- "that may lower SP. DEF.");
+ "that may lower Sp. Def.");
static const u8 sHypnosisDescription[] = _(
"A hypnotizing move that\n"
@@ -383,18 +395,18 @@ static const u8 sHypnosisDescription[] = _(
static const u8 sMeditateDescription[] = _(
"Meditates in a peaceful\n"
- "fashion to raise ATTACK.");
+ "fashion to raise Attack.");
static const u8 sAgilityDescription[] = _(
"Relaxes the body to sharply\n"
- "boost SPEED.");
+ "boost Speed.");
static const u8 sQuickAttackDescription[] = _(
"An extremely fast attack\n"
"that always strikes first.");
static const u8 sRageDescription[] = _(
- "Raises the user's ATTACK\n"
+ "Raises the user's Attack\n"
"every time it is hit.");
static const u8 sTeleportDescription[] = _(
@@ -411,7 +423,7 @@ static const u8 sMimicDescription[] = _(
static const u8 sScreechDescription[] = _(
"Emits a screech to sharply\n"
- "reduce the foe's DEFENSE.");
+ "reduce the foe's Defense.");
static const u8 sDoubleTeamDescription[] = _(
"Creates illusory copies to\n"
@@ -423,7 +435,7 @@ static const u8 sRecoverDescription[] = _(
static const u8 sHardenDescription[] = _(
"Stiffens the body's \n"
- "muscles to raise DEFENSE.");
+ "muscles to raise Defense.");
static const u8 sMinimizeDescription[] = _(
"Minimizes the user's size\n"
@@ -439,19 +451,19 @@ static const u8 sConfuseRayDescription[] = _(
static const u8 sWithdrawDescription[] = _(
"Withdraws the body into its\n"
- "hard shell to raise DEFENSE.");
+ "hard shell to raise Defense.");
static const u8 sDefenseCurlDescription[] = _(
"Curls up to conceal weak\n"
- "spots and raise DEFENSE.");
+ "spots and raise Defense.");
static const u8 sBarrierDescription[] = _(
"Creates a barrier that\n"
- "sharply raises DEFENSE.");
+ "sharply raises Defense.");
static const u8 sLightScreenDescription[] = _(
"Creates a wall of light that\n"
- "lowers SP. ATK damage.");
+ "lowers Sp. Atk damage.");
static const u8 sHazeDescription[] = _(
"Creates a black haze that\n"
@@ -471,7 +483,7 @@ static const u8 sBideDescription[] = _(
static const u8 sMetronomeDescription[] = _(
"Waggles a finger to use any\n"
- "POKéMON move at random.");
+ "Pokémon move at random.");
static const u8 sMirrorMoveDescription[] = _(
"Counters the foe's attack\n"
@@ -511,7 +523,11 @@ static const u8 sWaterfallDescription[] = _(
static const u8 sClampDescription[] = _(
"Traps and squeezes the\n"
+#if B_BINDING_TURNS >= GEN_5
+ "foe for 4 or 5 turns.");
+#else
"foe for 2 to 5 turns.");
+#endif
static const u8 sSwiftDescription[] = _(
"Sprays star-shaped rays\n"
@@ -527,11 +543,11 @@ static const u8 sSpikeCannonDescription[] = _(
static const u8 sConstrictDescription[] = _(
"Constricts to inflict pain.\n"
- "May lower SPEED.");
+ "May lower Speed.");
static const u8 sAmnesiaDescription[] = _(
"Forgets about something\n"
- "and sharply raises SP. DEF.");
+ "and sharply raises Sp. Def.");
static const u8 sKinesisDescription[] = _(
"Distracts the foe.\n"
@@ -579,7 +595,7 @@ static const u8 sTransformDescription[] = _(
static const u8 sBubbleDescription[] = _(
"An attack using bubbles.\n"
- "May lower the foe's SPEED.");
+ "May lower the foe's Speed.");
static const u8 sDizzyPunchDescription[] = _(
"A rhythmic punch that may\n"
@@ -603,7 +619,7 @@ static const u8 sSplashDescription[] = _(
static const u8 sAcidArmorDescription[] = _(
"Liquifies the user's body\n"
- "to sharply raise DEFENSE.");
+ "to sharply raise Defense.");
static const u8 sCrabhammerDescription[] = _(
"Hammers with a pincer. Has a\n"
@@ -635,7 +651,7 @@ static const u8 sHyperFangDescription[] = _(
static const u8 sSharpenDescription[] = _(
"Reduces the polygon count\n"
- "and raises ATTACK.");
+ "and raises Attack.");
static const u8 sConversionDescription[] = _(
"Changes the user's type\n"
@@ -711,7 +727,7 @@ static const u8 sAeroblastDescription[] = _(
static const u8 sCottonSporeDescription[] = _(
"Spores cling to the foe,\n"
- "sharply reducing SPEED.");
+ "sharply reducing Speed.");
static const u8 sReversalDescription[] = _(
"Inflicts more damage when\n"
@@ -735,7 +751,7 @@ static const u8 sMachPunchDescription[] = _(
static const u8 sScaryFaceDescription[] = _(
"Frightens with a scary face\n"
- "to sharply reduce SPEED.");
+ "to sharply reduce Speed.");
static const u8 sFeintAttackDescription[] = _(
"Draws the foe close, then\n"
@@ -746,7 +762,7 @@ static const u8 sSweetKissDescription[] = _(
"look. May cause confusion.");
static const u8 sBellyDrumDescription[] = _(
- "Maximizes ATTACK while\n"
+ "Maximizes Attack while\n"
"sacrificing HP.");
static const u8 sSludgeBombDescription[] = _(
@@ -778,12 +794,12 @@ static const u8 sDestinyBondDescription[] = _(
"is also made to faint.");
static const u8 sPerishSongDescription[] = _(
- "Any POKéMON hearing this\n"
+ "Any Pokémon hearing this\n"
"song faints in 3 turns.");
static const u8 sIcyWindDescription[] = _(
"A chilling attack that\n"
- "lowers the foe's SPEED.");
+ "lowers the foe's Speed.");
static const u8 sDetectDescription[] = _(
"Evades attack, but may fail\n"
@@ -815,7 +831,7 @@ static const u8 sEndureDescription[] = _(
static const u8 sCharmDescription[] = _(
"Charms the foe and sharply\n"
- "reduces its ATTACK.");
+ "reduces its Attack.");
static const u8 sRolloutDescription[] = _(
"An attack lasting 5 turns\n"
@@ -827,7 +843,7 @@ static const u8 sFalseSwipeDescription[] = _(
static const u8 sSwaggerDescription[] = _(
"Confuses the foe, but also\n"
- "sharply raises ATTACK.");
+ "sharply raises Attack.");
static const u8 sMilkDrinkDescription[] = _(
"Recovers up to half the\n"
@@ -871,7 +887,7 @@ static const u8 sPresentDescription[] = _(
static const u8 sFrustrationDescription[] = _(
"An attack that is stronger\n"
- "if the TRAINER is disliked.");
+ "if the Trainer is disliked.");
static const u8 sSafeguardDescription[] = _(
"A mystical force prevents\n"
@@ -923,11 +939,11 @@ static const u8 sSweetScentDescription[] = _(
static const u8 sIronTailDescription[] = _(
"Attacks with a rock-hard\n"
- "tail. May lower DEFENSE.");
+ "tail. May lower Defense.");
static const u8 sMetalClawDescription[] = _(
"A claw attack that may\n"
- "raise the user's ATTACK.");
+ "raise the user's Attack.");
static const u8 sVitalThrowDescription[] = _(
"Makes the user's move last,\n"
@@ -958,16 +974,16 @@ static const u8 sTwisterDescription[] = _(
"to tear at the foe.");
static const u8 sRainDanceDescription[] = _(
- "Boosts the power of WATER-\n"
+ "Boosts the power of Water-\n"
"type moves for 5 turns.");
static const u8 sSunnyDayDescription[] = _(
- "Boosts the power of FIRE-\n"
+ "Boosts the power of Fire-\n"
"type moves for 5 turns.");
static const u8 sCrunchDescription[] = _(
"Crunches with sharp fangs.\n"
- "May lower SP. DEF.");
+ "May lower Defense.");
static const u8 sMirrorCoatDescription[] = _(
"Counters the foe's special\n"
@@ -987,7 +1003,7 @@ static const u8 sAncientPowerDescription[] = _(
static const u8 sShadowBallDescription[] = _(
"Hurls a black blob that may\n"
- "lower the foe's SP. DEF.");
+ "lower the foe's Sp. Def.");
static const u8 sFutureSightDescription[] = _(
"Heightens inner power to\n"
@@ -995,14 +1011,18 @@ static const u8 sFutureSightDescription[] = _(
static const u8 sRockSmashDescription[] = _(
"A rock-crushing attack\n"
- "that may lower DEFENSE.");
+ "that may lower Defense.");
static const u8 sWhirlpoolDescription[] = _(
"Traps and hurts the foe in\n"
+#if B_BINDING_TURNS >= GEN_5
+ "a whirlpool for 4 or 5 turns.");
+#else
"a whirlpool for 2 to 5 turns.");
+#endif
static const u8 sBeatUpDescription[] = _(
- "Summons party POKéMON to\n"
+ "Summons party Pokémon to\n"
"join in the attack.");
static const u8 sFakeOutDescription[] = _(
@@ -1039,7 +1059,7 @@ static const u8 sTormentDescription[] = _(
static const u8 sFlatterDescription[] = _(
"Confuses the foe, but\n"
- "raises its SP. ATK.");
+ "raises its Sp. Atk.");
static const u8 sWillOWispDescription[] = _(
"Inflicts a burn on the foe\n"
@@ -1050,7 +1070,7 @@ static const u8 sMementoDescription[] = _(
"the foe's abilities.");
static const u8 sFacadeDescription[] = _(
- "Boosts ATTACK when burned,\n"
+ "Boosts Attack when burned,\n"
"paralyzed, or poisoned.");
static const u8 sFocusPunchDescription[] = _(
@@ -1170,27 +1190,27 @@ static const u8 sArmThrustDescription[] = _(
"strike the foe 2 to 5 times.");
static const u8 sCamouflageDescription[] = _(
- "Alters the POKéMON's type\n"
+ "Alters the Pokémon's type\n"
"depending on the location.");
static const u8 sTailGlowDescription[] = _(
"Flashes a light that sharply\n"
- "raises SP. ATK.");
+ "raises Sp. Atk.");
static const u8 sLusterPurgeDescription[] = _(
"Attacks with a burst of\n"
- "light. May lower SP. DEF.");
+ "light. May lower Sp. Def.");
static const u8 sMistBallDescription[] = _(
"Attacks with a flurry of\n"
- "down. May lower SP. ATK.");
+ "down. May lower Sp. Atk.");
static const u8 sFeatherDanceDescription[] = _(
"Envelops the foe with down\n"
- "to sharply reduce ATTACK.");
+ "to sharply reduce Attack.");
static const u8 sTeeterDanceDescription[] = _(
- "Confuses all POKéMON on\n"
+ "Confuses all Pokémon on\n"
"the scene.");
static const u8 sBlazeKickDescription[] = _(
@@ -1223,7 +1243,7 @@ static const u8 sPoisonFangDescription[] = _(
static const u8 sCrushClawDescription[] = _(
"Tears at the foe with sharp\n"
- "claws. May lower DEFENSE.");
+ "claws. May lower Defense.");
static const u8 sBlastBurnDescription[] = _(
"Powerful, but leaves the\n"
@@ -1235,7 +1255,7 @@ static const u8 sHydroCannonDescription[] = _(
static const u8 sMeteorMashDescription[] = _(
"Fires a meteor-like punch.\n"
- "May raise ATTACK.");
+ "May raise Attack.");
static const u8 sAstonishDescription[] = _(
"An attack that may shock\n"
@@ -1251,7 +1271,7 @@ static const u8 sAromatherapyDescription[] = _(
static const u8 sFakeTearsDescription[] = _(
"Feigns crying to sharply\n"
- "lower the foe's SP. DEF.");
+ "lower the foe's Sp. Def.");
static const u8 sAirCutterDescription[] = _(
"Hacks with razorlike wind.\n"
@@ -1259,7 +1279,7 @@ static const u8 sAirCutterDescription[] = _(
static const u8 sOverheatDescription[] = _(
"Allows a full-power attack,\n"
- "but sharply lowers SP. ATK.");
+ "but sharply lowers Sp. Atk.");
static const u8 sOdorSleuthDescription[] = _(
"Negates the foe's efforts\n"
@@ -1267,7 +1287,7 @@ static const u8 sOdorSleuthDescription[] = _(
static const u8 sRockTombDescription[] = _(
"Stops the foe from moving\n"
- "with rocks and cuts SPEED.");
+ "with rocks and cuts Speed.");
static const u8 sSilverWindDescription[] = _(
"A powdery attack that may\n"
@@ -1275,7 +1295,7 @@ static const u8 sSilverWindDescription[] = _(
static const u8 sMetalSoundDescription[] = _(
"Emits a horrible screech\n"
- "that sharply lowers SP. DEF.");
+ "that sharply lowers Sp. Def.");
static const u8 sGrassWhistleDescription[] = _(
"Lulls the foe into sleep\n"
@@ -1283,10 +1303,10 @@ static const u8 sGrassWhistleDescription[] = _(
static const u8 sTickleDescription[] = _(
"Makes the foe laugh to\n"
- "lower ATTACK and DEFENSE.");
+ "lower Attack and Defense.");
static const u8 sCosmicPowerDescription[] = _(
- "Raises DEFENSE and SP. DEF\n"
+ "Raises Defense and Sp. Def\n"
"with a mystic power.");
static const u8 sWaterSpoutDescription[] = _(
@@ -1311,7 +1331,11 @@ static const u8 sSkyUppercutDescription[] = _(
static const u8 sSandTombDescription[] = _(
"Traps and hurts the foe in\n"
+#if B_BINDING_TURNS >= GEN_5
+ "quicksand for 4 or 5 turns.");
+#else
"quicksand for 2 to 5 turns.");
+#endif
static const u8 sSheerColdDescription[] = _(
"A chilling attack that\n"
@@ -1335,7 +1359,7 @@ static const u8 sIcicleSpearDescription[] = _(
static const u8 sIronDefenseDescription[] = _(
"Hardens the body's surface\n"
- "to sharply raise DEFENSE.");
+ "to sharply raise Defense.");
static const u8 sBlockDescription[] = _(
"Blocks the foe's way to\n"
@@ -1343,7 +1367,7 @@ static const u8 sBlockDescription[] = _(
static const u8 sHowlDescription[] = _(
"Howls to raise the spirit\n"
- "and boosts ATTACK.");
+ "and boosts Attack.");
static const u8 sDragonClawDescription[] = _(
"Slashes the foe with sharp\n"
@@ -1355,7 +1379,7 @@ static const u8 sFrenzyPlantDescription[] = _(
static const u8 sBulkUpDescription[] = _(
"Bulks up the body to boost\n"
- "both ATTACK and DEFENSE.");
+ "both Attack and Defense.");
static const u8 sBounceDescription[] = _(
"Bounces up, then down the\n"
@@ -1363,7 +1387,7 @@ static const u8 sBounceDescription[] = _(
static const u8 sMudShotDescription[] = _(
"Hurls mud at the foe and\n"
- "reduces SPEED.");
+ "reduces Speed.");
static const u8 sPoisonTailDescription[] = _(
"Has a high critical-hit\n"
@@ -1386,7 +1410,7 @@ static const u8 sWaterSportDescription[] = _(
"raise resistance to fire.");
static const u8 sCalmMindDescription[] = _(
- "Raises SP. ATK and SP. DEF\n"
+ "Raises Sp. Atk and Sp. Def\n"
"by focusing the mind.");
static const u8 sLeafBladeDescription[] = _(
@@ -1395,7 +1419,7 @@ static const u8 sLeafBladeDescription[] = _(
static const u8 sDragonDanceDescription[] = _(
"A mystical dance that ups\n"
- "ATTACK and SPEED.");
+ "Attack and Speed.");
static const u8 sRockBlastDescription[] = _(
"Hurls boulders at the foe\n"
@@ -1415,7 +1439,1547 @@ static const u8 sDoomDesireDescription[] = _(
static const u8 sPsychoBoostDescription[] = _(
"Allows a full-power attack,\n"
- "but sharply lowers SP. ATK.");
+ "but sharply lowers Sp. Atk.");
+
+static const u8 sRoostDescription[] = _(
+ "Restores the user's HP by\n"
+ "half of its max HP.");
+
+static const u8 sGravityDescription[] = _(
+ "Gravity is intensified\n"
+ "negating levitation.");
+
+static const u8 sMiracleEyeDescription[] = _(
+ "Negate evasiveness and\n"
+ "Dark-type's immunities.");
+
+static const u8 sWakeUpSlapDescription[] = _(
+ "Powerful against sleeping\n"
+ "foes, but also heals them.");
+
+static const u8 sHammerArmDescription[] = _(
+ "A swinging fist attack\n"
+ "that also lowers Speed.");
+
+static const u8 sGyroBallDescription[] = _(
+ "A high-speed spin that does\n"
+ "more damage to faster foes.");
+
+static const u8 sHealingWishDescription[] = _(
+ "The user faints to heal up\n"
+ "the recipient.");
+
+static const u8 sBrineDescription[] = _(
+ "Does double damage to foes\n"
+ "with half HP.");
+
+static const u8 sNaturalGiftDescription[] = _(
+ "The effectiveness varies\n"
+ "with the held Berry.");
+
+static const u8 sFeintDescription[] = _(
+ "An attack that hits foes\n"
+ "using moves like Protect.");
+
+static const u8 sPluckDescription[] = _(
+ "Eats the foe's held Berry\n"
+ "gaining its effect.");
+
+static const u8 sTailwindDescription[] = _(
+ "Whips up a turbulent breeze\n"
+ "that raises Speed.");
+
+static const u8 sAcupressureDescription[] = _(
+ "The user sharply raises\n"
+ "one of its stats.");
+
+static const u8 sMetalBurstDescription[] = _(
+ "Retaliates any hit with\n"
+ "greater power.");
+
+static const u8 sUTurnDescription[] = _(
+ "Does damage then switches\n"
+ "out the user.");
+
+static const u8 sCloseCombatDescription[] = _(
+ "A strong attack but lowers\n"
+ "the defensive stats.");
+
+static const u8 sPaybackDescription[] = _(
+ "An attack that gains power\n"
+ "if the user moves last.");
+
+static const u8 sAssuranceDescription[] = _(
+ "An attack that gains power\n"
+ "if the foe has been hurt.");
+
+static const u8 sEmbargoDescription[] = _(
+ "Prevents the foe from\n"
+ "using any items.");
+
+static const u8 sFlingDescription[] = _(
+ "The effectiveness varies\n"
+ "with the held item.");
+
+static const u8 sPsychoShiftDescription[] = _(
+ "Transfers status problems\n"
+ "to the foe.");
+
+static const u8 sTrumpCardDescription[] = _(
+ "The less PP the move has\n"
+ "the more damage it does.");
+
+static const u8 sHealBlockDescription[] = _(
+ "Prevents the foe from\n"
+ "recovering any HP.");
+
+static const u8 sWringOutDescription[] = _(
+ "The higher the foe's HP\n"
+ "the more damage caused.");
+
+static const u8 sPowerTrickDescription[] = _(
+ "The user swaps its Attack\n"
+ "and Defense stats.");
+
+static const u8 sGastroAcidDescription[] = _(
+ "Stomach acid suppresses\n"
+ "the foe's ability.");
+
+static const u8 sLuckyChantDescription[] = _(
+ "Prevents the foe from\n"
+ "landing critical hits.");
+
+static const u8 sMeFirstDescription[] = _(
+ "Executes the foe's attack\n"
+ "with greater power.");
+
+static const u8 sCopycatDescription[] = _(
+ "The user mimics the last\n"
+ "move used by a foe.");
+
+static const u8 sPowerSwapDescription[] = _(
+ "Swaps changes to Attack\n"
+ "and Sp. Atk with the foe.");
+
+static const u8 sGuardSwapDescription[] = _(
+ "Swaps changes to Defense\n"
+ "and Sp. Def with the foe.");
+
+static const u8 sPunishmentDescription[] = _(
+ "Does more damage if the\n"
+ "foe has powered up.");
+
+static const u8 sLastResortDescription[] = _(
+ "Can only be used if every\n"
+ "other move has been used.");
+
+static const u8 sWorrySeedDescription[] = _(
+ "Plants a seed on the foe\n"
+ "giving it Insomnia.");
+
+static const u8 sSuckerPunchDescription[] = _(
+ "Strikes first if the foe\n"
+ "is preparing an attack.");
+
+static const u8 sToxicSpikesDescription[] = _(
+ "Sets spikes that poison a\n"
+ "foe switching in.");
+
+static const u8 sHeartSwapDescription[] = _(
+ "Swaps any stat changes\n"
+ "with the foe.");
+
+static const u8 sAquaRingDescription[] = _(
+ "Forms a veil of water\n"
+ "that restores HP.");
+
+static const u8 sMagnetRiseDescription[] = _(
+ "The user levitates with\n"
+ "electromagnetism.");
+
+static const u8 sFlareBlitzDescription[] = _(
+ "A charge that may burn the\n"
+ "foe. Also hurts the user.");
+
+static const u8 sForcePalmDescription[] = _(
+ "A shock wave attack that\n"
+ "may paralyze the foe.");
+
+static const u8 sAuraSphereDescription[] = _(
+ "Attacks with an aura blast\n"
+ "that cannot be evaded.");
+
+static const u8 sRockPolishDescription[] = _(
+ "Polishes the body to\n"
+ "sharply raise Speed.");
+
+static const u8 sPoisonJabDescription[] = _(
+ "A stabbing attack that\n"
+ "may poison the foe.");
+
+static const u8 sDarkPulseDescription[] = _(
+ "Attacks with a horrible\n"
+ "aura. May cause flinching.");
+
+static const u8 sNightSlashDescription[] = _(
+ "Hits as soon as possible.\n"
+ "High critical-hit ratio.");
+
+static const u8 sAquaTailDescription[] = _(
+ "The user swings its tail\n"
+ "like a wave to attack.");
+
+static const u8 sSeedBombDescription[] = _(
+ "A barrage of hard seeds\n"
+ "is fired at the foe.");
+
+static const u8 sAirSlashDescription[] = _(
+ "Attacks with a blade of\n"
+ "air. May cause flinching.");
+
+static const u8 sXScissorDescription[] = _(
+ "Slashes the foe with crossed\n"
+ "scythes, claws, etc.");
+
+static const u8 sBugBuzzDescription[] = _(
+ "A damaging sound wave that\n"
+ "may lower Sp. Def.");
+
+static const u8 sDragonPulseDescription[] = _(
+ "Generates a shock wave to\n"
+ "damage the foe.");
+
+static const u8 sDragonRushDescription[] = _(
+ "Tackles the foe with menace.\n"
+ "May cause flinching.");
+
+static const u8 sPowerGemDescription[] = _(
+ "Attacks with rays of light\n"
+ "that sparkle like diamonds.");
+
+static const u8 sVacuumWaveDescription[] = _(
+ "Whirls its fists to send\n"
+ "a wave that strikes first.");
+
+static const u8 sFocusBlastDescription[] = _(
+ "Attacks at full power.\n"
+ "May lower Sp. Def.");
+
+static const u8 sEnergyBallDescription[] = _(
+ "Draws power from nature to\n"
+ "attack. May lower Sp. Def.");
+
+static const u8 sBraveBirdDescription[] = _(
+ "A low altitude charge that\n"
+ "also hurts the user.");
+
+static const u8 sEarthPowerDescription[] = _(
+ "Makes the ground erupt with\n"
+ "power. May lower Sp. Def.");
+
+static const u8 sSwitcherooDescription[] = _(
+ "Swaps items with the foe\n"
+ "faster than the eye can see.");
+
+static const u8 sNastyPlotDescription[] = _(
+ "Thinks bad thoughts to\n"
+ "sharply boost Sp. Atk.");
+
+static const u8 sBulletPunchDescription[] = _(
+ "Punches as fast as a bul-\n"
+ "let. It always hits first.");
+
+static const u8 sIceShardDescription[] = _(
+ "Hurls a chunk of ice that\n"
+ "always strike first.");
+
+static const u8 sShadowClawDescription[] = _(
+ "Strikes with a shadow claw.\n"
+ "High critical-hit ratio.");
+
+static const u8 sThunderFangDescription[] = _(
+ "May cause flinching or\n"
+ "leave the foe paralyzed.");
+
+static const u8 sIceFangDescription[] = _(
+ "May cause flinching or\n"
+ "leave the foe frozen.");
+
+static const u8 sFireFangDescription[] = _(
+ "May cause flinching or\n"
+ "leave the foe with a burn.");
+
+static const u8 sShadowSneakDescription[] = _(
+ "Extends the user's shadow\n"
+ "to strike first.");
+
+static const u8 sMudBombDescription[] = _(
+ "Throws a blob of mud to\n"
+ "damage and cut accuracy.");
+
+static const u8 sPsychoCutDescription[] = _(
+ "Tears with psychic blades.\n"
+ "High critical-hit ratio.");
+
+static const u8 sZenHeadbuttDescription[] = _(
+ "Hits with a strong head-\n"
+ "butt. May cause flinching.");
+
+static const u8 sMirrorShotDescription[] = _(
+ "Emits a flash of energy to\n"
+ "damage and cut accuracy.");
+
+static const u8 sFlashCannonDescription[] = _(
+ "Releases a blast of light\n"
+ "that may lower Sp. Def.");
+
+static const u8 sRockClimbDescription[] = _(
+ "A charging attack that may\n"
+ "confuse the foe.");
+
+static const u8 sDefogDescription[] = _(
+ "Removes obstacles and\n"
+ "lowers evasion.");
+
+static const u8 sTrickRoomDescription[] = _(
+ "Slower Pokémon get to move\n"
+ "first for 5 turns.");
+
+static const u8 sDracoMeteorDescription[] = _(
+ "Casts comets onto the foe.\n"
+ "Harshly lowers the Sp. Atk.");
+
+static const u8 sDischargeDescription[] = _(
+ "Zaps the foes with electri-\n"
+ "city. May paralyze them.");
+
+static const u8 sPowerWhipDescription[] = _(
+ "Violently lashes the foe\n"
+ "with vines or tentacles.");
+
+static const u8 sCrossPoisonDescription[] = _(
+ "A slash that may poison a\n"
+ "foe and do critical damage.");
+
+static const u8 sGunkShotDescription[] = _(
+ "Shoots filthy garbage at\n"
+ "the foe. May also poison.");
+
+static const u8 sIronHeadDescription[] = _(
+ "Slams the foe with a hard\n"
+ "head. May cause flinching.");
+
+static const u8 sMagnetBombDescription[] = _(
+ "Launches a magnet that\n"
+ "strikes without fail.");
+
+static const u8 sStoneEdgeDescription[] = _(
+ "Stabs the foe with stones.\n"
+ "High critical-hit ratio.");
+
+static const u8 sCaptivateDescription[] = _(
+ "Makes the opposite gender\n"
+ "sharply reduce its Sp. Atk.");
+
+static const u8 sStealthRockDescription[] = _(
+ "Sets floating stones that\n"
+ "hurt a foe switching in.");
+
+static const u8 sGrassKnotDescription[] = _(
+ "A snare attack that does\n"
+ "more damage to heavier foes.");
+
+static const u8 sChatterDescription[] = _(
+ "Attacks with a sound wave\n"
+ "that causes confusion.");
+
+static const u8 sJudgmentDescription[] = _(
+ "The type varies with the\n"
+ "kind of Plate held.");
+
+static const u8 sChargeBeamDescription[] = _(
+ "Fires a beam of electricity.\n"
+ "May raise Sp. Atk.");
+
+static const u8 sWoodHammerDescription[] = _(
+ "Slams the body into a foe.\n"
+ "The user gets hurt too.");
+
+static const u8 sAquaJetDescription[] = _(
+ "Strikes first by dashing\n"
+ "at the foe at a high speed.");
+
+static const u8 sAttackOrderDescription[] = _(
+ "Underlings pummel the foe.\n"
+ "High critical-hit ratio.");
+
+static const u8 sDefendOrderDescription[] = _(
+ "Raises Defense and Sp. Def\n"
+ "with a living shield.");
+
+static const u8 sHealOrderDescription[] = _(
+ "The user's underlings show\n"
+ "up to heal half its max HP.");
+
+static const u8 sHeadSmashDescription[] = _(
+ "A life-risking headbutt that\n"
+ "seriously hurts the user.");
+
+static const u8 sDoubleHitDescription[] = _(
+ "Slams the foe with a tail\n"
+ "etc. Strikes twice.");
+
+static const u8 sRoarOfTimeDescription[] = _(
+ "Powerful, but leaves the\n"
+ "user immobile the next turn.");
+
+static const u8 sSpacialRendDescription[] = _(
+ "Tears the foe, and space.\n"
+ "High critical-hit ratio.");
+
+static const u8 sMagmaStormDescription[] = _(
+ "Traps the foe in a vortex\n"
+#if B_BINDING_TURNS >= GEN_5
+ "of fire for 4 or 5 turns.");
+#else
+ "of fire for 2 to 5 turns.");
+#endif
+
+static const u8 sDarkVoidDescription[] = _(
+ "Drags the foe into total\n"
+ "darkness, inducing Sleep.");
+
+static const u8 sSeedFlareDescription[] = _(
+ "Generates a shock wave that\n"
+ "sharply reduces Sp. Def.");
+
+static const u8 sOminousWindDescription[] = _(
+ "A repulsive attack that may\n"
+ "raise all stats.");
+
+static const u8 sShadowForceDescription[] = _(
+ "Vanishes on the first turn\n"
+ "then strikes the next turn.");
+
+static const u8 sHoneClawsDescription[] = _(
+ "Sharpens its claws to raise\n"
+ "Attack and Accuracy.");
+
+static const u8 sWideGuardDescription[] = _(
+ "Evades wide-ranging attacks\n"
+ "for one turn.");
+
+static const u8 sGuardSplitDescription[] = _(
+ "Averages changes to Defense\n"
+ "and Sp. Def with the foe.");
+
+static const u8 sPowerSplitDescription[] = _(
+ "Averages changes to Attack\n"
+ "and Sp. Atk with the foe.");
+
+static const u8 sWonderRoomDescription[] = _(
+ "Defense and Sp. Def stats\n"
+ "are swapped for 5 turns.");
+
+static const u8 sPsyshockDescription[] = _(
+ "Attacks with a psychic wave\n"
+ "that does physical damage.");
+
+static const u8 sTailSlapDescription[] = _(
+ "Strikes the foe with its\n"
+ "tail 2 to 5 times.");
+
+static const u8 sVenoshockDescription[] = _(
+ "Does double damage if the\n"
+ "foe is poisoned.");
+
+static const u8 sAutotomizeDescription[] = _(
+ "Sheds additional weight to\n"
+ "sharply boost Speed.");
+
+static const u8 sRagePowderDescription[] = _(
+ "Scatters powder to make\n"
+ "foes attack only the user.");
+
+static const u8 sTelekinesisDescription[] = _(
+ "Makes the foe float. It is\n"
+ "easier to hit for 3 turns.");
+
+static const u8 sMagicRoomDescription[] = _(
+ "Hold items lose their\n"
+ "effects for 5 turns.");
+
+static const u8 sSmackDownDescription[] = _(
+ "Throws a rock to knock the\n"
+ "foe down to the ground.");
+
+static const u8 sStormThrowDescription[] = _(
+ "This attack always results\n"
+ "in a critical hit.");
+
+static const u8 sFlameBurstDescription[] = _(
+ "A bursting flame that does\n"
+ "damage to all foes.");
+
+static const u8 sSludgeWaveDescription[] = _(
+ "Swamps the foe with a wave\n"
+ "of sludge. May also poison.");
+
+static const u8 sQuiverDanceDescription[] = _(
+ "Dances to raise Sp. Atk\n"
+ "Sp. Def and Speed.");
+
+static const u8 sHeavySlamDescription[] = _(
+ "Does more damage if the\n"
+ "user outweighs the foe.");
+
+static const u8 sSynchronoiseDescription[] = _(
+ "An odd shock wave that only\n"
+ "damages same-type foes.");
+
+static const u8 sElectroBallDescription[] = _(
+ "Hurls an orb that does more\n"
+ "damage to slower foes.");
+
+static const u8 sSoakDescription[] = _(
+ "Sprays water at the foe\n"
+ "making it Water-type.");
+
+static const u8 sFlameChargeDescription[] = _(
+ "Attacks in a cloak of\n"
+ "flames. Raises Speed.");
+
+static const u8 sCoilDescription[] = _(
+ "Coils up to raise Attack\n"
+ "Defense and Accuracy.");
+
+static const u8 sLowSweepDescription[] = _(
+ "Attacks the foe's legs\n"
+ "lowering its Speed.");
+
+static const u8 sAcidSprayDescription[] = _(
+ "Sprays a hide-melting acid.\n"
+ "Sharply reduces Sp. Def.");
+
+static const u8 sFoulPlayDescription[] = _(
+ "The higher the foe's Attack\n"
+ "the more damage caused.");
+
+static const u8 sSimpleBeamDescription[] = _(
+ "A beam that changes the\n"
+ "foe's ability to Simple.");
+
+static const u8 sEntrainmentDescription[] = _(
+ "Makes the foe mimic the\n"
+ "user, gaining its ability.");
+
+static const u8 sAfterYouDescription[] = _(
+ "Helps out the foe, letting\n"
+ "it move next.");
+
+static const u8 sRoundDescription[] = _(
+ "A song that inflicts damage.\n"
+ "Others can join in too.");
+
+static const u8 sEchoedVoiceDescription[] = _(
+ "Does more damage every turn\n"
+ "it is used.");
+
+static const u8 sChipAwayDescription[] = _(
+ "Strikes through the foe's\n"
+ "stat changes.");
+
+static const u8 sClearSmogDescription[] = _(
+ "Attacks with white haze that\n"
+ "eliminates all stat changes.");
+
+static const u8 sStoredPowerDescription[] = _(
+ "The higher the user's stats\n"
+ "the more damage caused.");
+
+static const u8 sQuickGuardDescription[] = _(
+ "Evades priority attacks\n"
+ "for one turn.");
+
+static const u8 sAllySwitchDescription[] = _(
+ "The user switches places\n"
+ "with its partner.");
+
+static const u8 sScaldDescription[] = _(
+ "Shoots boiling water at the\n"
+ "foe. May inflict a burn.");
+
+static const u8 sShellSmashDescription[] = _(
+ "Raises offensive stats, but\n"
+ "lowers defensive stats.");
+
+static const u8 sHealPulseDescription[] = _(
+ "Recovers up to half the\n"
+ "target's maximum HP.");
+
+static const u8 sHexDescription[] = _(
+ "Does double damage if the\n"
+ "foe has a status problem.");
+
+static const u8 sSkyDropDescription[] = _(
+ "Takes the foe into the sky\n"
+ "then drops it the next turn.");
+
+static const u8 sShiftGearDescription[] = _(
+ "Rotates its gears to raise\n"
+ "Attack and Speed.");
+
+static const u8 sCircleThrowDescription[] = _(
+ "Knocks the foe away to end\n"
+ "the battle.");
+
+static const u8 sIncinerateDescription[] = _(
+ "Burns up Berries and Gems\n"
+ "preventing their use.");
+
+static const u8 sQuashDescription[] = _(
+ "Suppresses the foe, making\n"
+ "it move last.");
+
+static const u8 sAcrobaticsDescription[] = _(
+ "Does double damage if the\n"
+ "user has no item.");
+
+static const u8 sReflectTypeDescription[] = _(
+ "The user reflects the foe's\n"
+ "type, copying it.");
+
+static const u8 sRetaliateDescription[] = _(
+ "An attack that does more\n"
+ "damage if an ally fainted.");
+
+static const u8 sFinalGambitDescription[] = _(
+ "The user faints to damage\n"
+ "the foe equal to its HP.");
+
+static const u8 sBestowDescription[] = _(
+ "The user gives its held\n"
+ "item to the foe.");
+
+static const u8 sInfernoDescription[] = _(
+ "Powerful and sure to inflict\n"
+ "a burn, but inaccurate.");
+
+static const u8 sWaterPledgeDescription[] = _(
+ "Attacks with a column of\n"
+ "water. May make a rainbow.");
+
+static const u8 sFirePledgeDescription[] = _(
+ "Attacks with a column of\n"
+ "fire. May burn the grass.");
+
+static const u8 sGrassPledgeDescription[] = _(
+ "Attacks with a column of\n"
+ "grass. May create a swamp.");
+
+static const u8 sStruggleBugDescription[] = _(
+ "Resisting, the user attacks\n"
+ "the foe. Lowers Sp. Atk.");
+
+static const u8 sBulldozeDescription[] = _(
+ "Stomps down on the ground.\n"
+ "Lowers Speed.");
+
+static const u8 sWorkUpDescription[] = _(
+ "The user is roused.\n"
+ "Ups Attack and Sp. Atk.");
+
+static const u8 sElectrowebDescription[] = _(
+ "Snares the foe with an\n"
+ "electric net. Lowers Speed.");
+
+static const u8 sWildChargeDescription[] = _(
+ "An electrical tackle that\n"
+ "also hurts the user.");
+
+static const u8 sDrillRunDescription[] = _(
+ "Spins its body like a drill.\n"
+ "High critical-hit ratio.");
+
+static const u8 sDualChopDescription[] = _(
+ "Attacks with brutal hits\n"
+ "that strike twice.");
+
+static const u8 sHeartStampDescription[] = _(
+ "A sudden blow after a cute\n"
+ "act. May cause flinching.");
+
+static const u8 sRazorShellDescription[] = _(
+ "Tears at the foe with sharp\n"
+ "shells. May lower Defense.");
+
+static const u8 sLeafTornadoDescription[] = _(
+ "Circles the foe with leaves\n"
+ "to damage and cut accuracy.");
+
+static const u8 sSteamrollerDescription[] = _(
+ "Crushes the foe with its\n"
+ "body. May cause flinching.");
+
+static const u8 sCottonGuardDescription[] = _(
+ "Wraps its body in cotton.\n"
+ "Drastically raises Defense.");
+
+static const u8 sNightDazeDescription[] = _(
+ "Looses a pitch-black shock\n"
+ "wave. May lower accuracy.");
+
+static const u8 sHurricaneDescription[] = _(
+ "Traps the foe in a fierce\n"
+ "wind. May cause confusion.");
+
+static const u8 sHeadChargeDescription[] = _(
+ "A charge using guard hair.\n"
+ "It hurts the user a little.");
+
+static const u8 sGearGrindDescription[] = _(
+ "Throws two steel gears\n"
+ "that strike twice.");
+
+static const u8 sTechnoBlastDescription[] = _(
+ "The type varies with the\n"
+ "kind of Drive held.");
+
+static const u8 sRelicSongDescription[] = _(
+ "Attacks with an ancient\n"
+ "song. May induce sleep.");
+
+static const u8 sSecretSwordDescription[] = _(
+ "Cuts with a long horn that\n"
+ "does physical damage.");
+
+static const u8 sGlaciateDescription[] = _(
+ "Blows very cold air at the\n"
+ "foe. It lowers their Speed.");
+
+static const u8 sBoltStrikeDescription[] = _(
+ "Strikes with a great amount\n"
+ "of lightning. May paralyze.");
+
+static const u8 sBlueFlareDescription[] = _(
+ "Engulfs the foe in a blue\n"
+ "flame. May inflict a burn.");
+
+static const u8 sFieryDanceDescription[] = _(
+ "Dances cloaked in flames.\n"
+ "May raise Sp. Atk.");
+
+static const u8 sFreezeShockDescription[] = _(
+ "A powerful 2-turn move that\n"
+ "may paralyze the foe.");
+
+static const u8 sIceBurnDescription[] = _(
+ "A powerful 2-turn move that\n"
+ "may inflict a burn.");
+
+static const u8 sSnarlDescription[] = _(
+ "Yells and rants at the foe\n"
+ "lowering its Sp. Atk.");
+
+static const u8 sIcicleCrashDescription[] = _(
+ "Drops large icicles on the\n"
+ "foe. May cause flinching.");
+
+static const u8 sVCreateDescription[] = _(
+ "Very powerful, but lowers\n"
+ "Defense, Sp. Def and Speed.");
+
+static const u8 sFusionFlareDescription[] = _(
+ "Summons a fireball. Works\n"
+ "well with a thunderbolt.");
+
+static const u8 sFusionBoltDescription[] = _(
+ "Summons a thunderbolt.\n"
+ "Works well with a fireball.");
+
+static const u8 sFlyingPressDescription[] = _(
+ "This attack does Fighting\n"
+ "and Flying-type damage.");
+
+static const u8 sMatBlockDescription[] = _(
+ "Evades damaging moves\n"
+ "for one turn.");
+
+static const u8 sBelchDescription[] = _(
+ "Lets out a loud belch.\n"
+ "Must eat a Berry to use it.");
+
+static const u8 sRototillerDescription[] = _(
+ "Ups the Attack and Sp. Atk\n"
+ "of Grass-type Pokémon.");
+
+static const u8 sStickyWebDescription[] = _(
+ "Weaves a sticky net that\n"
+ "slows foes switching in.");
+
+static const u8 sFellStingerDescription[] = _(
+ "If it knocks out a foe\n"
+ "the Attack stat is raised.");
+
+static const u8 sTrickOrTreatDescription[] = _(
+ "Goes trick-or-treating\n"
+ "making the foe Ghost-type.");
+
+static const u8 sNobleRoarDescription[] = _(
+ "Intimidates the foe, to cut\n"
+ "Attack and Sp. Atk.");
+
+static const u8 sIonDelugeDescription[] = _(
+ "Electrifies Normal-type\n"
+ "moves with charged atoms.");
+
+static const u8 sParabolicChargeDescription[] = _(
+ "Damages adjacent Pokémon and\n"
+ "heals up by half of it.");
+
+static const u8 sForestsCurseDescription[] = _(
+ "Puts a curse on the foe\n"
+ "making the foe Grass-type.");
+
+static const u8 sPetalBlizzardDescription[] = _(
+ "Stirs up a violent storm\n"
+ "of petals to attack.");
+
+static const u8 sFreezeDryDescription[] = _(
+ "Super effective on Water-\n"
+ "types. May cause freezing.");
+
+static const u8 sDisarmingVoiceDescription[] = _(
+ "Lets out a charming cry\n"
+ "that cannot be evaded.");
+
+static const u8 sPartingShotDescription[] = _(
+ "Lowers the foe's Attack and\n"
+ "Sp. Atk, then switches out.");
+
+static const u8 sTopsyTurvyDescription[] = _(
+ "Swaps all stat changes that\n"
+ "affect the target.");
+
+static const u8 sDrainingKissDescription[] = _(
+ "An attack that absorbs over\n"
+ "half the damage inflicted.");
+
+static const u8 sCraftyShieldDescription[] = _(
+ "Evades status moves for\n"
+ "one turn.");
+
+static const u8 sFlowerShieldDescription[] = _(
+ "Raises the Defense of\n"
+ "Grass-type Pokémon.");
+
+static const u8 sGrassyTerrainDescription[] = _(
+ "The ground turns to grass\n"
+ "for 5 turns. Restores HP.");
+
+static const u8 sMistyTerrainDescription[] = _(
+ "Covers the ground with mist\n"
+ "for 5 turns. Blocks status.");
+
+static const u8 sElectrifyDescription[] = _(
+ "Electrifies the foe, making\n"
+ "its next move Electric-type.");
+
+static const u8 sPlayRoughDescription[] = _(
+ "Plays rough with the foe.\n"
+ "May lower Attack.");
+
+static const u8 sFairyWindDescription[] = _(
+ "Stirs up a fairy wind to\n"
+ "strike the foe.");
+
+static const u8 sMoonblastDescription[] = _(
+ "Attacks with the power of\n"
+ "the moon. May lower Sp. Atk.");
+
+static const u8 sBoomburstDescription[] = _(
+ "Attacks everything with a\n"
+ "destructive sound wave.");
+
+static const u8 sFairyLockDescription[] = _(
+ "Locks down the battlefield\n"
+ "preventing escape next turn.");
+
+static const u8 sKingsShieldDescription[] = _(
+ "Evades damage, and sharply\n"
+ "reduces Attack if struck.");
+
+static const u8 sPlayNiceDescription[] = _(
+ "Befriend the foe, lowering\n"
+ "its Attack without fail.");
+
+static const u8 sConfideDescription[] = _(
+ "Shares a secret with the\n"
+ "foe, lowering Sp. Atk.");
+
+static const u8 sDiamondStormDescription[] = _(
+ "Whips up a storm of\n"
+ "diamonds. May up Defense.");
+
+static const u8 sSteamEruptionDescription[] = _(
+ "Immerses the foe in heated\n"
+ "steam. May inflict a burn.");
+
+static const u8 sHyperspaceHoleDescription[] = _(
+ "Uses a warp hole to attack.\n"
+ "Can't be evaded.");
+
+static const u8 sWaterShurikenDescription[] = _(
+ "Throws 2 to 5 stars that\n"
+ "are sure to strike first.");
+
+static const u8 sMysticalFireDescription[] = _(
+ "Breathes a special, hot\n"
+ "fire. Lowers Sp. Atk.");
+
+static const u8 sSpikyShieldDescription[] = _(
+ "Evades attack, and damages\n"
+ "the foe if struck.");
+
+static const u8 sAromaticMistDescription[] = _(
+ "Raises the Sp. Def of a\n"
+ "partner Pokémon.");
+
+static const u8 sEerieImpulseDescription[] = _(
+ "Exposes the foe to a pulse\n"
+ "that sharply cuts Sp. Atk.");
+
+static const u8 sVenomDrenchDescription[] = _(
+ "Lowers the Attack, Sp. Atk\n"
+ "and Speed of a poisoned foe.");
+
+static const u8 sPowderDescription[] = _(
+ "Damages the foe if it uses\n"
+ "a Fire-type move.");
+
+static const u8 sGeomancyDescription[] = _(
+ "Raises Sp. Atk, Sp. Def and\n"
+ "Speed on the 2nd turn.");
+
+static const u8 sMagneticFluxDescription[] = _(
+ "Boosts the defenses of\n"
+ "those with Plus or Minus.");
+
+static const u8 sHappyHourDescription[] = _(
+ "Doubles the amount of\n"
+ "Prize Money received.");
+
+static const u8 sElectricTerrainDescription[] = _(
+ "Electrifies the ground for\n"
+ "5 turns. Prevents sleep.");
+
+static const u8 sDazzlingGleamDescription[] = _(
+ "Damages foes by emitting\n"
+ "a bright flash.");
+
+static const u8 sCelebrateDescription[] = _(
+ "Congratulates you on your\n"
+ "special day.");
+
+static const u8 sHoldHandsDescription[] = _(
+ "The user and ally hold hands\n"
+ "making them happy.");
+
+static const u8 sBabyDollEyesDescription[] = _(
+ "Lowers the foe's Attack\n"
+ "before it can move.");
+
+static const u8 sNuzzleDescription[] = _(
+ "Rubs its cheecks against\n"
+ "the foe, paralyzing it.");
+
+static const u8 sInfestationDescription[] = _(
+ "The foe is infested and\n"
+#if B_BINDING_TURNS >= GEN_5
+ "attacked for 4 or 5 turns.");
+#else
+ "attacked for 2 to 5 turns.");
+#endif
+
+static const u8 sPowerUpPunchDescription[] = _(
+ "A hard punch that raises\n"
+ "the user's Attack.");
+
+static const u8 sThousandArrowsDescription[] = _(
+ "Can hit Flying foes, then\n"
+ "knocks them to the ground.");
+
+static const u8 sThousandWavesDescription[] = _(
+ "Those hit by the wave can\n"
+ "no longer escape.");
+
+static const u8 sLandsWrathDescription[] = _(
+ "Gathers the energy of the\n"
+ "land to attack every foe.");
+
+static const u8 sLightOfRuinDescription[] = _(
+ "Fires a great beam of light\n"
+ "that also hurts the user.");
+
+static const u8 sOriginPulseDescription[] = _(
+ "Beams of glowing blue light\n"
+ "blast both foes.");
+
+static const u8 sPrecipiceBladesDescription[] = _(
+ "Fearsome blades of stone\n"
+ "attack both foes.");
+
+static const u8 sLavaPlumeDescription[] = _(
+ "Scarlet flames torch\n"
+ "everything around the user.");
+
+static const u8 sLeafStormDescription[] = _(
+ "Whips up a storm of leaves.\n"
+ "Harshly lowers the Sp. Atk.");
+
+static const u8 sShoreUpDescription[] = _(
+ "Restores the user's HP.\n"
+ "More HP in a sandstorm.");
+
+static const u8 sFirstImpressionDescription[] = _(
+ "Hits hard and first.\n"
+ "Only works first turn.");
+
+static const u8 sBanefulBunkerDescription[] = _(
+ "Protects user and poisons\n"
+ "foes on contact.");
+
+static const u8 sSpiritShackleDescription[] = _(
+ "After being hit, foes can\n"
+ "no longer escape.");
+
+static const u8 sDarkestLariatDescription[] = _(
+ "Swings the arms to strike\n"
+ "It ignores stat changes.");
+
+static const u8 sSparklingAriaDescription[] = _(
+ "Sings with bubbles. Cures\n"
+ "burns on contact.");
+
+static const u8 sIceHammerDescription[] = _(
+ "Swings the fist to strike.\n"
+ "Lowers the user's Speed.");
+
+static const u8 sFloralHealingDescription[] = _(
+ "Restores an ally's HP.\n"
+ "Heals more on grass.");
+
+static const u8 sHighHorsepowerDescription[] = _(
+ "Slams hard into the foe with\n"
+ "its entire body.");
+
+static const u8 sStrengthSapDescription[] = _(
+ "Saps the foe's Attack to\n"
+ "heal HP, then drops Attack.");
+
+static const u8 sSolarBladeDescription[] = _(
+ "Charges first turn, then\n"
+ "chops with a blade of light.");
+
+static const u8 sLeafageDescription[] = _(
+ "Attacks with a flurry of\n"
+ "small leaves.");
+
+static const u8 sSpotlightDescription[] = _(
+ "Makes the foe attack the\n"
+ "spotlighted Pokémon.");
+
+static const u8 sToxicThreadDescription[] = _(
+ "Attacks with a thread that\n"
+ "poisons and drops Speed.");
+
+static const u8 sLaserFocusDescription[] = _(
+ "Guarantees the next move\n"
+ "will be a critical hit.");
+
+static const u8 sGearUpDescription[] = _(
+ "Boosts the attacks of\n"
+ "those with Plus or Minus.");
+
+static const u8 sThroatChopDescription[] = _(
+ "Chops the throat to disable\n"
+ "sound moves for a while.");
+
+static const u8 sPollenPuffDescription[] = _(
+ "Explodes on foes, but\n"
+ "restores ally's HP.");
+
+static const u8 sAnchorShotDescription[] = _(
+ "Strangles the foe with a\n"
+ "chain. The foe can't escape.");
+
+static const u8 sPsychicTerrainDescription[] = _(
+ "The ground turns weird for\n"
+ "5 turns. Blocks priority.");
+
+static const u8 sLungeDescription[] = _(
+ "Lunges at the foe to lower\n"
+ "its Attack stat.");
+
+static const u8 sFireLashDescription[] = _(
+ "Whips the foe with fire\n"
+ "lowering its Defense.");
+
+static const u8 sPowerTripDescription[] = _(
+ "It hits harder the more\n"
+ "stat boosts the user has.");
+
+static const u8 sBurnUpDescription[] = _(
+ "Burns out the user fully\n"
+ "removing the Fire type.");
+
+static const u8 sSpeedSwapDescription[] = _(
+ "Swaps user's Speed with\n"
+ "the target's.");
+
+static const u8 sSmartStrikeDescription[] = _(
+ "Hits with an accurate\n"
+ "horn that never misses.");
+
+static const u8 sPurifyDescription[] = _(
+ "Cures the foe's status\n"
+ "to restore HP.");
+
+static const u8 sRevelationDanceDescription[] = _(
+ "Dances with mystical power.\n"
+ "Matches user's first type.");
+
+static const u8 sCoreEnforcerDescription[] = _(
+ "Hits with a ray that\n"
+ "nullifies the foe's ability.");
+
+static const u8 sTropKickDescription[] = _(
+ "An intense kick from the\n"
+ "tropics. Lowers Attack.");
+
+static const u8 sInstructDescription[] = _(
+ "Orders the target to use\n"
+ "its last move again.");
+
+static const u8 sBeakBlastDescription[] = _(
+ "Heats up beak to attack.\n"
+ "Burns foe on contact.");
+
+static const u8 sClangingScalesDescription[] = _(
+ "Makes a big noise with\n"
+ "its scales. Drops Defense.");
+
+static const u8 sDragonHammerDescription[] = _(
+ "Swings its whole body\n"
+ "like a hammer to damage.");
+
+static const u8 sBrutalSwingDescription[] = _(
+ "Violently swings around\n"
+ "to hurt everyone nearby.");
+
+static const u8 sAuroraVeilDescription[] = _(
+ "Weakens all attacks, but\n"
+ "only usable with hail.");
+
+static const u8 sShellTrapDescription[] = _(
+ "Sets a shell trap that\n"
+ "damages on contact.");
+
+static const u8 sFleurCannonDescription[] = _(
+ "A strong ray that harshly\n"
+ "lowers Sp. Attack.");
+
+static const u8 sPsychicFangsDescription[] = _(
+ "Chomps with psychic fangs.\n"
+ "Destroys any barriers.");
+
+static const u8 sStompingTantrumDescription[] = _(
+ "Stomps around angrily.\n"
+ "Stronger after a failure.");
+
+static const u8 sShadowBoneDescription[] = _(
+ "Strikes with a haunted\n"
+ "bone. Might drop Defense.");
+
+static const u8 sAccelerockDescription[] = _(
+ "Hits with a high-speed\n"
+ "rock that always goes first.");
+
+static const u8 sLiquidationDescription[] = _(
+ "Slams the foe with water.\n"
+ "Can lower Defense.");
+
+static const u8 sPrismaticLaserDescription[] = _(
+ "A high power laser that\n"
+ "forces recharge next turn.");
+
+static const u8 sSpectralThiefDescription[] = _(
+ "Steals the target's stat\n"
+ "boosts, then attacks.");
+
+static const u8 sSunsteelStrikeDescription[] = _(
+ "A sun-fueled strike that\n"
+ "ignores abilities.");
+
+static const u8 sMoongeistBeamDescription[] = _(
+ "A moon-powered beam that\n"
+ "ignores abilities.");
+
+static const u8 sTearfulLookDescription[] = _(
+ "The user tears up, dropping\n"
+ "Attack and Sp. Attack.");
+
+static const u8 sZingZapDescription[] = _(
+ "An electrified impact that\n"
+ "can cause flinching.");
+
+static const u8 sNaturesMadnessDescription[] = _(
+ "Halves the foe's HP with\n"
+ "the power of nature.");
+
+static const u8 sMultiAttackDescription[] = _(
+ "An attack that changes\n"
+ "with Memories.");
+
+static const u8 sMindBlownDescription[] = _(
+ "It explodes the user's head\n"
+ "to damage everything around.");
+
+static const u8 sPlasmaFistsDescription[] = _(
+ "Hits with electrical fists.\n"
+ "Normal moves become Electric.");
+
+static const u8 sPhotonGeyserDescription[] = _(
+ "User's highest attack stat\n"
+ "determines its category.");
+
+static const u8 sZippyZapDescription[] = _(
+ "Electric bursts always go\n"
+ "first and land a critical hit.");
+
+static const u8 sSplishySplashDescription[] = _(
+ "A huge electrified wave that\n"
+ "may paralyze the foe.");
+
+static const u8 sFloatyFallDescription[] = _(
+ "Floats in air and dives at\n"
+ "angle. May cause flinching.");
+
+static const u8 sPikaPapowDescription[] = _(
+ "Pikachu's love increases its\n"
+ "power. It never misses.");
+
+static const u8 sBouncyBubbleDescription[] = _(
+ "An attack that absorbs\n"
+#if B_UPDATED_MOVE_DATA >= GEN_8
+ "all the damage inflicted.");
+#else
+ "half the damage inflicted.");
+#endif
+
+static const u8 sBuzzyBuzzDescription[] = _(
+ "Shoots a jolt of electricity\n"
+ "that always paralyzes.");
+
+static const u8 sSizzlySlideDescription[] = _(
+ "User cloaked in fire charges.\n"
+ "Leaves the foe with a burn.");
+
+static const u8 sGlitzyGlowDescription[] = _(
+ "Telekinetic force that sets\n"
+ "wall, lowering Sp. Atk damage.");
+
+static const u8 sBaddyBadDescription[] = _(
+ "Acting badly, attacks. Sets\n"
+ "wall, lowering Attack damage.");
+
+static const u8 sSappySeedDescription[] = _(
+ "Giant stalk scatters seeds\n"
+ "that drain HP every turn.");
+
+static const u8 sFreezyFrostDescription[] = _(
+ "Crystal from cold haze hits.\n"
+ "Eliminates all stat changes.");
+
+static const u8 sSparklySwirlDescription[] = _(
+ "Wrap foe with whirlwind of\n"
+ "scent. Heals party's status.");
+
+static const u8 sVeeveeVolleyDescription[] = _(
+ "Eevee's love increases its\n"
+ "power. It never misses.");
+
+static const u8 sDoubleIronBashDescription[] = _(
+ "The user spins and hits with\n"
+ "its arms. May cause flinch.");
+
+// GEN 8
+static const u8 sDynamaxCannonDescription[] = _(
+ "Fires a strong beam. Deals\n"
+ "2x damage to Dynamaxed foes.");
+
+static const u8 sSnipeShotDescription[] = _(
+ "The user ignores effects\n"
+ "that draw in moves.");
+
+static const u8 sJawLockDescription[] = _(
+ "Prevents the user and\n"
+ "the target from escaping.");
+
+static const u8 sStuffCheeksDescription[] = _(
+ "Consumes the user's Berry,\n"
+ "then sharply raises Def.");
+
+static const u8 sNoRetreatDescription[] = _(
+ "Raises all of the user's\n"
+ "stats but prevents escape.");
+
+static const u8 sTarShotDescription[] = _(
+ "Lowers the foe's Speed and\n"
+ "makes it weak to Fire.");
+
+static const u8 sMagicPowderDescription[] = _(
+ "Magic powder changes the\n"
+ "target into a Psychic-type.");
+
+static const u8 sDragonDartsDescription[] = _(
+ "The user attacks twice. Two\n"
+ "targets are hit once each.");
+
+static const u8 sTeatimeDescription[] = _(
+ "All Pokémon have teatime\n"
+ "and eat their Berries.");
+
+static const u8 sOctolockDescription[] = _(
+ "Traps the foe to lower Def\n"
+ "and Sp. Def fall each turn.");
+
+static const u8 sBoltBeakDescription[] = _(
+ "Double power if the user\n"
+ "moves before the target.");
+
+static const u8 sFishiousRendDescription[] = _(
+ "Double power if the user\n"
+ "moves before the target.");
+
+static const u8 sCourtChangeDescription[] = _(
+ "The user swaps effects on\n"
+ "either side of the field.");
+
+static const u8 sClangorousSoulDescription[] = _(
+ "The user uses some of its\n"
+ "HP to raise all its stats.");
+
+static const u8 sBodyPressDescription[] = _(
+ "Does more damage the\n"
+ "higher the user's Def.");
+
+static const u8 sDecorateDescription[] = _(
+ "The user sharply raises\n"
+ "the target's Atk and Sp.Atk");
+
+static const u8 sDrumBeatingDescription[] = _(
+ "Plays a drum to attack.\n"
+ "The foe's Speed is lowered.");
+
+static const u8 sSnapTrapDescription[] = _(
+ "Snares the target in a snap\n"
+ "trap for four to five turns.");
+
+static const u8 sPyroBallDescription[] = _(
+ "Launches a fiery ball at the\n"
+ "target. It may cause a burn.");
+
+static const u8 sBehemothBladeDescription[] = _(
+ "Strikes as a sword. It deals\n"
+ "2x damage to Dynamaxed foes.");
+
+static const u8 sBehemothBashDescription[] = _(
+ "Attacks as a shield. Deals\n"
+ "2x damage to Dynamaxed foes.");
+
+static const u8 sAuraWheelDescription[] = _(
+ "Raises Speed to attack. The\n"
+ "Type is based on its form.");
+
+static const u8 sBreakingSwipeDescription[] = _(
+ "Swings its tail to attack.\n"
+ "Lowers the Atk of those hit.");
+
+static const u8 sBranchPokeDescription[] = _(
+ "The user pokes the target\n"
+ "with a pointed branch.");
+
+static const u8 sOverdriveDescription[] = _(
+ "The user twangs its guitar,\n"
+ "causing strong vibrations.");
+
+static const u8 sAppleAcidDescription[] = _(
+ "Attacks with tart apple acid\n"
+ "to lower the foe's Sp. Def.");
+
+static const u8 sGravAppleDescription[] = _(
+ "Drops an apple from above.\n"
+ "Lowers the foe's Defense.");
+
+static const u8 sSpiritBreakDescription[] = _(
+ "Attacks with spirit-breaking\n"
+ "force. Lowers Sp. Atk.");
+
+static const u8 sStrangeSteamDescription[] = _(
+ "Emits a strange steam to\n"
+ "potentially confuse the foe.");
+
+static const u8 sLifeDewDescription[] = _(
+ "Scatters water to restore\n"
+ "the HP of itself and allies.");
+
+static const u8 sObstructDescription[] = _(
+ "Protects itself, harshly\n"
+ "lowering Def on contact.");
+
+static const u8 sFalseSurrenderDescription[] = _(
+ "Bows to stab the foe\n"
+ "with hair. It never misses.");
+
+static const u8 sMeteorAssaultDescription[] = _(
+ "Attacks with a thick leek.\n"
+ "The user must then rest.");
+
+static const u8 sEternabeamDescription[] = _(
+ "Eternatus' strongest move.\n"
+ "The user rests next turn.");
+
+static const u8 sSteelBeamDescription[] = _(
+ "Fires a beam of steel from\n"
+ "its body. It hurts the user.");
+
+static const u8 sExpandingForceDescription[] = _(
+ "Power goes up and damages\n"
+ "all foes on Psychic Terrain.");
+
+static const u8 sSteelRollerDescription[] = _(
+ "Destroys terrain. Fails if\n"
+ "ground isn't terrain.");
+
+static const u8 sScaleShotDescription[] = _(
+ "Shoots scales 2 to 5 times.\n"
+ "Ups Speed, lowers defense.");
+
+static const u8 sMeteorBeamDescription[] = _(
+ "A 2-turn move that raises\n"
+ "Sp. Attack before attacking.");
+
+static const u8 sShellSideArmDescription[] = _(
+ "Deals better of physical and\n"
+ "special damage. May poison.");
+
+static const u8 sMistyExplosionDescription[] = _(
+ "Hit everything and faint.\n"
+ "Powers up on Misty Terrain.");
+
+static const u8 sGrassyGlideDescription[] = _(
+ "Gliding on ground, hits. Goes\n"
+ "first on Grassy Terrain.");
+
+static const u8 sRisingVoltageDescription[] = _(
+ "This move's power doubles\n"
+ "when on Electric Terrain.");
+
+static const u8 sTerrainPulseDescription[] = _(
+ "Type and power changes\n"
+ "depending on the terrain.");
+
+static const u8 sSkitterSmackDescription[] = _(
+ "User skitters behind foe to\n"
+ "attack. Lowers foe's Sp. Atk.");
+
+static const u8 sBurningJealousyDescription[] = _(
+ "Foes that have stats upped\n"
+ "during the turn get burned.");
+
+static const u8 sLashOutDescription[] = _(
+ "If stats lowered during this\n"
+ "turn, power is doubled.");
+
+static const u8 sPoltergeistDescription[] = _(
+ "Control foe's item to attack.\n"
+ "Fails if foe has no item.");
+
+static const u8 sCorrosiveGasDescription[] = _(
+ "Highly acidic gas melts items\n"
+ "held by surrounding Pokémon.");
+
+static const u8 sCoachingDescription[] = _(
+ "Properly coaches allies to\n"
+ "up their Attack and Defense.");
+
+static const u8 sFlipTurnDescription[] = _(
+ "Attacks and rushes back to\n"
+ "switch with a party Pokémon.");
+
+static const u8 sTripleAxelDescription[] = _(
+ "A 3-kick attack that gets\n"
+ "more powerful with each hit.");
+
+static const u8 sDualWingbeatDescription[] = _(
+ "User slams the target with\n"
+ "wings and hits twice in a row.");
+
+static const u8 sScorchingSandsDescription[] = _(
+ "Throws scorching sand at\n"
+ "the target. May leave a burn.");
+
+static const u8 sJungleHealingDescription[] = _(
+ "Heals HP and status of\n"
+ "itself and allies in battle.");
+
+static const u8 sWickedBlowDescription[] = _(
+ "Mastering the Dark style,\n"
+ "strikes with a critical hit.");
+
+static const u8 sSurgingStrikesDescription[] = _(
+ "Mastering the Water style,\n"
+ "strikes with 3 critical hits.");
+
+static const u8 sThunderCageDescription[] = _(
+ "Traps the foe in a cage of\n"
+#if B_BINDING_TURNS >= GEN_5
+ "electricity for 4 or 5 turns.");
+#else
+ "electricity for 2 to 5 turns.");
+#endif
+
+static const u8 sDragonEnergyDescription[] = _(
+ "The higher the user's HP\n"
+ "the more damage caused.");
+
+static const u8 sFreezingGlareDescription[] = _(
+ "Shoots psychic power from\n"
+ "the eyes. May freeze the foe.");
+
+static const u8 sFieryWrathDescription[] = _(
+ "An attack fueled by your\n"
+ "wrath. May cause flinching.");
+
+static const u8 sThunderousKickDescription[] = _(
+ "Uses a lightning-like kick\n"
+ "to hit. Lowers foe's Defense.");
+
+static const u8 sGlacialLanceDescription[] = _(
+ "Strikes by hurling a blizzard-\n"
+ "cloaked icicle lance at foes.");
+
+static const u8 sAstralBarrageDescription[] = _(
+ "Strikes by sending a frightful\n"
+ "amount of ghosts at foes.");
+
+static const u8 sEerieSpellDescription[] = _(
+ "Attacks with psychic power.\n"
+ "Foe's last move has 3 PP cut.");
+
+static const u8 sNotDoneYetDescription[] = _(
+ "Not done yet.");
// MOVE_NONE is ignored in this table. Make sure to always subtract 1 before getting the right pointer.
const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] =
@@ -1774,4 +3338,406 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] =
[MOVE_WATER_PULSE - 1] = sWaterPulseDescription,
[MOVE_DOOM_DESIRE - 1] = sDoomDesireDescription,
[MOVE_PSYCHO_BOOST - 1] = sPsychoBoostDescription,
+ [MOVE_ROOST - 1] = sRoostDescription,
+ [MOVE_GRAVITY - 1] = sGravityDescription,
+ [MOVE_MIRACLE_EYE - 1] = sMiracleEyeDescription,
+ [MOVE_WAKE_UP_SLAP - 1] = sWakeUpSlapDescription,
+ [MOVE_HAMMER_ARM - 1] = sHammerArmDescription,
+ [MOVE_GYRO_BALL - 1] = sGyroBallDescription,
+ [MOVE_HEALING_WISH - 1] = sHealingWishDescription,
+ [MOVE_BRINE - 1] = sBrineDescription,
+ [MOVE_NATURAL_GIFT - 1] = sNaturalGiftDescription,
+ [MOVE_FEINT - 1] = sFeintDescription,
+ [MOVE_PLUCK - 1] = sPluckDescription,
+ [MOVE_TAILWIND - 1] = sTailwindDescription,
+ [MOVE_ACUPRESSURE - 1] = sAcupressureDescription,
+ [MOVE_METAL_BURST - 1] = sMetalBurstDescription,
+ [MOVE_U_TURN - 1] = sUTurnDescription,
+ [MOVE_CLOSE_COMBAT - 1] = sCloseCombatDescription,
+ [MOVE_PAYBACK - 1] = sPaybackDescription,
+ [MOVE_ASSURANCE - 1] = sAssuranceDescription,
+ [MOVE_EMBARGO - 1] = sEmbargoDescription,
+ [MOVE_FLING - 1] = sFlingDescription,
+ [MOVE_PSYCHO_SHIFT - 1] = sPsychoShiftDescription,
+ [MOVE_TRUMP_CARD - 1] = sTrumpCardDescription,
+ [MOVE_HEAL_BLOCK - 1] = sHealBlockDescription,
+ [MOVE_WRING_OUT - 1] = sWringOutDescription,
+ [MOVE_POWER_TRICK - 1] = sPowerTrickDescription,
+ [MOVE_GASTRO_ACID - 1] = sGastroAcidDescription,
+ [MOVE_LUCKY_CHANT - 1] = sLuckyChantDescription,
+ [MOVE_ME_FIRST - 1] = sMeFirstDescription,
+ [MOVE_COPYCAT - 1] = sCopycatDescription,
+ [MOVE_POWER_SWAP - 1] = sPowerSwapDescription,
+ [MOVE_GUARD_SWAP - 1] = sGuardSwapDescription,
+ [MOVE_PUNISHMENT - 1] = sPunishmentDescription,
+ [MOVE_LAST_RESORT - 1] = sLastResortDescription,
+ [MOVE_WORRY_SEED - 1] = sWorrySeedDescription,
+ [MOVE_SUCKER_PUNCH - 1] = sSuckerPunchDescription,
+ [MOVE_TOXIC_SPIKES - 1] = sToxicSpikesDescription,
+ [MOVE_HEART_SWAP - 1] = sHeartSwapDescription,
+ [MOVE_AQUA_RING - 1] = sAquaRingDescription,
+ [MOVE_MAGNET_RISE - 1] = sMagnetRiseDescription,
+ [MOVE_FLARE_BLITZ - 1] = sFlareBlitzDescription,
+ [MOVE_FORCE_PALM - 1] = sForcePalmDescription,
+ [MOVE_AURA_SPHERE - 1] = sAuraSphereDescription,
+ [MOVE_ROCK_POLISH - 1] = sRockPolishDescription,
+ [MOVE_POISON_JAB - 1] = sPoisonJabDescription,
+ [MOVE_DARK_PULSE - 1] = sDarkPulseDescription,
+ [MOVE_NIGHT_SLASH - 1] = sNightSlashDescription,
+ [MOVE_AQUA_TAIL - 1] = sAquaTailDescription,
+ [MOVE_SEED_BOMB - 1] = sSeedBombDescription,
+ [MOVE_AIR_SLASH - 1] = sAirSlashDescription,
+ [MOVE_X_SCISSOR - 1] = sXScissorDescription,
+ [MOVE_BUG_BUZZ - 1] = sBugBuzzDescription,
+ [MOVE_DRAGON_PULSE - 1] = sDragonPulseDescription,
+ [MOVE_DRAGON_RUSH - 1] = sDragonRushDescription,
+ [MOVE_POWER_GEM - 1] = sPowerGemDescription,
+ [MOVE_DRAIN_PUNCH - 1] = sMegaDrainDescription,
+ [MOVE_VACUUM_WAVE - 1] = sVacuumWaveDescription,
+ [MOVE_FOCUS_BLAST - 1] = sFocusBlastDescription,
+ [MOVE_ENERGY_BALL - 1] = sEnergyBallDescription,
+ [MOVE_BRAVE_BIRD - 1] = sBraveBirdDescription,
+ [MOVE_EARTH_POWER - 1] = sEarthPowerDescription,
+ [MOVE_SWITCHEROO - 1] = sSwitcherooDescription,
+ [MOVE_GIGA_IMPACT - 1] = sHyperBeamDescription,
+ [MOVE_NASTY_PLOT - 1] = sNastyPlotDescription,
+ [MOVE_BULLET_PUNCH - 1] = sBulletPunchDescription,
+ [MOVE_AVALANCHE - 1] = sRevengeDescription,
+ [MOVE_ICE_SHARD - 1] = sIceShardDescription,
+ [MOVE_SHADOW_CLAW - 1] = sShadowClawDescription,
+ [MOVE_THUNDER_FANG - 1] = sThunderFangDescription,
+ [MOVE_ICE_FANG - 1] = sIceFangDescription,
+ [MOVE_FIRE_FANG - 1] = sFireFangDescription,
+ [MOVE_SHADOW_SNEAK - 1] = sShadowSneakDescription,
+ [MOVE_MUD_BOMB - 1] = sMudBombDescription,
+ [MOVE_PSYCHO_CUT - 1] = sPsychoCutDescription,
+ [MOVE_ZEN_HEADBUTT - 1] = sZenHeadbuttDescription,
+ [MOVE_MIRROR_SHOT - 1] = sMirrorShotDescription,
+ [MOVE_FLASH_CANNON - 1] = sFlashCannonDescription,
+ [MOVE_ROCK_CLIMB - 1] = sRockClimbDescription,
+ [MOVE_DEFOG - 1] = sDefogDescription,
+ [MOVE_TRICK_ROOM - 1] = sTrickRoomDescription,
+ [MOVE_DRACO_METEOR - 1] = sDracoMeteorDescription,
+ [MOVE_DISCHARGE - 1] = sDischargeDescription,
+ [MOVE_LAVA_PLUME - 1] = sLavaPlumeDescription,
+ [MOVE_LEAF_STORM - 1] = sLeafStormDescription,
+ [MOVE_POWER_WHIP - 1] = sPowerWhipDescription,
+ [MOVE_ROCK_WRECKER - 1] = sHyperBeamDescription,
+ [MOVE_CROSS_POISON - 1] = sCrossPoisonDescription,
+ [MOVE_GUNK_SHOT - 1] = sGunkShotDescription,
+ [MOVE_IRON_HEAD - 1] = sIronHeadDescription,
+ [MOVE_MAGNET_BOMB - 1] = sMagnetBombDescription,
+ [MOVE_STONE_EDGE - 1] = sStoneEdgeDescription,
+ [MOVE_CAPTIVATE - 1] = sCaptivateDescription,
+ [MOVE_STEALTH_ROCK - 1] = sStealthRockDescription,
+ [MOVE_GRASS_KNOT - 1] = sGrassKnotDescription,
+ [MOVE_CHATTER - 1] = sChatterDescription,
+ [MOVE_JUDGMENT - 1] = sJudgmentDescription,
+ [MOVE_BUG_BITE - 1] = sPluckDescription,
+ [MOVE_CHARGE_BEAM - 1] = sChargeBeamDescription,
+ [MOVE_WOOD_HAMMER - 1] = sWoodHammerDescription,
+ [MOVE_AQUA_JET - 1] = sAquaJetDescription,
+ [MOVE_ATTACK_ORDER - 1] = sAttackOrderDescription,
+ [MOVE_DEFEND_ORDER - 1] = sDefendOrderDescription,
+ [MOVE_HEAL_ORDER - 1] = sHealOrderDescription,
+ [MOVE_HEAD_SMASH - 1] = sHeadSmashDescription,
+ [MOVE_DOUBLE_HIT - 1] = sDoubleHitDescription,
+ [MOVE_ROAR_OF_TIME - 1] = sRoarOfTimeDescription,
+ [MOVE_SPACIAL_REND - 1] = sSpacialRendDescription,
+ [MOVE_LUNAR_DANCE - 1] = sHealingWishDescription,
+ [MOVE_CRUSH_GRIP - 1] = sWringOutDescription,
+ [MOVE_MAGMA_STORM - 1] = sMagmaStormDescription,
+ [MOVE_DARK_VOID - 1] = sDarkVoidDescription,
+ [MOVE_SEED_FLARE - 1] = sSeedFlareDescription,
+ [MOVE_OMINOUS_WIND - 1] = sOminousWindDescription,
+ [MOVE_SHADOW_FORCE - 1] = sShadowForceDescription,
+ [MOVE_HONE_CLAWS - 1] = sHoneClawsDescription,
+ [MOVE_WIDE_GUARD - 1] = sWideGuardDescription,
+ [MOVE_GUARD_SPLIT - 1] = sGuardSplitDescription,
+ [MOVE_POWER_SPLIT - 1] = sPowerSplitDescription,
+ [MOVE_WONDER_ROOM - 1] = sWonderRoomDescription,
+ [MOVE_PSYSHOCK - 1] = sPsyshockDescription,
+ [MOVE_VENOSHOCK - 1] = sVenoshockDescription,
+ [MOVE_AUTOTOMIZE - 1] = sAutotomizeDescription,
+ [MOVE_RAGE_POWDER - 1] = sRagePowderDescription,
+ [MOVE_TELEKINESIS - 1] = sTelekinesisDescription,
+ [MOVE_MAGIC_ROOM - 1] = sMagicRoomDescription,
+ [MOVE_SMACK_DOWN - 1] = sSmackDownDescription,
+ [MOVE_STORM_THROW - 1] = sStormThrowDescription,
+ [MOVE_FLAME_BURST - 1] = sFlameBurstDescription,
+ [MOVE_SLUDGE_WAVE - 1] = sSludgeWaveDescription,
+ [MOVE_QUIVER_DANCE - 1] = sQuiverDanceDescription,
+ [MOVE_HEAVY_SLAM - 1] = sHeavySlamDescription,
+ [MOVE_SYNCHRONOISE - 1] = sSynchronoiseDescription,
+ [MOVE_ELECTRO_BALL - 1] = sElectroBallDescription,
+ [MOVE_SOAK - 1] = sSoakDescription,
+ [MOVE_FLAME_CHARGE - 1] = sFlameChargeDescription,
+ [MOVE_COIL - 1] = sCoilDescription,
+ [MOVE_LOW_SWEEP - 1] = sLowSweepDescription,
+ [MOVE_ACID_SPRAY - 1] = sAcidSprayDescription,
+ [MOVE_FOUL_PLAY - 1] = sFoulPlayDescription,
+ [MOVE_SIMPLE_BEAM - 1] = sSimpleBeamDescription,
+ [MOVE_ENTRAINMENT - 1] = sEntrainmentDescription,
+ [MOVE_AFTER_YOU - 1] = sAfterYouDescription,
+ [MOVE_ROUND - 1] = sRoundDescription,
+ [MOVE_ECHOED_VOICE - 1] = sEchoedVoiceDescription,
+ [MOVE_CHIP_AWAY - 1] = sChipAwayDescription,
+ [MOVE_CLEAR_SMOG - 1] = sClearSmogDescription,
+ [MOVE_STORED_POWER - 1] = sStoredPowerDescription,
+ [MOVE_QUICK_GUARD - 1] = sQuickGuardDescription,
+ [MOVE_ALLY_SWITCH - 1] = sAllySwitchDescription,
+ [MOVE_SCALD - 1] = sScaldDescription,
+ [MOVE_SHELL_SMASH - 1] = sShellSmashDescription,
+ [MOVE_HEAL_PULSE - 1] = sHealPulseDescription,
+ [MOVE_HEX - 1] = sHexDescription,
+ [MOVE_SKY_DROP - 1] = sSkyDropDescription,
+ [MOVE_SHIFT_GEAR - 1] = sShiftGearDescription,
+ [MOVE_CIRCLE_THROW - 1] = sCircleThrowDescription,
+ [MOVE_INCINERATE - 1] = sIncinerateDescription,
+ [MOVE_QUASH - 1] = sQuashDescription,
+ [MOVE_ACROBATICS - 1] = sAcrobaticsDescription,
+ [MOVE_REFLECT_TYPE - 1] = sReflectTypeDescription,
+ [MOVE_RETALIATE - 1] = sRetaliateDescription,
+ [MOVE_FINAL_GAMBIT - 1] = sFinalGambitDescription,
+ [MOVE_BESTOW - 1] = sBestowDescription,
+ [MOVE_INFERNO - 1] = sInfernoDescription,
+ [MOVE_WATER_PLEDGE - 1] = sWaterPledgeDescription,
+ [MOVE_FIRE_PLEDGE - 1] = sFirePledgeDescription,
+ [MOVE_GRASS_PLEDGE - 1] = sGrassPledgeDescription,
+ [MOVE_VOLT_SWITCH - 1] = sUTurnDescription,
+ [MOVE_STRUGGLE_BUG - 1] = sStruggleBugDescription,
+ [MOVE_BULLDOZE - 1] = sBulldozeDescription,
+ [MOVE_FROST_BREATH - 1] = sStormThrowDescription,
+ [MOVE_DRAGON_TAIL - 1] = sCircleThrowDescription,
+ [MOVE_WORK_UP - 1] = sWorkUpDescription,
+ [MOVE_ELECTROWEB - 1] = sElectrowebDescription,
+ [MOVE_WILD_CHARGE - 1] = sWildChargeDescription,
+ [MOVE_DRILL_RUN - 1] = sDrillRunDescription,
+ [MOVE_DUAL_CHOP - 1] = sDualChopDescription,
+ [MOVE_HEART_STAMP - 1] = sHeartStampDescription,
+ [MOVE_HORN_LEECH - 1] = sMegaDrainDescription,
+ [MOVE_SACRED_SWORD - 1] = sChipAwayDescription,
+ [MOVE_RAZOR_SHELL - 1] = sRazorShellDescription,
+ [MOVE_HEAT_CRASH - 1] = sHeavySlamDescription,
+ [MOVE_LEAF_TORNADO - 1] = sLeafTornadoDescription,
+ [MOVE_STEAMROLLER - 1] = sSteamrollerDescription,
+ [MOVE_COTTON_GUARD - 1] = sCottonGuardDescription,
+ [MOVE_NIGHT_DAZE - 1] = sNightDazeDescription,
+ [MOVE_PSYSTRIKE - 1] = sPsyshockDescription,
+ [MOVE_TAIL_SLAP - 1] = sTailSlapDescription,
+ [MOVE_HURRICANE - 1] = sHurricaneDescription,
+ [MOVE_HEAD_CHARGE - 1] = sHeadChargeDescription,
+ [MOVE_GEAR_GRIND - 1] = sGearGrindDescription,
+ [MOVE_SEARING_SHOT - 1] = sLavaPlumeDescription,
+ [MOVE_TECHNO_BLAST - 1] = sTechnoBlastDescription,
+ [MOVE_RELIC_SONG - 1] = sRelicSongDescription,
+ [MOVE_SECRET_SWORD - 1] = sSecretSwordDescription,
+ [MOVE_GLACIATE - 1] = sGlaciateDescription,
+ [MOVE_BOLT_STRIKE - 1] = sBoltStrikeDescription,
+ [MOVE_BLUE_FLARE - 1] = sBlueFlareDescription,
+ [MOVE_FIERY_DANCE - 1] = sFieryDanceDescription,
+ [MOVE_FREEZE_SHOCK - 1] = sFreezeShockDescription,
+ [MOVE_ICE_BURN - 1] = sIceBurnDescription,
+ [MOVE_SNARL - 1] = sSnarlDescription,
+ [MOVE_ICICLE_CRASH - 1] = sIcicleCrashDescription,
+ [MOVE_V_CREATE - 1] = sVCreateDescription,
+ [MOVE_FUSION_FLARE - 1] = sFusionFlareDescription,
+ [MOVE_FUSION_BOLT - 1] = sFusionBoltDescription,
+ [MOVE_FLYING_PRESS - 1] = sFlyingPressDescription,
+ [MOVE_MAT_BLOCK - 1] = sMatBlockDescription,
+ [MOVE_BELCH - 1] = sBelchDescription,
+ [MOVE_ROTOTILLER - 1] = sRototillerDescription,
+ [MOVE_STICKY_WEB - 1] = sStickyWebDescription,
+ [MOVE_FELL_STINGER - 1] = sFellStingerDescription,
+ [MOVE_PHANTOM_FORCE - 1] = sShadowForceDescription,
+ [MOVE_TRICK_OR_TREAT - 1] = sTrickOrTreatDescription,
+ [MOVE_NOBLE_ROAR - 1] = sNobleRoarDescription,
+ [MOVE_ION_DELUGE - 1] = sIonDelugeDescription,
+ [MOVE_PARABOLIC_CHARGE - 1] = sParabolicChargeDescription,
+ [MOVE_FORESTS_CURSE - 1] = sForestsCurseDescription,
+ [MOVE_PETAL_BLIZZARD - 1] = sPetalBlizzardDescription,
+ [MOVE_FREEZE_DRY - 1] = sFreezeDryDescription,
+ [MOVE_DISARMING_VOICE - 1] = sDisarmingVoiceDescription,
+ [MOVE_PARTING_SHOT - 1] = sPartingShotDescription,
+ [MOVE_TOPSY_TURVY - 1] = sTopsyTurvyDescription,
+ [MOVE_DRAINING_KISS - 1] = sDrainingKissDescription,
+ [MOVE_CRAFTY_SHIELD - 1] = sCraftyShieldDescription,
+ [MOVE_FLOWER_SHIELD - 1] = sFlowerShieldDescription,
+ [MOVE_GRASSY_TERRAIN - 1] = sGrassyTerrainDescription,
+ [MOVE_MISTY_TERRAIN - 1] = sMistyTerrainDescription,
+ [MOVE_ELECTRIFY - 1] = sElectrifyDescription,
+ [MOVE_PLAY_ROUGH - 1] = sPlayRoughDescription,
+ [MOVE_FAIRY_WIND - 1] = sFairyWindDescription,
+ [MOVE_MOONBLAST - 1] = sMoonblastDescription,
+ [MOVE_BOOMBURST - 1] = sBoomburstDescription,
+ [MOVE_FAIRY_LOCK - 1] = sFairyLockDescription,
+ [MOVE_KINGS_SHIELD - 1] = sKingsShieldDescription,
+ [MOVE_PLAY_NICE - 1] = sPlayNiceDescription,
+ [MOVE_CONFIDE - 1] = sConfideDescription,
+ [MOVE_DIAMOND_STORM - 1] = sDiamondStormDescription,
+ [MOVE_STEAM_ERUPTION - 1] = sSteamEruptionDescription,
+ [MOVE_HYPERSPACE_HOLE - 1] = sHyperspaceHoleDescription,
+ [MOVE_WATER_SHURIKEN - 1] = sWaterShurikenDescription,
+ [MOVE_MYSTICAL_FIRE - 1] = sMysticalFireDescription,
+ [MOVE_SPIKY_SHIELD - 1] = sSpikyShieldDescription,
+ [MOVE_AROMATIC_MIST - 1] = sAromaticMistDescription,
+ [MOVE_EERIE_IMPULSE - 1] = sEerieImpulseDescription,
+ [MOVE_VENOM_DRENCH - 1] = sVenomDrenchDescription,
+ [MOVE_POWDER - 1] = sPowderDescription,
+ [MOVE_GEOMANCY - 1] = sGeomancyDescription,
+ [MOVE_MAGNETIC_FLUX - 1] = sMagneticFluxDescription,
+ [MOVE_HAPPY_HOUR - 1] = sHappyHourDescription,
+ [MOVE_ELECTRIC_TERRAIN - 1] = sElectricTerrainDescription,
+ [MOVE_DAZZLING_GLEAM - 1] = sDazzlingGleamDescription,
+ [MOVE_CELEBRATE - 1] = sCelebrateDescription,
+ [MOVE_HOLD_HANDS - 1] = sHoldHandsDescription,
+ [MOVE_BABY_DOLL_EYES - 1] = sBabyDollEyesDescription,
+ [MOVE_NUZZLE - 1] = sNuzzleDescription,
+ [MOVE_HOLD_BACK - 1] = sFalseSwipeDescription,
+ [MOVE_INFESTATION - 1] = sInfestationDescription,
+ [MOVE_POWER_UP_PUNCH - 1] = sPowerUpPunchDescription,
+ [MOVE_OBLIVION_WING - 1] = sDrainingKissDescription,
+ [MOVE_THOUSAND_ARROWS - 1] = sThousandArrowsDescription,
+ [MOVE_THOUSAND_WAVES - 1] = sThousandWavesDescription,
+ [MOVE_LANDS_WRATH - 1] = sLandsWrathDescription,
+ [MOVE_LIGHT_OF_RUIN - 1] = sLightOfRuinDescription,
+ [MOVE_ORIGIN_PULSE - 1] = sOriginPulseDescription,
+ [MOVE_PRECIPICE_BLADES - 1] = sPrecipiceBladesDescription,
+ [MOVE_DRAGON_ASCENT - 1] = sCloseCombatDescription,
+ [MOVE_HYPERSPACE_FURY - 1] = sHyperspaceHoleDescription,
+ [MOVE_SHORE_UP - 1] = sShoreUpDescription,
+ [MOVE_FIRST_IMPRESSION - 1] = sFirstImpressionDescription,
+ [MOVE_BANEFUL_BUNKER - 1] = sBanefulBunkerDescription,
+ [MOVE_SPIRIT_SHACKLE - 1] = sSpiritShackleDescription,
+ [MOVE_DARKEST_LARIAT - 1] = sDarkestLariatDescription,
+ [MOVE_SPARKLING_ARIA - 1] = sSparklingAriaDescription,
+ [MOVE_ICE_HAMMER - 1] = sIceHammerDescription,
+ [MOVE_FLORAL_HEALING - 1] = sFloralHealingDescription,
+ [MOVE_HIGH_HORSEPOWER - 1] = sHighHorsepowerDescription,
+ [MOVE_STRENGTH_SAP - 1] = sStrengthSapDescription,
+ [MOVE_SOLAR_BLADE - 1] = sSolarBladeDescription,
+ [MOVE_LEAFAGE - 1] = sLeafageDescription,
+ [MOVE_SPOTLIGHT - 1] = sSpotlightDescription,
+ [MOVE_TOXIC_THREAD - 1] = sToxicThreadDescription,
+ [MOVE_LASER_FOCUS - 1] = sLaserFocusDescription,
+ [MOVE_GEAR_UP - 1] = sGearUpDescription,
+ [MOVE_THROAT_CHOP - 1] = sThroatChopDescription,
+ [MOVE_POLLEN_PUFF - 1] = sPollenPuffDescription,
+ [MOVE_ANCHOR_SHOT - 1] = sAnchorShotDescription,
+ [MOVE_PSYCHIC_TERRAIN - 1] = sPsychicTerrainDescription,
+ [MOVE_LUNGE - 1] = sLungeDescription,
+ [MOVE_FIRE_LASH - 1] = sFireLashDescription,
+ [MOVE_POWER_TRIP - 1] = sPowerTripDescription,
+ [MOVE_BURN_UP - 1] = sBurnUpDescription,
+ [MOVE_SPEED_SWAP - 1] = sSpeedSwapDescription,
+ [MOVE_SMART_STRIKE - 1] = sSmartStrikeDescription,
+ [MOVE_PURIFY - 1] = sPurifyDescription,
+ [MOVE_REVELATION_DANCE - 1] = sRevelationDanceDescription,
+ [MOVE_CORE_ENFORCER - 1] = sCoreEnforcerDescription,
+ [MOVE_TROP_KICK - 1] = sTropKickDescription,
+ [MOVE_INSTRUCT - 1] = sInstructDescription,
+ [MOVE_BEAK_BLAST - 1] = sBeakBlastDescription,
+ [MOVE_CLANGING_SCALES - 1] = sClangingScalesDescription,
+ [MOVE_DRAGON_HAMMER - 1] = sDragonHammerDescription,
+ [MOVE_BRUTAL_SWING - 1] = sBrutalSwingDescription,
+ [MOVE_AURORA_VEIL - 1] = sAuroraVeilDescription,
+ [MOVE_SHELL_TRAP - 1] = sShellTrapDescription,
+ [MOVE_FLEUR_CANNON - 1] = sFleurCannonDescription,
+ [MOVE_PSYCHIC_FANGS - 1] = sPsychicFangsDescription,
+ [MOVE_STOMPING_TANTRUM - 1] = sStompingTantrumDescription,
+ [MOVE_SHADOW_BONE - 1] = sShadowBoneDescription,
+ [MOVE_ACCELEROCK - 1] = sAccelerockDescription,
+ [MOVE_LIQUIDATION - 1] = sLiquidationDescription,
+ [MOVE_PRISMATIC_LASER - 1] = sPrismaticLaserDescription,
+ [MOVE_SPECTRAL_THIEF - 1] = sSpectralThiefDescription,
+ [MOVE_SUNSTEEL_STRIKE - 1] = sSunsteelStrikeDescription,
+ [MOVE_MOONGEIST_BEAM - 1] = sMoongeistBeamDescription,
+ [MOVE_TEARFUL_LOOK - 1] = sTearfulLookDescription,
+ [MOVE_ZING_ZAP - 1] = sZingZapDescription,
+ [MOVE_NATURES_MADNESS - 1] = sNaturesMadnessDescription,
+ [MOVE_MULTI_ATTACK - 1] = sMultiAttackDescription,
+ [MOVE_MIND_BLOWN - 1] = sMindBlownDescription,
+ [MOVE_PLASMA_FISTS - 1] = sPlasmaFistsDescription,
+ [MOVE_PHOTON_GEYSER - 1] = sPhotonGeyserDescription,
+ [MOVE_ZIPPY_ZAP - 1] = sZippyZapDescription,
+ [MOVE_SPLISHY_SPLASH - 1] = sSplishySplashDescription,
+ [MOVE_FLOATY_FALL - 1] = sFloatyFallDescription,
+ [MOVE_PIKA_PAPOW - 1] = sPikaPapowDescription,
+ [MOVE_BOUNCY_BUBBLE - 1] = sBouncyBubbleDescription,
+ [MOVE_BUZZY_BUZZ - 1] = sBuzzyBuzzDescription,
+ [MOVE_SIZZLY_SLIDE - 1] = sSizzlySlideDescription,
+ [MOVE_GLITZY_GLOW - 1] = sGlitzyGlowDescription,
+ [MOVE_BADDY_BAD - 1] = sBaddyBadDescription,
+ [MOVE_SAPPY_SEED - 1] = sSappySeedDescription,
+ [MOVE_FREEZY_FROST - 1] = sFreezyFrostDescription,
+ [MOVE_SPARKLY_SWIRL - 1] = sSparklySwirlDescription,
+ [MOVE_VEEVEE_VOLLEY - 1] = sVeeveeVolleyDescription,
+ [MOVE_DOUBLE_IRON_BASH - 1] = sDoubleIronBashDescription,
+
+ //GEN 8
+ [MOVE_DYNAMAX_CANNON - 1] = sDynamaxCannonDescription,
+ [MOVE_SNIPE_SHOT - 1] = sSnipeShotDescription,
+ [MOVE_JAW_LOCK - 1] = sJawLockDescription,
+ [MOVE_STUFF_CHEEKS - 1] = sStuffCheeksDescription,
+ [MOVE_NO_RETREAT - 1] = sNoRetreatDescription,
+ [MOVE_TAR_SHOT - 1] = sTarShotDescription,
+ [MOVE_MAGIC_POWDER - 1] = sMagicPowderDescription,
+ [MOVE_DRAGON_DARTS - 1] = sDragonDartsDescription,
+ [MOVE_TEATIME - 1] = sTeatimeDescription,
+ [MOVE_OCTOLOCK - 1] = sOctolockDescription,
+ [MOVE_BOLT_BEAK - 1] = sBoltBeakDescription,
+ [MOVE_FISHIOUS_REND - 1] = sFishiousRendDescription,
+ [MOVE_COURT_CHANGE - 1] = sCourtChangeDescription,
+ [MOVE_CLANGOROUS_SOUL - 1] = sClangorousSoulDescription,
+ [MOVE_BODY_PRESS - 1] = sBodyPressDescription,
+ [MOVE_DECORATE - 1] = sDecorateDescription,
+ [MOVE_DRUM_BEATING - 1] = sDrumBeatingDescription,
+ [MOVE_SNAP_TRAP - 1] = sSnapTrapDescription,
+ [MOVE_PYRO_BALL - 1] = sPyroBallDescription,
+ [MOVE_BEHEMOTH_BLADE - 1] = sBehemothBladeDescription,
+ [MOVE_BEHEMOTH_BASH - 1] = sBehemothBashDescription,
+ [MOVE_AURA_WHEEL - 1] = sAuraWheelDescription,
+ [MOVE_BREAKING_SWIPE - 1] = sBreakingSwipeDescription,
+ [MOVE_BRANCH_POKE - 1] = sBranchPokeDescription,
+ [MOVE_OVERDRIVE - 1] = sOverdriveDescription,
+ [MOVE_APPLE_ACID - 1] = sAppleAcidDescription,
+ [MOVE_GRAV_APPLE - 1] = sGravAppleDescription,
+ [MOVE_SPIRIT_BREAK - 1] = sSpiritBreakDescription,
+ [MOVE_STRANGE_STEAM - 1] = sStrangeSteamDescription,
+ [MOVE_LIFE_DEW - 1] = sLifeDewDescription,
+ [MOVE_OBSTRUCT - 1] = sObstructDescription,
+ [MOVE_FALSE_SURRENDER - 1] = sFalseSurrenderDescription,
+ [MOVE_METEOR_ASSAULT - 1] = sMeteorAssaultDescription,
+ [MOVE_ETERNABEAM - 1] = sEternabeamDescription,
+ [MOVE_STEEL_BEAM - 1] = sSteelBeamDescription,
+ [MOVE_EXPANDING_FORCE - 1] = sExpandingForceDescription,
+ [MOVE_STEEL_ROLLER - 1] = sSteelRollerDescription,
+ [MOVE_SCALE_SHOT - 1] = sScaleShotDescription,
+ [MOVE_METEOR_BEAM - 1] = sMeteorBeamDescription,
+ [MOVE_SHELL_SIDE_ARM - 1] = sShellSideArmDescription,
+ [MOVE_MISTY_EXPLOSION - 1] = sMistyExplosionDescription,
+ [MOVE_GRASSY_GLIDE - 1] = sGrassyGlideDescription,
+ [MOVE_RISING_VOLTAGE - 1] = sRisingVoltageDescription,
+ [MOVE_TERRAIN_PULSE - 1] = sTerrainPulseDescription,
+ [MOVE_SKITTER_SMACK - 1] = sSkitterSmackDescription,
+ [MOVE_BURNING_JEALOUSY - 1] = sBurningJealousyDescription,
+ [MOVE_LASH_OUT - 1] = sLashOutDescription,
+ [MOVE_POLTERGEIST - 1] = sPoltergeistDescription,
+ [MOVE_CORROSIVE_GAS - 1] = sCorrosiveGasDescription,
+ [MOVE_COACHING - 1] = sCoachingDescription,
+ [MOVE_FLIP_TURN - 1] = sFlipTurnDescription,
+ [MOVE_TRIPLE_AXEL - 1] = sTripleAxelDescription,
+ [MOVE_DUAL_WINGBEAT - 1] = sDualWingbeatDescription,
+ [MOVE_SCORCHING_SANDS - 1] = sScorchingSandsDescription,
+ [MOVE_JUNGLE_HEALING - 1] = sJungleHealingDescription,
+ [MOVE_WICKED_BLOW - 1] = sWickedBlowDescription,
+ [MOVE_SURGING_STRIKES - 1] = sSurgingStrikesDescription,
+ [MOVE_THUNDER_CAGE - 1] = sThunderCageDescription,
+ [MOVE_DRAGON_ENERGY - 1] = sDragonEnergyDescription,
+ [MOVE_FREEZING_GLARE - 1] = sFreezingGlareDescription,
+ [MOVE_FIERY_WRATH - 1] = sFieryWrathDescription,
+ [MOVE_THUNDEROUS_KICK - 1] = sThunderousKickDescription,
+ [MOVE_GLACIAL_LANCE - 1] = sGlacialLanceDescription,
+ [MOVE_ASTRAL_BARRAGE - 1] = sAstralBarrageDescription,
+ [MOVE_EERIE_SPELL - 1] = sEerieSpellDescription,
};
diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h
index fba9e57d38..48556d7fac 100644
--- a/src/data/text/move_names.h
+++ b/src/data/text/move_names.h
@@ -1,358 +1,1596 @@
+#if B_EXPANDED_MOVE_NAMES == TRUE
+// 16 letters
const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] =
{
[MOVE_NONE] = _("-"),
- [MOVE_POUND] = _("POUND"),
- [MOVE_KARATE_CHOP] = _("KARATE CHOP"),
- [MOVE_DOUBLE_SLAP] = _("DOUBLESLAP"),
- [MOVE_COMET_PUNCH] = _("COMET PUNCH"),
- [MOVE_MEGA_PUNCH] = _("MEGA PUNCH"),
- [MOVE_PAY_DAY] = _("PAY DAY"),
- [MOVE_FIRE_PUNCH] = _("FIRE PUNCH"),
- [MOVE_ICE_PUNCH] = _("ICE PUNCH"),
- [MOVE_THUNDER_PUNCH] = _("THUNDERPUNCH"),
- [MOVE_SCRATCH] = _("SCRATCH"),
- [MOVE_VISE_GRIP] = _("VICEGRIP"),
- [MOVE_GUILLOTINE] = _("GUILLOTINE"),
- [MOVE_RAZOR_WIND] = _("RAZOR WIND"),
- [MOVE_SWORDS_DANCE] = _("SWORDS DANCE"),
- [MOVE_CUT] = _("CUT"),
- [MOVE_GUST] = _("GUST"),
- [MOVE_WING_ATTACK] = _("WING ATTACK"),
- [MOVE_WHIRLWIND] = _("WHIRLWIND"),
- [MOVE_FLY] = _("FLY"),
- [MOVE_BIND] = _("BIND"),
- [MOVE_SLAM] = _("SLAM"),
- [MOVE_VINE_WHIP] = _("VINE WHIP"),
- [MOVE_STOMP] = _("STOMP"),
- [MOVE_DOUBLE_KICK] = _("DOUBLE KICK"),
- [MOVE_MEGA_KICK] = _("MEGA KICK"),
- [MOVE_JUMP_KICK] = _("JUMP KICK"),
- [MOVE_ROLLING_KICK] = _("ROLLING KICK"),
- [MOVE_SAND_ATTACK] = _("SAND-ATTACK"),
- [MOVE_HEADBUTT] = _("HEADBUTT"),
- [MOVE_HORN_ATTACK] = _("HORN ATTACK"),
- [MOVE_FURY_ATTACK] = _("FURY ATTACK"),
- [MOVE_HORN_DRILL] = _("HORN DRILL"),
- [MOVE_TACKLE] = _("TACKLE"),
- [MOVE_BODY_SLAM] = _("BODY SLAM"),
- [MOVE_WRAP] = _("WRAP"),
- [MOVE_TAKE_DOWN] = _("TAKE DOWN"),
- [MOVE_THRASH] = _("THRASH"),
- [MOVE_DOUBLE_EDGE] = _("DOUBLE-EDGE"),
- [MOVE_TAIL_WHIP] = _("TAIL WHIP"),
- [MOVE_POISON_STING] = _("POISON STING"),
- [MOVE_TWINEEDLE] = _("TWINEEDLE"),
- [MOVE_PIN_MISSILE] = _("PIN MISSILE"),
- [MOVE_LEER] = _("LEER"),
- [MOVE_BITE] = _("BITE"),
- [MOVE_GROWL] = _("GROWL"),
- [MOVE_ROAR] = _("ROAR"),
- [MOVE_SING] = _("SING"),
- [MOVE_SUPERSONIC] = _("SUPERSONIC"),
- [MOVE_SONIC_BOOM] = _("SONICBOOM"),
- [MOVE_DISABLE] = _("DISABLE"),
- [MOVE_ACID] = _("ACID"),
- [MOVE_EMBER] = _("EMBER"),
- [MOVE_FLAMETHROWER] = _("FLAMETHROWER"),
- [MOVE_MIST] = _("MIST"),
- [MOVE_WATER_GUN] = _("WATER GUN"),
- [MOVE_HYDRO_PUMP] = _("HYDRO PUMP"),
- [MOVE_SURF] = _("SURF"),
- [MOVE_ICE_BEAM] = _("ICE BEAM"),
- [MOVE_BLIZZARD] = _("BLIZZARD"),
- [MOVE_PSYBEAM] = _("PSYBEAM"),
- [MOVE_BUBBLE_BEAM] = _("BUBBLEBEAM"),
- [MOVE_AURORA_BEAM] = _("AURORA BEAM"),
- [MOVE_HYPER_BEAM] = _("HYPER BEAM"),
- [MOVE_PECK] = _("PECK"),
- [MOVE_DRILL_PECK] = _("DRILL PECK"),
- [MOVE_SUBMISSION] = _("SUBMISSION"),
- [MOVE_LOW_KICK] = _("LOW KICK"),
- [MOVE_COUNTER] = _("COUNTER"),
- [MOVE_SEISMIC_TOSS] = _("SEISMIC TOSS"),
- [MOVE_STRENGTH] = _("STRENGTH"),
- [MOVE_ABSORB] = _("ABSORB"),
- [MOVE_MEGA_DRAIN] = _("MEGA DRAIN"),
- [MOVE_LEECH_SEED] = _("LEECH SEED"),
- [MOVE_GROWTH] = _("GROWTH"),
- [MOVE_RAZOR_LEAF] = _("RAZOR LEAF"),
- [MOVE_SOLAR_BEAM] = _("SOLARBEAM"),
- [MOVE_POISON_POWDER] = _("POISONPOWDER"),
- [MOVE_STUN_SPORE] = _("STUN SPORE"),
- [MOVE_SLEEP_POWDER] = _("SLEEP POWDER"),
- [MOVE_PETAL_DANCE] = _("PETAL DANCE"),
- [MOVE_STRING_SHOT] = _("STRING SHOT"),
- [MOVE_DRAGON_RAGE] = _("DRAGON RAGE"),
- [MOVE_FIRE_SPIN] = _("FIRE SPIN"),
- [MOVE_THUNDER_SHOCK] = _("THUNDERSHOCK"),
- [MOVE_THUNDERBOLT] = _("THUNDERBOLT"),
- [MOVE_THUNDER_WAVE] = _("THUNDER WAVE"),
- [MOVE_THUNDER] = _("THUNDER"),
- [MOVE_ROCK_THROW] = _("ROCK THROW"),
- [MOVE_EARTHQUAKE] = _("EARTHQUAKE"),
- [MOVE_FISSURE] = _("FISSURE"),
- [MOVE_DIG] = _("DIG"),
- [MOVE_TOXIC] = _("TOXIC"),
- [MOVE_CONFUSION] = _("CONFUSION"),
- [MOVE_PSYCHIC] = _("PSYCHIC"),
- [MOVE_HYPNOSIS] = _("HYPNOSIS"),
- [MOVE_MEDITATE] = _("MEDITATE"),
- [MOVE_AGILITY] = _("AGILITY"),
- [MOVE_QUICK_ATTACK] = _("QUICK ATTACK"),
- [MOVE_RAGE] = _("RAGE"),
- [MOVE_TELEPORT] = _("TELEPORT"),
- [MOVE_NIGHT_SHADE] = _("NIGHT SHADE"),
- [MOVE_MIMIC] = _("MIMIC"),
- [MOVE_SCREECH] = _("SCREECH"),
- [MOVE_DOUBLE_TEAM] = _("DOUBLE TEAM"),
- [MOVE_RECOVER] = _("RECOVER"),
- [MOVE_HARDEN] = _("HARDEN"),
- [MOVE_MINIMIZE] = _("MINIMIZE"),
- [MOVE_SMOKESCREEN] = _("SMOKESCREEN"),
- [MOVE_CONFUSE_RAY] = _("CONFUSE RAY"),
- [MOVE_WITHDRAW] = _("WITHDRAW"),
- [MOVE_DEFENSE_CURL] = _("DEFENSE CURL"),
- [MOVE_BARRIER] = _("BARRIER"),
- [MOVE_LIGHT_SCREEN] = _("LIGHT SCREEN"),
- [MOVE_HAZE] = _("HAZE"),
- [MOVE_REFLECT] = _("REFLECT"),
- [MOVE_FOCUS_ENERGY] = _("FOCUS ENERGY"),
- [MOVE_BIDE] = _("BIDE"),
- [MOVE_METRONOME] = _("METRONOME"),
- [MOVE_MIRROR_MOVE] = _("MIRROR MOVE"),
- [MOVE_SELF_DESTRUCT] = _("SELFDESTRUCT"),
- [MOVE_EGG_BOMB] = _("EGG BOMB"),
- [MOVE_LICK] = _("LICK"),
- [MOVE_SMOG] = _("SMOG"),
- [MOVE_SLUDGE] = _("SLUDGE"),
- [MOVE_BONE_CLUB] = _("BONE CLUB"),
- [MOVE_FIRE_BLAST] = _("FIRE BLAST"),
- [MOVE_WATERFALL] = _("WATERFALL"),
- [MOVE_CLAMP] = _("CLAMP"),
- [MOVE_SWIFT] = _("SWIFT"),
- [MOVE_SKULL_BASH] = _("SKULL BASH"),
- [MOVE_SPIKE_CANNON] = _("SPIKE CANNON"),
- [MOVE_CONSTRICT] = _("CONSTRICT"),
- [MOVE_AMNESIA] = _("AMNESIA"),
- [MOVE_KINESIS] = _("KINESIS"),
- [MOVE_SOFT_BOILED] = _("SOFTBOILED"),
- [MOVE_HIGH_JUMP_KICK] = _("HI JUMP KICK"),
- [MOVE_GLARE] = _("GLARE"),
- [MOVE_DREAM_EATER] = _("DREAM EATER"),
- [MOVE_POISON_GAS] = _("POISON GAS"),
- [MOVE_BARRAGE] = _("BARRAGE"),
- [MOVE_LEECH_LIFE] = _("LEECH LIFE"),
- [MOVE_LOVELY_KISS] = _("LOVELY KISS"),
- [MOVE_SKY_ATTACK] = _("SKY ATTACK"),
- [MOVE_TRANSFORM] = _("TRANSFORM"),
- [MOVE_BUBBLE] = _("BUBBLE"),
- [MOVE_DIZZY_PUNCH] = _("DIZZY PUNCH"),
- [MOVE_SPORE] = _("SPORE"),
- [MOVE_FLASH] = _("FLASH"),
- [MOVE_PSYWAVE] = _("PSYWAVE"),
- [MOVE_SPLASH] = _("SPLASH"),
- [MOVE_ACID_ARMOR] = _("ACID ARMOR"),
- [MOVE_CRABHAMMER] = _("CRABHAMMER"),
- [MOVE_EXPLOSION] = _("EXPLOSION"),
- [MOVE_FURY_SWIPES] = _("FURY SWIPES"),
- [MOVE_BONEMERANG] = _("BONEMERANG"),
- [MOVE_REST] = _("REST"),
- [MOVE_ROCK_SLIDE] = _("ROCK SLIDE"),
- [MOVE_HYPER_FANG] = _("HYPER FANG"),
- [MOVE_SHARPEN] = _("SHARPEN"),
- [MOVE_CONVERSION] = _("CONVERSION"),
- [MOVE_TRI_ATTACK] = _("TRI ATTACK"),
- [MOVE_SUPER_FANG] = _("SUPER FANG"),
- [MOVE_SLASH] = _("SLASH"),
- [MOVE_SUBSTITUTE] = _("SUBSTITUTE"),
- [MOVE_STRUGGLE] = _("STRUGGLE"),
- [MOVE_SKETCH] = _("SKETCH"),
- [MOVE_TRIPLE_KICK] = _("TRIPLE KICK"),
- [MOVE_THIEF] = _("THIEF"),
- [MOVE_SPIDER_WEB] = _("SPIDER WEB"),
- [MOVE_MIND_READER] = _("MIND READER"),
- [MOVE_NIGHTMARE] = _("NIGHTMARE"),
- [MOVE_FLAME_WHEEL] = _("FLAME WHEEL"),
- [MOVE_SNORE] = _("SNORE"),
- [MOVE_CURSE] = _("CURSE"),
- [MOVE_FLAIL] = _("FLAIL"),
- [MOVE_CONVERSION_2] = _("CONVERSION 2"),
- [MOVE_AEROBLAST] = _("AEROBLAST"),
- [MOVE_COTTON_SPORE] = _("COTTON SPORE"),
- [MOVE_REVERSAL] = _("REVERSAL"),
- [MOVE_SPITE] = _("SPITE"),
- [MOVE_POWDER_SNOW] = _("POWDER SNOW"),
- [MOVE_PROTECT] = _("PROTECT"),
- [MOVE_MACH_PUNCH] = _("MACH PUNCH"),
- [MOVE_SCARY_FACE] = _("SCARY FACE"),
- [MOVE_FEINT_ATTACK] = _("FAINT ATTACK"),
- [MOVE_SWEET_KISS] = _("SWEET KISS"),
- [MOVE_BELLY_DRUM] = _("BELLY DRUM"),
- [MOVE_SLUDGE_BOMB] = _("SLUDGE BOMB"),
- [MOVE_MUD_SLAP] = _("MUD-SLAP"),
- [MOVE_OCTAZOOKA] = _("OCTAZOOKA"),
- [MOVE_SPIKES] = _("SPIKES"),
- [MOVE_ZAP_CANNON] = _("ZAP CANNON"),
- [MOVE_FORESIGHT] = _("FORESIGHT"),
- [MOVE_DESTINY_BOND] = _("DESTINY BOND"),
- [MOVE_PERISH_SONG] = _("PERISH SONG"),
- [MOVE_ICY_WIND] = _("ICY WIND"),
- [MOVE_DETECT] = _("DETECT"),
- [MOVE_BONE_RUSH] = _("BONE RUSH"),
- [MOVE_LOCK_ON] = _("LOCK-ON"),
- [MOVE_OUTRAGE] = _("OUTRAGE"),
- [MOVE_SANDSTORM] = _("SANDSTORM"),
- [MOVE_GIGA_DRAIN] = _("GIGA DRAIN"),
- [MOVE_ENDURE] = _("ENDURE"),
- [MOVE_CHARM] = _("CHARM"),
- [MOVE_ROLLOUT] = _("ROLLOUT"),
- [MOVE_FALSE_SWIPE] = _("FALSE SWIPE"),
- [MOVE_SWAGGER] = _("SWAGGER"),
- [MOVE_MILK_DRINK] = _("MILK DRINK"),
- [MOVE_SPARK] = _("SPARK"),
- [MOVE_FURY_CUTTER] = _("FURY CUTTER"),
- [MOVE_STEEL_WING] = _("STEEL WING"),
- [MOVE_MEAN_LOOK] = _("MEAN LOOK"),
- [MOVE_ATTRACT] = _("ATTRACT"),
- [MOVE_SLEEP_TALK] = _("SLEEP TALK"),
- [MOVE_HEAL_BELL] = _("HEAL BELL"),
- [MOVE_RETURN] = _("RETURN"),
- [MOVE_PRESENT] = _("PRESENT"),
- [MOVE_FRUSTRATION] = _("FRUSTRATION"),
- [MOVE_SAFEGUARD] = _("SAFEGUARD"),
- [MOVE_PAIN_SPLIT] = _("PAIN SPLIT"),
- [MOVE_SACRED_FIRE] = _("SACRED FIRE"),
- [MOVE_MAGNITUDE] = _("MAGNITUDE"),
- [MOVE_DYNAMIC_PUNCH] = _("DYNAMICPUNCH"),
- [MOVE_MEGAHORN] = _("MEGAHORN"),
- [MOVE_DRAGON_BREATH] = _("DRAGONBREATH"),
- [MOVE_BATON_PASS] = _("BATON PASS"),
- [MOVE_ENCORE] = _("ENCORE"),
- [MOVE_PURSUIT] = _("PURSUIT"),
- [MOVE_RAPID_SPIN] = _("RAPID SPIN"),
- [MOVE_SWEET_SCENT] = _("SWEET SCENT"),
- [MOVE_IRON_TAIL] = _("IRON TAIL"),
- [MOVE_METAL_CLAW] = _("METAL CLAW"),
- [MOVE_VITAL_THROW] = _("VITAL THROW"),
- [MOVE_MORNING_SUN] = _("MORNING SUN"),
- [MOVE_SYNTHESIS] = _("SYNTHESIS"),
- [MOVE_MOONLIGHT] = _("MOONLIGHT"),
- [MOVE_HIDDEN_POWER] = _("HIDDEN POWER"),
- [MOVE_CROSS_CHOP] = _("CROSS CHOP"),
- [MOVE_TWISTER] = _("TWISTER"),
- [MOVE_RAIN_DANCE] = _("RAIN DANCE"),
- [MOVE_SUNNY_DAY] = _("SUNNY DAY"),
- [MOVE_CRUNCH] = _("CRUNCH"),
- [MOVE_MIRROR_COAT] = _("MIRROR COAT"),
- [MOVE_PSYCH_UP] = _("PSYCH UP"),
- [MOVE_EXTREME_SPEED] = _("EXTREMESPEED"),
- [MOVE_ANCIENT_POWER] = _("ANCIENTPOWER"),
- [MOVE_SHADOW_BALL] = _("SHADOW BALL"),
- [MOVE_FUTURE_SIGHT] = _("FUTURE SIGHT"),
- [MOVE_ROCK_SMASH] = _("ROCK SMASH"),
- [MOVE_WHIRLPOOL] = _("WHIRLPOOL"),
- [MOVE_BEAT_UP] = _("BEAT UP"),
- [MOVE_FAKE_OUT] = _("FAKE OUT"),
- [MOVE_UPROAR] = _("UPROAR"),
- [MOVE_STOCKPILE] = _("STOCKPILE"),
- [MOVE_SPIT_UP] = _("SPIT UP"),
- [MOVE_SWALLOW] = _("SWALLOW"),
- [MOVE_HEAT_WAVE] = _("HEAT WAVE"),
- [MOVE_HAIL] = _("HAIL"),
- [MOVE_TORMENT] = _("TORMENT"),
- [MOVE_FLATTER] = _("FLATTER"),
- [MOVE_WILL_O_WISP] = _("WILL-O-WISP"),
- [MOVE_MEMENTO] = _("MEMENTO"),
- [MOVE_FACADE] = _("FACADE"),
- [MOVE_FOCUS_PUNCH] = _("FOCUS PUNCH"),
- [MOVE_SMELLING_SALTS] = _("SMELLINGSALT"),
- [MOVE_FOLLOW_ME] = _("FOLLOW ME"),
- [MOVE_NATURE_POWER] = _("NATURE POWER"),
- [MOVE_CHARGE] = _("CHARGE"),
- [MOVE_TAUNT] = _("TAUNT"),
- [MOVE_HELPING_HAND] = _("HELPING HAND"),
- [MOVE_TRICK] = _("TRICK"),
- [MOVE_ROLE_PLAY] = _("ROLE PLAY"),
- [MOVE_WISH] = _("WISH"),
- [MOVE_ASSIST] = _("ASSIST"),
- [MOVE_INGRAIN] = _("INGRAIN"),
- [MOVE_SUPERPOWER] = _("SUPERPOWER"),
- [MOVE_MAGIC_COAT] = _("MAGIC COAT"),
- [MOVE_RECYCLE] = _("RECYCLE"),
- [MOVE_REVENGE] = _("REVENGE"),
- [MOVE_BRICK_BREAK] = _("BRICK BREAK"),
- [MOVE_YAWN] = _("YAWN"),
- [MOVE_KNOCK_OFF] = _("KNOCK OFF"),
- [MOVE_ENDEAVOR] = _("ENDEAVOR"),
- [MOVE_ERUPTION] = _("ERUPTION"),
- [MOVE_SKILL_SWAP] = _("SKILL SWAP"),
- [MOVE_IMPRISON] = _("IMPRISON"),
- [MOVE_REFRESH] = _("REFRESH"),
- [MOVE_GRUDGE] = _("GRUDGE"),
- [MOVE_SNATCH] = _("SNATCH"),
- [MOVE_SECRET_POWER] = _("SECRET POWER"),
- [MOVE_DIVE] = _("DIVE"),
- [MOVE_ARM_THRUST] = _("ARM THRUST"),
- [MOVE_CAMOUFLAGE] = _("CAMOUFLAGE"),
- [MOVE_TAIL_GLOW] = _("TAIL GLOW"),
- [MOVE_LUSTER_PURGE] = _("LUSTER PURGE"),
- [MOVE_MIST_BALL] = _("MIST BALL"),
- [MOVE_FEATHER_DANCE] = _("FEATHERDANCE"),
- [MOVE_TEETER_DANCE] = _("TEETER DANCE"),
- [MOVE_BLAZE_KICK] = _("BLAZE KICK"),
- [MOVE_MUD_SPORT] = _("MUD SPORT"),
- [MOVE_ICE_BALL] = _("ICE BALL"),
- [MOVE_NEEDLE_ARM] = _("NEEDLE ARM"),
- [MOVE_SLACK_OFF] = _("SLACK OFF"),
- [MOVE_HYPER_VOICE] = _("HYPER VOICE"),
- [MOVE_POISON_FANG] = _("POISON FANG"),
- [MOVE_CRUSH_CLAW] = _("CRUSH CLAW"),
- [MOVE_BLAST_BURN] = _("BLAST BURN"),
- [MOVE_HYDRO_CANNON] = _("HYDRO CANNON"),
- [MOVE_METEOR_MASH] = _("METEOR MASH"),
- [MOVE_ASTONISH] = _("ASTONISH"),
- [MOVE_WEATHER_BALL] = _("WEATHER BALL"),
- [MOVE_AROMATHERAPY] = _("AROMATHERAPY"),
- [MOVE_FAKE_TEARS] = _("FAKE TEARS"),
- [MOVE_AIR_CUTTER] = _("AIR CUTTER"),
- [MOVE_OVERHEAT] = _("OVERHEAT"),
- [MOVE_ODOR_SLEUTH] = _("ODOR SLEUTH"),
- [MOVE_ROCK_TOMB] = _("ROCK TOMB"),
- [MOVE_SILVER_WIND] = _("SILVER WIND"),
- [MOVE_METAL_SOUND] = _("METAL SOUND"),
- [MOVE_GRASS_WHISTLE] = _("GRASSWHISTLE"),
- [MOVE_TICKLE] = _("TICKLE"),
- [MOVE_COSMIC_POWER] = _("COSMIC POWER"),
- [MOVE_WATER_SPOUT] = _("WATER SPOUT"),
- [MOVE_SIGNAL_BEAM] = _("SIGNAL BEAM"),
- [MOVE_SHADOW_PUNCH] = _("SHADOW PUNCH"),
- [MOVE_EXTRASENSORY] = _("EXTRASENSORY"),
- [MOVE_SKY_UPPERCUT] = _("SKY UPPERCUT"),
- [MOVE_SAND_TOMB] = _("SAND TOMB"),
- [MOVE_SHEER_COLD] = _("SHEER COLD"),
- [MOVE_MUDDY_WATER] = _("MUDDY WATER"),
- [MOVE_BULLET_SEED] = _("BULLET SEED"),
- [MOVE_AERIAL_ACE] = _("AERIAL ACE"),
- [MOVE_ICICLE_SPEAR] = _("ICICLE SPEAR"),
- [MOVE_IRON_DEFENSE] = _("IRON DEFENSE"),
- [MOVE_BLOCK] = _("BLOCK"),
- [MOVE_HOWL] = _("HOWL"),
- [MOVE_DRAGON_CLAW] = _("DRAGON CLAW"),
- [MOVE_FRENZY_PLANT] = _("FRENZY PLANT"),
- [MOVE_BULK_UP] = _("BULK UP"),
- [MOVE_BOUNCE] = _("BOUNCE"),
- [MOVE_MUD_SHOT] = _("MUD SHOT"),
- [MOVE_POISON_TAIL] = _("POISON TAIL"),
- [MOVE_COVET] = _("COVET"),
- [MOVE_VOLT_TACKLE] = _("VOLT TACKLE"),
- [MOVE_MAGICAL_LEAF] = _("MAGICAL LEAF"),
- [MOVE_WATER_SPORT] = _("WATER SPORT"),
- [MOVE_CALM_MIND] = _("CALM MIND"),
- [MOVE_LEAF_BLADE] = _("LEAF BLADE"),
- [MOVE_DRAGON_DANCE] = _("DRAGON DANCE"),
- [MOVE_ROCK_BLAST] = _("ROCK BLAST"),
- [MOVE_SHOCK_WAVE] = _("SHOCK WAVE"),
- [MOVE_WATER_PULSE] = _("WATER PULSE"),
- [MOVE_DOOM_DESIRE] = _("DOOM DESIRE"),
- [MOVE_PSYCHO_BOOST] = _("PSYCHO BOOST"),
+ [MOVE_POUND] = _("Pound"),
+ [MOVE_KARATE_CHOP] = _("Karate Chop"),
+ [MOVE_DOUBLE_SLAP] = _("Double Slap"),
+ [MOVE_COMET_PUNCH] = _("Comet Punch"),
+ [MOVE_MEGA_PUNCH] = _("Mega Punch"),
+ [MOVE_PAY_DAY] = _("Pay Day"),
+ [MOVE_FIRE_PUNCH] = _("Fire Punch"),
+ [MOVE_ICE_PUNCH] = _("Ice Punch"),
+ [MOVE_THUNDER_PUNCH] = _("Thunder Punch"),
+ [MOVE_SCRATCH] = _("Scratch"),
+ [MOVE_VISE_GRIP] = _("Vise Grip"),
+ [MOVE_GUILLOTINE] = _("Guillotine"),
+ [MOVE_RAZOR_WIND] = _("Razor Wind"),
+ [MOVE_SWORDS_DANCE] = _("Swords Dance"),
+ [MOVE_CUT] = _("Cut"),
+ [MOVE_GUST] = _("Gust"),
+ [MOVE_WING_ATTACK] = _("Wing Attack"),
+ [MOVE_WHIRLWIND] = _("Whirlwind"),
+ [MOVE_FLY] = _("Fly"),
+ [MOVE_BIND] = _("Bind"),
+ [MOVE_SLAM] = _("Slam"),
+ [MOVE_VINE_WHIP] = _("Vine Whip"),
+ [MOVE_STOMP] = _("Stomp"),
+ [MOVE_DOUBLE_KICK] = _("Double Kick"),
+ [MOVE_MEGA_KICK] = _("Mega Kick"),
+ [MOVE_JUMP_KICK] = _("Jump Kick"),
+ [MOVE_ROLLING_KICK] = _("Rolling Kick"),
+ [MOVE_SAND_ATTACK] = _("Sand Attack"),
+ [MOVE_HEADBUTT] = _("Headbutt"),
+ [MOVE_HORN_ATTACK] = _("Horn Attack"),
+ [MOVE_FURY_ATTACK] = _("Fury Attack"),
+ [MOVE_HORN_DRILL] = _("Horn Drill"),
+ [MOVE_TACKLE] = _("Tackle"),
+ [MOVE_BODY_SLAM] = _("Body Slam"),
+ [MOVE_WRAP] = _("Wrap"),
+ [MOVE_TAKE_DOWN] = _("Take Down"),
+ [MOVE_THRASH] = _("Thrash"),
+ [MOVE_DOUBLE_EDGE] = _("Double-Edge"),
+ [MOVE_TAIL_WHIP] = _("Tail Whip"),
+ [MOVE_POISON_STING] = _("Poison Sting"),
+ [MOVE_TWINEEDLE] = _("Twineedle"),
+ [MOVE_PIN_MISSILE] = _("Pin Missile"),
+ [MOVE_LEER] = _("Leer"),
+ [MOVE_BITE] = _("Bite"),
+ [MOVE_GROWL] = _("Growl"),
+ [MOVE_ROAR] = _("Roar"),
+ [MOVE_SING] = _("Sing"),
+ [MOVE_SUPERSONIC] = _("Supersonic"),
+ [MOVE_SONIC_BOOM] = _("Sonic Boom"),
+ [MOVE_DISABLE] = _("Disable"),
+ [MOVE_ACID] = _("Acid"),
+ [MOVE_EMBER] = _("Ember"),
+ [MOVE_FLAMETHROWER] = _("Flamethrower"),
+ [MOVE_MIST] = _("Mist"),
+ [MOVE_WATER_GUN] = _("Water Gun"),
+ [MOVE_HYDRO_PUMP] = _("Hydro Pump"),
+ [MOVE_SURF] = _("Surf"),
+ [MOVE_ICE_BEAM] = _("Ice Beam"),
+ [MOVE_BLIZZARD] = _("Blizzard"),
+ [MOVE_PSYBEAM] = _("Psybeam"),
+ [MOVE_BUBBLE_BEAM] = _("Bubble Beam"),
+ [MOVE_AURORA_BEAM] = _("Aurora Beam"),
+ [MOVE_HYPER_BEAM] = _("Hyper Beam"),
+ [MOVE_PECK] = _("Peck"),
+ [MOVE_DRILL_PECK] = _("Drill Peck"),
+ [MOVE_SUBMISSION] = _("Submission"),
+ [MOVE_LOW_KICK] = _("Low Kick"),
+ [MOVE_COUNTER] = _("Counter"),
+ [MOVE_SEISMIC_TOSS] = _("Seismic Toss"),
+ [MOVE_STRENGTH] = _("Strength"),
+ [MOVE_ABSORB] = _("Absorb"),
+ [MOVE_MEGA_DRAIN] = _("Mega Drain"),
+ [MOVE_LEECH_SEED] = _("Leech Seed"),
+ [MOVE_GROWTH] = _("Growth"),
+ [MOVE_RAZOR_LEAF] = _("Razor Leaf"),
+ [MOVE_SOLAR_BEAM] = _("Solar Beam"),
+ [MOVE_POISON_POWDER] = _("Poison Powder"),
+ [MOVE_STUN_SPORE] = _("Stun Spore"),
+ [MOVE_SLEEP_POWDER] = _("Sleep Powder"),
+ [MOVE_PETAL_DANCE] = _("Petal Dance"),
+ [MOVE_STRING_SHOT] = _("String Shot"),
+ [MOVE_DRAGON_RAGE] = _("Dragon Rage"),
+ [MOVE_FIRE_SPIN] = _("Fire Spin"),
+ [MOVE_THUNDER_SHOCK] = _("Thunder Shock"),
+ [MOVE_THUNDERBOLT] = _("Thunderbolt"),
+ [MOVE_THUNDER_WAVE] = _("Thunder Wave"),
+ [MOVE_THUNDER] = _("Thunder"),
+ [MOVE_ROCK_THROW] = _("Rock Throw"),
+ [MOVE_EARTHQUAKE] = _("Earthquake"),
+ [MOVE_FISSURE] = _("Fissure"),
+ [MOVE_DIG] = _("Dig"),
+ [MOVE_TOXIC] = _("Toxic"),
+ [MOVE_CONFUSION] = _("Confusion"),
+ [MOVE_PSYCHIC] = _("Psychic"),
+ [MOVE_HYPNOSIS] = _("Hypnosis"),
+ [MOVE_MEDITATE] = _("Meditate"),
+ [MOVE_AGILITY] = _("Agility"),
+ [MOVE_QUICK_ATTACK] = _("Quick Attack"),
+ [MOVE_RAGE] = _("Rage"),
+ [MOVE_TELEPORT] = _("Teleport"),
+ [MOVE_NIGHT_SHADE] = _("Night Shade"),
+ [MOVE_MIMIC] = _("Mimic"),
+ [MOVE_SCREECH] = _("Screech"),
+ [MOVE_DOUBLE_TEAM] = _("Double Team"),
+ [MOVE_RECOVER] = _("Recover"),
+ [MOVE_HARDEN] = _("Harden"),
+ [MOVE_MINIMIZE] = _("Minimize"),
+ [MOVE_SMOKESCREEN] = _("Smokescreen"),
+ [MOVE_CONFUSE_RAY] = _("Confuse Ray"),
+ [MOVE_WITHDRAW] = _("Withdraw"),
+ [MOVE_DEFENSE_CURL] = _("Defense Curl"),
+ [MOVE_BARRIER] = _("Barrier"),
+ [MOVE_LIGHT_SCREEN] = _("Light Screen"),
+ [MOVE_HAZE] = _("Haze"),
+ [MOVE_REFLECT] = _("Reflect"),
+ [MOVE_FOCUS_ENERGY] = _("Focus Energy"),
+ [MOVE_BIDE] = _("Bide"),
+ [MOVE_METRONOME] = _("Metronome"),
+ [MOVE_MIRROR_MOVE] = _("Mirror Move"),
+ [MOVE_SELF_DESTRUCT] = _("Self-Destruct"),
+ [MOVE_EGG_BOMB] = _("Egg Bomb"),
+ [MOVE_LICK] = _("Lick"),
+ [MOVE_SMOG] = _("Smog"),
+ [MOVE_SLUDGE] = _("Sludge"),
+ [MOVE_BONE_CLUB] = _("Bone Club"),
+ [MOVE_FIRE_BLAST] = _("Fire Blast"),
+ [MOVE_WATERFALL] = _("Waterfall"),
+ [MOVE_CLAMP] = _("Clamp"),
+ [MOVE_SWIFT] = _("Swift"),
+ [MOVE_SKULL_BASH] = _("Skull Bash"),
+ [MOVE_SPIKE_CANNON] = _("Spike Cannon"),
+ [MOVE_CONSTRICT] = _("Constrict"),
+ [MOVE_AMNESIA] = _("Amnesia"),
+ [MOVE_KINESIS] = _("Kinesis"),
+ [MOVE_SOFT_BOILED] = _("Soft-Boiled"),
+ [MOVE_HIGH_JUMP_KICK] = _("High Jump Kick"),
+ [MOVE_GLARE] = _("Glare"),
+ [MOVE_DREAM_EATER] = _("Dream Eater"),
+ [MOVE_POISON_GAS] = _("Poison Gas"),
+ [MOVE_BARRAGE] = _("Barrage"),
+ [MOVE_LEECH_LIFE] = _("Leech Life"),
+ [MOVE_LOVELY_KISS] = _("Lovely Kiss"),
+ [MOVE_SKY_ATTACK] = _("Sky Attack"),
+ [MOVE_TRANSFORM] = _("Transform"),
+ [MOVE_BUBBLE] = _("Bubble"),
+ [MOVE_DIZZY_PUNCH] = _("Dizzy Punch"),
+ [MOVE_SPORE] = _("Spore"),
+ [MOVE_FLASH] = _("Flash"),
+ [MOVE_PSYWAVE] = _("Psywave"),
+ [MOVE_SPLASH] = _("Splash"),
+ [MOVE_ACID_ARMOR] = _("Acid Armor"),
+ [MOVE_CRABHAMMER] = _("Crabhammer"),
+ [MOVE_EXPLOSION] = _("Explosion"),
+ [MOVE_FURY_SWIPES] = _("Fury Swipes"),
+ [MOVE_BONEMERANG] = _("Bonemerang"),
+ [MOVE_REST] = _("Rest"),
+ [MOVE_ROCK_SLIDE] = _("Rock Slide"),
+ [MOVE_HYPER_FANG] = _("Hyper Fang"),
+ [MOVE_SHARPEN] = _("Sharpen"),
+ [MOVE_CONVERSION] = _("Conversion"),
+ [MOVE_TRI_ATTACK] = _("Tri Attack"),
+ [MOVE_SUPER_FANG] = _("Super Fang"),
+ [MOVE_SLASH] = _("Slash"),
+ [MOVE_SUBSTITUTE] = _("Substitute"),
+ [MOVE_STRUGGLE] = _("Struggle"),
+ [MOVE_SKETCH] = _("Sketch"),
+ [MOVE_TRIPLE_KICK] = _("Triple Kick"),
+ [MOVE_THIEF] = _("Thief"),
+ [MOVE_SPIDER_WEB] = _("Spider Web"),
+ [MOVE_MIND_READER] = _("Mind Reader"),
+ [MOVE_NIGHTMARE] = _("Nightmare"),
+ [MOVE_FLAME_WHEEL] = _("Flame Wheel"),
+ [MOVE_SNORE] = _("Snore"),
+ [MOVE_CURSE] = _("Curse"),
+ [MOVE_FLAIL] = _("Flail"),
+ [MOVE_CONVERSION_2] = _("Conversion 2"),
+ [MOVE_AEROBLAST] = _("Aeroblast"),
+ [MOVE_COTTON_SPORE] = _("Cotton Spore"),
+ [MOVE_REVERSAL] = _("Reversal"),
+ [MOVE_SPITE] = _("Spite"),
+ [MOVE_POWDER_SNOW] = _("Powder Snow"),
+ [MOVE_PROTECT] = _("Protect"),
+ [MOVE_MACH_PUNCH] = _("Mach Punch"),
+ [MOVE_SCARY_FACE] = _("Scary Face"),
+ [MOVE_FEINT_ATTACK] = _("Feint Attack"),
+ [MOVE_SWEET_KISS] = _("Sweet Kiss"),
+ [MOVE_BELLY_DRUM] = _("Belly Drum"),
+ [MOVE_SLUDGE_BOMB] = _("Sludge Bomb"),
+ [MOVE_MUD_SLAP] = _("Mud-Slap"),
+ [MOVE_OCTAZOOKA] = _("Octazooka"),
+ [MOVE_SPIKES] = _("Spikes"),
+ [MOVE_ZAP_CANNON] = _("Zap Cannon"),
+ [MOVE_FORESIGHT] = _("Foresight"),
+ [MOVE_DESTINY_BOND] = _("Destiny Bond"),
+ [MOVE_PERISH_SONG] = _("Perish Song"),
+ [MOVE_ICY_WIND] = _("Icy Wind"),
+ [MOVE_DETECT] = _("Detect"),
+ [MOVE_BONE_RUSH] = _("Bone Rush"),
+ [MOVE_LOCK_ON] = _("Lock-On"),
+ [MOVE_OUTRAGE] = _("Outrage"),
+ [MOVE_SANDSTORM] = _("Sandstorm"),
+ [MOVE_GIGA_DRAIN] = _("Giga Drain"),
+ [MOVE_ENDURE] = _("Endure"),
+ [MOVE_CHARM] = _("Charm"),
+ [MOVE_ROLLOUT] = _("Rollout"),
+ [MOVE_FALSE_SWIPE] = _("False Swipe"),
+ [MOVE_SWAGGER] = _("Swagger"),
+ [MOVE_MILK_DRINK] = _("Milk Drink"),
+ [MOVE_SPARK] = _("Spark"),
+ [MOVE_FURY_CUTTER] = _("Fury Cutter"),
+ [MOVE_STEEL_WING] = _("Steel Wing"),
+ [MOVE_MEAN_LOOK] = _("Mean Look"),
+ [MOVE_ATTRACT] = _("Attract"),
+ [MOVE_SLEEP_TALK] = _("Sleep Talk"),
+ [MOVE_HEAL_BELL] = _("Heal Bell"),
+ [MOVE_RETURN] = _("Return"),
+ [MOVE_PRESENT] = _("Present"),
+ [MOVE_FRUSTRATION] = _("Frustration"),
+ [MOVE_SAFEGUARD] = _("Safeguard"),
+ [MOVE_PAIN_SPLIT] = _("Pain Split"),
+ [MOVE_SACRED_FIRE] = _("Sacred Fire"),
+ [MOVE_MAGNITUDE] = _("Magnitude"),
+ [MOVE_DYNAMIC_PUNCH] = _("Dynamic Punch"),
+ [MOVE_MEGAHORN] = _("Megahorn"),
+ [MOVE_DRAGON_BREATH] = _("Dragon Breath"),
+ [MOVE_BATON_PASS] = _("Baton Pass"),
+ [MOVE_ENCORE] = _("Encore"),
+ [MOVE_PURSUIT] = _("Pursuit"),
+ [MOVE_RAPID_SPIN] = _("Rapid Spin"),
+ [MOVE_SWEET_SCENT] = _("Sweet Scent"),
+ [MOVE_IRON_TAIL] = _("Iron Tail"),
+ [MOVE_METAL_CLAW] = _("Metal Claw"),
+ [MOVE_VITAL_THROW] = _("Vital Throw"),
+ [MOVE_MORNING_SUN] = _("Morning Sun"),
+ [MOVE_SYNTHESIS] = _("Synthesis"),
+ [MOVE_MOONLIGHT] = _("Moonlight"),
+ [MOVE_HIDDEN_POWER] = _("Hidden Power"),
+ [MOVE_CROSS_CHOP] = _("Cross Chop"),
+ [MOVE_TWISTER] = _("Twister"),
+ [MOVE_RAIN_DANCE] = _("Rain Dance"),
+ [MOVE_SUNNY_DAY] = _("Sunny Day"),
+ [MOVE_CRUNCH] = _("Crunch"),
+ [MOVE_MIRROR_COAT] = _("Mirror Coat"),
+ [MOVE_PSYCH_UP] = _("Psych Up"),
+ [MOVE_EXTREME_SPEED] = _("Extreme Speed"),
+ [MOVE_ANCIENT_POWER] = _("Ancient Power"),
+ [MOVE_SHADOW_BALL] = _("Shadow Ball"),
+ [MOVE_FUTURE_SIGHT] = _("Future Sight"),
+ [MOVE_ROCK_SMASH] = _("Rock Smash"),
+ [MOVE_WHIRLPOOL] = _("Whirlpool"),
+ [MOVE_BEAT_UP] = _("Beat Up"),
+ [MOVE_FAKE_OUT] = _("Fake Out"),
+ [MOVE_UPROAR] = _("Uproar"),
+ [MOVE_STOCKPILE] = _("Stockpile"),
+ [MOVE_SPIT_UP] = _("Spit Up"),
+ [MOVE_SWALLOW] = _("Swallow"),
+ [MOVE_HEAT_WAVE] = _("Heat Wave"),
+ [MOVE_HAIL] = _("Hail"),
+ [MOVE_TORMENT] = _("Torment"),
+ [MOVE_FLATTER] = _("Flatter"),
+ [MOVE_WILL_O_WISP] = _("Will-o-Wisp"),
+ [MOVE_MEMENTO] = _("Memento"),
+ [MOVE_FACADE] = _("Facade"),
+ [MOVE_FOCUS_PUNCH] = _("Focus Punch"),
+ [MOVE_SMELLING_SALTS] = _("Smelling Salts"),
+ [MOVE_FOLLOW_ME] = _("Follow Me"),
+ [MOVE_NATURE_POWER] = _("Nature Power"),
+ [MOVE_CHARGE] = _("Charge"),
+ [MOVE_TAUNT] = _("Taunt"),
+ [MOVE_HELPING_HAND] = _("Helping Hand"),
+ [MOVE_TRICK] = _("Trick"),
+ [MOVE_ROLE_PLAY] = _("Role Play"),
+ [MOVE_WISH] = _("Wish"),
+ [MOVE_ASSIST] = _("Assist"),
+ [MOVE_INGRAIN] = _("Ingrain"),
+ [MOVE_SUPERPOWER] = _("Superpower"),
+ [MOVE_MAGIC_COAT] = _("Magic Coat"),
+ [MOVE_RECYCLE] = _("Recycle"),
+ [MOVE_REVENGE] = _("Revenge"),
+ [MOVE_BRICK_BREAK] = _("Brick Break"),
+ [MOVE_YAWN] = _("Yawn"),
+ [MOVE_KNOCK_OFF] = _("Knock Off"),
+ [MOVE_ENDEAVOR] = _("Endeavor"),
+ [MOVE_ERUPTION] = _("Eruption"),
+ [MOVE_SKILL_SWAP] = _("Skill Swap"),
+ [MOVE_IMPRISON] = _("Imprison"),
+ [MOVE_REFRESH] = _("Refresh"),
+ [MOVE_GRUDGE] = _("Grudge"),
+ [MOVE_SNATCH] = _("Snatch"),
+ [MOVE_SECRET_POWER] = _("Secret Power"),
+ [MOVE_DIVE] = _("Dive"),
+ [MOVE_ARM_THRUST] = _("Arm Thrust"),
+ [MOVE_CAMOUFLAGE] = _("Camouflage"),
+ [MOVE_TAIL_GLOW] = _("Tail Glow"),
+ [MOVE_LUSTER_PURGE] = _("Luster Purge"),
+ [MOVE_MIST_BALL] = _("Mist Ball"),
+ [MOVE_FEATHER_DANCE] = _("Feather Dance"),
+ [MOVE_TEETER_DANCE] = _("Teeter Dance"),
+ [MOVE_BLAZE_KICK] = _("Blaze Kick"),
+ [MOVE_MUD_SPORT] = _("Mud Sport"),
+ [MOVE_ICE_BALL] = _("Ice Ball"),
+ [MOVE_NEEDLE_ARM] = _("Needle Arm"),
+ [MOVE_SLACK_OFF] = _("Slack Off"),
+ [MOVE_HYPER_VOICE] = _("Hyper Voice"),
+ [MOVE_POISON_FANG] = _("Poison Fang"),
+ [MOVE_CRUSH_CLAW] = _("Crush Claw"),
+ [MOVE_BLAST_BURN] = _("Blast Burn"),
+ [MOVE_HYDRO_CANNON] = _("Hydro Cannon"),
+ [MOVE_METEOR_MASH] = _("Meteor Mash"),
+ [MOVE_ASTONISH] = _("Astonish"),
+ [MOVE_WEATHER_BALL] = _("Weather Ball"),
+ [MOVE_AROMATHERAPY] = _("Aromatherapy"),
+ [MOVE_FAKE_TEARS] = _("Fake Tears"),
+ [MOVE_AIR_CUTTER] = _("Air Cutter"),
+ [MOVE_OVERHEAT] = _("Overheat"),
+ [MOVE_ODOR_SLEUTH] = _("Odor Sleuth"),
+ [MOVE_ROCK_TOMB] = _("Rock Tomb"),
+ [MOVE_SILVER_WIND] = _("Silver Wind"),
+ [MOVE_METAL_SOUND] = _("Metal Sound"),
+ [MOVE_GRASS_WHISTLE] = _("Grass Whistle"),
+ [MOVE_TICKLE] = _("Tickle"),
+ [MOVE_COSMIC_POWER] = _("Cosmic Power"),
+ [MOVE_WATER_SPOUT] = _("Water Spout"),
+ [MOVE_SIGNAL_BEAM] = _("Signal Beam"),
+ [MOVE_SHADOW_PUNCH] = _("Shadow Punch"),
+ [MOVE_EXTRASENSORY] = _("Extrasensory"),
+ [MOVE_SKY_UPPERCUT] = _("Sky Uppercut"),
+ [MOVE_SAND_TOMB] = _("Sand Tomb"),
+ [MOVE_SHEER_COLD] = _("Sheer Cold"),
+ [MOVE_MUDDY_WATER] = _("Muddy Water"),
+ [MOVE_BULLET_SEED] = _("Bullet Seed"),
+ [MOVE_AERIAL_ACE] = _("Aerial Ace"),
+ [MOVE_ICICLE_SPEAR] = _("Icicle Spear"),
+ [MOVE_IRON_DEFENSE] = _("Iron Defense"),
+ [MOVE_BLOCK] = _("Block"),
+ [MOVE_HOWL] = _("Howl"),
+ [MOVE_DRAGON_CLAW] = _("Dragon Claw"),
+ [MOVE_FRENZY_PLANT] = _("Frenzy Plant"),
+ [MOVE_BULK_UP] = _("Bulk Up"),
+ [MOVE_BOUNCE] = _("Bounce"),
+ [MOVE_MUD_SHOT] = _("Mud Shot"),
+ [MOVE_POISON_TAIL] = _("Poison Tail"),
+ [MOVE_COVET] = _("Covet"),
+ [MOVE_VOLT_TACKLE] = _("Volt Tackle"),
+ [MOVE_MAGICAL_LEAF] = _("Magical Leaf"),
+ [MOVE_WATER_SPORT] = _("Water Sport"),
+ [MOVE_CALM_MIND] = _("Calm Mind"),
+ [MOVE_LEAF_BLADE] = _("Leaf Blade"),
+ [MOVE_DRAGON_DANCE] = _("Dragon Dance"),
+ [MOVE_ROCK_BLAST] = _("Rock Blast"),
+ [MOVE_SHOCK_WAVE] = _("Shock Wave"),
+ [MOVE_WATER_PULSE] = _("Water Pulse"),
+ [MOVE_DOOM_DESIRE] = _("Doom Desire"),
+ [MOVE_PSYCHO_BOOST] = _("Psycho Boost"),
+ [MOVE_ROOST] = _("Roost"),
+ [MOVE_GRAVITY] = _("Gravity"),
+ [MOVE_MIRACLE_EYE] = _("Miracle Eye"),
+ [MOVE_WAKE_UP_SLAP] = _("Wake-Up Slap"),
+ [MOVE_HAMMER_ARM] = _("Hammer Arm"),
+ [MOVE_GYRO_BALL] = _("Gyro Ball"),
+ [MOVE_HEALING_WISH] = _("Healing Wish"),
+ [MOVE_BRINE] = _("Brine"),
+ [MOVE_NATURAL_GIFT] = _("Natural Gift"),
+ [MOVE_FEINT] = _("Feint"),
+ [MOVE_PLUCK] = _("Pluck"),
+ [MOVE_TAILWIND] = _("Tailwind"),
+ [MOVE_ACUPRESSURE] = _("Acupressure"),
+ [MOVE_METAL_BURST] = _("Metal Burst"),
+ [MOVE_U_TURN] = _("U-turn"),
+ [MOVE_CLOSE_COMBAT] = _("Close Combat"),
+ [MOVE_PAYBACK] = _("Payback"),
+ [MOVE_ASSURANCE] = _("Assurance"),
+ [MOVE_EMBARGO] = _("Embargo"),
+ [MOVE_FLING] = _("Fling"),
+ [MOVE_PSYCHO_SHIFT] = _("Psycho Shift"),
+ [MOVE_TRUMP_CARD] = _("Trump Card"),
+ [MOVE_HEAL_BLOCK] = _("Heal Block"),
+ [MOVE_WRING_OUT] = _("Wring Out"),
+ [MOVE_POWER_TRICK] = _("Power Trick"),
+ [MOVE_GASTRO_ACID] = _("Gastro Acid"),
+ [MOVE_LUCKY_CHANT] = _("Lucky Chant"),
+ [MOVE_ME_FIRST] = _("Me First"),
+ [MOVE_COPYCAT] = _("Copycat"),
+ [MOVE_POWER_SWAP] = _("Power Swap"),
+ [MOVE_GUARD_SWAP] = _("Guard Swap"),
+ [MOVE_PUNISHMENT] = _("Punishment"),
+ [MOVE_LAST_RESORT] = _("Last Resort"),
+ [MOVE_WORRY_SEED] = _("Worry Seed"),
+ [MOVE_SUCKER_PUNCH] = _("Sucker Punch"),
+ [MOVE_TOXIC_SPIKES] = _("Toxic Spikes"),
+ [MOVE_HEART_SWAP] = _("Heart Swap"),
+ [MOVE_AQUA_RING] = _("Aqua Ring"),
+ [MOVE_MAGNET_RISE] = _("Magnet Rise"),
+ [MOVE_FLARE_BLITZ] = _("Flare Blitz"),
+ [MOVE_FORCE_PALM] = _("Force Palm"),
+ [MOVE_AURA_SPHERE] = _("Aura Sphere"),
+ [MOVE_ROCK_POLISH] = _("Rock Polish"),
+ [MOVE_POISON_JAB] = _("Poison Jab"),
+ [MOVE_DARK_PULSE] = _("Dark Pulse"),
+ [MOVE_NIGHT_SLASH] = _("Night Slash"),
+ [MOVE_AQUA_TAIL] = _("Aqua Tail"),
+ [MOVE_SEED_BOMB] = _("Seed Bomb"),
+ [MOVE_AIR_SLASH] = _("Air Slash"),
+ [MOVE_X_SCISSOR] = _("X-Scissor"),
+ [MOVE_BUG_BUZZ] = _("Bug Buzz"),
+ [MOVE_DRAGON_PULSE] = _("Dragon Pulse"),
+ [MOVE_DRAGON_RUSH] = _("Dragon Rush"),
+ [MOVE_POWER_GEM] = _("Power Gem"),
+ [MOVE_DRAIN_PUNCH] = _("Drain Punch"),
+ [MOVE_VACUUM_WAVE] = _("Vacuum Wave"),
+ [MOVE_FOCUS_BLAST] = _("Focus Blast"),
+ [MOVE_ENERGY_BALL] = _("Energy Ball"),
+ [MOVE_BRAVE_BIRD] = _("Brave Bird"),
+ [MOVE_EARTH_POWER] = _("Earth Power"),
+ [MOVE_SWITCHEROO] = _("Switcheroo"),
+ [MOVE_GIGA_IMPACT] = _("Giga Impact"),
+ [MOVE_NASTY_PLOT] = _("Nasty Plot"),
+ [MOVE_BULLET_PUNCH] = _("Bullet Punch"),
+ [MOVE_AVALANCHE] = _("Avalanche"),
+ [MOVE_ICE_SHARD] = _("Ice Shard"),
+ [MOVE_SHADOW_CLAW] = _("Shadow Claw"),
+ [MOVE_THUNDER_FANG] = _("Thunder Fang"),
+ [MOVE_ICE_FANG] = _("Ice Fang"),
+ [MOVE_FIRE_FANG] = _("Fire Fang"),
+ [MOVE_SHADOW_SNEAK] = _("Shadow Sneak"),
+ [MOVE_MUD_BOMB] = _("Mud Bomb"),
+ [MOVE_PSYCHO_CUT] = _("Psycho Cut"),
+ [MOVE_ZEN_HEADBUTT] = _("Zen Headbutt"),
+ [MOVE_MIRROR_SHOT] = _("Mirror Shot"),
+ [MOVE_FLASH_CANNON] = _("Flash Cannon"),
+ [MOVE_ROCK_CLIMB] = _("Rock Climb"),
+ [MOVE_DEFOG] = _("Defog"),
+ [MOVE_TRICK_ROOM] = _("Trick Room"),
+ [MOVE_DRACO_METEOR] = _("Draco Meteor"),
+ [MOVE_DISCHARGE] = _("Discharge"),
+ [MOVE_LAVA_PLUME] = _("Lava Plume"),
+ [MOVE_LEAF_STORM] = _("Leaf Storm"),
+ [MOVE_POWER_WHIP] = _("Power Whip"),
+ [MOVE_ROCK_WRECKER] = _("Rock Wrecker"),
+ [MOVE_CROSS_POISON] = _("Cross Poison"),
+ [MOVE_GUNK_SHOT] = _("Gunk Shot"),
+ [MOVE_IRON_HEAD] = _("Iron Head"),
+ [MOVE_MAGNET_BOMB] = _("Magnet Bomb"),
+ [MOVE_STONE_EDGE] = _("Stone Edge"),
+ [MOVE_CAPTIVATE] = _("Captivate"),
+ [MOVE_STEALTH_ROCK] = _("Stealth Rock"),
+ [MOVE_GRASS_KNOT] = _("Grass Knot"),
+ [MOVE_CHATTER] = _("Chatter"),
+ [MOVE_JUDGMENT] = _("Judgment"),
+ [MOVE_BUG_BITE] = _("Bug Bite"),
+ [MOVE_CHARGE_BEAM] = _("Charge Beam"),
+ [MOVE_WOOD_HAMMER] = _("Wood Hammer"),
+ [MOVE_AQUA_JET] = _("Aqua Jet"),
+ [MOVE_ATTACK_ORDER] = _("Attack Order"),
+ [MOVE_DEFEND_ORDER] = _("Defend Order"),
+ [MOVE_HEAL_ORDER] = _("Heal Order"),
+ [MOVE_HEAD_SMASH] = _("Head Smash"),
+ [MOVE_DOUBLE_HIT] = _("Double Hit"),
+ [MOVE_ROAR_OF_TIME] = _("Roar of Time"),
+ [MOVE_SPACIAL_REND] = _("Spacial Rend"),
+ [MOVE_LUNAR_DANCE] = _("Lunar Dance"),
+ [MOVE_CRUSH_GRIP] = _("Crush Grip"),
+ [MOVE_MAGMA_STORM] = _("Magma Storm"),
+ [MOVE_DARK_VOID] = _("Dark Void"),
+ [MOVE_SEED_FLARE] = _("Seed Flare"),
+ [MOVE_OMINOUS_WIND] = _("Ominous Wind"),
+ [MOVE_SHADOW_FORCE] = _("Shadow Force"),
+ [MOVE_HONE_CLAWS] = _("Hone Claws"),
+ [MOVE_WIDE_GUARD] = _("Wide Guard"),
+ [MOVE_GUARD_SPLIT] = _("Guard Split"),
+ [MOVE_POWER_SPLIT] = _("Power Split"),
+ [MOVE_WONDER_ROOM] = _("Wonder Room"),
+ [MOVE_PSYSHOCK] = _("Psyshock"),
+ [MOVE_VENOSHOCK] = _("Venoshock"),
+ [MOVE_AUTOTOMIZE] = _("Autotomize"),
+ [MOVE_RAGE_POWDER] = _("Rage Powder"),
+ [MOVE_TELEKINESIS] = _("Telekinesis"),
+ [MOVE_MAGIC_ROOM] = _("Magic Room"),
+ [MOVE_SMACK_DOWN] = _("Smack Down"),
+ [MOVE_STORM_THROW] = _("Storm Throw"),
+ [MOVE_FLAME_BURST] = _("Flame Burst"),
+ [MOVE_SLUDGE_WAVE] = _("Sludge Wave"),
+ [MOVE_QUIVER_DANCE] = _("Quiver Dance"),
+ [MOVE_HEAVY_SLAM] = _("Heavy Slam"),
+ [MOVE_SYNCHRONOISE] = _("Synchronoise"),
+ [MOVE_ELECTRO_BALL] = _("Electro Ball"),
+ [MOVE_SOAK] = _("Soak"),
+ [MOVE_FLAME_CHARGE] = _("Flame Charge"),
+ [MOVE_COIL] = _("Coil"),
+ [MOVE_LOW_SWEEP] = _("Low Sweep"),
+ [MOVE_ACID_SPRAY] = _("Acid Spray"),
+ [MOVE_FOUL_PLAY] = _("Foul Play"),
+ [MOVE_SIMPLE_BEAM] = _("Simple Beam"),
+ [MOVE_ENTRAINMENT] = _("Entrainment"),
+ [MOVE_AFTER_YOU] = _("After You"),
+ [MOVE_ROUND] = _("Round"),
+ [MOVE_ECHOED_VOICE] = _("Echoed Voice"),
+ [MOVE_CHIP_AWAY] = _("Chip Away"),
+ [MOVE_CLEAR_SMOG] = _("Clear Smog"),
+ [MOVE_STORED_POWER] = _("Stored Power"),
+ [MOVE_QUICK_GUARD] = _("Quick Guard"),
+ [MOVE_ALLY_SWITCH] = _("Ally Switch"),
+ [MOVE_SCALD] = _("Scald"),
+ [MOVE_SHELL_SMASH] = _("Shell Smash"),
+ [MOVE_HEAL_PULSE] = _("Heal Pulse"),
+ [MOVE_HEX] = _("Hex"),
+ [MOVE_SKY_DROP] = _("Sky Drop"),
+ [MOVE_SHIFT_GEAR] = _("Shift Gear"),
+ [MOVE_CIRCLE_THROW] = _("Circle Throw"),
+ [MOVE_INCINERATE] = _("Incinerate"),
+ [MOVE_QUASH] = _("Quash"),
+ [MOVE_ACROBATICS] = _("Acrobatics"),
+ [MOVE_REFLECT_TYPE] = _("Reflect Type"),
+ [MOVE_RETALIATE] = _("Retaliate"),
+ [MOVE_FINAL_GAMBIT] = _("Final Gambit"),
+ [MOVE_BESTOW] = _("Bestow"),
+ [MOVE_INFERNO] = _("Inferno"),
+ [MOVE_WATER_PLEDGE] = _("Water Pledge"),
+ [MOVE_FIRE_PLEDGE] = _("Fire Pledge"),
+ [MOVE_GRASS_PLEDGE] = _("Grass Pledge"),
+ [MOVE_VOLT_SWITCH] = _("Volt Switch"),
+ [MOVE_STRUGGLE_BUG] = _("Struggle Bug"),
+ [MOVE_BULLDOZE] = _("Bulldoze"),
+ [MOVE_FROST_BREATH] = _("Frost Breath"),
+ [MOVE_DRAGON_TAIL] = _("Dragon Tail"),
+ [MOVE_WORK_UP] = _("Work Up"),
+ [MOVE_ELECTROWEB] = _("Electroweb"),
+ [MOVE_WILD_CHARGE] = _("Wild Charge"),
+ [MOVE_DRILL_RUN] = _("Drill Run"),
+ [MOVE_DUAL_CHOP] = _("Dual Chop"),
+ [MOVE_HEART_STAMP] = _("Heart Stamp"),
+ [MOVE_HORN_LEECH] = _("Horn Leech"),
+ [MOVE_SACRED_SWORD] = _("Sacred Sword"),
+ [MOVE_RAZOR_SHELL] = _("Razor Shell"),
+ [MOVE_HEAT_CRASH] = _("Heat Crash"),
+ [MOVE_LEAF_TORNADO] = _("Leaf Tornado"),
+ [MOVE_STEAMROLLER] = _("Steamroller"),
+ [MOVE_COTTON_GUARD] = _("Cotton Guard"),
+ [MOVE_NIGHT_DAZE] = _("Night Daze"),
+ [MOVE_PSYSTRIKE] = _("Psystrike"),
+ [MOVE_TAIL_SLAP] = _("Tail Slap"),
+ [MOVE_HURRICANE] = _("Hurricane"),
+ [MOVE_HEAD_CHARGE] = _("Head Charge"),
+ [MOVE_GEAR_GRIND] = _("Gear Grind"),
+ [MOVE_SEARING_SHOT] = _("Searing Shot"),
+ [MOVE_TECHNO_BLAST] = _("Techno Blast"),
+ [MOVE_RELIC_SONG] = _("Relic Song"),
+ [MOVE_SECRET_SWORD] = _("Secret Sword"),
+ [MOVE_GLACIATE] = _("Glaciate"),
+ [MOVE_BOLT_STRIKE] = _("Bolt Strike"),
+ [MOVE_BLUE_FLARE] = _("Blue Flare"),
+ [MOVE_FIERY_DANCE] = _("Fiery Dance"),
+ [MOVE_FREEZE_SHOCK] = _("Freeze Shock"),
+ [MOVE_ICE_BURN] = _("Ice Burn"),
+ [MOVE_SNARL] = _("Snarl"),
+ [MOVE_ICICLE_CRASH] = _("Icicle Crash"),
+ [MOVE_V_CREATE] = _("V-create"),
+ [MOVE_FUSION_FLARE] = _("Fusion Flare"),
+ [MOVE_FUSION_BOLT] = _("Fusion Bolt"),
+ [MOVE_FLYING_PRESS] = _("Flying Press"),
+ [MOVE_MAT_BLOCK] = _("Mat Block"),
+ [MOVE_BELCH] = _("Belch"),
+ [MOVE_ROTOTILLER] = _("Rototiller"),
+ [MOVE_STICKY_WEB] = _("Sticky Web"),
+ [MOVE_FELL_STINGER] = _("Fell Stinger"),
+ [MOVE_PHANTOM_FORCE] = _("Phantom Force"),
+ [MOVE_TRICK_OR_TREAT] = _("Trick-Or-Treat"),
+ [MOVE_NOBLE_ROAR] = _("Noble Roar"),
+ [MOVE_ION_DELUGE] = _("Ion Deluge"),
+ [MOVE_PARABOLIC_CHARGE] = _("Parabolic Charge"),
+ [MOVE_FORESTS_CURSE] = _("Forest's Curse"),
+ [MOVE_PETAL_BLIZZARD] = _("Petal Blizzard"),
+ [MOVE_FREEZE_DRY] = _("Freeze-Dry"),
+ [MOVE_DISARMING_VOICE] = _("Disarming Voice"),
+ [MOVE_PARTING_SHOT] = _("Parting Shot"),
+ [MOVE_TOPSY_TURVY] = _("Topsy-Turvy"),
+ [MOVE_DRAINING_KISS] = _("Draining Kiss"),
+ [MOVE_CRAFTY_SHIELD] = _("Crafty Shield"),
+ [MOVE_FLOWER_SHIELD] = _("Flower Shield"),
+ [MOVE_GRASSY_TERRAIN] = _("Grassy Terrain"),
+ [MOVE_MISTY_TERRAIN] = _("Misty Terrain"),
+ [MOVE_ELECTRIFY] = _("Electrify"),
+ [MOVE_PLAY_ROUGH] = _("Play Rough"),
+ [MOVE_FAIRY_WIND] = _("Fairy Wind"),
+ [MOVE_MOONBLAST] = _("Moonblast"),
+ [MOVE_BOOMBURST] = _("Boomburst"),
+ [MOVE_FAIRY_LOCK] = _("Fairy Lock"),
+ [MOVE_KINGS_SHIELD] = _("King's Shield"),
+ [MOVE_PLAY_NICE] = _("Play Nice"),
+ [MOVE_CONFIDE] = _("Confide"),
+ [MOVE_DIAMOND_STORM] = _("Diamond Storm"),
+ [MOVE_STEAM_ERUPTION] = _("Steam Eruption"),
+ [MOVE_HYPERSPACE_HOLE] = _("Hyprspace Hole"),
+ [MOVE_WATER_SHURIKEN] = _("Water Shuriken"),
+ [MOVE_MYSTICAL_FIRE] = _("Mystical Fire"),
+ [MOVE_SPIKY_SHIELD] = _("Spiky Shield"),
+ [MOVE_AROMATIC_MIST] = _("Aromatic Mist"),
+ [MOVE_EERIE_IMPULSE] = _("Eerie Impulse"),
+ [MOVE_VENOM_DRENCH] = _("Venom Drench"),
+ [MOVE_POWDER] = _("Powder"),
+ [MOVE_GEOMANCY] = _("Geomancy"),
+ [MOVE_MAGNETIC_FLUX] = _("Magnetic Flux"),
+ [MOVE_HAPPY_HOUR] = _("Happy Hour"),
+ [MOVE_ELECTRIC_TERRAIN] = _("Electric Terrain"),
+ [MOVE_DAZZLING_GLEAM] = _("Dazzling Gleam"),
+ [MOVE_CELEBRATE] = _("Celebrate"),
+ [MOVE_HOLD_HANDS] = _("Hold Hands"),
+ [MOVE_BABY_DOLL_EYES] = _("Baby-Doll Eyes"),
+ [MOVE_NUZZLE] = _("Nuzzle"),
+ [MOVE_HOLD_BACK] = _("Hold Back"),
+ [MOVE_INFESTATION] = _("Infestation"),
+ [MOVE_POWER_UP_PUNCH] = _("Power-Up Punch"),
+ [MOVE_OBLIVION_WING] = _("Oblivion Wing"),
+ [MOVE_THOUSAND_ARROWS] = _("Thousand Arrows"),
+ [MOVE_THOUSAND_WAVES] = _("Thousand Waves"),
+ [MOVE_LANDS_WRATH] = _("Land's Wrath"),
+ [MOVE_LIGHT_OF_RUIN] = _("Light Of Ruin"),
+ [MOVE_ORIGIN_PULSE] = _("Origin Pulse"),
+ [MOVE_PRECIPICE_BLADES] = _("Precipice Blades"),
+ [MOVE_DRAGON_ASCENT] = _("Dragon Ascent"),
+ [MOVE_HYPERSPACE_FURY] = _("Hyperspace Fury"),
+ [MOVE_SHORE_UP] = _("Shore Up"),
+ [MOVE_FIRST_IMPRESSION] = _("First Impression"),
+ [MOVE_BANEFUL_BUNKER] = _("Baneful Bunker"),
+ [MOVE_SPIRIT_SHACKLE] = _("Spirit Shackle"),
+ [MOVE_DARKEST_LARIAT] = _("Darkest Lariat"),
+ [MOVE_SPARKLING_ARIA] = _("Sparkling Aria"),
+ [MOVE_ICE_HAMMER] = _("Ice Hammer"),
+ [MOVE_FLORAL_HEALING] = _("Floral Healng"),
+ [MOVE_HIGH_HORSEPOWER] = _("High Horsepower"),
+ [MOVE_STRENGTH_SAP] = _("Strength Sap"),
+ [MOVE_SOLAR_BLADE] = _("Solar Blade"),
+ [MOVE_LEAFAGE] = _("Leafage"),
+ [MOVE_SPOTLIGHT] = _("Spotlight"),
+ [MOVE_TOXIC_THREAD] = _("Toxic Thread"),
+ [MOVE_LASER_FOCUS] = _("Laser Focus"),
+ [MOVE_GEAR_UP] = _("Gear Up"),
+ [MOVE_THROAT_CHOP] = _("Throat Chop"),
+ [MOVE_POLLEN_PUFF] = _("Pollen Puff"),
+ [MOVE_ANCHOR_SHOT] = _("Anchor Shot"),
+ [MOVE_PSYCHIC_TERRAIN] = _("Psychic Terrain"),
+ [MOVE_LUNGE] = _("Lunge"),
+ [MOVE_FIRE_LASH] = _("Fire Lash"),
+ [MOVE_POWER_TRIP] = _("Power Trip"),
+ [MOVE_BURN_UP] = _("Burn Up"),
+ [MOVE_SPEED_SWAP] = _("Speed Swap"),
+ [MOVE_SMART_STRIKE] = _("Smart Strike"),
+ [MOVE_PURIFY] = _("Purify"),
+ [MOVE_REVELATION_DANCE] = _("Revelation Dance"),
+ [MOVE_CORE_ENFORCER] = _("Core Enforcer"),
+ [MOVE_TROP_KICK] = _("Trop Kick"),
+ [MOVE_INSTRUCT] = _("Instruct"),
+ [MOVE_BEAK_BLAST] = _("Beak Blast"),
+ [MOVE_CLANGING_SCALES] = _("Clanging Scales"),
+ [MOVE_DRAGON_HAMMER] = _("Dragon Hammer"),
+ [MOVE_BRUTAL_SWING] = _("Brutal Swing"),
+ [MOVE_AURORA_VEIL] = _("Aurora Veil"),
+ [MOVE_SHELL_TRAP] = _("Shell Trap"),
+ [MOVE_FLEUR_CANNON] = _("Fleur Cannon"),
+ [MOVE_PSYCHIC_FANGS] = _("Psychic Fangs"),
+ [MOVE_STOMPING_TANTRUM] = _("Stomping Tantrum"),
+ [MOVE_SHADOW_BONE] = _("Shadow Bone"),
+ [MOVE_ACCELEROCK] = _("Accelerock"),
+ [MOVE_LIQUIDATION] = _("Liquidation"),
+ [MOVE_PRISMATIC_LASER] = _("Prismatic Laser"),
+ [MOVE_SPECTRAL_THIEF] = _("Spectral Thief"),
+ [MOVE_SUNSTEEL_STRIKE] = _("Sunsteel Strike"),
+ [MOVE_MOONGEIST_BEAM] = _("Moongeist Beam"),
+ [MOVE_TEARFUL_LOOK] = _("Tearful Look"),
+ [MOVE_ZING_ZAP] = _("Zing Zap"),
+ [MOVE_NATURES_MADNESS] = _("Nature's Madness"),
+ [MOVE_MULTI_ATTACK] = _("Multi-Attack"),
+ [MOVE_MIND_BLOWN] = _("Mind Blown"),
+ [MOVE_PLASMA_FISTS] = _("Plasma Fists"),
+ [MOVE_PHOTON_GEYSER] = _("Photon Geyser"),
+ [MOVE_ZIPPY_ZAP] = _("Zippy Zap"),
+ [MOVE_SPLISHY_SPLASH] = _("Splishy Splash"),
+ [MOVE_FLOATY_FALL] = _("Floaty Fall"),
+ [MOVE_PIKA_PAPOW] = _("Pika Papow"),
+ [MOVE_BOUNCY_BUBBLE] = _("Bouncy Bubble"),
+ [MOVE_BUZZY_BUZZ] = _("Buzzy Buzz"),
+ [MOVE_SIZZLY_SLIDE] = _("Sizzly Slide"),
+ [MOVE_GLITZY_GLOW] = _("Glitzy Glow"),
+ [MOVE_BADDY_BAD] = _("Baddy Bad"),
+ [MOVE_SAPPY_SEED] = _("Sappy Seed"),
+ [MOVE_FREEZY_FROST] = _("Freezy Frost"),
+ [MOVE_SPARKLY_SWIRL] = _("Sparkly Swirl"),
+ [MOVE_VEEVEE_VOLLEY] = _("Veevee Volley"),
+ [MOVE_DOUBLE_IRON_BASH] = _("Double Iron Bash"),
+ [MOVE_DYNAMAX_CANNON] = _("Dynamax Cannon"),
+ [MOVE_SNIPE_SHOT] = _("Snipe Shot"),
+ [MOVE_JAW_LOCK] = _("Jaw Lock"),
+ [MOVE_STUFF_CHEEKS] = _("Stuff Cheeks"),
+ [MOVE_NO_RETREAT] = _("No Retreat"),
+ [MOVE_TAR_SHOT] = _("Tar Shot"),
+ [MOVE_MAGIC_POWDER] = _("Magic Powder"),
+ [MOVE_DRAGON_DARTS] = _("Dragon Darts"),
+ [MOVE_TEATIME] = _("Teatime"),
+ [MOVE_OCTOLOCK] = _("Octolock"),
+ [MOVE_BOLT_BEAK] = _("Bolt Beak"),
+ [MOVE_FISHIOUS_REND] = _("Fishious Rend"),
+ [MOVE_COURT_CHANGE] = _("Court Change"),
+ [MOVE_CLANGOROUS_SOUL] = _("Clangorous Soul"),
+ [MOVE_BODY_PRESS] = _("Body Press"),
+ [MOVE_DECORATE] = _("Decorate"),
+ [MOVE_DRUM_BEATING] = _("Drum Beating"),
+ [MOVE_SNAP_TRAP] = _("Snap Trap"),
+ [MOVE_PYRO_BALL] = _("Pyro Ball"),
+ [MOVE_BEHEMOTH_BLADE] = _("Behemoth Blade"),
+ [MOVE_BEHEMOTH_BASH] = _("Behemoth Bash"),
+ [MOVE_AURA_WHEEL] = _("Aura Wheel"),
+ [MOVE_BREAKING_SWIPE] = _("Breaking Swipe"),
+ [MOVE_BRANCH_POKE] = _("Branch Poke"),
+ [MOVE_OVERDRIVE] = _("Overdrive"),
+ [MOVE_APPLE_ACID] = _("Apple Acid"),
+ [MOVE_GRAV_APPLE] = _("Grav Apple"),
+ [MOVE_SPIRIT_BREAK] = _("Spirit Break"),
+ [MOVE_STRANGE_STEAM] = _("Strange Steam"),
+ [MOVE_LIFE_DEW] = _("Life Dew"),
+ [MOVE_OBSTRUCT] = _("Obstruct"),
+ [MOVE_FALSE_SURRENDER] = _("False Surrender"),
+ [MOVE_METEOR_ASSAULT] = _("Meteor Assault"),
+ [MOVE_ETERNABEAM] = _("Eternabeam"),
+ [MOVE_STEEL_BEAM] = _("Steel Beam"),
+ [MOVE_EXPANDING_FORCE] = _("Expanding Force"),
+ [MOVE_STEEL_ROLLER] = _("Steel Roller"),
+ [MOVE_SCALE_SHOT] = _("Scale Shot"),
+ [MOVE_METEOR_BEAM] = _("Meteor Beam"),
+ [MOVE_SHELL_SIDE_ARM] = _("Shell Side Arm"),
+ [MOVE_MISTY_EXPLOSION] = _("Misty Explosion"),
+ [MOVE_GRASSY_GLIDE] = _("Grassy Glide"),
+ [MOVE_RISING_VOLTAGE] = _("Rising Voltage"),
+ [MOVE_TERRAIN_PULSE] = _("Terrain Pulse"),
+ [MOVE_SKITTER_SMACK] = _("Skitter Smack"),
+ [MOVE_BURNING_JEALOUSY] = _("Burning Jealousy"),
+ [MOVE_LASH_OUT] = _("Lash Out"),
+ [MOVE_POLTERGEIST] = _("Poltergeist"),
+ [MOVE_CORROSIVE_GAS] = _("Corrosive Gas"),
+ [MOVE_COACHING] = _("Coaching"),
+ [MOVE_FLIP_TURN] = _("Flip Turn"),
+ [MOVE_TRIPLE_AXEL] = _("Triple Axel"),
+ [MOVE_DUAL_WINGBEAT] = _("Dual Wingbeat"),
+ [MOVE_SCORCHING_SANDS] = _("Scorching Sands"),
+ [MOVE_JUNGLE_HEALING] = _("Jungle Healng"),
+ [MOVE_WICKED_BLOW] = _("Wicked Blow"),
+ [MOVE_SURGING_STRIKES] = _("Surging Strikes"),
+ [MOVE_THUNDER_CAGE] = _("Thunder Cage"),
+ [MOVE_DRAGON_ENERGY] = _("Dragon Energy"),
+ [MOVE_FREEZING_GLARE] = _("Freezing Glare"),
+ [MOVE_FIERY_WRATH] = _("Fiery Wrath"),
+ [MOVE_THUNDEROUS_KICK] = _("Thunderous Kick"),
+ [MOVE_GLACIAL_LANCE] = _("Glacial Lance"),
+ [MOVE_ASTRAL_BARRAGE] = _("Astral Barrage"),
+ [MOVE_EERIE_SPELL] = _("Eerie Spell"),
+};
+#else
+// 12 letters
+const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] =
+{
+ [MOVE_NONE] = _("-"),
+ [MOVE_POUND] = _("Pound"),
+ [MOVE_KARATE_CHOP] = _("Karate Chop"),
+ [MOVE_DOUBLE_SLAP] = _("Double Slap"),
+ [MOVE_COMET_PUNCH] = _("Comet Punch"),
+ [MOVE_MEGA_PUNCH] = _("Mega Punch"),
+ [MOVE_PAY_DAY] = _("Pay Day"),
+ [MOVE_FIRE_PUNCH] = _("Fire Punch"),
+ [MOVE_ICE_PUNCH] = _("Ice Punch"),
+ [MOVE_THUNDER_PUNCH] = _("ThunderPunch"),
+ [MOVE_SCRATCH] = _("Scratch"),
+ [MOVE_VISE_GRIP] = _("Vise Grip"),
+ [MOVE_GUILLOTINE] = _("Guillotine"),
+ [MOVE_RAZOR_WIND] = _("Razor Wind"),
+ [MOVE_SWORDS_DANCE] = _("Swords Dance"),
+ [MOVE_CUT] = _("Cut"),
+ [MOVE_GUST] = _("Gust"),
+ [MOVE_WING_ATTACK] = _("Wing Attack"),
+ [MOVE_WHIRLWIND] = _("Whirlwind"),
+ [MOVE_FLY] = _("Fly"),
+ [MOVE_BIND] = _("Bind"),
+ [MOVE_SLAM] = _("Slam"),
+ [MOVE_VINE_WHIP] = _("Vine Whip"),
+ [MOVE_STOMP] = _("Stomp"),
+ [MOVE_DOUBLE_KICK] = _("Double Kick"),
+ [MOVE_MEGA_KICK] = _("Mega Kick"),
+ [MOVE_JUMP_KICK] = _("Jump Kick"),
+ [MOVE_ROLLING_KICK] = _("Rolling Kick"),
+ [MOVE_SAND_ATTACK] = _("Sand Attack"),
+ [MOVE_HEADBUTT] = _("Headbutt"),
+ [MOVE_HORN_ATTACK] = _("Horn Attack"),
+ [MOVE_FURY_ATTACK] = _("Fury Attack"),
+ [MOVE_HORN_DRILL] = _("Horn Drill"),
+ [MOVE_TACKLE] = _("Tackle"),
+ [MOVE_BODY_SLAM] = _("Body Slam"),
+ [MOVE_WRAP] = _("Wrap"),
+ [MOVE_TAKE_DOWN] = _("Take Down"),
+ [MOVE_THRASH] = _("Thrash"),
+ [MOVE_DOUBLE_EDGE] = _("Double-Edge"),
+ [MOVE_TAIL_WHIP] = _("Tail Whip"),
+ [MOVE_POISON_STING] = _("Poison Sting"),
+ [MOVE_TWINEEDLE] = _("Twineedle"),
+ [MOVE_PIN_MISSILE] = _("Pin Missile"),
+ [MOVE_LEER] = _("Leer"),
+ [MOVE_BITE] = _("Bite"),
+ [MOVE_GROWL] = _("Growl"),
+ [MOVE_ROAR] = _("Roar"),
+ [MOVE_SING] = _("Sing"),
+ [MOVE_SUPERSONIC] = _("Supersonic"),
+ [MOVE_SONIC_BOOM] = _("Sonic Boom"),
+ [MOVE_DISABLE] = _("Disable"),
+ [MOVE_ACID] = _("Acid"),
+ [MOVE_EMBER] = _("Ember"),
+ [MOVE_FLAMETHROWER] = _("Flamethrower"),
+ [MOVE_MIST] = _("Mist"),
+ [MOVE_WATER_GUN] = _("Water Gun"),
+ [MOVE_HYDRO_PUMP] = _("Hydro Pump"),
+ [MOVE_SURF] = _("Surf"),
+ [MOVE_ICE_BEAM] = _("Ice Beam"),
+ [MOVE_BLIZZARD] = _("Blizzard"),
+ [MOVE_PSYBEAM] = _("Psybeam"),
+ [MOVE_BUBBLE_BEAM] = _("Bubble Beam"),
+ [MOVE_AURORA_BEAM] = _("Aurora Beam"),
+ [MOVE_HYPER_BEAM] = _("Hyper Beam"),
+ [MOVE_PECK] = _("Peck"),
+ [MOVE_DRILL_PECK] = _("Drill Peck"),
+ [MOVE_SUBMISSION] = _("Submission"),
+ [MOVE_LOW_KICK] = _("Low Kick"),
+ [MOVE_COUNTER] = _("Counter"),
+ [MOVE_SEISMIC_TOSS] = _("Seismic Toss"),
+ [MOVE_STRENGTH] = _("Strength"),
+ [MOVE_ABSORB] = _("Absorb"),
+ [MOVE_MEGA_DRAIN] = _("Mega Drain"),
+ [MOVE_LEECH_SEED] = _("Leech Seed"),
+ [MOVE_GROWTH] = _("Growth"),
+ [MOVE_RAZOR_LEAF] = _("Razor Leaf"),
+ [MOVE_SOLAR_BEAM] = _("Solar Beam"),
+ [MOVE_POISON_POWDER] = _("PoisonPowder"),
+ [MOVE_STUN_SPORE] = _("Stun Spore"),
+ [MOVE_SLEEP_POWDER] = _("Sleep Powder"),
+ [MOVE_PETAL_DANCE] = _("Petal Dance"),
+ [MOVE_STRING_SHOT] = _("String Shot"),
+ [MOVE_DRAGON_RAGE] = _("Dragon Rage"),
+ [MOVE_FIRE_SPIN] = _("Fire Spin"),
+ [MOVE_THUNDER_SHOCK] = _("ThunderShock"),
+ [MOVE_THUNDERBOLT] = _("Thunderbolt"),
+ [MOVE_THUNDER_WAVE] = _("Thunder Wave"),
+ [MOVE_THUNDER] = _("Thunder"),
+ [MOVE_ROCK_THROW] = _("Rock Throw"),
+ [MOVE_EARTHQUAKE] = _("Earthquake"),
+ [MOVE_FISSURE] = _("Fissure"),
+ [MOVE_DIG] = _("Dig"),
+ [MOVE_TOXIC] = _("Toxic"),
+ [MOVE_CONFUSION] = _("Confusion"),
+ [MOVE_PSYCHIC] = _("Psychic"),
+ [MOVE_HYPNOSIS] = _("Hypnosis"),
+ [MOVE_MEDITATE] = _("Meditate"),
+ [MOVE_AGILITY] = _("Agility"),
+ [MOVE_QUICK_ATTACK] = _("Quick Attack"),
+ [MOVE_RAGE] = _("Rage"),
+ [MOVE_TELEPORT] = _("Teleport"),
+ [MOVE_NIGHT_SHADE] = _("Night Shade"),
+ [MOVE_MIMIC] = _("Mimic"),
+ [MOVE_SCREECH] = _("Screech"),
+ [MOVE_DOUBLE_TEAM] = _("Double Team"),
+ [MOVE_RECOVER] = _("Recover"),
+ [MOVE_HARDEN] = _("Harden"),
+ [MOVE_MINIMIZE] = _("Minimize"),
+ [MOVE_SMOKESCREEN] = _("Smokescreen"),
+ [MOVE_CONFUSE_RAY] = _("Confuse Ray"),
+ [MOVE_WITHDRAW] = _("Withdraw"),
+ [MOVE_DEFENSE_CURL] = _("Defense Curl"),
+ [MOVE_BARRIER] = _("Barrier"),
+ [MOVE_LIGHT_SCREEN] = _("Light Screen"),
+ [MOVE_HAZE] = _("Haze"),
+ [MOVE_REFLECT] = _("Reflect"),
+ [MOVE_FOCUS_ENERGY] = _("Focus Energy"),
+ [MOVE_BIDE] = _("Bide"),
+ [MOVE_METRONOME] = _("Metronome"),
+ [MOVE_MIRROR_MOVE] = _("Mirror Move"),
+ [MOVE_SELF_DESTRUCT] = _("SelfDestruct"),
+ [MOVE_EGG_BOMB] = _("Egg Bomb"),
+ [MOVE_LICK] = _("Lick"),
+ [MOVE_SMOG] = _("Smog"),
+ [MOVE_SLUDGE] = _("Sludge"),
+ [MOVE_BONE_CLUB] = _("Bone Club"),
+ [MOVE_FIRE_BLAST] = _("Fire Blast"),
+ [MOVE_WATERFALL] = _("Waterfall"),
+ [MOVE_CLAMP] = _("Clamp"),
+ [MOVE_SWIFT] = _("Swift"),
+ [MOVE_SKULL_BASH] = _("Skull Bash"),
+ [MOVE_SPIKE_CANNON] = _("Spike Cannon"),
+ [MOVE_CONSTRICT] = _("Constrict"),
+ [MOVE_AMNESIA] = _("Amnesia"),
+ [MOVE_KINESIS] = _("Kinesis"),
+ [MOVE_SOFT_BOILED] = _("Soft-Boiled"),
+ [MOVE_HIGH_JUMP_KICK] = _("HighJumpKick"),
+ [MOVE_GLARE] = _("Glare"),
+ [MOVE_DREAM_EATER] = _("Dream Eater"),
+ [MOVE_POISON_GAS] = _("Poison Gas"),
+ [MOVE_BARRAGE] = _("Barrage"),
+ [MOVE_LEECH_LIFE] = _("Leech Life"),
+ [MOVE_LOVELY_KISS] = _("Lovely Kiss"),
+ [MOVE_SKY_ATTACK] = _("Sky Attack"),
+ [MOVE_TRANSFORM] = _("Transform"),
+ [MOVE_BUBBLE] = _("Bubble"),
+ [MOVE_DIZZY_PUNCH] = _("Dizzy Punch"),
+ [MOVE_SPORE] = _("Spore"),
+ [MOVE_FLASH] = _("Flash"),
+ [MOVE_PSYWAVE] = _("Psywave"),
+ [MOVE_SPLASH] = _("Splash"),
+ [MOVE_ACID_ARMOR] = _("Acid Armor"),
+ [MOVE_CRABHAMMER] = _("Crabhammer"),
+ [MOVE_EXPLOSION] = _("Explosion"),
+ [MOVE_FURY_SWIPES] = _("Fury Swipes"),
+ [MOVE_BONEMERANG] = _("Bonemerang"),
+ [MOVE_REST] = _("Rest"),
+ [MOVE_ROCK_SLIDE] = _("Rock Slide"),
+ [MOVE_HYPER_FANG] = _("Hyper Fang"),
+ [MOVE_SHARPEN] = _("Sharpen"),
+ [MOVE_CONVERSION] = _("Conversion"),
+ [MOVE_TRI_ATTACK] = _("Tri Attack"),
+ [MOVE_SUPER_FANG] = _("Super Fang"),
+ [MOVE_SLASH] = _("Slash"),
+ [MOVE_SUBSTITUTE] = _("Substitute"),
+ [MOVE_STRUGGLE] = _("Struggle"),
+ [MOVE_SKETCH] = _("Sketch"),
+ [MOVE_TRIPLE_KICK] = _("Triple Kick"),
+ [MOVE_THIEF] = _("Thief"),
+ [MOVE_SPIDER_WEB] = _("Spider Web"),
+ [MOVE_MIND_READER] = _("Mind Reader"),
+ [MOVE_NIGHTMARE] = _("Nightmare"),
+ [MOVE_FLAME_WHEEL] = _("Flame Wheel"),
+ [MOVE_SNORE] = _("Snore"),
+ [MOVE_CURSE] = _("Curse"),
+ [MOVE_FLAIL] = _("Flail"),
+ [MOVE_CONVERSION_2] = _("Conversion 2"),
+ [MOVE_AEROBLAST] = _("Aeroblast"),
+ [MOVE_COTTON_SPORE] = _("Cotton Spore"),
+ [MOVE_REVERSAL] = _("Reversal"),
+ [MOVE_SPITE] = _("Spite"),
+ [MOVE_POWDER_SNOW] = _("Powder Snow"),
+ [MOVE_PROTECT] = _("Protect"),
+ [MOVE_MACH_PUNCH] = _("Mach Punch"),
+ [MOVE_SCARY_FACE] = _("Scary Face"),
+ [MOVE_FEINT_ATTACK] = _("Feint Attack"),
+ [MOVE_SWEET_KISS] = _("Sweet Kiss"),
+ [MOVE_BELLY_DRUM] = _("Belly Drum"),
+ [MOVE_SLUDGE_BOMB] = _("Sludge Bomb"),
+ [MOVE_MUD_SLAP] = _("Mud-Slap"),
+ [MOVE_OCTAZOOKA] = _("Octazooka"),
+ [MOVE_SPIKES] = _("Spikes"),
+ [MOVE_ZAP_CANNON] = _("Zap Cannon"),
+ [MOVE_FORESIGHT] = _("Foresight"),
+ [MOVE_DESTINY_BOND] = _("Destiny Bond"),
+ [MOVE_PERISH_SONG] = _("Perish Song"),
+ [MOVE_ICY_WIND] = _("Icy Wind"),
+ [MOVE_DETECT] = _("Detect"),
+ [MOVE_BONE_RUSH] = _("Bone Rush"),
+ [MOVE_LOCK_ON] = _("Lock-On"),
+ [MOVE_OUTRAGE] = _("Outrage"),
+ [MOVE_SANDSTORM] = _("Sandstorm"),
+ [MOVE_GIGA_DRAIN] = _("Giga Drain"),
+ [MOVE_ENDURE] = _("Endure"),
+ [MOVE_CHARM] = _("Charm"),
+ [MOVE_ROLLOUT] = _("Rollout"),
+ [MOVE_FALSE_SWIPE] = _("False Swipe"),
+ [MOVE_SWAGGER] = _("Swagger"),
+ [MOVE_MILK_DRINK] = _("Milk Drink"),
+ [MOVE_SPARK] = _("Spark"),
+ [MOVE_FURY_CUTTER] = _("Fury Cutter"),
+ [MOVE_STEEL_WING] = _("Steel Wing"),
+ [MOVE_MEAN_LOOK] = _("Mean Look"),
+ [MOVE_ATTRACT] = _("Attract"),
+ [MOVE_SLEEP_TALK] = _("Sleep Talk"),
+ [MOVE_HEAL_BELL] = _("Heal Bell"),
+ [MOVE_RETURN] = _("Return"),
+ [MOVE_PRESENT] = _("Present"),
+ [MOVE_FRUSTRATION] = _("Frustration"),
+ [MOVE_SAFEGUARD] = _("Safeguard"),
+ [MOVE_PAIN_SPLIT] = _("Pain Split"),
+ [MOVE_SACRED_FIRE] = _("Sacred Fire"),
+ [MOVE_MAGNITUDE] = _("Magnitude"),
+ [MOVE_DYNAMIC_PUNCH] = _("DynamicPunch"),
+ [MOVE_MEGAHORN] = _("Megahorn"),
+ [MOVE_DRAGON_BREATH] = _("DragonBreath"),
+ [MOVE_BATON_PASS] = _("Baton Pass"),
+ [MOVE_ENCORE] = _("Encore"),
+ [MOVE_PURSUIT] = _("Pursuit"),
+ [MOVE_RAPID_SPIN] = _("Rapid Spin"),
+ [MOVE_SWEET_SCENT] = _("Sweet Scent"),
+ [MOVE_IRON_TAIL] = _("Iron Tail"),
+ [MOVE_METAL_CLAW] = _("Metal Claw"),
+ [MOVE_VITAL_THROW] = _("Vital Throw"),
+ [MOVE_MORNING_SUN] = _("Morning Sun"),
+ [MOVE_SYNTHESIS] = _("Synthesis"),
+ [MOVE_MOONLIGHT] = _("Moonlight"),
+ [MOVE_HIDDEN_POWER] = _("Hidden Power"),
+ [MOVE_CROSS_CHOP] = _("Cross Chop"),
+ [MOVE_TWISTER] = _("Twister"),
+ [MOVE_RAIN_DANCE] = _("Rain Dance"),
+ [MOVE_SUNNY_DAY] = _("Sunny Day"),
+ [MOVE_CRUNCH] = _("Crunch"),
+ [MOVE_MIRROR_COAT] = _("Mirror Coat"),
+ [MOVE_PSYCH_UP] = _("Psych Up"),
+ [MOVE_EXTREME_SPEED] = _("ExtremeSpeed"),
+ [MOVE_ANCIENT_POWER] = _("AncientPower"),
+ [MOVE_SHADOW_BALL] = _("Shadow Ball"),
+ [MOVE_FUTURE_SIGHT] = _("Future Sight"),
+ [MOVE_ROCK_SMASH] = _("Rock Smash"),
+ [MOVE_WHIRLPOOL] = _("Whirlpool"),
+ [MOVE_BEAT_UP] = _("Beat Up"),
+ [MOVE_FAKE_OUT] = _("Fake Out"),
+ [MOVE_UPROAR] = _("Uproar"),
+ [MOVE_STOCKPILE] = _("Stockpile"),
+ [MOVE_SPIT_UP] = _("Spit Up"),
+ [MOVE_SWALLOW] = _("Swallow"),
+ [MOVE_HEAT_WAVE] = _("Heat Wave"),
+ [MOVE_HAIL] = _("Hail"),
+ [MOVE_TORMENT] = _("Torment"),
+ [MOVE_FLATTER] = _("Flatter"),
+ [MOVE_WILL_O_WISP] = _("Will-o-Wisp"),
+ [MOVE_MEMENTO] = _("Memento"),
+ [MOVE_FACADE] = _("Facade"),
+ [MOVE_FOCUS_PUNCH] = _("Focus Punch"),
+ [MOVE_SMELLING_SALTS] = _("SmellngSalts"),
+ [MOVE_FOLLOW_ME] = _("Follow Me"),
+ [MOVE_NATURE_POWER] = _("Nature Power"),
+ [MOVE_CHARGE] = _("Charge"),
+ [MOVE_TAUNT] = _("Taunt"),
+ [MOVE_HELPING_HAND] = _("Helping Hand"),
+ [MOVE_TRICK] = _("Trick"),
+ [MOVE_ROLE_PLAY] = _("Role Play"),
+ [MOVE_WISH] = _("Wish"),
+ [MOVE_ASSIST] = _("Assist"),
+ [MOVE_INGRAIN] = _("Ingrain"),
+ [MOVE_SUPERPOWER] = _("Superpower"),
+ [MOVE_MAGIC_COAT] = _("Magic Coat"),
+ [MOVE_RECYCLE] = _("Recycle"),
+ [MOVE_REVENGE] = _("Revenge"),
+ [MOVE_BRICK_BREAK] = _("Brick Break"),
+ [MOVE_YAWN] = _("Yawn"),
+ [MOVE_KNOCK_OFF] = _("Knock Off"),
+ [MOVE_ENDEAVOR] = _("Endeavor"),
+ [MOVE_ERUPTION] = _("Eruption"),
+ [MOVE_SKILL_SWAP] = _("Skill Swap"),
+ [MOVE_IMPRISON] = _("Imprison"),
+ [MOVE_REFRESH] = _("Refresh"),
+ [MOVE_GRUDGE] = _("Grudge"),
+ [MOVE_SNATCH] = _("Snatch"),
+ [MOVE_SECRET_POWER] = _("Secret Power"),
+ [MOVE_DIVE] = _("Dive"),
+ [MOVE_ARM_THRUST] = _("Arm Thrust"),
+ [MOVE_CAMOUFLAGE] = _("Camouflage"),
+ [MOVE_TAIL_GLOW] = _("Tail Glow"),
+ [MOVE_LUSTER_PURGE] = _("Luster Purge"),
+ [MOVE_MIST_BALL] = _("Mist Ball"),
+ [MOVE_FEATHER_DANCE] = _("FeatherDance"),
+ [MOVE_TEETER_DANCE] = _("Teeter Dance"),
+ [MOVE_BLAZE_KICK] = _("Blaze Kick"),
+ [MOVE_MUD_SPORT] = _("Mud Sport"),
+ [MOVE_ICE_BALL] = _("Ice Ball"),
+ [MOVE_NEEDLE_ARM] = _("Needle Arm"),
+ [MOVE_SLACK_OFF] = _("Slack Off"),
+ [MOVE_HYPER_VOICE] = _("Hyper Voice"),
+ [MOVE_POISON_FANG] = _("Poison Fang"),
+ [MOVE_CRUSH_CLAW] = _("Crush Claw"),
+ [MOVE_BLAST_BURN] = _("Blast Burn"),
+ [MOVE_HYDRO_CANNON] = _("Hydro Cannon"),
+ [MOVE_METEOR_MASH] = _("Meteor Mash"),
+ [MOVE_ASTONISH] = _("Astonish"),
+ [MOVE_WEATHER_BALL] = _("Weather Ball"),
+ [MOVE_AROMATHERAPY] = _("Aromatherapy"),
+ [MOVE_FAKE_TEARS] = _("Fake Tears"),
+ [MOVE_AIR_CUTTER] = _("Air Cutter"),
+ [MOVE_OVERHEAT] = _("Overheat"),
+ [MOVE_ODOR_SLEUTH] = _("Odor Sleuth"),
+ [MOVE_ROCK_TOMB] = _("Rock Tomb"),
+ [MOVE_SILVER_WIND] = _("Silver Wind"),
+ [MOVE_METAL_SOUND] = _("Metal Sound"),
+ [MOVE_GRASS_WHISTLE] = _("GrassWhistle"),
+ [MOVE_TICKLE] = _("Tickle"),
+ [MOVE_COSMIC_POWER] = _("Cosmic Power"),
+ [MOVE_WATER_SPOUT] = _("Water Spout"),
+ [MOVE_SIGNAL_BEAM] = _("Signal Beam"),
+ [MOVE_SHADOW_PUNCH] = _("Shadow Punch"),
+ [MOVE_EXTRASENSORY] = _("Extrasensory"),
+ [MOVE_SKY_UPPERCUT] = _("Sky Uppercut"),
+ [MOVE_SAND_TOMB] = _("Sand Tomb"),
+ [MOVE_SHEER_COLD] = _("Sheer Cold"),
+ [MOVE_MUDDY_WATER] = _("Muddy Water"),
+ [MOVE_BULLET_SEED] = _("Bullet Seed"),
+ [MOVE_AERIAL_ACE] = _("Aerial Ace"),
+ [MOVE_ICICLE_SPEAR] = _("Icicle Spear"),
+ [MOVE_IRON_DEFENSE] = _("Iron Defense"),
+ [MOVE_BLOCK] = _("Block"),
+ [MOVE_HOWL] = _("Howl"),
+ [MOVE_DRAGON_CLAW] = _("Dragon Claw"),
+ [MOVE_FRENZY_PLANT] = _("Frenzy Plant"),
+ [MOVE_BULK_UP] = _("Bulk Up"),
+ [MOVE_BOUNCE] = _("Bounce"),
+ [MOVE_MUD_SHOT] = _("Mud Shot"),
+ [MOVE_POISON_TAIL] = _("Poison Tail"),
+ [MOVE_COVET] = _("Covet"),
+ [MOVE_VOLT_TACKLE] = _("Volt Tackle"),
+ [MOVE_MAGICAL_LEAF] = _("Magical Leaf"),
+ [MOVE_WATER_SPORT] = _("Water Sport"),
+ [MOVE_CALM_MIND] = _("Calm Mind"),
+ [MOVE_LEAF_BLADE] = _("Leaf Blade"),
+ [MOVE_DRAGON_DANCE] = _("Dragon Dance"),
+ [MOVE_ROCK_BLAST] = _("Rock Blast"),
+ [MOVE_SHOCK_WAVE] = _("Shock Wave"),
+ [MOVE_WATER_PULSE] = _("Water Pulse"),
+ [MOVE_DOOM_DESIRE] = _("Doom Desire"),
+ [MOVE_PSYCHO_BOOST] = _("Psycho Boost"),
+ [MOVE_ROOST] = _("Roost"),
+ [MOVE_GRAVITY] = _("Gravity"),
+ [MOVE_MIRACLE_EYE] = _("Miracle Eye"),
+ [MOVE_WAKE_UP_SLAP] = _("Wake-Up Slap"),
+ [MOVE_HAMMER_ARM] = _("Hammer Arm"),
+ [MOVE_GYRO_BALL] = _("Gyro Ball"),
+ [MOVE_HEALING_WISH] = _("Healing Wish"),
+ [MOVE_BRINE] = _("Brine"),
+ [MOVE_NATURAL_GIFT] = _("Natural Gift"),
+ [MOVE_FEINT] = _("Feint"),
+ [MOVE_PLUCK] = _("Pluck"),
+ [MOVE_TAILWIND] = _("Tailwind"),
+ [MOVE_ACUPRESSURE] = _("Acupressure"),
+ [MOVE_METAL_BURST] = _("Metal Burst"),
+ [MOVE_U_TURN] = _("U-turn"),
+ [MOVE_CLOSE_COMBAT] = _("Close Combat"),
+ [MOVE_PAYBACK] = _("Payback"),
+ [MOVE_ASSURANCE] = _("Assurance"),
+ [MOVE_EMBARGO] = _("Embargo"),
+ [MOVE_FLING] = _("Fling"),
+ [MOVE_PSYCHO_SHIFT] = _("Psycho Shift"),
+ [MOVE_TRUMP_CARD] = _("Trump Card"),
+ [MOVE_HEAL_BLOCK] = _("Heal Block"),
+ [MOVE_WRING_OUT] = _("Wring Out"),
+ [MOVE_POWER_TRICK] = _("Power Trick"),
+ [MOVE_GASTRO_ACID] = _("Gastro Acid"),
+ [MOVE_LUCKY_CHANT] = _("Lucky Chant"),
+ [MOVE_ME_FIRST] = _("Me First"),
+ [MOVE_COPYCAT] = _("Copycat"),
+ [MOVE_POWER_SWAP] = _("Power Swap"),
+ [MOVE_GUARD_SWAP] = _("Guard Swap"),
+ [MOVE_PUNISHMENT] = _("Punishment"),
+ [MOVE_LAST_RESORT] = _("Last Resort"),
+ [MOVE_WORRY_SEED] = _("Worry Seed"),
+ [MOVE_SUCKER_PUNCH] = _("Sucker Punch"),
+ [MOVE_TOXIC_SPIKES] = _("Toxic Spikes"),
+ [MOVE_HEART_SWAP] = _("Heart Swap"),
+ [MOVE_AQUA_RING] = _("Aqua Ring"),
+ [MOVE_MAGNET_RISE] = _("Magnet Rise"),
+ [MOVE_FLARE_BLITZ] = _("Flare Blitz"),
+ [MOVE_FORCE_PALM] = _("Force Palm"),
+ [MOVE_AURA_SPHERE] = _("Aura Sphere"),
+ [MOVE_ROCK_POLISH] = _("Rock Polish"),
+ [MOVE_POISON_JAB] = _("Poison Jab"),
+ [MOVE_DARK_PULSE] = _("Dark Pulse"),
+ [MOVE_NIGHT_SLASH] = _("Night Slash"),
+ [MOVE_AQUA_TAIL] = _("Aqua Tail"),
+ [MOVE_SEED_BOMB] = _("Seed Bomb"),
+ [MOVE_AIR_SLASH] = _("Air Slash"),
+ [MOVE_X_SCISSOR] = _("X-Scissor"),
+ [MOVE_BUG_BUZZ] = _("Bug Buzz"),
+ [MOVE_DRAGON_PULSE] = _("Dragon Pulse"),
+ [MOVE_DRAGON_RUSH] = _("Dragon Rush"),
+ [MOVE_POWER_GEM] = _("Power Gem"),
+ [MOVE_DRAIN_PUNCH] = _("Drain Punch"),
+ [MOVE_VACUUM_WAVE] = _("Vacuum Wave"),
+ [MOVE_FOCUS_BLAST] = _("Focus Blast"),
+ [MOVE_ENERGY_BALL] = _("Energy Ball"),
+ [MOVE_BRAVE_BIRD] = _("Brave Bird"),
+ [MOVE_EARTH_POWER] = _("Earth Power"),
+ [MOVE_SWITCHEROO] = _("Switcheroo"),
+ [MOVE_GIGA_IMPACT] = _("Giga Impact"),
+ [MOVE_NASTY_PLOT] = _("Nasty Plot"),
+ [MOVE_BULLET_PUNCH] = _("Bullet Punch"),
+ [MOVE_AVALANCHE] = _("Avalanche"),
+ [MOVE_ICE_SHARD] = _("Ice Shard"),
+ [MOVE_SHADOW_CLAW] = _("Shadow Claw"),
+ [MOVE_THUNDER_FANG] = _("Thunder Fang"),
+ [MOVE_ICE_FANG] = _("Ice Fang"),
+ [MOVE_FIRE_FANG] = _("Fire Fang"),
+ [MOVE_SHADOW_SNEAK] = _("Shadow Sneak"),
+ [MOVE_MUD_BOMB] = _("Mud Bomb"),
+ [MOVE_PSYCHO_CUT] = _("Psycho Cut"),
+ [MOVE_ZEN_HEADBUTT] = _("Zen Headbutt"),
+ [MOVE_MIRROR_SHOT] = _("Mirror Shot"),
+ [MOVE_FLASH_CANNON] = _("Flash Cannon"),
+ [MOVE_ROCK_CLIMB] = _("Rock Climb"),
+ [MOVE_DEFOG] = _("Defog"),
+ [MOVE_TRICK_ROOM] = _("Trick Room"),
+ [MOVE_DRACO_METEOR] = _("Draco Meteor"),
+ [MOVE_DISCHARGE] = _("Discharge"),
+ [MOVE_LAVA_PLUME] = _("Lava Plume"),
+ [MOVE_LEAF_STORM] = _("Leaf Storm"),
+ [MOVE_POWER_WHIP] = _("Power Whip"),
+ [MOVE_ROCK_WRECKER] = _("Rock Wrecker"),
+ [MOVE_CROSS_POISON] = _("Cross Poison"),
+ [MOVE_GUNK_SHOT] = _("Gunk Shot"),
+ [MOVE_IRON_HEAD] = _("Iron Head"),
+ [MOVE_MAGNET_BOMB] = _("Magnet Bomb"),
+ [MOVE_STONE_EDGE] = _("Stone Edge"),
+ [MOVE_CAPTIVATE] = _("Captivate"),
+ [MOVE_STEALTH_ROCK] = _("Stealth Rock"),
+ [MOVE_GRASS_KNOT] = _("Grass Knot"),
+ [MOVE_CHATTER] = _("Chatter"),
+ [MOVE_JUDGMENT] = _("Judgment"),
+ [MOVE_BUG_BITE] = _("Bug Bite"),
+ [MOVE_CHARGE_BEAM] = _("Charge Beam"),
+ [MOVE_WOOD_HAMMER] = _("Wood Hammer"),
+ [MOVE_AQUA_JET] = _("Aqua Jet"),
+ [MOVE_ATTACK_ORDER] = _("Attack Order"),
+ [MOVE_DEFEND_ORDER] = _("Defend Order"),
+ [MOVE_HEAL_ORDER] = _("Heal Order"),
+ [MOVE_HEAD_SMASH] = _("Head Smash"),
+ [MOVE_DOUBLE_HIT] = _("Double Hit"),
+ [MOVE_ROAR_OF_TIME] = _("Roar of Time"),
+ [MOVE_SPACIAL_REND] = _("Spacial Rend"),
+ [MOVE_LUNAR_DANCE] = _("Lunar Dance"),
+ [MOVE_CRUSH_GRIP] = _("Crush Grip"),
+ [MOVE_MAGMA_STORM] = _("Magma Storm"),
+ [MOVE_DARK_VOID] = _("Dark Void"),
+ [MOVE_SEED_FLARE] = _("Seed Flare"),
+ [MOVE_OMINOUS_WIND] = _("Ominous Wind"),
+ [MOVE_SHADOW_FORCE] = _("Shadow Force"),
+ [MOVE_HONE_CLAWS] = _("Hone Claws"),
+ [MOVE_WIDE_GUARD] = _("Wide Guard"),
+ [MOVE_GUARD_SPLIT] = _("Guard Split"),
+ [MOVE_POWER_SPLIT] = _("Power Split"),
+ [MOVE_WONDER_ROOM] = _("Wonder Room"),
+ [MOVE_PSYSHOCK] = _("Psyshock"),
+ [MOVE_VENOSHOCK] = _("Venoshock"),
+ [MOVE_AUTOTOMIZE] = _("Autotomize"),
+ [MOVE_RAGE_POWDER] = _("Rage Powder"),
+ [MOVE_TELEKINESIS] = _("Telekinesis"),
+ [MOVE_MAGIC_ROOM] = _("Magic Room"),
+ [MOVE_SMACK_DOWN] = _("Smack Down"),
+ [MOVE_STORM_THROW] = _("Storm Throw"),
+ [MOVE_FLAME_BURST] = _("Flame Burst"),
+ [MOVE_SLUDGE_WAVE] = _("Sludge Wave"),
+ [MOVE_QUIVER_DANCE] = _("Quiver Dance"),
+ [MOVE_HEAVY_SLAM] = _("Heavy Slam"),
+ [MOVE_SYNCHRONOISE] = _("Synchronoise"),
+ [MOVE_ELECTRO_BALL] = _("Electro Ball"),
+ [MOVE_SOAK] = _("Soak"),
+ [MOVE_FLAME_CHARGE] = _("Flame Charge"),
+ [MOVE_COIL] = _("Coil"),
+ [MOVE_LOW_SWEEP] = _("Low Sweep"),
+ [MOVE_ACID_SPRAY] = _("Acid Spray"),
+ [MOVE_FOUL_PLAY] = _("Foul Play"),
+ [MOVE_SIMPLE_BEAM] = _("Simple Beam"),
+ [MOVE_ENTRAINMENT] = _("Entrainment"),
+ [MOVE_AFTER_YOU] = _("After You"),
+ [MOVE_ROUND] = _("Round"),
+ [MOVE_ECHOED_VOICE] = _("Echoed Voice"),
+ [MOVE_CHIP_AWAY] = _("Chip Away"),
+ [MOVE_CLEAR_SMOG] = _("Clear Smog"),
+ [MOVE_STORED_POWER] = _("Stored Power"),
+ [MOVE_QUICK_GUARD] = _("Quick Guard"),
+ [MOVE_ALLY_SWITCH] = _("Ally Switch"),
+ [MOVE_SCALD] = _("Scald"),
+ [MOVE_SHELL_SMASH] = _("Shell Smash"),
+ [MOVE_HEAL_PULSE] = _("Heal Pulse"),
+ [MOVE_HEX] = _("Hex"),
+ [MOVE_SKY_DROP] = _("Sky Drop"),
+ [MOVE_SHIFT_GEAR] = _("Shift Gear"),
+ [MOVE_CIRCLE_THROW] = _("Circle Throw"),
+ [MOVE_INCINERATE] = _("Incinerate"),
+ [MOVE_QUASH] = _("Quash"),
+ [MOVE_ACROBATICS] = _("Acrobatics"),
+ [MOVE_REFLECT_TYPE] = _("Reflect Type"),
+ [MOVE_RETALIATE] = _("Retaliate"),
+ [MOVE_FINAL_GAMBIT] = _("Final Gambit"),
+ [MOVE_BESTOW] = _("Bestow"),
+ [MOVE_INFERNO] = _("Inferno"),
+ [MOVE_WATER_PLEDGE] = _("Water Pledge"),
+ [MOVE_FIRE_PLEDGE] = _("Fire Pledge"),
+ [MOVE_GRASS_PLEDGE] = _("Grass Pledge"),
+ [MOVE_VOLT_SWITCH] = _("Volt Switch"),
+ [MOVE_STRUGGLE_BUG] = _("Struggle Bug"),
+ [MOVE_BULLDOZE] = _("Bulldoze"),
+ [MOVE_FROST_BREATH] = _("Frost Breath"),
+ [MOVE_DRAGON_TAIL] = _("Dragon Tail"),
+ [MOVE_WORK_UP] = _("Work Up"),
+ [MOVE_ELECTROWEB] = _("Electroweb"),
+ [MOVE_WILD_CHARGE] = _("Wild Charge"),
+ [MOVE_DRILL_RUN] = _("Drill Run"),
+ [MOVE_DUAL_CHOP] = _("Dual Chop"),
+ [MOVE_HEART_STAMP] = _("Heart Stamp"),
+ [MOVE_HORN_LEECH] = _("Horn Leech"),
+ [MOVE_SACRED_SWORD] = _("Sacred Sword"),
+ [MOVE_RAZOR_SHELL] = _("Razor Shell"),
+ [MOVE_HEAT_CRASH] = _("Heat Crash"),
+ [MOVE_LEAF_TORNADO] = _("Leaf Tornado"),
+ [MOVE_STEAMROLLER] = _("Steamroller"),
+ [MOVE_COTTON_GUARD] = _("Cotton Guard"),
+ [MOVE_NIGHT_DAZE] = _("Night Daze"),
+ [MOVE_PSYSTRIKE] = _("Psystrike"),
+ [MOVE_TAIL_SLAP] = _("Tail Slap"),
+ [MOVE_HURRICANE] = _("Hurricane"),
+ [MOVE_HEAD_CHARGE] = _("Head Charge"),
+ [MOVE_GEAR_GRIND] = _("Gear Grind"),
+ [MOVE_SEARING_SHOT] = _("Searing Shot"),
+ [MOVE_TECHNO_BLAST] = _("Techno Blast"),
+ [MOVE_RELIC_SONG] = _("Relic Song"),
+ [MOVE_SECRET_SWORD] = _("Secret Sword"),
+ [MOVE_GLACIATE] = _("Glaciate"),
+ [MOVE_BOLT_STRIKE] = _("Bolt Strike"),
+ [MOVE_BLUE_FLARE] = _("Blue Flare"),
+ [MOVE_FIERY_DANCE] = _("Fiery Dance"),
+ [MOVE_FREEZE_SHOCK] = _("Freeze Shock"),
+ [MOVE_ICE_BURN] = _("Ice Burn"),
+ [MOVE_SNARL] = _("Snarl"),
+ [MOVE_ICICLE_CRASH] = _("Icicle Crash"),
+ [MOVE_V_CREATE] = _("V-create"),
+ [MOVE_FUSION_FLARE] = _("Fusion Flare"),
+ [MOVE_FUSION_BOLT] = _("Fusion Bolt"),
+ [MOVE_FLYING_PRESS] = _("Flying Press"),
+ [MOVE_MAT_BLOCK] = _("Mat Block"),
+ [MOVE_BELCH] = _("Belch"),
+ [MOVE_ROTOTILLER] = _("Rototiller"),
+ [MOVE_STICKY_WEB] = _("Sticky Web"),
+ [MOVE_FELL_STINGER] = _("Fell Stinger"),
+ [MOVE_PHANTOM_FORCE] = _("PhantomForce"),
+ [MOVE_TRICK_OR_TREAT] = _("TrickOrTreat"),
+ [MOVE_NOBLE_ROAR] = _("Noble Roar"),
+ [MOVE_ION_DELUGE] = _("Ion Deluge"),
+ [MOVE_PARABOLIC_CHARGE] = _("ParabolcChrg"),
+ [MOVE_FORESTS_CURSE] = _("Forest'sCurs"),
+ [MOVE_PETAL_BLIZZARD] = _("PetalBlizzrd"),
+ [MOVE_FREEZE_DRY] = _("Freeze-Dry"),
+ [MOVE_DISARMING_VOICE] = _("DisrmngVoice"),
+ [MOVE_PARTING_SHOT] = _("Parting Shot"),
+ [MOVE_TOPSY_TURVY] = _("Topsy-Turvy"),
+ [MOVE_DRAINING_KISS] = _("DrainingKiss"),
+ [MOVE_CRAFTY_SHIELD] = _("CraftyShield"),
+ [MOVE_FLOWER_SHIELD] = _("FlowerShield"),
+ [MOVE_GRASSY_TERRAIN] = _("GrssyTerrain"),
+ [MOVE_MISTY_TERRAIN] = _("MistyTerrain"),
+ [MOVE_ELECTRIFY] = _("Electrify"),
+ [MOVE_PLAY_ROUGH] = _("Play Rough"),
+ [MOVE_FAIRY_WIND] = _("Fairy Wind"),
+ [MOVE_MOONBLAST] = _("Moonblast"),
+ [MOVE_BOOMBURST] = _("Boomburst"),
+ [MOVE_FAIRY_LOCK] = _("Fairy Lock"),
+ [MOVE_KINGS_SHIELD] = _("King'sShield"),
+ [MOVE_PLAY_NICE] = _("Play Nice"),
+ [MOVE_CONFIDE] = _("Confide"),
+ [MOVE_DIAMOND_STORM] = _("DiamondStorm"),
+ [MOVE_STEAM_ERUPTION] = _("SteamErption"),
+ [MOVE_HYPERSPACE_HOLE] = _("HyprspceHole"),
+ [MOVE_WATER_SHURIKEN] = _("WatrShuriken"),
+ [MOVE_MYSTICAL_FIRE] = _("MysticalFire"),
+ [MOVE_SPIKY_SHIELD] = _("Spiky Shield"),
+ [MOVE_AROMATIC_MIST] = _("AromaticMist"),
+ [MOVE_EERIE_IMPULSE] = _("EerieImpulse"),
+ [MOVE_VENOM_DRENCH] = _("Venom Drench"),
+ [MOVE_POWDER] = _("Powder"),
+ [MOVE_GEOMANCY] = _("Geomancy"),
+ [MOVE_MAGNETIC_FLUX] = _("MagneticFlux"),
+ [MOVE_HAPPY_HOUR] = _("Happy Hour"),
+ [MOVE_ELECTRIC_TERRAIN] = _("ElctrcTrrain"),
+ [MOVE_DAZZLING_GLEAM] = _("DazzlngGleam"),
+ [MOVE_CELEBRATE] = _("Celebrate"),
+ [MOVE_HOLD_HANDS] = _("Hold Hands"),
+ [MOVE_BABY_DOLL_EYES] = _("BabyDollEyes"),
+ [MOVE_NUZZLE] = _("Nuzzle"),
+ [MOVE_HOLD_BACK] = _("Hold Back"),
+ [MOVE_INFESTATION] = _("Infestation"),
+ [MOVE_POWER_UP_PUNCH] = _("PowerUpPunch"),
+ [MOVE_OBLIVION_WING] = _("OblivionWing"),
+ [MOVE_THOUSAND_ARROWS] = _("ThousndArrws"),
+ [MOVE_THOUSAND_WAVES] = _("ThousndWaves"),
+ [MOVE_LANDS_WRATH] = _("Land's Wrath"),
+ [MOVE_LIGHT_OF_RUIN] = _("LightOfRuin"),
+ [MOVE_ORIGIN_PULSE] = _("Origin Pulse"),
+ [MOVE_PRECIPICE_BLADES] = _("PrcipceBldes"),
+ [MOVE_DRAGON_ASCENT] = _("DragonAscent"),
+ [MOVE_HYPERSPACE_FURY] = _("HyprspceFury"),
+ [MOVE_SHORE_UP] = _("Shore Up"),
+ [MOVE_FIRST_IMPRESSION] = _("FrstImpressn"),
+ [MOVE_BANEFUL_BUNKER] = _("BanefulBunkr"),
+ [MOVE_SPIRIT_SHACKLE] = _("SpiritShackl"),
+ [MOVE_DARKEST_LARIAT] = _("DarkstLariat"),
+ [MOVE_SPARKLING_ARIA] = _("SparklngAria"),
+ [MOVE_ICE_HAMMER] = _("Ice Hammer"),
+ [MOVE_FLORAL_HEALING] = _("FloralHealng"),
+ [MOVE_HIGH_HORSEPOWER] = _("HighHorsepwr"),
+ [MOVE_STRENGTH_SAP] = _("Strength Sap"),
+ [MOVE_SOLAR_BLADE] = _("Solar Blade"),
+ [MOVE_LEAFAGE] = _("Leafage"),
+ [MOVE_SPOTLIGHT] = _("Spotlight"),
+ [MOVE_TOXIC_THREAD] = _("Toxic Thread"),
+ [MOVE_LASER_FOCUS] = _("Laser Focus"),
+ [MOVE_GEAR_UP] = _("Gear Up"),
+ [MOVE_THROAT_CHOP] = _("Throat Chop"),
+ [MOVE_POLLEN_PUFF] = _("Pollen Puff"),
+ [MOVE_ANCHOR_SHOT] = _("Anchor Shot"),
+ [MOVE_PSYCHIC_TERRAIN] = _("PsychcTrrain"),
+ [MOVE_LUNGE] = _("Lunge"),
+ [MOVE_FIRE_LASH] = _("Fire Lash"),
+ [MOVE_POWER_TRIP] = _("Power Trip"),
+ [MOVE_BURN_UP] = _("Burn Up"),
+ [MOVE_SPEED_SWAP] = _("Speed Swap"),
+ [MOVE_SMART_STRIKE] = _("Smart Strike"),
+ [MOVE_PURIFY] = _("Purify"),
+ [MOVE_REVELATION_DANCE] = _("RvlationDnce"),
+ [MOVE_CORE_ENFORCER] = _("CoreEnforcer"),
+ [MOVE_TROP_KICK] = _("Trop Kick"),
+ [MOVE_INSTRUCT] = _("Instruct"),
+ [MOVE_BEAK_BLAST] = _("Beak Blast"),
+ [MOVE_CLANGING_SCALES] = _("ClngngScales"),
+ [MOVE_DRAGON_HAMMER] = _("DragonHammer"),
+ [MOVE_BRUTAL_SWING] = _("Brutal Swing"),
+ [MOVE_AURORA_VEIL] = _("Aurora Veil"),
+ [MOVE_SHELL_TRAP] = _("Shell Trap"),
+ [MOVE_FLEUR_CANNON] = _("Fleur Cannon"),
+ [MOVE_PSYCHIC_FANGS] = _("PsychicFangs"),
+ [MOVE_STOMPING_TANTRUM] = _("StmpngTantrm"),
+ [MOVE_SHADOW_BONE] = _("Shadow Bone"),
+ [MOVE_ACCELEROCK] = _("Accelerock"),
+ [MOVE_LIQUIDATION] = _("Liquidation"),
+ [MOVE_PRISMATIC_LASER] = _("PrsmaticLasr"),
+ [MOVE_SPECTRAL_THIEF] = _("SpectrlThief"),
+ [MOVE_SUNSTEEL_STRIKE] = _("SnsteelStrke"),
+ [MOVE_MOONGEIST_BEAM] = _("MoongestBeam"),
+ [MOVE_TEARFUL_LOOK] = _("Tearful Look"),
+ [MOVE_ZING_ZAP] = _("Zing Zap"),
+ [MOVE_NATURES_MADNESS] = _("Natur'sMadns"),
+ [MOVE_MULTI_ATTACK] = _("Multi-Attack"),
+ [MOVE_MIND_BLOWN] = _("Mind Blown"),
+ [MOVE_PLASMA_FISTS] = _("Plasma Fists"),
+ [MOVE_PHOTON_GEYSER] = _("PhotonGeyser"),
+ [MOVE_ZIPPY_ZAP] = _("Zippy Zap"),
+ [MOVE_SPLISHY_SPLASH] = _("SplishySplsh"),
+ [MOVE_FLOATY_FALL] = _("Floaty Fall"),
+ [MOVE_PIKA_PAPOW] = _("Pika Papow"),
+ [MOVE_BOUNCY_BUBBLE] = _("BouncyBubble"),
+ [MOVE_BUZZY_BUZZ] = _("Buzzy Buzz"),
+ [MOVE_SIZZLY_SLIDE] = _("Sizzly Slide"),
+ [MOVE_GLITZY_GLOW] = _("Glitzy Glow"),
+ [MOVE_BADDY_BAD] = _("Baddy Bad"),
+ [MOVE_SAPPY_SEED] = _("Sappy Seed"),
+ [MOVE_FREEZY_FROST] = _("Freezy Frost"),
+ [MOVE_SPARKLY_SWIRL] = _("SparklySwirl"),
+ [MOVE_VEEVEE_VOLLEY] = _("VeeveeVolley"),
+ [MOVE_DOUBLE_IRON_BASH] = _("DublIronBash"),
+ [MOVE_DYNAMAX_CANNON] = _("DynamxCannon"),
+ [MOVE_SNIPE_SHOT] = _("Snipe Shot"),
+ [MOVE_JAW_LOCK] = _("Jaw Lock"),
+ [MOVE_STUFF_CHEEKS] = _("Stuff Cheeks"),
+ [MOVE_NO_RETREAT] = _("No Retreat"),
+ [MOVE_TAR_SHOT] = _("Tar Shot"),
+ [MOVE_MAGIC_POWDER] = _("Magic Powder"),
+ [MOVE_DRAGON_DARTS] = _("Dragon Darts"),
+ [MOVE_TEATIME] = _("Teatime"),
+ [MOVE_OCTOLOCK] = _("Octolock"),
+ [MOVE_BOLT_BEAK] = _("Bolt Beak"),
+ [MOVE_FISHIOUS_REND] = _("FishiousRend"),
+ [MOVE_COURT_CHANGE] = _("Court Change"),
+ [MOVE_CLANGOROUS_SOUL] = _("ClngrousSoul"),
+ [MOVE_BODY_PRESS] = _("Body Press"),
+ [MOVE_DECORATE] = _("Decorate"),
+ [MOVE_DRUM_BEATING] = _("Drum Beating"),
+ [MOVE_SNAP_TRAP] = _("Snap Trap"),
+ [MOVE_PYRO_BALL] = _("Pyro Ball"),
+ [MOVE_BEHEMOTH_BLADE] = _("BehemthBlade"),
+ [MOVE_BEHEMOTH_BASH] = _("BehemothBash"),
+ [MOVE_AURA_WHEEL] = _("Aura Wheel"),
+ [MOVE_BREAKING_SWIPE] = _("BreakngSwipe"),
+ [MOVE_BRANCH_POKE] = _("Branch Poke"),
+ [MOVE_OVERDRIVE] = _("Overdrive"),
+ [MOVE_APPLE_ACID] = _("Apple Acid"),
+ [MOVE_GRAV_APPLE] = _("Grav Apple"),
+ [MOVE_SPIRIT_BREAK] = _("Spirit Break"),
+ [MOVE_STRANGE_STEAM] = _("StrangeSteam"),
+ [MOVE_LIFE_DEW] = _("Life Dew"),
+ [MOVE_OBSTRUCT] = _("Obstruct"),
+ [MOVE_FALSE_SURRENDER] = _("FalsSurrendr"),
+ [MOVE_METEOR_ASSAULT] = _("MeteorAssalt"),
+ [MOVE_ETERNABEAM] = _("Eternabeam"),
+ [MOVE_STEEL_BEAM] = _("Steel Beam"),
+ [MOVE_EXPANDING_FORCE] = _("ExpandngForc"),
+ [MOVE_STEEL_ROLLER] = _("Steel Roller"),
+ [MOVE_SCALE_SHOT] = _("Scale Shot"),
+ [MOVE_METEOR_BEAM] = _("Meteor Beam"),
+ [MOVE_SHELL_SIDE_ARM] = _("ShellSideArm"),
+ [MOVE_MISTY_EXPLOSION] = _("MstyExplsion"),
+ [MOVE_GRASSY_GLIDE] = _("Grassy Glide"),
+ [MOVE_RISING_VOLTAGE] = _("RisngVoltage"),
+ [MOVE_TERRAIN_PULSE] = _("TerrainPulse"),
+ [MOVE_SKITTER_SMACK] = _("SkitterSmack"),
+ [MOVE_BURNING_JEALOUSY] = _("BrningJelosy"),
+ [MOVE_LASH_OUT] = _("Lash Out"),
+ [MOVE_POLTERGEIST] = _("Poltergeist"),
+ [MOVE_CORROSIVE_GAS] = _("CorrosiveGas"),
+ [MOVE_COACHING] = _("Coaching"),
+ [MOVE_FLIP_TURN] = _("Flip Turn"),
+ [MOVE_TRIPLE_AXEL] = _("Triple Axel"),
+ [MOVE_DUAL_WINGBEAT] = _("DualWingbeat"),
+ [MOVE_SCORCHING_SANDS] = _("ScorchngSnds"),
+ [MOVE_JUNGLE_HEALING] = _("JungleHealng"),
+ [MOVE_WICKED_BLOW] = _("Wicked Blow"),
+ [MOVE_SURGING_STRIKES] = _("SurgngStrkes"),
+ [MOVE_THUNDER_CAGE] = _("Thunder Cage"),
+ [MOVE_DRAGON_ENERGY] = _("DragonEnergy"),
+ [MOVE_FREEZING_GLARE] = _("FreezngGlare"),
+ [MOVE_FIERY_WRATH] = _("Fiery Wrath"),
+ [MOVE_THUNDEROUS_KICK] = _("ThnderusKick"),
+ [MOVE_GLACIAL_LANCE] = _("GlacialLance"),
+ [MOVE_ASTRAL_BARRAGE] = _("AstrlBarrage"),
+ [MOVE_EERIE_SPELL] = _("Eerie Spell"),
+};
+#endif
+
+static const u8 sText_Breakneck_Blitz[] = _("Breakneck Blitz");
+static const u8 sText_All_Out_Pummeling[] = _("All Out Pummeling");
+static const u8 sText_Supersonic_Skystrike[] = _("Supersonic Skystrike");
+static const u8 sText_Acid_Downpour[] = _("Acid Downpour");
+static const u8 sText_Tectonic_Rage[] = _("Tectonic Rage");
+static const u8 sText_Continental_Crush[] = _("Continental Crush");
+static const u8 sText_Savage_Spin_Out[] = _("Savage Spin Out");
+static const u8 sText_Never_Ending_Nightmare[] = _("Never Ending Nightmare");
+static const u8 sText_Corkscrew_Crash[] = _("Corkscrew Crash");
+static const u8 sText_Inferno_Overdrive[] = _("Inferno Overdrive");
+static const u8 sText_Hydro_Vortex[] = _("Hydro Vortex");
+static const u8 sText_Bloom_Doom[] = _("Bloom Doom");
+static const u8 sText_Gigavolt_Havoc[] = _("Gigavolt Havoc");
+static const u8 sText_Shattered_Psyche[] = _("Shattered Psyche");
+static const u8 sText_Subzero_Slammer[] = _("Subzero Slammer");
+static const u8 sText_Devastating_Drake[] = _("Devastating Drake");
+static const u8 sText_Black_Hole_Eclipse[] = _("Black Hole Eclipse");
+static const u8 sText_Twinkle_Tackle[] = _("Twinkle Tackle");
+static const u8 sText_Catastropika[] = _("Catastropika");
+static const u8 sText_10000000_Volt_Thunderbolt[] = _("10000000 Volt Thunderbolt");
+static const u8 sText_Stoked_Sparksurfer[] = _("Stoked Sparksurfer");
+static const u8 sText_Extreme_Evoboost[] = _("Extreme Evoboost");
+static const u8 sText_Pulverizing_Pancake[] = _("Pulverizing Pancake");
+static const u8 sText_Genesis_Supernova[] = _("Genesis Supernova");
+static const u8 sText_Sinister_Arrow_Raid[] = _("Sinister Arrow Raid");
+static const u8 sText_Malicious_Moonsault[] = _("Malicious Moonsault");
+static const u8 sText_Oceanic_Operetta[] = _("Oceanic Operetta");
+static const u8 sText_Splintered_Stormshards[] = _("Splintered Stormshards");
+static const u8 sText_Lets_Snuggle_Forever[] = _("Let's Snuggle Forever");
+static const u8 sText_Clangorous_Soulblaze[] = _("Clangorous Soulblaze");
+static const u8 sText_Guardian_Of_Alola[] = _("Guardian Of Alola");
+static const u8 sText_Searing_Sunraze_Smash[] = _("Searing Sunraze Smash");
+static const u8 sText_Menacing_Moonraze_Maelstrom[] = _("Menacing Moonraze Maelstrom");
+static const u8 sText_Light_That_Burns_The_Sky[] = _("Light That Burns The Sky");
+static const u8 sText_Soul_Stealing_7_Star_Strike[] = _("Soul Stealing 7 Star Strike");
+
+const u8 *const gZMoveNames[] =
+{
+ [MOVE_BREAKNECK_BLITZ - FIRST_Z_MOVE] = sText_Breakneck_Blitz,
+ [MOVE_ALL_OUT_PUMMELING - FIRST_Z_MOVE] = sText_All_Out_Pummeling,
+ [MOVE_SUPERSONIC_SKYSTRIKE - FIRST_Z_MOVE] = sText_Supersonic_Skystrike,
+ [MOVE_ACID_DOWNPOUR - FIRST_Z_MOVE] = sText_Acid_Downpour,
+ [MOVE_TECTONIC_RAGE - FIRST_Z_MOVE] = sText_Tectonic_Rage,
+ [MOVE_CONTINENTAL_CRUSH - FIRST_Z_MOVE] = sText_Continental_Crush,
+ [MOVE_SAVAGE_SPIN_OUT - FIRST_Z_MOVE] = sText_Savage_Spin_Out,
+ [MOVE_NEVER_ENDING_NIGHTMARE - FIRST_Z_MOVE] = sText_Never_Ending_Nightmare,
+ [MOVE_CORKSCREW_CRASH - FIRST_Z_MOVE] = sText_Corkscrew_Crash,
+ [MOVE_INFERNO_OVERDRIVE - FIRST_Z_MOVE] = sText_Inferno_Overdrive,
+ [MOVE_HYDRO_VORTEX - FIRST_Z_MOVE] = sText_Hydro_Vortex,
+ [MOVE_BLOOM_DOOM - FIRST_Z_MOVE] = sText_Bloom_Doom,
+ [MOVE_GIGAVOLT_HAVOC - FIRST_Z_MOVE] = sText_Gigavolt_Havoc,
+ [MOVE_SHATTERED_PSYCHE - FIRST_Z_MOVE] = sText_Shattered_Psyche,
+ [MOVE_SUBZERO_SLAMMER - FIRST_Z_MOVE] = sText_Subzero_Slammer,
+ [MOVE_DEVASTATING_DRAKE - FIRST_Z_MOVE] = sText_Devastating_Drake,
+ [MOVE_BLACK_HOLE_ECLIPSE - FIRST_Z_MOVE] = sText_Black_Hole_Eclipse,
+ [MOVE_TWINKLE_TACKLE - FIRST_Z_MOVE] = sText_Twinkle_Tackle,
+ [MOVE_CATASTROPIKA - FIRST_Z_MOVE] = sText_Catastropika,
+ [MOVE_10000000_VOLT_THUNDERBOLT - FIRST_Z_MOVE] = sText_10000000_Volt_Thunderbolt,
+ [MOVE_STOKED_SPARKSURFER - FIRST_Z_MOVE] = sText_Stoked_Sparksurfer,
+ [MOVE_EXTREME_EVOBOOST - FIRST_Z_MOVE] = sText_Extreme_Evoboost,
+ [MOVE_PULVERIZING_PANCAKE - FIRST_Z_MOVE] = sText_Pulverizing_Pancake,
+ [MOVE_GENESIS_SUPERNOVA - FIRST_Z_MOVE] = sText_Genesis_Supernova,
+ [MOVE_SINISTER_ARROW_RAID - FIRST_Z_MOVE] = sText_Sinister_Arrow_Raid,
+ [MOVE_MALICIOUS_MOONSAULT - FIRST_Z_MOVE] = sText_Malicious_Moonsault,
+ [MOVE_OCEANIC_OPERETTA - FIRST_Z_MOVE] = sText_Oceanic_Operetta,
+ [MOVE_SPLINTERED_STORMSHARDS - FIRST_Z_MOVE] = sText_Splintered_Stormshards,
+ [MOVE_LETS_SNUGGLE_FOREVER - FIRST_Z_MOVE] = sText_Lets_Snuggle_Forever,
+ [MOVE_CLANGOROUS_SOULBLAZE - FIRST_Z_MOVE] = sText_Clangorous_Soulblaze,
+ [MOVE_GUARDIAN_OF_ALOLA - FIRST_Z_MOVE] = sText_Guardian_Of_Alola,
+ [MOVE_SEARING_SUNRAZE_SMASH - FIRST_Z_MOVE] = sText_Searing_Sunraze_Smash,
+ [MOVE_MENACING_MOONRAZE_MAELSTROM - FIRST_Z_MOVE] = sText_Menacing_Moonraze_Maelstrom,
+ [MOVE_LIGHT_THAT_BURNS_THE_SKY - FIRST_Z_MOVE] = sText_Light_That_Burns_The_Sky,
+ [MOVE_SOUL_STEALING_7_STAR_STRIKE - FIRST_Z_MOVE] = sText_Soul_Stealing_7_Star_Strike,
};
diff --git a/src/data/text/species_names.h b/src/data/text/species_names.h
index aa8b4261ea..8e82d47a94 100644
--- a/src/data/text/species_names.h
+++ b/src/data/text/species_names.h
@@ -386,6 +386,7 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = {
[SPECIES_RAYQUAZA] = _("Rayquaza"),
[SPECIES_JIRACHI] = _("Jirachi"),
[SPECIES_DEOXYS] = _("Deoxys"),
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] = _("Turtwig"),
[SPECIES_GROTLE] = _("Grotle"),
[SPECIES_TORTERRA] = _("Torterra"),
@@ -1036,6 +1037,7 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = {
[SPECIES_PIKACHU_WORLD_CAP] = _("Pikachu"),
// Pichu
[SPECIES_PICHU_SPIKY_EARED] = _("Pichu"),
+#endif
// Unown
[SPECIES_UNOWN_B] = _("Unown"),
[SPECIES_UNOWN_C] = _("Unown"),
@@ -1072,6 +1074,7 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = {
[SPECIES_DEOXYS_ATTACK] = _("Deoxys"),
[SPECIES_DEOXYS_DEFENSE] = _("Deoxys"),
[SPECIES_DEOXYS_SPEED] = _("Deoxys"),
+#if P_NEW_POKEMON == TRUE
// Burmy
[SPECIES_BURMY_SANDY_CLOAK] = _("Burmy"),
[SPECIES_BURMY_TRASH_CLOAK] = _("Burmy"),
@@ -1303,4 +1306,5 @@ const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = {
// Calyrex
[SPECIES_CALYREX_ICE_RIDER] = _("Calyrex"),
[SPECIES_CALYREX_SHADOW_RIDER] = _("Calyrex"),
+#endif
};
diff --git a/src/data/trainers.h b/src/data/trainers.h
index 01cf0259af..75f7edc8b7 100644
--- a/src/data/trainers.h
+++ b/src/data/trainers.h
@@ -15,5831 +15,4998 @@ const struct Trainer gTrainers[] = {
[TRAINER_SAWYER_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("SAWYER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Sawyer1),
- .party = {.NoItemDefaultMoves = sParty_Sawyer1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer1),
},
[TRAINER_GRUNT_AQUA_HIDEOUT_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntAquaHideout1),
- .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout1),
},
[TRAINER_GRUNT_AQUA_HIDEOUT_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntAquaHideout2),
- .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout2),
},
[TRAINER_GRUNT_AQUA_HIDEOUT_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntAquaHideout3),
- .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout3),
},
[TRAINER_GRUNT_AQUA_HIDEOUT_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntAquaHideout4),
- .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout4),
},
[TRAINER_GRUNT_SEAFLOOR_CAVERN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern1),
- .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern1),
},
[TRAINER_GRUNT_SEAFLOOR_CAVERN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern2),
- .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern2),
},
[TRAINER_GRUNT_SEAFLOOR_CAVERN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern3),
- .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern3),
},
[TRAINER_GABRIELLE_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("GABRIELLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Gabrielle1),
- .party = {.NoItemDefaultMoves = sParty_Gabrielle1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle1),
},
[TRAINER_GRUNT_PETALBURG_WOODS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntPetalburgWoods),
- .party = {.NoItemDefaultMoves = sParty_GruntPetalburgWoods},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntPetalburgWoods),
},
[TRAINER_MARCEL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("MARCEL"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Marcel),
- .party = {.NoItemDefaultMoves = sParty_Marcel},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Marcel),
},
[TRAINER_ALBERTO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("ALBERTO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Alberto),
- .party = {.NoItemDefaultMoves = sParty_Alberto},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Alberto),
},
[TRAINER_ED] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COLLECTOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_COLLECTOR,
.trainerName = _("ED"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ed),
- .party = {.NoItemDefaultMoves = sParty_Ed},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ed),
},
[TRAINER_GRUNT_SEAFLOOR_CAVERN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern4),
- .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern4),
},
[TRAINER_DECLAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("DECLAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Declan),
- .party = {.NoItemDefaultMoves = sParty_Declan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Declan),
},
[TRAINER_GRUNT_RUSTURF_TUNNEL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntRusturfTunnel),
- .party = {.NoItemDefaultMoves = sParty_GruntRusturfTunnel},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntRusturfTunnel),
},
[TRAINER_GRUNT_WEATHER_INST_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntWeatherInst1),
- .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst1),
},
[TRAINER_GRUNT_WEATHER_INST_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntWeatherInst2),
- .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst2),
},
[TRAINER_GRUNT_WEATHER_INST_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntWeatherInst3),
- .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst3),
},
[TRAINER_GRUNT_MUSEUM_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMuseum1),
- .party = {.NoItemDefaultMoves = sParty_GruntMuseum1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMuseum1),
},
[TRAINER_GRUNT_MUSEUM_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMuseum2),
- .party = {.NoItemDefaultMoves = sParty_GruntMuseum2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMuseum2),
},
[TRAINER_GRUNT_SPACE_CENTER_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter1),
- .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter1),
},
[TRAINER_GRUNT_MT_PYRE_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMtPyre1),
- .party = {.NoItemDefaultMoves = sParty_GruntMtPyre1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre1),
},
[TRAINER_GRUNT_MT_PYRE_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMtPyre2),
- .party = {.NoItemDefaultMoves = sParty_GruntMtPyre2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre2),
},
[TRAINER_GRUNT_MT_PYRE_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMtPyre3),
- .party = {.NoItemDefaultMoves = sParty_GruntMtPyre3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre3),
},
[TRAINER_GRUNT_WEATHER_INST_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntWeatherInst4),
- .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst4),
},
[TRAINER_GRUNT_AQUA_HIDEOUT_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntAquaHideout5),
- .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout5),
},
[TRAINER_GRUNT_AQUA_HIDEOUT_6] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntAquaHideout6),
- .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout6},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout6),
},
[TRAINER_FREDRICK] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_M,
.trainerName = _("FREDRICK"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Fredrick),
- .party = {.NoItemDefaultMoves = sParty_Fredrick},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Fredrick),
},
[TRAINER_MATT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AQUA_ADMIN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_ADMIN_M,
.trainerName = _("MATT"),
.items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Matt),
- .party = {.NoItemDefaultMoves = sParty_Matt},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Matt),
},
[TRAINER_ZANDER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("ZANDER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Zander),
- .party = {.NoItemDefaultMoves = sParty_Zander},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Zander),
},
[TRAINER_SHELLY_WEATHER_INSTITUTE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AQUA_ADMIN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_ADMIN_F,
.trainerName = _("SHELLY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_ShellyWeatherInstitute),
- .party = {.NoItemDefaultMoves = sParty_ShellyWeatherInstitute},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_ShellyWeatherInstitute),
},
[TRAINER_SHELLY_SEAFLOOR_CAVERN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AQUA_ADMIN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_ADMIN_F,
.trainerName = _("SHELLY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_ShellySeafloorCavern),
- .party = {.NoItemDefaultMoves = sParty_ShellySeafloorCavern},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_ShellySeafloorCavern),
},
[TRAINER_ARCHIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AQUA_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_LEADER_ARCHIE,
.trainerName = _("ARCHIE"),
.items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Archie),
- .party = {.NoItemDefaultMoves = sParty_Archie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Archie),
},
[TRAINER_LEAH] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("LEAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Leah),
- .party = {.NoItemDefaultMoves = sParty_Leah},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Leah),
},
[TRAINER_DAISY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AROMA_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_AROMA_LADY,
.trainerName = _("DAISY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Daisy),
- .party = {.NoItemDefaultMoves = sParty_Daisy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Daisy),
},
[TRAINER_ROSE_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AROMA_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_AROMA_LADY,
.trainerName = _("ROSE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Rose1),
- .party = {.NoItemDefaultMoves = sParty_Rose1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose1),
},
[TRAINER_FELIX] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("FELIX"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Felix),
- .party = {.NoItemCustomMoves = sParty_Felix},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Felix),
},
[TRAINER_VIOLET] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AROMA_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_AROMA_LADY,
.trainerName = _("VIOLET"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Violet),
- .party = {.NoItemDefaultMoves = sParty_Violet},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Violet),
},
[TRAINER_ROSE_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AROMA_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_AROMA_LADY,
.trainerName = _("ROSE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Rose2),
- .party = {.NoItemDefaultMoves = sParty_Rose2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose2),
},
[TRAINER_ROSE_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AROMA_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_AROMA_LADY,
.trainerName = _("ROSE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Rose3),
- .party = {.NoItemDefaultMoves = sParty_Rose3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose3),
},
[TRAINER_ROSE_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AROMA_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_AROMA_LADY,
.trainerName = _("ROSE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Rose4),
- .party = {.NoItemDefaultMoves = sParty_Rose4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose4),
},
[TRAINER_ROSE_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AROMA_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_AROMA_LADY,
.trainerName = _("ROSE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Rose5),
- .party = {.NoItemDefaultMoves = sParty_Rose5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Rose5),
},
[TRAINER_DUSTY_1] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("DUSTY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dusty1),
- .party = {.NoItemCustomMoves = sParty_Dusty1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty1),
},
[TRAINER_CHIP] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("CHIP"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Chip),
- .party = {.NoItemCustomMoves = sParty_Chip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Chip),
},
[TRAINER_FOSTER] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("FOSTER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Foster),
- .party = {.NoItemCustomMoves = sParty_Foster},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Foster),
},
[TRAINER_DUSTY_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("DUSTY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dusty2),
- .party = {.NoItemCustomMoves = sParty_Dusty2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty2),
},
[TRAINER_DUSTY_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("DUSTY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dusty3),
- .party = {.NoItemCustomMoves = sParty_Dusty3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty3),
},
[TRAINER_DUSTY_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("DUSTY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dusty4),
- .party = {.NoItemCustomMoves = sParty_Dusty4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty4),
},
[TRAINER_DUSTY_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("DUSTY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dusty5),
- .party = {.NoItemCustomMoves = sParty_Dusty5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Dusty5),
},
[TRAINER_GABBY_AND_TY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_INTERVIEWER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
.trainerPic = TRAINER_PIC_INTERVIEWER,
.trainerName = _("GABBY & TY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GabbyAndTy1),
- .party = {.NoItemDefaultMoves = sParty_GabbyAndTy1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy1),
},
[TRAINER_GABBY_AND_TY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_INTERVIEWER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
.trainerPic = TRAINER_PIC_INTERVIEWER,
.trainerName = _("GABBY & TY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GabbyAndTy2),
- .party = {.NoItemDefaultMoves = sParty_GabbyAndTy2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy2),
},
[TRAINER_GABBY_AND_TY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_INTERVIEWER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
.trainerPic = TRAINER_PIC_INTERVIEWER,
.trainerName = _("GABBY & TY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GabbyAndTy3),
- .party = {.NoItemDefaultMoves = sParty_GabbyAndTy3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy3),
},
[TRAINER_GABBY_AND_TY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_INTERVIEWER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
.trainerPic = TRAINER_PIC_INTERVIEWER,
.trainerName = _("GABBY & TY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GabbyAndTy4),
- .party = {.NoItemDefaultMoves = sParty_GabbyAndTy4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy4),
},
[TRAINER_GABBY_AND_TY_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_INTERVIEWER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
.trainerPic = TRAINER_PIC_INTERVIEWER,
.trainerName = _("GABBY & TY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GabbyAndTy5),
- .party = {.NoItemDefaultMoves = sParty_GabbyAndTy5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GabbyAndTy5),
},
[TRAINER_GABBY_AND_TY_6] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_INTERVIEWER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
.trainerPic = TRAINER_PIC_INTERVIEWER,
.trainerName = _("GABBY & TY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GabbyAndTy6),
- .party = {.NoItemCustomMoves = sParty_GabbyAndTy6},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_GabbyAndTy6),
},
[TRAINER_LOLA_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_F,
.trainerName = _("LOLA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lola1),
- .party = {.NoItemDefaultMoves = sParty_Lola1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola1),
},
[TRAINER_AUSTINA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_F,
.trainerName = _("AUSTINA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Austina),
- .party = {.NoItemDefaultMoves = sParty_Austina},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Austina),
},
[TRAINER_GWEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_F,
.trainerName = _("GWEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Gwen),
- .party = {.NoItemDefaultMoves = sParty_Gwen},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Gwen),
},
[TRAINER_LOLA_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_F,
.trainerName = _("LOLA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lola2),
- .party = {.NoItemDefaultMoves = sParty_Lola2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola2),
},
[TRAINER_LOLA_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_F,
.trainerName = _("LOLA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lola3),
- .party = {.NoItemDefaultMoves = sParty_Lola3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola3),
},
[TRAINER_LOLA_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_F,
.trainerName = _("LOLA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lola4),
- .party = {.NoItemDefaultMoves = sParty_Lola4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola4),
},
[TRAINER_LOLA_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_F,
.trainerName = _("LOLA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lola5),
- .party = {.NoItemDefaultMoves = sParty_Lola5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lola5),
},
[TRAINER_RICKY_1] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_TUBER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_M,
.trainerName = _("RICKY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ricky1),
- .party = {.NoItemCustomMoves = sParty_Ricky1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky1),
},
[TRAINER_SIMON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_M,
.trainerName = _("SIMON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Simon),
- .party = {.NoItemDefaultMoves = sParty_Simon},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Simon),
},
[TRAINER_CHARLIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_M,
.trainerName = _("CHARLIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Charlie),
- .party = {.NoItemDefaultMoves = sParty_Charlie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Charlie),
},
[TRAINER_RICKY_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_TUBER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_M,
.trainerName = _("RICKY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ricky2),
- .party = {.NoItemCustomMoves = sParty_Ricky2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky2),
},
[TRAINER_RICKY_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_TUBER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_M,
.trainerName = _("RICKY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ricky3),
- .party = {.NoItemCustomMoves = sParty_Ricky3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky3),
},
[TRAINER_RICKY_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_TUBER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_M,
.trainerName = _("RICKY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ricky4),
- .party = {.NoItemCustomMoves = sParty_Ricky4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky4),
},
[TRAINER_RICKY_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_TUBER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_M,
.trainerName = _("RICKY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ricky5),
- .party = {.NoItemCustomMoves = sParty_Ricky5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Ricky5),
},
[TRAINER_RANDALL] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("RANDALL"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Randall),
- .party = {.ItemCustomMoves = sParty_Randall},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Randall),
},
[TRAINER_PARKER] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("PARKER"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Parker),
- .party = {.ItemCustomMoves = sParty_Parker},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Parker),
},
[TRAINER_GEORGE] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("GEORGE"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_George),
- .party = {.ItemCustomMoves = sParty_George},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_George),
},
[TRAINER_BERKE] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("BERKE"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Berke),
- .party = {.ItemCustomMoves = sParty_Berke},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Berke),
},
[TRAINER_BRAXTON] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("BRAXTON"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Braxton),
- .party = {.NoItemCustomMoves = sParty_Braxton},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Braxton),
},
[TRAINER_VINCENT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("VINCENT"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Vincent),
- .party = {.NoItemDefaultMoves = sParty_Vincent},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Vincent),
},
[TRAINER_LEROY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("LEROY"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Leroy),
- .party = {.NoItemDefaultMoves = sParty_Leroy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Leroy),
},
[TRAINER_WILTON_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("WILTON"),
.items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wilton1),
- .party = {.NoItemDefaultMoves = sParty_Wilton1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton1),
},
[TRAINER_EDGAR] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("EDGAR"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Edgar),
- .party = {.NoItemDefaultMoves = sParty_Edgar},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Edgar),
},
[TRAINER_ALBERT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("ALBERT"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Albert),
- .party = {.NoItemDefaultMoves = sParty_Albert},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Albert),
},
[TRAINER_SAMUEL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("SAMUEL"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Samuel),
- .party = {.NoItemDefaultMoves = sParty_Samuel},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Samuel),
},
[TRAINER_VITO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("VITO"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Vito),
- .party = {.NoItemDefaultMoves = sParty_Vito},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Vito),
},
[TRAINER_OWEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("OWEN"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Owen),
- .party = {.NoItemDefaultMoves = sParty_Owen},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Owen),
},
[TRAINER_WILTON_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("WILTON"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wilton2),
- .party = {.NoItemDefaultMoves = sParty_Wilton2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton2),
},
[TRAINER_WILTON_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("WILTON"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wilton3),
- .party = {.NoItemDefaultMoves = sParty_Wilton3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton3),
},
[TRAINER_WILTON_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("WILTON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wilton4),
- .party = {.NoItemDefaultMoves = sParty_Wilton4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton4),
},
[TRAINER_WILTON_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("WILTON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wilton5),
- .party = {.NoItemDefaultMoves = sParty_Wilton5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Wilton5),
},
[TRAINER_WARREN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("WARREN"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Warren),
- .party = {.NoItemDefaultMoves = sParty_Warren},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Warren),
},
[TRAINER_MARY] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("MARY"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Mary),
- .party = {.ItemCustomMoves = sParty_Mary},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Mary),
},
[TRAINER_ALEXIA] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("ALEXIA"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Alexia),
- .party = {.ItemCustomMoves = sParty_Alexia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Alexia),
},
[TRAINER_JODY] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("JODY"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Jody),
- .party = {.ItemCustomMoves = sParty_Jody},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = ITEM_CUSTOM_MOVES(sParty_Jody),
},
[TRAINER_WENDY] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("WENDY"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Wendy),
- .party = {.NoItemCustomMoves = sParty_Wendy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Wendy),
},
[TRAINER_KEIRA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("KEIRA"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Keira),
- .party = {.NoItemDefaultMoves = sParty_Keira},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Keira),
},
[TRAINER_BROOKE_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("BROOKE"),
.items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brooke1),
- .party = {.NoItemDefaultMoves = sParty_Brooke1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke1),
},
[TRAINER_JENNIFER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("JENNIFER"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Jennifer),
- .party = {.NoItemDefaultMoves = sParty_Jennifer},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jennifer),
},
[TRAINER_HOPE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("HOPE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Hope),
- .party = {.NoItemDefaultMoves = sParty_Hope},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Hope),
},
[TRAINER_SHANNON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("SHANNON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Shannon),
- .party = {.NoItemDefaultMoves = sParty_Shannon},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shannon),
},
[TRAINER_MICHELLE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("MICHELLE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Michelle),
- .party = {.NoItemDefaultMoves = sParty_Michelle},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Michelle),
},
[TRAINER_CAROLINE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("CAROLINE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Caroline),
- .party = {.NoItemDefaultMoves = sParty_Caroline},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Caroline),
},
[TRAINER_JULIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("JULIE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Julie),
- .party = {.NoItemDefaultMoves = sParty_Julie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Julie),
},
[TRAINER_BROOKE_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("BROOKE"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brooke2),
- .party = {.NoItemDefaultMoves = sParty_Brooke2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke2),
},
[TRAINER_BROOKE_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("BROOKE"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brooke3),
- .party = {.NoItemDefaultMoves = sParty_Brooke3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke3),
},
[TRAINER_BROOKE_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("BROOKE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brooke4),
- .party = {.NoItemDefaultMoves = sParty_Brooke4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke4),
},
[TRAINER_BROOKE_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("BROOKE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brooke5),
- .party = {.NoItemDefaultMoves = sParty_Brooke5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brooke5),
},
[TRAINER_PATRICIA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("PATRICIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Patricia),
- .party = {.NoItemDefaultMoves = sParty_Patricia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Patricia),
},
[TRAINER_KINDRA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("KINDRA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kindra),
- .party = {.NoItemDefaultMoves = sParty_Kindra},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kindra),
},
[TRAINER_TAMMY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("TAMMY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tammy),
- .party = {.NoItemDefaultMoves = sParty_Tammy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tammy),
},
[TRAINER_VALERIE_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("VALERIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Valerie1),
- .party = {.NoItemDefaultMoves = sParty_Valerie1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie1),
},
[TRAINER_TASHA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("TASHA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tasha),
- .party = {.NoItemDefaultMoves = sParty_Tasha},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tasha),
},
[TRAINER_VALERIE_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("VALERIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Valerie2),
- .party = {.NoItemDefaultMoves = sParty_Valerie2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie2),
},
[TRAINER_VALERIE_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("VALERIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Valerie3),
- .party = {.NoItemDefaultMoves = sParty_Valerie3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie3),
},
[TRAINER_VALERIE_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("VALERIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Valerie4),
- .party = {.NoItemDefaultMoves = sParty_Valerie4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie4),
},
[TRAINER_VALERIE_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("VALERIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Valerie5),
- .party = {.NoItemDefaultMoves = sParty_Valerie5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Valerie5),
},
[TRAINER_CINDY_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("CINDY"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cindy1),
- .party = {.ItemDefaultMoves = sParty_Cindy1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Cindy1),
},
[TRAINER_DAPHNE] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("DAPHNE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Daphne),
- .party = {.ItemCustomMoves = sParty_Daphne},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_CUSTOM_MOVES(sParty_Daphne),
},
[TRAINER_GRUNT_SPACE_CENTER_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter2),
- .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter2),
},
[TRAINER_CINDY_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("CINDY"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cindy2),
- .party = {.ItemCustomMoves = sParty_Cindy2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_CUSTOM_MOVES(sParty_Cindy2),
},
[TRAINER_BRIANNA] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("BRIANNA"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Brianna),
- .party = {.ItemDefaultMoves = sParty_Brianna},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Brianna),
},
[TRAINER_NAOMI] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("NAOMI"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Naomi),
- .party = {.ItemDefaultMoves = sParty_Naomi},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Naomi),
},
[TRAINER_CINDY_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("CINDY"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cindy3),
- .party = {.ItemDefaultMoves = sParty_Cindy3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Cindy3),
},
[TRAINER_CINDY_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("CINDY"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cindy4),
- .party = {.ItemDefaultMoves = sParty_Cindy4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Cindy4),
},
[TRAINER_CINDY_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("CINDY"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cindy5),
- .party = {.ItemDefaultMoves = sParty_Cindy5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Cindy5),
},
[TRAINER_CINDY_6] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("CINDY"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cindy6),
- .party = {.ItemCustomMoves = sParty_Cindy6},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_CUSTOM_MOVES(sParty_Cindy6),
},
[TRAINER_MELISSA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("MELISSA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Melissa),
- .party = {.NoItemDefaultMoves = sParty_Melissa},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Melissa),
},
[TRAINER_SHEILA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("SHEILA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Sheila),
- .party = {.NoItemDefaultMoves = sParty_Sheila},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sheila),
},
[TRAINER_SHIRLEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("SHIRLEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Shirley),
- .party = {.NoItemDefaultMoves = sParty_Shirley},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shirley),
},
[TRAINER_JESSICA_1] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("JESSICA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jessica1),
- .party = {.NoItemCustomMoves = sParty_Jessica1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica1),
},
[TRAINER_CONNIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("CONNIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Connie),
- .party = {.NoItemDefaultMoves = sParty_Connie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Connie),
},
[TRAINER_BRIDGET] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("BRIDGET"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bridget),
- .party = {.NoItemDefaultMoves = sParty_Bridget},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Bridget),
},
[TRAINER_OLIVIA] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("OLIVIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Olivia),
- .party = {.NoItemCustomMoves = sParty_Olivia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Olivia),
},
[TRAINER_TIFFANY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("TIFFANY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tiffany),
- .party = {.NoItemDefaultMoves = sParty_Tiffany},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tiffany),
},
[TRAINER_JESSICA_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("JESSICA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jessica2),
- .party = {.NoItemCustomMoves = sParty_Jessica2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica2),
},
[TRAINER_JESSICA_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("JESSICA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jessica3),
- .party = {.NoItemCustomMoves = sParty_Jessica3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica3),
},
[TRAINER_JESSICA_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("JESSICA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jessica4),
- .party = {.NoItemCustomMoves = sParty_Jessica4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica4),
},
[TRAINER_JESSICA_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("JESSICA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jessica5),
- .party = {.NoItemCustomMoves = sParty_Jessica5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Jessica5),
},
[TRAINER_WINSTON_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_RICH_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_RICH_BOY,
.trainerName = _("WINSTON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Winston1),
- .party = {.ItemDefaultMoves = sParty_Winston1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Winston1),
},
[TRAINER_MOLLIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_F,
.trainerName = _("MOLLIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Mollie),
- .party = {.NoItemDefaultMoves = sParty_Mollie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Mollie),
},
[TRAINER_GARRET] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_RICH_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_RICH_BOY,
.trainerName = _("GARRET"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Garret),
- .party = {.ItemDefaultMoves = sParty_Garret},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Garret),
},
[TRAINER_WINSTON_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_RICH_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_RICH_BOY,
.trainerName = _("WINSTON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Winston2),
- .party = {.ItemDefaultMoves = sParty_Winston2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Winston2),
},
[TRAINER_WINSTON_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_RICH_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_RICH_BOY,
.trainerName = _("WINSTON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Winston3),
- .party = {.ItemDefaultMoves = sParty_Winston3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Winston3),
},
[TRAINER_WINSTON_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_RICH_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_RICH_BOY,
.trainerName = _("WINSTON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Winston4),
- .party = {.ItemDefaultMoves = sParty_Winston4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Winston4),
},
[TRAINER_WINSTON_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RICH_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_RICH_BOY,
.trainerName = _("WINSTON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Winston5),
- .party = {.ItemCustomMoves = sParty_Winston5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_CUSTOM_MOVES(sParty_Winston5),
},
[TRAINER_STEVE_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_POKEMANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_POKEMANIAC,
.trainerName = _("STEVE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Steve1),
- .party = {.NoItemDefaultMoves = sParty_Steve1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve1),
},
[TRAINER_THALIA_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("THALIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Thalia1),
- .party = {.NoItemDefaultMoves = sParty_Thalia1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia1),
},
[TRAINER_MARK] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_POKEMANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_POKEMANIAC,
.trainerName = _("MARK"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Mark),
- .party = {.NoItemDefaultMoves = sParty_Mark},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Mark),
},
[TRAINER_GRUNT_MT_CHIMNEY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMtChimney1),
- .party = {.NoItemDefaultMoves = sParty_GruntMtChimney1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtChimney1),
},
[TRAINER_STEVE_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_POKEMANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_POKEMANIAC,
.trainerName = _("STEVE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Steve2),
- .party = {.NoItemDefaultMoves = sParty_Steve2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve2),
},
[TRAINER_STEVE_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_POKEMANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_POKEMANIAC,
.trainerName = _("STEVE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Steve3),
- .party = {.NoItemDefaultMoves = sParty_Steve3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve3),
},
[TRAINER_STEVE_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_POKEMANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_POKEMANIAC,
.trainerName = _("STEVE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Steve4),
- .party = {.NoItemDefaultMoves = sParty_Steve4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve4),
},
[TRAINER_STEVE_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_POKEMANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_POKEMANIAC,
.trainerName = _("STEVE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Steve5),
- .party = {.NoItemDefaultMoves = sParty_Steve5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Steve5),
},
[TRAINER_LUIS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("LUIS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Luis),
- .party = {.NoItemDefaultMoves = sParty_Luis},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Luis),
},
[TRAINER_DOMINIK] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("DOMINIK"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dominik),
- .party = {.NoItemDefaultMoves = sParty_Dominik},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dominik),
},
[TRAINER_DOUGLAS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("DOUGLAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Douglas),
- .party = {.NoItemDefaultMoves = sParty_Douglas},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Douglas),
},
[TRAINER_DARRIN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("DARRIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Darrin),
- .party = {.NoItemDefaultMoves = sParty_Darrin},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Darrin),
},
[TRAINER_TONY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("TONY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tony1),
- .party = {.NoItemDefaultMoves = sParty_Tony1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony1),
},
[TRAINER_JEROME] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("JEROME"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jerome),
- .party = {.NoItemDefaultMoves = sParty_Jerome},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerome),
},
[TRAINER_MATTHEW] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("MATTHEW"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Matthew),
- .party = {.NoItemDefaultMoves = sParty_Matthew},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Matthew),
},
[TRAINER_DAVID] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("DAVID"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_David),
- .party = {.NoItemDefaultMoves = sParty_David},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_David),
},
[TRAINER_SPENCER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("SPENCER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Spencer),
- .party = {.NoItemDefaultMoves = sParty_Spencer},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Spencer),
},
[TRAINER_ROLAND] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("ROLAND"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Roland),
- .party = {.NoItemDefaultMoves = sParty_Roland},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Roland),
},
[TRAINER_NOLEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("NOLEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nolen),
- .party = {.NoItemDefaultMoves = sParty_Nolen},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nolen),
},
[TRAINER_STAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("STAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Stan),
- .party = {.NoItemDefaultMoves = sParty_Stan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Stan),
},
[TRAINER_BARRY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("BARRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Barry),
- .party = {.NoItemDefaultMoves = sParty_Barry},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Barry),
},
[TRAINER_DEAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("DEAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dean),
- .party = {.NoItemDefaultMoves = sParty_Dean},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dean),
},
[TRAINER_RODNEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("RODNEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Rodney),
- .party = {.NoItemDefaultMoves = sParty_Rodney},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Rodney),
},
[TRAINER_RICHARD] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("RICHARD"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Richard),
- .party = {.NoItemDefaultMoves = sParty_Richard},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Richard),
},
[TRAINER_HERMAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("HERMAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Herman),
- .party = {.NoItemDefaultMoves = sParty_Herman},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Herman),
},
[TRAINER_SANTIAGO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("SANTIAGO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Santiago),
- .party = {.NoItemDefaultMoves = sParty_Santiago},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Santiago),
},
[TRAINER_GILBERT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("GILBERT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Gilbert),
- .party = {.NoItemDefaultMoves = sParty_Gilbert},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Gilbert),
},
[TRAINER_FRANKLIN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("FRANKLIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Franklin),
- .party = {.NoItemDefaultMoves = sParty_Franklin},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Franklin),
},
[TRAINER_KEVIN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("KEVIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kevin),
- .party = {.NoItemDefaultMoves = sParty_Kevin},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kevin),
},
[TRAINER_JACK] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("JACK"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jack),
- .party = {.NoItemDefaultMoves = sParty_Jack},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jack),
},
[TRAINER_DUDLEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("DUDLEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dudley),
- .party = {.NoItemDefaultMoves = sParty_Dudley},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dudley),
},
[TRAINER_CHAD] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("CHAD"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Chad),
- .party = {.NoItemDefaultMoves = sParty_Chad},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Chad),
},
[TRAINER_TONY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("TONY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tony2),
- .party = {.NoItemDefaultMoves = sParty_Tony2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony2),
},
[TRAINER_TONY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("TONY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tony3),
- .party = {.NoItemDefaultMoves = sParty_Tony3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony3),
},
[TRAINER_TONY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("TONY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tony4),
- .party = {.NoItemDefaultMoves = sParty_Tony4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony4),
},
[TRAINER_TONY_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("TONY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tony5),
- .party = {.NoItemDefaultMoves = sParty_Tony5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tony5),
},
[TRAINER_TAKAO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("TAKAO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Takao),
- .party = {.NoItemDefaultMoves = sParty_Takao},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Takao),
},
[TRAINER_HITOSHI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("HITOSHI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Hitoshi),
- .party = {.NoItemDefaultMoves = sParty_Hitoshi},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Hitoshi),
},
[TRAINER_KIYO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("KIYO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kiyo),
- .party = {.NoItemDefaultMoves = sParty_Kiyo},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kiyo),
},
[TRAINER_KOICHI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("KOICHI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Koichi),
- .party = {.NoItemDefaultMoves = sParty_Koichi},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Koichi),
},
[TRAINER_NOB_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("NOB"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nob1),
- .party = {.NoItemDefaultMoves = sParty_Nob1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob1),
},
[TRAINER_NOB_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("NOB"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nob2),
- .party = {.NoItemDefaultMoves = sParty_Nob2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob2),
},
[TRAINER_NOB_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("NOB"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nob3),
- .party = {.NoItemDefaultMoves = sParty_Nob3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob3),
},
[TRAINER_NOB_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("NOB"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nob4),
- .party = {.NoItemDefaultMoves = sParty_Nob4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nob4),
},
[TRAINER_NOB_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("NOB"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nob5),
- .party = {.ItemDefaultMoves = sParty_Nob5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Nob5),
},
[TRAINER_YUJI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("YUJI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Yuji),
- .party = {.NoItemDefaultMoves = sParty_Yuji},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Yuji),
},
[TRAINER_DAISUKE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("DAISUKE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Daisuke),
- .party = {.NoItemDefaultMoves = sParty_Daisuke},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Daisuke),
},
[TRAINER_ATSUSHI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("ATSUSHI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Atsushi),
- .party = {.NoItemDefaultMoves = sParty_Atsushi},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Atsushi),
},
[TRAINER_KIRK] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("KIRK"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kirk),
- .party = {.NoItemCustomMoves = sParty_Kirk},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Kirk),
},
[TRAINER_GRUNT_AQUA_HIDEOUT_7] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntAquaHideout7),
- .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout7},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout7),
},
[TRAINER_GRUNT_AQUA_HIDEOUT_8] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntAquaHideout8),
- .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout8},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntAquaHideout8),
},
[TRAINER_SHAWN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("SHAWN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Shawn),
- .party = {.NoItemDefaultMoves = sParty_Shawn},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shawn),
},
[TRAINER_FERNANDO_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("FERNANDO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Fernando1),
- .party = {.NoItemDefaultMoves = sParty_Fernando1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando1),
},
[TRAINER_DALTON_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("DALTON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dalton1),
- .party = {.NoItemDefaultMoves = sParty_Dalton1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton1),
},
[TRAINER_DALTON_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("DALTON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dalton2),
- .party = {.NoItemDefaultMoves = sParty_Dalton2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton2),
},
[TRAINER_DALTON_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("DALTON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dalton3),
- .party = {.NoItemDefaultMoves = sParty_Dalton3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton3),
},
[TRAINER_DALTON_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("DALTON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dalton4),
- .party = {.NoItemDefaultMoves = sParty_Dalton4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton4),
},
[TRAINER_DALTON_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("DALTON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dalton5),
- .party = {.NoItemDefaultMoves = sParty_Dalton5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dalton5),
},
[TRAINER_COLE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("COLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cole),
- .party = {.NoItemDefaultMoves = sParty_Cole},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cole),
},
[TRAINER_JEFF] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("JEFF"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jeff),
- .party = {.NoItemDefaultMoves = sParty_Jeff},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeff),
},
[TRAINER_AXLE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("AXLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Axle),
- .party = {.NoItemDefaultMoves = sParty_Axle},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Axle),
},
[TRAINER_JACE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("JACE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jace),
- .party = {.NoItemDefaultMoves = sParty_Jace},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jace),
},
[TRAINER_KEEGAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("KEEGAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Keegan),
- .party = {.NoItemDefaultMoves = sParty_Keegan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Keegan),
},
[TRAINER_BERNIE_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("BERNIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bernie1),
- .party = {.NoItemDefaultMoves = sParty_Bernie1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie1),
},
[TRAINER_BERNIE_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("BERNIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bernie2),
- .party = {.NoItemDefaultMoves = sParty_Bernie2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie2),
},
[TRAINER_BERNIE_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("BERNIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bernie3),
- .party = {.NoItemDefaultMoves = sParty_Bernie3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie3),
},
[TRAINER_BERNIE_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("BERNIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bernie4),
- .party = {.NoItemDefaultMoves = sParty_Bernie4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie4),
},
[TRAINER_BERNIE_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("BERNIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bernie5),
- .party = {.NoItemDefaultMoves = sParty_Bernie5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Bernie5),
},
[TRAINER_DREW] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("DREW"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Drew),
- .party = {.NoItemCustomMoves = sParty_Drew},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Drew),
},
[TRAINER_BEAU] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("BEAU"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Beau),
- .party = {.NoItemCustomMoves = sParty_Beau},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Beau),
},
[TRAINER_LARRY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("LARRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Larry),
- .party = {.NoItemDefaultMoves = sParty_Larry},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Larry),
},
[TRAINER_SHANE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("SHANE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Shane),
- .party = {.NoItemDefaultMoves = sParty_Shane},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shane),
},
[TRAINER_JUSTIN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("JUSTIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Justin),
- .party = {.NoItemDefaultMoves = sParty_Justin},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Justin),
},
[TRAINER_ETHAN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("ETHAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ethan1),
- .party = {.NoItemDefaultMoves = sParty_Ethan1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan1),
},
[TRAINER_AUTUMN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("AUTUMN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Autumn),
- .party = {.NoItemDefaultMoves = sParty_Autumn},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Autumn),
},
[TRAINER_TRAVIS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("TRAVIS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Travis),
- .party = {.NoItemDefaultMoves = sParty_Travis},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Travis),
},
[TRAINER_ETHAN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("ETHAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ethan2),
- .party = {.NoItemDefaultMoves = sParty_Ethan2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan2),
},
[TRAINER_ETHAN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("ETHAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ethan3),
- .party = {.NoItemDefaultMoves = sParty_Ethan3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan3),
},
[TRAINER_ETHAN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("ETHAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ethan4),
- .party = {.NoItemDefaultMoves = sParty_Ethan4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan4),
},
[TRAINER_ETHAN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("ETHAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ethan5),
- .party = {.NoItemDefaultMoves = sParty_Ethan5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ethan5),
},
[TRAINER_BRENT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("BRENT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Brent),
- .party = {.NoItemDefaultMoves = sParty_Brent},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brent),
},
[TRAINER_DONALD] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("DONALD"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Donald),
- .party = {.NoItemDefaultMoves = sParty_Donald},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Donald),
},
[TRAINER_TAYLOR] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("TAYLOR"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Taylor),
- .party = {.NoItemDefaultMoves = sParty_Taylor},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Taylor),
},
[TRAINER_JEFFREY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("JEFFREY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jeffrey1),
- .party = {.NoItemDefaultMoves = sParty_Jeffrey1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey1),
},
[TRAINER_DEREK] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("DEREK"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Derek),
- .party = {.NoItemDefaultMoves = sParty_Derek},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Derek),
},
[TRAINER_JEFFREY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("JEFFREY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jeffrey2),
- .party = {.NoItemDefaultMoves = sParty_Jeffrey2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey2),
},
[TRAINER_JEFFREY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("JEFFREY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jeffrey3),
- .party = {.NoItemDefaultMoves = sParty_Jeffrey3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey3),
},
[TRAINER_JEFFREY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("JEFFREY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jeffrey4),
- .party = {.NoItemDefaultMoves = sParty_Jeffrey4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jeffrey4),
},
[TRAINER_JEFFREY_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("JEFFREY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jeffrey5),
- .party = {.ItemDefaultMoves = sParty_Jeffrey5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Jeffrey5),
},
[TRAINER_EDWARD] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("EDWARD"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Edward),
- .party = {.NoItemCustomMoves = sParty_Edward},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Edward),
},
[TRAINER_PRESTON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("PRESTON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Preston),
- .party = {.NoItemDefaultMoves = sParty_Preston},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Preston),
},
[TRAINER_VIRGIL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("VIRGIL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Virgil),
- .party = {.NoItemDefaultMoves = sParty_Virgil},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Virgil),
},
[TRAINER_BLAKE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("BLAKE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Blake),
- .party = {.NoItemDefaultMoves = sParty_Blake},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Blake),
},
[TRAINER_WILLIAM] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("WILLIAM"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_William),
- .party = {.NoItemDefaultMoves = sParty_William},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_William),
},
[TRAINER_JOSHUA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("JOSHUA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Joshua),
- .party = {.NoItemDefaultMoves = sParty_Joshua},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Joshua),
},
[TRAINER_CAMERON_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("CAMERON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cameron1),
- .party = {.NoItemDefaultMoves = sParty_Cameron1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron1),
},
[TRAINER_CAMERON_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("CAMERON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cameron2),
- .party = {.NoItemDefaultMoves = sParty_Cameron2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron2),
},
[TRAINER_CAMERON_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("CAMERON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cameron3),
- .party = {.NoItemDefaultMoves = sParty_Cameron3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron3),
},
[TRAINER_CAMERON_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("CAMERON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cameron4),
- .party = {.NoItemDefaultMoves = sParty_Cameron4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron4),
},
[TRAINER_CAMERON_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("CAMERON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cameron5),
- .party = {.NoItemDefaultMoves = sParty_Cameron5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cameron5),
},
[TRAINER_JACLYN] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("JACLYN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jaclyn),
- .party = {.NoItemCustomMoves = sParty_Jaclyn},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Jaclyn),
},
[TRAINER_HANNAH] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("HANNAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Hannah),
- .party = {.NoItemDefaultMoves = sParty_Hannah},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Hannah),
},
[TRAINER_SAMANTHA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("SAMANTHA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Samantha),
- .party = {.NoItemDefaultMoves = sParty_Samantha},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Samantha),
},
[TRAINER_MAURA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("MAURA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Maura),
- .party = {.NoItemDefaultMoves = sParty_Maura},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Maura),
},
[TRAINER_KAYLA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("KAYLA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kayla),
- .party = {.NoItemDefaultMoves = sParty_Kayla},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kayla),
},
[TRAINER_ALEXIS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("ALEXIS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Alexis),
- .party = {.NoItemDefaultMoves = sParty_Alexis},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Alexis),
},
[TRAINER_JACKI_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("JACKI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jacki1),
- .party = {.NoItemDefaultMoves = sParty_Jacki1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki1),
},
[TRAINER_JACKI_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("JACKI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jacki2),
- .party = {.NoItemDefaultMoves = sParty_Jacki2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki2),
},
[TRAINER_JACKI_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("JACKI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jacki3),
- .party = {.NoItemDefaultMoves = sParty_Jacki3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki3),
},
[TRAINER_JACKI_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("JACKI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jacki4),
- .party = {.NoItemDefaultMoves = sParty_Jacki4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki4),
},
[TRAINER_JACKI_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("JACKI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jacki5),
- .party = {.NoItemDefaultMoves = sParty_Jacki5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacki5),
},
[TRAINER_WALTER_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
.trainerName = _("WALTER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Walter1),
- .party = {.NoItemDefaultMoves = sParty_Walter1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Walter1),
},
[TRAINER_MICAH] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
.trainerName = _("MICAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Micah),
- .party = {.NoItemDefaultMoves = sParty_Micah},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Micah),
},
[TRAINER_THOMAS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
.trainerName = _("THOMAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Thomas),
- .party = {.NoItemDefaultMoves = sParty_Thomas},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Thomas),
},
[TRAINER_WALTER_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
.trainerName = _("WALTER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Walter2),
- .party = {.NoItemDefaultMoves = sParty_Walter2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Walter2),
},
[TRAINER_WALTER_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
.trainerName = _("WALTER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Walter3),
- .party = {.NoItemCustomMoves = sParty_Walter3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Walter3),
},
[TRAINER_WALTER_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
.trainerName = _("WALTER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Walter4),
- .party = {.NoItemCustomMoves = sParty_Walter4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Walter4),
},
[TRAINER_WALTER_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
.trainerName = _("WALTER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Walter5),
- .party = {.NoItemCustomMoves = sParty_Walter5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Walter5),
},
[TRAINER_SIDNEY] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_ELITE_FOUR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR,
.trainerPic = TRAINER_PIC_ELITE_FOUR_SIDNEY,
.trainerName = _("SIDNEY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Sidney),
- .party = {.ItemCustomMoves = sParty_Sidney},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SETUP_FIRST_TURN,
+ .party = ITEM_CUSTOM_MOVES(sParty_Sidney),
},
[TRAINER_PHOEBE] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_ELITE_FOUR,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR,
.trainerPic = TRAINER_PIC_ELITE_FOUR_PHOEBE,
.trainerName = _("PHOEBE"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Phoebe),
- .party = {.ItemCustomMoves = sParty_Phoebe},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Phoebe),
},
[TRAINER_GLACIA] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_ELITE_FOUR,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR,
.trainerPic = TRAINER_PIC_ELITE_FOUR_GLACIA,
.trainerName = _("GLACIA"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Glacia),
- .party = {.ItemCustomMoves = sParty_Glacia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Glacia),
},
[TRAINER_DRAKE] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_ELITE_FOUR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR,
.trainerPic = TRAINER_PIC_ELITE_FOUR_DRAKE,
.trainerName = _("DRAKE"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Drake),
- .party = {.ItemCustomMoves = sParty_Drake},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Drake),
},
[TRAINER_ROXANNE_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_ROXANNE,
.trainerName = _("ROXANNE"),
.items = {ITEM_POTION, ITEM_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Roxanne1),
- .party = {.ItemCustomMoves = sParty_Roxanne1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Roxanne1),
},
[TRAINER_BRAWLY_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_BRAWLY,
.trainerName = _("BRAWLY"),
.items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brawly1),
- .party = {.ItemCustomMoves = sParty_Brawly1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Brawly1),
},
[TRAINER_WATTSON_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_WATTSON,
.trainerName = _("WATTSON"),
.items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wattson1),
- .party = {.ItemCustomMoves = sParty_Wattson1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Wattson1),
},
[TRAINER_FLANNERY_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_FLANNERY,
.trainerName = _("FLANNERY"),
.items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Flannery1),
- .party = {.ItemCustomMoves = sParty_Flannery1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Flannery1),
},
[TRAINER_NORMAN_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_NORMAN,
.trainerName = _("NORMAN"),
.items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Norman1),
- .party = {.ItemCustomMoves = sParty_Norman1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Norman1),
},
[TRAINER_WINONA_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_WINONA,
.trainerName = _("WINONA"),
.items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY,
- .partySize = ARRAY_COUNT(sParty_Winona1),
- .party = {.ItemCustomMoves = sParty_Winona1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Winona1),
},
[TRAINER_TATE_AND_LIZA_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
.trainerName = _("TATE&LIZA"),
.items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_TateAndLiza1),
- .party = {.ItemCustomMoves = sParty_TateAndLiza1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza1),
},
[TRAINER_JUAN_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_JUAN,
.trainerName = _("JUAN"),
.items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Juan1),
- .party = {.ItemCustomMoves = sParty_Juan1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Juan1),
},
[TRAINER_JERRY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SCHOOL_KID_M,
.trainerName = _("JERRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jerry1),
- .party = {.NoItemDefaultMoves = sParty_Jerry1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry1),
},
[TRAINER_TED] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SCHOOL_KID_M,
.trainerName = _("TED"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ted),
- .party = {.NoItemDefaultMoves = sParty_Ted},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ted),
},
[TRAINER_PAUL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SCHOOL_KID_M,
.trainerName = _("PAUL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Paul),
- .party = {.NoItemDefaultMoves = sParty_Paul},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Paul),
},
[TRAINER_JERRY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SCHOOL_KID_M,
.trainerName = _("JERRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jerry2),
- .party = {.NoItemDefaultMoves = sParty_Jerry2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry2),
},
[TRAINER_JERRY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SCHOOL_KID_M,
.trainerName = _("JERRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jerry3),
- .party = {.NoItemDefaultMoves = sParty_Jerry3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry3),
},
[TRAINER_JERRY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SCHOOL_KID_M,
.trainerName = _("JERRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jerry4),
- .party = {.NoItemDefaultMoves = sParty_Jerry4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry4),
},
[TRAINER_JERRY_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SCHOOL_KID_M,
.trainerName = _("JERRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jerry5),
- .party = {.NoItemDefaultMoves = sParty_Jerry5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jerry5),
},
[TRAINER_KAREN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_SCHOOL_KID_F,
.trainerName = _("KAREN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Karen1),
- .party = {.NoItemDefaultMoves = sParty_Karen1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen1),
},
[TRAINER_GEORGIA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_SCHOOL_KID_F,
.trainerName = _("GEORGIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Georgia),
- .party = {.NoItemDefaultMoves = sParty_Georgia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Georgia),
},
[TRAINER_KAREN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_SCHOOL_KID_F,
.trainerName = _("KAREN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Karen2),
- .party = {.NoItemDefaultMoves = sParty_Karen2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen2),
},
[TRAINER_KAREN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_SCHOOL_KID_F,
.trainerName = _("KAREN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Karen3),
- .party = {.NoItemDefaultMoves = sParty_Karen3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen3),
},
[TRAINER_KAREN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_SCHOOL_KID_F,
.trainerName = _("KAREN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Karen4),
- .party = {.NoItemDefaultMoves = sParty_Karen4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen4),
},
[TRAINER_KAREN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SCHOOL_KID,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_SCHOOL_KID_F,
.trainerName = _("KAREN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Karen5),
- .party = {.NoItemDefaultMoves = sParty_Karen5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Karen5),
},
[TRAINER_KATE_AND_JOY] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_SR_AND_JR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_SR_AND_JR,
.trainerName = _("KATE & JOY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_KateAndJoy),
- .party = {.NoItemCustomMoves = sParty_KateAndJoy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_KateAndJoy),
},
[TRAINER_ANNA_AND_MEG_1] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_SR_AND_JR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_SR_AND_JR,
.trainerName = _("ANNA & MEG"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AnnaAndMeg1),
- .party = {.NoItemCustomMoves = sParty_AnnaAndMeg1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg1),
},
[TRAINER_ANNA_AND_MEG_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_SR_AND_JR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_SR_AND_JR,
.trainerName = _("ANNA & MEG"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AnnaAndMeg2),
- .party = {.NoItemCustomMoves = sParty_AnnaAndMeg2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg2),
},
[TRAINER_ANNA_AND_MEG_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_SR_AND_JR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_SR_AND_JR,
.trainerName = _("ANNA & MEG"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AnnaAndMeg3),
- .party = {.NoItemCustomMoves = sParty_AnnaAndMeg3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg3),
},
[TRAINER_ANNA_AND_MEG_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_SR_AND_JR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_SR_AND_JR,
.trainerName = _("ANNA & MEG"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AnnaAndMeg4),
- .party = {.NoItemCustomMoves = sParty_AnnaAndMeg4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg4),
},
[TRAINER_ANNA_AND_MEG_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_SR_AND_JR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_SR_AND_JR,
.trainerName = _("ANNA & MEG"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AnnaAndMeg5),
- .party = {.NoItemCustomMoves = sParty_AnnaAndMeg5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_AnnaAndMeg5),
},
[TRAINER_VICTOR] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_WINSTRATE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_M,
.trainerName = _("VICTOR"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Victor),
- .party = {.ItemDefaultMoves = sParty_Victor},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Victor),
},
[TRAINER_MIGUEL_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_M,
.trainerName = _("MIGUEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Miguel1),
- .party = {.ItemDefaultMoves = sParty_Miguel1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Miguel1),
},
[TRAINER_COLTON] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_M,
.trainerName = _("COLTON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Colton),
- .party = {.ItemCustomMoves = sParty_Colton},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_CUSTOM_MOVES(sParty_Colton),
},
[TRAINER_MIGUEL_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_M,
.trainerName = _("MIGUEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Miguel2),
- .party = {.ItemDefaultMoves = sParty_Miguel2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Miguel2),
},
[TRAINER_MIGUEL_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_M,
.trainerName = _("MIGUEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Miguel3),
- .party = {.ItemDefaultMoves = sParty_Miguel3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Miguel3),
},
[TRAINER_MIGUEL_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_M,
.trainerName = _("MIGUEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Miguel4),
- .party = {.ItemDefaultMoves = sParty_Miguel4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Miguel4),
},
[TRAINER_MIGUEL_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_M,
.trainerName = _("MIGUEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Miguel5),
- .party = {.ItemDefaultMoves = sParty_Miguel5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Miguel5),
},
[TRAINER_VICTORIA] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_WINSTRATE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_F,
.trainerName = _("VICTORIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT,
- .partySize = ARRAY_COUNT(sParty_Victoria),
- .party = {.ItemDefaultMoves = sParty_Victoria},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT,
+ .party = ITEM_DEFAULT_MOVES(sParty_Victoria),
},
[TRAINER_VANESSA] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_F,
.trainerName = _("VANESSA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Vanessa),
- .party = {.ItemDefaultMoves = sParty_Vanessa},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Vanessa),
},
[TRAINER_BETHANY] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_F,
.trainerName = _("BETHANY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bethany),
- .party = {.ItemDefaultMoves = sParty_Bethany},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Bethany),
},
[TRAINER_ISABEL_1] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_F,
.trainerName = _("ISABEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isabel1),
- .party = {.ItemDefaultMoves = sParty_Isabel1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Isabel1),
},
[TRAINER_ISABEL_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_F,
.trainerName = _("ISABEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isabel2),
- .party = {.ItemDefaultMoves = sParty_Isabel2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Isabel2),
},
[TRAINER_ISABEL_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_F,
.trainerName = _("ISABEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isabel3),
- .party = {.ItemDefaultMoves = sParty_Isabel3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Isabel3),
},
[TRAINER_ISABEL_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_F,
.trainerName = _("ISABEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isabel4),
- .party = {.ItemDefaultMoves = sParty_Isabel4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Isabel4),
},
[TRAINER_ISABEL_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_F,
.trainerName = _("ISABEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isabel5),
- .party = {.ItemDefaultMoves = sParty_Isabel5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Isabel5),
},
[TRAINER_TIMOTHY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_M,
.trainerName = _("TIMOTHY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Timothy1),
- .party = {.NoItemDefaultMoves = sParty_Timothy1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Timothy1),
},
[TRAINER_TIMOTHY_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_M,
.trainerName = _("TIMOTHY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Timothy2),
- .party = {.NoItemCustomMoves = sParty_Timothy2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy2),
},
[TRAINER_TIMOTHY_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_M,
.trainerName = _("TIMOTHY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Timothy3),
- .party = {.NoItemCustomMoves = sParty_Timothy3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy3),
},
[TRAINER_TIMOTHY_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_M,
.trainerName = _("TIMOTHY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Timothy4),
- .party = {.NoItemCustomMoves = sParty_Timothy4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy4),
},
[TRAINER_TIMOTHY_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_M,
.trainerName = _("TIMOTHY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Timothy5),
- .party = {.NoItemCustomMoves = sParty_Timothy5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Timothy5),
},
[TRAINER_VICKY] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_WINSTRATE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_F,
.trainerName = _("VICKY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Vicky),
- .party = {.NoItemCustomMoves = sParty_Vicky},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Vicky),
},
[TRAINER_SHELBY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_F,
.trainerName = _("SHELBY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Shelby1),
- .party = {.NoItemDefaultMoves = sParty_Shelby1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby1),
},
[TRAINER_SHELBY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_F,
.trainerName = _("SHELBY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Shelby2),
- .party = {.NoItemDefaultMoves = sParty_Shelby2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby2),
},
[TRAINER_SHELBY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_F,
.trainerName = _("SHELBY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Shelby3),
- .party = {.NoItemDefaultMoves = sParty_Shelby3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby3),
},
[TRAINER_SHELBY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_F,
.trainerName = _("SHELBY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Shelby4),
- .party = {.NoItemDefaultMoves = sParty_Shelby4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby4),
},
[TRAINER_SHELBY_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_F,
.trainerName = _("SHELBY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Shelby5),
- .party = {.NoItemDefaultMoves = sParty_Shelby5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shelby5),
},
[TRAINER_CALVIN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("CALVIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Calvin1),
- .party = {.NoItemDefaultMoves = sParty_Calvin1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin1),
},
[TRAINER_BILLY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("BILLY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Billy),
- .party = {.NoItemDefaultMoves = sParty_Billy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Billy),
},
[TRAINER_JOSH] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("JOSH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Josh),
- .party = {.NoItemCustomMoves = sParty_Josh},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Josh),
},
[TRAINER_TOMMY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("TOMMY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tommy),
- .party = {.NoItemDefaultMoves = sParty_Tommy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tommy),
},
[TRAINER_JOEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("JOEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Joey),
- .party = {.NoItemDefaultMoves = sParty_Joey},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Joey),
},
[TRAINER_BEN] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("BEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ben),
- .party = {.NoItemCustomMoves = sParty_Ben},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Ben),
},
[TRAINER_QUINCY] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("QUINCY"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Quincy),
- .party = {.NoItemCustomMoves = sParty_Quincy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Quincy),
},
[TRAINER_KATELYNN] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("KATELYNN"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Katelynn),
- .party = {.NoItemCustomMoves = sParty_Katelynn},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Katelynn),
},
[TRAINER_JAYLEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("JAYLEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jaylen),
- .party = {.NoItemDefaultMoves = sParty_Jaylen},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jaylen),
},
[TRAINER_DILLON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("DILLON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dillon),
- .party = {.NoItemDefaultMoves = sParty_Dillon},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dillon),
},
[TRAINER_CALVIN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("CALVIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Calvin2),
- .party = {.NoItemDefaultMoves = sParty_Calvin2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin2),
},
[TRAINER_CALVIN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("CALVIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Calvin3),
- .party = {.NoItemDefaultMoves = sParty_Calvin3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin3),
},
[TRAINER_CALVIN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("CALVIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Calvin4),
- .party = {.NoItemDefaultMoves = sParty_Calvin4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin4),
},
[TRAINER_CALVIN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("CALVIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Calvin5),
- .party = {.NoItemDefaultMoves = sParty_Calvin5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Calvin5),
},
[TRAINER_EDDIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("EDDIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Eddie),
- .party = {.NoItemDefaultMoves = sParty_Eddie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Eddie),
},
[TRAINER_ALLEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("ALLEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Allen),
- .party = {.NoItemDefaultMoves = sParty_Allen},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Allen),
},
[TRAINER_TIMMY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("TIMMY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Timmy),
- .party = {.NoItemDefaultMoves = sParty_Timmy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Timmy),
},
[TRAINER_WALLACE] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_CHAMPION,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CHAMPION_WALLACE,
.trainerName = _("WALLACE"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wallace),
- .party = {.ItemCustomMoves = sParty_Wallace},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Wallace),
},
[TRAINER_ANDREW] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("ANDREW"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Andrew),
- .party = {.NoItemDefaultMoves = sParty_Andrew},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Andrew),
},
[TRAINER_IVAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("IVAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ivan),
- .party = {.NoItemDefaultMoves = sParty_Ivan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ivan),
},
[TRAINER_CLAUDE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("CLAUDE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Claude),
- .party = {.NoItemDefaultMoves = sParty_Claude},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Claude),
},
[TRAINER_ELLIOT_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("ELLIOT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Elliot1),
- .party = {.NoItemDefaultMoves = sParty_Elliot1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot1),
},
[TRAINER_NED] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("NED"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ned),
- .party = {.NoItemDefaultMoves = sParty_Ned},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ned),
},
[TRAINER_DALE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("DALE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dale),
- .party = {.NoItemDefaultMoves = sParty_Dale},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dale),
},
[TRAINER_NOLAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("NOLAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nolan),
- .party = {.NoItemDefaultMoves = sParty_Nolan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nolan),
},
[TRAINER_BARNY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("BARNY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Barny),
- .party = {.NoItemDefaultMoves = sParty_Barny},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Barny),
},
[TRAINER_WADE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("WADE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Wade),
- .party = {.NoItemDefaultMoves = sParty_Wade},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Wade),
},
[TRAINER_CARTER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("CARTER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Carter),
- .party = {.NoItemDefaultMoves = sParty_Carter},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Carter),
},
[TRAINER_ELLIOT_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("ELLIOT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Elliot2),
- .party = {.NoItemDefaultMoves = sParty_Elliot2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot2),
},
[TRAINER_ELLIOT_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("ELLIOT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Elliot3),
- .party = {.NoItemDefaultMoves = sParty_Elliot3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot3),
},
[TRAINER_ELLIOT_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("ELLIOT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Elliot4),
- .party = {.NoItemDefaultMoves = sParty_Elliot4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot4),
},
[TRAINER_ELLIOT_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("ELLIOT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT,
- .partySize = ARRAY_COUNT(sParty_Elliot5),
- .party = {.NoItemDefaultMoves = sParty_Elliot5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Elliot5),
},
[TRAINER_RONALD] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("RONALD"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ronald),
- .party = {.NoItemDefaultMoves = sParty_Ronald},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ronald),
},
[TRAINER_JACOB] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
.trainerName = _("JACOB"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jacob),
- .party = {.NoItemDefaultMoves = sParty_Jacob},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jacob),
},
[TRAINER_ANTHONY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
.trainerName = _("ANTHONY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Anthony),
- .party = {.NoItemDefaultMoves = sParty_Anthony},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Anthony),
},
[TRAINER_BENJAMIN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
.trainerName = _("BENJAMIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Benjamin1),
- .party = {.NoItemDefaultMoves = sParty_Benjamin1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin1),
},
[TRAINER_BENJAMIN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
.trainerName = _("BENJAMIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Benjamin2),
- .party = {.NoItemDefaultMoves = sParty_Benjamin2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin2),
},
[TRAINER_BENJAMIN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
.trainerName = _("BENJAMIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Benjamin3),
- .party = {.NoItemDefaultMoves = sParty_Benjamin3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin3),
},
[TRAINER_BENJAMIN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
.trainerName = _("BENJAMIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Benjamin4),
- .party = {.NoItemDefaultMoves = sParty_Benjamin4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin4),
},
[TRAINER_BENJAMIN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
.trainerName = _("BENJAMIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Benjamin5),
- .party = {.NoItemDefaultMoves = sParty_Benjamin5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Benjamin5),
},
[TRAINER_ABIGAIL_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
.trainerName = _("ABIGAIL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Abigail1),
- .party = {.NoItemDefaultMoves = sParty_Abigail1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail1),
},
[TRAINER_JASMINE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
.trainerName = _("JASMINE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jasmine),
- .party = {.NoItemDefaultMoves = sParty_Jasmine},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jasmine),
},
[TRAINER_ABIGAIL_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
.trainerName = _("ABIGAIL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Abigail2),
- .party = {.NoItemDefaultMoves = sParty_Abigail2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail2),
},
[TRAINER_ABIGAIL_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
.trainerName = _("ABIGAIL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Abigail3),
- .party = {.NoItemDefaultMoves = sParty_Abigail3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail3),
},
[TRAINER_ABIGAIL_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
.trainerName = _("ABIGAIL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Abigail4),
- .party = {.NoItemDefaultMoves = sParty_Abigail4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail4),
},
[TRAINER_ABIGAIL_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
.trainerName = _("ABIGAIL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Abigail5),
- .party = {.NoItemDefaultMoves = sParty_Abigail5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Abigail5),
},
[TRAINER_DYLAN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
.trainerName = _("DYLAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dylan1),
- .party = {.NoItemDefaultMoves = sParty_Dylan1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan1),
},
[TRAINER_DYLAN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
.trainerName = _("DYLAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dylan2),
- .party = {.NoItemDefaultMoves = sParty_Dylan2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan2),
},
[TRAINER_DYLAN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
.trainerName = _("DYLAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dylan3),
- .party = {.NoItemDefaultMoves = sParty_Dylan3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan3),
},
[TRAINER_DYLAN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
.trainerName = _("DYLAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dylan4),
- .party = {.NoItemDefaultMoves = sParty_Dylan4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan4),
},
[TRAINER_DYLAN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
.trainerName = _("DYLAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dylan5),
- .party = {.NoItemDefaultMoves = sParty_Dylan5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dylan5),
},
[TRAINER_MARIA_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
.trainerName = _("MARIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Maria1),
- .party = {.NoItemDefaultMoves = sParty_Maria1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria1),
},
[TRAINER_MARIA_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
.trainerName = _("MARIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Maria2),
- .party = {.NoItemDefaultMoves = sParty_Maria2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria2),
},
[TRAINER_MARIA_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
.trainerName = _("MARIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Maria3),
- .party = {.NoItemDefaultMoves = sParty_Maria3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria3),
},
[TRAINER_MARIA_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
.trainerName = _("MARIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Maria4),
- .party = {.NoItemDefaultMoves = sParty_Maria4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria4),
},
[TRAINER_MARIA_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
.trainerName = _("MARIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Maria5),
- .party = {.NoItemDefaultMoves = sParty_Maria5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Maria5),
},
[TRAINER_CAMDEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("CAMDEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Camden),
- .party = {.NoItemDefaultMoves = sParty_Camden},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Camden),
},
[TRAINER_DEMETRIUS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("DEMETRIUS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Demetrius),
- .party = {.NoItemDefaultMoves = sParty_Demetrius},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Demetrius),
},
[TRAINER_ISAIAH_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("ISAIAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaiah1),
- .party = {.NoItemDefaultMoves = sParty_Isaiah1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah1),
},
[TRAINER_PABLO_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("PABLO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Pablo1),
- .party = {.NoItemDefaultMoves = sParty_Pablo1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo1),
},
[TRAINER_CHASE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("CHASE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Chase),
- .party = {.NoItemDefaultMoves = sParty_Chase},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Chase),
},
[TRAINER_ISAIAH_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("ISAIAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaiah2),
- .party = {.NoItemDefaultMoves = sParty_Isaiah2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah2),
},
[TRAINER_ISAIAH_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("ISAIAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaiah3),
- .party = {.NoItemDefaultMoves = sParty_Isaiah3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah3),
},
[TRAINER_ISAIAH_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("ISAIAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaiah4),
- .party = {.NoItemDefaultMoves = sParty_Isaiah4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah4),
},
[TRAINER_ISAIAH_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("ISAIAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaiah5),
- .party = {.NoItemDefaultMoves = sParty_Isaiah5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaiah5),
},
[TRAINER_ISOBEL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("ISOBEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isobel),
- .party = {.NoItemDefaultMoves = sParty_Isobel},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isobel),
},
[TRAINER_DONNY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("DONNY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Donny),
- .party = {.NoItemDefaultMoves = sParty_Donny},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Donny),
},
[TRAINER_TALIA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("TALIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Talia),
- .party = {.NoItemDefaultMoves = sParty_Talia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Talia),
},
[TRAINER_KATELYN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("KATELYN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Katelyn1),
- .party = {.NoItemDefaultMoves = sParty_Katelyn1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn1),
},
[TRAINER_ALLISON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("ALLISON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Allison),
- .party = {.NoItemDefaultMoves = sParty_Allison},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Allison),
},
[TRAINER_KATELYN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("KATELYN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Katelyn2),
- .party = {.NoItemDefaultMoves = sParty_Katelyn2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn2),
},
[TRAINER_KATELYN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("KATELYN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Katelyn3),
- .party = {.NoItemDefaultMoves = sParty_Katelyn3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn3),
},
[TRAINER_KATELYN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("KATELYN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Katelyn4),
- .party = {.NoItemDefaultMoves = sParty_Katelyn4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn4),
},
[TRAINER_KATELYN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("KATELYN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Katelyn5),
- .party = {.NoItemDefaultMoves = sParty_Katelyn5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Katelyn5),
},
[TRAINER_NICOLAS_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_DRAGON_TAMER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_DRAGON_TAMER,
.trainerName = _("NICOLAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nicolas1),
- .party = {.NoItemDefaultMoves = sParty_Nicolas1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas1),
},
[TRAINER_NICOLAS_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_DRAGON_TAMER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_DRAGON_TAMER,
.trainerName = _("NICOLAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nicolas2),
- .party = {.NoItemDefaultMoves = sParty_Nicolas2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas2),
},
[TRAINER_NICOLAS_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_DRAGON_TAMER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_DRAGON_TAMER,
.trainerName = _("NICOLAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nicolas3),
- .party = {.NoItemDefaultMoves = sParty_Nicolas3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas3),
},
[TRAINER_NICOLAS_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_DRAGON_TAMER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_DRAGON_TAMER,
.trainerName = _("NICOLAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nicolas4),
- .party = {.NoItemDefaultMoves = sParty_Nicolas4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicolas4),
},
[TRAINER_NICOLAS_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_DRAGON_TAMER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_DRAGON_TAMER,
.trainerName = _("NICOLAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nicolas5),
- .party = {.ItemDefaultMoves = sParty_Nicolas5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Nicolas5),
},
[TRAINER_AARON] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_DRAGON_TAMER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_DRAGON_TAMER,
.trainerName = _("AARON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Aaron),
- .party = {.NoItemCustomMoves = sParty_Aaron},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Aaron),
},
[TRAINER_PERRY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("PERRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Perry),
- .party = {.NoItemDefaultMoves = sParty_Perry},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Perry),
},
[TRAINER_HUGH] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("HUGH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Hugh),
- .party = {.NoItemDefaultMoves = sParty_Hugh},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Hugh),
},
[TRAINER_PHIL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("PHIL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Phil),
- .party = {.NoItemDefaultMoves = sParty_Phil},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Phil),
},
[TRAINER_JARED] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("JARED"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jared),
- .party = {.NoItemDefaultMoves = sParty_Jared},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jared),
},
[TRAINER_HUMBERTO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("HUMBERTO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Humberto),
- .party = {.NoItemDefaultMoves = sParty_Humberto},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Humberto),
},
[TRAINER_PRESLEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("PRESLEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Presley),
- .party = {.NoItemDefaultMoves = sParty_Presley},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Presley),
},
[TRAINER_EDWARDO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("EDWARDO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Edwardo),
- .party = {.NoItemDefaultMoves = sParty_Edwardo},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwardo),
},
[TRAINER_COLIN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("COLIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Colin),
- .party = {.NoItemDefaultMoves = sParty_Colin},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Colin),
},
[TRAINER_ROBERT_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("ROBERT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Robert1),
- .party = {.NoItemDefaultMoves = sParty_Robert1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert1),
},
[TRAINER_BENNY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("BENNY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Benny),
- .party = {.NoItemDefaultMoves = sParty_Benny},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Benny),
},
[TRAINER_CHESTER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("CHESTER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Chester),
- .party = {.NoItemDefaultMoves = sParty_Chester},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Chester),
},
[TRAINER_ROBERT_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("ROBERT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Robert2),
- .party = {.NoItemDefaultMoves = sParty_Robert2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert2),
},
[TRAINER_ROBERT_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("ROBERT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Robert3),
- .party = {.NoItemDefaultMoves = sParty_Robert3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert3),
},
[TRAINER_ROBERT_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("ROBERT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Robert4),
- .party = {.NoItemDefaultMoves = sParty_Robert4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert4),
},
[TRAINER_ROBERT_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("ROBERT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Robert5),
- .party = {.NoItemDefaultMoves = sParty_Robert5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Robert5),
},
[TRAINER_ALEX] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("ALEX"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Alex),
- .party = {.NoItemDefaultMoves = sParty_Alex},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Alex),
},
[TRAINER_BECK] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("BECK"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Beck),
- .party = {.NoItemDefaultMoves = sParty_Beck},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Beck),
},
[TRAINER_YASU] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
.trainerName = _("YASU"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT,
- .partySize = ARRAY_COUNT(sParty_Yasu),
- .party = {.NoItemDefaultMoves = sParty_Yasu},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Yasu),
},
[TRAINER_TAKASHI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
.trainerName = _("TAKASHI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT,
- .partySize = ARRAY_COUNT(sParty_Takashi),
- .party = {.NoItemDefaultMoves = sParty_Takashi},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Takashi),
},
[TRAINER_DIANNE] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
@@ -5847,13 +5014,11 @@ const struct Trainer gTrainers[] = {
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Dianne),
- .party = {.ItemCustomMoves = sParty_Dianne},
+ .party = ITEM_CUSTOM_MOVES(sParty_Dianne),
},
[TRAINER_JANI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_F,
@@ -5861,13 +5026,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Jani),
- .party = {.NoItemDefaultMoves = sParty_Jani},
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jani),
},
[TRAINER_LAO_1] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
@@ -5875,13 +5038,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Lao1),
- .party = {.NoItemCustomMoves = sParty_Lao1},
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao1),
},
[TRAINER_LUNG] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
@@ -5889,13 +5050,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Lung),
- .party = {.NoItemDefaultMoves = sParty_Lung},
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lung),
},
[TRAINER_LAO_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
@@ -5903,13 +5062,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Lao2),
- .party = {.NoItemCustomMoves = sParty_Lao2},
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao2),
},
[TRAINER_LAO_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
@@ -5917,13 +5074,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Lao3),
- .party = {.NoItemCustomMoves = sParty_Lao3},
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao3),
},
[TRAINER_LAO_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
@@ -5931,13 +5086,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Lao4),
- .party = {.NoItemCustomMoves = sParty_Lao4},
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Lao4),
},
[TRAINER_LAO_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
@@ -5945,5935 +5098,5087 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Lao5),
- .party = {.ItemCustomMoves = sParty_Lao5},
+ .party = ITEM_CUSTOM_MOVES(sParty_Lao5),
},
[TRAINER_JOCELYN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("JOCELYN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jocelyn),
- .party = {.NoItemDefaultMoves = sParty_Jocelyn},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jocelyn),
},
[TRAINER_LAURA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("LAURA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Laura),
- .party = {.NoItemDefaultMoves = sParty_Laura},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Laura),
},
[TRAINER_CYNDY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("CYNDY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cyndy1),
- .party = {.NoItemDefaultMoves = sParty_Cyndy1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy1),
},
[TRAINER_CORA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("CORA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cora),
- .party = {.NoItemDefaultMoves = sParty_Cora},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cora),
},
[TRAINER_PAULA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("PAULA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Paula),
- .party = {.NoItemDefaultMoves = sParty_Paula},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Paula),
},
[TRAINER_CYNDY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("CYNDY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cyndy2),
- .party = {.NoItemDefaultMoves = sParty_Cyndy2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy2),
},
[TRAINER_CYNDY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("CYNDY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cyndy3),
- .party = {.NoItemDefaultMoves = sParty_Cyndy3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy3),
},
[TRAINER_CYNDY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("CYNDY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cyndy4),
- .party = {.NoItemDefaultMoves = sParty_Cyndy4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy4),
},
[TRAINER_CYNDY_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("CYNDY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cyndy5),
- .party = {.NoItemDefaultMoves = sParty_Cyndy5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cyndy5),
},
[TRAINER_MADELINE_1] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PARASOL_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_PARASOL_LADY,
.trainerName = _("MADELINE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Madeline1),
- .party = {.NoItemCustomMoves = sParty_Madeline1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline1),
},
[TRAINER_CLARISSA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PARASOL_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_PARASOL_LADY,
.trainerName = _("CLARISSA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Clarissa),
- .party = {.NoItemDefaultMoves = sParty_Clarissa},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Clarissa),
},
[TRAINER_ANGELICA] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PARASOL_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_PARASOL_LADY,
.trainerName = _("ANGELICA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Angelica),
- .party = {.NoItemCustomMoves = sParty_Angelica},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Angelica),
},
[TRAINER_MADELINE_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PARASOL_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_PARASOL_LADY,
.trainerName = _("MADELINE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Madeline2),
- .party = {.NoItemCustomMoves = sParty_Madeline2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline2),
},
[TRAINER_MADELINE_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PARASOL_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_PARASOL_LADY,
.trainerName = _("MADELINE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Madeline3),
- .party = {.NoItemCustomMoves = sParty_Madeline3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline3),
},
[TRAINER_MADELINE_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PARASOL_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_PARASOL_LADY,
.trainerName = _("MADELINE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Madeline4),
- .party = {.NoItemCustomMoves = sParty_Madeline4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline4),
},
[TRAINER_MADELINE_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PARASOL_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_PARASOL_LADY,
.trainerName = _("MADELINE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Madeline5),
- .party = {.NoItemCustomMoves = sParty_Madeline5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Madeline5),
},
[TRAINER_BEVERLY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("BEVERLY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Beverly),
- .party = {.NoItemDefaultMoves = sParty_Beverly},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Beverly),
},
[TRAINER_IMANI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("IMANI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Imani),
- .party = {.NoItemDefaultMoves = sParty_Imani},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Imani),
},
[TRAINER_KYLA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("KYLA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kyla),
- .party = {.NoItemDefaultMoves = sParty_Kyla},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kyla),
},
[TRAINER_DENISE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("DENISE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Denise),
- .party = {.NoItemDefaultMoves = sParty_Denise},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Denise),
},
[TRAINER_BETH] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("BETH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Beth),
- .party = {.NoItemDefaultMoves = sParty_Beth},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Beth),
},
[TRAINER_TARA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("TARA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tara),
- .party = {.NoItemDefaultMoves = sParty_Tara},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tara),
},
[TRAINER_MISSY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("MISSY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Missy),
- .party = {.NoItemDefaultMoves = sParty_Missy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Missy),
},
[TRAINER_ALICE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("ALICE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Alice),
- .party = {.NoItemDefaultMoves = sParty_Alice},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Alice),
},
[TRAINER_JENNY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("JENNY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jenny1),
- .party = {.NoItemDefaultMoves = sParty_Jenny1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny1),
},
[TRAINER_GRACE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("GRACE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grace),
- .party = {.NoItemDefaultMoves = sParty_Grace},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Grace),
},
[TRAINER_TANYA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("TANYA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tanya),
- .party = {.NoItemDefaultMoves = sParty_Tanya},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tanya),
},
[TRAINER_SHARON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("SHARON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Sharon),
- .party = {.NoItemDefaultMoves = sParty_Sharon},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sharon),
},
[TRAINER_NIKKI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("NIKKI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nikki),
- .party = {.NoItemDefaultMoves = sParty_Nikki},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nikki),
},
[TRAINER_BRENDA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("BRENDA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Brenda),
- .party = {.NoItemDefaultMoves = sParty_Brenda},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brenda),
},
[TRAINER_KATIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("KATIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Katie),
- .party = {.NoItemDefaultMoves = sParty_Katie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Katie),
},
[TRAINER_SUSIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("SUSIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Susie),
- .party = {.NoItemDefaultMoves = sParty_Susie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Susie),
},
[TRAINER_KARA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("KARA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kara),
- .party = {.NoItemDefaultMoves = sParty_Kara},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kara),
},
[TRAINER_DANA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("DANA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dana),
- .party = {.NoItemDefaultMoves = sParty_Dana},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dana),
},
[TRAINER_SIENNA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("SIENNA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Sienna),
- .party = {.NoItemDefaultMoves = sParty_Sienna},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sienna),
},
[TRAINER_DEBRA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("DEBRA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Debra),
- .party = {.NoItemDefaultMoves = sParty_Debra},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Debra),
},
[TRAINER_LINDA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("LINDA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Linda),
- .party = {.NoItemDefaultMoves = sParty_Linda},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Linda),
},
[TRAINER_KAYLEE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("KAYLEE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kaylee),
- .party = {.NoItemDefaultMoves = sParty_Kaylee},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kaylee),
},
[TRAINER_LAUREL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("LAUREL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Laurel),
- .party = {.NoItemDefaultMoves = sParty_Laurel},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Laurel),
},
[TRAINER_CARLEE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("CARLEE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Carlee),
- .party = {.NoItemDefaultMoves = sParty_Carlee},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Carlee),
},
[TRAINER_JENNY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("JENNY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jenny2),
- .party = {.NoItemDefaultMoves = sParty_Jenny2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny2),
},
[TRAINER_JENNY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("JENNY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jenny3),
- .party = {.NoItemDefaultMoves = sParty_Jenny3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny3),
},
[TRAINER_JENNY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("JENNY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jenny4),
- .party = {.NoItemDefaultMoves = sParty_Jenny4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny4),
},
[TRAINER_JENNY_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("JENNY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jenny5),
- .party = {.NoItemDefaultMoves = sParty_Jenny5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenny5),
},
[TRAINER_HEIDI] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("HEIDI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Heidi),
- .party = {.NoItemCustomMoves = sParty_Heidi},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Heidi),
},
[TRAINER_BECKY] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("BECKY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Becky),
- .party = {.NoItemCustomMoves = sParty_Becky},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Becky),
},
[TRAINER_CAROL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("CAROL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Carol),
- .party = {.NoItemDefaultMoves = sParty_Carol},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Carol),
},
[TRAINER_NANCY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("NANCY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nancy),
- .party = {.NoItemDefaultMoves = sParty_Nancy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nancy),
},
[TRAINER_MARTHA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("MARTHA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Martha),
- .party = {.NoItemDefaultMoves = sParty_Martha},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Martha),
},
[TRAINER_DIANA_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("DIANA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Diana1),
- .party = {.NoItemDefaultMoves = sParty_Diana1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana1),
},
[TRAINER_CEDRIC] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("CEDRIC"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cedric),
- .party = {.NoItemCustomMoves = sParty_Cedric},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Cedric),
},
[TRAINER_IRENE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("IRENE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Irene),
- .party = {.NoItemDefaultMoves = sParty_Irene},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Irene),
},
[TRAINER_DIANA_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("DIANA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Diana2),
- .party = {.NoItemDefaultMoves = sParty_Diana2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana2),
},
[TRAINER_DIANA_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("DIANA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Diana3),
- .party = {.NoItemDefaultMoves = sParty_Diana3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana3),
},
[TRAINER_DIANA_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("DIANA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Diana4),
- .party = {.NoItemDefaultMoves = sParty_Diana4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana4),
},
[TRAINER_DIANA_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("DIANA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Diana5),
- .party = {.NoItemDefaultMoves = sParty_Diana5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Diana5),
},
[TRAINER_AMY_AND_LIV_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("AMY & LIV"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AmyAndLiv1),
- .party = {.NoItemDefaultMoves = sParty_AmyAndLiv1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv1),
},
[TRAINER_AMY_AND_LIV_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("AMY & LIV"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AmyAndLiv2),
- .party = {.NoItemDefaultMoves = sParty_AmyAndLiv2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv2),
},
[TRAINER_GINA_AND_MIA_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("GINA & MIA"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GinaAndMia1),
- .party = {.NoItemDefaultMoves = sParty_GinaAndMia1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GinaAndMia1),
},
[TRAINER_MIU_AND_YUKI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("MIU & YUKI"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_MiuAndYuki),
- .party = {.NoItemDefaultMoves = sParty_MiuAndYuki},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MiuAndYuki),
},
[TRAINER_AMY_AND_LIV_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("AMY & LIV"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AmyAndLiv3),
- .party = {.NoItemDefaultMoves = sParty_AmyAndLiv3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv3),
},
[TRAINER_GINA_AND_MIA_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("GINA & MIA"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GinaAndMia2),
- .party = {.NoItemCustomMoves = sParty_GinaAndMia2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_GinaAndMia2),
},
[TRAINER_AMY_AND_LIV_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("AMY & LIV"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AmyAndLiv4),
- .party = {.NoItemDefaultMoves = sParty_AmyAndLiv4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_AmyAndLiv4),
},
[TRAINER_AMY_AND_LIV_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("AMY & LIV"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AmyAndLiv5),
- .party = {.NoItemCustomMoves = sParty_AmyAndLiv5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_AmyAndLiv5),
},
[TRAINER_AMY_AND_LIV_6] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("AMY & LIV"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_AmyAndLiv6),
- .party = {.NoItemCustomMoves = sParty_AmyAndLiv6},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_AmyAndLiv6),
},
[TRAINER_HUEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("HUEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Huey),
- .party = {.NoItemDefaultMoves = sParty_Huey},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Huey),
},
[TRAINER_EDMOND] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("EDMOND"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Edmond),
- .party = {.NoItemDefaultMoves = sParty_Edmond},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Edmond),
},
[TRAINER_ERNEST_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("ERNEST"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ernest1),
- .party = {.NoItemDefaultMoves = sParty_Ernest1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest1),
},
[TRAINER_DWAYNE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("DWAYNE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dwayne),
- .party = {.NoItemDefaultMoves = sParty_Dwayne},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dwayne),
},
[TRAINER_PHILLIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("PHILLIP"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Phillip),
- .party = {.NoItemDefaultMoves = sParty_Phillip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Phillip),
},
[TRAINER_LEONARD] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("LEONARD"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Leonard),
- .party = {.NoItemDefaultMoves = sParty_Leonard},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Leonard),
},
[TRAINER_DUNCAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("DUNCAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Duncan),
- .party = {.NoItemDefaultMoves = sParty_Duncan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Duncan),
},
[TRAINER_ERNEST_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("ERNEST"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ernest2),
- .party = {.NoItemDefaultMoves = sParty_Ernest2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest2),
},
[TRAINER_ERNEST_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("ERNEST"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ernest3),
- .party = {.NoItemDefaultMoves = sParty_Ernest3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest3),
},
[TRAINER_ERNEST_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("ERNEST"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ernest4),
- .party = {.NoItemDefaultMoves = sParty_Ernest4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest4),
},
[TRAINER_ERNEST_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("ERNEST"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ernest5),
- .party = {.NoItemDefaultMoves = sParty_Ernest5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ernest5),
},
[TRAINER_ELI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("ELI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Eli),
- .party = {.NoItemDefaultMoves = sParty_Eli},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Eli),
},
[TRAINER_ANNIKA] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_F,
.trainerName = _("ANNIKA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Annika),
- .party = {.ItemCustomMoves = sParty_Annika},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_CUSTOM_MOVES(sParty_Annika),
},
[TRAINER_JAZMYN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER_2,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("JAZMYN"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Jazmyn),
- .party = {.NoItemDefaultMoves = sParty_Jazmyn},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jazmyn),
},
[TRAINER_JONAS] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
.trainerName = _("JONAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Jonas),
- .party = {.NoItemCustomMoves = sParty_Jonas},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Jonas),
},
[TRAINER_KAYLEY] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PARASOL_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_PARASOL_LADY,
.trainerName = _("KAYLEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kayley),
- .party = {.NoItemCustomMoves = sParty_Kayley},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Kayley),
},
[TRAINER_AURON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_M,
.trainerName = _("AURON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Auron),
- .party = {.NoItemDefaultMoves = sParty_Auron},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Auron),
},
[TRAINER_KELVIN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("KELVIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kelvin),
- .party = {.NoItemDefaultMoves = sParty_Kelvin},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kelvin),
},
[TRAINER_MARLEY] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("MARLEY"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Marley),
- .party = {.ItemCustomMoves = sParty_Marley},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Marley),
},
[TRAINER_REYNA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("REYNA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Reyna),
- .party = {.NoItemDefaultMoves = sParty_Reyna},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Reyna),
},
[TRAINER_HUDSON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("HUDSON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Hudson),
- .party = {.NoItemDefaultMoves = sParty_Hudson},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Hudson),
},
[TRAINER_CONOR] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_M,
.trainerName = _("CONOR"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Conor),
- .party = {.NoItemDefaultMoves = sParty_Conor},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Conor),
},
[TRAINER_EDWIN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COLLECTOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_COLLECTOR,
.trainerName = _("EDWIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Edwin1),
- .party = {.NoItemDefaultMoves = sParty_Edwin1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin1),
},
[TRAINER_HECTOR] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COLLECTOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_COLLECTOR,
.trainerName = _("HECTOR"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Hector),
- .party = {.NoItemDefaultMoves = sParty_Hector},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Hector),
},
[TRAINER_TABITHA_MOSSDEEP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_ADMIN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_ADMIN,
.trainerName = _("TABITHA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_TabithaMossdeep),
- .party = {.NoItemDefaultMoves = sParty_TabithaMossdeep},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_TabithaMossdeep),
},
[TRAINER_EDWIN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COLLECTOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_COLLECTOR,
.trainerName = _("EDWIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Edwin2),
- .party = {.NoItemDefaultMoves = sParty_Edwin2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin2),
},
[TRAINER_EDWIN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COLLECTOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_COLLECTOR,
.trainerName = _("EDWIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Edwin3),
- .party = {.NoItemDefaultMoves = sParty_Edwin3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin3),
},
[TRAINER_EDWIN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COLLECTOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_COLLECTOR,
.trainerName = _("EDWIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Edwin4),
- .party = {.NoItemDefaultMoves = sParty_Edwin4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin4),
},
[TRAINER_EDWIN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COLLECTOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_COLLECTOR,
.trainerName = _("EDWIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Edwin5),
- .party = {.NoItemDefaultMoves = sParty_Edwin5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Edwin5),
},
[TRAINER_WALLY_VR_1] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_WALLY,
.trainerName = _("WALLY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_WallyVR1),
- .party = {.NoItemCustomMoves = sParty_WallyVR1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR1),
},
[TRAINER_BRENDAN_ROUTE_103_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanRoute103Mudkip),
- .party = {.NoItemDefaultMoves = sParty_BrendanRoute103Mudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute103Mudkip),
},
[TRAINER_BRENDAN_ROUTE_110_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanRoute110Mudkip),
- .party = {.NoItemDefaultMoves = sParty_BrendanRoute110Mudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute110Mudkip),
},
[TRAINER_BRENDAN_ROUTE_119_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanRoute119Mudkip),
- .party = {.NoItemDefaultMoves = sParty_BrendanRoute119Mudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute119Mudkip),
},
[TRAINER_BRENDAN_ROUTE_103_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_BrendanRoute103Treecko),
- .party = {.NoItemDefaultMoves = sParty_BrendanRoute103Treecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute103Treecko),
},
[TRAINER_BRENDAN_ROUTE_110_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanRoute110Treecko),
- .party = {.NoItemDefaultMoves = sParty_BrendanRoute110Treecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute110Treecko),
},
[TRAINER_BRENDAN_ROUTE_119_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanRoute119Treecko),
- .party = {.NoItemDefaultMoves = sParty_BrendanRoute119Treecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute119Treecko),
},
[TRAINER_BRENDAN_ROUTE_103_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanRoute103Torchic),
- .party = {.NoItemDefaultMoves = sParty_BrendanRoute103Torchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute103Torchic),
},
[TRAINER_BRENDAN_ROUTE_110_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanRoute110Torchic),
- .party = {.NoItemDefaultMoves = sParty_BrendanRoute110Torchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute110Torchic),
},
[TRAINER_BRENDAN_ROUTE_119_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanRoute119Torchic),
- .party = {.NoItemDefaultMoves = sParty_BrendanRoute119Torchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRoute119Torchic),
},
[TRAINER_MAY_ROUTE_103_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRoute103Mudkip),
- .party = {.NoItemDefaultMoves = sParty_MayRoute103Mudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute103Mudkip),
},
[TRAINER_MAY_ROUTE_110_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRoute110Mudkip),
- .party = {.NoItemDefaultMoves = sParty_MayRoute110Mudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute110Mudkip),
},
[TRAINER_MAY_ROUTE_119_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRoute119Mudkip),
- .party = {.NoItemDefaultMoves = sParty_MayRoute119Mudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute119Mudkip),
},
[TRAINER_MAY_ROUTE_103_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRoute103Treecko),
- .party = {.NoItemDefaultMoves = sParty_MayRoute103Treecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute103Treecko),
},
[TRAINER_MAY_ROUTE_110_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRoute110Treecko),
- .party = {.NoItemDefaultMoves = sParty_MayRoute110Treecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute110Treecko),
},
[TRAINER_MAY_ROUTE_119_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRoute119Treecko),
- .party = {.NoItemDefaultMoves = sParty_MayRoute119Treecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute119Treecko),
},
[TRAINER_MAY_ROUTE_103_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRoute103Torchic),
- .party = {.NoItemDefaultMoves = sParty_MayRoute103Torchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute103Torchic),
},
[TRAINER_MAY_ROUTE_110_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRoute110Torchic),
- .party = {.NoItemDefaultMoves = sParty_MayRoute110Torchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute110Torchic),
},
[TRAINER_MAY_ROUTE_119_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRoute119Torchic),
- .party = {.NoItemDefaultMoves = sParty_MayRoute119Torchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRoute119Torchic),
},
[TRAINER_ISAAC_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
.trainerName = _("ISAAC"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaac1),
- .party = {.NoItemDefaultMoves = sParty_Isaac1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac1),
},
[TRAINER_DAVIS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("DAVIS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Davis),
- .party = {.NoItemDefaultMoves = sParty_Davis},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Davis),
},
[TRAINER_MITCHELL] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("MITCHELL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Mitchell),
- .party = {.NoItemCustomMoves = sParty_Mitchell},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Mitchell),
},
[TRAINER_ISAAC_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
.trainerName = _("ISAAC"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaac2),
- .party = {.NoItemDefaultMoves = sParty_Isaac2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac2),
},
[TRAINER_ISAAC_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
.trainerName = _("ISAAC"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaac3),
- .party = {.NoItemDefaultMoves = sParty_Isaac3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac3),
},
[TRAINER_ISAAC_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
.trainerName = _("ISAAC"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaac4),
- .party = {.NoItemDefaultMoves = sParty_Isaac4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac4),
},
[TRAINER_ISAAC_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
.trainerName = _("ISAAC"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isaac5),
- .party = {.NoItemDefaultMoves = sParty_Isaac5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isaac5),
},
[TRAINER_LYDIA_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("LYDIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lydia1),
- .party = {.NoItemDefaultMoves = sParty_Lydia1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia1),
},
[TRAINER_HALLE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("HALLE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Halle),
- .party = {.NoItemDefaultMoves = sParty_Halle},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Halle),
},
[TRAINER_GARRISON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("GARRISON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Garrison),
- .party = {.NoItemDefaultMoves = sParty_Garrison},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Garrison),
},
[TRAINER_LYDIA_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("LYDIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lydia2),
- .party = {.NoItemDefaultMoves = sParty_Lydia2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia2),
},
[TRAINER_LYDIA_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("LYDIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lydia3),
- .party = {.NoItemDefaultMoves = sParty_Lydia3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia3),
},
[TRAINER_LYDIA_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("LYDIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lydia4),
- .party = {.NoItemDefaultMoves = sParty_Lydia4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia4),
},
[TRAINER_LYDIA_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("LYDIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lydia5),
- .party = {.NoItemDefaultMoves = sParty_Lydia5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lydia5),
},
[TRAINER_JACKSON_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
.trainerName = _("JACKSON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Jackson1),
- .party = {.NoItemDefaultMoves = sParty_Jackson1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson1),
},
[TRAINER_LORENZO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
.trainerName = _("LORENZO"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Lorenzo),
- .party = {.NoItemDefaultMoves = sParty_Lorenzo},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lorenzo),
},
[TRAINER_SEBASTIAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
.trainerName = _("SEBASTIAN"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Sebastian),
- .party = {.NoItemDefaultMoves = sParty_Sebastian},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sebastian),
},
[TRAINER_JACKSON_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
.trainerName = _("JACKSON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Jackson2),
- .party = {.NoItemDefaultMoves = sParty_Jackson2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson2),
},
[TRAINER_JACKSON_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
.trainerName = _("JACKSON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Jackson3),
- .party = {.NoItemDefaultMoves = sParty_Jackson3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson3),
},
[TRAINER_JACKSON_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
.trainerName = _("JACKSON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Jackson4),
- .party = {.NoItemDefaultMoves = sParty_Jackson4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson4),
},
[TRAINER_JACKSON_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
.trainerName = _("JACKSON"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Jackson5),
- .party = {.NoItemDefaultMoves = sParty_Jackson5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jackson5),
},
[TRAINER_CATHERINE_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
.trainerName = _("CATHERINE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Catherine1),
- .party = {.NoItemDefaultMoves = sParty_Catherine1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine1),
},
[TRAINER_JENNA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
.trainerName = _("JENNA"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Jenna),
- .party = {.NoItemDefaultMoves = sParty_Jenna},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jenna),
},
[TRAINER_SOPHIA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
.trainerName = _("SOPHIA"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Sophia),
- .party = {.NoItemDefaultMoves = sParty_Sophia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sophia),
},
[TRAINER_CATHERINE_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
.trainerName = _("CATHERINE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Catherine2),
- .party = {.NoItemDefaultMoves = sParty_Catherine2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine2),
},
[TRAINER_CATHERINE_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
.trainerName = _("CATHERINE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Catherine3),
- .party = {.NoItemDefaultMoves = sParty_Catherine3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine3),
},
[TRAINER_CATHERINE_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
.trainerName = _("CATHERINE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Catherine4),
- .party = {.NoItemDefaultMoves = sParty_Catherine4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine4),
},
[TRAINER_CATHERINE_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_RANGER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
.trainerName = _("CATHERINE"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Catherine5),
- .party = {.NoItemDefaultMoves = sParty_Catherine5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Catherine5),
},
[TRAINER_JULIO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
.trainerName = _("JULIO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Julio),
- .party = {.NoItemDefaultMoves = sParty_Julio},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Julio),
},
[TRAINER_GRUNT_SEAFLOOR_CAVERN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern5),
- .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSeafloorCavern5),
},
[TRAINER_GRUNT_UNUSED] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntUnused),
- .party = {.NoItemDefaultMoves = sParty_GruntUnused},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntUnused),
},
[TRAINER_GRUNT_MT_PYRE_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMtPyre4),
- .party = {.NoItemDefaultMoves = sParty_GruntMtPyre4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtPyre4),
},
[TRAINER_GRUNT_JAGGED_PASS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntJaggedPass),
- .party = {.NoItemDefaultMoves = sParty_GruntJaggedPass},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntJaggedPass),
},
[TRAINER_MARC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("MARC"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Marc),
- .party = {.NoItemDefaultMoves = sParty_Marc},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Marc),
},
[TRAINER_BRENDEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("BRENDEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Brenden),
- .party = {.NoItemDefaultMoves = sParty_Brenden},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brenden),
},
[TRAINER_LILITH] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("LILITH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lilith),
- .party = {.NoItemDefaultMoves = sParty_Lilith},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lilith),
},
[TRAINER_CRISTIAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("CRISTIAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cristian),
- .party = {.NoItemDefaultMoves = sParty_Cristian},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristian),
},
[TRAINER_SYLVIA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("SYLVIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Sylvia),
- .party = {.NoItemDefaultMoves = sParty_Sylvia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sylvia),
},
[TRAINER_LEONARDO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("LEONARDO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Leonardo),
- .party = {.NoItemDefaultMoves = sParty_Leonardo},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Leonardo),
},
[TRAINER_ATHENA] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("ATHENA"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Athena),
- .party = {.ItemCustomMoves = sParty_Athena},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Athena),
},
[TRAINER_HARRISON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("HARRISON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Harrison),
- .party = {.NoItemDefaultMoves = sParty_Harrison},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Harrison),
},
[TRAINER_GRUNT_MT_CHIMNEY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMtChimney2),
- .party = {.NoItemDefaultMoves = sParty_GruntMtChimney2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMtChimney2),
},
[TRAINER_CLARENCE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("CLARENCE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Clarence),
- .party = {.NoItemDefaultMoves = sParty_Clarence},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Clarence),
},
[TRAINER_TERRY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("TERRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Terry),
- .party = {.NoItemDefaultMoves = sParty_Terry},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Terry),
},
[TRAINER_NATE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
.trainerName = _("NATE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nate),
- .party = {.NoItemDefaultMoves = sParty_Nate},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nate),
},
[TRAINER_KATHLEEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HEX_MANIAC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_HEX_MANIAC,
.trainerName = _("KATHLEEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kathleen),
- .party = {.NoItemDefaultMoves = sParty_Kathleen},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kathleen),
},
[TRAINER_CLIFFORD] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
.trainerName = _("CLIFFORD"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Clifford),
- .party = {.NoItemDefaultMoves = sParty_Clifford},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Clifford),
},
[TRAINER_NICHOLAS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
.trainerName = _("NICHOLAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Nicholas),
- .party = {.NoItemDefaultMoves = sParty_Nicholas},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Nicholas),
},
[TRAINER_GRUNT_SPACE_CENTER_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter3),
- .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter3),
},
[TRAINER_GRUNT_SPACE_CENTER_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter4),
- .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter4),
},
[TRAINER_GRUNT_SPACE_CENTER_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter5),
- .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter5),
},
[TRAINER_GRUNT_SPACE_CENTER_6] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter6),
- .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter6},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter6),
},
[TRAINER_GRUNT_SPACE_CENTER_7] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter7),
- .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter7},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntSpaceCenter7),
},
[TRAINER_MACEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("MACEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Macey),
- .party = {.NoItemDefaultMoves = sParty_Macey},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Macey),
},
[TRAINER_BRENDAN_RUSTBORO_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_BrendanRustboroTreecko),
- .party = {.NoItemDefaultMoves = sParty_BrendanRustboroTreecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRustboroTreecko),
},
[TRAINER_BRENDAN_RUSTBORO_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_BrendanRustboroMudkip),
- .party = {.NoItemDefaultMoves = sParty_BrendanRustboroMudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRustboroMudkip),
},
[TRAINER_PAXTON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_M,
.trainerName = _("PAXTON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Paxton),
- .party = {.NoItemDefaultMoves = sParty_Paxton},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Paxton),
},
[TRAINER_ISABELLA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
.trainerName = _("ISABELLA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isabella),
- .party = {.NoItemDefaultMoves = sParty_Isabella},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isabella),
},
[TRAINER_GRUNT_WEATHER_INST_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
.trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntWeatherInst5),
- .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntWeatherInst5),
},
[TRAINER_TABITHA_MT_CHIMNEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_ADMIN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_ADMIN,
.trainerName = _("TABITHA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_TabithaMtChimney),
- .party = {.NoItemDefaultMoves = sParty_TabithaMtChimney},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_TabithaMtChimney),
},
[TRAINER_JONATHAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("JONATHAN"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Jonathan),
- .party = {.NoItemDefaultMoves = sParty_Jonathan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jonathan),
},
[TRAINER_BRENDAN_RUSTBORO_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanRustboroTorchic),
- .party = {.NoItemDefaultMoves = sParty_BrendanRustboroTorchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanRustboroTorchic),
},
[TRAINER_MAY_RUSTBORO_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_MayRustboroMudkip),
- .party = {.NoItemDefaultMoves = sParty_MayRustboroMudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRustboroMudkip),
},
[TRAINER_MAXIE_MAGMA_HIDEOUT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE,
.trainerName = _("MAXIE"),
.items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MaxieMagmaHideout),
- .party = {.NoItemDefaultMoves = sParty_MaxieMagmaHideout},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MaxieMagmaHideout),
},
[TRAINER_MAXIE_MT_CHIMNEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE,
.trainerName = _("MAXIE"),
.items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MaxieMtChimney),
- .party = {.NoItemDefaultMoves = sParty_MaxieMtChimney},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MaxieMtChimney),
},
[TRAINER_TIANA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("TIANA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tiana),
- .party = {.NoItemDefaultMoves = sParty_Tiana},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tiana),
},
[TRAINER_HALEY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("HALEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Haley1),
- .party = {.NoItemDefaultMoves = sParty_Haley1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley1),
},
[TRAINER_JANICE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("JANICE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Janice),
- .party = {.NoItemDefaultMoves = sParty_Janice},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Janice),
},
[TRAINER_VIVI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_WINSTRATE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("VIVI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Vivi),
- .party = {.NoItemDefaultMoves = sParty_Vivi},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Vivi),
},
[TRAINER_HALEY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("HALEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Haley2),
- .party = {.NoItemDefaultMoves = sParty_Haley2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley2),
},
[TRAINER_HALEY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("HALEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Haley3),
- .party = {.NoItemDefaultMoves = sParty_Haley3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley3),
},
[TRAINER_HALEY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("HALEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Haley4),
- .party = {.NoItemDefaultMoves = sParty_Haley4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley4),
},
[TRAINER_HALEY_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("HALEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Haley5),
- .party = {.NoItemDefaultMoves = sParty_Haley5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Haley5),
},
[TRAINER_SALLY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("SALLY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Sally),
- .party = {.NoItemDefaultMoves = sParty_Sally},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sally),
},
[TRAINER_ROBIN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("ROBIN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Robin),
- .party = {.NoItemDefaultMoves = sParty_Robin},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Robin),
},
[TRAINER_ANDREA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("ANDREA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Andrea),
- .party = {.NoItemDefaultMoves = sParty_Andrea},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Andrea),
},
[TRAINER_CRISSY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_LASS,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LASS,
.trainerName = _("CRISSY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Crissy),
- .party = {.NoItemDefaultMoves = sParty_Crissy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Crissy),
},
[TRAINER_RICK] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("RICK"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Rick),
- .party = {.NoItemDefaultMoves = sParty_Rick},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Rick),
},
[TRAINER_LYLE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("LYLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lyle),
- .party = {.NoItemDefaultMoves = sParty_Lyle},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lyle),
},
[TRAINER_JOSE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("JOSE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jose),
- .party = {.NoItemDefaultMoves = sParty_Jose},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jose),
},
[TRAINER_DOUG] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("DOUG"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Doug),
- .party = {.NoItemDefaultMoves = sParty_Doug},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Doug),
},
[TRAINER_GREG] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("GREG"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Greg),
- .party = {.NoItemDefaultMoves = sParty_Greg},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Greg),
},
[TRAINER_KENT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("KENT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kent),
- .party = {.NoItemDefaultMoves = sParty_Kent},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kent),
},
[TRAINER_JAMES_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("JAMES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_James1),
- .party = {.NoItemDefaultMoves = sParty_James1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_James1),
},
[TRAINER_JAMES_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("JAMES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_James2),
- .party = {.NoItemDefaultMoves = sParty_James2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_James2),
},
[TRAINER_JAMES_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("JAMES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_James3),
- .party = {.NoItemDefaultMoves = sParty_James3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_James3),
},
[TRAINER_JAMES_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("JAMES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_James4),
- .party = {.NoItemDefaultMoves = sParty_James4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_James4),
},
[TRAINER_JAMES_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_CATCHER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BUG_CATCHER,
.trainerName = _("JAMES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_James5),
- .party = {.NoItemDefaultMoves = sParty_James5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_James5),
},
[TRAINER_BRICE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("BRICE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Brice),
- .party = {.NoItemDefaultMoves = sParty_Brice},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brice),
},
[TRAINER_TRENT_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("TRENT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Trent1),
- .party = {.NoItemDefaultMoves = sParty_Trent1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent1),
},
[TRAINER_LENNY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("LENNY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lenny),
- .party = {.NoItemDefaultMoves = sParty_Lenny},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lenny),
},
[TRAINER_LUCAS_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("LUCAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lucas1),
- .party = {.NoItemDefaultMoves = sParty_Lucas1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lucas1),
},
[TRAINER_ALAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("ALAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Alan),
- .party = {.NoItemDefaultMoves = sParty_Alan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Alan),
},
[TRAINER_CLARK] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("CLARK"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Clark),
- .party = {.NoItemDefaultMoves = sParty_Clark},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Clark),
},
[TRAINER_ERIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("ERIC"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Eric),
- .party = {.NoItemDefaultMoves = sParty_Eric},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Eric),
},
[TRAINER_LUCAS_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("LUCAS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lucas2),
- .party = {.NoItemCustomMoves = sParty_Lucas2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Lucas2),
},
[TRAINER_MIKE_1] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("MIKE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Mike1),
- .party = {.NoItemCustomMoves = sParty_Mike1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Mike1),
},
[TRAINER_MIKE_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("MIKE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Mike2),
- .party = {.NoItemDefaultMoves = sParty_Mike2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Mike2),
},
[TRAINER_TRENT_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("TRENT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Trent2),
- .party = {.NoItemDefaultMoves = sParty_Trent2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent2),
},
[TRAINER_TRENT_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("TRENT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Trent3),
- .party = {.NoItemDefaultMoves = sParty_Trent3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent3),
},
[TRAINER_TRENT_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("TRENT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Trent4),
- .party = {.NoItemDefaultMoves = sParty_Trent4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent4),
},
[TRAINER_TRENT_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("TRENT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Trent5),
- .party = {.NoItemDefaultMoves = sParty_Trent5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Trent5),
},
[TRAINER_DEZ_AND_LUKE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_YOUNG_COUPLE,
.trainerName = _("DEZ & LUKE"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_DezAndLuke),
- .party = {.NoItemDefaultMoves = sParty_DezAndLuke},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_DezAndLuke),
},
[TRAINER_LEA_AND_JED] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_YOUNG_COUPLE,
.trainerName = _("LEA & JED"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_LeaAndJed),
- .party = {.NoItemDefaultMoves = sParty_LeaAndJed},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_LeaAndJed),
},
[TRAINER_KIRA_AND_DAN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_YOUNG_COUPLE,
.trainerName = _("KIRA & DAN"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_KiraAndDan1),
- .party = {.NoItemDefaultMoves = sParty_KiraAndDan1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan1),
},
[TRAINER_KIRA_AND_DAN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_YOUNG_COUPLE,
.trainerName = _("KIRA & DAN"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_KiraAndDan2),
- .party = {.NoItemDefaultMoves = sParty_KiraAndDan2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan2),
},
[TRAINER_KIRA_AND_DAN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_YOUNG_COUPLE,
.trainerName = _("KIRA & DAN"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_KiraAndDan3),
- .party = {.NoItemDefaultMoves = sParty_KiraAndDan3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan3),
},
[TRAINER_KIRA_AND_DAN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_YOUNG_COUPLE,
.trainerName = _("KIRA & DAN"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_KiraAndDan4),
- .party = {.NoItemDefaultMoves = sParty_KiraAndDan4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan4),
},
[TRAINER_KIRA_AND_DAN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_YOUNG_COUPLE,
.trainerName = _("KIRA & DAN"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_KiraAndDan5),
- .party = {.NoItemDefaultMoves = sParty_KiraAndDan5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_KiraAndDan5),
},
[TRAINER_JOHANNA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("JOHANNA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Johanna),
- .party = {.NoItemDefaultMoves = sParty_Johanna},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Johanna),
},
[TRAINER_GERALD] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("GERALD"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Gerald),
- .party = {.NoItemCustomMoves = sParty_Gerald},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Gerald),
},
[TRAINER_VIVIAN] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("VIVIAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Vivian),
- .party = {.NoItemCustomMoves = sParty_Vivian},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Vivian),
},
[TRAINER_DANIELLE] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("DANIELLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Danielle),
- .party = {.NoItemCustomMoves = sParty_Danielle},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Danielle),
},
[TRAINER_HIDEO] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
.trainerName = _("HIDEO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT,
- .partySize = ARRAY_COUNT(sParty_Hideo),
- .party = {.NoItemCustomMoves = sParty_Hideo},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Hideo),
},
[TRAINER_KEIGO] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
.trainerName = _("KEIGO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT,
- .partySize = ARRAY_COUNT(sParty_Keigo),
- .party = {.NoItemCustomMoves = sParty_Keigo},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Keigo),
},
[TRAINER_RILEY] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
.trainerName = _("RILEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT,
- .partySize = ARRAY_COUNT(sParty_Riley),
- .party = {.NoItemCustomMoves = sParty_Riley},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Riley),
},
[TRAINER_FLINT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("FLINT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Flint),
- .party = {.NoItemDefaultMoves = sParty_Flint},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Flint),
},
[TRAINER_ASHLEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("ASHLEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Ashley),
- .party = {.NoItemDefaultMoves = sParty_Ashley},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ashley),
},
[TRAINER_WALLY_MAUVILLE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_WALLY,
.trainerName = _("WALLY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_WallyMauville),
- .party = {.NoItemDefaultMoves = sParty_WallyMauville},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_WallyMauville),
},
[TRAINER_WALLY_VR_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_WALLY,
.trainerName = _("WALLY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_WallyVR2),
- .party = {.NoItemCustomMoves = sParty_WallyVR2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR2),
},
[TRAINER_WALLY_VR_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_WALLY,
.trainerName = _("WALLY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_WallyVR3),
- .party = {.NoItemCustomMoves = sParty_WallyVR3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR3),
},
[TRAINER_WALLY_VR_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_WALLY,
.trainerName = _("WALLY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_WallyVR4),
- .party = {.NoItemCustomMoves = sParty_WallyVR4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR4),
},
[TRAINER_WALLY_VR_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_WALLY,
.trainerName = _("WALLY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_WallyVR5),
- .party = {.NoItemCustomMoves = sParty_WallyVR5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_WallyVR5),
},
[TRAINER_BRENDAN_LILYCOVE_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanLilycoveMudkip),
- .party = {.NoItemDefaultMoves = sParty_BrendanLilycoveMudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLilycoveMudkip),
},
[TRAINER_BRENDAN_LILYCOVE_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanLilycoveTreecko),
- .party = {.NoItemDefaultMoves = sParty_BrendanLilycoveTreecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLilycoveTreecko),
},
[TRAINER_BRENDAN_LILYCOVE_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_BRENDAN,
.trainerName = _("BRENDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_BrendanLilycoveTorchic),
- .party = {.NoItemDefaultMoves = sParty_BrendanLilycoveTorchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLilycoveTorchic),
},
[TRAINER_MAY_LILYCOVE_MUDKIP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayLilycoveMudkip),
- .party = {.NoItemDefaultMoves = sParty_MayLilycoveMudkip},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLilycoveMudkip),
},
[TRAINER_MAY_LILYCOVE_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayLilycoveTreecko),
- .party = {.NoItemDefaultMoves = sParty_MayLilycoveTreecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLilycoveTreecko),
},
[TRAINER_MAY_LILYCOVE_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayLilycoveTorchic),
- .party = {.NoItemDefaultMoves = sParty_MayLilycoveTorchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLilycoveTorchic),
},
[TRAINER_JONAH] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("JONAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jonah),
- .party = {.NoItemDefaultMoves = sParty_Jonah},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jonah),
},
[TRAINER_HENRY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("HENRY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Henry),
- .party = {.NoItemDefaultMoves = sParty_Henry},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Henry),
},
[TRAINER_ROGER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("ROGER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Roger),
- .party = {.NoItemDefaultMoves = sParty_Roger},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Roger),
},
[TRAINER_ALEXA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("ALEXA"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Alexa),
- .party = {.NoItemDefaultMoves = sParty_Alexa},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Alexa),
},
[TRAINER_RUBEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("RUBEN"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Ruben),
- .party = {.NoItemDefaultMoves = sParty_Ruben},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Ruben),
},
[TRAINER_KOJI_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("KOJI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Koji1),
- .party = {.NoItemDefaultMoves = sParty_Koji1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji1),
},
[TRAINER_WAYNE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("WAYNE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Wayne),
- .party = {.NoItemDefaultMoves = sParty_Wayne},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Wayne),
},
[TRAINER_AIDAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("AIDAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Aidan),
- .party = {.NoItemDefaultMoves = sParty_Aidan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Aidan),
},
[TRAINER_REED] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("REED"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Reed),
- .party = {.NoItemDefaultMoves = sParty_Reed},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Reed),
},
[TRAINER_TISHA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("TISHA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tisha),
- .party = {.NoItemDefaultMoves = sParty_Tisha},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tisha),
},
[TRAINER_TORI_AND_TIA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TWINS,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_TWINS,
.trainerName = _("TORI & TIA"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_ToriAndTia),
- .party = {.NoItemDefaultMoves = sParty_ToriAndTia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_ToriAndTia),
},
[TRAINER_KIM_AND_IRIS] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_SR_AND_JR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_SR_AND_JR,
.trainerName = _("KIM & IRIS"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_KimAndIris),
- .party = {.NoItemCustomMoves = sParty_KimAndIris},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_KimAndIris),
},
[TRAINER_TYRA_AND_IVY] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_SR_AND_JR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_SR_AND_JR,
.trainerName = _("TYRA & IVY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_TyraAndIvy),
- .party = {.NoItemCustomMoves = sParty_TyraAndIvy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_TyraAndIvy),
},
[TRAINER_MEL_AND_PAUL] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_YOUNG_COUPLE,
.trainerName = _("MEL & PAUL"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_MelAndPaul),
- .party = {.NoItemCustomMoves = sParty_MelAndPaul},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_MelAndPaul),
},
[TRAINER_JOHN_AND_JAY_1] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_OLD_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_OLD_COUPLE,
.trainerName = _("JOHN & JAY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_JohnAndJay1),
- .party = {.NoItemCustomMoves = sParty_JohnAndJay1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay1),
},
[TRAINER_JOHN_AND_JAY_2] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_OLD_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_OLD_COUPLE,
.trainerName = _("JOHN & JAY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_JohnAndJay2),
- .party = {.NoItemCustomMoves = sParty_JohnAndJay2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay2),
},
[TRAINER_JOHN_AND_JAY_3] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_OLD_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_OLD_COUPLE,
.trainerName = _("JOHN & JAY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_JohnAndJay3),
- .party = {.NoItemCustomMoves = sParty_JohnAndJay3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay3),
},
[TRAINER_JOHN_AND_JAY_4] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_OLD_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_OLD_COUPLE,
.trainerName = _("JOHN & JAY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_JohnAndJay4),
- .party = {.NoItemCustomMoves = sParty_JohnAndJay4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay4),
},
[TRAINER_JOHN_AND_JAY_5] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_OLD_COUPLE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_OLD_COUPLE,
.trainerName = _("JOHN & JAY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_JohnAndJay5),
- .party = {.NoItemCustomMoves = sParty_JohnAndJay5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_JohnAndJay5),
},
[TRAINER_RELI_AND_IAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SIS_AND_BRO,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SIS_AND_BRO,
.trainerName = _("RELI & IAN"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_ReliAndIan),
- .party = {.NoItemDefaultMoves = sParty_ReliAndIan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_ReliAndIan),
},
[TRAINER_LILA_AND_ROY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SIS_AND_BRO,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SIS_AND_BRO,
.trainerName = _("LILA & ROY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_LilaAndRoy1),
- .party = {.NoItemDefaultMoves = sParty_LilaAndRoy1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy1),
},
[TRAINER_LILA_AND_ROY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SIS_AND_BRO,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SIS_AND_BRO,
.trainerName = _("LILA & ROY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_LilaAndRoy2),
- .party = {.NoItemDefaultMoves = sParty_LilaAndRoy2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy2),
},
[TRAINER_LILA_AND_ROY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SIS_AND_BRO,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SIS_AND_BRO,
.trainerName = _("LILA & ROY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_LilaAndRoy3),
- .party = {.NoItemDefaultMoves = sParty_LilaAndRoy3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy3),
},
[TRAINER_LILA_AND_ROY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SIS_AND_BRO,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SIS_AND_BRO,
.trainerName = _("LILA & ROY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_LilaAndRoy4),
- .party = {.NoItemDefaultMoves = sParty_LilaAndRoy4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy4),
},
[TRAINER_LILA_AND_ROY_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SIS_AND_BRO,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SIS_AND_BRO,
.trainerName = _("LILA & ROY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_LilaAndRoy5),
- .party = {.NoItemDefaultMoves = sParty_LilaAndRoy5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_LilaAndRoy5),
},
[TRAINER_LISA_AND_RAY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SIS_AND_BRO,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SIS_AND_BRO,
.trainerName = _("LISA & RAY"),
.items = {},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_LisaAndRay),
- .party = {.NoItemDefaultMoves = sParty_LisaAndRay},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_LisaAndRay),
},
[TRAINER_CHRIS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("CHRIS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Chris),
- .party = {.NoItemDefaultMoves = sParty_Chris},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Chris),
},
[TRAINER_DAWSON] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_RICH_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_RICH_BOY,
.trainerName = _("DAWSON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dawson),
- .party = {.ItemDefaultMoves = sParty_Dawson},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Dawson),
},
[TRAINER_SARAH] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LADY,
.trainerName = _("SARAH"),
.items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Sarah),
- .party = {.ItemDefaultMoves = sParty_Sarah},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Sarah),
},
[TRAINER_DARIAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("DARIAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Darian),
- .party = {.NoItemDefaultMoves = sParty_Darian},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Darian),
},
[TRAINER_HAILEY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_F,
.trainerName = _("HAILEY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Hailey),
- .party = {.NoItemDefaultMoves = sParty_Hailey},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Hailey),
},
[TRAINER_CHANDLER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TUBER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_TUBER_M,
.trainerName = _("CHANDLER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Chandler),
- .party = {.NoItemDefaultMoves = sParty_Chandler},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Chandler),
},
[TRAINER_KALEB] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
.trainerClass = TRAINER_CLASS_POKEFAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
.trainerPic = TRAINER_PIC_POKEFAN_M,
.trainerName = _("KALEB"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kaleb),
- .party = {.ItemDefaultMoves = sParty_Kaleb},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = ITEM_DEFAULT_MOVES(sParty_Kaleb),
},
[TRAINER_JOSEPH] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("JOSEPH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Joseph),
- .party = {.NoItemDefaultMoves = sParty_Joseph},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Joseph),
},
[TRAINER_ALYSSA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
.trainerName = _("ALYSSA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Alyssa),
- .party = {.NoItemDefaultMoves = sParty_Alyssa},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Alyssa),
},
[TRAINER_MARCOS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("MARCOS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Marcos),
- .party = {.NoItemDefaultMoves = sParty_Marcos},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Marcos),
},
[TRAINER_RHETT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("RHETT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Rhett),
- .party = {.NoItemDefaultMoves = sParty_Rhett},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Rhett),
},
[TRAINER_TYRON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("TYRON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tyron),
- .party = {.NoItemDefaultMoves = sParty_Tyron},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tyron),
},
[TRAINER_CELINA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AROMA_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_AROMA_LADY,
.trainerName = _("CELINA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Celina),
- .party = {.NoItemDefaultMoves = sParty_Celina},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Celina),
},
[TRAINER_BIANCA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("BIANCA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bianca),
- .party = {.NoItemDefaultMoves = sParty_Bianca},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Bianca),
},
[TRAINER_HAYDEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("HAYDEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Hayden),
- .party = {.NoItemDefaultMoves = sParty_Hayden},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Hayden),
},
[TRAINER_SOPHIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("SOPHIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Sophie),
- .party = {.NoItemDefaultMoves = sParty_Sophie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sophie),
},
[TRAINER_COBY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("COBY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Coby),
- .party = {.NoItemDefaultMoves = sParty_Coby},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Coby),
},
[TRAINER_LAWRENCE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("LAWRENCE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Lawrence),
- .party = {.NoItemDefaultMoves = sParty_Lawrence},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lawrence),
},
[TRAINER_WYATT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_POKEMANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_POKEMANIAC,
.trainerName = _("WYATT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Wyatt),
- .party = {.NoItemDefaultMoves = sParty_Wyatt},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Wyatt),
},
[TRAINER_ANGELINA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("ANGELINA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Angelina),
- .party = {.NoItemDefaultMoves = sParty_Angelina},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Angelina),
},
[TRAINER_KAI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FISHERMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_FISHERMAN,
.trainerName = _("KAI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kai),
- .party = {.NoItemDefaultMoves = sParty_Kai},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kai),
},
[TRAINER_CHARLOTTE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("CHARLOTTE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Charlotte),
- .party = {.NoItemDefaultMoves = sParty_Charlotte},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Charlotte),
},
[TRAINER_DEANDRE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("DEANDRE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Deandre),
- .party = {.NoItemDefaultMoves = sParty_Deandre},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Deandre),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout1),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout1),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout2),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout2),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout3),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout3),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout4),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout4),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout5),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout5),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_6] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout6),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout6},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout6),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_7] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout7),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout7},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout7),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_8] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout8),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout8},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout8),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_9] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout9),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout9},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout9),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_10] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout10),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout10},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout10),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_11] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout11),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout11},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout11),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_12] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout12),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout12},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout12),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_13] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout13),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout13},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout13),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_14] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout14),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout14},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout14),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_15] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout15),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout15},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout15),
},
[TRAINER_GRUNT_MAGMA_HIDEOUT_16] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
.trainerName = _("GRUNT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout16),
- .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout16},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_GruntMagmaHideout16),
},
[TRAINER_TABITHA_MAGMA_HIDEOUT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_ADMIN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_ADMIN,
.trainerName = _("TABITHA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_TabithaMagmaHideout),
- .party = {.NoItemDefaultMoves = sParty_TabithaMagmaHideout},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_TabithaMagmaHideout),
},
[TRAINER_DARCY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("DARCY"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Darcy),
- .party = {.NoItemDefaultMoves = sParty_Darcy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Darcy),
},
[TRAINER_MAXIE_MOSSDEEP] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
.trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE,
.trainerName = _("MAXIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MaxieMossdeep),
- .party = {.NoItemDefaultMoves = sParty_MaxieMossdeep},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MaxieMossdeep),
},
[TRAINER_PETE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_M,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_M,
.trainerName = _("PETE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Pete),
- .party = {.NoItemDefaultMoves = sParty_Pete},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Pete),
},
[TRAINER_ISABELLE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SWIMMER_F,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMER_F,
.trainerName = _("ISABELLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Isabelle),
- .party = {.NoItemDefaultMoves = sParty_Isabelle},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Isabelle),
},
[TRAINER_ANDRES_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("ANDRES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Andres1),
- .party = {.NoItemDefaultMoves = sParty_Andres1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres1),
},
[TRAINER_JOSUE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("JOSUE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Josue),
- .party = {.NoItemDefaultMoves = sParty_Josue},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Josue),
},
[TRAINER_CAMRON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("CAMRON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Camron),
- .party = {.NoItemDefaultMoves = sParty_Camron},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Camron),
},
[TRAINER_CORY_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("CORY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cory1),
- .party = {.NoItemDefaultMoves = sParty_Cory1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory1),
},
[TRAINER_CAROLINA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("CAROLINA"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Carolina),
- .party = {.NoItemDefaultMoves = sParty_Carolina},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Carolina),
},
[TRAINER_ELIJAH] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("ELIJAH"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Elijah),
- .party = {.NoItemDefaultMoves = sParty_Elijah},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Elijah),
},
[TRAINER_CELIA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PICNICKER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
.trainerPic = TRAINER_PIC_PICNICKER,
.trainerName = _("CELIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Celia),
- .party = {.NoItemDefaultMoves = sParty_Celia},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Celia),
},
[TRAINER_BRYAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("BRYAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bryan),
- .party = {.NoItemDefaultMoves = sParty_Bryan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Bryan),
},
[TRAINER_BRANDEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_CAMPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_CAMPER,
.trainerName = _("BRANDEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Branden),
- .party = {.NoItemDefaultMoves = sParty_Branden},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Branden),
},
[TRAINER_BRYANT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("BRYANT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Bryant),
- .party = {.NoItemDefaultMoves = sParty_Bryant},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Bryant),
},
[TRAINER_SHAYLA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_AROMA_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_AROMA_LADY,
.trainerName = _("SHAYLA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Shayla),
- .party = {.NoItemDefaultMoves = sParty_Shayla},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Shayla),
},
[TRAINER_KYRA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
.trainerName = _("KYRA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Kyra),
- .party = {.NoItemDefaultMoves = sParty_Kyra},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Kyra),
},
[TRAINER_JAIDEN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_NINJA_BOY,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_NINJA_BOY,
.trainerName = _("JAIDEN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Jaiden),
- .party = {.NoItemDefaultMoves = sParty_Jaiden},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Jaiden),
},
[TRAINER_ALIX] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("ALIX"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Alix),
- .party = {.NoItemDefaultMoves = sParty_Alix},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Alix),
},
[TRAINER_HELENE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("HELENE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Helene),
- .party = {.NoItemDefaultMoves = sParty_Helene},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Helene),
},
[TRAINER_MARLENE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("MARLENE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Marlene),
- .party = {.NoItemDefaultMoves = sParty_Marlene},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Marlene),
},
[TRAINER_DEVAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("DEVAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Devan),
- .party = {.NoItemDefaultMoves = sParty_Devan},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Devan),
},
[TRAINER_JOHNSON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_YOUNGSTER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_YOUNGSTER,
.trainerName = _("JOHNSON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Johnson),
- .party = {.NoItemDefaultMoves = sParty_Johnson},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Johnson),
},
[TRAINER_MELINA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
.trainerName = _("MELINA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Melina),
- .party = {.NoItemDefaultMoves = sParty_Melina},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Melina),
},
[TRAINER_BRANDI] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
.trainerName = _("BRANDI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Brandi),
- .party = {.NoItemDefaultMoves = sParty_Brandi},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brandi),
},
[TRAINER_AISHA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("AISHA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Aisha),
- .party = {.NoItemDefaultMoves = sParty_Aisha},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Aisha),
},
[TRAINER_MAKAYLA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_EXPERT,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_EXPERT_F,
.trainerName = _("MAKAYLA"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Makayla),
- .party = {.NoItemDefaultMoves = sParty_Makayla},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Makayla),
},
[TRAINER_FABIAN] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("FABIAN"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Fabian),
- .party = {.NoItemDefaultMoves = sParty_Fabian},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Fabian),
},
[TRAINER_DAYTON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_KINDLER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_KINDLER,
.trainerName = _("DAYTON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Dayton),
- .party = {.NoItemDefaultMoves = sParty_Dayton},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Dayton),
},
[TRAINER_RACHEL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PARASOL_LADY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_PARASOL_LADY,
.trainerName = _("RACHEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Rachel),
- .party = {.NoItemDefaultMoves = sParty_Rachel},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Rachel),
},
[TRAINER_LEONEL] =
{
- .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_M,
.trainerName = _("LEONEL"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Leonel),
- .party = {.NoItemCustomMoves = sParty_Leonel},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_CUSTOM_MOVES(sParty_Leonel),
},
[TRAINER_CALLIE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BATTLE_GIRL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BATTLE_GIRL,
.trainerName = _("CALLIE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Callie),
- .party = {.NoItemDefaultMoves = sParty_Callie},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Callie),
},
[TRAINER_CALE] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("CALE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cale),
- .party = {.NoItemDefaultMoves = sParty_Cale},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cale),
},
[TRAINER_MYLES] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
.trainerName = _("MYLES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Myles),
- .party = {.NoItemDefaultMoves = sParty_Myles},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Myles),
},
[TRAINER_PAT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("PAT"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Pat),
- .party = {.NoItemDefaultMoves = sParty_Pat},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Pat),
},
[TRAINER_CRISTIN_1] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("CRISTIN"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Cristin1),
- .party = {.NoItemDefaultMoves = sParty_Cristin1},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin1),
},
[TRAINER_MAY_RUSTBORO_TREECKO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRustboroTreecko),
- .party = {.NoItemDefaultMoves = sParty_MayRustboroTreecko},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRustboroTreecko),
},
[TRAINER_MAY_RUSTBORO_TORCHIC] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_MAY,
.trainerName = _("MAY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_MayRustboroTorchic),
- .party = {.NoItemDefaultMoves = sParty_MayRustboroTorchic},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayRustboroTorchic),
},
[TRAINER_ROXANNE_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_ROXANNE,
.trainerName = _("ROXANNE"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Roxanne2),
- .party = {.ItemCustomMoves = sParty_Roxanne2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Roxanne2),
},
[TRAINER_ROXANNE_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_ROXANNE,
.trainerName = _("ROXANNE"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Roxanne3),
- .party = {.ItemCustomMoves = sParty_Roxanne3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Roxanne3),
},
[TRAINER_ROXANNE_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_ROXANNE,
.trainerName = _("ROXANNE"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Roxanne4),
- .party = {.ItemCustomMoves = sParty_Roxanne4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Roxanne4),
},
[TRAINER_ROXANNE_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_ROXANNE,
.trainerName = _("ROXANNE"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Roxanne5),
- .party = {.ItemCustomMoves = sParty_Roxanne5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Roxanne5),
},
[TRAINER_BRAWLY_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_BRAWLY,
.trainerName = _("BRAWLY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brawly2),
- .party = {.ItemCustomMoves = sParty_Brawly2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Brawly2),
},
[TRAINER_BRAWLY_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_BRAWLY,
.trainerName = _("BRAWLY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brawly3),
- .party = {.ItemCustomMoves = sParty_Brawly3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Brawly3),
},
[TRAINER_BRAWLY_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_BRAWLY,
.trainerName = _("BRAWLY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brawly4),
- .party = {.ItemCustomMoves = sParty_Brawly4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Brawly4),
},
[TRAINER_BRAWLY_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_BRAWLY,
.trainerName = _("BRAWLY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brawly5),
- .party = {.ItemCustomMoves = sParty_Brawly5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Brawly5),
},
[TRAINER_WATTSON_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_WATTSON,
.trainerName = _("WATTSON"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wattson2),
- .party = {.ItemCustomMoves = sParty_Wattson2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Wattson2),
},
[TRAINER_WATTSON_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_WATTSON,
.trainerName = _("WATTSON"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wattson3),
- .party = {.ItemCustomMoves = sParty_Wattson3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Wattson3),
},
[TRAINER_WATTSON_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_WATTSON,
.trainerName = _("WATTSON"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wattson4),
- .party = {.ItemCustomMoves = sParty_Wattson4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Wattson4),
},
[TRAINER_WATTSON_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_WATTSON,
.trainerName = _("WATTSON"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wattson5),
- .party = {.ItemCustomMoves = sParty_Wattson5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Wattson5),
},
[TRAINER_FLANNERY_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_FLANNERY,
.trainerName = _("FLANNERY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Flannery2),
- .party = {.ItemCustomMoves = sParty_Flannery2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Flannery2),
},
[TRAINER_FLANNERY_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_FLANNERY,
.trainerName = _("FLANNERY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Flannery3),
- .party = {.ItemCustomMoves = sParty_Flannery3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Flannery3),
},
[TRAINER_FLANNERY_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_FLANNERY,
.trainerName = _("FLANNERY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Flannery4),
- .party = {.ItemCustomMoves = sParty_Flannery4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Flannery4),
},
[TRAINER_FLANNERY_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_FLANNERY,
.trainerName = _("FLANNERY"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Flannery5),
- .party = {.ItemCustomMoves = sParty_Flannery5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Flannery5),
},
[TRAINER_NORMAN_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_NORMAN,
.trainerName = _("NORMAN"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Norman2),
- .party = {.ItemCustomMoves = sParty_Norman2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Norman2),
},
[TRAINER_NORMAN_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_NORMAN,
.trainerName = _("NORMAN"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Norman3),
- .party = {.ItemCustomMoves = sParty_Norman3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Norman3),
},
[TRAINER_NORMAN_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_NORMAN,
.trainerName = _("NORMAN"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Norman4),
- .party = {.ItemCustomMoves = sParty_Norman4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Norman4),
},
[TRAINER_NORMAN_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_NORMAN,
.trainerName = _("NORMAN"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Norman5),
- .party = {.ItemCustomMoves = sParty_Norman5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Norman5),
},
[TRAINER_WINONA_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_WINONA,
.trainerName = _("WINONA"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY,
- .partySize = ARRAY_COUNT(sParty_Winona2),
- .party = {.ItemCustomMoves = sParty_Winona2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Winona2),
},
[TRAINER_WINONA_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_WINONA,
.trainerName = _("WINONA"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY,
- .partySize = ARRAY_COUNT(sParty_Winona3),
- .party = {.ItemCustomMoves = sParty_Winona3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Winona3),
},
[TRAINER_WINONA_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_WINONA,
.trainerName = _("WINONA"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY,
- .partySize = ARRAY_COUNT(sParty_Winona4),
- .party = {.ItemCustomMoves = sParty_Winona4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Winona4),
},
[TRAINER_WINONA_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_WINONA,
.trainerName = _("WINONA"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY,
- .partySize = ARRAY_COUNT(sParty_Winona5),
- .party = {.ItemCustomMoves = sParty_Winona5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Winona5),
},
[TRAINER_TATE_AND_LIZA_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
.trainerName = _("TATE&LIZA"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_TateAndLiza2),
- .party = {.ItemCustomMoves = sParty_TateAndLiza2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza2),
},
[TRAINER_TATE_AND_LIZA_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
.trainerName = _("TATE&LIZA"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_TateAndLiza3),
- .party = {.ItemCustomMoves = sParty_TateAndLiza3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza3),
},
[TRAINER_TATE_AND_LIZA_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
.trainerName = _("TATE&LIZA"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_TateAndLiza4),
- .party = {.ItemCustomMoves = sParty_TateAndLiza4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza4),
},
[TRAINER_TATE_AND_LIZA_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
.trainerName = _("TATE&LIZA"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_TateAndLiza5),
- .party = {.ItemCustomMoves = sParty_TateAndLiza5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_TateAndLiza5),
},
[TRAINER_JUAN_2] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_JUAN,
.trainerName = _("JUAN"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Juan2),
- .party = {.ItemCustomMoves = sParty_Juan2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Juan2),
},
[TRAINER_JUAN_3] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_JUAN,
.trainerName = _("JUAN"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Juan3),
- .party = {.ItemCustomMoves = sParty_Juan3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Juan3),
},
[TRAINER_JUAN_4] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_JUAN,
.trainerName = _("JUAN"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Juan4),
- .party = {.ItemCustomMoves = sParty_Juan4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Juan4),
},
[TRAINER_JUAN_5] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_LEADER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEADER_JUAN,
.trainerName = _("JUAN"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
.doubleBattle = TRUE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Juan5),
- .party = {.ItemCustomMoves = sParty_Juan5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Juan5),
},
[TRAINER_ANGELO] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_BUG_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
.trainerPic = TRAINER_PIC_BUG_MANIAC,
.trainerName = _("ANGELO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Angelo),
- .party = {.ItemCustomMoves = sParty_Angelo},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Angelo),
},
[TRAINER_DARIUS] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BIRD_KEEPER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_BIRD_KEEPER,
.trainerName = _("DARIUS"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Darius),
- .party = {.NoItemDefaultMoves = sParty_Darius},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Darius),
},
[TRAINER_STEVEN] =
{
- .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_STEVEN,
.trainerName = _("STEVEN"),
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Steven),
- .party = {.ItemCustomMoves = sParty_Steven},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = ITEM_CUSTOM_MOVES(sParty_Steven),
},
[TRAINER_ANABEL] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SALON_MAIDEN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SALON_MAIDEN_ANABEL,
.trainerName = _("ANABEL"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Anabel),
- .party = {.NoItemDefaultMoves = sParty_Anabel},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Anabel),
},
[TRAINER_TUCKER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_DOME_ACE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_DOME_ACE_TUCKER,
.trainerName = _("TUCKER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Tucker),
- .party = {.NoItemDefaultMoves = sParty_Tucker},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Tucker),
},
[TRAINER_SPENSER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PALACE_MAVEN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_PALACE_MAVEN_SPENSER,
.trainerName = _("SPENSER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Spenser),
- .party = {.NoItemDefaultMoves = sParty_Spenser},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Spenser),
},
[TRAINER_GRETA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_ARENA_TYCOON,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_ARENA_TYCOON_GRETA,
.trainerName = _("GRETA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Greta),
- .party = {.NoItemDefaultMoves = sParty_Greta},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Greta),
},
[TRAINER_NOLAND] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_FACTORY_HEAD,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_FACTORY_HEAD_NOLAND,
.trainerName = _("NOLAND"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Noland),
- .party = {.NoItemDefaultMoves = sParty_Noland},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Noland),
},
[TRAINER_LUCY] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PIKE_QUEEN,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_PIKE_QUEEN_LUCY,
.trainerName = _("LUCY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Lucy),
- .party = {.NoItemDefaultMoves = sParty_Lucy},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Lucy),
},
[TRAINER_BRANDON] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PYRAMID_KING,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_PYRAMID_KING_BRANDON,
.trainerName = _("BRANDON"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brandon),
- .party = {.NoItemDefaultMoves = sParty_Brandon},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Brandon),
},
[TRAINER_ANDRES_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("ANDRES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Andres2),
- .party = {.NoItemDefaultMoves = sParty_Andres2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres2),
},
[TRAINER_ANDRES_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("ANDRES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Andres3),
- .party = {.NoItemDefaultMoves = sParty_Andres3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres3),
},
[TRAINER_ANDRES_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("ANDRES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Andres4),
- .party = {.NoItemDefaultMoves = sParty_Andres4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres4),
},
[TRAINER_ANDRES_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RUIN_MANIAC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_RUIN_MANIAC,
.trainerName = _("ANDRES"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Andres5),
- .party = {.NoItemDefaultMoves = sParty_Andres5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Andres5),
},
[TRAINER_CORY_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("CORY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cory2),
- .party = {.NoItemDefaultMoves = sParty_Cory2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory2),
},
[TRAINER_CORY_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("CORY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cory3),
- .party = {.NoItemDefaultMoves = sParty_Cory3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory3),
},
[TRAINER_CORY_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("CORY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cory4),
- .party = {.NoItemDefaultMoves = sParty_Cory4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory4),
},
[TRAINER_CORY_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_SAILOR,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_SAILOR,
.trainerName = _("CORY"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Cory5),
- .party = {.NoItemDefaultMoves = sParty_Cory5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cory5),
},
[TRAINER_PABLO_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("PABLO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Pablo2),
- .party = {.NoItemDefaultMoves = sParty_Pablo2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo2),
},
[TRAINER_PABLO_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("PABLO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Pablo3),
- .party = {.NoItemDefaultMoves = sParty_Pablo3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo3),
},
[TRAINER_PABLO_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("PABLO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Pablo4),
- .party = {.NoItemDefaultMoves = sParty_Pablo4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo4),
},
[TRAINER_PABLO_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_TRIATHLETE,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
.trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
.trainerName = _("PABLO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Pablo5),
- .party = {.NoItemDefaultMoves = sParty_Pablo5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Pablo5),
},
[TRAINER_KOJI_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("KOJI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Koji2),
- .party = {.NoItemDefaultMoves = sParty_Koji2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji2),
},
[TRAINER_KOJI_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("KOJI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Koji3),
- .party = {.NoItemDefaultMoves = sParty_Koji3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji3),
},
[TRAINER_KOJI_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("KOJI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Koji4),
- .party = {.NoItemDefaultMoves = sParty_Koji4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji4),
},
[TRAINER_KOJI_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BLACK_BELT,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_BLACK_BELT,
.trainerName = _("KOJI"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Koji5),
- .party = {.NoItemDefaultMoves = sParty_Koji5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Koji5),
},
[TRAINER_CRISTIN_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("CRISTIN"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Cristin2),
- .party = {.NoItemDefaultMoves = sParty_Cristin2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin2),
},
[TRAINER_CRISTIN_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("CRISTIN"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Cristin3),
- .party = {.NoItemDefaultMoves = sParty_Cristin3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin3),
},
[TRAINER_CRISTIN_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("CRISTIN"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Cristin4),
- .party = {.NoItemDefaultMoves = sParty_Cristin4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin4),
},
[TRAINER_CRISTIN_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_COOLTRAINER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
.trainerPic = TRAINER_PIC_COOLTRAINER_F,
.trainerName = _("CRISTIN"),
.items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Cristin5),
- .party = {.NoItemDefaultMoves = sParty_Cristin5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Cristin5),
},
[TRAINER_FERNANDO_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("FERNANDO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Fernando2),
- .party = {.NoItemDefaultMoves = sParty_Fernando2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando2),
},
[TRAINER_FERNANDO_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("FERNANDO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Fernando3),
- .party = {.NoItemDefaultMoves = sParty_Fernando3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando3),
},
[TRAINER_FERNANDO_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("FERNANDO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Fernando4),
- .party = {.NoItemDefaultMoves = sParty_Fernando4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando4),
},
[TRAINER_FERNANDO_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GUITARIST,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_GUITARIST,
.trainerName = _("FERNANDO"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Fernando5),
- .party = {.NoItemDefaultMoves = sParty_Fernando5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Fernando5),
},
[TRAINER_SAWYER_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("SAWYER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Sawyer2),
- .party = {.NoItemDefaultMoves = sParty_Sawyer2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer2),
},
[TRAINER_SAWYER_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("SAWYER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Sawyer3),
- .party = {.NoItemDefaultMoves = sParty_Sawyer3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer3),
},
[TRAINER_SAWYER_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("SAWYER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Sawyer4),
- .party = {.NoItemDefaultMoves = sParty_Sawyer4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer4),
},
[TRAINER_SAWYER_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_HIKER,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
.trainerPic = TRAINER_PIC_HIKER,
.trainerName = _("SAWYER"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Sawyer5),
- .party = {.NoItemDefaultMoves = sParty_Sawyer5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Sawyer5),
},
[TRAINER_GABRIELLE_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("GABRIELLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Gabrielle2),
- .party = {.NoItemDefaultMoves = sParty_Gabrielle2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle2),
},
[TRAINER_GABRIELLE_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("GABRIELLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Gabrielle3),
- .party = {.NoItemDefaultMoves = sParty_Gabrielle3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle3),
},
[TRAINER_GABRIELLE_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("GABRIELLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Gabrielle4),
- .party = {.NoItemDefaultMoves = sParty_Gabrielle4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle4),
},
[TRAINER_GABRIELLE_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_BREEDER,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
.trainerName = _("GABRIELLE"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Gabrielle5),
- .party = {.NoItemDefaultMoves = sParty_Gabrielle5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Gabrielle5),
},
[TRAINER_THALIA_2] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("THALIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Thalia2),
- .party = {.NoItemDefaultMoves = sParty_Thalia2},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia2),
},
[TRAINER_THALIA_3] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("THALIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Thalia3),
- .party = {.NoItemDefaultMoves = sParty_Thalia3},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia3),
},
[TRAINER_THALIA_4] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("THALIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Thalia4),
- .party = {.NoItemDefaultMoves = sParty_Thalia4},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia4),
},
[TRAINER_THALIA_5] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_BEAUTY,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
.trainerPic = TRAINER_PIC_BEAUTY,
.trainerName = _("THALIA"),
.items = {},
.doubleBattle = FALSE,
- .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Thalia5),
- .party = {.NoItemDefaultMoves = sParty_Thalia5},
+ .aiFlags = AI_FLAG_CHECK_BAD_MOVE,
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Thalia5),
},
[TRAINER_MARIELA] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_F,
@@ -11881,13 +10186,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Mariela),
- .party = {.NoItemDefaultMoves = sParty_Mariela},
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Mariela),
},
[TRAINER_ALVARO] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_PSYCHIC,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
.trainerPic = TRAINER_PIC_PSYCHIC_M,
@@ -11895,13 +10198,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Alvaro),
- .party = {.NoItemDefaultMoves = sParty_Alvaro},
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Alvaro),
},
[TRAINER_EVERETT] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_GENTLEMAN,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
.trainerPic = TRAINER_PIC_GENTLEMAN,
@@ -11909,13 +10210,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Everett),
- .party = {.NoItemDefaultMoves = sParty_Everett},
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Everett),
},
[TRAINER_RED] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_RED,
@@ -11923,13 +10222,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Red),
- .party = {.NoItemDefaultMoves = sParty_Red},
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Red),
},
[TRAINER_LEAF] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RIVAL,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_LEAF,
@@ -11937,13 +10234,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Leaf),
- .party = {.NoItemDefaultMoves = sParty_Leaf},
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_Leaf),
},
[TRAINER_BRENDAN_PLACEHOLDER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RS_PROTAG,
.encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_RS_BRENDAN,
@@ -11951,13 +10246,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder),
- .party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder},
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_BrendanLinkPlaceholder),
},
[TRAINER_MAY_PLACEHOLDER] =
{
- .partyFlags = 0,
.trainerClass = TRAINER_CLASS_RS_PROTAG,
.encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
.trainerPic = TRAINER_PIC_RS_MAY,
@@ -11965,7 +10258,6 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_MayLinkPlaceholder),
- .party = {.NoItemDefaultMoves = sParty_MayLinkPlaceholder},
+ .party = NO_ITEM_DEFAULT_MOVES(sParty_MayLinkPlaceholder),
},
};
diff --git a/src/daycare.c b/src/daycare.c
index 01ecee950d..d293e51175 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -19,6 +19,7 @@
#include "party_menu.h"
#include "list_menu.h"
#include "overworld.h"
+#include "item.h"
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/region_map_sections.h"
@@ -29,6 +30,7 @@ static void ClearDaycareMonMail(struct DaycareMail *mail);
static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
static u8 GetDaycareCompatibilityScore(struct DayCare *daycare);
static void DaycarePrintMonInfo(u8 windowId, u32 daycareSlotId, u8 y);
+static u8 ModifyBreedingScoreForOvalCharm(u8 score);
// RAM buffers used to assist with BuildEggMoveset()
EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0};
@@ -742,20 +744,41 @@ void RejectEggFromDayCare(void)
static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare)
{
u16 motherItem, fatherItem;
- if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL)
- {
- motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM);
- fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM);
- if (*species == SPECIES_WYNAUT && motherItem != ITEM_LAX_INCENSE && fatherItem != ITEM_LAX_INCENSE)
- {
- *species = SPECIES_WOBBUFFET;
- }
+ motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM);
+ fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM);
- if (*species == SPECIES_AZURILL && motherItem != ITEM_SEA_INCENSE && fatherItem != ITEM_SEA_INCENSE)
- {
- *species = SPECIES_MARILL;
- }
- }
+ if (*species == SPECIES_WYNAUT && motherItem != ITEM_LAX_INCENSE && fatherItem != ITEM_LAX_INCENSE)
+ *species = SPECIES_WOBBUFFET;
+ else if (*species == SPECIES_AZURILL && motherItem != ITEM_SEA_INCENSE && fatherItem != ITEM_SEA_INCENSE)
+ *species = SPECIES_MARILL;
+ #ifdef SPECIES_MUNCHLAX
+ else if (*species == SPECIES_MUNCHLAX && motherItem != ITEM_FULL_INCENSE && fatherItem != ITEM_FULL_INCENSE)
+ *species = SPECIES_SNORLAX;
+ #endif
+ #ifdef SPECIES_HAPPINY
+ else if (*species == SPECIES_HAPPINY && motherItem != ITEM_LUCK_INCENSE && fatherItem != ITEM_LUCK_INCENSE)
+ *species = SPECIES_CHANSEY;
+ #endif
+ #ifdef SPECIES_MIME_JR
+ else if (*species == SPECIES_MIME_JR && motherItem != ITEM_ODD_INCENSE && fatherItem != ITEM_ODD_INCENSE)
+ *species = SPECIES_MR_MIME;
+ #endif
+ #ifdef SPECIES_CHINGLING
+ else if (*species == SPECIES_CHINGLING && motherItem != ITEM_PURE_INCENSE && fatherItem != ITEM_PURE_INCENSE)
+ *species = SPECIES_CHIMECHO;
+ #endif
+ #ifdef SPECIES_BONSLY
+ else if (*species == SPECIES_BONSLY && motherItem != ITEM_ROCK_INCENSE && fatherItem != ITEM_ROCK_INCENSE)
+ *species = SPECIES_SUDOWOODO;
+ #endif
+ #ifdef SPECIES_BUDEW
+ else if (*species == SPECIES_BUDEW && motherItem != ITEM_ROSE_INCENSE && fatherItem != ITEM_ROSE_INCENSE)
+ *species = SPECIES_ROSELIA;
+ #endif
+ #ifdef SPECIES_MANTYKE
+ else if (*species == SPECIES_MANTYKE && motherItem != ITEM_WAVE_INCENSE && fatherItem != ITEM_WAVE_INCENSE)
+ *species = SPECIES_MANTINE;
+ #endif
}
static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *daycare)
@@ -912,7 +935,7 @@ static bool8 TryProduceOrHatchEgg(struct DayCare *daycare)
// Check if an egg should be produced
if (daycare->offspringPersonality == 0 && validEggs == DAYCARE_MON_COUNT && (daycare->mons[1].steps & 0xFF) == 0xFF)
{
- u8 compatibility = GetDaycareCompatibilityScore(daycare);
+ u8 compatibility = ModifyBreedingScoreForOvalCharm(GetDaycareCompatibilityScore(daycare));
if (compatibility > (Random() * 100u) / USHRT_MAX)
TriggerPendingDaycareEgg();
}
@@ -1278,7 +1301,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
else if (JOY_NEW(B_BUTTON))
{
@@ -1287,7 +1310,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
}
@@ -1320,3 +1343,22 @@ void ChooseSendDaycareMon(void)
ChooseMonForDaycare();
gMain.savedCallback = CB2_ReturnToField;
}
+
+static u8 ModifyBreedingScoreForOvalCharm(u8 score)
+{
+ if (CheckBagHasItem(ITEM_OVAL_CHARM, 1))
+ {
+ switch (score)
+ {
+ case 20:
+ return 40;
+ case 50:
+ return 80;
+ case 70:
+ return 88;
+ }
+ }
+
+ return score;
+}
+
diff --git a/src/decompress.c b/src/decompress.c
index d9d5f8c139..4f17edcf86 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -45,7 +45,7 @@ void LoadCompressedSpritePalette(const struct CompressedSpritePalette *src)
struct SpritePalette dest;
LZ77UnCompWram(src->data, gDecompressionBuffer);
- dest.data = (void*) gDecompressionBuffer;
+ dest.data = (void *) gDecompressionBuffer;
dest.tag = src->tag;
LoadSpritePalette(&dest);
}
@@ -60,7 +60,7 @@ void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePale
LoadSpritePalette(&dest);
}
-void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species)
+void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void *buffer, s32 species)
{
if (species > NUM_SPECIES)
LZ77UnCompWram(gMonFrontPicTable[0].data, buffer);
@@ -308,12 +308,12 @@ u32 GetDecompressedDataSize(const u32 *ptr)
return (ptr8[3] << 16) | (ptr8[2] << 8) | (ptr8[1]);
}
-bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src)
+bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet *src)
{
struct SpriteSheet dest;
- void* buffer;
+ void *buffer;
- buffer = AllocZeroed(*((u32*)(&src->data[0])) >> 8);
+ buffer = AllocZeroed(*((u32 *)(&src->data[0])) >> 8);
LZ77UnCompWram(src->data, buffer);
dest.data = buffer;
@@ -328,9 +328,9 @@ bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src
bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette *src)
{
struct SpritePalette dest;
- void* buffer;
+ void *buffer;
- buffer = AllocZeroed(*((u32*)(&src->data[0])) >> 8);
+ buffer = AllocZeroed(*((u32 *)(&src->data[0])) >> 8);
LZ77UnCompWram(src->data, buffer);
dest.data = buffer;
dest.tag = src->tag;
diff --git a/src/decoration.c b/src/decoration.c
index 547b05acf4..cc740f189e 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -563,7 +563,7 @@ static void AddDecorationActionsWindow(void)
static void InitDecorationActionsWindow(void)
{
sDecorationActionsCursorPos = 0;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
AddDecorationActionsWindow();
PrintCurMainMenuDescription();
}
@@ -615,7 +615,7 @@ static void HandleDecorationActionsMenuInput(u8 taskId)
static void PrintCurMainMenuDescription(void)
{
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sSecretBasePCMenuItemDescriptions[sDecorationActionsCursorPos], 0, 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sSecretBasePCMenuItemDescriptions[sDecorationActionsCursorPos], 0, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
static void DecorationMenuAction_Decorate(u8 taskId)
@@ -643,7 +643,7 @@ static void DecorationMenuAction_PutAway(u8 taskId)
else
{
RemoveDecorationWindow(WINDOW_MAIN_MENU);
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
FadeScreen(FADE_TO_BLACK, 0);
gTasks[taskId].tState = 0;
gTasks[taskId].func = Task_ContinuePuttingAwayDecorations;
@@ -670,7 +670,7 @@ static void DecorationMenuAction_Cancel(u8 taskId)
RemoveDecorationWindow(WINDOW_MAIN_MENU);
if (!sDecorationContext.isPlayerRoom)
{
- ScriptContext1_SetupScript(SecretBase_EventScript_PCCancel);
+ ScriptContext_SetupScript(SecretBase_EventScript_PCCancel);
DestroyTask(taskId);
}
else
@@ -688,7 +688,7 @@ static void ReturnToDecorationActionsAfterInvalidSelection(u8 taskId)
static void SecretBasePC_PrepMenuForSelectingStoredDecors(u8 taskId)
{
LoadPalette(sDecorationMenuPalette, 0xd0, 0x20);
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
RemoveDecorationWindow(WINDOW_MAIN_MENU);
InitDecorationCategoriesWindow(taskId);
}
@@ -810,7 +810,7 @@ static void SelectDecorationCategory(u8 taskId)
static void ReturnToDecorationCategoriesAfterInvalidSelection(u8 taskId)
{
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
InitDecorationCategoriesWindow(taskId);
}
@@ -834,7 +834,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId)
void ShowDecorationCategoriesWindow(u8 taskId)
{
LoadPalette(sDecorationMenuPalette, 0xd0, 0x20);
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
gTasks[taskId].tDecorationMenuCommand = DECOR_MENU_TRADE;
sCurDecorationCategory = DECORCAT_DESK;
InitDecorationCategoriesWindow(taskId);
@@ -1141,7 +1141,7 @@ static void Task_ShowDecorationItemsWindow(u8 taskId)
static void DontTossDecoration(u8 taskId)
{
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
gTasks[taskId].func = Task_ShowDecorationItemsWindow;
}
@@ -1149,7 +1149,7 @@ static void ReturnToDecorationItemsAfterInvalidSelection(u8 taskId)
{
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
AddDecorationWindow(WINDOW_DECORATION_CATEGORIES);
ShowDecorationItemsWindow(taskId);
}
@@ -1640,7 +1640,7 @@ static void PlaceDecorationPrompt(u8 taskId)
static void PlaceDecoration(u8 taskId)
{
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
PlaceDecoration_(taskId);
if (gDecorations[gCurDecorationItems[gCurDecorationIndex]].permission != DECORPERM_SPRITE)
{
@@ -1650,7 +1650,7 @@ static void PlaceDecoration(u8 taskId)
{
sCurDecorMapX = gTasks[taskId].tCursorX - MAP_OFFSET;
sCurDecorMapY = gTasks[taskId].tCursorY - MAP_OFFSET;
- ScriptContext1_SetupScript(SecretBase_EventScript_SetDecoration);
+ ScriptContext_SetupScript(SecretBase_EventScript_SetDecoration);
}
gSprites[sDecor_CameraSpriteObjectIdx1].y += 2;
@@ -1706,7 +1706,7 @@ static void CancelDecoratingPrompt(u8 taskId)
static void CancelDecorating(u8 taskId)
{
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
CancelDecorating_(taskId);
}
@@ -1722,7 +1722,7 @@ static void c1_overworld_prev_quest(u8 taskId)
switch (gTasks[taskId].tState)
{
case 0:
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
if (!gPaletteFade.active)
{
WarpToInitialPosition(taskId);
@@ -1749,11 +1749,11 @@ static void Task_InitDecorationItemsWindow(u8 taskId)
tState++;
break;
case 1:
- ScriptContext1_SetupScript(SecretBase_EventScript_InitDecorations);
+ ScriptContext_SetupScript(SecretBase_EventScript_InitDecorations);
tState++;
break;
case 2:
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
tState++;
break;
case 3:
@@ -1767,7 +1767,7 @@ static void FieldCB_InitDecorationItemsWindow(void)
{
u8 taskId;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeInFromBlack();
taskId = CreateTask(Task_InitDecorationItemsWindow, 8);
AddDecorationItemsWindow(taskId);
@@ -1891,7 +1891,7 @@ static void Task_SelectLocation(u8 taskId)
static void ContinueDecorating(u8 taskId)
{
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 0;
gTasks[taskId].tButton = 0;
gTasks[taskId].func = Task_SelectLocation;
@@ -1985,7 +1985,7 @@ static void SetDecorSelectionBoxOamAttributes(u8 decorShape)
sDecorSelectorOam.y = 0;
sDecorSelectorOam.affineMode = ST_OAM_AFFINE_OFF;
sDecorSelectorOam.objMode = ST_OAM_OBJ_NORMAL;
- sDecorSelectorOam.mosaic = 0;
+ sDecorSelectorOam.mosaic = FALSE;
sDecorSelectorOam.bpp = ST_OAM_4BPP;
sDecorSelectorOam.shape = sDecorationMovementInfo[decorShape].shape;
sDecorSelectorOam.x = 0;
@@ -2246,13 +2246,13 @@ static void Task_PutAwayDecoration(u8 taskId)
case 1:
if (!gPaletteFade.active) {
DrawWholeMapView();
- ScriptContext1_SetupScript(SecretBase_EventScript_PutAwayDecoration);
- ClearDialogWindowAndFrame(0, 1);
+ ScriptContext_SetupScript(SecretBase_EventScript_PutAwayDecoration);
+ ClearDialogWindowAndFrame(0, TRUE);
gTasks[taskId].tState = 2;
}
break;
case 2:
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
IdentifyOwnedDecorationsCurrentlyInUseInternal(taskId);
FadeInFromBlack();
gTasks[taskId].tState = 3;
@@ -2331,7 +2331,7 @@ static void Task_ContinuePuttingAwayDecorations(u8 taskId)
static void ContinuePuttingAwayDecorations(u8 taskId)
{
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 0;
gSprites[sDecor_CameraSpriteObjectIdx1].invisible = FALSE;
gSprites[sDecor_CameraSpriteObjectIdx1].callback = InitializeCameraSprite1;
@@ -2604,7 +2604,7 @@ static void StopPuttingAwayDecorationsPrompt(u8 taskId)
static void StopPuttingAwayDecorations(u8 taskId)
{
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
StopPuttingAwayDecorations_(taskId);
}
@@ -2645,11 +2645,11 @@ static void Task_ReinitializeDecorationMenuHandler(u8 taskId)
tState++;
break;
case 1:
- ScriptContext1_SetupScript(SecretBase_EventScript_InitDecorations);
+ ScriptContext_SetupScript(SecretBase_EventScript_InitDecorations);
tState++;
break;
case 2:
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
tState++;
break;
case 3:
diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c
index f887dafb95..f68f0446c3 100644
--- a/src/digit_obj_util.c
+++ b/src/digit_obj_util.c
@@ -138,7 +138,7 @@ bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemp
{
struct CompressedSpriteSheet compSpriteSheet;
- compSpriteSheet = *(struct CompressedSpriteSheet*)(template->spriteSheet);
+ compSpriteSheet = *(struct CompressedSpriteSheet *)(template->spriteSheet);
compSpriteSheet.size = GetDecompressedDataSize(template->spriteSheet->data);
sOamWork->array[id].tileStart = LoadCompressedSpriteSheet(&compSpriteSheet);
}
diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c
index b87fe3092b..11bf12925b 100644
--- a/src/dodrio_berry_picking.c
+++ b/src/dodrio_berry_picking.c
@@ -323,7 +323,7 @@ static bool32 TryPickBerry(u8, u8, u8);
static void UpdateFallingBerries(void);
static void UpdateGame_Leader(void);
static void UpdateGame_Member(void);
-static void GetActiveBerryColumns(u8, u8*, u8*);
+static void GetActiveBerryColumns(u8, u8 *, u8 *);
static bool32 AllPlayersReadyToStart(void);
static void ResetReadyToStart(void);
static bool32 ReadyToEndGame_Leader(void);
@@ -1795,7 +1795,7 @@ static void VBlankCB_DodrioGame(void)
ProcessSpriteCopyRequests();
}
-static void InitMonInfo(struct DodrioGame_MonInfo * monInfo, struct Pokemon * mon)
+static void InitMonInfo(struct DodrioGame_MonInfo * monInfo, struct Pokemon *mon)
{
monInfo->isShiny = IsMonShiny(mon);
}
@@ -2988,7 +2988,7 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId)
{
RemoveWindow(tWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
break;
}
@@ -3608,7 +3608,7 @@ static const struct OamData sOamData_Dodrio =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -3626,7 +3626,7 @@ static const struct OamData sOamData_16x16_Priority0 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -3643,7 +3643,7 @@ static const struct OamData sOamData_Berry =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -3660,7 +3660,7 @@ static const struct OamData sOamData_Cloud =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -5025,7 +5025,7 @@ static void Msg_SavingDontTurnOff(void)
{
case 0:
DrawDialogueFrame(0, FALSE);
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
sGfx->state++;
break;
case 1:
diff --git a/src/easy_chat.c b/src/easy_chat.c
index 2bbd16cb27..91b44fb26b 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -932,7 +932,7 @@ static const struct OamData sOamData_TriangleCursor = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -958,7 +958,7 @@ static const struct OamData sOamData_RectangleCursor = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -1019,7 +1019,7 @@ static const struct OamData sOamData_ModeWindow = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -1089,7 +1089,7 @@ static const struct OamData sOamData_ButtonWindow = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -1115,7 +1115,7 @@ static const struct OamData sOamData_StartSelectButton = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
@@ -1131,7 +1131,7 @@ static const struct OamData sOamData_ScrollIndicator = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 8c579e3730..e280ef315b 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -69,14 +69,14 @@ extern const u8 gText_NicknameHatchPrompt[];
static void Task_EggHatch(u8);
static void CB2_LoadEggHatch(void);
static void CB2_EggHatch(void);
-static void SpriteCB_Egg_Shake1(struct Sprite*);
-static void SpriteCB_Egg_Shake2(struct Sprite*);
-static void SpriteCB_Egg_Shake3(struct Sprite*);
-static void SpriteCB_Egg_WaitHatch(struct Sprite*);
-static void SpriteCB_Egg_Hatch(struct Sprite*);
-static void SpriteCB_Egg_Reveal(struct Sprite*);
-static void SpriteCB_EggShard(struct Sprite*);
-static void EggHatchPrintMessage(u8, u8*, u8, u8, u8);
+static void SpriteCB_Egg_Shake1(struct Sprite *);
+static void SpriteCB_Egg_Shake2(struct Sprite *);
+static void SpriteCB_Egg_Shake3(struct Sprite *);
+static void SpriteCB_Egg_WaitHatch(struct Sprite *);
+static void SpriteCB_Egg_Hatch(struct Sprite *);
+static void SpriteCB_Egg_Reveal(struct Sprite *);
+static void SpriteCB_EggShard(struct Sprite *);
+static void EggHatchPrintMessage(u8, u8 *, u8, u8, u8);
static void CreateRandomEggShardSprite(void);
static void CreateEggShardSprite(u8, u8, s16, s16, s16, u8);
@@ -91,7 +91,7 @@ static const struct OamData sOamData_Egg =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -178,7 +178,7 @@ static const struct OamData sOamData_EggShard =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -363,7 +363,7 @@ static void AddHatchedMonToParty(u8 id)
u16 ball;
u16 metLevel;
u8 metLocation;
- struct Pokemon* mon = &gPlayerParty[id];
+ struct Pokemon *mon = &gPlayerParty[id];
CreateHatchedMon(mon, &gEnemyParty[0]);
SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
@@ -420,11 +420,11 @@ bool8 CheckDaycareMonReceivedMail(void)
return _CheckDaycareMonReceivedMail(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
}
-static u8 EggHatchCreateMonSprite(u8 useAlt, u8 state, u8 partyId, u16* speciesLoc)
+static u8 EggHatchCreateMonSprite(u8 useAlt, u8 state, u8 partyId, u16 *speciesLoc)
{
u8 position = 0;
u8 spriteId = 0;
- struct Pokemon* mon = NULL;
+ struct Pokemon *mon = NULL;
if (useAlt == FALSE)
{
@@ -471,7 +471,7 @@ static void VBlankCB_EggHatch(void)
void EggHatch(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
CreateTask(Task_EggHatch, 10);
FadeScreen(FADE_TO_BLACK, 0);
}
@@ -728,7 +728,7 @@ static void CB2_EggHatch(void)
#define sSinIdx data[1]
#define sDelayTimer data[2]
-static void SpriteCB_Egg_Shake1(struct Sprite* sprite)
+static void SpriteCB_Egg_Shake1(struct Sprite *sprite)
{
if (++sprite->sTimer > 20)
{
@@ -750,7 +750,7 @@ static void SpriteCB_Egg_Shake1(struct Sprite* sprite)
}
}
-static void SpriteCB_Egg_Shake2(struct Sprite* sprite)
+static void SpriteCB_Egg_Shake2(struct Sprite *sprite)
{
if (++sprite->sDelayTimer > 30)
{
@@ -775,7 +775,7 @@ static void SpriteCB_Egg_Shake2(struct Sprite* sprite)
}
}
-static void SpriteCB_Egg_Shake3(struct Sprite* sprite)
+static void SpriteCB_Egg_Shake3(struct Sprite *sprite)
{
if (++sprite->sDelayTimer > 30)
{
@@ -813,7 +813,7 @@ static void SpriteCB_Egg_Shake3(struct Sprite* sprite)
}
}
-static void SpriteCB_Egg_WaitHatch(struct Sprite* sprite)
+static void SpriteCB_Egg_WaitHatch(struct Sprite *sprite)
{
if (++sprite->sTimer > 50)
{
@@ -822,7 +822,7 @@ static void SpriteCB_Egg_WaitHatch(struct Sprite* sprite)
}
}
-static void SpriteCB_Egg_Hatch(struct Sprite* sprite)
+static void SpriteCB_Egg_Hatch(struct Sprite *sprite)
{
s16 i;
@@ -849,7 +849,7 @@ static void SpriteCB_Egg_Hatch(struct Sprite* sprite)
}
}
-static void SpriteCB_Egg_Reveal(struct Sprite* sprite)
+static void SpriteCB_Egg_Reveal(struct Sprite *sprite)
{
if (sprite->sTimer == 0)
{
@@ -877,7 +877,7 @@ static void SpriteCB_Egg_Reveal(struct Sprite* sprite)
#define sDeltaX data[4]
#define sDeltaY data[5]
-static void SpriteCB_EggShard(struct Sprite* sprite)
+static void SpriteCB_EggShard(struct Sprite *sprite)
{
sprite->sDeltaX += sprite->sVelocX;
sprite->sDeltaY += sprite->sVelocY;
@@ -914,7 +914,7 @@ static void CreateEggShardSprite(u8 x, u8 y, s16 velocityX, s16 velocityY, s16 a
StartSpriteAnim(&gSprites[spriteId], spriteAnimIndex);
}
-static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed)
+static void EggHatchPrintMessage(u8 windowId, u8 *string, u8 x, u8 y, u8 speed)
{
FillWindowPixelBuffer(windowId, PIXEL_FILL(15));
sEggHatchData->textColor[0] = 0;
@@ -930,8 +930,10 @@ u8 GetEggCyclesToSubtract(void)
{
if (!GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG))
{
- u8 ability = GetMonAbility(&gPlayerParty[i]);
- if (ability == ABILITY_MAGMA_ARMOR || ability == ABILITY_FLAME_BODY)
+ u16 ability = GetMonAbility(&gPlayerParty[i]);
+ if (ability == ABILITY_MAGMA_ARMOR
+ || ability == ABILITY_FLAME_BODY
+ || ability == ABILITY_STEAM_ENGINE)
return 2;
}
}
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index 314fb17342..aaaaf00eeb 100755
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -15,7 +15,8 @@
#include "constants/items.h"
#include "constants/trainer_hill.h"
-STATIC_ASSERT(sizeof(struct TrainerHillChallenge) <= SECTOR_DATA_SIZE, TrainerHillChallengeFreeSpace);
+// Save data using TryWriteSpecialSaveSector is allowed to exceed SECTOR_DATA_SIZE (up to the counter field)
+STATIC_ASSERT(sizeof(struct TrainerHillChallenge) <= SECTOR_COUNTER_OFFSET, TrainerHillChallengeFreeSpace);
struct SendRecvMgr
{
@@ -472,7 +473,7 @@ bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet * hillSet)
return result;
}
-static bool32 TryReadTrainerHill_Internal(struct EReaderTrainerHillSet * dest, u8 * buffer)
+static bool32 TryReadTrainerHill_Internal(struct EReaderTrainerHillSet * dest, u8 *buffer)
{
if (TryReadSpecialSaveSector(SECTOR_ID_TRAINER_HILL, buffer) != SAVE_STATUS_OK)
return FALSE;
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index a22b85babd..3baff84a85 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -397,8 +397,8 @@ static void Task_EReader(u8 taskId)
break;
case ER_STATE_CONNECTING:
AddTextPrinterToWindow1(gJPText_Connecting);
- // XXX: This (u32*) cast is discarding the const qualifier from gMultiBootProgram_EReader_Start
- EReader_Load(&gEReaderData, gMultiBootProgram_EReader_End - gMultiBootProgram_EReader_Start, (u32*)gMultiBootProgram_EReader_Start);
+ // XXX: This (u32 *) cast is discarding the const qualifier from gMultiBootProgram_EReader_Start
+ EReader_Load(&gEReaderData, gMultiBootProgram_EReader_End - gMultiBootProgram_EReader_Start, (u32 *)gMultiBootProgram_EReader_Start);
data->state = ER_STATE_TRANSFER;
break;
case ER_STATE_TRANSFER:
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 90e713e638..87249af010 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -93,33 +93,33 @@ static bool8 IsMetatileDirectionallyImpassable(struct ObjectEvent *, s16, s16, u
static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *, s16, s16);
static void UpdateObjectEventOffscreen(struct ObjectEvent *, struct Sprite *);
static void UpdateObjectEventSpriteVisibility(struct ObjectEvent *, struct Sprite *);
-static void ObjectEventUpdateMetatileBehaviors(struct ObjectEvent*);
-static void GetGroundEffectFlags_Reflection(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_TallGrassOnSpawn(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_LongGrassOnSpawn(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_SandHeap(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_ShortGrass(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_HotSprings(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_TallGrassOnBeginStep(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_Tracks(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_Puddle(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_Ripple(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_Seaweed(struct ObjectEvent*, u32*);
-static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent*, u32*);
-static u8 ObjectEventGetNearbyReflectionType(struct ObjectEvent*);
+static void ObjectEventUpdateMetatileBehaviors(struct ObjectEvent *);
+static void GetGroundEffectFlags_Reflection(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_TallGrassOnSpawn(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_LongGrassOnSpawn(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_SandHeap(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_ShortGrass(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_HotSprings(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_TallGrassOnBeginStep(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_Tracks(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_Puddle(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_Ripple(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_Seaweed(struct ObjectEvent *, u32 *);
+static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent *, u32 *);
+static u8 ObjectEventGetNearbyReflectionType(struct ObjectEvent *);
static u8 GetReflectionTypeByMetatileBehavior(u32);
static void InitObjectPriorityByElevation(struct Sprite *, u8);
-static void ObjectEventUpdateSubpriority(struct ObjectEvent*, struct Sprite*);
-static void DoTracksGroundEffect_None(struct ObjectEvent*, struct Sprite*, u8);
-static void DoTracksGroundEffect_Footprints(struct ObjectEvent*, struct Sprite*, u8);
-static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent*, struct Sprite*, u8);
-static void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
-static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*);
-static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*);
-static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*);
-static void VirtualObject_UpdateAnim(struct Sprite*);
+static void ObjectEventUpdateSubpriority(struct ObjectEvent *, struct Sprite *);
+static void DoTracksGroundEffect_None(struct ObjectEvent *, struct Sprite *, u8);
+static void DoTracksGroundEffect_Footprints(struct ObjectEvent *, struct Sprite *, u8);
+static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *, struct Sprite *, u8);
+static void DoRippleFieldEffect(struct ObjectEvent *, struct Sprite *);
+static void DoGroundEffects_OnSpawn(struct ObjectEvent *, struct Sprite *);
+static void DoGroundEffects_OnBeginStep(struct ObjectEvent *, struct Sprite *);
+static void DoGroundEffects_OnFinishStep(struct ObjectEvent *, struct Sprite *);
+static void VirtualObject_UpdateAnim(struct Sprite *);
static void ApplyLevitateMovement(u8);
static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *);
static bool8 MovementType_Buried_Callback(struct ObjectEvent *, struct Sprite *);
@@ -1911,9 +1911,9 @@ void SetObjectInvisibility(u8 localId, u8 mapNum, u8 mapGroup, bool8 invisible)
void ObjectEventGetLocalIdAndMap(struct ObjectEvent *objectEvent, void *localId, void *mapNum, void *mapGroup)
{
- *(u8*)(localId) = objectEvent->localId;
- *(u8*)(mapNum) = objectEvent->mapNum;
- *(u8*)(mapGroup) = objectEvent->mapGroup;
+ *(u8 *)(localId) = objectEvent->localId;
+ *(u8 *)(mapNum) = objectEvent->mapNum;
+ *(u8 *)(mapGroup) = objectEvent->mapGroup;
}
void AllowObjectAtPosTriggerGroundEffects(s16 x, s16 y)
@@ -4630,7 +4630,7 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir)
u8 direction = dir;
if (IsCoordOutsideObjectEventMovementRange(objectEvent, x, y))
return COLLISION_OUTSIDE_RANGE;
- else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == CONNECTION_INVALID || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction))
+ else if (MapGridGetCollisionAt(x, y) || GetMapBorderIdAt(x, y) == CONNECTION_INVALID || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction))
return COLLISION_IMPASSABLE;
else if (objectEvent->trackedByCamera && !CanCameraMoveInDirection(direction))
return COLLISION_IMPASSABLE;
@@ -4647,7 +4647,7 @@ u8 GetCollisionFlagsAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 d
if (IsCoordOutsideObjectEventMovementRange(objectEvent, x, y))
flags |= 1 << (COLLISION_OUTSIDE_RANGE - 1);
- if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == CONNECTION_INVALID || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction) || (objectEvent->trackedByCamera && !CanCameraMoveInDirection(direction)))
+ if (MapGridGetCollisionAt(x, y) || GetMapBorderIdAt(x, y) == CONNECTION_INVALID || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction) || (objectEvent->trackedByCamera && !CanCameraMoveInDirection(direction)))
flags |= 1 << (COLLISION_IMPASSABLE - 1);
if (IsElevationMismatchAt(objectEvent->currentElevation, x, y))
flags |= 1 << (COLLISION_ELEVATION_MISMATCH - 1);
@@ -8746,13 +8746,13 @@ static void DoRippleFieldEffect(struct ObjectEvent *objectEvent, struct Sprite *
FieldEffectStart(FLDEFF_RIPPLE);
}
-u8 (*const gMovementActionFuncs_StoreAndLockAnim[])(struct ObjectEvent *, struct Sprite *) = {
- MovementAction_StoreAndLockAnim_Step0,
+u8 (*const gMovementActionFuncs_LockAnim[])(struct ObjectEvent *, struct Sprite *) = {
+ MovementAction_LockAnim_Step0,
MovementAction_Finish,
};
-u8 (*const gMovementActionFuncs_FreeAndUnlockAnim[])(struct ObjectEvent *, struct Sprite *) = {
- MovementAction_FreeAndUnlockAnim_Step0,
+u8 (*const gMovementActionFuncs_UnlockAnim[])(struct ObjectEvent *, struct Sprite *) = {
+ MovementAction_UnlockAnim_Step0,
MovementAction_Finish,
};
@@ -8768,36 +8768,36 @@ u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite *
MovementAction_Fly_Finish,
};
-u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+u8 MovementAction_LockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
bool32 ableToStore = FALSE;
if (sLockedAnimObjectEvents == NULL)
{
sLockedAnimObjectEvents = AllocZeroed(sizeof(struct LockedAnimObjectEvents));
- sLockedAnimObjectEvents->objectEventIds[0] = objectEvent->localId;
+ sLockedAnimObjectEvents->localIds[0] = objectEvent->localId;
sLockedAnimObjectEvents->count = 1;
ableToStore = TRUE;
}
else
{
u8 i;
- u8 firstFreeSlot;
- bool32 found;
- for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++)
+ u8 firstFreeSlot = OBJECT_EVENTS_COUNT;
+ bool32 found = FALSE;
+ for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
- if (firstFreeSlot == 16 && sLockedAnimObjectEvents->objectEventIds[i] == 0)
+ if (firstFreeSlot == OBJECT_EVENTS_COUNT && sLockedAnimObjectEvents->localIds[i] == 0)
firstFreeSlot = i;
- if (sLockedAnimObjectEvents->objectEventIds[i] == objectEvent->localId)
+ if (sLockedAnimObjectEvents->localIds[i] == objectEvent->localId)
{
found = TRUE;
break;
}
}
- if (!found && firstFreeSlot != 16)
+ if (!found && firstFreeSlot != OBJECT_EVENTS_COUNT)
{
- sLockedAnimObjectEvents->objectEventIds[firstFreeSlot] = objectEvent->localId;
+ sLockedAnimObjectEvents->localIds[firstFreeSlot] = objectEvent->localId;
sLockedAnimObjectEvents->count++;
ableToStore = TRUE;
}
@@ -8813,7 +8813,7 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct
return TRUE;
}
-u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+u8 MovementAction_UnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
bool32 ableToStore;
u8 index;
@@ -8823,9 +8823,9 @@ u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struc
{
ableToStore = FALSE;
index = FindLockedObjectEventIndex(objectEvent);
- if (index != 16)
+ if (index != OBJECT_EVENTS_COUNT)
{
- sLockedAnimObjectEvents->objectEventIds[index] = 0;
+ sLockedAnimObjectEvents->localIds[index] = 0;
sLockedAnimObjectEvents->count--;
ableToStore = TRUE;
}
@@ -8848,7 +8848,7 @@ u8 FindLockedObjectEventIndex(struct ObjectEvent *objectEvent)
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
- if (sLockedAnimObjectEvents->objectEventIds[i] == objectEvent->localId)
+ if (sLockedAnimObjectEvents->localIds[i] == objectEvent->localId)
return i;
}
return OBJECT_EVENTS_COUNT;
diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c
index a6b558195b..a86f16201f 100644
--- a/src/evolution_graphics.c
+++ b/src/evolution_graphics.c
@@ -10,7 +10,7 @@
#include "palette.h"
#include "constants/rgb.h"
-static void SpriteCB_Sparkle_Dummy(struct Sprite* sprite);
+static void SpriteCB_Sparkle_Dummy(struct Sprite *sprite);
static void Task_Sparkles_SpiralUpward_Init(u8 taskId);
static void Task_Sparkles_SpiralUpward(u8 taskId);
@@ -58,7 +58,7 @@ static const struct OamData sOamData_EvoSparkle =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -127,7 +127,7 @@ static void SetEvoSparklesMatrices(void)
#define sTrigIdx data[6]
#define sTimer data[7]
-static void SpriteCB_Sparkle_SpiralUpward(struct Sprite* sprite)
+static void SpriteCB_Sparkle_SpiralUpward(struct Sprite *sprite)
{
if (sprite->y > 8)
{
@@ -167,7 +167,7 @@ static void CreateSparkle_SpiralUpward(u8 trigIdx)
}
}
-static void SpriteCB_Sparkle_ArcDown(struct Sprite* sprite)
+static void SpriteCB_Sparkle_ArcDown(struct Sprite *sprite)
{
if (sprite->y < 88)
{
@@ -196,7 +196,7 @@ static void CreateSparkle_ArcDown(u8 trigIdx)
}
}
-static void SpriteCB_Sparkle_CircleInward(struct Sprite* sprite)
+static void SpriteCB_Sparkle_CircleInward(struct Sprite *sprite)
{
if (sprite->sAmplitude > 8)
{
@@ -225,7 +225,7 @@ static void CreateSparkle_CircleInward(u8 trigIdx, u8 speed)
}
}
-static void SpriteCB_Sparkle_Spray(struct Sprite* sprite)
+static void SpriteCB_Sparkle_Spray(struct Sprite *sprite)
{
if (!(sprite->sTimer & 3))
sprite->y++;
@@ -492,7 +492,7 @@ static void Task_Sparkles_SprayAndFlashTrade(u8 taskId)
#undef tTimer
#undef tSpecies
-static void SpriteCB_EvolutionMonSprite(struct Sprite* sprite)
+static void SpriteCB_EvolutionMonSprite(struct Sprite *sprite)
{
}
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index a380170264..c9c2641c67 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -171,7 +171,7 @@ static void CB2_BeginEvolutionScene(void)
static void Task_BeginEvolutionScene(u8 taskId)
{
- struct Pokemon* mon = NULL;
+ struct Pokemon *mon = NULL;
switch (gTasks[taskId].tState)
{
case 0:
@@ -197,7 +197,7 @@ static void Task_BeginEvolutionScene(u8 taskId)
}
}
-void BeginEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId)
+void BeginEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId)
{
u8 taskId = CreateTask(Task_BeginEvolutionScene, 0);
gTasks[taskId].tState = 0;
@@ -207,17 +207,17 @@ void BeginEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopE
SetMainCallback2(CB2_BeginEvolutionScene);
}
-void EvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId)
+void EvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, bool8 canStopEvo, u8 partyId)
{
u8 name[20];
u16 currSpecies;
u32 trainerId, personality;
const struct CompressedSpritePalette* pokePal;
- u8 ID;
+ u8 id;
SetHBlankCallback(NULL);
SetVBlankCallback(NULL);
- CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+ CpuFill32(0, (void *)(VRAM), VRAM_SIZE);
SetGpuReg(REG_OFFSET_MOSAIC, 0);
SetGpuReg(REG_OFFSET_WIN0H, 0);
@@ -268,11 +268,11 @@ void EvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u
SetMultiuseSpriteTemplateToPokemon(currSpecies, B_POSITION_OPPONENT_LEFT);
gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->preEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+ sEvoStructPtr->preEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
- gSprites[ID].callback = SpriteCallbackDummy_2;
- gSprites[ID].oam.paletteNum = 1;
- gSprites[ID].invisible = TRUE;
+ gSprites[id].callback = SpriteCallbackDummy_2;
+ gSprites[id].oam.paletteNum = 1;
+ gSprites[id].invisible = TRUE;
// postEvo sprite
DecompressPicFromTableGender(gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT],
@@ -283,21 +283,21 @@ void EvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u
SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_RIGHT);
gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->postEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
- gSprites[ID].callback = SpriteCallbackDummy_2;
- gSprites[ID].oam.paletteNum = 2;
- gSprites[ID].invisible = TRUE;
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+ gSprites[id].callback = SpriteCallbackDummy_2;
+ gSprites[id].oam.paletteNum = 2;
+ gSprites[id].invisible = TRUE;
LoadEvoSparkleSpriteAndPal();
- sEvoStructPtr->evoTaskId = ID = CreateTask(Task_EvolutionScene, 0);
- gTasks[ID].tState = 0;
- gTasks[ID].tPreEvoSpecies = currSpecies;
- gTasks[ID].tPostEvoSpecies = postEvoSpecies;
- gTasks[ID].tCanStop = canStopEvo;
- gTasks[ID].tLearnsFirstMove = TRUE;
- gTasks[ID].tEvoWasStopped = FALSE;
- gTasks[ID].tPartyId = partyId;
+ sEvoStructPtr->evoTaskId = id = CreateTask(Task_EvolutionScene, 0);
+ gTasks[id].tState = 0;
+ gTasks[id].tPreEvoSpecies = currSpecies;
+ gTasks[id].tPostEvoSpecies = postEvoSpecies;
+ gTasks[id].tCanStop = canStopEvo;
+ gTasks[id].tLearnsFirstMove = TRUE;
+ gTasks[id].tEvoWasStopped = FALSE;
+ gTasks[id].tPartyId = partyId;
memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[0x20], sizeof(sEvoStructPtr->savedPalette));
@@ -311,11 +311,11 @@ void EvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, bool8 canStopEvo, u
static void CB2_EvolutionSceneLoadGraphics(void)
{
- u8 ID;
+ u8 id;
const struct CompressedSpritePalette* pokePal;
u16 postEvoSpecies;
u32 trainerId, personality;
- struct Pokemon* mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId];
+ struct Pokemon *mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId];
postEvoSpecies = gTasks[sEvoStructPtr->evoTaskId].tPostEvoSpecies;
trainerId = GetMonData(mon, MON_DATA_OT_ID);
@@ -323,7 +323,7 @@ static void CB2_EvolutionSceneLoadGraphics(void)
SetHBlankCallback(NULL);
SetVBlankCallback(NULL);
- CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+ CpuFill32(0, (void *)(VRAM), VRAM_SIZE);
SetGpuReg(REG_OFFSET_MOSAIC, 0);
SetGpuReg(REG_OFFSET_WIN0H, 0);
@@ -361,10 +361,10 @@ static void CB2_EvolutionSceneLoadGraphics(void)
SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_RIGHT);
gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->postEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
- gSprites[ID].callback = SpriteCallbackDummy_2;
- gSprites[ID].oam.paletteNum = 2;
+ gSprites[id].callback = SpriteCallbackDummy_2;
+ gSprites[id].oam.paletteNum = 2;
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP);
@@ -382,7 +382,7 @@ static void CB2_EvolutionSceneLoadGraphics(void)
static void CB2_TradeEvolutionSceneLoadGraphics(void)
{
- struct Pokemon* mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId];
+ struct Pokemon *mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId];
u16 postEvoSpecies = gTasks[sEvoStructPtr->evoTaskId].tPostEvoSpecies;
switch (gMain.state)
@@ -411,7 +411,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
gMain.state++;
break;
case 2:
- InitTradeBg();
+ LoadTradeAnimGfx();
gMain.state++;
break;
case 3:
@@ -434,14 +434,14 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
break;
case 5:
{
- u8 ID;
+ u8 id;
SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_LEFT);
gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->postEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
- gSprites[ID].callback = SpriteCallbackDummy_2;
- gSprites[ID].oam.paletteNum = 2;
+ gSprites[id].callback = SpriteCallbackDummy_2;
+ gSprites[id].oam.paletteNum = 2;
gMain.state++;
LinkTradeDrawWindow();
}
@@ -452,7 +452,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
}
- BlendPalettes(PALETTES_ALL, 0x10, 0);
+ BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK);
gMain.state++;
break;
case 7:
@@ -466,13 +466,13 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
}
}
-void TradeEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, u8 preEvoSpriteId, u8 partyId)
+void TradeEvolutionScene(struct Pokemon *mon, u16 postEvoSpecies, u8 preEvoSpriteId, u8 partyId)
{
u8 name[20];
u16 currSpecies;
u32 trainerId, personality;
const struct CompressedSpritePalette* pokePal;
- u8 ID;
+ u8 id;
GetMonData(mon, MON_DATA_NICKNAME, name);
StringCopy_Nickname(gStringVar1, name);
@@ -497,21 +497,21 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, u8 preEvoSprit
SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, B_POSITION_OPPONENT_LEFT);
gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->postEvoSpriteId = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
- gSprites[ID].callback = SpriteCallbackDummy_2;
- gSprites[ID].oam.paletteNum = 2;
- gSprites[ID].invisible = TRUE;
+ gSprites[id].callback = SpriteCallbackDummy_2;
+ gSprites[id].oam.paletteNum = 2;
+ gSprites[id].invisible = TRUE;
LoadEvoSparkleSpriteAndPal();
- sEvoStructPtr->evoTaskId = ID = CreateTask(Task_TradeEvolutionScene, 0);
- gTasks[ID].tState = 0;
- gTasks[ID].tPreEvoSpecies = currSpecies;
- gTasks[ID].tPostEvoSpecies = postEvoSpecies;
- gTasks[ID].tLearnsFirstMove = TRUE;
- gTasks[ID].tEvoWasStopped = FALSE;
- gTasks[ID].tPartyId = partyId;
+ sEvoStructPtr->evoTaskId = id = CreateTask(Task_TradeEvolutionScene, 0);
+ gTasks[id].tState = 0;
+ gTasks[id].tPreEvoSpecies = currSpecies;
+ gTasks[id].tPostEvoSpecies = postEvoSpecies;
+ gTasks[id].tLearnsFirstMove = TRUE;
+ gTasks[id].tEvoWasStopped = FALSE;
+ gTasks[id].tPartyId = partyId;
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -522,7 +522,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 postEvoSpecies, u8 preEvoSprit
gBattle_BG3_X = 256;
gBattle_BG3_Y = 0;
- gTextFlags.useAlternateDownArrow = 1;
+ gTextFlags.useAlternateDownArrow = TRUE;
SetVBlankCallback(VBlankCB_TradeEvolutionScene);
SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
@@ -546,7 +546,7 @@ static void CB2_TradeEvolutionSceneUpdate(void)
RunTasks();
}
-static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon)
+static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon)
{
u32 data = 0;
u16 ball = ITEM_POKE_BALL;
@@ -554,7 +554,7 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon)
&& (P_SHEDINJA_BALL == GEN_3 || CheckBagHasItem(ball, 1)))
{
s32 i;
- struct Pokemon* shedinja = &gPlayerParty[gPlayerPartyCount];
+ struct Pokemon *shedinja = &gPlayerParty[gPlayerPartyCount];
CopyMon(&gPlayerParty[gPlayerPartyCount], mon, sizeof(struct Pokemon));
SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, &gEvolutionTable[preEvoSpecies][1].targetSpecies);
@@ -640,7 +640,7 @@ enum {
static void Task_EvolutionScene(u8 taskId)
{
u32 var;
- struct Pokemon* mon = &gPlayerParty[gTasks[taskId].tPartyId];
+ struct Pokemon *mon = &gPlayerParty[gTasks[taskId].tPartyId];
// check if B Button was held, so the evolution gets stopped
if (gMain.heldKeys == B_BUTTON
@@ -769,7 +769,7 @@ static void Task_EvolutionScene(u8 taskId)
BattlePutTextOnWindow(gStringVar4, B_WIN_MSG);
PlayBGM(MUS_EVOLVED);
gTasks[taskId].tState++;
- SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskId].tPostEvoSpecies));
+ SetMonData(mon, MON_DATA_SPECIES, (void *)(&gTasks[taskId].tPostEvoSpecies));
CalculateMonStats(mon);
EvolutionRenameMon(mon, gTasks[taskId].tPreEvoSpecies, gTasks[taskId].tPostEvoSpecies);
GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_SEEN);
@@ -847,9 +847,9 @@ static void Task_EvolutionScene(u8 taskId)
case EVOSTATE_CANCEL_MSG:
if (EvoScene_IsMonAnimFinished(sEvoStructPtr->preEvoSpriteId))
{
- if (gTasks[taskId].tEvoWasStopped)
+ if (gTasks[taskId].tEvoWasStopped) // FRLG auto cancellation
StringExpandPlaceholders(gStringVar4, gText_EllipsisQuestionMark);
- else // Fire Red leftover probably
+ else
StringExpandPlaceholders(gStringVar4, gText_PkmnStoppedEvolving);
BattlePutTextOnWindow(gStringVar4, B_WIN_MSG);
@@ -907,7 +907,7 @@ static void Task_EvolutionScene(u8 taskId)
case MVSTATE_PRINT_YES_NO:
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
- HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
+ HandleBattleWindow(YESNOBOX_X_Y, 0);
BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO);
gTasks[taskId].tLearnMoveState++;
sEvoCursorPos = 0;
@@ -936,7 +936,7 @@ static void Task_EvolutionScene(u8 taskId)
}
if (JOY_NEW(A_BUTTON))
{
- HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
PlaySE(SE_SELECT);
if (sEvoCursorPos != 0)
@@ -955,7 +955,7 @@ static void Task_EvolutionScene(u8 taskId)
if (JOY_NEW(B_BUTTON))
{
// Equivalent to selecting NO
- HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR);
PlaySE(SE_SELECT);
gTasks[taskId].tLearnMoveState = gTasks[taskId].tLearnMoveNoState;
}
@@ -1089,7 +1089,7 @@ enum {
static void Task_TradeEvolutionScene(u8 taskId)
{
u32 var = 0;
- struct Pokemon* mon = &gPlayerParty[gTasks[taskId].tPartyId];
+ struct Pokemon *mon = &gPlayerParty[gTasks[taskId].tPartyId];
switch (gTasks[taskId].tState)
{
@@ -1231,7 +1231,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
{
DestroyTask(taskId);
FREE_AND_SET_NULL(sEvoStructPtr);
- gTextFlags.useAlternateDownArrow = 0;
+ gTextFlags.useAlternateDownArrow = FALSE;
SetMainCallback2(gCB2_AfterEvolution);
}
break;
@@ -1652,7 +1652,7 @@ static void PauseBgPaletteAnim(void)
if (taskId != TASK_NONE)
gTasks[taskId].tPaused = TRUE;
- FillPalette(0, 0xA0, 0x20);
+ FillPalette(RGB_BLACK, 0xA0, 0x20);
}
#undef tPaused
@@ -1666,7 +1666,7 @@ static void StopBgAnimation(void)
if ((taskId = FindTaskIdByFunc(Task_AnimateBg)) != TASK_NONE)
DestroyTask(taskId);
- FillPalette(0, 0xA0, 0x20);
+ FillPalette(RGB_BLACK, 0xA0, 0x20);
RestoreBgAfterAnim();
}
diff --git a/src/faraway_island.c b/src/faraway_island.c
index 9ddb66de5c..4f34cf30e6 100755
--- a/src/faraway_island.c
+++ b/src/faraway_island.c
@@ -10,10 +10,10 @@
#include "constants/metatile_behaviors.h"
static u8 GetValidMewMoveDirection(u8);
-static bool8 ShouldMewMoveNorth(struct ObjectEvent*, u8);
-static bool8 ShouldMewMoveSouth(struct ObjectEvent*, u8);
-static bool8 ShouldMewMoveEast(struct ObjectEvent*, u8);
-static bool8 ShouldMewMoveWest(struct ObjectEvent*, u8);
+static bool8 ShouldMewMoveNorth(struct ObjectEvent *, u8);
+static bool8 ShouldMewMoveSouth(struct ObjectEvent *, u8);
+static bool8 ShouldMewMoveEast(struct ObjectEvent *, u8);
+static bool8 ShouldMewMoveWest(struct ObjectEvent *, u8);
static u8 GetRandomMewDirectionCandidate(u8);
static bool8 CanMewMoveToCoords(s16, s16);
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index cdb0db6d14..2ba4c29cd0 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -43,8 +43,8 @@ u8 gSelectedObjectEvent;
static void GetPlayerPosition(struct MapPosition *);
static void GetInFrontOfPlayerPosition(struct MapPosition *);
static u16 GetPlayerCurMetatileBehavior(int);
-static bool8 TryStartInteractionScript(struct MapPosition*, u16, u8);
-static const u8 *GetInteractionScript(struct MapPosition*, u8, u8);
+static bool8 TryStartInteractionScript(struct MapPosition *, u16, u8);
+static const u8 *GetInteractionScript(struct MapPosition *, u8, u8);
static const u8 *GetInteractedObjectEventScript(struct MapPosition *, u8, u8);
static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *, u8, u8);
static const u8 *GetInteractedMetatileScript(struct MapPosition *, u8, u8);
@@ -233,7 +233,7 @@ static bool8 TryStartInteractionScript(struct MapPosition *position, u16 metatil
&& script != EventScript_PC)
PlaySE(SE_SELECT);
- ScriptContext1_SetupScript(script);
+ ScriptContext_SetupScript(script);
return TRUE;
}
@@ -464,7 +464,7 @@ static bool32 TrySetupDiveDownScript(void)
{
if (FlagGet(FLAG_BADGE07_GET) && TrySetDiveWarp() == 2)
{
- ScriptContext1_SetupScript(EventScript_UseDive);
+ ScriptContext_SetupScript(EventScript_UseDive);
return TRUE;
}
return FALSE;
@@ -474,7 +474,7 @@ static bool32 TrySetupDiveEmergeScript(void)
{
if (FlagGet(FLAG_BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && TrySetDiveWarp() == 1)
{
- ScriptContext1_SetupScript(EventScript_UseDiveUnderwater);
+ ScriptContext_SetupScript(EventScript_UseDiveUnderwater);
return TRUE;
}
return FALSE;
@@ -501,7 +501,7 @@ static bool8 TryStartCoordEventScript(struct MapPosition *position)
if (script == NULL)
return FALSE;
- ScriptContext1_SetupScript(script);
+ ScriptContext_SetupScript(script);
return TRUE;
}
@@ -511,12 +511,12 @@ static bool8 TryStartMiscWalkingScripts(u16 metatileBehavior)
if (MetatileBehavior_IsCrackedFloorHole(metatileBehavior))
{
- ScriptContext1_SetupScript(EventScript_FallDownHole);
+ ScriptContext_SetupScript(EventScript_FallDownHole);
return TRUE;
}
else if (MetatileBehavior_IsBattlePyramidWarp(metatileBehavior))
{
- ScriptContext1_SetupScript(BattlePyramid_WarpToNextFloor);
+ ScriptContext_SetupScript(BattlePyramid_WarpToNextFloor);
return TRUE;
}
else if (MetatileBehavior_IsSecretBaseGlitterMat(metatileBehavior) == TRUE)
@@ -548,48 +548,48 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
{
if (UpdatePoisonStepCounter() == TRUE)
{
- ScriptContext1_SetupScript(EventScript_FieldPoison);
+ ScriptContext_SetupScript(EventScript_FieldPoison);
return TRUE;
}
if (ShouldEggHatch())
{
IncrementGameStat(GAME_STAT_HATCHED_EGGS);
- ScriptContext1_SetupScript(EventScript_EggHatch);
+ ScriptContext_SetupScript(EventScript_EggHatch);
return TRUE;
}
if (AbnormalWeatherHasExpired() == TRUE)
{
- ScriptContext1_SetupScript(AbnormalWeather_EventScript_EndEventAndCleanup_1);
+ ScriptContext_SetupScript(AbnormalWeather_EventScript_EndEventAndCleanup_1);
return TRUE;
}
if (ShouldDoBrailleRegicePuzzle() == TRUE)
{
- ScriptContext1_SetupScript(IslandCave_EventScript_OpenRegiEntrance);
+ ScriptContext_SetupScript(IslandCave_EventScript_OpenRegiEntrance);
return TRUE;
}
if (ShouldDoWallyCall() == TRUE)
{
- ScriptContext1_SetupScript(MauvilleCity_EventScript_RegisterWallyCall);
+ ScriptContext_SetupScript(MauvilleCity_EventScript_RegisterWallyCall);
return TRUE;
}
if (ShouldDoScottFortreeCall() == TRUE)
{
- ScriptContext1_SetupScript(Route119_EventScript_ScottWonAtFortreeGymCall);
+ ScriptContext_SetupScript(Route119_EventScript_ScottWonAtFortreeGymCall);
return TRUE;
}
if (ShouldDoScottBattleFrontierCall() == TRUE)
{
- ScriptContext1_SetupScript(LittlerootTown_ProfessorBirchsLab_EventScript_ScottAboardSSTidalCall);
+ ScriptContext_SetupScript(LittlerootTown_ProfessorBirchsLab_EventScript_ScottAboardSSTidalCall);
return TRUE;
}
if (ShouldDoRoxanneCall() == TRUE)
{
- ScriptContext1_SetupScript(RustboroCity_Gym_EventScript_RegisterRoxanne);
+ ScriptContext_SetupScript(RustboroCity_Gym_EventScript_RegisterRoxanne);
return TRUE;
}
if (ShouldDoRivalRayquazaCall() == TRUE)
{
- ScriptContext1_SetupScript(MossdeepCity_SpaceCenter_2F_EventScript_RivalRayquazaCall);
+ ScriptContext_SetupScript(MossdeepCity_SpaceCenter_2F_EventScript_RivalRayquazaCall);
return TRUE;
}
}
@@ -598,7 +598,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
return TRUE;
if (CountSSTidalStep(1) == TRUE)
{
- ScriptContext1_SetupScript(SSTidalCorridor_EventScript_ReachedStepCount);
+ ScriptContext_SetupScript(SSTidalCorridor_EventScript_ReachedStepCount);
return TRUE;
}
if (TryStartMatchCall())
@@ -735,7 +735,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
}
if (MetatileBehavior_IsMtPyreHole(metatileBehavior) == TRUE)
{
- ScriptContext1_SetupScript(EventScript_FallDownHoleMtPyre);
+ ScriptContext_SetupScript(EventScript_FallDownHoleMtPyre);
return TRUE;
}
if (MetatileBehavior_IsMossdeepGymWarp(metatileBehavior) == TRUE)
@@ -886,7 +886,7 @@ static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent)
}
if (coordEvent->trigger == 0)
{
- ScriptContext2_RunNewScript(coordEvent->script);
+ RunScriptImmediately(coordEvent->script);
return NULL;
}
if (VarGet(coordEvent->trigger) == (u8)coordEvent->index)
diff --git a/src/field_effect.c b/src/field_effect.c
index db0f996281..2a1937f205 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -146,10 +146,10 @@ static void EscapeRopeWarpInEffect_Init(struct Task *);
static void EscapeRopeWarpInEffect_Spin(struct Task *);
static void Task_TeleportWarpOut(u8);
-static void TeleportWarpOutFieldEffect_Init(struct Task*);
-static void TeleportWarpOutFieldEffect_SpinGround(struct Task*);
-static void TeleportWarpOutFieldEffect_SpinExit(struct Task*);
-static void TeleportWarpOutFieldEffect_End(struct Task*);
+static void TeleportWarpOutFieldEffect_Init(struct Task *);
+static void TeleportWarpOutFieldEffect_SpinGround(struct Task *);
+static void TeleportWarpOutFieldEffect_SpinExit(struct Task *);
+static void TeleportWarpOutFieldEffect_End(struct Task *);
static void FieldCallback_TeleportWarpIn(void);
static void Task_TeleportWarpIn(u8);
@@ -223,11 +223,11 @@ static void FlyInFieldEffect_WaitBirdReturn(struct Task *);
static void FlyInFieldEffect_End(struct Task *);
static void Task_DestroyDeoxysRock(u8 taskId);
-static void DestroyDeoxysRockEffect_CameraShake(s16*, u8);
-static void DestroyDeoxysRockEffect_RockFragments(s16*, u8);
-static void DestroyDeoxysRockEffect_WaitAndEnd(s16*, u8);
-static void CreateDeoxysRockFragments(struct Sprite*);
-static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite);
+static void DestroyDeoxysRockEffect_CameraShake(s16 *, u8);
+static void DestroyDeoxysRockEffect_RockFragments(s16 *, u8);
+static void DestroyDeoxysRockEffect_WaitAndEnd(s16 *, u8);
+static void CreateDeoxysRockFragments(struct Sprite *);
+static void SpriteCB_DeoxysRockFragment(struct Sprite *sprite);
static void Task_MoveDeoxysRock(u8 taskId);
@@ -904,7 +904,7 @@ u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority)
u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
{
- s32 spriteId = CreateMonPicSprite(species, 0, 0x8000, 1, x, y, 0, gMonPaletteTable[species].tag);
+ s32 spriteId = CreateMonPicSprite(species, 0, 0x8000, TRUE, x, y, 0, gMonPaletteTable[species].tag);
PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10);
if (spriteId == 0xFFFF)
return MAX_SPRITES;
@@ -915,7 +915,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
u8 CreateMonSprite_FieldMove(u16 species, u32 otId, u32 personality, s16 x, s16 y, u8 subpriority)
{
const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
- u16 spriteId = CreateMonPicSprite(species, otId, personality, 1, x, y, 0, spritePalette->tag);
+ u16 spriteId = CreateMonPicSprite(species, otId, personality, TRUE, x, y, 0, spritePalette->tag);
PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
if (spriteId == 0xFFFF)
return MAX_SPRITES;
@@ -1337,7 +1337,7 @@ static void FieldCallback_UseFly(void)
{
FadeInFromBlack();
CreateTask(Task_UseFly, 0);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
gFieldCallback = NULL;
}
@@ -1378,7 +1378,7 @@ static void FieldCallback_FlyIntoMap(void)
{
ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_WEST);
}
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
gFieldCallback = NULL;
}
@@ -1398,7 +1398,7 @@ static void Task_FlyIntoMap(u8 taskId)
}
if (!FieldEffectActiveListContains(FLDEFF_FLY_IN))
{
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
UnfreezeObjectEvents();
DestroyTask(taskId);
}
@@ -1417,7 +1417,7 @@ void FieldCB_FallWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
CreateTask(Task_FallWarpFieldEffect, 0);
gFieldCallback = NULL;
@@ -1531,7 +1531,7 @@ static bool8 FallWarpEffect_CameraShake(struct Task *task)
static bool8 FallWarpEffect_End(struct Task *task)
{
gPlayerAvatar.preventStep = FALSE;
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
CameraObjectReset1();
UnfreezeObjectEvents();
InstallCameraPanAheadCallback();
@@ -1683,7 +1683,7 @@ static void FieldCallback_EscalatorWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
CreateTask(Task_EscalatorWarpIn, 0);
gFieldCallback = NULL;
}
@@ -1804,7 +1804,7 @@ static bool8 EscalatorWarpIn_End(struct Task *task)
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
CameraObjectReset1();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST));
DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpIn));
}
@@ -1832,7 +1832,7 @@ static void Task_UseWaterfall(u8 taskId)
static bool8 WaterfallFieldEffect_Init(struct Task *task, struct ObjectEvent *objectEvent)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gPlayerAvatar.preventStep = TRUE;
task->tState++;
return FALSE;
@@ -1840,7 +1840,7 @@ static bool8 WaterfallFieldEffect_Init(struct Task *task, struct ObjectEvent *ob
static bool8 WaterfallFieldEffect_ShowMon(struct Task *task, struct ObjectEvent *objectEvent)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
if (!ObjectEventIsMovementOverridden(objectEvent))
{
ObjectEventClearHeldMovementIfFinished(objectEvent);
@@ -1880,7 +1880,7 @@ static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *task, struct Ob
return TRUE;
}
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
gPlayerAvatar.preventStep = FALSE;
DestroyTask(FindTaskIdByFunc(Task_UseWaterfall));
FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL);
@@ -1914,7 +1914,7 @@ static bool8 DiveFieldEffect_Init(struct Task *task)
static bool8 DiveFieldEffect_ShowMon(struct Task *task)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gFieldEffectArguments[0] = task->data[15];
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
task->data[0]++;
@@ -2052,7 +2052,7 @@ static void FieldCB_LavaridgeGymB1FWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gFieldCallback = NULL;
CreateTask(Task_LavaridgeGymB1FWarpExit, 0);
}
@@ -2105,7 +2105,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_End(struct Task *task, struct ObjectE
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
gPlayerAvatar.preventStep = FALSE;
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
UnfreezeObjectEvents();
DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarpExit));
}
@@ -2229,7 +2229,7 @@ void SpriteCB_AshPuff(struct Sprite *sprite)
void StartEscapeRopeFieldEffect(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
CreateTask(Task_EscapeRopeWarpOut, 80);
}
@@ -2286,7 +2286,7 @@ static void FieldCallback_EscapeRopeWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
gFieldCallback = NULL;
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
@@ -2320,7 +2320,7 @@ static void EscapeRopeWarpInEffect_Spin(struct Task *task)
if (task->tNumTurns >= 32 && task->tStartDir == GetPlayerFacingDirection())
{
objectEvent->invisible = FALSE;
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
UnfreezeObjectEvents();
DestroyTask(FindTaskIdByFunc(Task_EscapeRopeWarpIn));
return;
@@ -2360,7 +2360,7 @@ static void Task_TeleportWarpOut(u8 taskId)
static void TeleportWarpOutFieldEffect_Init(struct Task *task)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
CameraObjectReset2();
task->data[15] = GetPlayerFacingDirection();
@@ -2440,7 +2440,7 @@ static void FieldCallback_TeleportWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
gFieldCallback = NULL;
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
@@ -2527,7 +2527,7 @@ static void TeleportWarpInFieldEffect_SpinGround(struct Task *task)
task->data[1] = 8;
if ((++task->data[2]) > 4 && task->data[14] == objectEvent->facingDirection)
{
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
CameraObjectReset1();
UnfreezeObjectEvents();
DestroyTask(FindTaskIdByFunc(Task_TeleportWarpIn));
@@ -2993,7 +2993,7 @@ static void Task_SurfFieldEffect(u8 taskId)
static void SurfFieldEffect_Init(struct Task *task)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
gPlayerAvatar.preventStep = TRUE;
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING);
@@ -3054,7 +3054,7 @@ static void SurfFieldEffect_End(struct Task *task)
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection));
SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_PLAYER_AND_MON);
UnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
FieldEffectActiveListRemove(FLDEFF_USE_SURF);
DestroyTask(FindTaskIdByFunc(Task_SurfFieldEffect));
}
@@ -3088,15 +3088,15 @@ u8 FldEff_RayquazaSpotlight(void)
{
for (j = 12; j < 18; j++)
{
- ((u16*)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0xBFF4 + i * 6 + j + 1;
+ ((u16 *)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0xBFF4 + i * 6 + j + 1;
}
}
for (k = 0; k < 90; k++)
{
for (i = 0; i < 8; i++)
{
- *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4) = (sSpotlight_Gfx[k * 32 + i * 4 + 1] << 8) + sSpotlight_Gfx[k * 32 + i * 4];
- *(u16*)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4 + 2) = (sSpotlight_Gfx[k * 32 + i * 4 + 3] << 8) + sSpotlight_Gfx[k * 32 + i * 4 + 2];
+ *(u16 *)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4) = (sSpotlight_Gfx[k * 32 + i * 4 + 1] << 8) + sSpotlight_Gfx[k * 32 + i * 4];
+ *(u16 *)(BG_CHAR_ADDR(2) + (k + 1) * 32 + i * 4 + 2) = (sSpotlight_Gfx[k * 32 + i * 4 + 3] << 8) + sSpotlight_Gfx[k * 32 + i * 4 + 2];
}
}
return spriteId;
@@ -3675,7 +3675,7 @@ static void StartEndingDeoxysRockCameraShake(u8 taskId)
#undef tEndDelay
#undef tEnding
-static void (*const sDestroyDeoxysRockEffectFuncs[])(s16*, u8) = {
+static void (*const sDestroyDeoxysRockEffectFuncs[])(s16 *, u8) = {
DestroyDeoxysRockEffect_CameraShake,
DestroyDeoxysRockEffect_RockFragments,
DestroyDeoxysRockEffect_WaitAndEnd,
@@ -3689,7 +3689,7 @@ static void Task_DestroyDeoxysRock(u8 taskId)
sDestroyDeoxysRockEffectFuncs[tState](data, taskId);
}
-static void DestroyDeoxysRockEffect_CameraShake(s16* data, u8 taskId)
+static void DestroyDeoxysRockEffect_CameraShake(s16 *data, u8 taskId)
{
u8 newTaskId = CreateTask(Task_DeoxysRockCameraShake, 90);
PlaySE(SE_THUNDER2);
@@ -3697,7 +3697,7 @@ static void DestroyDeoxysRockEffect_CameraShake(s16* data, u8 taskId)
tState++;
}
-static void DestroyDeoxysRockEffect_RockFragments(s16* data, u8 taskId)
+static void DestroyDeoxysRockEffect_RockFragments(s16 *data, u8 taskId)
{
if (++tTimer > 120)
{
@@ -3713,7 +3713,7 @@ static void DestroyDeoxysRockEffect_RockFragments(s16* data, u8 taskId)
}
}
-static void DestroyDeoxysRockEffect_WaitAndEnd(s16* data, u8 taskId)
+static void DestroyDeoxysRockEffect_WaitAndEnd(s16 *data, u8 taskId)
{
if (!gPaletteFade.active && !FuncIsActiveTask(Task_DeoxysRockCameraShake))
{
@@ -3776,7 +3776,7 @@ static const struct SpriteTemplate sSpriteTemplate_DeoxysRockFragment = {
.callback = SpriteCB_DeoxysRockFragment
};
-static void CreateDeoxysRockFragments(struct Sprite* sprite)
+static void CreateDeoxysRockFragments(struct Sprite *sprite)
{
int i;
int xPos = (s16)gTotalCameraPixelOffsetX + sprite->x + sprite->x2;
@@ -3794,7 +3794,7 @@ static void CreateDeoxysRockFragments(struct Sprite* sprite)
}
}
-static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite)
+static void SpriteCB_DeoxysRockFragment(struct Sprite *sprite)
{
// 1 case for each fragment, fly off in 4 different directions
switch (sprite->data[0])
@@ -3816,11 +3816,11 @@ static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite)
sprite->y += 12;
break;
}
- if ((u16)(sprite->x + 4) > DISPLAY_WIDTH + 8 || sprite->y < -4 || sprite->y > DISPLAY_HEIGHT + 4)
+ if (sprite->x < -4 || sprite->x > DISPLAY_WIDTH + 4 || sprite->y < -4 || sprite->y > DISPLAY_HEIGHT + 4)
DestroySprite(sprite);
}
-bool8 FldEff_MoveDeoxysRock(struct Sprite* sprite)
+bool8 FldEff_MoveDeoxysRock(struct Sprite *sprite)
{
u8 objectEventIdBuffer;
if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer))
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index c3332c7fc6..5b8123a71d 100755
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -1525,7 +1525,7 @@ void UpdateRayquazaSpotlightEffect(struct Sprite *sprite)
{
for (j = 12; j < 18; j++)
{
- ((u16*)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0xBFF4 + i * 6 + j + 1;
+ ((u16 *)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0xBFF4 + i * 6 + j + 1;
}
}
}
@@ -1611,7 +1611,7 @@ void UpdateRayquazaSpotlightEffect(struct Sprite *sprite)
{
for (j = 12; j < 18; j++)
{
- ((u16*)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0;
+ ((u16 *)(BG_SCREEN_ADDR(31)))[i * 32 + j] = 0;
}
}
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
diff --git a/src/field_message_box.c b/src/field_message_box.c
index 95d0a94c96..64734cc209 100755
--- a/src/field_message_box.c
+++ b/src/field_message_box.c
@@ -8,7 +8,7 @@
static EWRAM_DATA u8 sFieldMessageBoxMode = 0;
-static void ExpandStringAndStartDrawFieldMessage(const u8*, bool32);
+static void ExpandStringAndStartDrawFieldMessage(const u8 *, bool32);
static void StartDrawFieldMessage(void);
void InitFieldMessageBox(void)
@@ -116,7 +116,7 @@ bool8 ShowFieldMessageFromBuffer(void)
return TRUE;
}
-static void ExpandStringAndStartDrawFieldMessage(const u8* str, bool32 allowSkippingDelayWithButtonPress)
+static void ExpandStringAndStartDrawFieldMessage(const u8 *str, bool32 allowSkippingDelayWithButtonPress)
{
StringExpandPlaceholders(gStringVar4, str);
AddTextPrinterForMessage(allowSkippingDelayWithButtonPress);
@@ -132,7 +132,7 @@ static void StartDrawFieldMessage(void)
void HideFieldMessageBox(void)
{
DestroyTask_DrawFieldMessage();
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
}
@@ -152,7 +152,7 @@ bool8 IsFieldMessageBoxHidden(void)
static void ReplaceFieldMessageWithFrame(void)
{
DestroyTask_DrawFieldMessage();
- DrawStdWindowFrame(0, 1);
+ DrawStdWindowFrame(0, TRUE);
sFieldMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
}
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index b374e132d1..0f087799e3 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -1468,7 +1468,7 @@ static void Task_PushBoulder(u8 taskId)
static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gPlayerAvatar.preventStep = TRUE;
task->tState++;
return FALSE;
@@ -1508,7 +1508,7 @@ static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *player, stru
ObjectEventClearHeldMovementIfFinished(player);
ObjectEventClearHeldMovementIfFinished(boulder);
gPlayerAvatar.preventStep = FALSE;
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(FindTaskIdByFunc(Task_PushBoulder));
}
return FALSE;
@@ -1570,7 +1570,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct Objec
task->data[0]++;
task->data[1] = objectEvent->movementDirection;
gPlayerAvatar.preventStep = TRUE;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
PlaySE(SE_WARP_IN);
return TRUE;
}
@@ -1616,7 +1616,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct Objec
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
ObjectEventSetHeldMovement(objectEvent, GetWalkSlowMovementAction(GetOppositeDirection(task->data[1])));
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
gPlayerAvatar.preventStep = FALSE;
DestroyTask(FindTaskIdByFunc(PlayerAvatar_DoSecretBaseMatSpin));
}
@@ -1627,7 +1627,7 @@ static void CreateStopSurfingTask(u8 direction)
{
u8 taskId;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
Overworld_ClearSavedMusic();
Overworld_ChangeMusicToDefault();
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING;
@@ -1661,7 +1661,7 @@ static void Task_WaitStopSurfing(u8 taskId)
ObjectEventSetGraphicsId(playerObjEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_NORMAL));
ObjectEventSetHeldMovement(playerObjEvent, GetFaceDirectionMovementAction(playerObjEvent->facingDirection));
gPlayerAvatar.preventStep = FALSE;
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroySprite(&gSprites[playerObjEvent->fieldEffectSpriteId]);
DestroyTask(taskId);
}
@@ -1720,7 +1720,7 @@ static void Task_Fishing(u8 taskId)
static bool8 Fishing_Init(struct Task *task)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gPlayerAvatar.preventStep = TRUE;
task->tStep++;
return FALSE;
@@ -1831,7 +1831,7 @@ static bool8 Fishing_CheckForBite(struct Task *task)
{
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
{
- u8 ability = GetMonAbility(&gPlayerParty[0]);
+ u16 ability = GetMonAbility(&gPlayerParty[0]);
if (ability == ABILITY_SUCTION_CUPS || ability == ABILITY_STICKY_HOLD)
{
if (Random() % 100 > 14)
@@ -1911,7 +1911,7 @@ static bool8 Fishing_MonOnHook(struct Task *task)
{
AlignFishingAnimationFrames();
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PokemonOnHook, 1, 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->tStep++;
task->tFrameCounter = 0;
return FALSE;
@@ -1945,7 +1945,7 @@ static bool8 Fishing_StartEncounter(struct Task *task)
if (task->tFrameCounter != 0)
{
gPlayerAvatar.preventStep = FALSE;
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
FishingWildEncounter(task->tFishingRod);
RecordFishingAttemptForTV(TRUE);
DestroyTask(FindTaskIdByFunc(Task_Fishing));
@@ -1958,7 +1958,7 @@ static bool8 Fishing_NotEvenNibble(struct Task *task)
AlignFishingAnimationFrames();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_NotEvenANibble, 1, 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_NotEvenANibble, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->tStep = FISHING_SHOW_RESULT;
return TRUE;
}
@@ -1968,7 +1968,7 @@ static bool8 Fishing_GotAway(struct Task *task)
AlignFishingAnimationFrames();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_ItGotAway, 1, 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_ItGotAway, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->tStep++;
return TRUE;
}
@@ -2004,7 +2004,7 @@ static bool8 Fishing_EndNoMon(struct Task *task)
if (!IsTextPrinterActive(0))
{
gPlayerAvatar.preventStep = FALSE;
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
UnfreezeObjectEvents();
ClearDialogWindowAndFrame(0, TRUE);
RecordFishingAttemptForTV(FALSE);
diff --git a/src/field_poison.c b/src/field_poison.c
index 90013243cd..e29e1ac988 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -21,9 +21,8 @@ static bool32 IsMonValidSpecies(struct Pokemon *pokemon)
{
u16 species = GetMonData(pokemon, MON_DATA_SPECIES2);
if (species == SPECIES_NONE || species == SPECIES_EGG)
- {
return FALSE;
- }
+
return TRUE;
}
@@ -35,16 +34,14 @@ static bool32 AllMonsFainted(void)
for (i = 0; i < PARTY_SIZE; i++, pokemon++)
{
if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) != 0)
- {
return FALSE;
- }
}
return TRUE;
}
static void FaintFromFieldPoison(u8 partyIdx)
{
- struct Pokemon *pokemon = gPlayerParty + partyIdx;
+ struct Pokemon *pokemon = &gPlayerParty[partyIdx];
u32 status = STATUS1_NONE;
AdjustFriendship(pokemon, FRIENDSHIP_EVENT_FAINT_FIELD_PSN);
@@ -55,64 +52,65 @@ static void FaintFromFieldPoison(u8 partyIdx)
static bool32 MonFaintedFromPoison(u8 partyIdx)
{
- struct Pokemon *pokemon = gPlayerParty + partyIdx;
+ struct Pokemon *pokemon = &gPlayerParty[partyIdx];
if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
- {
return TRUE;
- }
+
return FALSE;
}
+#define tState data[0]
+#define tPartyIdx data[1]
+
static void Task_TryFieldPoisonWhiteOut(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
- for (; data[1] < PARTY_SIZE; data[1]++)
+ for (; tPartyIdx < PARTY_SIZE; tPartyIdx++)
{
- if (MonFaintedFromPoison(data[1]))
+ if (MonFaintedFromPoison(tPartyIdx))
{
- FaintFromFieldPoison(data[1]);
- ShowFieldMessage(gText_PkmnFainted3);
- data[0]++;
+ FaintFromFieldPoison(tPartyIdx);
+ ShowFieldMessage(gText_PkmnFainted_FldPsn);
+ tState++;
return;
}
}
- data[0] = 2;
+ tState = 2; // Finished checking party
break;
case 1:
+ // Wait for "{mon} fainted" message, then return to party loop
if (IsFieldMessageBoxHidden())
- {
- data[0]--;
- }
+ tState--;
break;
case 2:
if (AllMonsFainted())
{
+ // Battle facilities have their own white out script to handle the challenge loss
if (InBattlePyramid() | InBattlePike() || InTrainerHillChallenge())
- {
gSpecialVar_Result = FLDPSN_FRONTIER_WHITEOUT;
- }
else
- {
gSpecialVar_Result = FLDPSN_WHITEOUT;
- }
}
else
{
gSpecialVar_Result = FLDPSN_NO_WHITEOUT;
}
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
break;
}
}
+#undef tState
+#undef tPartyIdx
+
void TryFieldPoisonWhiteOut(void)
{
CreateTask(Task_TryFieldPoisonWhiteOut, 80);
- ScriptContext1_Stop();
+ ScriptContext_Stop();
}
s32 DoPoisonFieldEffect(void)
@@ -122,31 +120,31 @@ s32 DoPoisonFieldEffect(void)
struct Pokemon *pokemon = gPlayerParty;
u32 numPoisoned = 0;
u32 numFainted = 0;
+
for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
{
+ // Apply poison damage
hp = GetMonData(pokemon, MON_DATA_HP);
if (hp == 0 || --hp == 0)
- {
numFainted++;
- }
+
SetMonData(pokemon, MON_DATA_HP, &hp);
numPoisoned++;
}
pokemon++;
}
+
+ // Do screen flash effect
if (numFainted != 0 || numPoisoned != 0)
- {
FldEffPoison_Start();
- }
+
if (numFainted != 0)
- {
return FLDPSN_FNT;
- }
+
if (numPoisoned != 0)
- {
return FLDPSN_PSN;
- }
+
return FLDPSN_NONE;
}
diff --git a/src/field_region_map.c b/src/field_region_map.c
index adf5e4ed7a..5e14920fba 100644
--- a/src/field_region_map.c
+++ b/src/field_region_map.c
@@ -150,11 +150,11 @@ static void FieldUpdateRegionMap(void)
sFieldRegionMapHandler->state++;
break;
case 1:
- DrawStdFrameWithCustomTileAndPalette(1, 0, 0x27, 0xd);
+ DrawStdFrameWithCustomTileAndPalette(1, FALSE, 0x27, 0xd);
offset = GetStringCenterAlignXOffset(FONT_NORMAL, gText_Hoenn, 0x38);
AddTextPrinterParameterized(1, FONT_NORMAL, gText_Hoenn, offset, 1, 0, NULL);
ScheduleBgCopyTilemapToVram(0);
- DrawStdFrameWithCustomTileAndPalette(0, 0, 0x27, 0xd);
+ DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x27, 0xd);
PrintRegionMapSecName();
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
sFieldRegionMapHandler->state++;
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index 77978c2690..948d812e81 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -124,7 +124,7 @@ static void Task_WaitForUnionRoomFade(u8 taskId)
void FieldCB_ContinueScriptUnionRoom(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
FadeInFromBlack();
CreateTask(Task_WaitForUnionRoomFade, 10);
@@ -135,13 +135,13 @@ static void Task_WaitForFadeAndEnableScriptCtx(u8 taskID)
if (WaitForWeatherFadeIn() == TRUE)
{
DestroyTask(taskID);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
}
void FieldCB_ContinueScriptHandleMusic(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
FadeInFromBlack();
CreateTask(Task_WaitForFadeAndEnableScriptCtx, 10);
@@ -149,7 +149,7 @@ void FieldCB_ContinueScriptHandleMusic(void)
void FieldCB_ContinueScript(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeInFromBlack();
CreateTask(Task_WaitForFadeAndEnableScriptCtx, 10);
}
@@ -174,7 +174,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
case 2:
if (WaitForWeatherFadeIn() == TRUE)
{
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
}
break;
@@ -183,7 +183,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
void FieldCB_ReturnToFieldCableLink(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
FillPalBufferBlack();
CreateTask(Task_ReturnToFieldCableLink, 10);
@@ -215,7 +215,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
if (WaitForWeatherFadeIn() == TRUE)
{
StartSendingKeysToLink();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
}
break;
@@ -239,7 +239,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
case 2:
StartSendingKeysToLink();
ResetAllMultiplayerState();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
break;
}
@@ -247,7 +247,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
void FieldCB_ReturnToFieldWirelessLink(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
FillPalBufferBlack();
CreateTask(Task_ReturnToFieldWirelessLink, 10);
@@ -275,7 +275,7 @@ void FieldCB_DefaultWarpExit(void)
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
SetUpWarpExitTask();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
void FieldCB_WarpExitFadeFromWhite(void)
@@ -283,7 +283,7 @@ void FieldCB_WarpExitFadeFromWhite(void)
Overworld_PlaySpecialMapMusic();
FadeInFromWhite();
SetUpWarpExitTask();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
void FieldCB_WarpExitFadeFromBlack(void)
@@ -292,7 +292,7 @@ void FieldCB_WarpExitFadeFromBlack(void)
Overworld_PlaySpecialMapMusic();
FadeInFromBlack();
SetUpWarpExitTask();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
static void FieldCB_SpinEnterWarp(void)
@@ -301,7 +301,7 @@ static void FieldCB_SpinEnterWarp(void)
WarpFadeInScreen();
PlaySE(SE_WARP_OUT);
CreateTask(Task_SpinEnterWarp, 10);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
static void FieldCB_MossdeepGymWarpExit(void)
@@ -310,7 +310,7 @@ static void FieldCB_MossdeepGymWarpExit(void)
WarpFadeInScreen();
PlaySE(SE_WARP_OUT);
CreateTask(Task_ExitNonDoor, 10);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
SetObjectEventLoadFlag((~SKIP_OBJECT_EVENT_LOAD) & 0xF);
}
@@ -357,7 +357,7 @@ static void Task_ExitDoor(u8 taskId)
}
break;
case 4:
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
break;
}
@@ -395,7 +395,7 @@ static void Task_ExitNonAnimDoor(u8 taskId)
}
break;
case 3:
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
break;
}
@@ -407,14 +407,14 @@ static void Task_ExitNonDoor(u8 taskId)
{
case 0:
FreezeObjectEvents();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gTasks[taskId].tState++;
break;
case 1:
if (WaitForWeatherFadeIn())
{
UnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
}
break;
@@ -434,7 +434,7 @@ void ReturnToFieldOpenStartMenu(void)
{
FadeInFromBlack();
CreateTask(Task_WaitForFadeShowStartMenu, 0x50);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
bool8 FieldCB_ReturnToFieldOpenStartMenu(void)
@@ -447,7 +447,7 @@ static void Task_ReturnToFieldNoScript(u8 taskId)
{
if (WaitForWeatherFadeIn() == 1)
{
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
ScriptUnfreezeObjectEvents();
}
@@ -455,14 +455,14 @@ static void Task_ReturnToFieldNoScript(u8 taskId)
void FieldCB_ReturnToFieldNoScript(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeInFromBlack();
CreateTask(Task_ReturnToFieldNoScript, 10);
}
void FieldCB_ReturnToFieldNoScriptCheckMusic(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
FadeInFromBlack();
CreateTask(Task_ReturnToFieldNoScript, 10);
@@ -483,7 +483,7 @@ static bool32 WaitForWeatherFadeIn(void)
void DoWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
@@ -494,7 +494,7 @@ void DoWarp(void)
void DoDiveWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
@@ -504,7 +504,7 @@ void DoDiveWarp(void)
void DoWhiteFadeWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
TryFadeOutOldMapMusic();
FadeScreen(FADE_TO_WHITE, 8);
PlayRainStoppingSoundEffect();
@@ -514,7 +514,7 @@ void DoWhiteFadeWarp(void)
void DoDoorWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(Task_DoDoorWarp, 10);
}
@@ -527,19 +527,19 @@ void DoFallWarp(void)
void DoEscalatorWarp(u8 metatileBehavior)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
StartEscalatorWarp(metatileBehavior, 10);
}
void DoLavaridgeGymB1FWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
StartLavaridgeGymB1FWarp(10);
}
void DoLavaridgeGym1FWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
StartLavaridgeGym1FWarp(10);
}
@@ -548,7 +548,7 @@ void DoLavaridgeGym1FWarp(void)
// Used by teleporting tiles, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut)
void DoTeleportTileWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlaySE(SE_WARP_IN);
@@ -559,7 +559,7 @@ void DoTeleportTileWarp(void)
void DoMossdeepGymWarp(void)
{
SetObjectEventLoadFlag(SKIP_OBJECT_EVENT_LOAD);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
SaveObjectEvents();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
@@ -570,7 +570,7 @@ void DoMossdeepGymWarp(void)
void DoPortholeWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
WarpFadeOutScreen();
CreateTask(Task_WarpAndLoadMap, 10);
gFieldCallback = FieldCB_ShowPortholeView;
@@ -583,7 +583,7 @@ static void Task_DoCableClubWarp(u8 taskId)
switch (task->tState)
{
case 0:
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
task->tState++;
break;
case 1:
@@ -600,7 +600,7 @@ static void Task_DoCableClubWarp(u8 taskId)
void DoCableClubWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlaySE(SE_EXIT);
@@ -651,7 +651,7 @@ static void Task_WarpAndLoadMap(u8 taskId)
{
case 0:
FreezeObjectEvents();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
task->tState++;
break;
case 1:
@@ -735,7 +735,7 @@ static void Task_DoContestHallWarp(u8 taskId)
{
case 0:
FreezeObjectEvents();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
task->tState++;
break;
case 1:
@@ -754,7 +754,7 @@ static void Task_DoContestHallWarp(u8 taskId)
void DoContestHallWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
@@ -916,7 +916,7 @@ static void Task_WaitForFlashUpdate(u8 taskId)
{
if (!FuncIsActiveTask(UpdateFlashLevelEffect))
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
}
@@ -979,7 +979,7 @@ void AnimateFlash(u8 newFlashLevel)
fullBrightness = TRUE;
StartUpdateFlashLevelEffect(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelToRadius[curFlashLevel], sFlashLevelToRadius[newFlashLevel], fullBrightness, 1);
StartWaitForFlashUpdate();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
void WriteFlashScanlineEffectBuffer(u8 flashLevel)
@@ -1003,7 +1003,7 @@ static void Task_SpinEnterWarp(u8 taskId)
{
case 0:
FreezeObjectEvents();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
DoPlayerSpinEntrance();
gTasks[taskId].tState++;
break;
@@ -1011,7 +1011,7 @@ static void Task_SpinEnterWarp(u8 taskId)
if (WaitForWeatherFadeIn() && IsPlayerSpinEntranceActive() != TRUE)
{
UnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
}
break;
@@ -1026,7 +1026,7 @@ static void Task_SpinExitWarp(u8 taskId)
{
case 0:
FreezeObjectEvents();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
PlaySE(SE_WARP_IN);
DoPlayerSpinExit();
task->tState++;
@@ -1054,7 +1054,7 @@ static void Task_SpinExitWarp(u8 taskId)
// DoTeleportTileWarp is used instead
void DoSpinEnterWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
CreateTask(Task_WarpAndLoadMap, 10);
gFieldCallback = FieldCB_SpinEnterWarp;
}
@@ -1063,7 +1063,7 @@ void DoSpinEnterWarp(void)
// Player exits current map by spinning up offscreen, enters new map with a fade in
void DoSpinExitWarp(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gFieldCallback = FieldCB_DefaultWarpExit;
CreateTask(Task_SpinExitWarp, 10);
}
@@ -1152,7 +1152,7 @@ static void Task_OrbEffect(u8 taskId)
case 2:
if (!FuncIsActiveTask(UpdateOrbFlashEffect))
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
tState = 3;
}
break;
@@ -1200,7 +1200,7 @@ static void Task_OrbEffect(u8 taskId)
SetGpuReg(REG_OFFSET_BLDALPHA, tBldAlpha);
SetGpuReg(REG_OFFSET_WININ, tWinIn);
SetGpuReg(REG_OFFSET_WINOUT, tWinOut);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
break;
}
@@ -1263,6 +1263,6 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId)
if (BGMusicStopped() == TRUE)
{
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
}
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index 7493467288..7c98703c6b 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -251,7 +251,7 @@ static void Task_HandleTruckSequence(u8 taskId)
DrawWholeMapView();
PlaySE(SE_TRUCK_DOOR);
DestroyTask(taskId);
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
}
break;
}
@@ -263,7 +263,7 @@ void ExecuteTruckSequence(void)
MapGridSetMetatileIdAt(4 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_InsideOfTruck_DoorClosedFloor_Mid);
MapGridSetMetatileIdAt(4 + MAP_OFFSET, 3 + MAP_OFFSET, METATILE_InsideOfTruck_DoorClosedFloor_Bottom);
DrawWholeMapView();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
CpuFastFill(0, gPlttBufferFaded, 0x400);
CreateTask(Task_HandleTruckSequence, 0xA);
}
@@ -371,7 +371,7 @@ void FieldCB_ShowPortholeView(void)
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
FadeInFromBlack();
CreateTask(Task_HandlePorthole, 80);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
void LookThroughPorthole(void)
diff --git a/src/field_specials.c b/src/field_specials.c
index 4ed2a2e03d..7c226e7a39 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -132,14 +132,14 @@ static void BufferFanClubTrainerName_(struct LinkBattleRecords *, u8, u8);
void Special_ShowDiploma(void)
{
SetMainCallback2(CB2_ShowDiploma);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
void Special_ViewWallClock(void)
{
gMain.savedCallback = CB2_ReturnToField;
SetMainCallback2(CB2_ViewWallClock);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
void ResetCyclingRoadChallengeData(void)
@@ -182,7 +182,7 @@ static void DetermineCyclingRoadResults(u32 numFrames, u8 numBikeCollisions)
if (numFrames < 3600)
{
ConvertIntToDecimalStringN(gStringVar2, numFrames / 60, STR_CONV_MODE_RIGHT_ALIGN, 2);
- gStringVar2[2] = CHAR_PERIOD;
+ gStringVar2[2] = CHAR_DEC_SEPARATOR;
ConvertIntToDecimalStringN(&gStringVar2[3], ((numFrames % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2);
StringAppend(gStringVar2, gText_SpaceSeconds);
}
@@ -799,7 +799,7 @@ static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId)
if ((++sSlidingDoorFrame) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles))
{
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
}
else
@@ -1412,7 +1412,7 @@ bool8 ScriptCheckFreePokemonStorageSpace(void)
bool8 IsPokerusInParty(void)
{
- if (!CheckPartyPokerus(gPlayerParty, 0x3f))
+ if (!CheckPartyPokerus(gPlayerParty, (1 << PARTY_SIZE) - 1))
return FALSE;
return TRUE;
@@ -1459,7 +1459,7 @@ static void Task_ShakeCamera(u8 taskId)
static void StopCameraShake(u8 taskId)
{
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
#undef horizontalPan
@@ -1814,7 +1814,7 @@ static void Task_MoveElevator(u8 taskId)
{
PlaySE(SE_DING_DONG);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
InstallCameraPanAheadCallback();
}
}
@@ -1825,7 +1825,7 @@ void ShowDeptStoreElevatorFloorSelect(void)
int xPos;
sTutorMoveAndElevatorWindowId = AddWindow(&gElevatorFloor_WindowTemplate);
- SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0);
+ SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, FALSE);
xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gText_ElevatorNowOn, 64);
AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, gText_ElevatorNowOn, xPos, 1, TEXT_SKIP_DRAW, NULL);
@@ -2476,7 +2476,7 @@ static void Task_ShowScrollableMultichoice(u8 taskId)
struct WindowTemplate template;
struct Task *task = &gTasks[taskId];
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
sScrollableMultichoice_ScrollOffset = 0;
sScrollableMultichoice_ItemSpriteId = MAX_SPRITES;
FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, 0);
@@ -2507,7 +2507,7 @@ static void Task_ShowScrollableMultichoice(u8 taskId)
template = CreateWindowTemplate(0, task->tLeft, task->tTop, task->tWidth, task->tHeight, 0xF, 0x64);
windowId = AddWindow(&template);
task->tWindowId = windowId;
- SetStandardWindowBorderStyle(windowId, 0);
+ SetStandardWindowBorderStyle(windowId, FALSE);
gScrollableMultichoice_ListMenuTemplate.totalItems = task->tNumItems;
gScrollableMultichoice_ListMenuTemplate.maxShowed = task->tMaxItemsOnScreen;
@@ -2591,7 +2591,7 @@ static void ScrollableMultichoice_ProcessInput(u8 taskId)
// Handle selection while keeping the menu open
ScrollableMultichoice_RemoveScrollArrows(taskId);
task->func = Task_ScrollableMultichoice_WaitReturnToList;
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
break;
}
@@ -2606,12 +2606,12 @@ static void CloseScrollableMultichoice(u8 taskId)
ScrollableMultichoice_RemoveScrollArrows(taskId);
DestroyListMenuTask(task->tListTaskId, NULL, NULL);
Free(sScrollableMultichoice_ListMenuItem);
- ClearStdWindowAndFrameToTransparent(task->tWindowId, 1);
+ ClearStdWindowAndFrameToTransparent(task->tWindowId, TRUE);
FillWindowPixelBuffer(task->tWindowId, PIXEL_FILL(0));
CopyWindowToVram(task->tWindowId, COPYWIN_GFX);
RemoveWindow(task->tWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
// Never run, tKeepOpenAfterSelect is FALSE for all scrollable multichoices.
@@ -2634,14 +2634,14 @@ void ScrollableMultichoice_TryReturnToList(void)
{
u8 taskId = FindTaskIdByFunc(Task_ScrollableMultichoice_WaitReturnToList);
if (taskId == TASK_NONE)
- EnableBothScriptContexts();
+ ScriptContext_Enable();
else
gTasks[taskId].tKeepOpenAfterSelect++; // Return to list
}
static void Task_ScrollableMultichoice_ReturnToList(u8 taskId)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
ScrollableMultichoice_UpdateScrollArrows(taskId);
gTasks[taskId].func = ScrollableMultichoice_ProcessInput;
}
@@ -2850,7 +2850,7 @@ void ShowBattlePointsWindow(void)
};
sBattlePointsWindowId = AddWindow(&sBattlePoints_WindowTemplate);
- SetStandardWindowBorderStyle(sBattlePointsWindowId, 0);
+ SetStandardWindowBorderStyle(sBattlePointsWindowId, FALSE);
UpdateBattlePointsWindow();
CopyWindowToVram(sBattlePointsWindowId, COPYWIN_GFX);
}
@@ -2896,7 +2896,7 @@ void ShowFrontierExchangeCornerItemIconWindow(void)
};
sFrontierExchangeCorner_ItemIconWindowId = AddWindow(&sFrontierExchangeCorner_ItemIconWindowTemplate);
- SetStandardWindowBorderStyle(sFrontierExchangeCorner_ItemIconWindowId, 0);
+ SetStandardWindowBorderStyle(sFrontierExchangeCorner_ItemIconWindowId, FALSE);
CopyWindowToVram(sFrontierExchangeCorner_ItemIconWindowId, COPYWIN_GFX);
}
@@ -2918,7 +2918,7 @@ static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection)
switch (menu)
{
case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1:
- AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_Decor1Descriptions[selection], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_Decor1Descriptions[selection], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
if (sFrontierExchangeCorner_Decor1[selection] == 0xFFFF)
{
ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor1[selection]);
@@ -2931,7 +2931,7 @@ static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection)
}
break;
case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2:
- AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_Decor2Descriptions[selection], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_Decor2Descriptions[selection], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
if (sFrontierExchangeCorner_Decor2[selection] == 0xFFFF)
{
ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor2[selection]);
@@ -2944,11 +2944,11 @@ static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection)
}
break;
case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR:
- AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_VitaminsDescriptions[selection], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_VitaminsDescriptions[selection], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Vitamins[selection]);
break;
case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR:
- AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_HoldItemsDescriptions[selection], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sFrontierExchangeCorner_HoldItemsDescriptions[selection], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_HoldItems[selection]);
break;
}
@@ -3040,7 +3040,7 @@ static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection)
if (gSpecialVar_0x8006 == 0)
{
sTutorMoveAndElevatorWindowId = AddWindow(&sBattleFrontierTutor_WindowTemplate);
- SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0);
+ SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, FALSE);
}
ShowBattleFrontierTutorMoveDescription(menu, selection);
}
@@ -3104,7 +3104,7 @@ void ScrollableMultichoice_RedrawPersistentMenu(void)
{
struct Task *task = &gTasks[taskId];
ListMenuGetScrollAndRow(task->tListTaskId, &scrollOffset, &selectedRow);
- SetStandardWindowBorderStyle(task->tWindowId, 0);
+ SetStandardWindowBorderStyle(task->tWindowId, FALSE);
for (i = 0; i < MAX_SCROLL_MULTI_ON_SCREEN; i++)
AddTextPrinterParameterized5(task->tWindowId, FONT_NORMAL, sScrollableMultichoiceOptions[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SKIP_DRAW, NULL, 0, 0);
@@ -3228,7 +3228,7 @@ static void Task_DeoxysRockInteraction(u8 taskId)
if (FlagGet(FLAG_DEOXYS_ROCK_COMPLETE) == TRUE)
{
gSpecialVar_Result = 3;
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
else
@@ -3249,7 +3249,7 @@ static void Task_DeoxysRockInteraction(u8 taskId)
{
FlagSet(FLAG_DEOXYS_ROCK_COMPLETE);
gSpecialVar_Result = 2;
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
else
@@ -3294,7 +3294,7 @@ static void WaitForDeoxysRockMovement(u8 taskId)
{
if (FieldEffectActiveListContains(FLDEFF_MOVE_DEOXYS_ROCK) == FALSE)
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
}
@@ -3700,7 +3700,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
SetCloseLinkCallback();
gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags;
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
break;
}
@@ -3786,7 +3786,7 @@ static void Task_CloseBattlePikeCurtain(u8 taskId)
if (tCurrentFrame == 3)
{
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
}
}
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 8e8875993d..099014a4d4 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -166,7 +166,7 @@ static void Task_RunTimeBasedEvents(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (!ScriptContext2_IsEnabled())
+ if (!ArePlayerFieldControlsLocked())
{
RunTimeBasedEvents(data);
UpdateAmbientCry(&tAmbientCryState, &tAmbientCryDelay);
diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c
index 8349de559f..820628ff83 100644
--- a/src/field_weather_effect.c
+++ b/src/field_weather_effect.c
@@ -58,7 +58,7 @@ static const struct OamData sCloudSpriteOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_BLEND,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -339,7 +339,7 @@ static void UpdateDroughtBlend(u8 taskId)
task->tState++;
break;
case 4:
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
break;
}
@@ -393,7 +393,7 @@ static const struct OamData sRainSpriteOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x32),
.x = 0,
@@ -839,7 +839,7 @@ static const struct OamData sSnowflakeSpriteOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -1272,7 +1272,7 @@ static const struct OamData sOamData_FogH =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_BLEND,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
diff --git a/src/fieldmap.c b/src/fieldmap.c
index a02355e721..2b981dc6e5 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -43,7 +43,7 @@ static void FillWestConnection(struct MapHeader const *mapHeader, struct MapHead
static void FillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset);
static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader);
static void LoadSavedMapView(void);
-static bool8 SkipCopyingMetatileFromSavedMap(u16* mapBlock, u16 mapWidth, u8 yMode);
+static bool8 SkipCopyingMetatileFromSavedMap(u16 *mapBlock, u16 mapWidth, u8 yMode);
static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y);
static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, struct MapConnection *connection);
static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, int offset);
@@ -352,7 +352,7 @@ u8 MapGridGetElevationAt(int x, int y)
return block >> MAPGRID_ELEVATION_SHIFT;
}
-bool8 MapGridIsImpassableAt(int x, int y)
+u8 MapGridGetCollisionAt(int x, int y)
{
u16 block = GetMapGridBlockAt(x, y);
@@ -823,7 +823,7 @@ void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable)
}
}
-static bool8 SkipCopyingMetatileFromSavedMap(u16* mapBlock, u16 mapWidth, u8 yMode)
+static bool8 SkipCopyingMetatileFromSavedMap(u16 *mapBlock, u16 mapWidth, u8 yMode)
{
if (yMode == 0xFF)
return FALSE;
@@ -879,17 +879,17 @@ void LoadTilesetPalette(struct Tileset const *tileset, u16 destOffset, u16 size)
if (tileset->isSecondary == FALSE)
{
LoadPalette(&black, destOffset, 2);
- LoadPalette(((u16*)tileset->palettes) + 1, destOffset + 1, size - 2);
+ LoadPalette(((u16 *)tileset->palettes) + 1, destOffset + 1, size - 2);
FieldmapPaletteDummy(destOffset + 1, (size - 2) >> 1);
}
else if (tileset->isSecondary == TRUE)
{
- LoadPalette(((u16*)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size);
+ LoadPalette(((u16 *)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size);
FieldmapPaletteDummy(destOffset, size >> 1);
}
else
{
- LoadCompressedPalette((u32*)tileset->palettes, destOffset, size);
+ LoadCompressedPalette((u32 *)tileset->palettes, destOffset, size);
FieldmapPaletteDummy(destOffset, size >> 1);
}
}
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
index 9129c5208c..2304381673 100644
--- a/src/fldeff_cut.c
+++ b/src/fldeff_cut.c
@@ -93,7 +93,7 @@ static const struct OamData sOamData_CutGrass =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -140,7 +140,7 @@ bool8 SetUpFieldMove_Cut(void)
s16 x, y;
u8 i, j;
u8 tileBehavior;
- u8 userAbility;
+ u16 userAbility;
bool8 cutTiles[CUT_NORMAL_AREA];
bool8 ret;
@@ -191,7 +191,12 @@ bool8 SetUpFieldMove_Cut(void)
sHyperCutTiles[6 + (i * 5) + j] = TRUE;
ret = TRUE;
}
- if (MapGridIsImpassableAt(x, y) == TRUE)
+ #ifdef BUGFIX
+ // Collision has a range 0-3, any value != 0 is impassable
+ if (MapGridGetCollisionAt(x, y))
+ #else
+ if (MapGridGetCollisionAt(x, y) == 1)
+ #endif
{
cutTiles[i * 3 + j] = FALSE;
}
@@ -289,7 +294,7 @@ bool8 FldEff_UseCutOnGrass(void)
static void FieldCallback_CutTree(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(EventScript_UseCut);
+ ScriptContext_SetupScript(EventScript_UseCut);
}
bool8 FldEff_UseCutOnTree(void)
@@ -578,10 +583,10 @@ static void CutGrassSpriteCallbackEnd(struct Sprite *sprite)
FieldEffectStop(&gSprites[sCutGrassSpriteArrayPtr[0]], FLDEFF_CUT_GRASS);
FREE_AND_SET_NULL(sCutGrassSpriteArrayPtr);
ScriptUnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
if (IsMewPlayingHideAndSeek() == TRUE)
- ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_HideMewWhenGrassCut);
+ ScriptContext_SetupScript(FarawayIsland_Interior_EventScript_HideMewWhenGrassCut);
}
void FixLongGrassMetatilesWindowTop(s16 x, s16 y)
@@ -638,5 +643,5 @@ static void StartCutTreeFieldEffect(void)
{
PlaySE(SE_M_CUT);
FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
index a303b8423b..abdca2a88a 100644
--- a/src/fldeff_flash.c
+++ b/src/fldeff_flash.c
@@ -102,7 +102,7 @@ static void FldEff_UseFlash(void)
{
PlaySE(SE_M_REFLECT);
FlagSet(FLAG_SYS_USE_FLASH);
- ScriptContext1_SetupScript(EventScript_UseFlash);
+ ScriptContext_SetupScript(EventScript_UseFlash);
}
static void CB2_ChangeMapMain(void)
diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c
index 4f3f53fa60..c01e88b512 100644
--- a/src/fldeff_misc.c
+++ b/src/fldeff_misc.c
@@ -586,7 +586,7 @@ bool8 SetUpFieldMove_SecretPower(void)
static void FieldCallback_SecretBaseCave(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(SecretBase_EventScript_CaveUseSecretPower);
+ ScriptContext_SetupScript(SecretBase_EventScript_CaveUseSecretPower);
}
bool8 FldEff_UseSecretPowerCave(void)
@@ -640,13 +640,13 @@ static void SpriteCB_CaveEntranceOpen(struct Sprite *sprite)
static void SpriteCB_CaveEntranceEnd(struct Sprite *sprite)
{
FieldEffectStop(sprite, FLDEFF_SECRET_POWER_CAVE);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
static void FieldCallback_SecretBaseTree(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(SecretBase_EventScript_TreeUseSecretPower);
+ ScriptContext_SetupScript(SecretBase_EventScript_TreeUseSecretPower);
}
bool8 FldEff_UseSecretPowerTree(void)
@@ -714,13 +714,13 @@ static void SpriteCB_TreeEntranceOpen(struct Sprite *sprite)
static void SpriteCB_TreeEntranceEnd(struct Sprite *sprite)
{
FieldEffectStop(sprite, FLDEFF_SECRET_POWER_TREE);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
static void FieldCallback_SecretBaseShrub(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(SecretBase_EventScript_ShrubUseSecretPower);
+ ScriptContext_SetupScript(SecretBase_EventScript_ShrubUseSecretPower);
}
bool8 FldEff_UseSecretPowerShrub(void)
@@ -778,7 +778,7 @@ static void SpriteCB_ShrubEntranceOpen(struct Sprite *sprite)
static void SpriteCB_ShrubEntranceEnd(struct Sprite *sprite)
{
FieldEffectStop(sprite, FLDEFF_SECRET_POWER_SHRUB);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
#define tX data[0]
@@ -820,7 +820,7 @@ static void Task_SecretBasePCTurnOn(u8 taskId)
MapGridSetMetatileIdAt(tX, tY, METATILE_SecretBase_PC_On);
CurrentMapDrawMetatileAt(tX, tY);
FieldEffectActiveListRemove(FLDEFF_PCTURN_ON);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
return;
}
@@ -1034,7 +1034,7 @@ bool8 FldEff_SandPillar(void)
{
s16 x, y;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
gFieldEffectArguments[5] = x;
@@ -1113,7 +1113,7 @@ static void SpriteCB_SandPillar_BreakBase(struct Sprite *sprite)
static void SpriteCB_SandPillar_End(struct Sprite *sprite)
{
FieldEffectStop(sprite, FLDEFF_SAND_PILLAR);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
void InteractWithShieldOrTVDecoration(void)
@@ -1200,29 +1200,35 @@ bool8 IsLargeBreakableDecoration(u16 metatileId, bool8 checkBase)
return FALSE;
}
+#define tState data[0]
+#define tMosaic data[1]
+
static void Task_FieldPoisonEffect(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
- data[1] += 2;
- if (data[1] > 8)
- data[0]++;
+ tMosaic += 2;
+ if (tMosaic > 8)
+ tState++;
break;
case 1:
- data[1] -= 2;
- if (data[1] == 0)
- data[0]++;
+ tMosaic -= 2;
+ if (tMosaic == 0)
+ tState++;
break;
case 2:
DestroyTask(taskId);
return;
}
- SetGpuReg(REG_OFFSET_MOSAIC, (data[1] << 4) | data[1]);
+ SetGpuReg(REG_OFFSET_MOSAIC, (tMosaic << 4) | tMosaic);
}
+#undef tState
+#undef tMosaic
+
void FldEffPoison_Start(void)
{
PlaySE(SE_FIELD_POISON);
@@ -1273,7 +1279,7 @@ static void Task_WateringBerryTreeAnim_End(u8 taskId)
{
SetPlayerAvatarTransitionFlags(GetPlayerAvatarFlags());
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
void DoWateringBerryTreeAnim(void)
diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c
index a30000e526..27689b02e3 100644
--- a/src/fldeff_rocksmash.c
+++ b/src/fldeff_rocksmash.c
@@ -55,7 +55,7 @@ static void Task_DoFieldMove_Init(u8 taskId)
{
u8 objEventId;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gPlayerAvatar.preventStep = TRUE;
objEventId = gPlayerAvatar.objectEventId;
if (!ObjectEventIsMovementOverridden(&gObjectEvents[objEventId])
@@ -144,7 +144,7 @@ bool8 SetUpFieldMove_RockSmash(void)
static void FieldCallback_RockSmash(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(EventScript_UseRockSmash);
+ ScriptContext_SetupScript(EventScript_UseRockSmash);
}
bool8 FldEff_UseRockSmash(void)
@@ -162,5 +162,5 @@ static void FieldMove_RockSmash(void)
{
PlaySE(SE_M_ROCK_THROW);
FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
index 61960d0ffc..9312150403 100644
--- a/src/fldeff_strength.c
+++ b/src/fldeff_strength.c
@@ -30,7 +30,7 @@ bool8 SetUpFieldMove_Strength(void)
static void FieldCallback_Strength(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(EventScript_UseStrength);
+ ScriptContext_SetupScript(EventScript_UseStrength);
}
bool8 FldEff_UseStrength(void)
@@ -46,5 +46,5 @@ bool8 FldEff_UseStrength(void)
static void StartStrengthFieldEffect(void)
{
FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
index e34d195045..7e93526094 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -93,7 +93,7 @@ static void FailSweetScentEncounter(u8 taskId)
{
CpuFastSet(gPaletteDecompressionBuffer, gPlttBufferUnfaded, 0x100);
SetWeatherPalStateIdle();
- ScriptContext1_SetupScript(EventScript_FailSweetScent);
+ ScriptContext_SetupScript(EventScript_FailSweetScent);
DestroyTask(taskId);
}
}
diff --git a/src/fonts.c b/src/fonts.c
index df904bacaf..8ef32bfef2 100644
--- a/src/fonts.c
+++ b/src/fonts.c
@@ -110,38 +110,38 @@ ALIGNED(4) const u8 gFontNarrowLatinGlyphWidths[] = {
ALIGNED(4) const u16 gFontShortLatinGlyphs[] = INCBIN_U16("graphics/fonts/short.latfont");
ALIGNED(4) const u8 gFontShortLatinGlyphWidths[] = {
- 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6,
- 8, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 3,
- 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 9, 8, 8, 3,
- 3, 3, 3, 3, 10, 8, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 6, 6, 6, 8, 8, 8, 8, 8, 8, 4, 6, 8, 5, 5, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 6,
- 3, 3, 3, 3, 3, 3, 3, 6, 3, 12, 12, 12, 12, 1, 2, 3,
- 4, 5, 6, 7, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 5,
- 6, 6, 6, 3, 3, 6, 6, 8, 5, 9, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 4, 6, 5,
- 5, 6, 5, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 6, 6, 8,
- 5, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3,
+ 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6,
+ 8, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 3,
+ 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 9, 8, 8, 3,
+ 3, 3, 3, 3, 10, 8, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 6, 6, 6, 8, 8, 8, 8, 8, 8, 4, 6, 8, 5, 5, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 6,
+ 3, 3, 3, 3, 3, 3, 3, 6, 3, 12, 12, 12, 12, 1, 2, 3,
+ 4, 5, 6, 7, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 5,
+ 6, 6, 6, 3, 3, 6, 6, 8, 5, 9, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 4, 6, 5,
+ 5, 6, 5, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 6, 6, 8,
+ 5, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3,
};
ALIGNED(4) const u16 gFontNormalLatinGlyphs[] = INCBIN_U16("graphics/fonts/normal.latfont");
diff --git a/src/graphics.c b/src/graphics.c
index 8745ac6642..9e858deecb 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -15,6 +15,282 @@ const u32 gSmokescreenImpactPalette[] = INCBIN_U32("graphics/battle_anims/sprite
const u32 gBlankGfxCompressed[] = INCBIN_U32("graphics/interface/blank.4bpp.lz");
+// New Battle anims Particles
+const u32 gBattleAnimSpriteGfx_WhiteStreak[] = INCBIN_U32("graphics/battle_anims/sprites/white_streak.4bpp.lz");
+const u32 gBattleAnimSpritePal_WhiteStreak[] = INCBIN_U32("graphics/battle_anims/sprites/white_streak.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_PurpleJab[] = INCBIN_U32("graphics/battle_anims/sprites/purple_jab.4bpp.lz");
+const u32 gBattleAnimSpritePal_PurpleJab[] = INCBIN_U32("graphics/battle_anims/sprites/purple_jab.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_ToxicSpikes[] = INCBIN_U32("graphics/battle_anims/sprites/toxic_spikes.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_EnergyBall[] = INCBIN_U32("graphics/battle_anims/sprites/energy_ball.4bpp.lz");
+const u32 gBattleAnimSpritePal_EnergyBall[] = INCBIN_U32("graphics/battle_anims/sprites/energy_ball.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_MegaStone[] = INCBIN_U32("graphics/battle_anims/sprites/mega_stone.4bpp.lz");
+const u32 gBattleAnimSpritePal_MegaStone[] = INCBIN_U32("graphics/battle_anims/sprites/mega_stone.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_MegaParticles[] = INCBIN_U32("graphics/battle_anims/sprites/mega_particles.4bpp.lz");
+const u32 gBattleAnimSpritePal_MegaParticles[] = INCBIN_U32("graphics/battle_anims/sprites/mega_particles.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_MegaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/mega_symbol.4bpp.lz");
+const u32 gBattleAnimSpritePal_MegaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/mega_symbol.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_AlphaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/alpha_symbol.4bpp.lz");
+const u32 gBattleAnimSpritePal_AlphaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/alpha_symbol.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_OmegaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/omega_symbol.4bpp.lz");
+const u32 gBattleAnimSpritePal_OmegaSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/omega_symbol.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_PrimalParticles[] = INCBIN_U32("graphics/battle_anims/sprites/primal_particles.4bpp.lz");
+const u32 gBattleAnimSpritePal_PrimalParticles[] = INCBIN_U32("graphics/battle_anims/sprites/primal_particles.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_FlashCannonBall[] = INCBIN_U32("graphics/battle_anims/sprites/flash_cannon_ball.4bpp.lz");
+const u32 gBattleAnimSpritePal_FlashCannonBall[] = INCBIN_U32("graphics/battle_anims/sprites/flash_cannon_ball.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_WaterGun[] = INCBIN_U32("graphics/battle_anims/sprites/water_gun.4bpp.lz");
+const u32 gBattleAnimSpritePal_WaterGun[] = INCBIN_U32("graphics/battle_anims/sprites/water_gun.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Punishment[] = INCBIN_U32("graphics/battle_anims/sprites/punishment.4bpp.lz");
+const u32 gBattleAnimSpritePal_Punishment[] = INCBIN_U32("graphics/battle_anims/sprites/punishment.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_QuickGuard[] = INCBIN_U32("graphics/battle_anims/sprites/quick_guard.4bpp.lz");
+const u32 gBattleAnimSpritePal_QuickGuard[] = INCBIN_U32("graphics/battle_anims/sprites/quick_guard.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_AcupressureFinger[] = INCBIN_U32("graphics/battle_anims/sprites/new/acupressure_finger.4bpp.lz");
+const u32 gBattleAnimSpritePal_AcupressureFinger[] = INCBIN_U32("graphics/battle_anims/sprites/new/acupressure_finger.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_AlphaStone[] = INCBIN_U32("graphics/battle_anims/sprites/new/alpha_stone.4bpp.lz");
+const u32 gBattleAnimSpritePal_AlphaStone[] = INCBIN_U32("graphics/battle_anims/sprites/new/alpha_stone.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Anchor[] = INCBIN_U32("graphics/battle_anims/sprites/new/anchor.4bpp.lz");
+
+const u32 gBattleAnimSpriteGfx_Apple[] = INCBIN_U32("graphics/battle_anims/sprites/new/apple.4bpp.lz");
+const u32 gBattleAnimSpritePal_Apple[] = INCBIN_U32("graphics/battle_anims/sprites/new/apple.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Arrows[] = INCBIN_U32("graphics/battle_anims/sprites/new/arrows.4bpp.lz");
+
+const u32 gBattleAnimSpriteGfx_AssuranceHand[] = INCBIN_U32("graphics/battle_anims/sprites/new/assurance_hand.4bpp.lz");
+const u32 gBattleAnimSpritePal_AssuranceHand[] = INCBIN_U32("graphics/battle_anims/sprites/new/assurance_hand.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_AuraSphere[] = INCBIN_U32("graphics/battle_anims/sprites/new/aura_sphere.4bpp.lz");
+const u32 gBattleAnimSpritePal_AuraSphere[] = INCBIN_U32("graphics/battle_anims/sprites/new/aura_sphere.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_AvalancheRocks[] = INCBIN_U32("graphics/battle_anims/sprites/new/avalanche_rocks.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewPokeball[] = INCBIN_U32("graphics/battle_anims/sprites/new/baton_pass_ball.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewPokeball[] = INCBIN_U32("graphics/battle_anims/sprites/new/baton_pass_ball.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_BerryEaten[] = INCBIN_U32("graphics/battle_anims/sprites/new/berry_eaten.4bpp.lz");
+const u32 gBattleAnimSpritePal_BerryEaten[] = INCBIN_U32("graphics/battle_anims/sprites/new/berry_eaten.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_BerryNormal[] = INCBIN_U32("graphics/battle_anims/sprites/new/berry_normal.4bpp.lz");
+const u32 gBattleAnimSpritePal_BerryNormal[] = INCBIN_U32("graphics/battle_anims/sprites/new/berry_normal.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_BigRock[] = INCBIN_U32("graphics/battle_anims/sprites/new/big_rock.4bpp.lz");
+const u32 gBattleAnimSpritePal_BigRock[] = INCBIN_U32("graphics/battle_anims/sprites/new/big_rock.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_BlacephalonHead[] = INCBIN_U32("graphics/battle_anims/sprites/new/blacephalon_head.4bpp.lz");
+const u32 gBattleAnimSpritePal_BlacephalonHead[] = INCBIN_U32("graphics/battle_anims/sprites/new/blacephalon_head.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_BlueFlare[] = INCBIN_U32("graphics/battle_anims/sprites/new/blue_flare.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Branch[] = INCBIN_U32("graphics/battle_anims/sprites/new/branch.4bpp.lz");
+const u32 gBattleAnimSpritePal_Branch[] = INCBIN_U32("graphics/battle_anims/sprites/new/branch.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Brine[] = INCBIN_U32("graphics/battle_anims/sprites/new/brine.4bpp.lz");
+const u32 gBattleAnimSpritePal_Brine[] = INCBIN_U32("graphics/battle_anims/sprites/new/brine.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_ChainLink[] = INCBIN_U32("graphics/battle_anims/sprites/new/chain_link.4bpp.lz");
+const u32 gBattleAnimSpritePal_ChainLink[] = INCBIN_U32("graphics/battle_anims/sprites/new/chain_link.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Chop[] = INCBIN_U32("graphics/battle_anims/sprites/new/chop.4bpp.lz");
+const u32 gBattleAnimSpritePal_Chop[] = INCBIN_U32("graphics/battle_anims/sprites/new/chop.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Cacoon[] = INCBIN_U32("graphics/battle_anims/sprites/new/cacoon.4bpp.lz");
+const u32 gBattleAnimSpritePal_Cacoon[] = INCBIN_U32("graphics/battle_anims/sprites/new/cacoon.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Confide[] = INCBIN_U32("graphics/battle_anims/sprites/new/confide.4bpp.lz");
+const u32 gBattleAnimSpritePal_Confide[] = INCBIN_U32("graphics/battle_anims/sprites/new/confide.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_CraftyShield[] = INCBIN_U32("graphics/battle_anims/sprites/new/crafty_shield.4bpp.lz");
+const u32 gBattleAnimSpritePal_CraftyShield[] = INCBIN_U32("graphics/battle_anims/sprites/new/crafty_shield.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewNail[] = INCBIN_U32("graphics/battle_anims/sprites/new/curse_nail.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewNail[] = INCBIN_U32("graphics/battle_anims/sprites/new/curse_nail.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_DracoMeteor[] = INCBIN_U32("graphics/battle_anims/sprites/new/draco_meteor.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_DragonPulseRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/dragon_pulse_ring.4bpp.lz");
+const u32 gBattleAnimSpritePal_DragonPulseRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/dragon_pulse_ring.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_DreepyMissile[] = INCBIN_U32("graphics/battle_anims/sprites/new/dreepy_missile.4bpp.lz");
+const u32 gBattleAnimSpritePal_DreepyMissile[] = INCBIN_U32("graphics/battle_anims/sprites/new/dreepy_missile.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Drill[] = INCBIN_U32("graphics/battle_anims/sprites/new/drill.4bpp.lz");
+const u32 gBattleAnimSpritePal_Drill[] = INCBIN_U32("graphics/battle_anims/sprites/new/drill.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewEmbers[] = INCBIN_U32("graphics/battle_anims/sprites/new/embers.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewEmbers[] = INCBIN_U32("graphics/battle_anims/sprites/new/embers.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_FairyLockChains[] = INCBIN_U32("graphics/battle_anims/sprites/new/fairy_lock_chains.4bpp.lz");
+
+const u32 gBattleAnimSpriteGfx_Fishies[] = INCBIN_U32("graphics/battle_anims/sprites/new/fishies.4bpp.lz");
+const u32 gBattleAnimSpritePal_Fishies[] = INCBIN_U32("graphics/battle_anims/sprites/new/fishies.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewFly[] = INCBIN_U32("graphics/battle_anims/sprites/new/fly.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewFly[] = INCBIN_U32("graphics/battle_anims/sprites/new/fly.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_FusionFlare[] = INCBIN_U32("graphics/battle_anims/sprites/new/fusion_flare.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_GarbagePoisonPillar[] = INCBIN_U32("graphics/battle_anims/sprites/new/garbage_poison_column.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Gear[] = INCBIN_U32("graphics/battle_anims/sprites/new/gear.4bpp.lz");
+const u32 gBattleAnimSpritePal_Gear[] = INCBIN_U32("graphics/battle_anims/sprites/new/gear.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_GigavoltHavocSpear[] = INCBIN_U32("graphics/battle_anims/sprites/new/gigavolt_havoc_spear.4bpp.lz");
+const u32 gBattleAnimSpritePal_GigavoltHavocSpear[] = INCBIN_U32("graphics/battle_anims/sprites/new/gigavolt_havoc_spear.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_GoldenApple[] = INCBIN_U32("graphics/battle_anims/sprites/new/golden_apple.4bpp.lz");
+const u32 gBattleAnimSpritePal_GoldenApple[] = INCBIN_U32("graphics/battle_anims/sprites/new/golden_apple.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_GreenDrake[] = INCBIN_U32("graphics/battle_anims/sprites/new/green_drake.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewGreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/new/green_star.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewGreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/new/green_star.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_HeartStamp[] = INCBIN_U32("graphics/battle_anims/sprites/new/heart_stamp.4bpp.lz");
+const u32 gBattleAnimSpritePal_HeartStamp[] = INCBIN_U32("graphics/battle_anims/sprites/new/heart_stamp.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_ZygardeHexes[] = INCBIN_U32("graphics/battle_anims/sprites/new/hexes.4bpp.lz");
+const u32 gBattleAnimSpritePal_ZygardeHexes[] = INCBIN_U32("graphics/battle_anims/sprites/new/hexes.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_HoopaHand[] = INCBIN_U32("graphics/battle_anims/sprites/new/hoopa_hand.4bpp.lz");
+const u32 gBattleAnimSpritePal_HoopaHand[] = INCBIN_U32("graphics/battle_anims/sprites/new/hoopa_hand.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_HoopaRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/hoopa_ring.4bpp.lz");
+const u32 gBattleAnimSpritePal_HoopaRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/hoopa_ring.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewHornHit[] = INCBIN_U32("graphics/battle_anims/sprites/new/horn.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewHornHit[] = INCBIN_U32("graphics/battle_anims/sprites/new/horn.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_HornLeech[] = INCBIN_U32("graphics/battle_anims/sprites/new/horn_leech.4bpp.lz");
+const u32 gBattleAnimSpritePal_HornLeech[] = INCBIN_U32("graphics/battle_anims/sprites/new/horn_leech.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_HorseshoeFist[] = INCBIN_U32("graphics/battle_anims/sprites/new/horseshoe_fist.4bpp.lz");
+const u32 gBattleAnimSpritePal_HorseshoeFist[] = INCBIN_U32("graphics/battle_anims/sprites/new/horseshoe_fist.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_HydroPump[] = INCBIN_U32("graphics/battle_anims/sprites/new/hydro_pump.4bpp.lz");
+const u32 gBattleAnimSpritePal_HydroPump[] = INCBIN_U32("graphics/battle_anims/sprites/new/hydro_pump.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_IceRock[] = INCBIN_U32("graphics/battle_anims/sprites/new/ice_rock.4bpp.lz");
+const u32 gBattleAnimSpritePal_IceRock[] = INCBIN_U32("graphics/battle_anims/sprites/new/ice_rock.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_LargeSpike[] = INCBIN_U32("graphics/battle_anims/sprites/new/large_spike.4bpp.lz");
+const u32 gBattleAnimSpritePal_LargeSpike[] = INCBIN_U32("graphics/battle_anims/sprites/new/large_spike.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewLeaf[] = INCBIN_U32("graphics/battle_anims/sprites/new/leaves.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewLeaf[] = INCBIN_U32("graphics/battle_anims/sprites/new/leaves.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewLeechSeed[] = INCBIN_U32("graphics/battle_anims/sprites/new/leech_seed.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewLeechSeed[] = INCBIN_U32("graphics/battle_anims/sprites/new/leech_seed.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_LightningRain[] = INCBIN_U32("graphics/battle_anims/sprites/new/lightning_rain.4bpp.lz");
+const u32 gBattleAnimSpritePal_LightningRain[] = INCBIN_U32("graphics/battle_anims/sprites/new/lightning_rain.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewEye[] = INCBIN_U32("graphics/battle_anims/sprites/new/mean_look.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewEye[] = INCBIN_U32("graphics/battle_anims/sprites/new/mean_look.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_MetalBits[] = INCBIN_U32("graphics/battle_anims/sprites/new/metal_bits.4bpp.lz");
+
+const u32 gBattleAnimSpriteGfx_MudBomb[] = INCBIN_U32("graphics/battle_anims/sprites/new/mud_bomb.4bpp.lz");
+const u32 gBattleAnimSpritePal_MudBomb[] = INCBIN_U32("graphics/battle_anims/sprites/new/mud_bomb.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Mushroom[] = INCBIN_U32("graphics/battle_anims/sprites/new/mushroom.4bpp.lz");
+const u32 gBattleAnimSpritePal_Mushroom[] = INCBIN_U32("graphics/battle_anims/sprites/new/mushroom.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_NaturalGiftRing[] = INCBIN_U32("graphics/battle_anims/sprites/new/natural_gift_ring.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NecrozmaStar[] = INCBIN_U32("graphics/battle_anims/sprites/new/necrozma_star.4bpp.lz");
+const u32 gBattleAnimSpritePal_NecrozmaStar[] = INCBIN_U32("graphics/battle_anims/sprites/new/necrozma_star.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_NewImpact[] = INCBIN_U32("graphics/battle_anims/sprites/new/impact.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Obstruct[] = INCBIN_U32("graphics/battle_anims/sprites/new/obstruct.4bpp.lz");
+const u32 gBattleAnimSpritePal_Obstruct[] = INCBIN_U32("graphics/battle_anims/sprites/new/obstruct.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_OmegaStone[] = INCBIN_U32("graphics/battle_anims/sprites/new/omega_stone.4bpp.lz");
+const u32 gBattleAnimSpritePal_OmegaStone[] = INCBIN_U32("graphics/battle_anims/sprites/new/omega_stone.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_PinkDiamond[] = INCBIN_U32("graphics/battle_anims/sprites/new/pink_diamond.4bpp.lz");
+const u32 gBattleAnimSpritePal_PinkDiamond[] = INCBIN_U32("graphics/battle_anims/sprites/new/pink_diamond.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_PoisonColumn[] = INCBIN_U32("graphics/battle_anims/sprites/new/poison_column.4bpp.lz");
+const u32 gBattleAnimSpritePal_PoisonColumn[] = INCBIN_U32("graphics/battle_anims/sprites/new/poison_column.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_PowerTrick[] = INCBIN_U32("graphics/battle_anims/sprites/new/power_trick.4bpp.lz");
+const u32 gBattleAnimSpritePal_PowerTrick[] = INCBIN_U32("graphics/battle_anims/sprites/new/power_trick.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_PurpleDrake[] = INCBIN_U32("graphics/battle_anims/sprites/new/purple_drake.4bpp.lz");
+const u32 gBattleAnimSpritePal_PurpleDrake[] = INCBIN_U32("graphics/battle_anims/sprites/new/purple_drake.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_RazorShell[] = INCBIN_U32("graphics/battle_anims/sprites/new/razor_shell.4bpp.lz");
+const u32 gBattleAnimSpritePal_RazorShell[] = INCBIN_U32("graphics/battle_anims/sprites/new/razor_shell.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_RocksSmall[] = INCBIN_U32("graphics/battle_anims/sprites/new/rock_small.4bpp.lz");
+
+const u32 gBattleAnimSpriteGfx_NewRocks[] = INCBIN_U32("graphics/battle_anims/sprites/new/rocks.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewRocks[] = INCBIN_U32("graphics/battle_anims/sprites/new/rocks.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_ShellLeft[] = INCBIN_U32("graphics/battle_anims/sprites/new/shell_left.4bpp.lz");
+const u32 gBattleAnimSpritePal_ShellLeft[] = INCBIN_U32("graphics/battle_anims/sprites/new/shell_left.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_ShellRight[] = INCBIN_U32("graphics/battle_anims/sprites/new/shell_right.4bpp.lz");
+
+const u32 gBattleAnimSpritePal_SpacialRendSlices[] = INCBIN_U32("graphics/battle_anims/sprites/new/spacial_rend_slices.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewSpikes[] = INCBIN_U32("graphics/battle_anims/sprites/new/spikes.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewSpikes[] = INCBIN_U32("graphics/battle_anims/sprites/new/spikes.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_SpiritShackleArrow[] = INCBIN_U32("graphics/battle_anims/sprites/new/spirit_shackle_arrow.4bpp.lz");
+const u32 gBattleAnimSpritePal_SpiritShackleArrow[] = INCBIN_U32("graphics/battle_anims/sprites/new/spirit_shackle_arrow.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_SteamEruption[] = INCBIN_U32("graphics/battle_anims/sprites/new/steam_eruption.4bpp.lz");
+const u32 gBattleAnimSpritePal_SteamEruption[] = INCBIN_U32("graphics/battle_anims/sprites/new/steam_eruption.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Steamroller[] = INCBIN_U32("graphics/battle_anims/sprites/new/steamroller.4bpp.lz");
+const u32 gBattleAnimSpritePal_Steamroller[] = INCBIN_U32("graphics/battle_anims/sprites/new/steamroller.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_StonePillar[] = INCBIN_U32("graphics/battle_anims/sprites/new/stone_pillar.4bpp.lz");
+const u32 gBattleAnimSpritePal_StonePillar[] = INCBIN_U32("graphics/battle_anims/sprites/new/stone_pillar.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_Poltergeist[] = INCBIN_U32("graphics/battle_anims/sprites/new/poltergeist.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_StraightBeam[] = INCBIN_U32("graphics/battle_anims/sprites/new/straight_beam.4bpp.lz");
+const u32 gBattleAnimSpritePal_StraightBeam[] = INCBIN_U32("graphics/battle_anims/sprites/new/straight_beam.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_SubstituteBack[] = INCBIN_U32("graphics/battle_anims/sprites/new/substitute_back.4bpp.lz");
+const u32 gBattleAnimSpriteGfx_NewSubstituteFront[] = INCBIN_U32("graphics/battle_anims/sprites/new/substitute_front.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewSubstituteFront[] = INCBIN_U32("graphics/battle_anims/sprites/new/substitute_front.gbapal.lz");
+
+const u32 gBattleAnimSpritePal_NewSurf[] = INCBIN_U32("graphics/battle_anims/sprites/new/surf_new.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewSword[] = INCBIN_U32("graphics/battle_anims/sprites/new/sword.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewSword[] = INCBIN_U32("graphics/battle_anims/sprites/new/sword.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewTeeth[] = INCBIN_U32("graphics/battle_anims/sprites/new/teeth.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewTeeth[] = INCBIN_U32("graphics/battle_anims/sprites/new/teeth.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_NewHandsAndFeet[] = INCBIN_U32("graphics/battle_anims/sprites/new/thrash.4bpp.lz");
+const u32 gBattleAnimSpritePal_NewHandsAndFeet[] = INCBIN_U32("graphics/battle_anims/sprites/new/thrash.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Tornado[] = INCBIN_U32("graphics/battle_anims/sprites/new/tornado.4bpp.lz");
+const u32 gBattleAnimSpritePal_Tornado[] = INCBIN_U32("graphics/battle_anims/sprites/new/tornado.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_ZMoveSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/new/z_move_symbol.4bpp.lz");
+const u32 gBattleAnimSpritePal_ZMoveSymbol[] = INCBIN_U32("graphics/battle_anims/sprites/new/z_move_symbol.gbapal.lz");
+
+
// Battle anims
const u32 gBattleAnimSpriteGfx_Bubble[] = INCBIN_U32("graphics/battle_anims/sprites/bubble.4bpp.lz");
const u32 gBattleAnimSpriteGfx_Bone[] = INCBIN_U32("graphics/battle_anims/sprites/bone.4bpp.lz");
@@ -22,6 +298,7 @@ const u32 gBattleAnimSpriteGfx_AirWave[] = INCBIN_U32("graphics/battle_anims/spr
const u32 gBattleAnimSpriteGfx_Orb[] = INCBIN_U32("graphics/battle_anims/sprites/orb.4bpp.lz");
const u32 gBattleAnimSpriteGfx_Sword[] = INCBIN_U32("graphics/battle_anims/sprites/sword.4bpp.lz");
const u32 gBattleAnimSpriteGfx_Seed[] = INCBIN_U32("graphics/battle_anims/sprites/seed.4bpp.lz");
+const u32 gBattleAnimSpriteGfx_SeedBrown[] = INCBIN_U32("graphics/battle_anims/sprites/seed_new.4bpp.lz");
const u32 gBattleAnimSpritePal_RainDrops[] = INCBIN_U32("graphics/battle_anims/sprites/rain_drops.gbapal.lz");
const u32 gBattleAnimSpritePal_Bone[] = INCBIN_U32("graphics/battle_anims/sprites/bone.gbapal.lz");
@@ -29,6 +306,7 @@ const u32 gBattleAnimSpritePal_AirWave[] = INCBIN_U32("graphics/battle_anims/spr
const u32 gBattleAnimSpritePal_Orb[] = INCBIN_U32("graphics/battle_anims/sprites/orb.gbapal.lz");
const u32 gBattleAnimSpritePal_Sword[] = INCBIN_U32("graphics/battle_anims/sprites/sword.gbapal.lz");
const u32 gBattleAnimSpritePal_Seed[] = INCBIN_U32("graphics/battle_anims/sprites/seed.gbapal.lz");
+const u32 gBattleAnimSpritePal_SeedBrown[] = INCBIN_U32("graphics/battle_anims/sprites/seed_new.gbapal.lz");
const u32 gBattleAnimSpriteGfx_Needle[] = INCBIN_U32("graphics/battle_anims/sprites/needle.4bpp.lz");
const u32 gBattleAnimSpritePal_Needle[] = INCBIN_U32("graphics/battle_anims/sprites/needle.gbapal.lz");
@@ -86,6 +364,21 @@ const u32 gBattleAnimSpritePal_Hit2[] = INCBIN_U32("graphics/battle_anims/sprite
const u32 gBattleAnimSpritePal_WavingHand[] = INCBIN_U32("graphics/battle_anims/sprites/waving_hand.gbapal.lz");
const u32 gBattleAnimSpriteGfx_WavingHand[] = INCBIN_U32("graphics/battle_anims/sprites/waving_hand.4bpp.lz");
+const u32 gBattleAnimSpriteGfx_Feint[] = INCBIN_U32("graphics/battle_anims/sprites/feint_punch.4bpp.lz");
+const u32 gBattleAnimSpritePal_Feint[] = INCBIN_U32("graphics/battle_anims/sprites/feint_punch.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_TrumpCard[] = INCBIN_U32("graphics/battle_anims/sprites/trump_cards.4bpp.lz");
+const u32 gBattleAnimSpritePal_TrumpCard[] = INCBIN_U32("graphics/battle_anims/sprites/trump_cards.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_TrumpCardParticles[] = INCBIN_U32("graphics/battle_anims/sprites/trump_card_particles.4bpp.lz");
+const u32 gBattleAnimSpritePal_TrumpCardParticles[] = INCBIN_U32("graphics/battle_anims/sprites/trump_card_particles.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_Accupressure[] = INCBIN_U32("graphics/battle_anims/sprites/accupressure.4bpp.lz");
+const u32 gBattleAnimSpritePal_Accupressure[] = INCBIN_U32("graphics/battle_anims/sprites/accupressure.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_WringOut[] = INCBIN_U32("graphics/battle_anims/sprites/wring_out.4bpp.lz");
+const u32 gBattleAnimSpritePal_WringOut[] = INCBIN_U32("graphics/battle_anims/sprites/wring_out.gbapal.lz");
+
const u32 gBattleAnimSpriteGfx_ClosingEye[] = INCBIN_U32("graphics/battle_anims/sprites/closing_eye.4bpp.lz");
const u32 gBattleAnimSpritePal_ClosingEye[] = INCBIN_U32("graphics/battle_anims/sprites/closing_eye.gbapal.lz");
@@ -121,6 +414,39 @@ const u32 gBattleAnimSpriteGfx_Lightning2[] = INCBIN_U32("graphics/battle_anims/
const u32 gBattleAnimSpriteGfx_Lightning[] = INCBIN_U32("graphics/battle_anims/sprites/lightning.4bpp.lz");
+const u32 gBattleAnimSpriteGfx_ColoredOrbs[] = INCBIN_U32("graphics/battle_anims/sprites/colored_orbs.4bpp.lz");
+const u32 gBattleAnimSpritePal_ColoredOrbs[] = INCBIN_U32("graphics/battle_anims/sprites/colored_orbs.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_WorrySeed[] = INCBIN_U32("graphics/battle_anims/sprites/worry_seed.4bpp.lz");
+const u32 gBattleAnimSpritePal_WorrySeed[] = INCBIN_U32("graphics/battle_anims/sprites/worry_seed.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_SmallCloud[] = INCBIN_U32("graphics/battle_anims/sprites/small_cloud.4bpp.lz");
+const u32 gBattleAnimSpritePal_SmallCloud[] = INCBIN_U32("graphics/battle_anims/sprites/small_cloud.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_AttackOrder[] = INCBIN_U32("graphics/battle_anims/sprites/attack_order.4bpp.lz");
+const u32 gBattleAnimSpritePal_AttackOrder[] = INCBIN_U32("graphics/battle_anims/sprites/attack_order.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_DragonPulse[] = INCBIN_U32("graphics/battle_anims/sprites/dragon_pulse.4bpp.lz");
+const u32 gBattleAnimSpritePal_DragonPulse[] = INCBIN_U32("graphics/battle_anims/sprites/dragon_pulse.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_WoodHammer[] = INCBIN_U32("graphics/battle_anims/sprites/wood_hammer.4bpp.lz");
+const u32 gBattleAnimSpritePal_WoodHammer[] = INCBIN_U32("graphics/battle_anims/sprites/wood_hammer.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_PsychoCut[] = INCBIN_U32("graphics/battle_anims/sprites/psycho_cut.4bpp.lz");
+const u32 gBattleAnimSpritePal_PsychoCut[] = INCBIN_U32("graphics/battle_anims/sprites/psycho_cut.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_PowerGem[] = INCBIN_U32("graphics/battle_anims/sprites/power_gem.4bpp.lz");
+const u32 gBattleAnimSpritePal_PowerGem[] = INCBIN_U32("graphics/battle_anims/sprites/power_gem.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_StoneEdge[] = INCBIN_U32("graphics/battle_anims/sprites/stone_edge.4bpp.lz");
+const u32 gBattleAnimSpritePal_StoneEdge[] = INCBIN_U32("graphics/battle_anims/sprites/stone_edge.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_StealthRock[] = INCBIN_U32("graphics/battle_anims/sprites/stealth_rock.4bpp.lz");
+const u32 gBattleAnimSpritePal_StealthRock[] = INCBIN_U32("graphics/battle_anims/sprites/stealth_rock.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_PoisonJab[] = INCBIN_U32("graphics/battle_anims/sprites/poison_jab.4bpp.lz");
+const u32 gBattleAnimSpritePal_PoisonJab[] = INCBIN_U32("graphics/battle_anims/sprites/poison_jab.gbapal.lz");
+
const u32 gBattleAnimSpriteGfx_SpinningBall[] = INCBIN_U32("graphics/battle_anims/unused/spinning_ball.4bpp.lz");
const u32 gBattleAnimSpritePal_SpinningBall[] = INCBIN_U32("graphics/battle_anims/unused/spinning_ball.gbapal.lz");
const u32 gBattleAnimSpritePal_SpinningBall2[] = INCBIN_U32("graphics/battle_anims/unused/spinning_ball_2.gbapal.lz");
@@ -464,6 +790,9 @@ const u32 gBattleAnimSpritePal_Impact[] = INCBIN_U32("graphics/battle_anims/spri
const u32 gBattleAnimSpriteGfx_Particles[] = INCBIN_U32("graphics/battle_anims/sprites/particles.4bpp.lz");
+const u32 gBattleAnimSpriteGfx_Particles2[] = INCBIN_U32("graphics/battle_anims/sprites/particles2.4bpp.lz");
+const u32 gBattleAnimSpritePal_Particles2[] = INCBIN_U32("graphics/battle_anims/sprites/particles2.gbapal.lz");
+
const u32 gBattleAnimSpriteGfx_CircleImpact[] = INCBIN_U32("graphics/battle_anims/sprites/circle_impact.4bpp.lz");
const u32 gBattleAnimSpritePal_CircleImpact[] = INCBIN_U32("graphics/battle_anims/sprites/circle_impact.gbapal.lz");
@@ -976,11 +1305,14 @@ const u32 gMultiBattleIntroBg_Player_Tilemap[] = INCBIN_U32("graphics/battle_fro
#include "data/graphics/intro_scene.h"
const u32 gBattleAnimSpriteGfx_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.4bpp.lz");
+const u32 gBattleAnimSpritePal_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.gbapal.lz");
const u32 gBattleAnimBgTilemap_Sandstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.bin.lz");
const u32 gBattleAnimBgImage_Sandstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.4bpp.lz");
-const u32 gBattleAnimSpritePal_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.gbapal.lz");
+const u32 gBattleAnimBgTilemap_Windstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.bin.lz");
+const u32 gBattleAnimBgImage_Windstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/windstorm_brew.4bpp.lz");
+const u32 gBattleAnimSpritePal_Windstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/windstorm_brew.gbapal.lz");
const u32 gBattleAnimSpriteGfx_MetalSoundWaves[] = INCBIN_U32("graphics/battle_anims/sprites/metal_sound_waves.4bpp.lz");
const u32 gBattleAnimSpritePal_MetalSoundWaves[] = INCBIN_U32("graphics/battle_anims/sprites/metal_sound_waves.gbapal.lz");
@@ -1043,6 +1375,178 @@ const u32 gBattleAnimSpritePal_WhipHit[] = INCBIN_U32("graphics/battle_anims/spr
const u32 gBattleAnimBgPalette_SolarBeam[] = INCBIN_U32("graphics/battle_anims/backgrounds/solarbeam.gbapal.lz");
const u32 gBattleAnimBgTilemap_SolarBeam[] = INCBIN_U32("graphics/battle_anims/backgrounds/solarbeam.bin.lz"); // Unused
+const u32 gBattleAnimBgPalette_MagmaStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/magma_storm.gbapal.lz");
+
+//new battle bgs
+
+const u32 gBattleAnimBgImage_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.4bpp.lz");
+const u32 gBattleAnimBgPalette_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.gbapal.lz");
+const u32 gBattleAnimBgTilemap_Hurricane[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hurricane.bin.lz");
+
+const u32 gBattleAnimBgPalette_RockWrecker[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/rock_wrecker.gbapal.lz");
+
+const u32 gBattleAnimBgTilemap_GigaImpactPlayer[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact_player.bin.lz");
+const u32 gBattleAnimBgTilemap_GigaImpactOpponent[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact_opponent.bin.lz");
+const u32 gBattleAnimBgTilemap_GigaImpactContest[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact_contest.bin.lz");
+const u32 gBattleAnimBgImage_GigaImpact[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact.4bpp.lz");
+const u32 gBattleAnimBgPalette_GigaImpact[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/giga_impact.gbapal.lz");
+
+const u32 gBattleAnimBgImage_SpacialRend[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend.4bpp.lz");
+const u32 gBattleAnimBgPalette_SpacialRend[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/spacial_rend.gbapal.lz");
+
+const u32 gBattleAnimBgPalette_SludgeWave[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sludge_wave.gbapal.lz");
+
+const u32 gBattleAnimBgImage_Aeroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aeroblast_tiles.4bpp.lz");
+const u32 gBattleAnimBgPalette_Aeroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aeroblast.gbapal.lz");
+const u32 gBattleAnimBgTilemap_Aeroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aeroblast_map.bin.lz");
+
+const u32 gBattleAnimBgPalette_AuraSphere[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/aura_sphere.gbapal.lz");
+
+const u32 gBattleAnimBgImage_BlackholeEclipse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/blackhole_eclipse.4bpp.lz");
+const u32 gBattleAnimBgPalette_BlackholeEclipse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/blackhole_eclipse.gbapal.lz");
+const u32 gBattleAnimBgTilemap_BlackholeEclipse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/blackhole_eclipse.bin.lz");
+
+const u32 gBattleAnimBgImage_BloomDoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bloom_doom.4bpp.lz");
+const u32 gBattleAnimBgPalette_BloomDoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bloom_doom.gbapal.lz");
+const u32 gBattleAnimBgTilemap_BloomDoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bloom_doom.bin.lz");
+
+const u32 gBattleAnimBgImage_BoltStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bolt_strike.4bpp.lz");
+const u32 gBattleAnimBgPalette_BoltStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bolt_strike.gbapal.lz");
+const u32 gBattleAnimBgTilemap_BoltStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/bolt_strike.bin.lz");
+
+const u32 gBattleAnimBgImage_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.4bpp.lz");
+const u32 gBattleAnimBgPalette_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.gbapal.lz");
+const u32 gBattleAnimBgTilemap_ClangorousSoulblaze[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/clangorous_soulblaze.bin.lz");
+
+const u32 gBattleAnimBgPalette_DynamaxCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dynamax_cannon.gbapal.lz");
+
+const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/electric_terrain.4bpp.lz");
+const u32 gBattleAnimBgPalette_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/electric_terrain.gbapal.lz");
+const u32 gBattleAnimBgTilemap_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/electric_terrain.bin.lz");
+
+const u32 gBattleAnimBgImage_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/fire1.4bpp.lz");
+const u32 gBattleAnimBgPalette_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/fire1.gbapal.lz");
+const u32 gBattleAnimBgTilemap_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/fire1.bin.lz");
+
+const u32 gBattleAnimBgPalette_Fire2[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/fire2.gbapal.lz");
+
+const u32 gBattleAnimBgImage_FocusBlast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/focus_blast.4bpp.lz");
+const u32 gBattleAnimBgPalette_FocusBlast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/focus_blast.gbapal.lz");
+const u32 gBattleAnimBgTilemap_FocusBlast[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/focus_blast.bin.lz");
+
+const u32 gBattleAnimBgPalette_GarbageFalls[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/garbage_falls.gbapal.lz");
+
+const u32 gBattleAnimBgImage_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/grassy_terrain.4bpp.lz");
+const u32 gBattleAnimBgPalette_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/grassy_terrain.gbapal.lz");
+const u32 gBattleAnimBgTilemap_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/grassy_terrain.bin.lz");
+
+const u32 gBattleAnimBgPalette_GunkShot[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/gunk_shot.gbapal.lz");
+
+const u32 gBattleAnimBgImage_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_cannon.4bpp.lz");
+const u32 gBattleAnimBgPalette_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_cannon.gbapal.lz");
+const u32 gBattleAnimBgTilemap_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_cannon.bin.lz");
+
+const u32 gBattleAnimBgImage_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_pump.4bpp.lz");
+const u32 gBattleAnimBgPalette_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_pump.gbapal.lz");
+const u32 gBattleAnimBgTilemap_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hydro_pump.bin.lz");
+
+const u32 gBattleAnimBgPalette_HyperBeam[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hyper_beam.gbapal.lz");
+
+const u32 gBattleAnimBgPalette_HyperspaceFury[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/hyperspace_fury.gbapal.lz");
+
+const u32 gBattleAnimBgImage_InfernoOverdrive[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/inferno_overdrive.4bpp.lz");
+const u32 gBattleAnimBgPalette_InfernoOverdrive[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/inferno_overdrive.gbapal.lz");
+const u32 gBattleAnimBgTilemap_InfernoOverdrive[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/inferno_overdrive.bin.lz");
+
+const u32 gBattleAnimBgImage_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.4bpp.lz");
+const u32 gBattleAnimBgPalette_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.gbapal.lz");
+const u32 gBattleAnimBgTilemap_LeafStorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/leaf_storm.bin.lz");
+
+const u32 gBattleAnimBgImage_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.4bpp.lz");
+const u32 gBattleAnimBgPalette_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.gbapal.lz");
+const u32 gBattleAnimBgTilemap_MaliciousMoonsault[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/malicious_moonsault.bin.lz");
+
+const u32 gBattleAnimBgImage_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/max_lightning.4bpp.lz");
+const u32 gBattleAnimBgPalette_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/max_lightning.gbapal.lz");
+const u32 gBattleAnimBgTilemap_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/max_lightning.bin.lz");
+
+const u32 gBattleAnimBgImage_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/misty_terrain.4bpp.lz");
+const u32 gBattleAnimBgPalette_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/misty_terrain.gbapal.lz");
+const u32 gBattleAnimBgTilemap_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/misty_terrain.bin.lz");
+
+const u32 gBattleAnimBgImage_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/neverending_nightmare.4bpp.lz");
+const u32 gBattleAnimBgPalette_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/neverending_nightmare.gbapal.lz");
+const u32 gBattleAnimBgTilemap_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/neverending_nightmare.bin.lz");
+
+const u32 gBattleAnimBgImage_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/nightmare.4bpp.lz");
+const u32 gBattleAnimBgPalette_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/nightmare.gbapal.lz");
+const u32 gBattleAnimBgTilemap_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/nightmare.bin.lz");
+
+const u32 gBattleAnimBgPalette_PoisonFalls[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/poison_falls.gbapal.lz");
+
+const u32 gBattleAnimBgPalette_PsychicNew[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/psychic.gbapal.lz");
+
+const u32 gBattleAnimBgImage_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/psychic_terrain.4bpp.lz");
+const u32 gBattleAnimBgPalette_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/psychic_terrain.gbapal.lz");
+const u32 gBattleAnimBgTilemap_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/psychic_terrain.bin.lz");
+
+const u32 gBattleAnimBgImage_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/shattered_psyche.4bpp.lz");
+const u32 gBattleAnimBgPalette_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/shattered_psyche.gbapal.lz");
+const u32 gBattleAnimBgTilemap_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/shattered_psyche.bin.lz");
+
+const u32 gBattleAnimBgImage_SkyDay[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_day.4bpp.lz");
+const u32 gBattleAnimBgPalette_SkyDay[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_day.gbapal.lz");
+const u32 gBattleAnimBgTilemap_SkyDay[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_day.bin.lz");
+
+const u32 gBattleAnimBgPalette_SkyAfternoon[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_afternoon.gbapal.lz");
+
+const u32 gBattleAnimBgPalette_SkyNight[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/sky_night.gbapal.lz");
+
+const u32 gBattleAnimBgImage_SnuggleForever[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/snuggle_forever.4bpp.lz");
+const u32 gBattleAnimBgPalette_SnuggleForever[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/snuggle_forever.gbapal.lz");
+const u32 gBattleAnimBgTilemap_SnuggleForever[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/snuggle_forever.bin.lz");
+
+const u32 gBattleAnimBgImage_SoulStealing7StarStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.4bpp.lz");
+const u32 gBattleAnimBgPalette_SoulStealing7StarStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.gbapal.lz");
+const u32 gBattleAnimBgTilemap_SoulStealing7StarStrike[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/soulstealing_7star_strike.bin.lz");
+
+const u32 gBattleAnimBgPalette_TectonicRage[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/tectonic_rage.gbapal.lz");
+
+const u32 gBattleAnimBgImage_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.4bpp.lz");
+const u32 gBattleAnimBgPalette_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.gbapal.lz");
+const u32 gBattleAnimBgTilemap_TrickRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/trick_room.bin.lz");
+
+const u32 gBattleAnimBgPalette_MagicRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/magic_room.gbapal.lz");
+
+const u32 gBattleAnimBgPalette_WonderRoom[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/wonder_room.gbapal.lz");
+
+const u32 gBattleAnimBgImage_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.4bpp.lz");
+const u32 gBattleAnimBgPalette_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.gbapal.lz");
+const u32 gBattleAnimBgTilemap_TwinkleTackle[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/twinkle_tackle.bin.lz");
+
+const u32 gBattleAnimBgImage_WaterPulse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/water_pulse.4bpp.lz");
+const u32 gBattleAnimBgPalette_WaterPulse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/water_pulse.gbapal.lz");
+const u32 gBattleAnimBgTilemap_WaterPulse[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/water_pulse.bin.lz");
+
+const u32 gBattleAnimBgImage_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.4bpp.lz");
+const u32 gBattleAnimBgPalette_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.gbapal.lz");
+const u32 gBattleAnimBgTilemap_Waterfall[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/waterfall.bin.lz");
+
+const u32 gBattleAnimBgPalette_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.gbapal.lz");
+const u32 gBattleAnimBgTilemap_DarkVoid[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/dark_void.bin.lz");
+
+const u32 gBattleAnimBgImage_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.4bpp.lz");
+const u32 gBattleAnimBgPalette_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.gbapal.lz");
+const u32 gBattleAnimBgTilemap_ZMoveActivate[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_activate.bin.lz");
+
+const u32 gBattleAnimBgImage_ZMoveMountain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_mountain.4bpp.lz");
+const u32 gBattleAnimBgPalette_ZMoveMountain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_mountain.gbapal.lz");
+const u32 gBattleAnimBgTilemap_ZMoveMountain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/zmove_mountain.bin.lz");
+
+const u32 gBattleAnimSpritePal_SteelBeam[] = INCBIN_U32("graphics/battle_anims/sprites/new/steel_beam.gbapal.lz");
+const u32 gBattleAnimBgPalette_SteelBeam[] = INCBIN_U32("graphics/battle_anims/backgrounds/new/steel_beam_bg.gbapal.lz");
+
+// misc
const u32 gBerryBlenderCenter_Gfx[] = INCBIN_U32("graphics/berry_blender/center.8bpp.lz");
const u32 gBerryBlenderOuter_Gfx[] = INCBIN_U32("graphics/berry_blender/outer.4bpp.lz");
const u32 gBerryBlenderOuter_Tilemap[] = INCBIN_U32("graphics/berry_blender/outer_map.bin.lz");
@@ -1390,17 +1894,31 @@ const u32 gStorageSystemPartyMenu_Tilemap[] = INCBIN_U32("graphics/pokemon_stora
// naming screen
-const u16 gNamingScreenMenu_Pal[] = INCBIN_U16("graphics/naming_screen/menu.gbapal");
-const u32 gNamingScreenMenu_Gfx[] = INCBIN_U32("graphics/naming_screen/menu.4bpp.lz");
-const u8 gNamingScreenRWindow_Gfx[] = INCBIN_U8("graphics/naming_screen/rwindow.4bpp");
-const u8 gNamingScreenROptions_Gfx[] = INCBIN_U8("graphics/naming_screen/roptions.4bpp");
-const u8 gNamingScreenCursor_Gfx[] = INCBIN_U8("graphics/naming_screen/cursor.4bpp");
-const u8 gNamingScreenPageButton_Gfx[] = INCBIN_U8("graphics/naming_screen/page_button.4bpp");
-const u8 gNamingScreenInputArrow_Gfx[] = INCBIN_U8("graphics/naming_screen/input_arrow.4bpp");
-const u8 gNamingScreenUnderscore_Gfx[] = INCBIN_U8("graphics/naming_screen/underscore.4bpp");
-const u32 gNamingScreenBackground_Tilemap[] = INCBIN_U32("graphics/naming_screen/background.bin.lz");
-const u32 gNamingScreenKeyboardUpper_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_upper.bin.lz");
-const u32 gNamingScreenKeyboardLower_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_lower.bin.lz");
+const u16 gNamingScreenMenu_Pal[6][16] =
+{
+ INCBIN_U16("graphics/naming_screen/menu.gbapal"),
+ INCBIN_U16("graphics/naming_screen/page_swap_upper.gbapal"),
+ INCBIN_U16("graphics/naming_screen/page_swap_lower.gbapal"),
+ INCBIN_U16("graphics/naming_screen/page_swap_others.gbapal"),
+ INCBIN_U16("graphics/naming_screen/buttons.gbapal"),
+ INCBIN_U16("graphics/naming_screen/cursor.gbapal"),
+};
+const u32 gNamingScreenMenu_Gfx[] = INCBIN_U32("graphics/naming_screen/menu.4bpp.lz");
+const u32 gNamingScreenPageSwapFrame_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_frame.4bpp");
+const u32 gNamingScreenBackButton_Gfx[] = INCBIN_U32("graphics/naming_screen/back_button.4bpp");
+const u32 gNamingScreenOKButton_Gfx[] = INCBIN_U32("graphics/naming_screen/ok_button.4bpp");
+const u32 gNamingScreenPageSwapUpper_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_upper.4bpp");
+const u32 gNamingScreenPageSwapLower_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_lower.4bpp");
+const u32 gNamingScreenPageSwapOthers_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_others.4bpp");
+const u32 gNamingScreenCursor_Gfx[] = INCBIN_U32("graphics/naming_screen/cursor.4bpp");
+const u32 gNamingScreenCursorSquished_Gfx[] = INCBIN_U32("graphics/naming_screen/cursor_squished.4bpp");
+const u32 gNamingScreenCursorFilled_Gfx[] = INCBIN_U32("graphics/naming_screen/cursor_filled.4bpp");
+const u32 gNamingScreenPageSwapButton_Gfx[] = INCBIN_U32("graphics/naming_screen/page_swap_button.4bpp");
+const u32 gNamingScreenInputArrow_Gfx[] = INCBIN_U32("graphics/naming_screen/input_arrow.4bpp");
+const u32 gNamingScreenUnderscore_Gfx[] = INCBIN_U32("graphics/naming_screen/underscore.4bpp");
+const u32 gNamingScreenBackground_Tilemap[] = INCBIN_U32("graphics/naming_screen/background.bin.lz");
+const u32 gNamingScreenKeyboardUpper_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_upper.bin.lz");
+const u32 gNamingScreenKeyboardLower_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_lower.bin.lz");
const u32 gNamingScreenKeyboardSymbols_Tilemap[] = INCBIN_U32("graphics/naming_screen/keyboard_symbols.bin.lz");
// union room chat
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index dcf0039a71..42e17e93db 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -101,7 +101,7 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2);
static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2);
static void Task_DoDomeConfetti(u8 taskId);
-static void SpriteCB_HofConfetti(struct Sprite* sprite);
+static void SpriteCB_HofConfetti(struct Sprite *sprite);
static const struct BgTemplate sHof_BgTemplates[] =
{
@@ -182,7 +182,7 @@ static const struct OamData sOamData_Confetti =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -484,7 +484,7 @@ static void Task_Hof_InitMonData(u8 taskId)
static void Task_Hof_InitTeamSaveData(u8 taskId)
{
u16 i;
- struct HallofFameTeam* lastSavedTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
+ struct HallofFameTeam *lastSavedTeam = (struct HallofFameTeam *)(gDecompressionBuffer);
if (!gHasHallOfFameRecords)
{
@@ -503,8 +503,8 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
}
if (i >= HALL_OF_FAME_MAX_TEAMS)
{
- struct HallofFameTeam *afterTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
- struct HallofFameTeam *beforeTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
+ struct HallofFameTeam *afterTeam = (struct HallofFameTeam *)(gDecompressionBuffer);
+ struct HallofFameTeam *beforeTeam = (struct HallofFameTeam *)(gDecompressionBuffer);
afterTeam++;
for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, beforeTeam++, afterTeam++)
{
@@ -515,7 +515,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
*lastSavedTeam = *sHofMonPtr;
DrawDialogueFrame(0, FALSE);
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
CopyWindowToVram(0, COPYWIN_FULL);
gTasks[taskId].func = Task_Hof_TrySaveData;
}
@@ -700,7 +700,7 @@ static void Task_Hof_DisplayPlayer(u8 taskId)
ShowBg(0);
ShowBg(1);
ShowBg(3);
- gTasks[taskId].tPlayerSpriteID = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 120, 72, 6, TAG_NONE);
+ gTasks[taskId].tPlayerSpriteID = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), TRUE, 120, 72, 6, TAG_NONE);
AddWindow(&sHof_WindowTemplate);
LoadWindowGfx(1, gSaveBlock2Ptr->optionsWindowFrameType, 0x21D, 0xD0);
LoadPalette(GetTextWindowPalette(1), 0xE0, 0x20);
@@ -723,7 +723,7 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId)
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
HallOfFame_PrintPlayerInfo(1, 2);
DrawDialogueFrame(0, FALSE);
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_LeagueChamp, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_LeagueChamp, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
CopyWindowToVram(0, COPYWIN_FULL);
gTasks[taskId].func = Task_Hof_ExitOnKeyPressed;
}
@@ -821,7 +821,7 @@ void CB2_DoHallOfFamePC(void)
case 3:
if (!LoadHofBgs())
{
- struct HallofFameTeam *fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
+ struct HallofFameTeam *fameTeam = (struct HallofFameTeam *)(gDecompressionBuffer);
fameTeam->mon[0] = sDummyFameMon;
ComputerScreenOpenEffect(0, 0, 0);
SetVBlankCallback(VBlankCB_HallOfFame);
@@ -867,7 +867,7 @@ static void Task_HofPC_CopySaveData(u8 taskId)
else
{
u16 i;
- struct HallofFameTeam* savedTeams;
+ struct HallofFameTeam *savedTeams;
CpuCopy16(gDecompressionBuffer, sHofMonPtr, SECTOR_SIZE * NUM_HOF_SECTORS);
savedTeams = sHofMonPtr;
@@ -890,7 +890,7 @@ static void Task_HofPC_CopySaveData(u8 taskId)
static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
{
- struct HallofFameTeam* savedTeams = sHofMonPtr;
+ struct HallofFameTeam *savedTeams = sHofMonPtr;
struct HallofFameMon* currMon;
u16 i;
@@ -931,7 +931,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
if (currMon->species == SPECIES_EGG)
posY += 10;
- spriteId = CreateMonPicSprite(currMon->species, currMon->tid, currMon->personality, 1, posX, posY, i, TAG_NONE);
+ spriteId = CreateMonPicSprite(currMon->species, currMon->tid, currMon->personality, TRUE, posX, posY, i, TAG_NONE);
gSprites[spriteId].oam.priority = 1;
gTasks[taskId].tMonSpriteId(i) = spriteId;
}
@@ -956,7 +956,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
static void Task_HofPC_PrintMonInfo(u8 taskId)
{
- struct HallofFameTeam* savedTeams = sHofMonPtr;
+ struct HallofFameTeam *savedTeams = sHofMonPtr;
struct HallofFameMon* currMon;
u16 i;
u16 currMonID;
@@ -1042,10 +1042,10 @@ static void Task_HofPC_HandleInput(u8 taskId)
static void Task_HofPC_HandlePaletteOnExit(u8 taskId)
{
- struct HallofFameTeam* fameTeam;
+ struct HallofFameTeam *fameTeam;
CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
- fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
+ fameTeam = (struct HallofFameTeam *)(gDecompressionBuffer);
fameTeam->mon[0] = sDummyFameMon;
ComputerScreenCloseEffect(0, 0, 0);
gTasks[taskId].func = Task_HofPC_HandleExit;
@@ -1088,7 +1088,7 @@ static void Task_HofPC_PrintDataIsCorrupted(u8 taskId)
{
HofPCTopBar_Print(gText_AButtonExit, 8, TRUE);
DrawDialogueFrame(0, FALSE);
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_HOFCorrupted, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_HOFCorrupted, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
CopyWindowToVram(0, COPYWIN_FULL);
gTasks[taskId].func = Task_HofPC_ExitOnButtonPress;
}
@@ -1369,7 +1369,7 @@ static void SpriteCB_GetOnScreenAndAnimate(struct Sprite *sprite)
#define sSineIdx data[0]
#define sExtraY data[1]
-static void SpriteCB_HofConfetti(struct Sprite* sprite)
+static void SpriteCB_HofConfetti(struct Sprite *sprite)
{
if (sprite->y2 > 120)
{
@@ -1394,7 +1394,7 @@ static void SpriteCB_HofConfetti(struct Sprite* sprite)
static bool8 CreateHofConfettiSprite(void)
{
u8 spriteID;
- struct Sprite* sprite;
+ struct Sprite *sprite;
s16 posX = Random() % DISPLAY_WIDTH;
s16 posY = -(Random() % 8);
diff --git a/src/hof_pc.c b/src/hof_pc.c
index f74448cca6..79ba4b4b46 100644
--- a/src/hof_pc.c
+++ b/src/hof_pc.c
@@ -14,7 +14,7 @@ static void Task_WaitForPaletteFade(u8);
void AccessHallOfFamePC(void)
{
SetMainCallback2(CB2_DoHallOfFamePC);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
void ReturnFromHallOfFamePC(void)
@@ -25,7 +25,7 @@ void ReturnFromHallOfFamePC(void)
static void ReshowPCMenuAfterHallOfFamePC(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
Overworld_PlaySpecialMapMusic();
ScriptMenu_CreatePCMultichoice();
ScriptMenu_DisplayPCStartupPrompt();
diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c
index 60b105163e..51a5d13993 100644
--- a/src/image_processing_effects.c
+++ b/src/image_processing_effects.c
@@ -28,14 +28,14 @@ static void ApplyImageEffect_PersonalityColor(u8);
static void ApplyImageEffect_RedChannelGrayscale(u8);
static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8);
static void AddPointillismPoints(u16);
-static u16 ConvertColorToGrayscale(u16*);
-static u16 QuantizePixel_Blur(u16*, u16*, u16*);
-static u16 QuantizePixel_PersonalityColor(u16*, u8);
-static u16 QuantizePixel_BlackAndWhite(u16*);
-static u16 QuantizePixel_BlackOutline(u16*, u16*);
-static u16 QuantizePixel_Invert(u16*);
-static u16 QuantizePixel_BlurHard(u16*, u16*, u16*);
-static u16 QuantizePixel_MotionBlur(u16*, u16*);
+static u16 ConvertColorToGrayscale(u16 *);
+static u16 QuantizePixel_Blur(u16 *, u16 *, u16 *);
+static u16 QuantizePixel_PersonalityColor(u16 *, u8);
+static u16 QuantizePixel_BlackAndWhite(u16 *);
+static u16 QuantizePixel_BlackOutline(u16 *, u16 *);
+static u16 QuantizePixel_Invert(u16 *);
+static u16 QuantizePixel_BlurHard(u16 *, u16 *, u16 *);
+static u16 QuantizePixel_MotionBlur(u16 *, u16 *);
static u16 GetColorFromPersonality(u8);
static void QuantizePalette_Standard(bool8);
static void SetPresetPalette_PrimaryColors(void);
@@ -46,10 +46,10 @@ static void SetPresetPalette_GrayscaleSmall(void);
static void QuantizePalette_GrayscaleSmall(void);
static void SetPresetPalette_BlackAndWhite(void);
static void QuantizePalette_BlackAndWhite(void);
-static u16 QuantizePixel_Standard(u16*);
-static u16 QuantizePixel_GrayscaleSmall(u16*);
-static u16 QuantizePixel_Grayscale(u16*);
-static u16 QuantizePixel_PrimaryColors(u16*);
+static u16 QuantizePixel_Standard(u16 *);
+static u16 QuantizePixel_GrayscaleSmall(u16 *);
+static u16 QuantizePixel_Grayscale(u16 *);
+static u16 QuantizePixel_PrimaryColors(u16 *);
#define MAX_DIMENSION 64
@@ -1091,7 +1091,7 @@ static u16 QuantizePixel_Standard(u16 *pixel)
return RGB2(red, green, blue);
}
-static u16 QuantizePixel_PrimaryColors(u16* color)
+static u16 QuantizePixel_PrimaryColors(u16 *color)
{
u16 red = GET_R(*color);
u16 green = GET_G(*color);
diff --git a/src/international_string_util.c b/src/international_string_util.c
index e4b793b66c..f71734fa7e 100644
--- a/src/international_string_util.c
+++ b/src/international_string_util.c
@@ -48,7 +48,7 @@ int GetMaxWidthInMenuTable(const struct MenuAction *actions, int numActions)
return ConvertPixelWidthToTileWidth(maxWidth);
}
-int GetMaxWidthInSubsetOfMenuTable(const struct MenuAction *actions, const u8* actionIds, int numActions)
+int GetMaxWidthInSubsetOfMenuTable(const struct MenuAction *actions, const u8 *actionIds, int numActions)
{
int i, maxWidth;
@@ -206,12 +206,13 @@ void TVShowConvertInternationalString(u8 *dest, const u8 *src, int language)
ConvertInternationalString(dest, language);
}
+// It's impossible to distinguish between Latin languages just from a string alone, so the function defaults to LANGUAGE_ENGLISH. This is the case in all of the versions of the game.
int GetNicknameLanguage(u8 *str)
{
if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN)
return LANGUAGE_JAPANESE;
else
- return GAME_LANGUAGE;
+ return LANGUAGE_ENGLISH;
}
// Used by Pokénav's Match Call to erase the previous trainer's flavor text when switching between their info pages.
diff --git a/src/intro.c b/src/intro.c
index a1d0508f4f..7e9a751690 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -216,7 +216,7 @@ static const struct OamData sOamData_Sparkle =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -284,7 +284,7 @@ static const struct OamData sOamData_Volbeat =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -320,7 +320,7 @@ static const struct OamData sOamData_Torchic =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -380,7 +380,7 @@ static const struct OamData sOamData_Manectric =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -428,7 +428,7 @@ static const struct OamData sOamData_Lightning =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -519,7 +519,7 @@ static const struct OamData sOamData_Bubbles =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x32),
.x = 0,
@@ -558,7 +558,7 @@ static const struct OamData sOamData_WaterDrop =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -660,7 +660,7 @@ static const struct OamData sOamData_GameFreakLetter =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -676,7 +676,7 @@ static const struct OamData sOamData_PresentsLetter =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -692,7 +692,7 @@ static const struct OamData sOamData_GameFreakLogo =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_BLEND,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x64),
.x = 0,
@@ -931,7 +931,7 @@ static const struct OamData sOamData_FlygonSilhouette =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -983,7 +983,7 @@ static const struct OamData sOamData_RayquazaOrb =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c
index 0942e82f17..cf193018a4 100644
--- a/src/intro_credits_graphics.c
+++ b/src/intro_credits_graphics.c
@@ -1106,7 +1106,7 @@ static void SpriteCB_Player(struct Sprite *sprite)
#define sPlayerSpriteId data[0]
-static void SpriteCB_Bicycle(struct Sprite* sprite)
+static void SpriteCB_Bicycle(struct Sprite *sprite)
{
sprite->invisible = gSprites[sprite->sPlayerSpriteId].invisible;
sprite->x = gSprites[sprite->sPlayerSpriteId].x;
@@ -1139,7 +1139,7 @@ static void SpriteCB_FlygonLeftHalf(struct Sprite *sprite)
#define sLeftSpriteId data[0]
-static void SpriteCB_FlygonRightHalf(struct Sprite* sprite)
+static void SpriteCB_FlygonRightHalf(struct Sprite *sprite)
{
sprite->invisible = gSprites[sprite->sLeftSpriteId].invisible;
sprite->y = gSprites[sprite->sLeftSpriteId].y;
diff --git a/src/item.c b/src/item.c
index 63287693a8..c9f8de2b55 100644
--- a/src/item.c
+++ b/src/item.c
@@ -165,7 +165,7 @@ bool8 HasAtLeastOneBerry(void)
{
u16 i;
- for (i = FIRST_BERRY_INDEX; i < ITEM_BRIGHT_POWDER; i++)
+ for (i = FIRST_BERRY_INDEX; i <= LAST_BERRY_INDEX; i++)
{
if (CheckBagHasItem(i, 1) == TRUE)
{
@@ -947,3 +947,8 @@ u8 ItemId_GetSecondaryId(u16 itemId)
{
return gItems[SanitizeItemId(itemId)].secondaryId;
}
+
+u8 ItemId_GetFlingPower(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].flingPower;
+}
diff --git a/src/item_icon.c b/src/item_icon.c
index dc69d03318..274ed03b36 100644
--- a/src/item_icon.c
+++ b/src/item_icon.c
@@ -18,7 +18,7 @@ static const struct OamData sOamData_ItemIcon =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
diff --git a/src/item_menu.c b/src/item_menu.c
index cd0bc159d6..afd9d3cec6 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -128,7 +128,7 @@ static bool8 LoadBagMenu_Graphics(void);
static void LoadBagMenuTextWindows(void);
static void AllocateBagItemListBuffers(void);
static void LoadBagItemListBuffers(u8);
-static void PrintPocketNames(const u8*, const u8*);
+static void PrintPocketNames(const u8 *, const u8 *);
static void CopyPocketNameToWindow(u32);
static void DrawPocketIndicatorSquare(u8, bool8);
static void CreatePocketScrollArrowPair(void);
@@ -138,10 +138,10 @@ static void PrepareTMHMMoveWindow(void);
static bool8 IsWallysBag(void);
static void Task_WallyTutorialBagMenu(u8);
static void Task_BagMenu_HandleInput(u8);
-static void GetItemName(s8*, u16);
+static void GetItemName(s8 *, u16);
static void PrintItemDescription(int);
static void BagMenu_PrintCursorAtPos(u8, u8);
-static void BagMenu_Print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8);
+static void BagMenu_Print(u8, u8, const u8 *, u8, u8, u8, u8, u8, u8);
static void Task_CloseBagMenu(u8);
static u8 AddItemMessageWindow(u8);
static void RemoveItemMessageWindow(u8);
@@ -189,7 +189,7 @@ static void InitPocketListPositions(void);
static void InitPocketScrollPositions(void);
static u8 CreateBagInputHandlerTask(u8);
static void DrawItemListBgRow(u8);
-static void BagMenu_MoveCursorCallback(s32, bool8, struct ListMenu*);
+static void BagMenu_MoveCursorCallback(s32, bool8, struct ListMenu *);
static void BagMenu_ItemPrintCallback(u8, u32, u8);
static void ItemMenu_UseOutOfBattle(u8);
static void ItemMenu_Toss(u8);
@@ -1080,7 +1080,7 @@ void Task_FadeAndCloseBagMenu(u8 taskId)
static void Task_CloseBagMenu(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
DestroyListMenuTask(tListTaskId, &gBagPosition.scrollPosition[gBagPosition.pocket], &gBagPosition.cursorPosition[gBagPosition.pocket]);
@@ -1162,7 +1162,7 @@ u8 GetItemListPosition(u8 pocketId)
void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void (*callback)(u8 taskId))
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
tMsgWindowId = AddItemMessageWindow(ITEMWIN_MESSAGE);
FillWindowPixelBuffer(tMsgWindowId, PIXEL_FILL(1));
@@ -1172,9 +1172,9 @@ void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void (*callback)(u8
void CloseItemMessage(u8 taskId)
{
- s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
- u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
+ s16 *data = gTasks[taskId].data;
+ u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
RemoveItemMessageWindow(ITEMWIN_MESSAGE);
DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
UpdatePocketItemList(gBagPosition.pocket);
@@ -1210,9 +1210,9 @@ static void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned)
static void Task_BagMenu_HandleInput(u8 taskId)
{
- s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
- u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
+ s16 *data = gTasks[taskId].data;
+ u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
s32 listPosition;
if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE && !gPaletteFade.active)
@@ -1313,7 +1313,7 @@ static void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, bool16 skipEraseList)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
u8 newPocket;
tPocketSwitchState = 0;
@@ -1352,7 +1352,7 @@ static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, bool16 skipEraseLis
static void Task_SwitchBagPocket(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (!MenuHelpers_IsLinkActive() && !IsWallysBag())
{
@@ -1430,7 +1430,7 @@ static bool8 CanSwapItems(void)
static void StartItemSwap(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
ListMenuSetUnkIndicatorsStructField(tListTaskId, 16, 1);
tListPosition = gBagPosition.scrollPosition[gBagPosition.pocket] + gBagPosition.cursorPosition[gBagPosition.pocket];
@@ -1447,7 +1447,7 @@ static void StartItemSwap(u8 taskId)
static void Task_HandleSwappingItemsInput(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE)
{
@@ -1485,9 +1485,9 @@ static void Task_HandleSwappingItemsInput(u8 taskId)
static void DoItemSwap(u8 taskId)
{
- s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
- u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
+ s16 *data = gTasks[taskId].data;
+ u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
u16 realPos = (*scrollPos + *cursorPos);
if (tListPosition == realPos || tListPosition == realPos - 1)
@@ -1512,9 +1512,9 @@ static void DoItemSwap(u8 taskId)
static void CancelItemSwap(u8 taskId)
{
- s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
- u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
+ s16 *data = gTasks[taskId].data;
+ u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
gBagMenu->toSwapPos = NOT_SWAPPING;
DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);
@@ -1549,7 +1549,7 @@ static void OpenContextMenu(u8 taskId)
gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_BerryBlenderCrush);
break;
case ITEMMENULOCATION_APPRENTICE:
- if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY_E_READER)
{
gBagMenu->contextMenuItemsPtr = sContextMenuItems_Apprentice;
gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_Apprentice);
@@ -1561,7 +1561,7 @@ static void OpenContextMenu(u8 taskId)
}
break;
case ITEMMENULOCATION_FAVOR_LADY:
- if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY_E_READER)
{
gBagMenu->contextMenuItemsPtr = sContextMenuItems_FavorLady;
gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_FavorLady);
@@ -1573,7 +1573,7 @@ static void OpenContextMenu(u8 taskId)
}
break;
case ITEMMENULOCATION_QUIZ_LADY:
- if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY_E_READER)
{
gBagMenu->contextMenuItemsPtr = sContextMenuItems_QuizLady;
gBagMenu->contextMenuNumItems = ARRAY_COUNT(sContextMenuItems_QuizLady);
@@ -1806,7 +1806,7 @@ static void ItemMenu_UseOutOfBattle(u8 taskId)
static void ItemMenu_Toss(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
RemoveContextWindow();
tItemCount = 1;
@@ -1827,7 +1827,7 @@ static void ItemMenu_Toss(u8 taskId)
static void AskTossItems(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS);
@@ -1839,7 +1839,7 @@ static void AskTossItems(u8 taskId)
static void CancelToss(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
PrintItemDescription(tListPosition);
BagMenu_PrintCursor(tListTaskId, COLORID_NORMAL);
@@ -1848,7 +1848,7 @@ static void CancelToss(u8 taskId)
static void Task_ChooseHowManyToToss(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE)
{
@@ -1870,7 +1870,7 @@ static void Task_ChooseHowManyToToss(u8 taskId)
static void ConfirmToss(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS);
@@ -1884,9 +1884,9 @@ static void ConfirmToss(u8 taskId)
// For when items are tossed or deposited
static void Task_RemoveItemFromBag(u8 taskId)
{
- s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
- u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
+ s16 *data = gTasks[taskId].data;
+ u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
@@ -1904,9 +1904,9 @@ static void Task_RemoveItemFromBag(u8 taskId)
static void ItemMenu_Register(u8 taskId)
{
- s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
- u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
+ s16 *data = gTasks[taskId].data;
+ u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
gSaveBlock1Ptr->registeredItem = 0;
@@ -1973,7 +1973,7 @@ static void ItemMenu_CheckTag(u8 taskId)
static void ItemMenu_Cancel(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
RemoveContextWindow();
PrintItemDescription(tListPosition);
@@ -2044,7 +2044,7 @@ bool8 UseRegisteredKeyItemOnField(void)
{
if (CheckBagHasItem(gSaveBlock1Ptr->registeredItem, 1) == TRUE)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
PlayerFreeze();
StopPlayerAvatar();
@@ -2058,7 +2058,7 @@ bool8 UseRegisteredKeyItemOnField(void)
gSaveBlock1Ptr->registeredItem = ITEM_NONE;
}
}
- ScriptContext1_SetupScript(EventScript_SelectWithoutRegisteredItem);
+ ScriptContext_SetupScript(EventScript_SelectWithoutRegisteredItem);
return TRUE;
}
@@ -2066,7 +2066,7 @@ bool8 UseRegisteredKeyItemOnField(void)
static void Task_ItemContext_Sell(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (ItemId_GetPrice(gSpecialVar_ItemId) == 0)
{
@@ -2093,7 +2093,7 @@ static void Task_ItemContext_Sell(u8 taskId)
static void DisplaySellItemPriceAndConfirm(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1);
@@ -2107,7 +2107,7 @@ static void AskSellItems(u8 taskId)
static void CancelSell(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
RemoveMoneyWindow();
RemoveItemMessageWindow(ITEMWIN_MESSAGE);
@@ -2117,7 +2117,7 @@ static void CancelSell(u8 taskId)
static void InitSellHowManyInput(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
u8 windowId = BagMenu_AddWindow(ITEMWIN_QUANTITY_WIDE);
PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount);
@@ -2127,7 +2127,7 @@ static void InitSellHowManyInput(u8 taskId)
static void Task_ChooseHowManyToSell(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE)
{
@@ -2152,7 +2152,7 @@ static void Task_ChooseHowManyToSell(u8 taskId)
static void ConfirmSell(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar2);
ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
@@ -2162,9 +2162,9 @@ static void ConfirmSell(u8 taskId)
static void SellItem(u8 taskId)
{
- s16* data = gTasks[taskId].data;
- u16* scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
- u16* cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
+ s16 *data = gTasks[taskId].data;
+ u16 *scrollPos = &gBagPosition.scrollPosition[gBagPosition.pocket];
+ u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
PlaySE(SE_SHOP);
RemoveBagItem(gSpecialVar_ItemId, tItemCount);
@@ -2191,7 +2191,7 @@ static void WaitAfterItemSell(u8 taskId)
static void Task_ItemContext_Deposit(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
tItemCount = 1;
if (tQuantity == 1)
@@ -2211,7 +2211,7 @@ static void Task_ItemContext_Deposit(u8 taskId)
static void Task_ChooseHowManyToDeposit(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE)
{
@@ -2235,7 +2235,7 @@ static void Task_ChooseHowManyToDeposit(u8 taskId)
static void TryDepositItem(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
if (ItemId_GetImportance(gSpecialVar_ItemId))
@@ -2263,7 +2263,7 @@ static void TryDepositItem(u8 taskId)
static void WaitDepositErrorMessage(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
@@ -2327,7 +2327,7 @@ void DoWallyTutorialBagMenu(void)
static void Task_WallyTutorialBagMenu(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
@@ -2373,7 +2373,7 @@ static void ItemMenu_Show(u8 taskId)
static void CB2_ApprenticeExitBagMenu(void)
{
- gFieldCallback = Apprentice_EnableBothScriptContexts;
+ gFieldCallback = Apprentice_ScriptContext_Enable;
SetMainCallback2(CB2_ReturnToField);
}
@@ -2423,19 +2423,19 @@ static void PrintPocketNames(const u8 *pocketName1, const u8 *pocketName2)
offset = GetStringCenterAlignXOffset(FONT_NORMAL, pocketName2, 0x40);
BagMenu_Print(windowId, FONT_NORMAL, pocketName2, offset + 0x40, 1, 0, 0, TEXT_SKIP_DRAW, COLORID_POCKET_NAME);
}
- CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gBagMenu->pocketNameBuffer, sizeof(gBagMenu->pocketNameBuffer));
+ CpuCopy32((u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gBagMenu->pocketNameBuffer, sizeof(gBagMenu->pocketNameBuffer));
RemoveWindow(windowId);
}
static void CopyPocketNameToWindow(u32 a)
{
u8 (* tileDataBuffer)[32][32];
- u8* windowTileData;
+ u8 *windowTileData;
int b;
if (a > 8)
a = 8;
tileDataBuffer = &gBagMenu->pocketNameBuffer;
- windowTileData = (u8*)GetWindowAttribute(2, WINDOW_TILE_DATA);
+ windowTileData = (u8 *)GetWindowAttribute(2, WINDOW_TILE_DATA);
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
@@ -2478,7 +2478,7 @@ static u8 BagMenu_AddWindow(u8 windowType)
if (*windowId == WINDOW_NONE)
{
*windowId = AddWindow(&sContextMenuWindowTemplates[windowType]);
- DrawStdFrameWithCustomTileAndPalette(*windowId, 0, 1, 14);
+ DrawStdFrameWithCustomTileAndPalette(*windowId, FALSE, 1, 14);
ScheduleBgCopyTilemapToVram(1);
}
return *windowId;
@@ -2551,7 +2551,7 @@ static void PrintTMHMMoveData(u16 itemId)
{
u8 i;
u16 moveId;
- const u8* text;
+ const u8 *text;
FillWindowPixelBuffer(WIN_TMHM_INFO, PIXEL_FILL(0));
if (itemId == ITEM_NONE)
diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c
index 5ac44f5ade..ff23c37925 100644
--- a/src/item_menu_icons.c
+++ b/src/item_menu_icons.c
@@ -43,7 +43,7 @@ static const struct OamData sBagOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -93,12 +93,12 @@ static const union AnimCmd sSpriteAnim_Bag_Berries[] =
static const union AnimCmd *const sBagSpriteAnimTable[] =
{
- sSpriteAnim_Bag_Closed,
- sSpriteAnim_Bag_Items,
- sSpriteAnim_Bag_Pokeballs,
- sSpriteAnim_Bag_TMsHMs,
- sSpriteAnim_Bag_Berries,
- sSpriteAnim_Bag_KeyItems
+ [POCKET_NONE] = sSpriteAnim_Bag_Closed,
+ [POCKET_ITEMS] = sSpriteAnim_Bag_Items,
+ [POCKET_POKE_BALLS] = sSpriteAnim_Bag_Pokeballs,
+ [POCKET_TM_HM] = sSpriteAnim_Bag_TMsHMs,
+ [POCKET_BERRIES] = sSpriteAnim_Bag_Berries,
+ [POCKET_KEY_ITEMS] = sSpriteAnim_Bag_KeyItems,
};
static const union AffineAnimCmd sSpriteAffineAnim_BagNormal[] =
@@ -116,10 +116,15 @@ static const union AffineAnimCmd sSpriteAffineAnim_BagShake[] =
AFFINEANIMCMD_END
};
+enum {
+ ANIM_BAG_NORMAL,
+ ANIM_BAG_SHAKE,
+};
+
static const union AffineAnimCmd *const sBagAffineAnimCmds[] =
{
- sSpriteAffineAnim_BagNormal,
- sSpriteAffineAnim_BagShake
+ [ANIM_BAG_NORMAL] = sSpriteAffineAnim_BagNormal,
+ [ANIM_BAG_SHAKE] = sSpriteAffineAnim_BagShake
};
const struct CompressedSpriteSheet gBagMaleSpriteSheet =
@@ -153,7 +158,7 @@ static const struct OamData sRotatingBallOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -224,7 +229,7 @@ static const struct OamData sBerryPicOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -241,7 +246,7 @@ static const struct OamData sBerryPicRotatingOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -321,49 +326,74 @@ static const struct SpriteTemplate sBerryPicRotatingSpriteTemplate =
static const struct CompressedTilesPal sBerryPicTable[] =
{
- [ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1] = {gBerryPic_Cheri, gBerryPalette_Cheri},
- [ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1] = {gBerryPic_Chesto, gBerryPalette_Chesto},
- [ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1] = {gBerryPic_Pecha, gBerryPalette_Pecha},
- [ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1] = {gBerryPic_Rawst, gBerryPalette_Rawst},
- [ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1] = {gBerryPic_Aspear, gBerryPalette_Aspear},
- [ITEM_TO_BERRY(ITEM_LEPPA_BERRY) - 1] = {gBerryPic_Leppa, gBerryPalette_Leppa},
- [ITEM_TO_BERRY(ITEM_ORAN_BERRY) - 1] = {gBerryPic_Oran, gBerryPalette_Oran},
- [ITEM_TO_BERRY(ITEM_PERSIM_BERRY) - 1] = {gBerryPic_Persim, gBerryPalette_Persim},
- [ITEM_TO_BERRY(ITEM_LUM_BERRY) - 1] = {gBerryPic_Lum, gBerryPalette_Lum},
- [ITEM_TO_BERRY(ITEM_SITRUS_BERRY) - 1] = {gBerryPic_Sitrus, gBerryPalette_Sitrus},
- [ITEM_TO_BERRY(ITEM_FIGY_BERRY) - 1] = {gBerryPic_Figy, gBerryPalette_Figy},
- [ITEM_TO_BERRY(ITEM_WIKI_BERRY) - 1] = {gBerryPic_Wiki, gBerryPalette_Wiki},
- [ITEM_TO_BERRY(ITEM_MAGO_BERRY) - 1] = {gBerryPic_Mago, gBerryPalette_Mago},
- [ITEM_TO_BERRY(ITEM_AGUAV_BERRY) - 1] = {gBerryPic_Aguav, gBerryPalette_Aguav},
- [ITEM_TO_BERRY(ITEM_IAPAPA_BERRY) - 1] = {gBerryPic_Iapapa, gBerryPalette_Iapapa},
- [ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1] = {gBerryPic_Razz, gBerryPalette_Razz},
- [ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1] = {gBerryPic_Bluk, gBerryPalette_Bluk},
- [ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1] = {gBerryPic_Nanab, gBerryPalette_Nanab},
- [ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1] = {gBerryPic_Wepear, gBerryPalette_Wepear},
- [ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1] = {gBerryPic_Pinap, gBerryPalette_Pinap},
- [ITEM_TO_BERRY(ITEM_POMEG_BERRY) - 1] = {gBerryPic_Pomeg, gBerryPalette_Pomeg},
- [ITEM_TO_BERRY(ITEM_KELPSY_BERRY) - 1] = {gBerryPic_Kelpsy, gBerryPalette_Kelpsy},
- [ITEM_TO_BERRY(ITEM_QUALOT_BERRY) - 1] = {gBerryPic_Qualot, gBerryPalette_Qualot},
- [ITEM_TO_BERRY(ITEM_HONDEW_BERRY) - 1] = {gBerryPic_Hondew, gBerryPalette_Hondew},
- [ITEM_TO_BERRY(ITEM_GREPA_BERRY) - 1] = {gBerryPic_Grepa, gBerryPalette_Grepa},
- [ITEM_TO_BERRY(ITEM_TAMATO_BERRY) - 1] = {gBerryPic_Tamato, gBerryPalette_Tamato},
- [ITEM_TO_BERRY(ITEM_CORNN_BERRY) - 1] = {gBerryPic_Cornn, gBerryPalette_Cornn},
- [ITEM_TO_BERRY(ITEM_MAGOST_BERRY) - 1] = {gBerryPic_Magost, gBerryPalette_Magost},
- [ITEM_TO_BERRY(ITEM_RABUTA_BERRY) - 1] = {gBerryPic_Rabuta, gBerryPalette_Rabuta},
- [ITEM_TO_BERRY(ITEM_NOMEL_BERRY) - 1] = {gBerryPic_Nomel, gBerryPalette_Nomel},
- [ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1] = {gBerryPic_Spelon, gBerryPalette_Spelon},
- [ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1] = {gBerryPic_Pamtre, gBerryPalette_Pamtre},
- [ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1] = {gBerryPic_Watmel, gBerryPalette_Watmel},
- [ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1] = {gBerryPic_Durin, gBerryPalette_Durin},
- [ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1] = {gBerryPic_Belue, gBerryPalette_Belue},
- [ITEM_TO_BERRY(ITEM_LIECHI_BERRY) - 1] = {gBerryPic_Liechi, gBerryPalette_Liechi},
- [ITEM_TO_BERRY(ITEM_GANLON_BERRY) - 1] = {gBerryPic_Ganlon, gBerryPalette_Ganlon},
- [ITEM_TO_BERRY(ITEM_SALAC_BERRY) - 1] = {gBerryPic_Salac, gBerryPalette_Salac},
- [ITEM_TO_BERRY(ITEM_PETAYA_BERRY) - 1] = {gBerryPic_Petaya, gBerryPalette_Petaya},
- [ITEM_TO_BERRY(ITEM_APICOT_BERRY) - 1] = {gBerryPic_Apicot, gBerryPalette_Apicot},
- [ITEM_TO_BERRY(ITEM_LANSAT_BERRY) - 1] = {gBerryPic_Lansat, gBerryPalette_Lansat},
- [ITEM_TO_BERRY(ITEM_STARF_BERRY) - 1] = {gBerryPic_Starf, gBerryPalette_Starf},
- [ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1] = {gBerryPic_Enigma, gBerryPalette_Enigma},
+ [ITEM_TO_BERRY(ITEM_CHERI_BERRY) - 1] = {gBerryPic_Cheri, gBerryPalette_Cheri},
+ [ITEM_TO_BERRY(ITEM_CHESTO_BERRY) - 1] = {gBerryPic_Chesto, gBerryPalette_Chesto},
+ [ITEM_TO_BERRY(ITEM_PECHA_BERRY) - 1] = {gBerryPic_Pecha, gBerryPalette_Pecha},
+ [ITEM_TO_BERRY(ITEM_RAWST_BERRY) - 1] = {gBerryPic_Rawst, gBerryPalette_Rawst},
+ [ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) - 1] = {gBerryPic_Aspear, gBerryPalette_Aspear},
+ [ITEM_TO_BERRY(ITEM_LEPPA_BERRY) - 1] = {gBerryPic_Leppa, gBerryPalette_Leppa},
+ [ITEM_TO_BERRY(ITEM_ORAN_BERRY) - 1] = {gBerryPic_Oran, gBerryPalette_Oran},
+ [ITEM_TO_BERRY(ITEM_PERSIM_BERRY) - 1] = {gBerryPic_Persim, gBerryPalette_Persim},
+ [ITEM_TO_BERRY(ITEM_LUM_BERRY) - 1] = {gBerryPic_Lum, gBerryPalette_Lum},
+ [ITEM_TO_BERRY(ITEM_SITRUS_BERRY) - 1] = {gBerryPic_Sitrus, gBerryPalette_Sitrus},
+ [ITEM_TO_BERRY(ITEM_FIGY_BERRY) - 1] = {gBerryPic_Figy, gBerryPalette_Figy},
+ [ITEM_TO_BERRY(ITEM_WIKI_BERRY) - 1] = {gBerryPic_Wiki, gBerryPalette_Wiki},
+ [ITEM_TO_BERRY(ITEM_MAGO_BERRY) - 1] = {gBerryPic_Mago, gBerryPalette_Mago},
+ [ITEM_TO_BERRY(ITEM_AGUAV_BERRY) - 1] = {gBerryPic_Aguav, gBerryPalette_Aguav},
+ [ITEM_TO_BERRY(ITEM_IAPAPA_BERRY) - 1] = {gBerryPic_Iapapa, gBerryPalette_Iapapa},
+ [ITEM_TO_BERRY(ITEM_RAZZ_BERRY) - 1] = {gBerryPic_Razz, gBerryPalette_Razz},
+ [ITEM_TO_BERRY(ITEM_BLUK_BERRY) - 1] = {gBerryPic_Bluk, gBerryPalette_Bluk},
+ [ITEM_TO_BERRY(ITEM_NANAB_BERRY) - 1] = {gBerryPic_Nanab, gBerryPalette_Nanab},
+ [ITEM_TO_BERRY(ITEM_WEPEAR_BERRY) - 1] = {gBerryPic_Wepear, gBerryPalette_Wepear},
+ [ITEM_TO_BERRY(ITEM_PINAP_BERRY) - 1] = {gBerryPic_Pinap, gBerryPalette_Pinap},
+ [ITEM_TO_BERRY(ITEM_POMEG_BERRY) - 1] = {gBerryPic_Pomeg, gBerryPalette_Pomeg},
+ [ITEM_TO_BERRY(ITEM_KELPSY_BERRY) - 1] = {gBerryPic_Kelpsy, gBerryPalette_Kelpsy},
+ [ITEM_TO_BERRY(ITEM_QUALOT_BERRY) - 1] = {gBerryPic_Qualot, gBerryPalette_Qualot},
+ [ITEM_TO_BERRY(ITEM_HONDEW_BERRY) - 1] = {gBerryPic_Hondew, gBerryPalette_Hondew},
+ [ITEM_TO_BERRY(ITEM_GREPA_BERRY) - 1] = {gBerryPic_Grepa, gBerryPalette_Grepa},
+ [ITEM_TO_BERRY(ITEM_TAMATO_BERRY) - 1] = {gBerryPic_Tamato, gBerryPalette_Tamato},
+ [ITEM_TO_BERRY(ITEM_CORNN_BERRY) - 1] = {gBerryPic_Cornn, gBerryPalette_Cornn},
+ [ITEM_TO_BERRY(ITEM_MAGOST_BERRY) - 1] = {gBerryPic_Magost, gBerryPalette_Magost},
+ [ITEM_TO_BERRY(ITEM_RABUTA_BERRY) - 1] = {gBerryPic_Rabuta, gBerryPalette_Rabuta},
+ [ITEM_TO_BERRY(ITEM_NOMEL_BERRY) - 1] = {gBerryPic_Nomel, gBerryPalette_Nomel},
+ [ITEM_TO_BERRY(ITEM_SPELON_BERRY) - 1] = {gBerryPic_Spelon, gBerryPalette_Spelon},
+ [ITEM_TO_BERRY(ITEM_PAMTRE_BERRY) - 1] = {gBerryPic_Pamtre, gBerryPalette_Pamtre},
+ [ITEM_TO_BERRY(ITEM_WATMEL_BERRY) - 1] = {gBerryPic_Watmel, gBerryPalette_Watmel},
+ [ITEM_TO_BERRY(ITEM_DURIN_BERRY) - 1] = {gBerryPic_Durin, gBerryPalette_Durin},
+ [ITEM_TO_BERRY(ITEM_BELUE_BERRY) - 1] = {gBerryPic_Belue, gBerryPalette_Belue},
+ [ITEM_TO_BERRY(ITEM_CHILAN_BERRY) - 1] = {gBerryPic_Chilan, gBerryPalette_Chilan},
+ [ITEM_TO_BERRY(ITEM_OCCA_BERRY) - 1] = {gBerryPic_Occa, gBerryPalette_Occa},
+ [ITEM_TO_BERRY(ITEM_PASSHO_BERRY) - 1] = {gBerryPic_Passho, gBerryPalette_Passho},
+ [ITEM_TO_BERRY(ITEM_WACAN_BERRY) - 1] = {gBerryPic_Wacan, gBerryPalette_Wacan},
+ [ITEM_TO_BERRY(ITEM_RINDO_BERRY) - 1] = {gBerryPic_Rindo, gBerryPalette_Rindo},
+ [ITEM_TO_BERRY(ITEM_YACHE_BERRY) - 1] = {gBerryPic_Yache, gBerryPalette_Yache},
+ [ITEM_TO_BERRY(ITEM_CHOPLE_BERRY) - 1] = {gBerryPic_Chople, gBerryPalette_Chople},
+ [ITEM_TO_BERRY(ITEM_KEBIA_BERRY) - 1] = {gBerryPic_Kebia, gBerryPalette_Kebia},
+ [ITEM_TO_BERRY(ITEM_SHUCA_BERRY) - 1] = {gBerryPic_Shuca, gBerryPalette_Shuca},
+ [ITEM_TO_BERRY(ITEM_COBA_BERRY) - 1] = {gBerryPic_Coba, gBerryPalette_Coba},
+ [ITEM_TO_BERRY(ITEM_PAYAPA_BERRY) - 1] = {gBerryPic_Payapa, gBerryPalette_Payapa},
+ [ITEM_TO_BERRY(ITEM_TANGA_BERRY) - 1] = {gBerryPic_Tanga, gBerryPalette_Tanga},
+ [ITEM_TO_BERRY(ITEM_CHARTI_BERRY) - 1] = {gBerryPic_Charti, gBerryPalette_Charti},
+ [ITEM_TO_BERRY(ITEM_KASIB_BERRY) - 1] = {gBerryPic_Kasib, gBerryPalette_Kasib},
+ [ITEM_TO_BERRY(ITEM_HABAN_BERRY) - 1] = {gBerryPic_Haban, gBerryPalette_Haban},
+ [ITEM_TO_BERRY(ITEM_COLBUR_BERRY) - 1] = {gBerryPic_Colbur, gBerryPalette_Colbur},
+ [ITEM_TO_BERRY(ITEM_BABIRI_BERRY) - 1] = {gBerryPic_Babiri, gBerryPalette_Babiri},
+ [ITEM_TO_BERRY(ITEM_ROSELI_BERRY) - 1] = {gBerryPic_Roseli, gBerryPalette_Roseli},
+ [ITEM_TO_BERRY(ITEM_LIECHI_BERRY) - 1] = {gBerryPic_Liechi, gBerryPalette_Liechi},
+ [ITEM_TO_BERRY(ITEM_GANLON_BERRY) - 1] = {gBerryPic_Ganlon, gBerryPalette_Ganlon},
+ [ITEM_TO_BERRY(ITEM_SALAC_BERRY) - 1] = {gBerryPic_Salac, gBerryPalette_Salac},
+ [ITEM_TO_BERRY(ITEM_PETAYA_BERRY) - 1] = {gBerryPic_Petaya, gBerryPalette_Petaya},
+ [ITEM_TO_BERRY(ITEM_APICOT_BERRY) - 1] = {gBerryPic_Apicot, gBerryPalette_Apicot},
+ [ITEM_TO_BERRY(ITEM_LANSAT_BERRY) - 1] = {gBerryPic_Lansat, gBerryPalette_Lansat},
+ [ITEM_TO_BERRY(ITEM_STARF_BERRY) - 1] = {gBerryPic_Starf, gBerryPalette_Starf},
+ [ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1] = {gBerryPic_Enigma, gBerryPalette_Enigma},
+ [ITEM_TO_BERRY(ITEM_MICLE_BERRY) - 1] = {gBerryPic_Micle, gBerryPalette_Micle},
+ [ITEM_TO_BERRY(ITEM_CUSTAP_BERRY) - 1] = {gBerryPic_Custap, gBerryPalette_Custap},
+ [ITEM_TO_BERRY(ITEM_JABOCA_BERRY) - 1] = {gBerryPic_Jaboca, gBerryPalette_Jaboca},
+ [ITEM_TO_BERRY(ITEM_ROWAP_BERRY) - 1] = {gBerryPic_Rowap, gBerryPalette_Rowap},
+ [ITEM_TO_BERRY(ITEM_KEE_BERRY) - 1] = {gBerryPic_Kee, gBerryPalette_Kee},
+ [ITEM_TO_BERRY(ITEM_MARANGA_BERRY)- 1] = {gBerryPic_Maranga, gBerryPalette_Maranga},
+ [ITEM_TO_BERRY(ITEM_ENIGMA_BERRY_E_READER) - 1] = {gBerryPic_Enigma, gBerryPalette_Enigma},
};
const struct CompressedSpriteSheet gBerryCheckCircleSpriteSheet =
@@ -381,7 +411,7 @@ static const struct OamData sBerryCheckCircleOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -436,6 +466,8 @@ void AddBagVisualSprite(u8 bagPocketId)
SetBagVisualPocketId(bagPocketId, FALSE);
}
+#define sPocketId data[0]
+
void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
{
struct Sprite *sprite = &gSprites[gBagMenu->spriteIds[ITEMMENUSPRITE_BAG]];
@@ -443,8 +475,8 @@ void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
{
sprite->y2 = -5;
sprite->callback = SpriteCB_BagVisualSwitchingPockets;
- sprite->data[0] = bagPocketId + 1;
- StartSpriteAnim(sprite, 0);
+ sprite->sPocketId = bagPocketId + 1;
+ StartSpriteAnim(sprite, POCKET_NONE);
}
else
{
@@ -460,26 +492,29 @@ static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
}
else
{
- StartSpriteAnim(sprite, sprite->data[0]);
+ StartSpriteAnim(sprite, sprite->sPocketId);
sprite->callback = SpriteCallbackDummy;
}
}
+#undef sPocketId
+
void ShakeBagSprite(void)
{
struct Sprite *sprite = &gSprites[gBagMenu->spriteIds[ITEMMENUSPRITE_BAG]];
if (sprite->affineAnimEnded)
{
- StartSpriteAffineAnim(sprite, 1);
+ StartSpriteAffineAnim(sprite, ANIM_BAG_SHAKE);
sprite->callback = SpriteCB_ShakeBagSprite;
}
}
static void SpriteCB_ShakeBagSprite(struct Sprite *sprite)
{
+ // Wait for shaking to end
if (sprite->affineAnimEnded)
{
- StartSpriteAffineAnim(sprite, 0);
+ StartSpriteAffineAnim(sprite, ANIM_BAG_NORMAL);
sprite->callback = SpriteCallbackDummy;
}
}
@@ -609,7 +644,7 @@ static void LoadBerryGfx(u8 berryId)
{
struct CompressedSpritePalette pal;
- if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1 && IsEnigmaBerryValid())
+ if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY_E_READER) - 1 && IsEnigmaBerryValid())
{
// unknown empty if statement
}
diff --git a/src/item_use.c b/src/item_use.c
index 0c6fa200fe..7cc4bb32d3 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "item_use.h"
#include "battle.h"
+#include "battle_anim.h"
#include "battle_pyramid.h"
#include "battle_pyramid_bag.h"
#include "berry.h"
@@ -98,7 +99,7 @@ static const struct YesNoFuncTable sUseTMHMYesNoFuncTable =
static void SetUpItemUseCallback(u8 taskId)
{
u8 type;
- if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY)
+ if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY_E_READER)
type = gTasks[taskId].tEnigmaBerryType - 1;
else
type = ItemId_GetType(gSpecialVar_ItemId) - 1;
@@ -163,10 +164,10 @@ static void DisplayCannotDismountBikeMessage(u8 taskId, bool8 isUsingRegisteredK
static void Task_CloseCantUseKeyItemMessage(u8 taskId)
{
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
DestroyTask(taskId);
ScriptUnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
}
u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId)
@@ -184,7 +185,7 @@ static void CB2_CheckMail(void)
{
struct Mail mail;
mail.itemId = gSpecialVar_ItemId;
- ReadMail(&mail, CB2_ReturnToBagMenuPocket, 0);
+ ReadMail(&mail, CB2_ReturnToBagMenuPocket, FALSE);
}
void ItemUseOutOfBattle_Mail(u8 taskId)
@@ -195,7 +196,7 @@ void ItemUseOutOfBattle_Mail(u8 taskId)
void ItemUseOutOfBattle_Bike(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
s16 coordsY;
s16 coordsX;
u8 behavior;
@@ -222,7 +223,7 @@ static void ItemUseOnFieldCB_Bike(u8 taskId)
else // ACRO_BIKE
GetOnOffBike(PLAYER_AVATAR_FLAG_ACRO_BIKE);
ScriptUnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
}
@@ -247,7 +248,7 @@ static bool32 CanFish(void)
}
else
{
- if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) && !MapGridIsImpassableAt(x, y))
+ if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior) && MapGridGetCollisionAt(x, y) == 0)
return TRUE;
if (MetatileBehavior_IsBridgeOverWaterNoEdge(tileBehavior) == TRUE)
return TRUE;
@@ -301,7 +302,7 @@ static void Task_UseItemfinder(u8 taskId)
u8 playerDir;
u8 playerDirToItem;
u8 i;
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (tCounter == 0)
{
if (tItemfinderBeeps == 4)
@@ -335,9 +336,9 @@ static void Task_UseItemfinder(u8 taskId)
static void Task_CloseItemfinderMessage(u8 taskId)
{
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
ScriptUnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
}
@@ -692,8 +693,8 @@ void ItemUseOutOfBattle_Berry(u8 taskId)
static void ItemUseOnFieldCB_Berry(u8 taskId)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
- ScriptContext2_Enable();
- ScriptContext1_SetupScript(BerryTree_EventScript_ItemUsePlantBerry);
+ LockPlayerFieldControls();
+ ScriptContext_SetupScript(BerryTree_EventScript_ItemUsePlantBerry);
DestroyTask(taskId);
}
@@ -717,8 +718,8 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId)
static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId)
{
- ScriptContext2_Enable();
- ScriptContext1_SetupScript(BerryTree_EventScript_ItemUseWailmerPail);
+ LockPlayerFieldControls();
+ ScriptContext_SetupScript(BerryTree_EventScript_ItemUseWailmerPail);
DestroyTask(taskId);
}
@@ -738,8 +739,8 @@ static bool8 TryToWaterSudowoodo(void)
static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId)
{
- ScriptContext2_Enable();
- ScriptContext1_SetupScript(BattleFrontier_OutsideEast_EventScript_WaterSudowoodo);
+ LockPlayerFieldControls();
+ ScriptContext_SetupScript(BattleFrontier_OutsideEast_EventScript_WaterSudowoodo);
DestroyTask(taskId);
}
@@ -749,6 +750,18 @@ void ItemUseOutOfBattle_Medicine(u8 taskId)
SetUpItemUseCallback(taskId);
}
+void ItemUseOutOfBattle_AbilityCapsule(u8 taskId)
+{
+ gItemUseCB = ItemUseCB_AbilityCapsule;
+ SetUpItemUseCallback(taskId);
+}
+
+void ItemUseOutOfBattle_AbilityPatch(u8 taskId)
+{
+ gItemUseCB = ItemUseCB_AbilityPatch;
+ SetUpItemUseCallback(taskId);
+}
+
void ItemUseOutOfBattle_ReduceEV(u8 taskId)
{
gItemUseCB = ItemUseCB_ReduceEV;
@@ -843,7 +856,7 @@ void ItemUseOutOfBattle_Repel(u8 taskId)
static void Task_StartUseRepel(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (++data[8] > 7)
{
@@ -907,7 +920,9 @@ void Task_UseDigEscapeRopeOnField(u8 taskId)
static void ItemUseOnFieldCB_EscapeRope(u8 taskId)
{
Overworld_ResetStateAfterDigEscRope();
- RemoveUsedItem();
+ #if I_KEY_ESCAPE_ROPE < GEN_8
+ RemoveUsedItem();
+ #endif
gTasks[taskId].data[0] = 0;
DisplayItemMessageOnField(taskId, gStringVar4, Task_UseDigEscapeRopeOnField);
}
@@ -939,22 +954,61 @@ void ItemUseOutOfBattle_EvolutionStone(u8 taskId)
SetUpItemUseCallback(taskId);
}
+static u32 GetBallThrowableState(void)
+{
+ if (IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
+ && IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)))
+ return BALL_THROW_UNABLE_TWO_MONS;
+ else if (IsPlayerPartyAndPokemonStorageFull() == TRUE)
+ return BALL_THROW_UNABLE_NO_ROOM;
+#if B_SEMI_INVULNERABLE_CATCH >= GEN_4
+ else if (gStatuses3[GetCatchingBattler()] & STATUS3_SEMI_INVULNERABLE)
+ return BALL_THROW_UNABLE_SEMI_INVULNERABLE;
+#endif
+
+ return BALL_THROW_ABLE;
+}
+
+bool32 CanThrowBall(void)
+{
+ return (GetBallThrowableState() == BALL_THROW_ABLE);
+}
+
+static const u8 sText_CantThrowPokeBall_TwoMons[] = _("Cannot throw a ball!\nThere are two Pokémon out there!\p");
+static const u8 sText_CantThrowPokeBall_SemiInvulnerable[] = _("Cannot throw a ball!\nThere's no Pokémon in sight!\p");
void ItemUseInBattle_PokeBall(u8 taskId)
{
- if (IsPlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon?
+ switch (GetBallThrowableState())
{
+ case BALL_THROW_ABLE:
+ default:
RemoveBagItem(gSpecialVar_ItemId, 1);
if (!InBattlePyramid())
Task_FadeAndCloseBagMenu(taskId);
else
CloseBattlePyramidBag(taskId);
+ break;
+ case BALL_THROW_UNABLE_TWO_MONS:
+ if (!InBattlePyramid())
+ DisplayItemMessage(taskId, FONT_NORMAL, sText_CantThrowPokeBall_TwoMons, CloseItemMessage);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, sText_CantThrowPokeBall_TwoMons, Task_CloseBattlePyramidBagMessage);
+ break;
+ case BALL_THROW_UNABLE_NO_ROOM:
+ if (!InBattlePyramid())
+ DisplayItemMessage(taskId, FONT_NORMAL, gText_BoxFull, CloseItemMessage);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage);
+ break;
+ #if B_SEMI_INVULNERABLE_CATCH >= GEN_4
+ case BALL_THROW_UNABLE_SEMI_INVULNERABLE:
+ if (!InBattlePyramid())
+ DisplayItemMessage(taskId, FONT_NORMAL, sText_CantThrowPokeBall_SemiInvulnerable, CloseItemMessage);
+ else
+ DisplayItemMessageInBattlePyramid(taskId, sText_CantThrowPokeBall_SemiInvulnerable, Task_CloseBattlePyramidBagMessage);
+ break;
+ #endif
}
- else if (!InBattlePyramid())
- {
- DisplayItemMessage(taskId, FONT_NORMAL, gText_BoxFull, CloseItemMessage);
- }
- else
- DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage);
}
static void Task_CloseStatIncreaseMessage(u8 taskId)
diff --git a/src/libisagbprn.c b/src/libisagbprn.c
index 7a70cf41fa..6fb9d5ec08 100644
--- a/src/libisagbprn.c
+++ b/src/libisagbprn.c
@@ -160,7 +160,7 @@ void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopP
/*
void NoCashGBAPrint(const char *pBuf)
{
- *(volatile u32*)NOCASHGBAPRINTADDR2 = (u32)pBuf;
+ *(volatile u32 *)NOCASHGBAPRINTADDR2 = (u32)pBuf;
}
void NoCashGBAPrintf(const char *pBuf, ...)
diff --git a/src/librfu_intr.c b/src/librfu_intr.c
index d902b1c45b..ab4392e229 100644
--- a/src/librfu_intr.c
+++ b/src/librfu_intr.c
@@ -41,7 +41,7 @@ static void sio32intr_clock_master(void)
{
if (gSTWIStatus->reqNext <= gSTWIStatus->reqLength)
{
- REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket->rfuPacket8.data)[gSTWIStatus->reqNext];
+ REG_SIODATA32 = ((u32 *)gSTWIStatus->txPacket->rfuPacket8.data)[gSTWIStatus->reqNext];
gSTWIStatus->reqNext++;
}
else
@@ -62,7 +62,7 @@ static void sio32intr_clock_master(void)
if ((regSIODATA32 & 0xFFFF0000) == 0x99660000)
{
gSTWIStatus->ackNext = 0;
- ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
+ ((u32 *)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
gSTWIStatus->ackNext++;
gSTWIStatus->ackActiveCommand = regSIODATA32;
gSTWIStatus->ackLength = ackLen = regSIODATA32 >> 8;
@@ -85,7 +85,7 @@ static void sio32intr_clock_master(void)
}
else if (gSTWIStatus->state == 2) // master receive ack
{
- ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
+ ((u32 *)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
gSTWIStatus->ackNext++;
if (gSTWIStatus->ackLength < gSTWIStatus->ackNext)
gSTWIStatus->state = 3; // master done ack
@@ -158,7 +158,7 @@ static void sio32intr_clock_slave(void)
regSIODATA32 = REG_SIODATA32;
if (gSTWIStatus->state == 5) // slave receive req init
{
- ((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32;
+ ((u32 *)gSTWIStatus->rxPacket)[0] = regSIODATA32;
gSTWIStatus->reqNext = 1;
r0 = 0x99660000;
// variable reuse required
@@ -179,24 +179,24 @@ static void sio32intr_clock_slave(void)
)
{
gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80;
- ((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 + gSTWIStatus->ackActiveCommand;
+ ((u32 *)gSTWIStatus->txPacket)[0] = 0x99660000 + gSTWIStatus->ackActiveCommand;
gSTWIStatus->ackLength = 0;
}
else
{
- ((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE;
+ ((u32 *)gSTWIStatus->txPacket)[0] = 0x996601EE;
if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D)
{
- ((u32*)gSTWIStatus->txPacket)[1] = 1;
+ ((u32 *)gSTWIStatus->txPacket)[1] = 1;
}
else
{
- ((u32*)gSTWIStatus->txPacket)[1] = 2;
+ ((u32 *)gSTWIStatus->txPacket)[1] = 2;
}
gSTWIStatus->ackLength = 1;
gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
}
- REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
+ REG_SIODATA32 = ((u32 *)gSTWIStatus->txPacket)[0];
gSTWIStatus->ackNext = 1;
gSTWIStatus->state = 7; // slave send ack
}
@@ -216,7 +216,7 @@ static void sio32intr_clock_slave(void)
}
else if (gSTWIStatus->state == 6) // slave receive req
{
- ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->reqNext] = regSIODATA32;
+ ((u32 *)gSTWIStatus->rxPacket)[gSTWIStatus->reqNext] = regSIODATA32;
gSTWIStatus->reqNext++;
if (gSTWIStatus->reqLength < gSTWIStatus->reqNext)
{
@@ -227,24 +227,24 @@ static void sio32intr_clock_slave(void)
)
{
gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80;
- ((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 | gSTWIStatus->ackActiveCommand;
+ ((u32 *)gSTWIStatus->txPacket)[0] = 0x99660000 | gSTWIStatus->ackActiveCommand;
gSTWIStatus->ackLength = 0;
}
else
{
- ((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE;
+ ((u32 *)gSTWIStatus->txPacket)[0] = 0x996601EE;
if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D)
{
- ((u32*)gSTWIStatus->txPacket)[1] = 1;
+ ((u32 *)gSTWIStatus->txPacket)[1] = 1;
}
else
{
- ((u32*)gSTWIStatus->txPacket)[1] = 2;
+ ((u32 *)gSTWIStatus->txPacket)[1] = 2;
}
gSTWIStatus->ackLength = 1;
gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
}
- REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
+ REG_SIODATA32 = ((u32 *)gSTWIStatus->txPacket)[0];
gSTWIStatus->ackNext = 1;
gSTWIStatus->state = 7; // slave send ack
}
@@ -263,7 +263,7 @@ static void sio32intr_clock_slave(void)
}
else
{
- REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[gSTWIStatus->ackNext];
+ REG_SIODATA32 = ((u32 *)gSTWIStatus->txPacket)[gSTWIStatus->ackNext];
gSTWIStatus->ackNext++;
}
}
@@ -336,8 +336,8 @@ static u16 handshake_wait(u16 slot)
static void STWI_set_timer_in_RAM(u8 count)
{
- vu16* regTMCNTL = ®_TMCNT_L(gSTWIStatus->timerSelect);
- vu16* regTMCNTH = ®_TMCNT_H(gSTWIStatus->timerSelect);
+ vu16 *regTMCNTL = ®_TMCNT_L(gSTWIStatus->timerSelect);
+ vu16 *regTMCNTH = ®_TMCNT_H(gSTWIStatus->timerSelect);
REG_IME = 0;
switch (count)
{
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
index 9a5db6d9df..319743d0d2 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -16,7 +16,7 @@ struct LLSFStruct
u8 connSlotFlagShift;
u8 slotStateShift;
u8 ackShift;
- u8 phaseShit;
+ u8 phaseShift;
u8 nShift;
u8 recvFirstMask;
u8 connSlotFlagMask;
@@ -89,7 +89,7 @@ static const struct LLSFStruct llsf_struct[2] = {
.connSlotFlagShift = 0,
.slotStateShift = 10,
.ackShift = 9,
- .phaseShit = 5,
+ .phaseShift = 5,
.nShift = 7,
.recvFirstMask = 2,
.connSlotFlagMask = 0,
@@ -105,7 +105,7 @@ static const struct LLSFStruct llsf_struct[2] = {
.connSlotFlagShift = 18,
.slotStateShift = 14,
.ackShift = 13,
- .phaseShit = 9,
+ .phaseShift = 9,
.nShift = 11,
.recvFirstMask = 3,
.connSlotFlagMask = 15,
@@ -1809,7 +1809,7 @@ static u16 rfu_STC_NI_constructLLSF(u8 bm_slot_id, u8 **dest_pp, struct NIComm *
}
frame = (NI_comm->state & 0xF) << llsf->slotStateShift
| NI_comm->ack << llsf->ackShift
- | NI_comm->phase << llsf->phaseShit
+ | NI_comm->phase << llsf->phaseShift
| NI_comm->n[NI_comm->phase] << llsf->nShift
| size;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
@@ -1978,7 +1978,7 @@ static u16 rfu_STC_analyzeLLSF(u8 slot_id, const u8 *src, u16 last_frame)
llsf_NI.connSlotFlag = (frames >> llsf_p->connSlotFlagShift) & llsf_p->connSlotFlagMask;
llsf_NI.slotState = (frames >> llsf_p->slotStateShift) & llsf_p->slotStateMask;
llsf_NI.ack = (frames >> llsf_p->ackShift) & llsf_p->ackMask;
- llsf_NI.phase = (frames >> llsf_p->phaseShit) & llsf_p->phaseMask;
+ llsf_NI.phase = (frames >> llsf_p->phaseShift) & llsf_p->phaseMask;
llsf_NI.n = (frames >> llsf_p->nShift) & llsf_p->nMask;
llsf_NI.frame = (frames & llsf_p->framesMask) & frames;
retVal = llsf_NI.frame + llsf_p->frameSize;
diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c
index 8d8d10c406..b515f338e0 100644
--- a/src/librfu_stwi.c
+++ b/src/librfu_stwi.c
@@ -235,7 +235,7 @@ void STWI_send_SystemConfigREQ(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
packetBytes += sizeof(u32);
*packetBytes++ = mcTimer;
*packetBytes++ = maxMFrame;
- *(u16*)packetBytes = availSlotFlag;
+ *(u16 *)packetBytes = availSlotFlag;
STWI_start_Command();
}
}
diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c
index 85340ed96e..e7a5862f07 100644
--- a/src/lilycove_lady.c
+++ b/src/lilycove_lady.c
@@ -294,7 +294,7 @@ void SetFavorLadyState_Complete(void)
void FieldCallback_FavorLadyEnableScriptContexts(void)
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
static void QuizLadyPickQuestion(void)
@@ -571,7 +571,7 @@ void BufferQuizCorrectAnswer(void)
void FieldCallback_QuizLadyEnableScriptContexts(void)
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
void QuizLadyClearQuestionForRecordMix(const LilycoveLady *lilycoveLady)
diff --git a/src/link.c b/src/link.c
index e88cde55a3..57e33c8115 100644
--- a/src/link.c
+++ b/src/link.c
@@ -1595,7 +1595,7 @@ void CB2_LinkError(void)
ResetSpriteData();
FreeAllSpritePalettes();
ResetPaletteFadeControl();
- FillPalette(0, 0, 2);
+ FillPalette(RGB_BLACK, 0, 2);
ResetTasks();
ScanlineEffect_Stop();
if (gWirelessCommType)
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 87e9f8e9d2..c54d6c3d34 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -2004,7 +2004,7 @@ static void RfuMain1_UnionRoom(void)
{
rfu_REQ_recvData();
rfu_waitREQComplete();
- rfu_LMAN_REQ_sendData(0);
+ rfu_LMAN_REQ_sendData(FALSE);
}
}
@@ -2747,7 +2747,7 @@ static void Task_RfuReconnectWithParent(u8 taskId)
if (CanTryReconnectParent())
{
- u8 id = GetPartnerIndexByNameAndTrainerID((u8*)data, ReadU16(&data[8]));
+ u8 id = GetPartnerIndexByNameAndTrainerID((u8 *)data, ReadU16(&data[8]));
if (id != 0xFF)
{
if (gRfuLinkStatus->partner[id].slot != 0xFF)
@@ -2797,7 +2797,7 @@ void CreateTask_RfuReconnectWithParent(const u8 *name, u16 trainerId)
gRfu.status = RFU_STATUS_OK;
taskId = CreateTask(Task_RfuReconnectWithParent, 3);
data = gTasks[taskId].data;
- StringCopy((u8*)(data), name);
+ StringCopy((u8 *)(data), name);
data[8] = trainerId;
}
@@ -2947,7 +2947,7 @@ static void Debug_PrintStatus(void)
if ((gRfuLinkStatus->getNameFlag >> i) & 1)
{
Debug_PrintNum(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
- Debug_PrintString((void*)gRfuLinkStatus->partner[i].gname, 6, i + 3);
+ Debug_PrintString((void *)gRfuLinkStatus->partner[i].gname, 6, i + 3);
Debug_PrintString(gRfuLinkStatus->partner[i].uname, 22, i + 3);
}
}
@@ -2967,7 +2967,7 @@ static void Debug_PrintStatus(void)
Debug_PrintString(sASCII_8Spaces, 22, i + 3);
}
Debug_PrintNum(gRfuLinkStatus->partner[gRfu.childSlot].serialNo, 1, 3, 4);
- Debug_PrintString((void*)gRfuLinkStatus->partner[gRfu.childSlot].gname, 6, 3);
+ Debug_PrintString((void *)gRfuLinkStatus->partner[gRfu.childSlot].gname, 6, 3);
Debug_PrintString(gRfuLinkStatus->partner[gRfu.childSlot].uname, 22, 3);
}
else
diff --git a/src/list_menu.c b/src/list_menu.c
index 8ba13a6cf8..64692ce1f6 100644
--- a/src/list_menu.c
+++ b/src/list_menu.c
@@ -127,7 +127,7 @@ static const struct OamData sOamData_ScrollArrowIndicator =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -267,7 +267,7 @@ static const struct OamData sOamData_RedArrowCursor =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -408,7 +408,7 @@ u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenu
s32 ListMenu_ProcessInput(u8 listTaskId)
{
- struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ struct ListMenu *list = (void *) gTasks[listTaskId].data;
if (JOY_NEW(A_BUTTON))
{
@@ -469,7 +469,7 @@ s32 ListMenu_ProcessInput(u8 listTaskId)
void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
{
- struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ struct ListMenu *list = (void *) gTasks[listTaskId].data;
if (scrollOffset != NULL)
*scrollOffset = list->scrollOffset;
@@ -484,7 +484,7 @@ void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
void RedrawListMenu(u8 listTaskId)
{
- struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ struct ListMenu *list = (void *) gTasks[listTaskId].data;
FillWindowPixelBuffer(list->template.windowId, PIXEL_FILL(list->template.fillValue));
ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
@@ -495,7 +495,7 @@ void RedrawListMenu(u8 listTaskId)
// unused
void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
{
- struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ struct ListMenu *list = (void *) gTasks[listTaskId].data;
list->template.cursorPal = cursorPal;
list->template.fillValue = fillValue;
@@ -505,7 +505,7 @@ void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShad
// unused
void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y)
{
- struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ struct ListMenu *list = (void *) gTasks[listTaskId].data;
SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT, x);
SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP, y);
@@ -537,7 +537,7 @@ s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 s
void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId)
{
- struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ struct ListMenu *list = (void *) gTasks[listTaskId].data;
if (arrayId != NULL)
*arrayId = list->scrollOffset + list->selectedRow;
@@ -545,7 +545,7 @@ void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId)
void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
{
- struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ struct ListMenu *list = (void *) gTasks[listTaskId].data;
if (scrollOffset != NULL)
*scrollOffset = list->scrollOffset;
@@ -555,7 +555,7 @@ void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId)
{
- struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ struct ListMenu *list = (void *) gTasks[listTaskId].data;
u8 yMultiplier = GetFontAttribute(list->template.fontId, FONTATTR_MAX_LETTER_HEIGHT) + list->template.itemVerticalPadding;
return list->selectedRow * yMultiplier + list->template.upText_Y;
@@ -564,7 +564,7 @@ u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId)
static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
{
u8 listTaskId = CreateTask(ListMenuDummyTask, 0);
- struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ struct ListMenu *list = (void *) gTasks[listTaskId].data;
list->template = *listMenuTemplate;
list->scrollOffset = scrollOffset;
@@ -902,7 +902,7 @@ void ListMenuDefaultCursorMoveFunc(s32 itemIndex, bool8 onInit, struct ListMenu
// unused
s32 ListMenuGetUnkIndicatorsStructFields(u8 taskId, u8 field)
{
- struct UnkIndicatorsStruct *data = (void*) gTasks[taskId].data;
+ struct UnkIndicatorsStruct *data = (void *) gTasks[taskId].data;
switch (field)
{
@@ -946,13 +946,13 @@ s32 ListMenuGetUnkIndicatorsStructFields(u8 taskId, u8 field)
void ListMenuSetUnkIndicatorsStructField(u8 taskId, u8 field, s32 value)
{
- struct UnkIndicatorsStruct *data = (void*) &gTasks[taskId].data;
+ struct UnkIndicatorsStruct *data = (void *) &gTasks[taskId].data;
switch (field)
{
case 0:
case 1:
- data->field_4 = (void*)(value);
+ data->field_4 = (void *)(value);
break;
case 2:
data->field_C = value;
@@ -1088,7 +1088,7 @@ u8 AddScrollIndicatorArrowPair(const struct ScrollArrowsTemplate *arrowInfo, u16
}
taskId = CreateTask(Task_ScrollIndicatorArrowPair, 0);
- data = (void*) gTasks[taskId].data;
+ data = (void *) gTasks[taskId].data;
data->field_0 = 0;
data->scrollOffset = scrollOffset;
@@ -1140,7 +1140,7 @@ u8 AddScrollIndicatorArrowPairParameterized(u32 arrowType, s32 commonPos, s32 fi
static void Task_ScrollIndicatorArrowPair(u8 taskId)
{
- struct ScrollIndicatorPair *data = (void*) gTasks[taskId].data;
+ struct ScrollIndicatorPair *data = (void *) gTasks[taskId].data;
u16 currItem = (*data->scrollOffset);
if (currItem == data->fullyUpThreshold && currItem != 0xFFFF)
@@ -1159,7 +1159,7 @@ static void Task_ScrollIndicatorArrowPair(u8 taskId)
void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- struct ScrollIndicatorPair *scrollData = (void*) data;
+ struct ScrollIndicatorPair *scrollData = (void *) data;
if (tIsScrolled)
{
@@ -1177,7 +1177,7 @@ void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId)
void RemoveScrollIndicatorArrowPair(u8 taskId)
{
- struct ScrollIndicatorPair *data = (void*) gTasks[taskId].data;
+ struct ScrollIndicatorPair *data = (void *) gTasks[taskId].data;
if (data->tileTag != TAG_NONE)
FreeSpriteTilesByTag(data->tileTag);
@@ -1334,7 +1334,7 @@ static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor)
}
taskId = CreateTask(Task_RedOutlineCursor, 0);
- data = (void*) gTasks[taskId].data;
+ data = (void *) gTasks[taskId].data;
data->tileTag = cursor->tileTag;
data->palTag = cursor->palTag;
@@ -1362,7 +1362,7 @@ static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor)
static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y)
{
- struct RedOutlineCursor *data = (void*) gTasks[taskId].data;
+ struct RedOutlineCursor *data = (void *) gTasks[taskId].data;
gSprites[data->spriteId].x = x + 120;
gSprites[data->spriteId].y = y + 120;
@@ -1370,7 +1370,7 @@ static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y)
static void ListMenuRemoveRedOutlineCursorObject(u8 taskId)
{
- struct RedOutlineCursor *data = (void*) gTasks[taskId].data;
+ struct RedOutlineCursor *data = (void *) gTasks[taskId].data;
Free(data->subspritesPtr);
@@ -1419,7 +1419,7 @@ static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor)
}
taskId = CreateTask(Task_RedArrowCursor, 0);
- data = (void*) gTasks[taskId].data;
+ data = (void *) gTasks[taskId].data;
data->tileTag = cursor->tileTag;
data->palTag = cursor->palTag;
@@ -1442,7 +1442,7 @@ static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor)
static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y)
{
- struct RedArrowCursor *data = (void*) gTasks[taskId].data;
+ struct RedArrowCursor *data = (void *) gTasks[taskId].data;
gSprites[data->spriteId].x = x;
gSprites[data->spriteId].y = y;
@@ -1450,7 +1450,7 @@ static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y)
static void ListMenuRemoveRedArrowCursorObject(u8 taskId)
{
- struct RedArrowCursor *data = (void*) gTasks[taskId].data;
+ struct RedArrowCursor *data = (void *) gTasks[taskId].data;
if (data->tileTag != TAG_NONE)
FreeSpriteTilesByTag(data->tileTag);
diff --git a/src/load_save.c b/src/load_save.c
index f2b12acf0c..494a61bcf2 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -73,9 +73,9 @@ void SetSaveBlocksPointers(u16 offset)
offset = (offset + Random()) & (SAVEBLOCK_MOVE_RANGE - 4);
- gSaveBlock2Ptr = (void*)(&gSaveblock2) + offset;
- *sav1_LocalVar = (void*)(&gSaveblock1) + offset;
- gPokemonStoragePtr = (void*)(&gPokemonStorage) + offset;
+ gSaveBlock2Ptr = (void *)(&gSaveblock2) + offset;
+ *sav1_LocalVar = (void *)(&gSaveblock1) + offset;
+ gPokemonStoragePtr = (void *)(&gPokemonStorage) + offset;
SetBagItemsPointers();
SetDecorationInventoriesPointers();
diff --git a/src/m4a.c b/src/m4a.c
index faeef83e79..7774d09cba 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -1178,7 +1178,7 @@ void CgbSound(void)
*nrx3ptr = channels->frequency;
else
*nrx3ptr = (*nrx3ptr & 0x08) | channels->frequency;
- channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->frequency) + 1));
+ channels->n4 = (channels->n4 & 0xC0) + (*((u8 *)(&channels->frequency) + 1));
*nrx4ptr = (s8)(channels->n4 & mask);
}
diff --git a/src/mail.c b/src/mail.c
index c04bd0b7cf..c697ff4c4e 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -69,8 +69,8 @@ struct MailRead
/*0x021c*/ u8 monIconSpriteId;
/*0x021d*/ u8 language;
/*0x021e*/ bool8 international;
- /*0x0220*/ u8 * (*parserSingle)(u8 *dest, u16 word);
- /*0x0224*/ u8 * (*parserMultiple)(u8 *dest, const u16 *src, u16 length1, u16 length2);
+ /*0x0220*/ u8 *(*parserSingle)(u8 *dest, u16 word);
+ /*0x0224*/ u8 *(*parserMultiple)(u8 *dest, const u16 *src, u16 length1, u16 length2);
/*0x0228*/ const struct MailLayout *layout;
/*0x022c*/ u8 bg1TilemapBuffer[0x1000];
/*0x122c*/ u8 bg2TilemapBuffer[0x1000];
diff --git a/src/main_menu.c b/src/main_menu.c
index d11784133c..b8abffda57 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -178,8 +178,8 @@ static u32 InitMainMenu(bool8);
static void Task_MainMenuCheckSaveFile(u8);
static void Task_MainMenuCheckBattery(u8);
static void Task_WaitForSaveFileErrorWindow(u8);
-static void CreateMainMenuErrorWindow(const u8*);
-static void ClearMainMenuWindowTilemap(const struct WindowTemplate*);
+static void CreateMainMenuErrorWindow(const u8 *);
+static void ClearMainMenuWindowTilemap(const struct WindowTemplate *);
static void Task_DisplayMainMenu(u8);
static void Task_WaitForBatteryDryErrorWindow(u8);
static void MainMenu_FormatSavegameText(void);
@@ -209,7 +209,7 @@ static void Task_NewGameBirchSpeech_StartPlayerFadeIn(u8);
static void Task_NewGameBirchSpeech_WaitForPlayerFadeIn(u8);
static void Task_NewGameBirchSpeech_BoyOrGirl(u8);
static void LoadMainMenuWindowFrameTiles(u8, u16);
-static void DrawMainMenuWindowBorder(const struct WindowTemplate*, u16);
+static void DrawMainMenuWindowBorder(const struct WindowTemplate *, u16);
static void Task_HighlightSelectedMainMenuItem(u8);
static void Task_NewGameBirchSpeech_WaitToShowGenderMenu(u8);
static void Task_NewGameBirchSpeech_ChooseGender(u8);
@@ -232,7 +232,7 @@ static void Task_NewGameBirchSpeech_ReshowBirchLotad(u8);
static void Task_NewGameBirchSpeech_WaitForSpriteFadeInAndTextPrinter(u8);
static void Task_NewGameBirchSpeech_AreYouReady(u8);
static void Task_NewGameBirchSpeech_ShrinkPlayer(u8);
-static void SpriteCB_MovePlayerDownWhileShrinking(struct Sprite*);
+static void SpriteCB_MovePlayerDownWhileShrinking(struct Sprite *);
static void Task_NewGameBirchSpeech_WaitForPlayerShrink(u8);
static void Task_NewGameBirchSpeech_FadePlayerToWhite(u8);
static void Task_NewGameBirchSpeech_Cleanup(u8);
@@ -621,7 +621,7 @@ static u32 InitMainMenu(bool8 returningFromOptionsMenu)
static void Task_MainMenuCheckSaveFile(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
@@ -736,7 +736,7 @@ static void Task_WaitForBatteryDryErrorWindow(u8 taskId)
static void Task_DisplayMainMenu(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
u16 palette;
if (!gPaletteFade.active)
@@ -880,7 +880,7 @@ static void Task_HighlightSelectedMainMenuItem(u8 taskId)
static bool8 HandleMainMenuInput(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (JOY_NEW(A_BUTTON))
{
@@ -1272,8 +1272,8 @@ static void Task_NewGameBirchSpeech_Init(u8 taskId)
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0);
- LZ77UnCompVram(sBirchSpeechShadowGfx, (void*)VRAM);
- LZ77UnCompVram(sBirchSpeechBgMap, (void*)(BG_SCREEN_ADDR(7)));
+ LZ77UnCompVram(sBirchSpeechShadowGfx, (void *)VRAM);
+ LZ77UnCompVram(sBirchSpeechBgMap, (void *)(BG_SCREEN_ADDR(7)));
LoadPalette(sBirchSpeechBgPals, 0, 64);
LoadPalette(sBirchSpeechPlatformBlackPal, 1, 16);
ScanlineEffect_Stop();
@@ -1333,7 +1333,7 @@ static void Task_NewGameBirchSpeech_WaitForSpriteFadeInWelcome(u8 taskId)
CopyWindowToVram(0, COPYWIN_GFX);
NewGameBirchSpeech_ClearWindow(0);
StringExpandPlaceholders(gStringVar4, gText_Birch_Welcome);
- AddTextPrinterForMessage(1);
+ AddTextPrinterForMessage(TRUE);
gTasks[taskId].func = Task_NewGameBirchSpeech_ThisIsAPokemon;
}
}
@@ -1345,7 +1345,7 @@ static void Task_NewGameBirchSpeech_ThisIsAPokemon(u8 taskId)
{
gTasks[taskId].func = Task_NewGameBirchSpeech_MainSpeech;
StringExpandPlaceholders(gStringVar4, gText_ThisIsAPokemon);
- AddTextPrinterWithCallbackForMessage(1, NewGameBirchSpeech_WaitForThisIsPokemonText);
+ AddTextPrinterWithCallbackForMessage(TRUE, NewGameBirchSpeech_WaitForThisIsPokemonText);
sBirchSpeechMainTaskId = taskId;
}
}
@@ -1355,7 +1355,7 @@ static void Task_NewGameBirchSpeech_MainSpeech(u8 taskId)
if (!RunTextPrintersAndIsPrinter0Active())
{
StringExpandPlaceholders(gStringVar4, gText_Birch_MainSpeech);
- AddTextPrinterForMessage(1);
+ AddTextPrinterForMessage(TRUE);
gTasks[taskId].func = Task_NewGameBirchSpeech_AndYouAre;
}
}
@@ -1410,7 +1410,7 @@ static void Task_NewGameBirchSpeech_AndYouAre(u8 taskId)
{
sStartedPokeBallTask = FALSE;
StringExpandPlaceholders(gStringVar4, gText_Birch_AndYouAre);
- AddTextPrinterForMessage(1);
+ AddTextPrinterForMessage(TRUE);
gTasks[taskId].func = Task_NewGameBirchSpeech_StartBirchLotadPlatformFade;
}
}
@@ -1482,7 +1482,7 @@ static void Task_NewGameBirchSpeech_BoyOrGirl(u8 taskId)
{
NewGameBirchSpeech_ClearWindow(0);
StringExpandPlaceholders(gStringVar4, gText_Birch_BoyOrGirl);
- AddTextPrinterForMessage(1);
+ AddTextPrinterForMessage(TRUE);
gTasks[taskId].func = Task_NewGameBirchSpeech_WaitToShowGenderMenu;
}
@@ -1572,7 +1572,7 @@ static void Task_NewGameBirchSpeech_WhatsYourName(u8 taskId)
{
NewGameBirchSpeech_ClearWindow(0);
StringExpandPlaceholders(gStringVar4, gText_Birch_WhatsYourName);
- AddTextPrinterForMessage(1);
+ AddTextPrinterForMessage(TRUE);
gTasks[taskId].func = Task_NewGameBirchSpeech_WaitForWhatsYourNameToPrint;
}
@@ -1607,7 +1607,7 @@ static void Task_NewGameBirchSpeech_SoItsPlayerName(u8 taskId)
{
NewGameBirchSpeech_ClearWindow(0);
StringExpandPlaceholders(gStringVar4, gText_Birch_SoItsPlayer);
- AddTextPrinterForMessage(1);
+ AddTextPrinterForMessage(TRUE);
gTasks[taskId].func = Task_NewGameBirchSpeech_CreateNameYesNo;
}
@@ -1673,7 +1673,7 @@ static void Task_NewGameBirchSpeech_ReshowBirchLotad(u8 taskId)
NewGameBirchSpeech_StartFadePlatformOut(taskId, 1);
NewGameBirchSpeech_ClearWindow(0);
StringExpandPlaceholders(gStringVar4, gText_Birch_YourePlayer);
- AddTextPrinterForMessage(1);
+ AddTextPrinterForMessage(TRUE);
gTasks[taskId].func = Task_NewGameBirchSpeech_WaitForSpriteFadeInAndTextPrinter;
}
}
@@ -1721,7 +1721,7 @@ static void Task_NewGameBirchSpeech_AreYouReady(u8 taskId)
NewGameBirchSpeech_StartFadeInTarget1OutTarget2(taskId, 2);
NewGameBirchSpeech_StartFadePlatformOut(taskId, 1);
StringExpandPlaceholders(gStringVar4, gText_Birch_AreYouReady);
- AddTextPrinterForMessage(1);
+ AddTextPrinterForMessage(TRUE);
gTasks[taskId].func = Task_NewGameBirchSpeech_ShrinkPlayer;
}
}
@@ -1807,8 +1807,8 @@ static void CB2_NewGameBirchSpeech_ReturnFromNamingScreen(void)
DmaFill32(3, 0, OAM, OAM_SIZE);
DmaFill16(3, 0, PLTT, PLTT_SIZE);
ResetPaletteFade();
- LZ77UnCompVram(sBirchSpeechShadowGfx, (u8*)VRAM);
- LZ77UnCompVram(sBirchSpeechBgMap, (u8*)(BG_SCREEN_ADDR(7)));
+ LZ77UnCompVram(sBirchSpeechShadowGfx, (u8 *)VRAM);
+ LZ77UnCompVram(sBirchSpeechBgMap, (u8 *)(BG_SCREEN_ADDR(7)));
LoadPalette(sBirchSpeechBgPals, 0, 64);
LoadPalette(&sBirchSpeechBgGradientPal[1], 1, 16);
ResetTasks();
@@ -2102,7 +2102,7 @@ static s8 NewGameBirchSpeech_ProcessGenderMenuInput(void)
static void NewGameBirchSpeech_SetDefaultPlayerName(u8 nameId)
{
- const u8* name;
+ const u8 *name;
u8 i;
if (gSaveBlock2Ptr->playerGender == MALE)
@@ -2114,7 +2114,7 @@ static void NewGameBirchSpeech_SetDefaultPlayerName(u8 nameId)
gSaveBlock2Ptr->playerName[PLAYER_NAME_LENGTH] = EOS;
}
-static void CreateMainMenuErrorWindow(const u8* str)
+static void CreateMainMenuErrorWindow(const u8 *str)
{
FillWindowPixelBuffer(7, PIXEL_FILL(1));
AddTextPrinterParameterized(7, FONT_NORMAL, str, 0, 1, 2, 0);
@@ -2143,7 +2143,7 @@ static void MainMenu_FormatSavegamePlayer(void)
static void MainMenu_FormatSavegameTime(void)
{
u8 str[0x20];
- u8* ptr;
+ u8 *ptr;
StringExpandPlaceholders(gStringVar4, gText_ContinueMenuTime);
AddTextPrinterParameterized3(2, FONT_NORMAL, 0x6C, 17, sTextColor_MenuInfo, TEXT_SKIP_DRAW, gStringVar4);
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
index 9eaa035caf..866072a2c3 100644
--- a/src/map_name_popup.c
+++ b/src/map_name_popup.c
@@ -186,7 +186,7 @@ static const u8 sText_PyramidFloor6[] = _("PYRAMID FLOOR 6");
static const u8 sText_PyramidFloor7[] = _("PYRAMID FLOOR 7");
static const u8 sText_Pyramid[] = _("PYRAMID");
-static const u8 * const sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE + 1] =
+static const u8 *const sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE + 1] =
{
sText_PyramidFloor1,
sText_PyramidFloor2,
@@ -303,7 +303,7 @@ static void ShowMapNamePopUpWindow(void)
u8 mapDisplayHeader[24];
u8 *withoutPrefixPtr;
u8 x;
- const u8* mapDisplayHeaderSource;
+ const u8 *mapDisplayHeaderSource;
if (InBattlePyramid())
{
diff --git a/src/match_call.c b/src/match_call.c
index 8b25d5b44d..4f6a7b9821 100644
--- a/src/match_call.c
+++ b/src/match_call.c
@@ -1183,7 +1183,7 @@ static void StartMatchCall(void)
{
if (!sMatchCallState.triggeredFromScript)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjectEvents();
PlayerFreeze();
StopPlayerAvatar();
@@ -1371,7 +1371,7 @@ static bool32 MatchCall_EndCall(u8 taskId)
ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]);
ScriptMovement_UnfreezeObjectEvents();
UnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
}
return TRUE;
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 2b6c71c8a2..0fb80342f8 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -46,7 +46,7 @@ static const u16 sDefaultBardSongLyrics[BARD_SONG_LENGTH] = {
EC_WORD_DANCE
};
-static const u8 * const sGiddyAdjectives[] = {
+static const u8 *const sGiddyAdjectives[] = {
GiddyText_SoPretty,
GiddyText_SoDarling,
GiddyText_SoRelaxed,
@@ -60,7 +60,7 @@ static const u8 * const sGiddyAdjectives[] = {
// Non-random lines Giddy can say. Not all are strictly
// questions, but most are, and the player will receive
// a Yes/No prompt afterwards regardless.
-static const u8 * const sGiddyQuestions[GIDDY_MAX_QUESTIONS] = {
+static const u8 *const sGiddyQuestions[GIDDY_MAX_QUESTIONS] = {
GiddyText_ISoWantToGoOnAVacation,
GiddyText_IBoughtCrayonsWith120Colors,
GiddyText_WouldntItBeNiceIfWeCouldFloat,
@@ -174,8 +174,8 @@ static void PrepareSongText(void)
{
struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
u16 * lyrics = gSpecialVar_0x8004 == 0 ? bard->songLyrics : bard->temporaryLyrics;
- u8 * wordEnd = gStringVar4;
- u8 * str = wordEnd;
+ u8 *wordEnd = gStringVar4;
+ u8 *str = wordEnd;
u16 lineNum;
// Put three words on each line
@@ -222,7 +222,7 @@ static void PrepareSongText(void)
void PlayBardSong(void)
{
StartBardSong(gSpecialVar_0x8004);
- ScriptContext1_Stop();
+ ScriptContext_Stop();
}
void GetHipsterSpokenFlag(void)
@@ -443,7 +443,7 @@ static void DisableTextPrinters(struct TextPrinterTemplate * printer, u16 render
gDisableTextPrinters = TRUE;
}
-static void DrawSongTextWindow(const u8 * str)
+static void DrawSongTextWindow(const u8 *str)
{
DrawDialogueFrame(0, FALSE);
AddTextPrinterParameterized(0, FONT_NORMAL, str, 0, 1, 1, DisableTextPrinters);
@@ -627,7 +627,7 @@ static void Task_BardSong(u8 taskId)
// End song
FadeInBGM(6);
m4aMPlayFadeOutTemporarily(&gMPlayInfo_SE2, 2);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
else if (gStringVar4[task->tCharIndex] == CHAR_SPACE)
@@ -843,7 +843,7 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language
{
for (i = 0; i < NUM_TRADER_ITEMS; i++)
{
- u8 * str = trader->playerNames[i];
+ u8 *str = trader->playerNames[i];
if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN)
{
StripExtCtrlCodes(str);
@@ -1247,9 +1247,9 @@ static void GetStoryByStattellerPlayerName(u32 player, void *dst)
memcpy(dst, name, PLAYER_NAME_LENGTH);
}
-static void StorytellerSetPlayerName(u32 player, const u8 * src)
+static void StorytellerSetPlayerName(u32 player, const u8 *src)
{
- u8 * name = sStorytellerPtr->trainerNames[player];
+ u8 *name = sStorytellerPtr->trainerNames[player];
memset(name, EOS, PLAYER_NAME_LENGTH);
memcpy(name, src, PLAYER_NAME_LENGTH);
}
@@ -1265,7 +1265,7 @@ static void StorytellerRecordNewStat(u32 player, u32 stat)
sStorytellerPtr->language[player] = gGameLanguage;
}
-static void ScrambleStatList(u8 * arr, s32 count)
+static void ScrambleStatList(u8 *arr, s32 count)
{
s32 i;
@@ -1336,7 +1336,7 @@ static void PrintStoryList(void)
width = curWidth;
}
sStorytellerWindowId = CreateWindowFromRect(0, 0, ConvertPixelWidthToTileWidth(width), GetFreeStorySlot() * 2 + 2);
- SetStandardWindowBorderStyle(sStorytellerWindowId, 0);
+ SetStandardWindowBorderStyle(sStorytellerWindowId, FALSE);
for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
u16 gameStatID = sStorytellerPtr->gameStatIDs[i];
@@ -1375,7 +1375,7 @@ static void Task_StoryListMenu(u8 taskId)
}
ClearToTransparentAndRemoveWindow(sStorytellerWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
break;
}
}
diff --git a/src/menu.c b/src/menu.c
index a5cebac958..4afda8cc89 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -192,19 +192,19 @@ void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress)
{
void (*callback)(struct TextPrinterTemplate *, u16) = NULL;
gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress;
- AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), callback, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), callback, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress)
{
gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress;
- AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonPress, u8 speed)
{
gTextFlags.canABSpeedUpPrint = allowSkippingDelayWithButtonPress;
- AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, speed, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
void LoadMessageBoxAndBorderGfx(void)
@@ -546,7 +546,7 @@ void RemoveMapNamePopUpWindow(void)
void AddTextPrinterWithCallbackForMessage(bool8 canSpeedUp, void (*callback)(struct TextPrinterTemplate *, u16))
{
gTextFlags.canABSpeedUpPrint = canSpeedUp;
- AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), callback, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), callback, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
void EraseFieldMessageBox(bool8 copyToVram)
@@ -2032,14 +2032,14 @@ static void UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u
for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
{
pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 29) >> 27);
- pixelsDst = (void*) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 29) >> 27);
+ pixelsDst = (void *) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 29) >> 27);
if ((uintptr_t)pixelsDst & 1)
{
pixelsDst--;
if (loopDstX & 1)
{
- toOrr = *(vu16*)pixelsDst;
+ toOrr = *(vu16 *)pixelsDst;
toOrr &= 0x0fff;
if (loopSrcX & 1)
toOrr |= ((*pixelsSrc & 0xf0) << 8);
@@ -2048,7 +2048,7 @@ static void UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u
}
else
{
- toOrr = *(vu16*)pixelsDst;
+ toOrr = *(vu16 *)pixelsDst;
toOrr &= 0xf0ff;
if (loopSrcX & 1)
toOrr |= ((*pixelsSrc & 0xf0) << 4);
@@ -2060,7 +2060,7 @@ static void UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u
{
if (loopDstX & 1)
{
- toOrr = *(vu16*)pixelsDst;
+ toOrr = *(vu16 *)pixelsDst;
toOrr &= 0xff0f;
if (loopSrcX & 1)
toOrr |= ((*pixelsSrc & 0xf0) << 0);
@@ -2069,7 +2069,7 @@ static void UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u
}
else
{
- toOrr = *(vu16*)pixelsDst;
+ toOrr = *(vu16 *)pixelsDst;
toOrr &= 0xfff0;
if (loopSrcX & 1)
toOrr |= ((*pixelsSrc & 0xf0) >> 4);
@@ -2077,7 +2077,7 @@ static void UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u
toOrr |= ((*pixelsSrc & 0x0f) >> 0);
}
}
- *(vu16*)pixelsDst = toOrr;
+ *(vu16 *)pixelsDst = toOrr;
}
}
}
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index 7decd695c3..98284ebd3a 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -32,7 +32,7 @@ static const struct OamData sOamData_SwapLine =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -98,9 +98,9 @@ void ResetVramOamAndBgCntRegs(void)
SetGpuReg(REG_OFFSET_BG2CNT, 0);
SetGpuReg(REG_OFFSET_BG1CNT, 0);
SetGpuReg(REG_OFFSET_BG0CNT, 0);
- CpuFill16(0, (void*) VRAM, VRAM_SIZE);
- CpuFill32(0, (void*) OAM, OAM_SIZE);
- CpuFill16(0, (void*) PLTT, PLTT_SIZE);
+ CpuFill16(0, (void *) VRAM, VRAM_SIZE);
+ CpuFill32(0, (void *) OAM, OAM_SIZE);
+ CpuFill16(0, (void *) PLTT, PLTT_SIZE);
}
void ResetAllBgsCoordinates(void)
@@ -130,7 +130,7 @@ void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 palet
StringExpandPlaceholders(gStringVar4, string);
gTextFlags.canABSpeedUpPrint = 1;
- AddTextPrinterParameterized2(windowId, fontId, gStringVar4, textSpeed, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(windowId, fontId, gStringVar4, textSpeed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
sMessageNextTask = taskFunc;
gTasks[taskId].func = Task_ContinueTaskAfterMessagePrints;
}
@@ -277,8 +277,8 @@ u8 GetLRKeysPressedAndHeld(void)
bool8 IsHoldingItemAllowed(u16 itemId)
{
- // Enigma Berry can't be held in link areas
- if (itemId == ITEM_ENIGMA_BERRY
+ // e-Reader Enigma Berry can't be held in link areas
+ if (itemId == ITEM_ENIGMA_BERRY_E_READER
&& ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER))
|| InUnionRoom() == TRUE))
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index cd77f4a59c..42c80b5ee3 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -223,14 +223,14 @@ u8 MailboxMenu_AddWindow(u8 windowIdx)
{
sMailboxWindowIds[windowIdx] = AddWindow(&sWindowTemplates_MailboxMenu[windowIdx]);
}
- SetStandardWindowBorderStyle(sMailboxWindowIds[windowIdx], 0);
+ SetStandardWindowBorderStyle(sMailboxWindowIds[windowIdx], FALSE);
}
return sMailboxWindowIds[windowIdx];
}
void MailboxMenu_RemoveWindow(u8 windowIdx)
{
- ClearStdWindowAndFrameToTransparent(sMailboxWindowIds[windowIdx], 0);
+ ClearStdWindowAndFrameToTransparent(sMailboxWindowIds[windowIdx], FALSE);
ClearWindowTilemap(sMailboxWindowIds[windowIdx]);
RemoveWindow(sMailboxWindowIds[windowIdx]);
sMailboxWindowIds[windowIdx] = WINDOW_NONE;
@@ -716,17 +716,17 @@ void InitMoveRelearnerWindows(bool8 useContextWindow)
if (!useContextWindow)
{
PutWindowTilemap(0);
- DrawStdFrameWithCustomTileAndPalette(0, 0, 0x1, 0xE);
+ DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x1, 0xE);
}
else
{
PutWindowTilemap(1);
- DrawStdFrameWithCustomTileAndPalette(1, 0, 1, 0xE);
+ DrawStdFrameWithCustomTileAndPalette(1, FALSE, 1, 0xE);
}
PutWindowTilemap(2);
PutWindowTilemap(3);
- DrawStdFrameWithCustomTileAndPalette(2, 0, 1, 0xE);
- DrawStdFrameWithCustomTileAndPalette(3, 0, 1, 0xE);
+ DrawStdFrameWithCustomTileAndPalette(2, FALSE, 1, 0xE);
+ DrawStdFrameWithCustomTileAndPalette(3, FALSE, 1, 0xE);
MoveRelearnerDummy();
ScheduleBgCopyTilemapToVram(1);
}
@@ -1124,7 +1124,7 @@ static const struct OamData sOam_ConditionMonPic =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -1141,7 +1141,7 @@ static const struct OamData sOam_ConditionSelectionIcon =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
diff --git a/src/minigame_countdown.c b/src/minigame_countdown.c
index 4c72136d4c..5aaed0cb23 100644
--- a/src/minigame_countdown.c
+++ b/src/minigame_countdown.c
@@ -618,7 +618,7 @@ static const struct OamData sOamData_Numbers =
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -635,7 +635,7 @@ static const struct OamData sOamData_Start =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
diff --git a/src/mirage_tower.c b/src/mirage_tower.c
index 7300262988..69c2e81540 100644
--- a/src/mirage_tower.c
+++ b/src/mirage_tower.c
@@ -67,12 +67,12 @@ static void IncrementCeilingCrumbleFinishedCount(void);
static void WaitCeilingCrumble(u8);
static void FinishCeilingCrumbleTask(u8);
static void CreateCeilingCrumbleSprites(void);
-static void SpriteCB_CeilingCrumble(struct Sprite*);
+static void SpriteCB_CeilingCrumble(struct Sprite *);
static void DoMirageTowerDisintegration(u8);
static void InitMirageTowerShake(u8);
static void Task_FossilFallAndSink(u8);
static void SpriteCB_FallingFossil(struct Sprite *);
-static void UpdateDisintegrationEffect(u8*, u16, u8, u8, u8);
+static void UpdateDisintegrationEffect(u8 *, u16, u8, u8, u8);
static const u8 sBlankTile_Gfx[32] = {0};
static const u8 sMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp");
@@ -133,7 +133,7 @@ static const struct OamData sOamData_FallingFossil =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -189,7 +189,7 @@ static const struct OamData sOamData_CeilingCrumbleSmall =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -227,7 +227,7 @@ static const struct OamData sOamData_CeilingCrumbleLarge =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -249,8 +249,8 @@ static const struct SpriteTemplate sSpriteTemplate_CeilingCrumbleLarge = {
.callback = SpriteCB_CeilingCrumble
};
-EWRAM_DATA static u8* sMirageTowerGfxBuffer = NULL;
-EWRAM_DATA static u8* sMirageTowerTilemapBuffer = NULL;
+EWRAM_DATA static u8 *sMirageTowerGfxBuffer = NULL;
+EWRAM_DATA static u8 *sMirageTowerTilemapBuffer = NULL;
EWRAM_DATA static struct FallAnim_Fossil *sFallingFossil = NULL;
EWRAM_DATA static struct FallAnim_Tower *sFallingTower = NULL;
EWRAM_DATA static struct BgRegOffsets *sBgShakeOffsets = NULL;
@@ -361,7 +361,7 @@ static void PlayerDescendMirageTower(u8 taskId)
(gSprites[player->spriteId].y + gSprites[player->spriteId].y2))
{
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
}
@@ -439,7 +439,7 @@ static void FinishCeilingCrumbleTask(u8 taskId)
{
FreeSpriteTilesByTag(TAG_CEILING_CRUMBLE);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
static void CreateCeilingCrumbleSprites(void)
@@ -463,7 +463,7 @@ static void CreateCeilingCrumbleSprites(void)
}
}
-static void SpriteCB_CeilingCrumble(struct Sprite* sprite)
+static void SpriteCB_CeilingCrumble(struct Sprite *sprite)
{
sprite->data[1] += 2;
sprite->y2 = sprite->data[1] / 2;
@@ -565,7 +565,7 @@ static void InitMirageTowerShake(u8 taskId)
sBgShakeOffsets->bgVOFS = zero;
CreateTask(UpdateBgShake, 10);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
break;
}
}
@@ -654,7 +654,7 @@ static void DoMirageTowerDisintegration(u8 taskId)
break;
case 8:
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
break;
}
gTasks[taskId].tState++;
@@ -719,7 +719,7 @@ static void Task_FossilFallAndSink(u8 taskId)
FREE_AND_SET_NULL(sFallingFossil);
break;
case 8:
- EnableBothScriptContexts();
+ ScriptContext_Enable();
break;
}
gTasks[taskId].tState++;
@@ -748,7 +748,7 @@ static void SpriteCB_FallingFossil(struct Sprite *sprite)
}
}
-static void UpdateDisintegrationEffect(u8* tiles, u16 randId, u8 c, u8 size, u8 offset)
+static void UpdateDisintegrationEffect(u8 *tiles, u16 randId, u8 c, u8 size, u8 offset)
{
u8 heightTiles, height, widthTiles, width;
u16 var, baseOffset;
diff --git a/src/mon_markings.c b/src/mon_markings.c
index 1e03179e94..d7a61c27e7 100644
--- a/src/mon_markings.c
+++ b/src/mon_markings.c
@@ -30,7 +30,7 @@ static const struct OamData sOamData_MenuWindow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -48,7 +48,7 @@ static const struct OamData sOamData_8x8 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -157,7 +157,7 @@ static const struct OamData sOamData_MarkingCombo =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
@@ -396,20 +396,16 @@ bool8 HandleMonMarkingsMenuInput(void)
if (JOY_NEW(DPAD_UP))
{
- s8 pos;
PlaySE(SE_SELECT);
- pos = --sMenu->cursorPos;
- if (pos < 0)
+ if (--sMenu->cursorPos < 0)
sMenu->cursorPos = SELECTION_CANCEL;
return TRUE;
}
if (JOY_NEW(DPAD_DOWN))
{
- s8 pos;
PlaySE(SE_SELECT);
- pos = ++sMenu->cursorPos;
- if (pos > SELECTION_CANCEL)
+ if (++sMenu->cursorPos > SELECTION_CANCEL)
sMenu->cursorPos = 0;
return TRUE;
}
@@ -495,7 +491,6 @@ static void CreateMonMarkingsMenuSprites(s16 x, s16 y, u16 baseTileTag, u16 base
}
sMenu->windowSprites[1]->y = y + 96;
-
// Create marking sprites
template.tileTag++;
template.paletteTag++;
@@ -548,7 +543,6 @@ static void CreateMonMarkingsMenuSprites(s16 x, s16 y, u16 baseTileTag, u16 base
{
sMenu->cursorSprite = NULL;
}
-
}
static void SpriteCB_Dummy(struct Sprite *sprite)
@@ -610,7 +604,7 @@ static struct Sprite *CreateMarkingComboSprite(u16 tileTag, u16 paletteTag, cons
spriteId = CreateSprite(&template, 0, 0, 0);
if (spriteId != MAX_SPRITES)
- return &gSprites[spriteId];
+ return &gSprites[spriteId];
else
return NULL;
}
diff --git a/src/money.c b/src/money.c
index 5723974a83..88e1fea640 100644
--- a/src/money.c
+++ b/src/money.c
@@ -22,7 +22,7 @@ static const struct OamData sOamData_MoneyLabel =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
@@ -69,17 +69,17 @@ static const struct CompressedSpritePalette sSpritePalette_MoneyLabel =
.tag = MONEY_LABEL_TAG
};
-u32 GetMoney(u32* moneyPtr)
+u32 GetMoney(u32 *moneyPtr)
{
return *moneyPtr ^ gSaveBlock2Ptr->encryptionKey;
}
-void SetMoney(u32* moneyPtr, u32 newValue)
+void SetMoney(u32 *moneyPtr, u32 newValue)
{
*moneyPtr = gSaveBlock2Ptr->encryptionKey ^ newValue;
}
-bool8 IsEnoughMoney(u32* moneyPtr, u32 cost)
+bool8 IsEnoughMoney(u32 *moneyPtr, u32 cost)
{
if (GetMoney(moneyPtr) >= cost)
return TRUE;
@@ -87,7 +87,7 @@ bool8 IsEnoughMoney(u32* moneyPtr, u32 cost)
return FALSE;
}
-void AddMoney(u32* moneyPtr, u32 toAdd)
+void AddMoney(u32 *moneyPtr, u32 toAdd)
{
u32 toSet = GetMoney(moneyPtr);
@@ -107,7 +107,7 @@ void AddMoney(u32* moneyPtr, u32 toAdd)
SetMoney(moneyPtr, toSet);
}
-void RemoveMoney(u32* moneyPtr, u32 toSub)
+void RemoveMoney(u32 *moneyPtr, u32 toSub)
{
u32 toSet = GetMoney(moneyPtr);
diff --git a/src/move_relearner.c b/src/move_relearner.c
index 2b925135f0..d9c943b576 100644
--- a/src/move_relearner.c
+++ b/src/move_relearner.c
@@ -185,7 +185,7 @@ static const struct OamData sHeartSpriteOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -202,7 +202,7 @@ static const struct OamData sUnusedOam1 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x16),
.x = 0,
@@ -219,7 +219,7 @@ static const struct OamData sUnusedOam2 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x8),
.x = 0,
@@ -365,7 +365,7 @@ static void VBlankCB_MoveRelearner(void)
// Script arguments: The pokemon to teach is in VAR_0x8004
void TeachMoveRelearnerMove(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
CreateTask(Task_WaitForFadeOut, 10);
// Fade to black
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index 0007664ba1..c35fe8ed80 100644
--- a/src/mystery_event_menu.c
+++ b/src/mystery_event_menu.c
@@ -102,7 +102,7 @@ void CB2_InitMysteryEventMenu(void)
BuildOamBuffer();
RunTextPrinters();
UpdatePaletteFade();
- FillPalette(0, 0, 2);
+ FillPalette(RGB_BLACK, 0, 2);
SetMainCallback2(CB2_MysteryEventMenu);
}
}
@@ -131,7 +131,7 @@ static void CB2_MysteryEventMenu(void)
switch (gMain.state)
{
case 0:
- DrawStdFrameWithCustomTileAndPalette(0, 1, 1, 0xD);
+ DrawStdFrameWithCustomTileAndPalette(0, TRUE, 1, 0xD);
PutWindowTilemap(0);
CopyWindowToVram(0, COPYWIN_FULL);
ShowBg(0);
@@ -178,7 +178,7 @@ static void CB2_MysteryEventMenu(void)
{
PlaySE(SE_SELECT);
CheckShouldAdvanceLinkState();
- DrawStdFrameWithCustomTileAndPalette(1, 1, 1, 0xD);
+ DrawStdFrameWithCustomTileAndPalette(1, TRUE, 1, 0xD);
PrintMysteryMenuText(1, gText_LoadingEvent, 1, 2, 0);
PutWindowTilemap(1);
CopyWindowToVram(1, COPYWIN_FULL);
diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c
index e0f789bcbd..d1b514a173 100644
--- a/src/mystery_event_script.c
+++ b/src/mystery_event_script.c
@@ -104,7 +104,7 @@ static int CalcRecordMixingGiftChecksum(void)
{
unsigned int i;
int sum = 0;
- u8 *data = (u8*)(&gSaveBlock1Ptr->recordMixingGift.data);
+ u8 *data = (u8 *)(&gSaveBlock1Ptr->recordMixingGift.data);
for (i = 0; i < sizeof(gSaveBlock1Ptr->recordMixingGift.data); i++)
sum += data[i];
@@ -220,7 +220,7 @@ bool8 MEScrCmd_setmsg(struct ScriptContext *ctx)
bool8 MEScrCmd_runscript(struct ScriptContext *ctx)
{
u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->mOffset + ctx->mScriptBase);
- ScriptContext2_RunNewScript(script);
+ RunScriptImmediately(script);
return FALSE;
}
diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c
index b970711fd3..62f12a5cfc 100644
--- a/src/mystery_gift_menu.c
+++ b/src/mystery_gift_menu.c
@@ -58,7 +58,7 @@ struct MysteryGiftTaskData
bool8 isWonderNews;
bool8 sourceIsFriend;
u8 msgId;
- u8 * clientMsg;
+ u8 *clientMsg;
};
static const struct BgTemplate sBGTemplates[] = {
@@ -476,8 +476,8 @@ void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void)
void PrintMysteryGiftOrEReaderTopMenu(bool8 isEReader, bool32 useCancel)
{
- const u8 * header;
- const u8 * options;
+ const u8 *header;
+ const u8 *options;
FillWindowPixelBuffer(0, 0);
if (!isEReader)
{
@@ -589,7 +589,7 @@ static void ShowDownArrow(void)
}
// Unused
-static bool32 HideDownArrowAndWaitButton(u8 * textState)
+static bool32 HideDownArrowAndWaitButton(u8 *textState)
{
switch (*textState)
{
@@ -606,7 +606,7 @@ static bool32 HideDownArrowAndWaitButton(u8 * textState)
return FALSE;
}
-static bool32 PrintStringAndWait2Seconds(u8 * counter, const u8 * str)
+static bool32 PrintStringAndWait2Seconds(u8 *counter, const u8 *str)
{
if (*counter == 0)
AddTextPrinterToWindow1(str);
@@ -623,7 +623,7 @@ static bool32 PrintStringAndWait2Seconds(u8 * counter, const u8 * str)
}
}
-static u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu)
+static u32 MysteryGift_HandleThreeOptionMenu(u8 *unused0, u16 * unused1, u8 whichMenu)
{
struct ListMenuTemplate listMenuTemplate = sListMenuTemplate_ThreeOptions;
struct WindowTemplate windowTemplate = sWindowTemplate_ThreeOptions;
@@ -654,7 +654,7 @@ static u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whi
return response;
}
-s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str)
+s8 DoMysteryGiftYesNo(u8 *textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 *str)
{
struct WindowTemplate windowTemplate;
s8 input;
@@ -711,7 +711,7 @@ s8 DoMysteryGiftYesNo(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, c
}
// Handle the "Receive/Send/Toss" menu that appears when selecting Wonder Card/News
-static s32 HandleGiftSelectMenu(u8 * textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend)
+static s32 HandleGiftSelectMenu(u8 *textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend)
{
struct WindowTemplate windowTemplate;
s32 input;
@@ -778,7 +778,7 @@ static bool32 ValidateCardOrNews(bool32 isWonderNews)
return ValidateSavedWonderNews();
}
-static bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 isWonderNews)
+static bool32 HandleLoadWonderCardOrNews(u8 *state, bool32 isWonderNews)
{
switch (*state)
{
@@ -844,7 +844,7 @@ static bool32 ExitWonderCardOrNews(bool32 isWonderNews, bool32 useCancel)
}
}
-static s32 AskDiscardGift(u8 * textState, u16 * windowId, bool32 isWonderNews)
+static s32 AskDiscardGift(u8 *textState, u16 * windowId, bool32 isWonderNews)
{
if (!isWonderNews)
return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen);
@@ -852,7 +852,7 @@ static s32 AskDiscardGift(u8 * textState, u16 * windowId, bool32 isWonderNews)
return DoMysteryGiftYesNo(textState, windowId, TRUE, gText_OkayToDiscardNews);
}
-static bool32 PrintThrownAway(u8 * textState, bool32 isWonderNews)
+static bool32 PrintThrownAway(u8 *textState, bool32 isWonderNews)
{
if (!isWonderNews)
return PrintMysteryGiftMenuMessage(textState, gText_WonderCardThrownAway);
@@ -860,7 +860,7 @@ static bool32 PrintThrownAway(u8 * textState, bool32 isWonderNews)
return PrintMysteryGiftMenuMessage(textState, gText_WonderNewsThrownAway);
}
-static bool32 SaveOnMysteryGiftMenu(u8 * state)
+static bool32 SaveOnMysteryGiftMenu(u8 *state)
{
switch (*state)
{
@@ -889,9 +889,9 @@ static bool32 SaveOnMysteryGiftMenu(u8 * state)
return FALSE;
}
-static const u8 * GetClientResultMessage(bool32 * successMsg, bool8 isWonderNews, bool8 sourceIsFriend, u32 msgId)
+static const u8 *GetClientResultMessage(bool32 * successMsg, bool8 isWonderNews, bool8 sourceIsFriend, u32 msgId)
{
- const u8 * msg = NULL;
+ const u8 *msg = NULL;
*successMsg = FALSE;
switch (msgId)
@@ -961,7 +961,7 @@ static const u8 * GetClientResultMessage(bool32 * successMsg, bool8 isWonderNews
return msg;
}
-static bool32 PrintSuccessMessage(u8 * state, const u8 * msg, u16 * timer)
+static bool32 PrintSuccessMessage(u8 *state, const u8 *msg, u16 * timer)
{
switch (*state)
{
@@ -988,9 +988,9 @@ static bool32 PrintSuccessMessage(u8 * state, const u8 * msg, u16 * timer)
return FALSE;
}
-static const u8 * GetServerResultMessage(bool32 * wonderSuccess, bool8 sourceIsFriend, u32 msgId)
+static const u8 *GetServerResultMessage(bool32 * wonderSuccess, bool8 sourceIsFriend, u32 msgId)
{
- const u8 * result = gText_CommunicationError;
+ const u8 *result = gText_CommunicationError;
*wonderSuccess = FALSE;
switch (msgId)
{
@@ -1045,10 +1045,10 @@ static const u8 * GetServerResultMessage(bool32 * wonderSuccess, bool8 sourceIsF
return result;
}
-static bool32 PrintServerResultMessage(u8 * state, u16 * timer, bool8 sourceIsFriend, u32 msgId)
+static bool32 PrintServerResultMessage(u8 *state, u16 * timer, bool8 sourceIsFriend, u32 msgId)
{
bool32 wonderSuccess;
- const u8 * str = GetServerResultMessage(&wonderSuccess, sourceIsFriend, msgId);
+ const u8 *str = GetServerResultMessage(&wonderSuccess, sourceIsFriend, msgId);
if (wonderSuccess)
return PrintSuccessMessage(state, str, timer);
else
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 6badae8d7a..a6e55eed60 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -26,6 +26,7 @@
#include "text_window.h"
#include "overworld.h"
#include "walda_phrase.h"
+#include "main.h"
#include "constants/event_objects.h"
#include "constants/rgb.h"
@@ -61,10 +62,10 @@ enum {
};
enum {
- PALTAG_PC_ICON,
+ PALTAG_MENU, // Also the PC icon
PALTAG_PAGE_SWAP_UPPER,
PALTAG_PAGE_SWAP_LOWER,
- PALTAG_PAGE_SWAP_OTHERS,
+ PALTAG_PAGE_SWAP_OTHERS, // Also the input arrow/underscore
PALTAG_PAGE_SWAP,
PALTAG_CURSOR,
PALTAG_BACK_BUTTON,
@@ -180,21 +181,11 @@ struct NamingScreenData
};
EWRAM_DATA static struct NamingScreenData *sNamingScreen = NULL;
-extern u16 gKeyRepeatStartDelay;
-// extern text
-extern const u8 gText_MoveOkBack[];
-extern const u8 gText_YourName[];
-extern const u8 gText_BoxName[];
-extern const u8 gText_PkmnsNickname[];
-extern const u8 gText_TellHimTheWords[];
-
-
-// start of .rodata
-static const u8 sPCIconOff_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/off.4bpp");
-static const u8 sPCIconOn_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon/on.4bpp");
+static const u8 sPCIconOff_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon_off.4bpp");
+static const u8 sPCIconOn_Gfx[] = INCBIN_U8("graphics/naming_screen/pc_icon_on.4bpp");
static const u16 sKeyboard_Pal[] = INCBIN_U16("graphics/naming_screen/keyboard.gbapal");
-static const u16 sUnused_Pal[] = INCBIN_U16("graphics/naming_screen/unused.gbapal");
+static const u16 sRival_Pal[] = INCBIN_U16("graphics/naming_screen/rival.gbapal"); // Unused, leftover from FRLG rival
static const u8 *const sTransferredToPCMessages[] =
{
@@ -312,13 +303,12 @@ static const u8 sPageColumnCounts[KBPAGE_COUNT] = {
[KEYBOARD_LETTERS_UPPER] = KBCOL_COUNT,
[KEYBOARD_SYMBOLS] = 6
};
-static const u8 sPageColumnXPos[KBPAGE_COUNT * KBCOL_COUNT] = {
- 0, 12, 24, 56, 68, 80, 92, 123, // KEYBOARD_LETTERS_LOWER
- 0, 12, 24, 56, 68, 80, 92, 123, // KEYBOARD_LETTERS_UPPER
- 0, 22, 44, 66, 88, 110 // KEYBOARD_SYMBOLS
+static const u8 sPageColumnXPos[KBPAGE_COUNT][KBCOL_COUNT] = {
+ [KEYBOARD_LETTERS_LOWER] = {0, 12, 24, 56, 68, 80, 92, 123},
+ [KEYBOARD_LETTERS_UPPER] = {0, 12, 24, 56, 68, 80, 92, 123},
+ [KEYBOARD_SYMBOLS] = {0, 22, 44, 66, 88, 110}
};
-// forward declarations
static const struct NamingScreenTemplate *const sNamingScreenTemplates[];
static const struct SubspriteTable sSubspriteTable_PageSwapFrame[];
static const struct SubspriteTable sSubspriteTable_PageSwapText[];
@@ -333,7 +323,7 @@ static const struct SpriteTemplate sSpriteTemplate_Cursor;
static const struct SpriteTemplate sSpriteTemplate_InputArrow;
static const struct SpriteTemplate sSpriteTemplate_Underscore;
static const struct SpriteTemplate sSpriteTemplate_PCIcon;
-static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT];
+static const u8 *const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT];
static const struct SpriteSheet sSpriteSheets[];
static const struct SpritePalette sSpritePalettes[];
@@ -738,9 +728,9 @@ static void DisplaySentToPCMessage(void)
stringToDisplay++;
StringExpandPlaceholders(gStringVar4, sTransferredToPCMessages[stringToDisplay]);
- DrawDialogueFrame(0, 0);
+ DrawDialogueFrame(0, FALSE);
gTextFlags.canABSpeedUpPrint = TRUE;
- AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), 0, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
CopyWindowToVram(0, COPYWIN_FULL);
}
@@ -1142,7 +1132,7 @@ static void SetCursorPos(s16 x, s16 y)
struct Sprite *cursorSprite = &gSprites[sNamingScreen->cursorSpriteId];
if (x < sPageColumnCounts[CurrentPageToKeyboardId()])
- cursorSprite->x = sPageColumnXPos[x + CurrentPageToKeyboardId() * KBCOL_COUNT] + 38;
+ cursorSprite->x = sPageColumnXPos[CurrentPageToKeyboardId()][x] + 38;
else
cursorSprite->x = 0;
@@ -1890,7 +1880,7 @@ static void CreateHelperTasks(void)
static void LoadPalettes(void)
{
- LoadPalette(gNamingScreenMenu_Pal, 0, 0xC0);
+ LoadPalette(gNamingScreenMenu_Pal, 0, sizeof(gNamingScreenMenu_Pal));
LoadPalette(sKeyboard_Pal, 0xA0, sizeof(sKeyboard_Pal));
LoadPalette(GetTextWindowPalette(2), 0xB0, 0x20);
}
@@ -2512,7 +2502,7 @@ static const struct SpriteTemplate sSpriteTemplate_Underscore =
static const struct SpriteTemplate sSpriteTemplate_PCIcon =
{
.tileTag = TAG_NONE,
- .paletteTag = PALTAG_PC_ICON,
+ .paletteTag = PALTAG_MENU,
.oam = &sOam_8x8,
.anims = sAnims_PCIcon,
.images = sImageTable_PCIcon,
@@ -2520,7 +2510,7 @@ static const struct SpriteTemplate sSpriteTemplate_PCIcon =
.callback = SpriteCallbackDummy
};
-static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] =
+static const u8 *const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] =
{
[KEYBOARD_LETTERS_LOWER] =
{
@@ -2547,31 +2537,31 @@ static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] =
static const struct SpriteSheet sSpriteSheets[] =
{
- {gNamingScreenRWindow_Gfx + 0x280, 0x1E0, GFXTAG_BACK_BUTTON},
- {gNamingScreenRWindow_Gfx + 0x460, 0x1E0, GFXTAG_OK_BUTTON},
- {gNamingScreenRWindow_Gfx, 0x280, GFXTAG_PAGE_SWAP_FRAME},
- {gNamingScreenPageButton_Gfx + 0x20, 0x100, GFXTAG_PAGE_SWAP_BUTTON},
- {gNamingScreenROptions_Gfx, 0x060, GFXTAG_PAGE_SWAP_UPPER},
- {gNamingScreenROptions_Gfx + 0xA0, 0x060, GFXTAG_PAGE_SWAP_LOWER},
- {gNamingScreenROptions_Gfx + 0x140, 0x060, GFXTAG_PAGE_SWAP_OTHERS},
- {gNamingScreenCursor_Gfx, 0x080, GFXTAG_CURSOR},
- {gNamingScreenCursor_Gfx + 0xA0, 0x080, GFXTAG_CURSOR_SQUISHED},
- {gNamingScreenCursor_Gfx + 0x140, 0x080, GFXTAG_CURSOR_FILLED},
- {gNamingScreenInputArrow_Gfx, 0x020, GFXTAG_INPUT_ARROW},
- {gNamingScreenUnderscore_Gfx, 0x020, GFXTAG_UNDERSCORE},
+ {gNamingScreenBackButton_Gfx, 0x1E0, GFXTAG_BACK_BUTTON},
+ {gNamingScreenOKButton_Gfx, 0x1E0, GFXTAG_OK_BUTTON},
+ {gNamingScreenPageSwapFrame_Gfx, 0x280, GFXTAG_PAGE_SWAP_FRAME},
+ {gNamingScreenPageSwapButton_Gfx, 0x100, GFXTAG_PAGE_SWAP_BUTTON},
+ {gNamingScreenPageSwapUpper_Gfx, 0x060, GFXTAG_PAGE_SWAP_UPPER},
+ {gNamingScreenPageSwapLower_Gfx, 0x060, GFXTAG_PAGE_SWAP_LOWER},
+ {gNamingScreenPageSwapOthers_Gfx, 0x060, GFXTAG_PAGE_SWAP_OTHERS},
+ {gNamingScreenCursor_Gfx, 0x080, GFXTAG_CURSOR},
+ {gNamingScreenCursorSquished_Gfx, 0x080, GFXTAG_CURSOR_SQUISHED},
+ {gNamingScreenCursorFilled_Gfx, 0x080, GFXTAG_CURSOR_FILLED},
+ {gNamingScreenInputArrow_Gfx, 0x020, GFXTAG_INPUT_ARROW},
+ {gNamingScreenUnderscore_Gfx, 0x020, GFXTAG_UNDERSCORE},
{}
};
static const struct SpritePalette sSpritePalettes[] =
{
- {gNamingScreenMenu_Pal, PALTAG_PC_ICON},
- {gNamingScreenMenu_Pal + 0x10, PALTAG_PAGE_SWAP_UPPER},
- {gNamingScreenMenu_Pal + 0x20, PALTAG_PAGE_SWAP_LOWER},
- {gNamingScreenMenu_Pal + 0x30, PALTAG_PAGE_SWAP_OTHERS},
- {gNamingScreenMenu_Pal + 0x40, PALTAG_PAGE_SWAP},
- {gNamingScreenMenu_Pal + 0x50, PALTAG_CURSOR},
- {gNamingScreenMenu_Pal + 0x40, PALTAG_BACK_BUTTON},
- {gNamingScreenMenu_Pal + 0x40, PALTAG_OK_BUTTON},
+ {gNamingScreenMenu_Pal[0], PALTAG_MENU},
+ {gNamingScreenMenu_Pal[1], PALTAG_PAGE_SWAP_UPPER},
+ {gNamingScreenMenu_Pal[2], PALTAG_PAGE_SWAP_LOWER},
+ {gNamingScreenMenu_Pal[3], PALTAG_PAGE_SWAP_OTHERS},
+ {gNamingScreenMenu_Pal[4], PALTAG_PAGE_SWAP},
+ {gNamingScreenMenu_Pal[5], PALTAG_CURSOR},
+ {gNamingScreenMenu_Pal[4], PALTAG_BACK_BUTTON},
+ {gNamingScreenMenu_Pal[4], PALTAG_OK_BUTTON},
{}
};
diff --git a/src/new_game.c b/src/new_game.c
index 64bc950ee0..8f8aa9b82b 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -44,6 +44,7 @@
#include "berry_powder.h"
#include "mystery_gift.h"
#include "union_room_chat.h"
+#include "constants/items.h"
extern const u8 EventScript_ResetAllMapFlags[];
@@ -192,7 +193,7 @@ void NewGameInitData(void)
ResetFanClub();
ResetLotteryCorner();
WarpToTruck();
- ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
+ RunScriptImmediately(EventScript_ResetAllMapFlags);
ResetMiniGamesRecords();
InitUnionRoomChatRegisteredTexts();
InitLilycoveLady();
diff --git a/src/option_menu.c b/src/option_menu.c
index 2991913d78..3ca9857e84 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -167,7 +167,7 @@ void CB2_InitOptionMenu(void)
gMain.state++;
break;
case 1:
- DmaClearLarge16(3, (void*)(VRAM), VRAM_SIZE, 0x1000);
+ DmaClearLarge16(3, (void *)(VRAM), VRAM_SIZE, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
SetGpuReg(REG_OFFSET_DISPCNT, 0);
diff --git a/src/overworld.c b/src/overworld.c
index a2b6a6433d..5bf7262dcb 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -127,9 +127,9 @@ static void CreateLinkPlayerSprites(void);
static void ClearAllPlayerKeys(void);
static void ResetAllPlayerLinkStates(void);
static void UpdateHeldKeyCode(u16);
-static void UpdateAllLinkPlayers(u16*, s32);
+static void UpdateAllLinkPlayers(u16 *, s32);
static u8 FlipVerticalAndClearForced(u8, u8);
-static u8 LinkPlayerDetectCollision(u8, u8, s16, s16);
+static u8 LinkPlayerGetCollision(u8, u8, s16, s16);
static void CreateLinkPlayerSprite(u8, u8);
static void GetLinkPlayerCoords(u8, u16 *, u16 *);
static u8 GetLinkPlayerFacingDirection(u8);
@@ -360,8 +360,10 @@ static void (*const sMovementStatusHandler[])(struct LinkPlayerObjectEvent *, st
// code
void DoWhiteOut(void)
{
- ScriptContext2_RunNewScript(EventScript_WhiteOut);
+ RunScriptImmediately(EventScript_WhiteOut);
+ #if B_WHITEOUT_MONEY == GEN_3
SetMoney(&gSaveBlock1Ptr->money, GetMoney(&gSaveBlock1Ptr->money) / 2);
+ #endif
HealPlayerParty();
Overworld_ResetStateAfterWhiteOut();
SetWarpDestinationToLastHealLocation();
@@ -386,7 +388,7 @@ void Overworld_ResetStateAfterTeleport(void)
FlagClear(FLAG_SYS_SAFARI_MODE);
FlagClear(FLAG_SYS_USE_STRENGTH);
FlagClear(FLAG_SYS_USE_FLASH);
- ScriptContext2_RunNewScript(EventScript_ResetMrBriney);
+ RunScriptImmediately(EventScript_ResetMrBriney);
}
void Overworld_ResetStateAfterDigEscRope(void)
@@ -407,6 +409,9 @@ static void Overworld_ResetStateAfterWhiteOut(void)
FlagClear(FLAG_SYS_SAFARI_MODE);
FlagClear(FLAG_SYS_USE_STRENGTH);
FlagClear(FLAG_SYS_USE_FLASH);
+ #if VAR_TERRAIN != 0
+ VarSet(VAR_TERRAIN, 0);
+ #endif
// If you were defeated by Kyogre/Groudon and the step counter has
// maxed out, end the abnormal weather.
if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1)
@@ -1432,11 +1437,11 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
UpdatePlayerAvatarTransitionState();
FieldClearPlayerInput(&inputStruct);
FieldGetPlayerInput(&inputStruct, newKeys, heldKeys);
- if (!ScriptContext2_IsEnabled())
+ if (!ArePlayerFieldControlsLocked())
{
if (ProcessPlayerFieldInput(&inputStruct) == 1)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
HideMapNamePopUpWindow();
}
else
@@ -1454,7 +1459,7 @@ void CB1_Overworld(void)
static void OverworldBasic(void)
{
- ScriptContext2_RunScript();
+ ScriptContext_RunScript();
RunTasks();
AnimateSprites();
CameraUpdate();
@@ -1527,8 +1532,8 @@ void CB2_NewGame(void)
NewGameInitData();
ResetInitialPlayerAvatarState();
PlayTimeCounter_Start();
- ScriptContext1_Init();
- ScriptContext2_Disable();
+ ScriptContext_Init();
+ UnlockPlayerFieldControls();
gFieldCallback = ExecuteTruckSequence;
gFieldCallback2 = NULL;
DoMapLoadLoop(&gMain.state);
@@ -1548,8 +1553,8 @@ void CB2_WhiteOut(void)
ResetSafariZoneFlag_();
DoWhiteOut();
ResetInitialPlayerAvatarState();
- ScriptContext1_Init();
- ScriptContext2_Disable();
+ ScriptContext_Init();
+ UnlockPlayerFieldControls();
gFieldCallback = FieldCB_WarpExitFadeFromBlack;
state = 0;
DoMapLoadLoop(&state);
@@ -1562,8 +1567,8 @@ void CB2_WhiteOut(void)
void CB2_LoadMap(void)
{
FieldClearVBlankHBlankCallbacks();
- ScriptContext1_Init();
- ScriptContext2_Disable();
+ ScriptContext_Init();
+ UnlockPlayerFieldControls();
SetMainCallback1(NULL);
SetMainCallback2(CB2_DoChangeMap);
gMain.savedCallback = CB2_LoadMap2;
@@ -1582,8 +1587,8 @@ void CB2_ReturnToFieldContestHall(void)
if (!gMain.state)
{
FieldClearVBlankHBlankCallbacks();
- ScriptContext1_Init();
- ScriptContext2_Disable();
+ ScriptContext_Init();
+ UnlockPlayerFieldControls();
SetMainCallback1(NULL);
}
if (LoadMapInStepsLocal(&gMain.state, TRUE))
@@ -1652,8 +1657,8 @@ void CB2_ReturnToFieldFromMultiplayer(void)
else
gFieldCallback = FieldCB_ReturnToFieldCableLink;
- ScriptContext1_Init();
- ScriptContext2_Disable();
+ ScriptContext_Init();
+ UnlockPlayerFieldControls();
CB2_ReturnToField();
}
@@ -1723,8 +1728,8 @@ void CB2_ContinueSavedGame(void)
InitMapFromSavedGame();
PlayTimeCounter_Start();
- ScriptContext1_Init();
- ScriptContext2_Disable();
+ ScriptContext_Init();
+ UnlockPlayerFieldControls();
InitMatchCallCounters();
if (UseContinueGameWarp() == TRUE)
{
@@ -1803,8 +1808,8 @@ static bool32 LoadMapInStepsLink(u8 *state)
{
case 0:
InitOverworldBgs();
- ScriptContext1_Init();
- ScriptContext2_Disable();
+ ScriptContext_Init();
+ UnlockPlayerFieldControls();
ResetMirageTowerAndSaveBlockPtrs();
ResetScreenForMapLoad();
(*state)++;
@@ -2505,7 +2510,7 @@ static void ResetPlayerHeldKeys(u16 *keys)
static u16 KeyInterCB_SelfIdle(u32 key)
{
- if (ScriptContext2_IsEnabled() == TRUE)
+ if (ArePlayerFieldControlsLocked() == TRUE)
return LINK_KEY_CODE_EMPTY;
if (GetLinkRecvQueueLength() > 4)
return LINK_KEY_CODE_HANDLE_RECV_QUEUE;
@@ -2525,7 +2530,7 @@ static u16 KeyInterCB_Idle(u32 key)
static u16 KeyInterCB_DeferToEventScript(u32 key)
{
u16 retVal;
- if (ScriptContext2_IsEnabled() == TRUE)
+ if (ArePlayerFieldControlsLocked() == TRUE)
{
retVal = LINK_KEY_CODE_EMPTY;
}
@@ -2548,7 +2553,7 @@ static u16 KeyInterCB_DeferToRecvQueue(u32 key)
else
{
retVal = LINK_KEY_CODE_IDLE;
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
SetKeyInterceptCallback(KeyInterCB_Idle);
}
return retVal;
@@ -2565,7 +2570,7 @@ static u16 KeyInterCB_DeferToSendQueue(u32 key)
else
{
retVal = LINK_KEY_CODE_IDLE;
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
SetKeyInterceptCallback(KeyInterCB_Idle);
}
return retVal;
@@ -2618,7 +2623,7 @@ static u16 KeyInterCB_WaitForPlayersToExit(u32 keyOrPlayerId)
CheckRfuKeepAliveTimer();
if (AreAllPlayersInLinkState(PLAYER_LINK_STATE_EXITING_ROOM) == TRUE)
{
- ScriptContext1_SetupScript(EventScript_DoLinkRoomExit);
+ ScriptContext_SetupScript(EventScript_DoLinkRoomExit);
SetKeyInterceptCallback(KeyInterCB_SendNothing);
}
return LINK_KEY_CODE_EMPTY;
@@ -2797,41 +2802,41 @@ static u16 GetDirectionForEventScript(const u8 *script)
static void InitLinkPlayerQueueScript(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
static void InitLinkRoomStartMenuScript(void)
{
PlaySE(SE_WIN_OPEN);
ShowStartMenu();
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
static void RunInteractLocalPlayerScript(const u8 *script)
{
PlaySE(SE_SELECT);
- ScriptContext1_SetupScript(script);
- ScriptContext2_Enable();
+ ScriptContext_SetupScript(script);
+ LockPlayerFieldControls();
}
static void RunConfirmLeaveCableClubScript(void)
{
PlaySE(SE_WIN_OPEN);
- ScriptContext1_SetupScript(EventScript_ConfirmLeaveCableClubRoom);
- ScriptContext2_Enable();
+ ScriptContext_SetupScript(EventScript_ConfirmLeaveCableClubRoom);
+ LockPlayerFieldControls();
}
static void InitMenuBasedScript(const u8 *script)
{
PlaySE(SE_SELECT);
- ScriptContext1_SetupScript(script);
- ScriptContext2_Enable();
+ ScriptContext_SetupScript(script);
+ LockPlayerFieldControls();
}
static void RunTerminateLinkScript(void)
{
- ScriptContext1_SetupScript(EventScript_TerminateLink);
- ScriptContext2_Enable();
+ ScriptContext_SetupScript(EventScript_TerminateLink);
+ LockPlayerFieldControls();
}
bool32 Overworld_IsRecvQueueAtMax(void)
@@ -2923,7 +2928,7 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent)
// conflict with the usual Event Object struct, thus the definitions.
#define linkGender(obj) obj->singleMovementActive
// not even one can reference *byte* aligned bitfield members...
-#define linkDirection(obj) ((u8*)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX
+#define linkDirection(obj) ((u8 *)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX
static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender)
{
@@ -3087,7 +3092,7 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer
linkDirection(objEvent) = FlipVerticalAndClearForced(dir, linkDirection(objEvent));
ObjectEventMoveDestCoords(objEvent, linkDirection(objEvent), &x, &y);
- if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, linkDirection(objEvent), x, y))
+ if (LinkPlayerGetCollision(linkPlayerObjEvent->objEventId, linkDirection(objEvent), x, y))
{
return FALSE;
}
@@ -3147,7 +3152,7 @@ static u8 FlipVerticalAndClearForced(u8 newFacing, u8 oldFacing)
return oldFacing;
}
-static bool8 LinkPlayerDetectCollision(u8 selfObjEventId, u8 direction, s16 x, s16 y)
+static u8 LinkPlayerGetCollision(u8 selfObjEventId, u8 direction, s16 x, s16 y)
{
u8 i;
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
@@ -3157,11 +3162,11 @@ static bool8 LinkPlayerDetectCollision(u8 selfObjEventId, u8 direction, s16 x, s
if ((gObjectEvents[i].currentCoords.x == x && gObjectEvents[i].currentCoords.y == y)
|| (gObjectEvents[i].previousCoords.x == x && gObjectEvents[i].previousCoords.y == y))
{
- return TRUE;
+ return 1;
}
}
}
- return MapGridIsImpassableAt(x, y);
+ return MapGridGetCollisionAt(x, y);
}
static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion)
@@ -3209,7 +3214,7 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite)
else
StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(linkDirection(objEvent)));
- UpdateObjectEventSpriteInvisibility(sprite, 0);
+ UpdateObjectEventSpriteInvisibility(sprite, FALSE);
if (objEvent->triggerGroundEffectsOnMove)
{
sprite->invisible = ((sprite->data[7] & 4) >> 2);
diff --git a/src/party_menu.c b/src/party_menu.c
index 49e70be1f8..db20e0932c 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -73,6 +73,80 @@
#include "constants/rgb.h"
#include "constants/songs.h"
+enum {
+ MENU_SUMMARY,
+ MENU_SWITCH,
+ MENU_CANCEL1,
+ MENU_ITEM,
+ MENU_GIVE,
+ MENU_TAKE_ITEM,
+ MENU_MAIL,
+ MENU_TAKE_MAIL,
+ MENU_READ,
+ MENU_CANCEL2,
+ MENU_SHIFT,
+ MENU_SEND_OUT,
+ MENU_ENTER,
+ MENU_NO_ENTRY,
+ MENU_STORE,
+ MENU_REGISTER,
+ MENU_TRADE1,
+ MENU_TRADE2,
+ MENU_TOSS,
+ MENU_FIELD_MOVES
+};
+
+// IDs for the action lists that appear when a party mon is selected
+enum {
+ ACTIONS_NONE,
+ ACTIONS_SWITCH,
+ ACTIONS_SHIFT,
+ ACTIONS_SEND_OUT,
+ ACTIONS_ENTER,
+ ACTIONS_NO_ENTRY,
+ ACTIONS_STORE,
+ ACTIONS_SUMMARY_ONLY,
+ ACTIONS_ITEM,
+ ACTIONS_MAIL,
+ ACTIONS_REGISTER,
+ ACTIONS_TRADE,
+ ACTIONS_SPIN_TRADE,
+ ACTIONS_TAKEITEM_TOSS,
+};
+
+// In CursorCb_FieldMove, field moves <= FIELD_MOVE_WATERFALL are assumed to line up with the badge flags.
+// Badge flag names are commented here for people searching for references to remove the badge requirement.
+enum {
+ FIELD_MOVE_CUT, // FLAG_BADGE01_GET
+ FIELD_MOVE_FLASH, // FLAG_BADGE02_GET
+ FIELD_MOVE_ROCK_SMASH, // FLAG_BADGE03_GET
+ FIELD_MOVE_STRENGTH, // FLAG_BADGE04_GET
+ FIELD_MOVE_SURF, // FLAG_BADGE05_GET
+ FIELD_MOVE_FLY, // FLAG_BADGE06_GET
+ FIELD_MOVE_DIVE, // FLAG_BADGE07_GET
+ FIELD_MOVE_WATERFALL, // FLAG_BADGE08_GET
+ FIELD_MOVE_TELEPORT,
+ FIELD_MOVE_DIG,
+ FIELD_MOVE_SECRET_POWER,
+ FIELD_MOVE_MILK_DRINK,
+ FIELD_MOVE_SOFT_BOILED,
+ FIELD_MOVE_SWEET_SCENT,
+ FIELD_MOVES_COUNT
+};
+
+enum {
+ PARTY_BOX_LEFT_COLUMN,
+ PARTY_BOX_RIGHT_COLUMN,
+};
+
+enum {
+ TAG_POKEBALL = 1200,
+ TAG_POKEBALL_SMALL,
+ TAG_STATUS_ICONS,
+};
+
+#define TAG_HELD_ITEM 55120
+
#define PARTY_PAL_SELECTED (1 << 0)
#define PARTY_PAL_FAINTED (1 << 1)
#define PARTY_PAL_TO_SWITCH (1 << 2)
@@ -193,9 +267,9 @@ static void DisplayPartyPokemonDescriptionText(u8, struct PartyMenuBox *, u8);
static bool8 IsMonAllowedInMinigame(u8);
static void DisplayPartyPokemonDataToTeachMove(u8, u16, u8);
static u8 CanMonLearnTMTutor(struct Pokemon *, u16, u8);
-static void DisplayPartyPokemonBarDetail(u8, const u8*, u8, const u8*);
+static void DisplayPartyPokemonBarDetail(u8, const u8 *, u8, const u8 *);
static void DisplayPartyPokemonLevel(u8, struct PartyMenuBox *);
-static void DisplayPartyPokemonGender(u8, u16, u8*, struct PartyMenuBox *);
+static void DisplayPartyPokemonGender(u8, u16, u8 *, struct PartyMenuBox *);
static void DisplayPartyPokemonHP(u16, struct PartyMenuBox *);
static void DisplayPartyPokemonMaxHP(u16, struct PartyMenuBox *);
static void DisplayPartyPokemonHPBar(u16, u16, struct PartyMenuBox *);
@@ -220,12 +294,12 @@ static u8 GetPartyIdFromBattleSlot(u8);
static void Task_ClosePartyMenuAndSetCB2(u8);
static void UpdatePartyToFieldOrder(void);
static void MoveCursorToConfirm(void);
-static void HandleChooseMonCancel(u8, s8*);
-static void HandleChooseMonSelection(u8, s8*);
-static u16 PartyMenuButtonHandler(s8*);
-static s8* GetCurrentPartySlotPtr(void);
-static bool8 IsSelectedMonNotEgg(u8*);
-static void PartyMenuRemoveWindow(u8*);
+static void HandleChooseMonCancel(u8, s8 *);
+static void HandleChooseMonSelection(u8, s8 *);
+static u16 PartyMenuButtonHandler(s8 *);
+static s8 *GetCurrentPartySlotPtr(void);
+static bool8 IsSelectedMonNotEgg(u8 *);
+static void PartyMenuRemoveWindow(u8 *);
static void CB2_SetUpExitToBattleScreen(void);
static void Task_ClosePartyMenuAfterText(u8);
static void TryTutorSelectedMon(u8);
@@ -237,26 +311,26 @@ static void Task_TryCreateSelectionWindow(u8);
static void FinishTwoMonAction(u8);
static void CancelParticipationPrompt(u8);
static bool8 DisplayCancelChooseMonYesNo(u8);
-static const u8* GetFacilityCancelString(void);
+static const u8 *GetFacilityCancelString(void);
static void Task_CancelChooseMonYesNo(u8);
static void PartyMenuDisplayYesNoMenu(void);
static void Task_HandleCancelChooseMonYesNoInput(u8);
static void Task_ReturnToChooseMonAfterText(u8);
-static void UpdateCurrentPartySelection(s8*, s8);
-static void UpdatePartySelectionSingleLayout(s8*, s8);
-static void UpdatePartySelectionDoubleLayout(s8*, s8);
+static void UpdateCurrentPartySelection(s8 *, s8);
+static void UpdatePartySelectionSingleLayout(s8 *, s8);
+static void UpdatePartySelectionDoubleLayout(s8 *, s8);
static s8 GetNewSlotDoubleLayout(s8, s8);
-static void PartyMenuPrintText(const u8*);
+static void PartyMenuPrintText(const u8 *);
static void Task_PrintAndWaitForText(u8);
-static bool16 IsMonAllowedInPokemonJump(struct Pokemon*);
-static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon*);
+static bool16 IsMonAllowedInPokemonJump(struct Pokemon *);
+static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *);
static void Task_CancelParticipationYesNo(u8);
static void Task_HandleCancelParticipationYesNoInput(u8);
static bool8 CanLearnTutorMove(u16, u8);
static u16 GetTutorMove(u8);
static bool8 ShouldUseChooseMonText(void);
-static void SetPartyMonFieldSelectionActions(struct Pokemon*, u8);
-static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon*);
+static void SetPartyMonFieldSelectionActions(struct Pokemon *, u8);
+static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon *);
static u8 GetPartySlotEntryStatus(s8);
static void Task_UpdateHeldItemSprite(u8);
static void Task_HandleSelectionMenuInput(u8);
@@ -277,7 +351,7 @@ static void Task_HandleSwitchItemsYesNoInput(u8);
static void Task_WriteMailToGiveMonAfterText(u8);
static void CB2_ReturnToPartyMenuFromWritingMail(void);
static void Task_DisplayGaveMailFromPartyMessage(u8);
-static void UpdatePartyMonHeldItemSprite(struct Pokemon*, struct PartyMenuBox*);
+static void UpdatePartyMonHeldItemSprite(struct Pokemon *, struct PartyMenuBox *);
static void Task_TossHeldItemYesNo(u8 taskId);
static void Task_HandleTossHeldItemYesNoInput(u8);
static void Task_TossHeldItem(u8);
@@ -298,20 +372,20 @@ static void Task_FieldMoveExitAreaYesNo(u8);
static void Task_HandleFieldMoveExitAreaYesNoInput(u8);
static void Task_FieldMoveWaitForFade(u8);
static u16 GetFieldMoveMonSpecies(void);
-static void UpdatePartyMonHPBar(u8, struct Pokemon*);
-static void SpriteCB_UpdatePartyMonIcon(struct Sprite*);
-static void SpriteCB_BouncePartyMonIcon(struct Sprite*);
-static void ShowOrHideHeldItemSprite(u16, struct PartyMenuBox*);
+static void UpdatePartyMonHPBar(u8, struct Pokemon *);
+static void SpriteCB_UpdatePartyMonIcon(struct Sprite *);
+static void SpriteCB_BouncePartyMonIcon(struct Sprite *);
+static void ShowOrHideHeldItemSprite(u16, struct PartyMenuBox *);
static void CreateHeldItemSpriteForTrade(u8, bool8);
-static void SpriteCB_HeldItem(struct Sprite*);
-static void SetPartyMonAilmentGfx(struct Pokemon*, struct PartyMenuBox*);
-static void UpdatePartyMonAilmentGfx(u8, struct PartyMenuBox*);
+static void SpriteCB_HeldItem(struct Sprite *);
+static void SetPartyMonAilmentGfx(struct Pokemon *, struct PartyMenuBox *);
+static void UpdatePartyMonAilmentGfx(u8, struct PartyMenuBox *);
static u8 GetPartyLayoutFromBattleType(void);
static void Task_SetSacredAshCB(u8);
static void CB2_ReturnToBagMenu(void);
static void Task_DisplayHPRestoredMessage(u8);
-static u16 ItemEffectToMonEv(struct Pokemon*, u8);
-static void ItemEffectToStatString(u8, u8*);
+static u16 ItemEffectToMonEv(struct Pokemon *, u8);
+static void ItemEffectToStatString(u8, u8 *);
static void ReturnToUseOnWhichMon(u8);
static void SetSelectedMoveForPPItem(u8);
static void TryUsePPItem(u8);
@@ -331,8 +405,8 @@ static void Task_PartyMenuReplaceMove(u8);
static void Task_StopLearningMoveYesNo(u8);
static void Task_HandleStopLearningMoveYesNoInput(u8);
static void Task_TryLearningNextMoveAfterText(u8);
-static void BufferMonStatsToTaskData(struct Pokemon*, s16*);
-static void UpdateMonDisplayInfoAfterRareCandy(u8, struct Pokemon*);
+static void BufferMonStatsToTaskData(struct Pokemon *, s16 *);
+static void UpdateMonDisplayInfoAfterRareCandy(u8, struct Pokemon *);
static void Task_DisplayLevelUpStatsPg1(u8);
static void DisplayLevelUpStatsPg1(u8);
static void Task_DisplayLevelUpStatsPg2(u8);
@@ -356,14 +430,14 @@ static bool8 ReturnGiveItemToBagOrPC(u16);
static void Task_DisplayGaveMailFromBagMessage(u8);
static void Task_HandleSwitchItemsFromBagYesNoInput(u8);
static void Task_ValidateChosenHalfParty(u8);
-static bool8 GetBattleEntryEligibility(struct Pokemon*);
+static bool8 GetBattleEntryEligibility(struct Pokemon *);
static bool8 HasPartySlotAlreadyBeenSelected(u8);
static u8 GetBattleEntryLevelCap(void);
static u8 GetMaxBattleEntries(void);
static u8 GetMinBattleEntries(void);
static void Task_ContinueChoosingHalfParty(u8);
-static void BufferBattlePartyOrder(u8*, bool8);
-static void BufferBattlePartyOrderBySide(u8*, u8, u8);
+static void BufferBattlePartyOrder(u8 *, bool8);
+static void BufferBattlePartyOrderBySide(u8 *, u8, u8);
static void Task_InitMultiPartnerPartySlideIn(u8);
static void Task_MultiPartnerPartySlideIn(u8);
static void SlideMultiPartyMenuBoxSpritesOneStep(u8);
@@ -376,7 +450,7 @@ static void Task_ChoosePartyMon(u8 taskId);
static void Task_ChooseMonForMoveRelearner(u8);
static void CB2_ChooseMonForMoveRelearner(void);
static void Task_BattlePyramidChooseMonHeldItems(u8);
-static void ShiftMoveSlot(struct Pokemon*, u8, u8);
+static void ShiftMoveSlot(struct Pokemon *, u8, u8);
static void BlitBitmapToPartyWindow_LeftColumn(u8, u8, u8, u8, u8, bool8);
static void BlitBitmapToPartyWindow_RightColumn(u8, u8, u8, u8, u8, bool8);
static void CursorCb_Summary(u8);
@@ -973,7 +1047,7 @@ static bool8 RenderPartyMenuBoxes(void)
return FALSE;
}
-static u8* GetPartyMenuBgTile(u16 tileId)
+static u8 *GetPartyMenuBgTile(u16 tileId)
{
return &sPartyBgGfxTilemap[tileId << 5];
}
@@ -1128,7 +1202,7 @@ static void DrawCancelConfirmButtons(void)
bool8 IsMultiBattle(void)
{
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleTypeFlags & BATTLE_TYPE_TRAINER && gMain.inBattle)
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gMain.inBattle)
return TRUE;
else
return FALSE;
@@ -1187,13 +1261,13 @@ void Task_HandleChooseMonInput(u8 taskId)
switch (PartyMenuButtonHandler(slotPtr))
{
- case 1: // Selected mon
+ case A_BUTTON: // Selected mon
HandleChooseMonSelection(taskId, slotPtr);
break;
- case 2: // Selected Cancel
+ case B_BUTTON: // Selected Cancel / pressed B
HandleChooseMonCancel(taskId, slotPtr);
break;
- case 8: // Start button
+ case START_BUTTON:
if (sPartyMenuInternal->chooseHalf)
{
PlaySE(SE_SELECT);
@@ -1204,7 +1278,7 @@ void Task_HandleChooseMonInput(u8 taskId)
}
}
-static s8* GetCurrentPartySlotPtr(void)
+static s8 *GetCurrentPartySlotPtr(void)
{
if (gPartyMenu.action == PARTY_ACTION_SWITCH || gPartyMenu.action == PARTY_ACTION_SOFTBOILED)
return &gPartyMenu.slotId2;
@@ -1223,14 +1297,14 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr)
switch (gPartyMenu.action)
{
case PARTY_ACTION_SOFTBOILED:
- if (IsSelectedMonNotEgg((u8*)slotPtr))
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
{
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
Task_TryUseSoftboiledOnPartyMon(taskId);
}
break;
case PARTY_ACTION_USE_ITEM:
- if (IsSelectedMonNotEgg((u8*)slotPtr))
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
{
if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen;
@@ -1240,7 +1314,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr)
}
break;
case PARTY_ACTION_MOVE_TUTOR:
- if (IsSelectedMonNotEgg((u8*)slotPtr))
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
{
PlaySE(SE_SELECT);
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
@@ -1248,7 +1322,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr)
}
break;
case PARTY_ACTION_GIVE_MAILBOX_MAIL:
- if (IsSelectedMonNotEgg((u8*)slotPtr))
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
{
PlaySE(SE_SELECT);
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
@@ -1257,7 +1331,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr)
break;
case PARTY_ACTION_GIVE_ITEM:
case PARTY_ACTION_GIVE_PC_ITEM:
- if (IsSelectedMonNotEgg((u8*)slotPtr))
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
{
PlaySE(SE_SELECT);
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
@@ -1273,7 +1347,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr)
Task_ClosePartyMenu(taskId);
break;
case PARTY_ACTION_MINIGAME:
- if (IsSelectedMonNotEgg((u8*)slotPtr))
+ if (IsSelectedMonNotEgg((u8 *)slotPtr))
{
TryEnterMonForMinigame(taskId, (u8)*slotPtr);
}
@@ -1330,7 +1404,7 @@ static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr)
static bool8 DisplayCancelChooseMonYesNo(u8 taskId)
{
- const u8* stringPtr = NULL;
+ const u8 *stringPtr = NULL;
if (gPartyMenu.menuType == PARTY_MENU_TYPE_CONTEST)
stringPtr = gText_CancelParticipation;
@@ -1410,7 +1484,7 @@ static u16 PartyMenuButtonHandler(s8 *slotPtr)
}
if (JOY_NEW(START_BUTTON))
- return 8;
+ return START_BUTTON;
if (movementDir)
{
@@ -1419,8 +1493,8 @@ static u16 PartyMenuButtonHandler(s8 *slotPtr)
}
// Pressed Cancel
- if ((JOY_NEW(A_BUTTON)) && *slotPtr == PARTY_SIZE + 1)
- return 2;
+ if (JOY_NEW(A_BUTTON) && *slotPtr == PARTY_SIZE + 1)
+ return B_BUTTON;
return JOY_NEW(A_BUTTON | B_BUTTON);
}
@@ -1618,7 +1692,7 @@ static s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir)
}
}
-u8* GetMonNickname(struct Pokemon *mon, u8 *dest)
+u8 *GetMonNickname(struct Pokemon *mon, u8 *dest)
{
GetMonData(mon, MON_DATA_NICKNAME, dest);
return StringGet_Nickname(dest);
@@ -1626,7 +1700,7 @@ u8* GetMonNickname(struct Pokemon *mon, u8 *dest)
#define tKeepOpen data[0]
-u8 DisplayPartyMenuMessage(const u8* str, bool8 keepOpen)
+u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen)
{
u8 taskId;
@@ -1642,7 +1716,7 @@ static void Task_PrintAndWaitForText(u8 taskId)
{
if (gTasks[taskId].tKeepOpen == FALSE)
{
- ClearStdWindowAndFrameToTransparent(6, 0);
+ ClearStdWindowAndFrameToTransparent(6, FALSE);
ClearWindowTilemap(6);
}
DestroyTask(taskId);
@@ -1669,7 +1743,7 @@ static void Task_ReturnToChooseMonAfterText(u8 taskId)
{
if (IsPartyMenuTextPrinterActive() != TRUE)
{
- ClearStdWindowAndFrameToTransparent(6, 0);
+ ClearStdWindowAndFrameToTransparent(6, FALSE);
ClearWindowTilemap(6);
if (MenuHelpers_IsLinkActive() == TRUE)
{
@@ -1734,7 +1808,7 @@ static void GiveItemToMon(struct Pokemon *mon, u16 item)
TryItemHoldFormChange(&gPlayerParty[gPartyMenu.slotId]);
}
-static u8 TryTakeMonItem(struct Pokemon* mon)
+static u8 TryTakeMonItem(struct Pokemon *mon)
{
u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
@@ -1964,7 +2038,7 @@ static u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor)
if (item >= ITEM_TM01)
{
- if (!CanMonLearnTMHM(mon, item - ITEM_TM01))
+ if (!CanMonLearnTMHM(mon, item - ITEM_TM01 - ((item > ITEM_TM100) ? 50 : 0)))
return CANNOT_LEARN_MOVE;
else
move = ItemIdToBattleMoveId(item);
@@ -2067,7 +2141,7 @@ static void CreateCancelConfirmWindows(bool8 chooseHalf)
}
}
-static u16* GetPartyMenuPalBufferPtr(u8 paletteId)
+static u16 *GetPartyMenuPalBufferPtr(u8 paletteId)
{
return &sPartyMenuInternal->palBuffer[paletteId];
}
@@ -2374,7 +2448,7 @@ static void PartyMenuRemoveWindow(u8 *ptr)
{
if (*ptr != WINDOW_NONE)
{
- ClearStdWindowAndFrameToTransparent(*ptr, 0);
+ ClearStdWindowAndFrameToTransparent(*ptr, FALSE);
RemoveWindow(*ptr);
*ptr = WINDOW_NONE;
ScheduleBgCopyTilemapToVram(2);
@@ -2492,7 +2566,7 @@ static void PartyMenuPrintText(const u8 *text)
{
DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13);
gTextFlags.canABSpeedUpPrint = TRUE;
- AddTextPrinterParameterized2(6, FONT_NORMAL, text, GetPlayerTextSpeedDelay(), 0, 2, 1, 3);
+ AddTextPrinterParameterized2(6, FONT_NORMAL, text, GetPlayerTextSpeedDelay(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
static void PartyMenuDisplayYesNoMenu(void)
@@ -2539,7 +2613,7 @@ static void SetPartyMonFieldSelectionActions(struct Pokemon *mons, u8 slotId)
// Add field moves to action list
for (i = 0; i < MAX_MON_MOVES; i++)
{
- for (j = 0; sFieldMoves[j] != FIELD_MOVE_TERMINATOR; j++)
+ for (j = 0; sFieldMoves[j] != FIELD_MOVES_COUNT; j++)
{
if (GetMonData(&mons[slotId], i + MON_DATA_MOVE1) == sFieldMoves[j])
{
@@ -3312,7 +3386,7 @@ static void CursorCb_Read(u8 taskId)
static void CB2_ReadHeldMail(void)
{
- ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL)], CB2_ReturnToPartyMenuFromReadingMail, 1);
+ ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL)], CB2_ReturnToPartyMenuFromReadingMail, TRUE);
}
static void CB2_ReturnToPartyMenuFromReadingMail(void)
@@ -4215,7 +4289,7 @@ static bool8 IsHPRecoveryItem(u16 item)
{
const u8 *effect;
- if (item == ITEM_ENIGMA_BERRY)
+ if (item == ITEM_ENIGMA_BERRY_E_READER)
effect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
else
effect = gItemEffectTable[item - ITEM_POTION];
@@ -4308,7 +4382,13 @@ static bool8 IsItemFlute(u16 item)
static bool8 ExecuteTableBasedItemEffect_(u8 partyMonIndex, u16 item, u8 monMoveIndex)
{
if (gMain.inBattle)
- return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex);
+ {
+ if ((partyMonIndex == 0 && gStatuses3[B_POSITION_PLAYER_LEFT] & STATUS3_EMBARGO)
+ || (partyMonIndex == 1 && gStatuses3[B_POSITION_PLAYER_RIGHT] & STATUS3_EMBARGO))
+ return TRUE; // cannot use on this mon
+ else
+ return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex);
+ }
else
return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex);
}
@@ -4379,6 +4459,194 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
}
}
+#define tState data[0]
+#define tSpecies data[1]
+#define tAbilityNum data[2]
+#define tMonId data[3]
+#define tOldFunc 4
+
+void Task_AbilityCapsule(u8 taskId)
+{
+ static const u8 askText[] = _("Would you like to change {STR_VAR_1}'s\nability to {STR_VAR_2}?");
+ static const u8 doneText[] = _("{STR_VAR_1}'s ability became\n{STR_VAR_2}!{PAUSE_UNTIL_PRESS}");
+ s16 *data = gTasks[taskId].data;
+
+ switch (tState)
+ {
+ case 0:
+ // Can't use.
+ if (gBaseStats[tSpecies].abilities[0] == gBaseStats[tSpecies].abilities[1]
+ || gBaseStats[tSpecies].abilities[1] == 0
+ || tAbilityNum > 1
+ || !tSpecies)
+ {
+ gPartyMenuUseExitCallback = FALSE;
+ PlaySE(SE_SELECT);
+ DisplayPartyMenuMessage(gText_WontHaveEffect, 1);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+ return;
+ }
+ gPartyMenuUseExitCallback = TRUE;
+ GetMonNickname(&gPlayerParty[tMonId], gStringVar1);
+ StringCopy(gStringVar2, gAbilityNames[GetAbilityBySpecies(tSpecies, tAbilityNum)]);
+ StringExpandPlaceholders(gStringVar4, askText);
+ PlaySE(SE_SELECT);
+ DisplayPartyMenuMessage(gStringVar4, 1);
+ ScheduleBgCopyTilemapToVram(2);
+ tState++;
+ break;
+ case 1:
+ if (!IsPartyMenuTextPrinterActive())
+ {
+ PartyMenuDisplayYesNoMenu();
+ tState++;
+ }
+ break;
+ case 2:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ tState++;
+ break;
+ case 1:
+ case MENU_B_PRESSED:
+ gPartyMenuUseExitCallback = FALSE;
+ PlaySE(SE_SELECT);
+ ScheduleBgCopyTilemapToVram(2);
+ // Don't exit party selections screen, return to choosing a mon.
+ ClearStdWindowAndFrameToTransparent(6, 0);
+ ClearWindowTilemap(6);
+ DisplayPartyMenuStdMessage(5);
+ gTasks[taskId].func = (void *)GetWordTaskArg(taskId, tOldFunc);
+ return;
+ }
+ break;
+ case 3:
+ PlaySE(SE_USE_ITEM);
+ StringExpandPlaceholders(gStringVar4, doneText);
+ DisplayPartyMenuMessage(gStringVar4, 1);
+ ScheduleBgCopyTilemapToVram(2);
+ tState++;
+ break;
+ case 4:
+ if (!IsPartyMenuTextPrinterActive())
+ tState++;
+ break;
+ case 5:
+ SetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, &tAbilityNum);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ gTasks[taskId].func = Task_ClosePartyMenu;
+ break;
+ }
+}
+
+void ItemUseCB_AbilityCapsule(u8 taskId, TaskFunc task)
+{
+ s16 *data = gTasks[taskId].data;
+
+ tState = 0;
+ tMonId = gPartyMenu.slotId;
+ tSpecies = GetMonData(&gPlayerParty[tMonId], MON_DATA_SPECIES, NULL);
+ tAbilityNum = GetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, NULL) ^ 1;
+ SetWordTaskArg(taskId, tOldFunc, (uintptr_t)(gTasks[taskId].func));
+ gTasks[taskId].func = Task_AbilityCapsule;
+}
+
+void Task_AbilityPatch(u8 taskId)
+{
+ static const u8 askText[] = _("Would you like to change {STR_VAR_1}'s\nability to {STR_VAR_2}?");
+ static const u8 doneText[] = _("{STR_VAR_1}'s ability became\n{STR_VAR_2}!{PAUSE_UNTIL_PRESS}");
+ s16 *data = gTasks[taskId].data;
+
+ switch (tState)
+ {
+ case 0:
+ // Can't use.
+ if (gBaseStats[tSpecies].abilities[tAbilityNum] == 0
+ || !tSpecies
+ || GetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, NULL) > 1
+ )
+ {
+ gPartyMenuUseExitCallback = FALSE;
+ PlaySE(SE_SELECT);
+ DisplayPartyMenuMessage(gText_WontHaveEffect, 1);
+ ScheduleBgCopyTilemapToVram(2);
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+ return;
+ }
+ gPartyMenuUseExitCallback = TRUE;
+ GetMonNickname(&gPlayerParty[tMonId], gStringVar1);
+ StringCopy(gStringVar2, gAbilityNames[GetAbilityBySpecies(tSpecies, tAbilityNum)]);
+ StringExpandPlaceholders(gStringVar4, askText);
+ PlaySE(SE_SELECT);
+ DisplayPartyMenuMessage(gStringVar4, 1);
+ ScheduleBgCopyTilemapToVram(2);
+ tState++;
+ break;
+ case 1:
+ if (!IsPartyMenuTextPrinterActive())
+ {
+ PartyMenuDisplayYesNoMenu();
+ tState++;
+ }
+ break;
+ case 2:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ tState++;
+ break;
+ case 1:
+ case MENU_B_PRESSED:
+ gPartyMenuUseExitCallback = FALSE;
+ PlaySE(SE_SELECT);
+ ScheduleBgCopyTilemapToVram(2);
+ // Don't exit party selections screen, return to choosing a mon.
+ ClearStdWindowAndFrameToTransparent(6, 0);
+ ClearWindowTilemap(6);
+ DisplayPartyMenuStdMessage(5);
+ gTasks[taskId].func = (void *)GetWordTaskArg(taskId, tOldFunc);
+ return;
+ }
+ break;
+ case 3:
+ PlaySE(SE_USE_ITEM);
+ StringExpandPlaceholders(gStringVar4, doneText);
+ DisplayPartyMenuMessage(gStringVar4, 1);
+ ScheduleBgCopyTilemapToVram(2);
+ tState++;
+ break;
+ case 4:
+ if (!IsPartyMenuTextPrinterActive())
+ tState++;
+ break;
+ case 5:
+ SetMonData(&gPlayerParty[tMonId], MON_DATA_ABILITY_NUM, &tAbilityNum);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ gTasks[taskId].func = Task_ClosePartyMenu;
+ break;
+ }
+}
+
+void ItemUseCB_AbilityPatch(u8 taskId, TaskFunc task)
+{
+ s16 *data = gTasks[taskId].data;
+
+ tState = 0;
+ tMonId = gPartyMenu.slotId;
+ tSpecies = GetMonData(&gPlayerParty[tMonId], MON_DATA_SPECIES, NULL);
+ tAbilityNum = 2;
+ SetWordTaskArg(taskId, tOldFunc, (uintptr_t)(gTasks[taskId].func));
+ gTasks[taskId].func = Task_AbilityPatch;
+}
+
+#undef tState
+#undef tSpecies
+#undef tAbilityNum
+#undef tMonId
+#undef tOldFunc
+
static void Task_DisplayHPRestoredMessage(u8 taskId)
{
GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
@@ -4532,7 +4800,7 @@ void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task)
const u8 *effect;
u16 item = gSpecialVar_ItemId;
- if (item == ITEM_ENIGMA_BERRY)
+ if (item == ITEM_ENIGMA_BERRY_E_READER)
effect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
else
effect = gItemEffectTable[item - ITEM_POTION];
@@ -5339,12 +5607,12 @@ u8 GetItemEffectType(u16 item)
return ITEM_EFFECT_NONE;
// Read the item's effect properties.
- if (item == ITEM_ENIGMA_BERRY)
+ if (item == ITEM_ENIGMA_BERRY_E_READER)
itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
else
itemEffect = gItemEffectTable[item - ITEM_POTION];
- if ((itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK)) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & ITEM3_GUARD_SPEC))
+ if ((itemEffect[0] & ITEM0_DIRE_HIT) || itemEffect[1] || (itemEffect[3] & ITEM3_GUARD_SPEC))
return ITEM_EFFECT_X_ITEM;
else if (itemEffect[0] & ITEM0_SACRED_ASH)
return ITEM_EFFECT_SACRED_ASH;
@@ -5818,7 +6086,7 @@ static u8 GetBattleEntryLevelCap(void)
}
}
-static const u8* GetFacilityCancelString(void)
+static const u8 *GetFacilityCancelString(void)
{
u8 facilityNum = VarGet(VAR_FRONTIER_FACILITY);
@@ -6311,14 +6579,14 @@ static void Task_PartyMenuWaitForFade(u8 taskId)
if (IsWeatherNotFadingIn())
{
DestroyTask(taskId);
- ScriptContext2_Disable();
- EnableBothScriptContexts();
+ UnlockPlayerFieldControls();
+ ScriptContext_Enable();
}
}
void ChooseContestMon(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeScreen(FADE_TO_BLACK, 0);
CreateTask(Task_ChooseContestMon, 10);
}
@@ -6346,7 +6614,7 @@ static void CB2_ChooseContestMon(void)
// Used as a script special for showing a party mon to various npcs (e.g. in-game trades, move deleter)
void ChoosePartyMon(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeScreen(FADE_TO_BLACK, 0);
CreateTask(Task_ChoosePartyMon, 10);
}
@@ -6363,7 +6631,7 @@ static void Task_ChoosePartyMon(u8 taskId)
void ChooseMonForMoveRelearner(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeScreen(FADE_TO_BLACK, 0);
CreateTask(Task_ChooseMonForMoveRelearner, 10);
}
@@ -6408,7 +6676,7 @@ void DoBattlePyramidMonsHaveHeldItem(void)
// The player can then select to toss items from the bag or take/toss held items from the party
void BattlePyramidChooseMonHeldItems(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FadeScreen(FADE_TO_BLACK, 0);
CreateTask(Task_BattlePyramidChooseMonHeldItems, 10);
}
diff --git a/src/player_pc.c b/src/player_pc.c
index 0ca78dea86..9ec36d61d2 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -161,7 +161,7 @@ static void ItemStorage_HandleRemoveItem(u8);
static void ItemStorage_HandleErrorMessageInput(u8);
static void ItemStorage_ReturnToListInput(u8);
-static const u8* ItemStorage_GetMessage(u16);
+static const u8 *ItemStorage_GetMessage(u16);
static void CopyItemName_PlayerPC(u8 *, u16);
static void ItemStorage_Init(void);
@@ -398,7 +398,7 @@ static void InitPlayerPCMenu(u8 taskId)
windowTemplate.width = GetMaxWidthInSubsetOfMenuTable(sPlayerPCMenuActions, sTopMenuOptionOrder, sTopMenuNumOptions);
tWindowId = AddWindow(&windowTemplate);
- SetStandardWindowBorderStyle(tWindowId, 0);
+ SetStandardWindowBorderStyle(tWindowId, FALSE);
PrintMenuActionTextsInUpperLeftCorner(tWindowId, sTopMenuNumOptions, sPlayerPCMenuActions, sTopMenuOptionOrder);
InitMenuInUpperLeftCornerNormal(tWindowId, sTopMenuNumOptions, 0);
ScheduleBgCopyTilemapToVram(0);
@@ -467,7 +467,7 @@ static void PlayerPC_Mailbox(u8 taskId)
SetPlayerPCListCount(taskId);
if (MailboxMenu_Alloc(gPlayerPCItemPageInfo.count) == TRUE)
{
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
Mailbox_DrawMailboxMenu(taskId);
gTasks[taskId].func = Mailbox_ProcessInput;
}
@@ -489,13 +489,13 @@ static void PlayerPC_TurnOff(u8 taskId)
if (sTopMenuNumOptions == NUM_BEDROOM_PC_OPTIONS) // Flimsy way to determine if Bedroom PC is in use
{
if (gSaveBlock2Ptr->playerGender == MALE)
- ScriptContext1_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC);
+ ScriptContext_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC);
else
- ScriptContext1_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_TurnOffPlayerPC);
+ ScriptContext_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_TurnOffPlayerPC);
}
else
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
DestroyTask(taskId);
}
@@ -509,7 +509,7 @@ static void InitItemStorageMenu(u8 taskId, u8 var)
windowTemplate = sWindowTemplates_MainMenus[WIN_ITEM_STORAGE_MENU];
windowTemplate.width = GetMaxWidthInMenuTable(sItemStorage_MenuActions, ARRAY_COUNT(sItemStorage_MenuActions));
tWindowId = AddWindow(&windowTemplate);
- SetStandardWindowBorderStyle(tWindowId, 0);
+ SetStandardWindowBorderStyle(tWindowId, FALSE);
PrintMenuTable(tWindowId, ARRAY_COUNT(sItemStorage_MenuActions), sItemStorage_MenuActions);
InitMenuInUpperLeftCornerNormal(tWindowId, ARRAY_COUNT(sItemStorage_MenuActions), var);
ScheduleBgCopyTilemapToVram(0);
@@ -632,7 +632,7 @@ static void ItemStorage_Enter(u8 taskId, bool8 toss)
FreeAndReserveObjectSpritePalettes();
LoadListMenuSwapLineGfx();
CreateSwapLineSprites(sItemStorageMenu->swapLineSpriteIds, SWAP_LINE_LENGTH);
- ClearDialogWindowAndFrame(0,0);
+ ClearDialogWindowAndFrame(0, FALSE);
gTasks[taskId].func = ItemStorage_CreateListMenu;
}
@@ -928,7 +928,7 @@ static void Mailbox_NoPokemonForMail(u8 taskId)
static void Mailbox_Cancel(u8 taskId)
{
MailboxMenu_RemoveWindow(MAILBOXWIN_OPTIONS);
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
Mailbox_DrawMailboxMenu(taskId);
ScheduleBgCopyTilemapToVram(0);
gTasks[taskId].func = Mailbox_ProcessInput;
@@ -1039,7 +1039,7 @@ static void ItemStorage_PrintMenuItem(u8 windowId, u32 id, u8 yOffset)
static void ItemStorage_PrintDescription(s32 id)
{
- const u8* description;
+ const u8 *description;
u8 windowId = sItemStorageMenu->windowIds[ITEMPC_WIN_MESSAGE];
// Get item description (or Cancel text)
@@ -1088,7 +1088,7 @@ static void ItemStorage_DrawSwapArrow(u8 y, u8 b, u8 speed)
static void ItemStorage_DrawItemIcon(u16 itemId)
{
u8 spriteId;
- u8* spriteIdLoc = &sItemStorageMenu->spriteId;
+ u8 *spriteIdLoc = &sItemStorageMenu->spriteId;
if (*spriteIdLoc == SPRITE_NONE)
{
@@ -1107,7 +1107,7 @@ static void ItemStorage_DrawItemIcon(u16 itemId)
static void ItemStorage_EraseItemIcon(void)
{
- u8* spriteIdLoc = &sItemStorageMenu->spriteId;
+ u8 *spriteIdLoc = &sItemStorageMenu->spriteId;
if (*spriteIdLoc != SPRITE_NONE)
{
FreeSpriteTilesByTag(TAG_ITEM_ICON);
@@ -1133,7 +1133,7 @@ static void ItemStorage_CreateListMenu(u8 taskId)
s16 *data;
bool32 toss;
u32 i, x;
- const u8* text;
+ const u8 *text;
data = gTasks[taskId].data;
for (i = 0; i <= ITEMPC_WIN_LIST_END; i++)
@@ -1154,7 +1154,7 @@ static void ItemStorage_CreateListMenu(u8 taskId)
gTasks[taskId].func = ItemStorage_ProcessInput;
}
-static const u8* ItemStorage_GetMessage(u16 itemId)
+static const u8 *ItemStorage_GetMessage(u16 itemId)
{
const u8 *string;
diff --git a/src/pokeball.c b/src/pokeball.c
index f203633a58..0f893eda2e 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -44,49 +44,94 @@ static u16 GetBattlerPokeballItemId(u8 battlerId);
// rom const data
-#define GFX_TAG_POKEBALL 55000
-#define GFX_TAG_GREATBALL 55001
-#define GFX_TAG_SAFARIBALL 55002
-#define GFX_TAG_ULTRABALL 55003
-#define GFX_TAG_MASTERBALL 55004
-#define GFX_TAG_NETBALL 55005
-#define GFX_TAG_DIVEBALL 55006
-#define GFX_TAG_NESTBALL 55007
-#define GFX_TAG_REPEATBALL 55008
-#define GFX_TAG_TIMERBALL 55009
-#define GFX_TAG_LUXURYBALL 55010
-#define GFX_TAG_PREMIERBALL 55011
+#define GFX_TAG_POKE_BALL 55000
+#define GFX_TAG_GREAT_BALL 55001
+#define GFX_TAG_ULTRA_BALL 55002
+#define GFX_TAG_MASTER_BALL 55003
+#define GFX_TAG_PREMIER_BALL 55004
+#define GFX_TAG_HEAL_BALL 55005
+#define GFX_TAG_NET_BALL 55006
+#define GFX_TAG_NEST_BALL 55007
+#define GFX_TAG_DIVE_BALL 55008
+#define GFX_TAG_DUSK_BALL 55009
+#define GFX_TAG_TIMER_BALL 55010
+#define GFX_TAG_QUICK_BALL 55011
+#define GFX_TAG_REPEAT_BALL 55012
+#define GFX_TAG_LUXURY_BALL 55013
+#define GFX_TAG_LEVEL_BALL 55014
+#define GFX_TAG_LURE_BALL 55015
+#define GFX_TAG_MOON_BALL 55016
+#define GFX_TAG_FRIEND_BALL 55017
+#define GFX_TAG_LOVE_BALL 55018
+#define GFX_TAG_FAST_BALL 55019
+#define GFX_TAG_HEAVY_BALL 55020
+#define GFX_TAG_DREAM_BALL 55021
+#define GFX_TAG_SAFARI_BALL 55022
+#define GFX_TAG_SPORT_BALL 55023
+#define GFX_TAG_PARK_BALL 55024
+#define GFX_TAG_BEAST_BALL 55025
+#define GFX_TAG_CHERISH_BALL 55026
const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] =
{
- [BALL_POKE] = {gBallGfx_Poke, 384, GFX_TAG_POKEBALL},
- [BALL_GREAT] = {gBallGfx_Great, 384, GFX_TAG_GREATBALL},
- [BALL_SAFARI] = {gBallGfx_Safari, 384, GFX_TAG_SAFARIBALL},
- [BALL_ULTRA] = {gBallGfx_Ultra, 384, GFX_TAG_ULTRABALL},
- [BALL_MASTER] = {gBallGfx_Master, 384, GFX_TAG_MASTERBALL},
- [BALL_NET] = {gBallGfx_Net, 384, GFX_TAG_NETBALL},
- [BALL_DIVE] = {gBallGfx_Dive, 384, GFX_TAG_DIVEBALL},
- [BALL_NEST] = {gBallGfx_Nest, 384, GFX_TAG_NESTBALL},
- [BALL_REPEAT] = {gBallGfx_Repeat, 384, GFX_TAG_REPEATBALL},
- [BALL_TIMER] = {gBallGfx_Timer, 384, GFX_TAG_TIMERBALL},
- [BALL_LUXURY] = {gBallGfx_Luxury, 384, GFX_TAG_LUXURYBALL},
- [BALL_PREMIER] = {gBallGfx_Premier, 384, GFX_TAG_PREMIERBALL},
+ [BALL_POKE] = {gBallGfx_Poke, 384, GFX_TAG_POKE_BALL},
+ [BALL_GREAT] = {gBallGfx_Great, 384, GFX_TAG_GREAT_BALL},
+ [BALL_ULTRA] = {gBallGfx_Ultra, 384, GFX_TAG_ULTRA_BALL},
+ [BALL_MASTER] = {gBallGfx_Master, 384, GFX_TAG_MASTER_BALL},
+ [BALL_PREMIER] = {gBallGfx_Premier, 384, GFX_TAG_PREMIER_BALL},
+ [BALL_HEAL] = {gBallGfx_Heal, 384, GFX_TAG_HEAL_BALL},
+ [BALL_NET] = {gBallGfx_Net, 384, GFX_TAG_NET_BALL},
+ [BALL_NEST] = {gBallGfx_Nest, 384, GFX_TAG_NEST_BALL},
+ [BALL_DIVE] = {gBallGfx_Dive, 384, GFX_TAG_DIVE_BALL},
+ [BALL_DUSK] = {gBallGfx_Dusk, 384, GFX_TAG_DUSK_BALL},
+ [BALL_TIMER] = {gBallGfx_Timer, 384, GFX_TAG_TIMER_BALL},
+ [BALL_QUICK] = {gBallGfx_Quick, 384, GFX_TAG_QUICK_BALL},
+ [BALL_REPEAT] = {gBallGfx_Repeat, 384, GFX_TAG_REPEAT_BALL},
+ [BALL_LUXURY] = {gBallGfx_Luxury, 384, GFX_TAG_LUXURY_BALL},
+ [BALL_LEVEL] = {gBallGfx_Level, 384, GFX_TAG_LEVEL_BALL},
+ [BALL_LURE] = {gBallGfx_Lure, 384, GFX_TAG_LURE_BALL},
+ [BALL_MOON] = {gBallGfx_Moon, 384, GFX_TAG_MOON_BALL},
+ [BALL_FRIEND] = {gBallGfx_Friend, 384, GFX_TAG_FRIEND_BALL},
+ [BALL_LOVE] = {gBallGfx_Love, 384, GFX_TAG_LOVE_BALL},
+ [BALL_FAST] = {gBallGfx_Fast, 384, GFX_TAG_FAST_BALL},
+ [BALL_HEAVY] = {gBallGfx_Heavy, 384, GFX_TAG_HEAVY_BALL},
+ [BALL_DREAM] = {gBallGfx_Dream, 384, GFX_TAG_DREAM_BALL},
+ [BALL_SAFARI] = {gBallGfx_Safari, 384, GFX_TAG_SAFARI_BALL},
+ [BALL_SPORT] = {gBallGfx_Sport, 384, GFX_TAG_SPORT_BALL},
+ [BALL_PARK] = {gBallGfx_Park, 384, GFX_TAG_PARK_BALL},
+ [BALL_BEAST] = {gBallGfx_Beast, 384, GFX_TAG_BEAST_BALL},
+ [BALL_CHERISH] = {gBallGfx_Cherish, 384, GFX_TAG_CHERISH_BALL},
};
const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] =
{
- [BALL_POKE] = {gBallPal_Poke, GFX_TAG_POKEBALL},
- [BALL_GREAT] = {gBallPal_Great, GFX_TAG_GREATBALL},
- [BALL_SAFARI] = {gBallPal_Safari, GFX_TAG_SAFARIBALL},
- [BALL_ULTRA] = {gBallPal_Ultra, GFX_TAG_ULTRABALL},
- [BALL_MASTER] = {gBallPal_Master, GFX_TAG_MASTERBALL},
- [BALL_NET] = {gBallPal_Net, GFX_TAG_NETBALL},
- [BALL_DIVE] = {gBallPal_Dive, GFX_TAG_DIVEBALL},
- [BALL_NEST] = {gBallPal_Nest, GFX_TAG_NESTBALL},
- [BALL_REPEAT] = {gBallPal_Repeat, GFX_TAG_REPEATBALL},
- [BALL_TIMER] = {gBallPal_Timer, GFX_TAG_TIMERBALL},
- [BALL_LUXURY] = {gBallPal_Luxury, GFX_TAG_LUXURYBALL},
- [BALL_PREMIER] = {gBallPal_Premier, GFX_TAG_PREMIERBALL},
+ [BALL_POKE] = {gBallPal_Poke, GFX_TAG_POKE_BALL},
+ [BALL_GREAT] = {gBallPal_Great, GFX_TAG_GREAT_BALL},
+ [BALL_ULTRA] = {gBallPal_Ultra, GFX_TAG_ULTRA_BALL},
+ [BALL_MASTER] = {gBallPal_Master, GFX_TAG_MASTER_BALL},
+ [BALL_PREMIER] = {gBallPal_Premier, GFX_TAG_PREMIER_BALL},
+ [BALL_HEAL] = {gBallPal_Heal, GFX_TAG_HEAL_BALL},
+ [BALL_NET] = {gBallPal_Net, GFX_TAG_NET_BALL},
+ [BALL_NEST] = {gBallPal_Nest, GFX_TAG_NEST_BALL},
+ [BALL_DIVE] = {gBallPal_Dive, GFX_TAG_DIVE_BALL},
+ [BALL_DUSK] = {gBallPal_Dusk, GFX_TAG_DUSK_BALL},
+ [BALL_TIMER] = {gBallPal_Timer, GFX_TAG_TIMER_BALL},
+ [BALL_QUICK] = {gBallPal_Quick, GFX_TAG_QUICK_BALL},
+ [BALL_REPEAT] = {gBallPal_Repeat, GFX_TAG_REPEAT_BALL},
+ [BALL_LUXURY] = {gBallPal_Luxury, GFX_TAG_LUXURY_BALL},
+ [BALL_LEVEL] = {gBallPal_Level, GFX_TAG_LEVEL_BALL},
+ [BALL_LURE] = {gBallPal_Lure, GFX_TAG_LURE_BALL},
+ [BALL_MOON] = {gBallPal_Moon, GFX_TAG_MOON_BALL},
+ [BALL_FRIEND] = {gBallPal_Friend, GFX_TAG_FRIEND_BALL},
+ [BALL_LOVE] = {gBallPal_Love, GFX_TAG_LOVE_BALL},
+ [BALL_FAST] = {gBallPal_Fast, GFX_TAG_FAST_BALL},
+ [BALL_HEAVY] = {gBallPal_Heavy, GFX_TAG_HEAVY_BALL},
+ [BALL_DREAM] = {gBallPal_Dream, GFX_TAG_DREAM_BALL},
+ [BALL_SAFARI] = {gBallPal_Safari, GFX_TAG_SAFARI_BALL},
+ [BALL_SPORT] = {gBallPal_Sport, GFX_TAG_SPORT_BALL},
+ [BALL_PARK] = {gBallPal_Park, GFX_TAG_PARK_BALL},
+ [BALL_BEAST] = {gBallPal_Beast, GFX_TAG_BEAST_BALL},
+ [BALL_CHERISH] = {gBallPal_Cherish, GFX_TAG_CHERISH_BALL},
};
static const struct OamData sBallOamData =
@@ -94,7 +139,7 @@ static const struct OamData sBallOamData =
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -206,8 +251,8 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
{
[BALL_POKE] =
{
- .tileTag = GFX_TAG_POKEBALL,
- .paletteTag = GFX_TAG_POKEBALL,
+ .tileTag = GFX_TAG_POKE_BALL,
+ .paletteTag = GFX_TAG_POKE_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
@@ -216,18 +261,8 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
},
[BALL_GREAT] =
{
- .tileTag = GFX_TAG_GREATBALL,
- .paletteTag = GFX_TAG_GREATBALL,
- .oam = &sBallOamData,
- .anims = sBallAnimSequences,
- .images = NULL,
- .affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_BallThrow,
- },
- [BALL_SAFARI] =
- {
- .tileTag = GFX_TAG_SAFARIBALL,
- .paletteTag = GFX_TAG_SAFARIBALL,
+ .tileTag = GFX_TAG_GREAT_BALL,
+ .paletteTag = GFX_TAG_GREAT_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
@@ -236,8 +271,8 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
},
[BALL_ULTRA] =
{
- .tileTag = GFX_TAG_ULTRABALL,
- .paletteTag = GFX_TAG_ULTRABALL,
+ .tileTag = GFX_TAG_ULTRA_BALL,
+ .paletteTag = GFX_TAG_ULTRA_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
@@ -246,68 +281,8 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
},
[BALL_MASTER] =
{
- .tileTag = GFX_TAG_MASTERBALL,
- .paletteTag = GFX_TAG_MASTERBALL,
- .oam = &sBallOamData,
- .anims = sBallAnimSequences,
- .images = NULL,
- .affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_BallThrow,
- },
- [BALL_NET] =
- {
- .tileTag = GFX_TAG_NETBALL,
- .paletteTag = GFX_TAG_NETBALL,
- .oam = &sBallOamData,
- .anims = sBallAnimSequences,
- .images = NULL,
- .affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_BallThrow,
- },
- [BALL_DIVE] =
- {
- .tileTag = GFX_TAG_DIVEBALL,
- .paletteTag = GFX_TAG_DIVEBALL,
- .oam = &sBallOamData,
- .anims = sBallAnimSequences,
- .images = NULL,
- .affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_BallThrow,
- },
- [BALL_NEST] =
- {
- .tileTag = GFX_TAG_NESTBALL,
- .paletteTag = GFX_TAG_NESTBALL,
- .oam = &sBallOamData,
- .anims = sBallAnimSequences,
- .images = NULL,
- .affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_BallThrow,
- },
- [BALL_REPEAT] =
- {
- .tileTag = GFX_TAG_REPEATBALL,
- .paletteTag = GFX_TAG_REPEATBALL,
- .oam = &sBallOamData,
- .anims = sBallAnimSequences,
- .images = NULL,
- .affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_BallThrow,
- },
- [BALL_TIMER] =
- {
- .tileTag = GFX_TAG_TIMERBALL,
- .paletteTag = GFX_TAG_TIMERBALL,
- .oam = &sBallOamData,
- .anims = sBallAnimSequences,
- .images = NULL,
- .affineAnims = sAffineAnim_BallRotate,
- .callback = SpriteCB_BallThrow,
- },
- [BALL_LUXURY] =
- {
- .tileTag = GFX_TAG_LUXURYBALL,
- .paletteTag = GFX_TAG_LUXURYBALL,
+ .tileTag = GFX_TAG_MASTER_BALL,
+ .paletteTag = GFX_TAG_MASTER_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
@@ -316,8 +291,228 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
},
[BALL_PREMIER] =
{
- .tileTag = GFX_TAG_PREMIERBALL,
- .paletteTag = GFX_TAG_PREMIERBALL,
+ .tileTag = GFX_TAG_PREMIER_BALL,
+ .paletteTag = GFX_TAG_PREMIER_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_HEAL] =
+ {
+ .tileTag = GFX_TAG_HEAL_BALL,
+ .paletteTag = GFX_TAG_HEAL_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_NET] =
+ {
+ .tileTag = GFX_TAG_NET_BALL,
+ .paletteTag = GFX_TAG_NET_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_NEST] =
+ {
+ .tileTag = GFX_TAG_NEST_BALL,
+ .paletteTag = GFX_TAG_NEST_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_DIVE] =
+ {
+ .tileTag = GFX_TAG_DIVE_BALL,
+ .paletteTag = GFX_TAG_DIVE_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_DUSK] =
+ {
+ .tileTag = GFX_TAG_DUSK_BALL,
+ .paletteTag = GFX_TAG_DUSK_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_TIMER] =
+ {
+ .tileTag = GFX_TAG_TIMER_BALL,
+ .paletteTag = GFX_TAG_TIMER_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_QUICK] =
+ {
+ .tileTag = GFX_TAG_QUICK_BALL,
+ .paletteTag = GFX_TAG_QUICK_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_REPEAT] =
+ {
+ .tileTag = GFX_TAG_REPEAT_BALL,
+ .paletteTag = GFX_TAG_REPEAT_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_LUXURY] =
+ {
+ .tileTag = GFX_TAG_LUXURY_BALL,
+ .paletteTag = GFX_TAG_LUXURY_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_LEVEL] =
+ {
+ .tileTag = GFX_TAG_LEVEL_BALL,
+ .paletteTag = GFX_TAG_LEVEL_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_LURE] =
+ {
+ .tileTag = GFX_TAG_LURE_BALL,
+ .paletteTag = GFX_TAG_LURE_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_MOON] =
+ {
+ .tileTag = GFX_TAG_MOON_BALL,
+ .paletteTag = GFX_TAG_MOON_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_FRIEND] =
+ {
+ .tileTag = GFX_TAG_FRIEND_BALL,
+ .paletteTag = GFX_TAG_FRIEND_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_LOVE] =
+ {
+ .tileTag = GFX_TAG_LOVE_BALL,
+ .paletteTag = GFX_TAG_LOVE_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_FAST] =
+ {
+ .tileTag = GFX_TAG_FAST_BALL,
+ .paletteTag = GFX_TAG_FAST_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_HEAVY] =
+ {
+ .tileTag = GFX_TAG_HEAVY_BALL,
+ .paletteTag = GFX_TAG_HEAVY_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_DREAM] =
+ {
+ .tileTag = GFX_TAG_DREAM_BALL,
+ .paletteTag = GFX_TAG_DREAM_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_SAFARI] =
+ {
+ .tileTag = GFX_TAG_SAFARI_BALL,
+ .paletteTag = GFX_TAG_SAFARI_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_SPORT] =
+ {
+ .tileTag = GFX_TAG_SPORT_BALL,
+ .paletteTag = GFX_TAG_SPORT_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_PARK] =
+ {
+ .tileTag = GFX_TAG_PARK_BALL,
+ .paletteTag = GFX_TAG_PARK_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_BEAST] =
+ {
+ .tileTag = GFX_TAG_BEAST_BALL,
+ .paletteTag = GFX_TAG_BEAST_BALL,
+ .oam = &sBallOamData,
+ .anims = sBallAnimSequences,
+ .images = NULL,
+ .affineAnims = sAffineAnim_BallRotate,
+ .callback = SpriteCB_BallThrow,
+ },
+ [BALL_CHERISH] =
+ {
+ .tileTag = GFX_TAG_CHERISH_BALL,
+ .paletteTag = GFX_TAG_CHERISH_BALL,
.oam = &sBallOamData,
.anims = sBallAnimSequences,
.images = NULL,
@@ -337,7 +532,7 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow)
u8 taskId;
gDoingBattleAnim = TRUE;
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = TRUE;
taskId = CreateTask(Task_DoPokeballSendOutAnim, 5);
gTasks[taskId].tPan = pan;
@@ -351,11 +546,8 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow)
static void Task_DoPokeballSendOutAnim(u8 taskId)
{
- u16 throwCaseId;
- u8 battlerId;
- u16 itemId, ballId;
- u8 ballSpriteId;
- bool8 notSendOut = FALSE;
+ u32 throwCaseId, ballId, battlerId, ballSpriteId;
+ bool32 notSendOut = FALSE;
if (gTasks[taskId].tFrames == 0)
{
@@ -365,13 +557,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
throwCaseId = gTasks[taskId].tThrowId;
battlerId = gTasks[taskId].tBattler;
-
- if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
- itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
- else
- itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
-
- ballId = ItemIdToBallId(itemId);
+ ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId));
LoadBallGfx(ballId);
ballSpriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29);
gSprites[ballSpriteId].data[0] = 0x80;
@@ -407,7 +593,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
}
// this will perform an unused ball throw animation
- gSprites[ballSpriteId].data[0] = 0x22;
+ gSprites[ballSpriteId].data[0] = 34;
gSprites[ballSpriteId].data[2] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_X);
gSprites[ballSpriteId].data[4] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_Y) - 16;
gSprites[ballSpriteId].data[5] = -40;
@@ -431,7 +617,7 @@ static void SpriteCB_BallThrow(struct Sprite *sprite)
u8 noOfShakes = gTasks[taskId].tThrowId;
StartSpriteAnim(sprite, 1);
- sprite->affineAnimPaused = 1;
+ sprite->affineAnimPaused = TRUE;
sprite->x += sprite->x2;
sprite->y += sprite->y2;
sprite->x2 = 0;
@@ -475,6 +661,7 @@ static void SpriteCB_BallThrow_ShrinkMon(struct Sprite *sprite)
sprite->data[5]++;
if (sprite->data[5] == 11)
PlaySE(SE_BALL_TRADE);
+
if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded)
{
StartSpriteAnim(sprite, 2);
@@ -644,6 +831,7 @@ static void SpriteCB_BallThrow_Shake(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, 2);
else
StartSpriteAffineAnim(sprite, 1);
+
PlaySE(SE_BALL);
}
break;
@@ -667,7 +855,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
u16 species = gTasks[taskId].tCryTaskSpecies;
u8 battlerId = gTasks[taskId].tCryTaskBattler;
u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId;
- struct Pokemon *mon = (void*)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 16) | (u16)(gTasks[taskId].tCryTaskMonPtr2));
+ struct Pokemon *mon = (void *)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 16) | (u16)(gTasks[taskId].tCryTaskMonPtr2));
switch (gTasks[taskId].tCryTaskState)
{
@@ -758,8 +946,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
if (gMain.inBattle)
{
- struct Pokemon *mon;
- u16 species;
+ struct Pokemon *mon, *illusionMon;
s8 pan;
u16 wantedCryCase;
u8 taskId;
@@ -775,7 +962,6 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
pan = -25;
}
- species = GetMonData(mon, MON_DATA_SPECIES);
if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
&& IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive)
{
@@ -800,7 +986,13 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
gBattleSpritesDataPtr->healthBoxesData[battlerId].waitForCry = TRUE;
taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3);
- gTasks[taskId].tCryTaskSpecies = species;
+
+ illusionMon = GetIllusionMonPtr(battlerId);
+ if (illusionMon != NULL)
+ gTasks[taskId].tCryTaskSpecies = GetMonData(illusionMon, MON_DATA_SPECIES);
+ else
+ gTasks[taskId].tCryTaskSpecies = GetMonData(mon, MON_DATA_SPECIES);
+
gTasks[taskId].tCryTaskPan = pan;
gTasks[taskId].tCryTaskWantedCry = wantedCryCase;
gTasks[taskId].tCryTaskBattler = battlerId;
@@ -864,13 +1056,13 @@ static void HandleBallAnimEnd(struct Sprite *sprite)
gSprites[gBattlerSpriteIds[battlerId]].y2 = 0;
gDoingBattleAnim = FALSE;
- gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = FALSE;
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
for (doneBattlers = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == 0)
+ if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == FALSE)
doneBattlers++;
}
if (doneBattlers == MAX_BATTLERS_COUNT)
@@ -902,7 +1094,7 @@ static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite)
DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
DestroySpriteAndFreeResources(sprite);
if (gMain.inBattle)
- gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = FALSE;
}
}
@@ -1067,7 +1259,7 @@ static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, subpriority);
// sDelay re-used to store task id but never read
- sprite->sDelay = LaunchBallFadeMonTaskForPokeball(1, monPalNum, selectedPalettes);
+ sprite->sDelay = LaunchBallFadeMonTaskForPokeball(TRUE, monPalNum, selectedPalettes);
sprite->callback = SpriteCB_ReleasedMonFlyOut;
gSprites[spriteId].invisible = FALSE;
StartSpriteAffineAnim(&gSprites[spriteId], BATTLER_AFFINE_EMERGE);
@@ -1134,7 +1326,6 @@ static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite)
#undef sFinalMonY
#undef sTrigIdx
-
#define sTimer data[5]
u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 delay, u32 fadePalettes)
@@ -1171,7 +1362,7 @@ static void SpriteCB_TradePokeball(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, subpriority);
// sDelay re-used to store task id but never read
- sprite->sDelay = LaunchBallFadeMonTaskForPokeball(1, monPalNum, selectedPalettes);
+ sprite->sDelay = LaunchBallFadeMonTaskForPokeball(TRUE, monPalNum, selectedPalettes);
sprite->callback = SpriteCB_TradePokeballSendOff;
#ifdef BUGFIX
// FIX: If this is used on a sprite that has previously had an affine animation, it will not
@@ -1224,7 +1415,8 @@ static void SpriteCB_TradePokeballEnd(struct Sprite *sprite)
#undef sFadePalsHi
#undef sTimer
-static void Unref_DestroySpriteAndFreeResources(struct Sprite *sprite)
+// Unreferenced here and in RS, but used in FRLG, possibly by mistake.
+static void DestroySpriteAndFreeResources_Ball(struct Sprite *sprite)
{
DestroySpriteAndFreeResources(sprite);
}
@@ -1311,13 +1503,13 @@ void LoadBallGfx(u8 ballId)
LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[ballId]);
LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[ballId]);
}
+
switch (ballId)
{
- case BALL_DIVE:
- case BALL_LUXURY:
- case BALL_PREMIER:
- break;
- default:
+ case BALL_POKE ... BALL_MASTER:
+ case BALL_NET ... BALL_NEST:
+ case BALL_REPEAT:
+ case BALL_SAFARI:
var = GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag);
LZDecompressVram(gOpenPokeballGfx, (void *)(OBJ_VRAM0 + 0x100 + var * 32));
break;
@@ -1332,8 +1524,16 @@ void FreeBallGfx(u8 ballId)
static u16 GetBattlerPokeballItemId(u8 battlerId)
{
+ struct Pokemon *mon, *illusionMon;
+
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
- return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
+ mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
else
- return GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
+ mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
+
+ illusionMon = GetIllusionMonPtr(battlerId);
+ if (illusionMon != NULL)
+ mon = illusionMon;
+
+ return GetMonData(mon, MON_DATA_POKEBALL);
}
diff --git a/src/pokeblock.c b/src/pokeblock.c
index 58348e1cc5..cf0513f80e 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -237,7 +237,7 @@ static const struct OamData sOamData_PokeblockCase =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -1148,7 +1148,7 @@ static void ShowPokeblockActionsWindow(u8 taskId)
tWindowId = WIN_ACTIONS;
DestroyScrollArrows();
- DrawStdFrameWithCustomTileAndPalette(tWindowId, 0, 1, 0xE);
+ DrawStdFrameWithCustomTileAndPalette(tWindowId, FALSE, 1, 0xE);
PrintMenuActionTextsInUpperLeftCorner(tWindowId, sPokeblockMenu->numActions, sPokeblockMenuActions, sPokeblockMenu->pokeblockActionIds);
InitMenuInUpperLeftCornerNormal(tWindowId, sPokeblockMenu->numActions, 0);
PutWindowTilemap(tWindowId);
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
index 719486ad2f..00597e8d38 100644
--- a/src/pokeblock_feed.c
+++ b/src/pokeblock_feed.c
@@ -466,7 +466,7 @@ static const struct WindowTemplate sWindowTemplates[] =
};
// - 1 excludes PBLOCK_CLR_NONE
-static const u32* const sPokeblocksPals[] =
+static const u32 *const sPokeblocksPals[] =
{
[PBLOCK_CLR_RED - 1] = gPokeblockRed_Pal,
[PBLOCK_CLR_BLUE - 1] = gPokeblockBlue_Pal,
@@ -545,7 +545,7 @@ static const struct OamData sOamData_Pokeblock =
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -660,7 +660,7 @@ static bool8 LoadPokeblockFeedScene(void)
gMain.state++;
break;
case 10:
- DrawStdFrameWithCustomTileAndPalette(0, 1, 1, 14);
+ DrawStdFrameWithCustomTileAndPalette(0, TRUE, 1, 14);
gMain.state++;
break;
case 11:
@@ -872,7 +872,7 @@ static void Task_PrintAtePokeblockMessage(u8 taskId)
StringExpandPlaceholders(gStringVar4, gText_Var1DisdainfullyAteVar2);
gTextFlags.canABSpeedUpPrint = TRUE;
- AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
gTasks[taskId].func = Task_WaitForAtePokeblockMessage;
}
@@ -905,7 +905,7 @@ static void Task_FadeOutPokeblockFeed(u8 taskId)
#define sAccel data[1]
#define sSpecies data[2]
-static u8 CreateMonSprite(struct Pokemon* mon)
+static u8 CreateMonSprite(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES2);
u8 spriteId = CreateSprite(&gMultiuseSpriteTemplate, MON_X, MON_Y, 2);
@@ -937,7 +937,7 @@ static void StartMonJumpForPokeblock(u8 spriteId)
gSprites[spriteId].callback = SpriteCB_MonJumpForPokeblock;
}
-static void SpriteCB_MonJumpForPokeblock(struct Sprite* sprite)
+static void SpriteCB_MonJumpForPokeblock(struct Sprite *sprite)
{
sprite->x += 4;
sprite->y += sprite->sSpeed;
@@ -982,7 +982,7 @@ static u8 CreatePokeblockSprite(void)
return spriteId;
}
-static void SpriteCB_ThrownPokeblock(struct Sprite* sprite)
+static void SpriteCB_ThrownPokeblock(struct Sprite *sprite)
{
sprite->x -= 4;
sprite->y += sprite->sSpeed;
diff --git a/src/pokedex.c b/src/pokedex.c
index f4ba4c41ab..4b6ce78cad 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -239,9 +239,9 @@ static void SpriteCB_RotatingPokeBall(struct Sprite *sprite);
static void SpriteCB_SeenOwnInfo(struct Sprite *sprite);
static void SpriteCB_DexListStartMenuCursor(struct Sprite *sprite);
static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite);
-static u8 LoadInfoScreen(struct PokedexListItem*, u8 monSpriteId);
+static u8 LoadInfoScreen(struct PokedexListItem *, u8 monSpriteId);
static bool8 IsInfoScreenScrolling(u8);
-static u8 StartInfoScreenScroll(struct PokedexListItem*, u8);
+static u8 StartInfoScreenScroll(struct PokedexListItem *, u8);
static void Task_LoadInfoScreen(u8);
static void Task_HandleInfoScreenInput(u8);
static void Task_SwitchScreensFromInfoScreen(u8);
@@ -270,6 +270,7 @@ static void PrintMonHeight(u16 height, u8 left, u8 top);
static void PrintMonWeight(u16 weight, u8 left, u8 top);
static void ResetOtherVideoRegisters(u16);
static u8 PrintCryScreenSpeciesName(u8, u16, u8, u8);
+static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top);
static void DrawFootprint(u8 windowId, u16 dexNum);
static u16 CreateSizeScreenTrainerPic(u16, s16, s16, s8);
static u16 GetNextPosition(u8, u16, u16, u16);
@@ -294,10 +295,10 @@ static void PrintSearchParameterText(u8);
static u8 GetSearchModeSelection(u8 taskId, u8 option);
static void SetDefaultSearchModeAndOrder(u8);
static void CreateSearchParameterScrollArrows(u8);
-static void EraseAndPrintSearchTextBox(const u8*);
+static void EraseAndPrintSearchTextBox(const u8 *);
static void EraseSelectorArrow(u32);
static void PrintSelectorArrow(u32);
-static void PrintSearchParameterTitle(u32, const u8*);
+static void PrintSearchParameterTitle(u32, const u8 *);
static void ClearSearchParameterBoxText(void);
// const rom data
@@ -308,7 +309,7 @@ static const struct OamData sOamData_ScrollBar =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -325,7 +326,7 @@ static const struct OamData sOamData_ScrollArrow =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x8),
.x = 0,
@@ -342,7 +343,7 @@ static const struct OamData sOamData_InterfaceText =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
@@ -359,7 +360,7 @@ static const struct OamData sOamData_RotatingPokeBall =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_WINDOW,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -376,7 +377,7 @@ static const struct OamData sOamData_SeenOwnText =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -393,7 +394,7 @@ static const struct OamData sOamData_Dex8x16 =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x16),
.x = 0,
@@ -1393,6 +1394,7 @@ static const struct SearchOptionText sDexSearchTypeOptions[NUMBER_OF_MON_TYPES +
{gText_DexEmptyString, gTypeNames[TYPE_ICE]},
{gText_DexEmptyString, gTypeNames[TYPE_DRAGON]},
{gText_DexEmptyString, gTypeNames[TYPE_DARK]},
+ {gText_DexEmptyString, gTypeNames[TYPE_FAIRY]},
{},
};
@@ -1427,6 +1429,7 @@ static const u8 sDexSearchTypeIds[NUMBER_OF_MON_TYPES] =
TYPE_ICE,
TYPE_DRAGON,
TYPE_DARK,
+ TYPE_FAIRY,
};
// Number pairs are the task data for tracking the cursor pos and scroll offset of each option list
@@ -2152,7 +2155,7 @@ static void LoadPokedexBgPalette(bool8 isSearchResults)
static void FreeWindowAndBgBuffers(void)
{
- void* tilemapBuffer;
+ void *tilemapBuffer;
FreeAllWindowBuffers();
tilemapBuffer = GetBgTilemapBuffer(0);
@@ -2240,7 +2243,7 @@ static void CreatePokedexList(u8 dexMode, u8 order)
{
temp_dexNum = gPokedexOrder_Alphabetical[i];
- if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN))
+ if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN))
{
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
@@ -2254,7 +2257,7 @@ static void CreatePokedexList(u8 dexMode, u8 order)
{
temp_dexNum = gPokedexOrder_Weight[i];
- if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
+ if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
@@ -2268,7 +2271,7 @@ static void CreatePokedexList(u8 dexMode, u8 order)
{
temp_dexNum = gPokedexOrder_Weight[i];
- if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
+ if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
@@ -2282,7 +2285,7 @@ static void CreatePokedexList(u8 dexMode, u8 order)
{
temp_dexNum = gPokedexOrder_Height[i];
- if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
+ if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
@@ -2296,7 +2299,7 @@ static void CreatePokedexList(u8 dexMode, u8 order)
{
temp_dexNum = gPokedexOrder_Height[i];
- if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
+ if (temp_dexNum <= NATIONAL_DEX_COUNT && (!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
@@ -2315,7 +2318,7 @@ static void CreatePokedexList(u8 dexMode, u8 order)
}
}
-static void PrintMonDexNumAndName(u8 windowId, u8 fontId, const u8* str, u8 left, u8 top)
+static void PrintMonDexNumAndName(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top)
{
u8 color[3];
@@ -2438,7 +2441,7 @@ static void CreateCaughtBall(bool16 owned, u8 x, u8 y, u16 unused)
static u8 CreateMonName(u16 num, u8 left, u8 top)
{
- const u8* str;
+ const u8 *str;
num = NationalPokedexNumToSpecies(num);
if (num)
@@ -3158,7 +3161,7 @@ static void SpriteCB_DexListStartMenuCursor(struct Sprite *sprite)
}
}
-static void PrintInfoScreenText(const u8* str, u8 left, u8 top)
+static void PrintInfoScreenText(const u8 *str, u8 left, u8 top)
{
u8 color[3];
color[0] = TEXT_COLOR_TRANSPARENT;
@@ -3175,7 +3178,7 @@ static void PrintInfoScreenText(const u8* str, u8 left, u8 top)
#define tMonSpriteId data[4]
#define tTrainerSpriteId data[5]
-static u8 LoadInfoScreen(struct PokedexListItem* item, u8 monSpriteId)
+static u8 LoadInfoScreen(struct PokedexListItem *item, u8 monSpriteId)
{
u8 taskId;
@@ -3870,7 +3873,7 @@ static void HighlightScreenSelectBarItem(u8 selectedScreen, u16 unused)
{
u8 i;
u8 j;
- u16* ptr = GetBgTilemapBuffer(1);
+ u16 *ptr = GetBgTilemapBuffer(1);
for (i = 0; i < SCREEN_COUNT; i++)
{
@@ -3897,7 +3900,7 @@ static void HighlightSubmenuScreenSelectBarItem(u8 a, u16 b)
{
u8 i;
u8 j;
- u16* ptr = GetBgTilemapBuffer(1);
+ u16 *ptr = GetBgTilemapBuffer(1);
for (i = 0; i < 4; i++)
{
@@ -4480,7 +4483,7 @@ static u8 PrintCryScreenSpeciesName(u8 windowId, u16 num, u8 left, u8 top)
return i;
}
-static void UnusedPrintMonName(u8 windowId, const u8* name, u8 left, u8 top)
+static void UnusedPrintMonName(u8 windowId, const u8 *name, u8 left, u8 top)
{
u8 str[POKEMON_NAME_LENGTH + 1];
u8 i;
@@ -4500,13 +4503,14 @@ static void UnusedPrintMonName(u8 windowId, const u8* name, u8 left, u8 top)
PrintInfoSubMenuText(windowId, str, left, top);
}
-static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top)
+// Unused in the English version, used to print height/weight in versions which use metric system.
+static void PrintDecimalNum(u8 windowId, u16 num, u8 left, u8 top)
{
u8 str[6];
bool8 outputted = FALSE;
u8 result;
- result = b / 1000;
+ result = num / 1000;
if (result == 0)
{
str[0] = CHAR_SPACER;
@@ -4518,7 +4522,7 @@ static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top)
outputted = TRUE;
}
- result = (b % 1000) / 100;
+ result = (num % 1000) / 100;
if (result == 0 && !outputted)
{
str[1] = CHAR_SPACER;
@@ -4530,9 +4534,9 @@ static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top)
outputted = TRUE;
}
- str[2] = CHAR_0 + ((b % 1000) % 100) / 10;
- str[3] = CHAR_PERIOD;
- str[4] = CHAR_0 + ((b % 1000) % 100) % 10;
+ str[2] = CHAR_0 + ((num % 1000) % 100) / 10;
+ str[3] = CHAR_DEC_SEPARATOR;
+ str[4] = CHAR_0 + ((num % 1000) % 100) % 10;
str[5] = EOS;
PrintInfoSubMenuText(windowId, str, left, top);
}
@@ -4540,7 +4544,7 @@ static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top)
static void DrawFootprint(u8 windowId, u16 dexNum)
{
u8 footprint[32 * 4] = {0};
- const u8 * footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)];
+ const u8 *footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)];
u32 i, j, tileIdx = 0;
if (footprintGfx != NULL)
@@ -4851,7 +4855,7 @@ static void Task_LoadSearchMenu(u8 taskId)
static void FreeSearchWindowAndBgBuffers(void)
{
- void* tilemapBuffer;
+ void *tilemapBuffer;
FreeAllWindowBuffers();
tilemapBuffer = GetBgTilemapBuffer(0);
@@ -5390,7 +5394,7 @@ static void DrawOrEraseSearchParameterBox(bool8 erase)
{
u16 i;
u16 j;
- u16* ptr = GetBgTilemapBuffer(3);
+ u16 *ptr = GetBgTilemapBuffer(3);
if (!erase)
{
@@ -5583,7 +5587,7 @@ static void CreateSearchParameterScrollArrows(u8 taskId)
#undef sTaskId
#undef sIsDownArrow
-static void EraseAndPrintSearchTextBox(const u8* str)
+static void EraseAndPrintSearchTextBox(const u8 *str)
{
ClearSearchMenuRect(8, 120, 224, 32);
PrintSearchText(str, 8, 121);
@@ -5599,7 +5603,7 @@ static void PrintSelectorArrow(u32 y)
PrintSearchText(gText_SelectorArrow, 144, y * 16 + 9);
}
-static void PrintSearchParameterTitle(u32 y, const u8* str)
+static void PrintSearchParameterTitle(u32 y, const u8 *str)
{
PrintSearchText(str, 152, y * 16 + 9);
}
diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c
index 28e2bd1632..406d1377d6 100644
--- a/src/pokedex_cry_screen.c
+++ b/src/pokedex_cry_screen.c
@@ -234,7 +234,7 @@ bool8 LoadCryWaveformWindow(struct CryScreenWindow *window, u8 windowId)
if (!sDexCryScreen)
{
sDexCryScreen = AllocZeroed(sizeof(*sDexCryScreen));
- sCryWaveformWindowTiledata = (u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA);
+ sCryWaveformWindowTiledata = (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA);
}
sDexCryScreen->unk = window->unk0;
diff --git a/src/pokemon.c b/src/pokemon.c
index f3d594f33f..8c5b56cc3f 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -9,6 +9,7 @@
#include "battle_pyramid.h"
#include "battle_setup.h"
#include "battle_tower.h"
+#include "battle_z_move.h"
#include "data.h"
#include "event_data.h"
#include "evolution_scene.h"
@@ -49,6 +50,7 @@
#include "constants/songs.h"
#include "constants/trainers.h"
#include "constants/weather.h"
+#include "constants/battle_config.h"
struct SpeciesItem
{
@@ -61,10 +63,9 @@ static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 perso
static void EncryptBoxMon(struct BoxPokemon *boxMon);
static void DecryptBoxMon(struct BoxPokemon *boxMon);
static void Task_PlayMapChosenOrBattleBGM(u8 taskId);
-static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
static bool8 ShouldSkipFriendshipChange(void);
-static u8 SendMonToPC(struct Pokemon* mon);
+static u8 SendMonToPC(struct Pokemon *mon);
static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv);
void TrySpecialOverworldEvo();
@@ -135,7 +136,9 @@ static const u16 sSpeciesToHoennPokedexNum[NUM_SPECIES - 1] =
SPECIES_TO_HOENN(RALTS),
SPECIES_TO_HOENN(KIRLIA),
SPECIES_TO_HOENN(GARDEVOIR),
+#if P_NEW_POKEMON == TRUE
SPECIES_TO_HOENN(GALLADE),
+#endif
SPECIES_TO_HOENN(SURSKIT),
SPECIES_TO_HOENN(MASQUERAIN),
SPECIES_TO_HOENN(SHROOMISH),
@@ -165,7 +168,9 @@ static const u16 sSpeciesToHoennPokedexNum[NUM_SPECIES - 1] =
SPECIES_TO_HOENN(GRAVELER),
SPECIES_TO_HOENN(GOLEM),
SPECIES_TO_HOENN(NOSEPASS),
+#if P_NEW_POKEMON == TRUE
SPECIES_TO_HOENN(PROBOPASS),
+#endif
SPECIES_TO_HOENN(SKITTY),
SPECIES_TO_HOENN(DELCATTY),
SPECIES_TO_HOENN(ZUBAT),
@@ -189,7 +194,9 @@ static const u16 sSpeciesToHoennPokedexNum[NUM_SPECIES - 1] =
SPECIES_TO_HOENN(MINUN),
SPECIES_TO_HOENN(MAGNEMITE),
SPECIES_TO_HOENN(MAGNETON),
+#if P_NEW_POKEMON == TRUE
SPECIES_TO_HOENN(MAGNEZONE),
+#endif
SPECIES_TO_HOENN(VOLTORB),
SPECIES_TO_HOENN(ELECTRODE),
SPECIES_TO_HOENN(VOLBEAT),
@@ -200,9 +207,13 @@ static const u16 sSpeciesToHoennPokedexNum[NUM_SPECIES - 1] =
SPECIES_TO_HOENN(BELLOSSOM),
SPECIES_TO_HOENN(DODUO),
SPECIES_TO_HOENN(DODRIO),
+#if P_NEW_POKEMON == TRUE
SPECIES_TO_HOENN(BUDEW),
SPECIES_TO_HOENN(ROSELIA),
SPECIES_TO_HOENN(ROSERADE),
+#else
+ SPECIES_TO_HOENN(ROSELIA),
+#endif
SPECIES_TO_HOENN(GULPIN),
SPECIES_TO_HOENN(SWALOT),
SPECIES_TO_HOENN(CARVANHA),
@@ -258,9 +269,13 @@ static const u16 sSpeciesToHoennPokedexNum[NUM_SPECIES - 1] =
SPECIES_TO_HOENN(BANETTE),
SPECIES_TO_HOENN(DUSKULL),
SPECIES_TO_HOENN(DUSCLOPS),
+#if P_NEW_POKEMON == TRUE
SPECIES_TO_HOENN(DUSKNOIR),
SPECIES_TO_HOENN(TROPIUS),
SPECIES_TO_HOENN(CHINGLING),
+#else
+ SPECIES_TO_HOENN(TROPIUS),
+#endif
SPECIES_TO_HOENN(CHIMECHO),
SPECIES_TO_HOENN(ABSOL),
SPECIES_TO_HOENN(VULPIX),
@@ -281,10 +296,14 @@ static const u16 sSpeciesToHoennPokedexNum[NUM_SPECIES - 1] =
SPECIES_TO_HOENN(HERACROSS),
SPECIES_TO_HOENN(RHYHORN),
SPECIES_TO_HOENN(RHYDON),
+#if P_NEW_POKEMON == TRUE
SPECIES_TO_HOENN(RHYPERIOR),
+#endif
SPECIES_TO_HOENN(SNORUNT),
SPECIES_TO_HOENN(GLALIE),
+#if P_NEW_POKEMON == TRUE
SPECIES_TO_HOENN(FROSLASS),
+#endif
SPECIES_TO_HOENN(SPHEAL),
SPECIES_TO_HOENN(SEALEO),
SPECIES_TO_HOENN(WALREIN),
@@ -706,6 +725,7 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] =
SPECIES_TO_NATIONAL(RAYQUAZA),
SPECIES_TO_NATIONAL(JIRACHI),
SPECIES_TO_NATIONAL(DEOXYS),
+#if P_NEW_POKEMON == TRUE
SPECIES_TO_NATIONAL(TURTWIG),
SPECIES_TO_NATIONAL(GROTLE),
SPECIES_TO_NATIONAL(TORTERRA),
@@ -1352,6 +1372,7 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] =
[SPECIES_PIKACHU_WORLD_CAP - 1] = NATIONAL_DEX_PIKACHU,
// Pichu
[SPECIES_PICHU_SPIKY_EARED - 1] = NATIONAL_DEX_PICHU,
+#endif
// Unown
[SPECIES_UNOWN_B - 1] = NATIONAL_DEX_UNOWN,
[SPECIES_UNOWN_C - 1] = NATIONAL_DEX_UNOWN,
@@ -1388,6 +1409,7 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] =
[SPECIES_DEOXYS_ATTACK - 1] = NATIONAL_DEX_DEOXYS,
[SPECIES_DEOXYS_DEFENSE - 1] = NATIONAL_DEX_DEOXYS,
[SPECIES_DEOXYS_SPEED - 1] = NATIONAL_DEX_DEOXYS,
+#if P_NEW_POKEMON == TRUE
// Burmy
[SPECIES_BURMY_SANDY_CLOAK - 1] = NATIONAL_DEX_BURMY,
[SPECIES_BURMY_TRASH_CLOAK - 1] = NATIONAL_DEX_BURMY,
@@ -1619,6 +1641,7 @@ static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] =
// Calyrex
[SPECIES_CALYREX_ICE_RIDER - 1] = NATIONAL_DEX_CALYREX,
[SPECIES_CALYREX_SHADOW_RIDER - 1] = NATIONAL_DEX_CALYREX,
+#endif
};
// Assigns all Hoenn Dex Indexes to a National Dex Index
@@ -1655,7 +1678,9 @@ static const u16 sHoennToNationalOrder[HOENN_DEX_COUNT - 1] =
HOENN_TO_NATIONAL(RALTS),
HOENN_TO_NATIONAL(KIRLIA),
HOENN_TO_NATIONAL(GARDEVOIR),
+#if P_NEW_POKEMON == TRUE
HOENN_TO_NATIONAL(GALLADE),
+#endif
HOENN_TO_NATIONAL(SURSKIT),
HOENN_TO_NATIONAL(MASQUERAIN),
HOENN_TO_NATIONAL(SHROOMISH),
@@ -1685,7 +1710,9 @@ static const u16 sHoennToNationalOrder[HOENN_DEX_COUNT - 1] =
HOENN_TO_NATIONAL(GRAVELER),
HOENN_TO_NATIONAL(GOLEM),
HOENN_TO_NATIONAL(NOSEPASS),
+#if P_NEW_POKEMON == TRUE
HOENN_TO_NATIONAL(PROBOPASS),
+#endif
HOENN_TO_NATIONAL(SKITTY),
HOENN_TO_NATIONAL(DELCATTY),
HOENN_TO_NATIONAL(ZUBAT),
@@ -1709,7 +1736,9 @@ static const u16 sHoennToNationalOrder[HOENN_DEX_COUNT - 1] =
HOENN_TO_NATIONAL(MINUN),
HOENN_TO_NATIONAL(MAGNEMITE),
HOENN_TO_NATIONAL(MAGNETON),
+#if P_NEW_POKEMON == TRUE
HOENN_TO_NATIONAL(MAGNEZONE),
+#endif
HOENN_TO_NATIONAL(VOLTORB),
HOENN_TO_NATIONAL(ELECTRODE),
HOENN_TO_NATIONAL(VOLBEAT),
@@ -1720,9 +1749,13 @@ static const u16 sHoennToNationalOrder[HOENN_DEX_COUNT - 1] =
HOENN_TO_NATIONAL(BELLOSSOM),
HOENN_TO_NATIONAL(DODUO),
HOENN_TO_NATIONAL(DODRIO),
+#if P_NEW_POKEMON == TRUE
HOENN_TO_NATIONAL(BUDEW),
HOENN_TO_NATIONAL(ROSELIA),
HOENN_TO_NATIONAL(ROSERADE),
+#else
+ HOENN_TO_NATIONAL(ROSELIA),
+#endif
HOENN_TO_NATIONAL(GULPIN),
HOENN_TO_NATIONAL(SWALOT),
HOENN_TO_NATIONAL(CARVANHA),
@@ -1778,9 +1811,13 @@ static const u16 sHoennToNationalOrder[HOENN_DEX_COUNT - 1] =
HOENN_TO_NATIONAL(BANETTE),
HOENN_TO_NATIONAL(DUSKULL),
HOENN_TO_NATIONAL(DUSCLOPS),
+#if P_NEW_POKEMON == TRUE
HOENN_TO_NATIONAL(DUSKNOIR),
HOENN_TO_NATIONAL(TROPIUS),
HOENN_TO_NATIONAL(CHINGLING),
+#else
+ HOENN_TO_NATIONAL(TROPIUS),
+#endif
HOENN_TO_NATIONAL(CHIMECHO),
HOENN_TO_NATIONAL(ABSOL),
HOENN_TO_NATIONAL(VULPIX),
@@ -1801,10 +1838,14 @@ static const u16 sHoennToNationalOrder[HOENN_DEX_COUNT - 1] =
HOENN_TO_NATIONAL(HERACROSS),
HOENN_TO_NATIONAL(RHYHORN),
HOENN_TO_NATIONAL(RHYDON),
+#if P_NEW_POKEMON == TRUE
HOENN_TO_NATIONAL(RHYPERIOR),
+#endif
HOENN_TO_NATIONAL(SNORUNT),
HOENN_TO_NATIONAL(GLALIE),
+#if P_NEW_POKEMON == TRUE
HOENN_TO_NATIONAL(FROSLASS),
+#endif
HOENN_TO_NATIONAL(SPHEAL),
HOENN_TO_NATIONAL(SEALEO),
HOENN_TO_NATIONAL(WALREIN),
@@ -1882,7 +1923,11 @@ const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
#include "data/pokemon/experience_tables.h"
#include "data/pokemon/base_stats.h"
#include "data/pokemon/level_up_learnsets.h"
+#if P_NEW_POKEMON == TRUE
#include "data/pokemon/evolution.h"
+#else
+#include "data/pokemon/evolution_old.h"
+#endif
#include "data/pokemon/level_up_learnset_pointers.h"
#include "data/pokemon/form_species_tables.h"
#include "data/pokemon/form_species_table_pointers.h"
@@ -2283,6 +2328,7 @@ static const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] =
[SPECIES_JIRACHI - 1] = ANIM_SWING_CONVEX,
[SPECIES_DEOXYS - 1] = ANIM_H_PIVOT,
+#if P_NEW_POKEMON == TRUE
// Gen 4
[SPECIES_TURTWIG - 1] = ANIM_V_SLIDE,
[SPECIES_GROTLE - 1] = ANIM_H_SLIDE,
@@ -2835,6 +2881,7 @@ static const u8 sMonFrontAnimIdsTable[NUM_SPECIES - 1] =
[SPECIES_ARCEUS_DRAGON - 1] = ANIM_CIRCULAR_VIBRATE,
[SPECIES_ARCEUS_DARK - 1] = ANIM_CIRCULAR_VIBRATE,
[SPECIES_ARCEUS_FAIRY - 1] = ANIM_CIRCULAR_VIBRATE,
+#endif
};
static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] =
@@ -2894,8 +2941,10 @@ static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] =
[SPECIES_SALAMENCE - 1] = 70,
[SPECIES_KYOGRE - 1] = 60,
[SPECIES_RAYQUAZA - 1] = 60,
+#if P_NEW_POKEMON == TRUE
[SPECIES_TAPU_FINI - 1] = 5,
[SPECIES_ROTOM_FAN - 1] = 7,
+#endif
};
#define PP_UP_SHIFTS(val) val, (val) << 2, (val) << 4, (val) << 6
@@ -2951,27 +3000,6 @@ const u16 gLinkPlayerFacilityClasses[NUM_MALE_LINK_FACILITY_CLASSES + NUM_FEMALE
FACILITY_CLASS_BEAUTY
};
-static const u8 sHoldEffectToType[][2] =
-{
- {HOLD_EFFECT_BUG_POWER, TYPE_BUG},
- {HOLD_EFFECT_STEEL_POWER, TYPE_STEEL},
- {HOLD_EFFECT_GROUND_POWER, TYPE_GROUND},
- {HOLD_EFFECT_ROCK_POWER, TYPE_ROCK},
- {HOLD_EFFECT_GRASS_POWER, TYPE_GRASS},
- {HOLD_EFFECT_DARK_POWER, TYPE_DARK},
- {HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING},
- {HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC},
- {HOLD_EFFECT_WATER_POWER, TYPE_WATER},
- {HOLD_EFFECT_FLYING_POWER, TYPE_FLYING},
- {HOLD_EFFECT_POISON_POWER, TYPE_POISON},
- {HOLD_EFFECT_ICE_POWER, TYPE_ICE},
- {HOLD_EFFECT_GHOST_POWER, TYPE_GHOST},
- {HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC},
- {HOLD_EFFECT_FIRE_POWER, TYPE_FIRE},
- {HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON},
- {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL},
-};
-
const struct SpriteTemplate gBattlerSpriteTemplates[MAX_BATTLERS_COUNT] =
{
[B_POSITION_PLAYER_LEFT] = {
@@ -2990,7 +3018,7 @@ const struct SpriteTemplate gBattlerSpriteTemplates[MAX_BATTLERS_COUNT] =
.anims = NULL,
.images = gBattlerPicTable_OpponentLeft,
.affineAnims = gAffineAnims_BattleSpriteOpponentSide,
- .callback = SpriteCb_WildMon,
+ .callback = SpriteCB_WildMon,
},
[B_POSITION_PLAYER_RIGHT] = {
.tileTag = TAG_NONE,
@@ -3008,7 +3036,7 @@ const struct SpriteTemplate gBattlerSpriteTemplates[MAX_BATTLERS_COUNT] =
.anims = NULL,
.images = gBattlerPicTable_OpponentRight,
.affineAnims = gAffineAnims_BattleSpriteOpponentSide,
- .callback = SpriteCb_WildMon
+ .callback = SpriteCB_WildMon
},
};
@@ -3120,7 +3148,7 @@ static const u8 sGetMonDataEVConstants[] =
// For stat-raising items
static const u8 sStatsToRaise[] =
{
- STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC
+ STAT_ATK, STAT_ATK, STAT_DEF, STAT_SPEED, STAT_SPATK, STAT_SPDEF, STAT_ACC
};
// 3 modifiers each for how much to change friendship for different ranges
@@ -3164,7 +3192,7 @@ static const struct OamData sOamData_64x64 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -3255,8 +3283,6 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
else
personality = Random32();
- SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality);
-
// Determine original trainer ID
if (otIdType == OT_ID_RANDOM_NO_SHINY)
{
@@ -3278,8 +3304,21 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
| (gSaveBlock2Ptr->playerTrainerId[1] << 8)
| (gSaveBlock2Ptr->playerTrainerId[2] << 16)
| (gSaveBlock2Ptr->playerTrainerId[3] << 24);
+
+ if (CheckBagHasItem(ITEM_SHINY_CHARM, 1))
+ {
+ u32 shinyValue;
+ u32 rolls = 0;
+ do
+ {
+ personality = Random32();
+ shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality);
+ rolls++;
+ } while (shinyValue >= SHINY_ODDS && rolls < I_SHINY_CHARM_REROLLS);
+ }
}
+ SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality);
SetBoxMonData(boxMon, MON_DATA_OT_ID, &value);
checksum = CalculateBoxMonChecksum(boxMon);
@@ -3684,7 +3723,7 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP
dest->species = GetMonData(mon, MON_DATA_SPECIES, NULL);
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
- if (heldItem == ITEM_ENIGMA_BERRY)
+ if (heldItem == ITEM_ENIGMA_BERRY_E_READER)
heldItem = ITEM_NONE;
dest->heldItem = heldItem;
@@ -4124,280 +4163,6 @@ void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
SetBoxMonData(boxMon, MON_DATA_PP_BONUSES, &ppBonuses);
}
-#define APPLY_STAT_MOD(var, mon, stat, statIndex) \
-{ \
- (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)]][0]; \
- (var) /= (gStatStageRatios)[(mon)->statStages[(statIndex)]][1]; \
-}
-
-s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 battlerIdAtk, u8 battlerIdDef)
-{
- u32 i;
- s32 damage = 0;
- s32 damageHelper;
- u8 type;
- u16 attack, defense;
- u16 spAttack, spDefense;
- u8 defenderHoldEffect;
- u8 defenderHoldEffectParam;
- u8 attackerHoldEffect;
- u8 attackerHoldEffectParam;
-
- if (!powerOverride)
- gBattleMovePower = gBattleMoves[move].power;
- else
- gBattleMovePower = powerOverride;
-
- if (!typeOverride)
- type = gBattleMoves[move].type;
- else
- type = typeOverride & DYNAMIC_TYPE_MASK;
-
- attack = attacker->attack;
- defense = defender->defense;
- spAttack = attacker->spAttack;
- spDefense = defender->spDefense;
-
- // Get attacker hold item info
- if (attacker->item == ITEM_ENIGMA_BERRY)
- {
- attackerHoldEffect = gEnigmaBerries[battlerIdAtk].holdEffect;
- attackerHoldEffectParam = gEnigmaBerries[battlerIdAtk].holdEffectParam;
- }
- else
- {
- attackerHoldEffect = ItemId_GetHoldEffect(attacker->item);
- attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item);
- }
-
- // Get defender hold item info
- if (defender->item == ITEM_ENIGMA_BERRY)
- {
- defenderHoldEffect = gEnigmaBerries[battlerIdDef].holdEffect;
- defenderHoldEffectParam = gEnigmaBerries[battlerIdDef].holdEffectParam;
- }
- else
- {
- defenderHoldEffect = ItemId_GetHoldEffect(defender->item);
- defenderHoldEffectParam = ItemId_GetHoldEffectParam(defender->item);
- }
-
- if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER)
- attack *= 2;
-
- if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerIdAtk))
- attack = (110 * attack) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerIdDef))
- defense = (110 * defense) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdAtk))
- spAttack = (110 * spAttack) / 100;
- if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdDef))
- spDefense = (110 * spDefense) / 100;
-
- // Apply type-bonus hold item
- for (i = 0; i < ARRAY_COUNT(sHoldEffectToType); i++)
- {
- if (attackerHoldEffect == sHoldEffectToType[i][0]
- && type == sHoldEffectToType[i][1])
- {
- if (IS_TYPE_PHYSICAL(type))
- attack = (attack * (attackerHoldEffectParam + 100)) / 100;
- else
- spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100;
- break;
- }
- }
-
- // Apply boosts from hold items
- if (attackerHoldEffect == HOLD_EFFECT_CHOICE_BAND)
- attack = (150 * attack) / 100;
- if (attackerHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS))
- spAttack = (150 * spAttack) / 100;
- if (defenderHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS))
- spDefense = (150 * spDefense) / 100;
- if (attackerHoldEffect == HOLD_EFFECT_DEEP_SEA_TOOTH && attacker->species == SPECIES_CLAMPERL)
- spAttack *= 2;
- if (defenderHoldEffect == HOLD_EFFECT_DEEP_SEA_SCALE && defender->species == SPECIES_CLAMPERL)
- spDefense *= 2;
- if (attackerHoldEffect == HOLD_EFFECT_LIGHT_BALL && attacker->species == SPECIES_PIKACHU)
- spAttack *= 2;
- if (defenderHoldEffect == HOLD_EFFECT_METAL_POWDER && defender->species == SPECIES_DITTO)
- defense *= 2;
- if (attackerHoldEffect == HOLD_EFFECT_THICK_CLUB && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK))
- attack *= 2;
-
- // Apply abilities / field sports
- if (defender->ability == ABILITY_THICK_FAT && (type == TYPE_FIRE || type == TYPE_ICE))
- spAttack /= 2;
- if (attacker->ability == ABILITY_HUSTLE)
- attack = (150 * attack) / 100;
- if (attacker->ability == ABILITY_PLUS && ABILITY_ON_FIELD2(ABILITY_MINUS))
- spAttack = (150 * spAttack) / 100;
- if (attacker->ability == ABILITY_MINUS && ABILITY_ON_FIELD2(ABILITY_PLUS))
- spAttack = (150 * spAttack) / 100;
- if (attacker->ability == ABILITY_GUTS && attacker->status1)
- attack = (150 * attack) / 100;
- if (defender->ability == ABILITY_MARVEL_SCALE && defender->status1)
- defense = (150 * defense) / 100;
- if (type == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_MUD_SPORT, 0))
- gBattleMovePower /= 2;
- if (type == TYPE_FIRE && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_WATER_SPORT, 0))
- gBattleMovePower /= 2;
- if (type == TYPE_GRASS && attacker->ability == ABILITY_OVERGROW && attacker->hp <= (attacker->maxHP / 3))
- gBattleMovePower = (150 * gBattleMovePower) / 100;
- if (type == TYPE_FIRE && attacker->ability == ABILITY_BLAZE && attacker->hp <= (attacker->maxHP / 3))
- gBattleMovePower = (150 * gBattleMovePower) / 100;
- if (type == TYPE_WATER && attacker->ability == ABILITY_TORRENT && attacker->hp <= (attacker->maxHP / 3))
- gBattleMovePower = (150 * gBattleMovePower) / 100;
- if (type == TYPE_BUG && attacker->ability == ABILITY_SWARM && attacker->hp <= (attacker->maxHP / 3))
- gBattleMovePower = (150 * gBattleMovePower) / 100;
-
- // Self-destruct / Explosion cut defense in half
- if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION)
- defense /= 2;
-
- if (IS_TYPE_PHYSICAL(type))
- {
- if (gCritMultiplier == 2)
- {
- // Critical hit, if attacker has lost attack stat stages then ignore stat drop
- if (attacker->statStages[STAT_ATK] > DEFAULT_STAT_STAGE)
- APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK)
- else
- damage = attack;
- }
- else
- APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK)
-
- damage = damage * gBattleMovePower;
- damage *= (2 * attacker->level / 5 + 2);
-
- if (gCritMultiplier == 2)
- {
- // Critical hit, if defender has gained defense stat stages then ignore stat increase
- if (defender->statStages[STAT_DEF] < DEFAULT_STAT_STAGE)
- APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF)
- else
- damageHelper = defense;
- }
- else
- APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF)
-
- damage = damage / damageHelper;
- damage /= 50;
-
- // Burn cuts attack in half
- if ((attacker->status1 & STATUS1_BURN) && attacker->ability != ABILITY_GUTS)
- damage /= 2;
-
- // Apply Reflect
- if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1)
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
- damage = 2 * (damage / 3);
- else
- damage /= 2;
- }
-
- // Moves hitting both targets do half damage in double battles
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == MOVE_TARGET_BOTH && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
- damage /= 2;
-
- // Moves always do at least 1 damage.
- if (damage == 0)
- damage = 1;
- }
-
- if (type == TYPE_MYSTERY)
- damage = 0; // is ??? type. does 0 damage.
-
- if (IS_TYPE_SPECIAL(type))
- {
- if (gCritMultiplier == 2)
- {
- // Critical hit, if attacker has lost sp. attack stat stages then ignore stat drop
- if (attacker->statStages[STAT_SPATK] > DEFAULT_STAT_STAGE)
- APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK)
- else
- damage = spAttack;
- }
- else
- APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK)
-
- damage = damage * gBattleMovePower;
- damage *= (2 * attacker->level / 5 + 2);
-
- if (gCritMultiplier == 2)
- {
- // Critical hit, if defender has gained sp. defense stat stages then ignore stat increase
- if (defender->statStages[STAT_SPDEF] < DEFAULT_STAT_STAGE)
- APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF)
- else
- damageHelper = spDefense;
- }
- else
- APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF)
-
- damage = (damage / damageHelper);
- damage /= 50;
-
- // Apply Lightscreen
- if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1)
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
- damage = 2 * (damage / 3);
- else
- damage /= 2;
- }
-
- // Moves hitting both targets do half damage in double battles
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == MOVE_TARGET_BOTH && CountAliveMonsInBattle(BATTLE_ALIVE_DEF_SIDE) == 2)
- damage /= 2;
-
- // Are effects of weather negated with cloud nine or air lock
- if (WEATHER_HAS_EFFECT2)
- {
- // Rain weakens Fire, boosts Water
- if (gBattleWeather & B_WEATHER_RAIN_TEMPORARY)
- {
- switch (type)
- {
- case TYPE_FIRE:
- damage /= 2;
- break;
- case TYPE_WATER:
- damage = (15 * damage) / 10;
- break;
- }
- }
-
- // Any weather except sun weakens solar beam
- if ((gBattleWeather & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL)) && gCurrentMove == MOVE_SOLAR_BEAM)
- damage /= 2;
-
- // Sun boosts Fire, weakens Water
- if (gBattleWeather & B_WEATHER_SUN)
- {
- switch (type)
- {
- case TYPE_FIRE:
- damage = (15 * damage) / 10;
- break;
- case TYPE_WATER:
- damage /= 2;
- break;
- }
- }
- }
-
- // Flash fire triggered
- if ((gBattleResources->flags->flags[battlerIdAtk] & RESOURCE_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
- damage = (15 * damage) / 10;
- }
-
- return damage + 2;
-}
-
u8 CountAliveMonsInBattle(u8 caseId)
{
s32 i;
@@ -4431,20 +4196,6 @@ u8 CountAliveMonsInBattle(u8 caseId)
return retVal;
}
-static bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId)
-{
- if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER))
- return FALSE;
- else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
- return FALSE;
- else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
- return FALSE;
- else if (FlagGet(badgeFlag))
- return TRUE;
- else
- return FALSE;
-}
-
u8 GetDefaultMoveTarget(u8 battlerId)
{
u8 opposing = BATTLE_OPPOSITE(GetBattlerPosition(battlerId) & BIT_SIDE);
@@ -4671,7 +4422,7 @@ static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 perso
return substruct;
}
-u32 GetMonData(struct Pokemon *mon, s32 field, u8* data)
+u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data)
{
u32 ret;
@@ -4912,7 +4663,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
retVal = substruct3->metGame;
break;
case MON_DATA_POKEBALL:
- retVal = substruct3->pokeball;
+ retVal = substruct0->pokeball;
break;
case MON_DATA_OT_GENDER:
retVal = substruct3->otGender;
@@ -5291,7 +5042,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
case MON_DATA_POKEBALL:
{
u8 pokeball = *data;
- substruct3->pokeball = pokeball;
+ substruct0->pokeball = pokeball;
break;
}
case MON_DATA_OT_GENDER:
@@ -5431,7 +5182,7 @@ u8 GiveMonToPlayer(struct Pokemon *mon)
return MON_GIVEN_TO_PARTY;
}
-static u8 SendMonToPC(struct Pokemon* mon)
+static u8 SendMonToPC(struct Pokemon *mon)
{
s32 boxNo, boxPos;
@@ -5530,7 +5281,7 @@ u8 GetMonsStateToDoubles_2(void)
return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON;
}
-u8 GetAbilityBySpecies(u16 species, u8 abilityNum)
+u16 GetAbilityBySpecies(u16 species, u8 abilityNum)
{
int i;
@@ -5555,7 +5306,7 @@ u8 GetAbilityBySpecies(u16 species, u8 abilityNum)
return gLastUsedAbility;
}
-u8 GetMonAbility(struct Pokemon *mon)
+u16 GetMonAbility(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
u8 abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL);
@@ -5667,56 +5418,58 @@ void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex)
mon->ppBonuses &= gPPUpClearMask[moveIndex];
}
-void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
+void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst)
{
- u16* hpSwitchout;
s32 i;
u8 nickname[POKEMON_NAME_LENGTH * 2];
- gBattleMons[battlerId].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL);
- gBattleMons[battlerId].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL);
-
for (i = 0; i < MAX_MON_MOVES; i++)
{
- gBattleMons[battlerId].moves[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1 + i, NULL);
- gBattleMons[battlerId].pp[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP1 + i, NULL);
+ dst->moves[i] = GetMonData(src, MON_DATA_MOVE1 + i, NULL);
+ dst->pp[i] = GetMonData(src, MON_DATA_PP1 + i, NULL);
}
- gBattleMons[battlerId].ppBonuses = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP_BONUSES, NULL);
- gBattleMons[battlerId].friendship = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FRIENDSHIP, NULL);
- gBattleMons[battlerId].experience = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EXP, NULL);
- gBattleMons[battlerId].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL);
- gBattleMons[battlerId].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL);
- gBattleMons[battlerId].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL);
- gBattleMons[battlerId].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED_IV, NULL);
- gBattleMons[battlerId].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL);
- gBattleMons[battlerId].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL);
- gBattleMons[battlerId].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL);
- gBattleMons[battlerId].status1 = GetMonData(&gPlayerParty[partyIndex], MON_DATA_STATUS, NULL);
- gBattleMons[battlerId].level = GetMonData(&gPlayerParty[partyIndex], MON_DATA_LEVEL, NULL);
- gBattleMons[battlerId].hp = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL);
- gBattleMons[battlerId].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL);
- gBattleMons[battlerId].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL);
- gBattleMons[battlerId].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL);
- gBattleMons[battlerId].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED, NULL);
- gBattleMons[battlerId].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL);
- gBattleMons[battlerId].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL);
- gBattleMons[battlerId].abilityNum = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ABILITY_NUM, NULL);
- gBattleMons[battlerId].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL);
- gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1;
- gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2;
- gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].abilityNum);
- GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname);
- StringCopy_Nickname(gBattleMons[battlerId].nickname, nickname);
- GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battlerId].otName);
-
- hpSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)];
- *hpSwitchout = gBattleMons[battlerId].hp;
+ dst->species = GetMonData(src, MON_DATA_SPECIES, NULL);
+ dst->item = GetMonData(src, MON_DATA_HELD_ITEM, NULL);
+ dst->ppBonuses = GetMonData(src, MON_DATA_PP_BONUSES, NULL);
+ dst->friendship = GetMonData(src, MON_DATA_FRIENDSHIP, NULL);
+ dst->experience = GetMonData(src, MON_DATA_EXP, NULL);
+ dst->hpIV = GetMonData(src, MON_DATA_HP_IV, NULL);
+ dst->attackIV = GetMonData(src, MON_DATA_ATK_IV, NULL);
+ dst->defenseIV = GetMonData(src, MON_DATA_DEF_IV, NULL);
+ dst->speedIV = GetMonData(src, MON_DATA_SPEED_IV, NULL);
+ dst->spAttackIV = GetMonData(src, MON_DATA_SPATK_IV, NULL);
+ dst->spDefenseIV = GetMonData(src, MON_DATA_SPDEF_IV, NULL);
+ dst->personality = GetMonData(src, MON_DATA_PERSONALITY, NULL);
+ dst->status1 = GetMonData(src, MON_DATA_STATUS, NULL);
+ dst->level = GetMonData(src, MON_DATA_LEVEL, NULL);
+ dst->hp = GetMonData(src, MON_DATA_HP, NULL);
+ dst->maxHP = GetMonData(src, MON_DATA_MAX_HP, NULL);
+ dst->attack = GetMonData(src, MON_DATA_ATK, NULL);
+ dst->defense = GetMonData(src, MON_DATA_DEF, NULL);
+ dst->speed = GetMonData(src, MON_DATA_SPEED, NULL);
+ dst->spAttack = GetMonData(src, MON_DATA_SPATK, NULL);
+ dst->spDefense = GetMonData(src, MON_DATA_SPDEF, NULL);
+ dst->abilityNum = GetMonData(src, MON_DATA_ABILITY_NUM, NULL);
+ dst->otId = GetMonData(src, MON_DATA_OT_ID, NULL);
+ dst->type1 = gBaseStats[dst->species].type1;
+ dst->type2 = gBaseStats[dst->species].type2;
+ dst->type3 = TYPE_MYSTERY;
+ dst->ability = GetAbilityBySpecies(dst->species, dst->abilityNum);
+ GetMonData(src, MON_DATA_NICKNAME, nickname);
+ StringCopy_Nickname(dst->nickname, nickname);
+ GetMonData(src, MON_DATA_OT_NAME, dst->otName);
for (i = 0; i < NUM_BATTLE_STATS; i++)
- gBattleMons[battlerId].statStages[i] = DEFAULT_STAT_STAGE;
+ dst->statStages[i] = DEFAULT_STAT_STAGE;
- gBattleMons[battlerId].status2 = 0;
+ dst->status2 = 0;
+}
+
+void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex)
+{
+ PokemonToBattleMon(&gPlayerParty[partyIndex], &gBattleMons[battlerId]);
+ gBattleStruct->hpOnSwitchout[GetBattlerSide(battlerId)] = gBattleMons[battlerId].hp;
UpdateSentPokesToOpponentValue(battlerId);
ClearTemporarySpeciesSpriteData(battlerId, FALSE);
}
@@ -5756,7 +5509,7 @@ bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 item, u8 partyIndex,
bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 moveIndex, bool8 usedByAI)
{
u32 dataUnsigned;
- s32 dataSigned;
+ s32 dataSigned, evCap;
s32 friendship;
s32 i;
bool8 retVal = TRUE;
@@ -5774,7 +5527,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
// Get item hold effect
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
- if (heldItem == ITEM_ENIGMA_BERRY)
+ if (heldItem == ITEM_ENIGMA_BERRY_E_READER)
{
if (gMain.inBattle)
holdEffect = gEnigmaBerries[gBattlerInMenuId].holdEffect;
@@ -5811,11 +5564,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
// Skip using the item if it won't do anything
if (!ITEM_HAS_EFFECT(item))
return TRUE;
- if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY)
+ if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY_E_READER)
return TRUE;
// Get item effect
- if (item == ITEM_ENIGMA_BERRY)
+ if (item == ITEM_ENIGMA_BERRY_E_READER)
{
if (gMain.inBattle)
itemEffect = gEnigmaBerries[gActiveBattler].itemEffect;
@@ -5850,25 +5603,31 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY;
retVal = FALSE;
}
-
- // X Attack
- if ((itemEffect[i] & ITEM0_X_ATTACK)
- && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE)
- {
- gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[i] & ITEM0_X_ATTACK;
- if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE)
- gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE;
- retVal = FALSE;
- }
break;
// Handle ITEM1 effects (in-battle stat boosting effects)
case 1:
- // X Defend
- if ((itemEffect[i] & ITEM1_X_DEFEND)
+ // X Attack
+ if ((itemEffect[i] & ITEM1_X_ATTACK)
+ && gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE)
+ {
+ if (B_X_ITEMS_BUFF >= GEN_7)
+ gBattleMons[gActiveBattler].statStages[STAT_ATK] += 2;
+ else
+ gBattleMons[gActiveBattler].statStages[STAT_ATK] += 1;
+ if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > MAX_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[STAT_ATK] = MAX_STAT_STAGE;
+ retVal = FALSE;
+ }
+
+ // X Defense
+ if ((itemEffect[i] & ITEM1_X_DEFENSE)
&& gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE)
{
- gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[i] & ITEM1_X_DEFEND) >> 4;
+ if (B_X_ITEMS_BUFF >= GEN_7)
+ gBattleMons[gActiveBattler].statStages[STAT_DEF] += 2;
+ else
+ gBattleMons[gActiveBattler].statStages[STAT_DEF] += 1;
if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > MAX_STAT_STAGE)
gBattleMons[gActiveBattler].statStages[STAT_DEF] = MAX_STAT_STAGE;
retVal = FALSE;
@@ -5878,33 +5637,56 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
if ((itemEffect[i] & ITEM1_X_SPEED)
&& gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE)
{
- gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[i] & ITEM1_X_SPEED;
+ if (B_X_ITEMS_BUFF >= GEN_7)
+ gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 2;
+ else
+ gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 1;
if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > MAX_STAT_STAGE)
gBattleMons[gActiveBattler].statStages[STAT_SPEED] = MAX_STAT_STAGE;
retVal = FALSE;
}
- break;
- // Handle ITEM2 effects (more stat boosting effects)
- case 2:
- // X Accuracy
- if ((itemEffect[i] & ITEM2_X_ACCURACY)
- && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE)
- {
- gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[i] & ITEM2_X_ACCURACY) >> 4;
- if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE)
- gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE;
- retVal = FALSE;
- }
// X Sp Attack
- if ((itemEffect[i] & ITEM2_X_SPATK)
+ if ((itemEffect[i] & ITEM1_X_SPATK)
&& gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE)
{
- gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[i] & ITEM2_X_SPATK;
+ if (B_X_ITEMS_BUFF >= GEN_7)
+ gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 2;
+ else
+ gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 1;
if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > MAX_STAT_STAGE)
gBattleMons[gActiveBattler].statStages[STAT_SPATK] = MAX_STAT_STAGE;
retVal = FALSE;
}
+
+ // X Sp Defense
+ if ((itemEffect[i] & ITEM1_X_SPDEF)
+ && gBattleMons[gActiveBattler].statStages[STAT_SPDEF] < MAX_STAT_STAGE)
+ {
+ if (B_X_ITEMS_BUFF >= GEN_7)
+ gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += 2;
+ else
+ gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += 1;
+ if (gBattleMons[gActiveBattler].statStages[STAT_SPDEF] > MAX_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[STAT_SPDEF] = MAX_STAT_STAGE;
+ retVal = FALSE;
+ }
+
+ // X Accuracy
+ if ((itemEffect[i] & ITEM1_X_ACCURACY)
+ && gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE)
+ {
+ if (B_X_ITEMS_BUFF >= GEN_7)
+ gBattleMons[gActiveBattler].statStages[STAT_ACC] += 2;
+ else
+ gBattleMons[gActiveBattler].statStages[STAT_ACC] += 1;
+ if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > MAX_STAT_STAGE)
+ gBattleMons[gActiveBattler].statStages[STAT_ACC] = MAX_STAT_STAGE;
+ retVal = FALSE;
+ }
+ break;
+ // Formerly used by the item effects of the X Sp. Atk and the X Accuracy
+ case 2:
break;
// Handle ITEM3 effects (Guard Spec, Rare Candy, cure status)
@@ -5993,12 +5775,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
// Has EV increase limit already been reached?
if (evCount >= MAX_TOTAL_EVS)
return TRUE;
- if (dataSigned >= EV_ITEM_RAISE_LIMIT)
+
+ if (itemEffect[10] & ITEM10_IS_VITAMIN)
+ evCap = EV_ITEM_RAISE_LIMIT;
+ else
+ evCap = 252;
+
+ if (dataSigned >= evCap)
break;
// Limit the increase
- if (dataSigned + evChange > EV_ITEM_RAISE_LIMIT)
- temp2 = EV_ITEM_RAISE_LIMIT - (dataSigned + evChange) + evChange;
+ if (dataSigned + evChange > evCap)
+ temp2 = evCap - (dataSigned + evChange) + evChange;
else
temp2 = evChange;
@@ -6078,6 +5866,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
case ITEM6_HEAL_HP_LVL_UP:
dataUnsigned = gBattleScripting.levelUpHP;
break;
+ case ITEM6_HEAL_HP_QUARTER:
+ dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) / 4;
+ if (dataUnsigned == 0)
+ dataUnsigned = 1;
+ break;
}
// Only restore HP if not at max health
@@ -6218,12 +6011,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
// Has EV increase limit already been reached?
if (evCount >= MAX_TOTAL_EVS)
return TRUE;
- if (dataSigned >= EV_ITEM_RAISE_LIMIT)
+
+ if (itemEffect[10] & ITEM10_IS_VITAMIN)
+ evCap = EV_ITEM_RAISE_LIMIT;
+ else
+ evCap = 252;
+
+ if (dataSigned >= evCap)
break;
// Limit the increase
- if (dataSigned + evChange > EV_ITEM_RAISE_LIMIT)
- temp2 = EV_ITEM_RAISE_LIMIT - (dataSigned + evChange) + evChange;
+ if (dataSigned + evChange > evCap)
+ temp2 = evCap - (dataSigned + evChange) + evChange;
else
temp2 = evChange;
@@ -6335,10 +6134,10 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
temp = gItemEffectTable[itemId - ITEM_POTION];
- if (!temp && itemId != ITEM_ENIGMA_BERRY)
+ if (!temp && itemId != ITEM_ENIGMA_BERRY_E_READER)
return 0;
- if (itemId == ITEM_ENIGMA_BERRY)
+ if (itemId == ITEM_ENIGMA_BERRY_E_READER)
{
temp = gEnigmaBerries[gActiveBattler].itemEffect;
}
@@ -6440,7 +6239,15 @@ static void BufferStatRoseMessage(s32 statIdx)
{
gBattlerTarget = gBattlerInMenuId;
StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[statIdx]]);
- StringCopy(gBattleTextBuff2, gText_StatRose);
+ if (B_X_ITEMS_BUFF >= GEN_7)
+ {
+ StringCopy(gBattleTextBuff2, gText_StatSharply);
+ StringAppend(gBattleTextBuff2, gText_StatRose);
+ }
+ else
+ {
+ StringCopy(gBattleTextBuff2, gText_StatRose);
+ }
BattleStringExpandPlaceholdersToDisplayedString(gText_DefendersStatRose);
}
@@ -6449,7 +6256,7 @@ u8 *UseStatIncreaseItem(u16 itemId)
int i;
const u8 *itemEffect;
- if (itemId == ITEM_ENIGMA_BERRY)
+ if (itemId == ITEM_ENIGMA_BERRY_E_READER)
{
if (gMain.inBattle)
itemEffect = gEnigmaBerries[gBattlerInMenuId].itemEffect;
@@ -6463,23 +6270,32 @@ u8 *UseStatIncreaseItem(u16 itemId)
gPotentialItemEffectBattler = gBattlerInMenuId;
- for (i = 0; i < 3; i++)
+ if (itemEffect[0] & ITEM0_DIRE_HIT)
{
- if (itemEffect[i] & (ITEM0_X_ATTACK | ITEM1_X_SPEED | ITEM2_X_SPATK))
- BufferStatRoseMessage(i * 2);
+ gBattlerAttacker = gBattlerInMenuId;
+ BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnGettingPumped);
+ }
- if (itemEffect[i] & (ITEM0_DIRE_HIT | ITEM1_X_DEFEND | ITEM2_X_ACCURACY))
- {
- if (i != 0) // Dire Hit is the only ITEM0 above
- {
- BufferStatRoseMessage(i * 2 + 1);
- }
- else
- {
- gBattlerAttacker = gBattlerInMenuId;
- BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnGettingPumped);
- }
- }
+ switch (itemEffect[1])
+ {
+ case ITEM1_X_ATTACK:
+ BufferStatRoseMessage(STAT_ATK);
+ break;
+ case ITEM1_X_DEFENSE:
+ BufferStatRoseMessage(STAT_DEF);
+ break;
+ case ITEM1_X_SPEED:
+ BufferStatRoseMessage(STAT_SPEED);
+ break;
+ case ITEM1_X_SPATK:
+ BufferStatRoseMessage(STAT_SPATK);
+ break;
+ case ITEM1_X_SPDEF:
+ BufferStatRoseMessage(STAT_SPDEF);
+ break;
+ case ITEM1_X_ACCURACY:
+ BufferStatRoseMessage(STAT_ACC);
+ break;
}
if (itemEffect[3] & ITEM3_GUARD_SPEC)
@@ -6535,7 +6351,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s
partnerHoldEffect = HOLD_EFFECT_NONE;
}
- if (heldItem == ITEM_ENIGMA_BERRY)
+ if (heldItem == ITEM_ENIGMA_BERRY_E_READER)
holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
else
holdEffect = ItemId_GetHoldEffect(heldItem);
@@ -6794,7 +6610,6 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s
}
}
break;
- #ifdef BATTLE_ENGINE
// Battle evolution without leveling; party slot is being passed into the evolutionItem arg.
case EVO_MODE_BATTLE_SPECIAL:
for (i = 0; i < EVOS_PER_MON; i++)
@@ -6808,7 +6623,6 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s
}
}
break;
- #endif
// Overworld evolution without leveling; evolution method is being passed into the evolutionItem arg.
case EVO_MODE_OVERWORLD_SPECIAL:
for (i = 0; i < EVOS_PER_MON; i++)
@@ -7135,7 +6949,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
species = GetMonData(mon, MON_DATA_SPECIES2, 0);
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
- if (heldItem == ITEM_ENIGMA_BERRY)
+ if (heldItem == ITEM_ENIGMA_BERRY_E_READER)
{
if (gMain.inBattle)
holdEffect = gEnigmaBerries[0].holdEffect;
@@ -7188,6 +7002,24 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
u16 heldItem;
u8 holdEffect;
int i, multiplier;
+ u8 stat;
+ u8 bonus;
+
+ heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
+ if (heldItem == ITEM_ENIGMA_BERRY)
+ {
+ if (gMain.inBattle)
+ holdEffect = gEnigmaBerries[0].holdEffect;
+ else
+ holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(heldItem);
+ }
+
+ stat = ItemId_GetSecondaryId(heldItem);
+ bonus = ItemId_GetHoldEffectParam(heldItem);
for (i = 0; i < NUM_STATS; i++)
{
@@ -7208,36 +7040,41 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies)
switch (i)
{
case STAT_HP:
- evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
+ if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_HP)
+ evIncrease = (gBaseStats[defeatedSpecies].evYield_HP + bonus) * multiplier;
+ else
+ evIncrease = gBaseStats[defeatedSpecies].evYield_HP * multiplier;
break;
case STAT_ATK:
- evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
+ if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_ATK)
+ evIncrease = (gBaseStats[defeatedSpecies].evYield_Attack + bonus) * multiplier;
+ else
+ evIncrease = gBaseStats[defeatedSpecies].evYield_Attack * multiplier;
break;
case STAT_DEF:
- evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
+ if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_DEF)
+ evIncrease = (gBaseStats[defeatedSpecies].evYield_Defense + bonus) * multiplier;
+ else
+ evIncrease = gBaseStats[defeatedSpecies].evYield_Defense * multiplier;
break;
case STAT_SPEED:
- evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
+ if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPEED)
+ evIncrease = (gBaseStats[defeatedSpecies].evYield_Speed + bonus) * multiplier;
+ else
+ evIncrease = gBaseStats[defeatedSpecies].evYield_Speed * multiplier;
break;
case STAT_SPATK:
- evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
+ if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPATK)
+ evIncrease = (gBaseStats[defeatedSpecies].evYield_SpAttack + bonus) * multiplier;
+ else
+ evIncrease = gBaseStats[defeatedSpecies].evYield_SpAttack * multiplier;
break;
case STAT_SPDEF:
- evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
- break;
- }
-
- heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0);
- if (heldItem == ITEM_ENIGMA_BERRY)
- {
- if (gMain.inBattle)
- holdEffect = gEnigmaBerries[0].holdEffect;
+ if (holdEffect == HOLD_EFFECT_POWER_ITEM && stat == STAT_SPDEF)
+ evIncrease = (gBaseStats[defeatedSpecies].evYield_SpDefense + bonus) * multiplier;
else
- holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect;
- }
- else
- {
- holdEffect = ItemId_GetHoldEffect(heldItem);
+ evIncrease = gBaseStats[defeatedSpecies].evYield_SpDefense * multiplier;
+ break;
}
if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
@@ -7869,52 +7706,65 @@ void SetWildMonHeldItem(void)
{
if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID | BATTLE_TYPE_PIKE)))
{
- u16 rnd = Random() % 100;
- u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0);
+ u16 rnd;
+ u16 species;
u16 chanceNoItem = 45;
u16 chanceNotRare = 95;
+ u16 count = (WILD_DOUBLE_BATTLE) ? 2 : 1;
+ u16 i;
+
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG, 0)
- && GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES)
+ && (GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES
+ || GetMonAbility(&gPlayerParty[0]) == ABILITY_SUPER_LUCK))
{
chanceNoItem = 20;
chanceNotRare = 80;
}
- if (gMapHeader.mapLayoutId == LAYOUT_ALTERING_CAVE)
+
+ for (i = 0; i < count; i++)
{
- s32 alteringCaveId = GetWildMonTableIdInAlteringCave(species);
- if (alteringCaveId != 0)
+ if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != ITEM_NONE)
+ continue; // prevent ovewriting previously set item
+
+ rnd = Random() % 100;
+ species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, 0);
+ if (gMapHeader.mapLayoutId == LAYOUT_ALTERING_CAVE)
{
- // In active Altering Cave, use special item list
- if (rnd < chanceNotRare)
- return;
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &sAlteringCaveWildMonHeldItems[alteringCaveId].item);
+ s32 alteringCaveId = GetWildMonTableIdInAlteringCave(species);
+ if (alteringCaveId != 0)
+ {
+ // In active Altering Cave, use special item list
+ if (rnd < chanceNotRare)
+ continue;
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &sAlteringCaveWildMonHeldItems[alteringCaveId].item);
+ }
+ else
+ {
+ // In inactive Altering Cave, use normal items
+ if (rnd < chanceNoItem)
+ continue;
+ if (rnd < chanceNotRare)
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon);
+ else
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare);
+ }
}
else
{
- // In inactive Altering Cave, use normal items
- if (rnd < chanceNoItem)
- return;
- if (rnd < chanceNotRare)
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon);
+ if (gBaseStats[species].itemCommon == gBaseStats[species].itemRare && gBaseStats[species].itemCommon != ITEM_NONE)
+ {
+ // Both held items are the same, 100% chance to hold item
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon);
+ }
else
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare);
- }
- }
- else
- {
- if (gBaseStats[species].itemCommon == gBaseStats[species].itemRare && gBaseStats[species].itemCommon != ITEM_NONE)
- {
- // Both held items are the same, 100% chance to hold item
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon);
- }
- else
- {
- if (rnd < chanceNoItem)
- return;
- if (rnd < chanceNotRare)
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon);
- else
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare);
+ {
+ if (rnd < chanceNoItem)
+ continue;
+ if (rnd < chanceNotRare)
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon);
+ else
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare);
+ }
}
}
}
@@ -7958,7 +7808,7 @@ const u8 *GetTrainerPartnerName(void)
}
#define READ_PTR_FROM_TASK(taskId, dataId) \
- (void*)( \
+ (void *)( \
((u16)(gTasks[taskId].data[dataId]) | \
((u16)(gTasks[taskId].data[dataId + 1]) << 16)))
@@ -7990,7 +7840,7 @@ static void Task_PokemonSummaryAnimateAfterDelay(u8 taskId)
}
}
-void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u8 panMode)
+void BattleAnimateFrontSprite(struct Sprite *sprite, u16 species, bool8 noCry, u8 panMode)
{
if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)))
DoMonFrontSpriteAnimation(sprite, species, noCry, panMode | SKIP_FRONT_ANIM);
@@ -7998,7 +7848,7 @@ void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u
DoMonFrontSpriteAnimation(sprite, species, noCry, panMode);
}
-void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 panModeAnimFlag)
+void DoMonFrontSpriteAnimation(struct Sprite *sprite, u16 species, bool8 noCry, u8 panModeAnimFlag)
{
s8 pan;
switch (panModeAnimFlag & (u8)~SKIP_FRONT_ANIM) // Exclude anim flag to get pan mode
@@ -8045,7 +7895,7 @@ void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry,
}
}
-void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneFrame)
+void PokemonSummaryDoMonAnimation(struct Sprite *sprite, u16 species, bool8 oneFrame)
{
if (!oneFrame && HasTwoFramesAnimation(species))
StartSpriteAnim(sprite, 1);
@@ -8073,7 +7923,7 @@ void StopPokemonAnimationDelayTask(void)
DestroyTask(delayTaskId);
}
-void BattleAnimateBackSprite(struct Sprite* sprite, u16 species)
+void BattleAnimateBackSprite(struct Sprite *sprite, u16 species)
{
if (gHitMarker & HITMARKER_NO_ANIMATIONS && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)))
{
diff --git a/src/pokemon_debug.c b/src/pokemon_debug.c
index 77e83303d7..fa4460ed83 100644
--- a/src/pokemon_debug.c
+++ b/src/pokemon_debug.c
@@ -52,7 +52,7 @@ static const u16 sBgColor[] = {RGB_WHITE};
static struct PokemonDebugMenu *GetStructPtr(u8 taskId)
{
- u8 *taskDataPtr = (u8*)(&gTasks[taskId].data[0]);
+ u8 *taskDataPtr = (u8 *)(&gTasks[taskId].data[0]);
return (struct PokemonDebugMenu*)(T1_READ_PTR(taskDataPtr));
}
@@ -463,7 +463,7 @@ static void VBlankCB(void)
static void SetStructPtr(u8 taskId, void *ptr)
{
u32 structPtr = (u32)(ptr);
- u8 *taskDataPtr = (u8*)(&gTasks[taskId].data[0]);
+ u8 *taskDataPtr = (u8 *)(&gTasks[taskId].data[0]);
taskDataPtr[0] = structPtr >> 0;
taskDataPtr[1] = structPtr >> 8;
@@ -849,7 +849,7 @@ static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonDebugMenu *data,
static void DrawFootprintCustom(u8 windowId, u16 species)
{
u8 footprint[32 * 4] = {0};
- const u8 * footprintGfx = gMonFootprintTable[species];
+ const u8 *footprintGfx = gMonFootprintTable[species];
u32 i, j, tileIdx = 0;
if (footprintGfx != NULL)
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index 5420c1ede6..2bf5c56117 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -25,7 +25,7 @@ static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8);
static void FreeAndDestroyMonIconSprite_(struct Sprite *sprite);
#if P_ENABLE_DEBUG == TRUE
static const u8 *GetMonIconPtrCustom(u16 species, u32 personality, bool8 isFemale);
-static const u8* GetMonIconTilesCustom(u16 species, bool8 isFemale);
+static const u8 *GetMonIconTilesCustom(u16 species, bool8 isFemale);
#endif
const u8 *const gMonIconTable[] =
@@ -417,6 +417,7 @@ const u8 *const gMonIconTable[] =
[SPECIES_JIRACHI] = gMonIcon_Jirachi,
[SPECIES_DEOXYS] = gMonIcon_Deoxys,
[SPECIES_CHIMECHO] = gMonIcon_Chimecho,
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] = gMonIcon_Turtwig,
[SPECIES_GROTLE] = gMonIcon_Grotle,
[SPECIES_TORTERRA] = gMonIcon_Torterra,
@@ -1054,6 +1055,7 @@ const u8 *const gMonIconTable[] =
[SPECIES_PIKACHU_PARTNER_CAP] = gMonIcon_PikachuPartnerCap,
[SPECIES_PIKACHU_WORLD_CAP] = gMonIcon_QuestionMark,
[SPECIES_PICHU_SPIKY_EARED] = gMonIcon_PichuSpikyEared,
+#endif
[SPECIES_UNOWN_B] = gMonIcon_UnownB,
[SPECIES_UNOWN_C] = gMonIcon_UnownC,
[SPECIES_UNOWN_D] = gMonIcon_UnownD,
@@ -1087,6 +1089,7 @@ const u8 *const gMonIconTable[] =
[SPECIES_DEOXYS_ATTACK] = gMonIcon_DeoxysAttack,
[SPECIES_DEOXYS_DEFENSE] = gMonIcon_DeoxysDefense,
[SPECIES_DEOXYS_SPEED] = gMonIcon_DeoxysSpeed,
+#if P_NEW_POKEMON == TRUE
[SPECIES_BURMY_SANDY_CLOAK] = gMonIcon_BurmySandyCloak,
[SPECIES_BURMY_TRASH_CLOAK] = gMonIcon_BurmyTrashCloak,
[SPECIES_WORMADAM_SANDY_CLOAK] = gMonIcon_WormadamSandyCloak,
@@ -1264,12 +1267,14 @@ const u8 *const gMonIconTable[] =
[SPECIES_ZARUDE_DADA] = gMonIcon_ZarudeDada,
[SPECIES_CALYREX_ICE_RIDER] = gMonIcon_CalyrexIceRider,
[SPECIES_CALYREX_SHADOW_RIDER] = gMonIcon_CalyrexShadowRider,
+#endif
[SPECIES_EGG] = gMonIcon_Egg,
};
const u8 *const gMonIconTableFemale[] =
{
[SPECIES_EEVEE] = gMonIcon_Eevee,
+#if P_NEW_POKEMON == TRUE
[SPECIES_STARLY] = gMonIcon_Starly,
[SPECIES_STARAVIA] = gMonIcon_Staravia,
[SPECIES_STARAPTOR] = gMonIcon_Staraptor,
@@ -1285,6 +1290,7 @@ const u8 *const gMonIconTableFemale[] =
[SPECIES_JELLICENT] = gMonIcon_JellicentF,
[SPECIES_PYROAR] = gMonIcon_PyroarF,
[SPECIES_BASCULEGION] = gMonIcon_BasculegionF,
+#endif
};
const u8 gMonIconPaletteIndices[] =
@@ -1675,6 +1681,7 @@ const u8 gMonIconPaletteIndices[] =
[SPECIES_JIRACHI] = 0,
[SPECIES_DEOXYS] = 0,
[SPECIES_CHIMECHO] = 0,
+#if P_NEW_POKEMON == TRUE
[SPECIES_TURTWIG] = 1,
[SPECIES_GROTLE] = 1,
[SPECIES_TORTERRA] = 1,
@@ -2183,7 +2190,7 @@ const u8 gMonIconPaletteIndices[] =
[SPECIES_URSHIFU] = 2,
[SPECIES_ZARUDE] = 1,
[SPECIES_REGIELEKI] = 0,
- [SPECIES_REGIDRAGO] = 2,
+ [SPECIES_REGIDRAGO] = 0,
[SPECIES_GLASTRIER] = 0,
[SPECIES_SPECTRIER] = 0,
[SPECIES_CALYREX] = 0,
@@ -2312,10 +2319,15 @@ const u8 gMonIconPaletteIndices[] =
[SPECIES_PIKACHU_PARTNER_CAP] = 0,
[SPECIES_PIKACHU_WORLD_CAP] = 0,
[SPECIES_PICHU_SPIKY_EARED] = 1,
+#endif
[SPECIES_UNOWN_B ... SPECIES_UNOWN_QMARK] = 0,
[SPECIES_CASTFORM_SUNNY] = 0,
[SPECIES_CASTFORM_RAINY] = 0,
[SPECIES_CASTFORM_SNOWY] = 0,
+ [SPECIES_DEOXYS_ATTACK] = 0,
+ [SPECIES_DEOXYS_DEFENSE] = 0,
+ [SPECIES_DEOXYS_SPEED] = 0,
+#if P_NEW_POKEMON == TRUE
[SPECIES_BURMY_SANDY_CLOAK] = 1,
[SPECIES_BURMY_TRASH_CLOAK] = 0,
[SPECIES_WORMADAM_SANDY_CLOAK] = 1,
@@ -2487,12 +2499,14 @@ const u8 gMonIconPaletteIndices[] =
[SPECIES_ZARUDE_DADA] = 1,
[SPECIES_CALYREX_ICE_RIDER] = 0,
[SPECIES_CALYREX_SHADOW_RIDER] = 0,
+#endif
[SPECIES_EGG] = 1,
};
const u8 gMonIconPaletteIndicesFemale[] =
{
[SPECIES_EEVEE] = 2,
+#if P_NEW_POKEMON == TRUE
[SPECIES_STARLY] = 0,
[SPECIES_STARAVIA] = 0,
[SPECIES_BIDOOF] = 2,
@@ -2507,6 +2521,7 @@ const u8 gMonIconPaletteIndicesFemale[] =
[SPECIES_JELLICENT] = 1,
[SPECIES_PYROAR] = 2,
[SPECIES_BASCULEGION] = 0,
+#endif
};
const struct SpritePalette gMonIconPaletteTable[] =
@@ -2811,9 +2826,9 @@ void SpriteCB_MonIcon(struct Sprite *sprite)
UpdateMonIconFrame(sprite);
}
-const u8* GetMonIconTiles(u16 species, u32 personality)
+const u8 *GetMonIconTiles(u16 species, u32 personality)
{
- const u8* iconSprite = gMonIconTable[species];
+ const u8 *iconSprite = gMonIconTable[species];
if ((gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) && GetGenderFromSpeciesAndPersonality(species, personality) == MON_FEMALE)
{
iconSprite = gMonIconTableFemale[species];
@@ -2821,9 +2836,9 @@ const u8* GetMonIconTiles(u16 species, u32 personality)
return iconSprite;
}
#if P_ENABLE_DEBUG == TRUE
-static const u8* GetMonIconTilesCustom(u16 species, bool8 isFemale)
+static const u8 *GetMonIconTilesCustom(u16 species, bool8 isFemale)
{
- const u8* iconSprite = gMonIconTable[species];
+ const u8 *iconSprite = gMonIconTable[species];
if ((gBaseStats[species].flags & FLAG_GENDER_DIFFERENCE) && isFemale)
{
iconSprite = gMonIconTableFemale[species];
@@ -2861,7 +2876,7 @@ u8 GetMonIconPaletteIndexFromSpecies(u16 species)
return gMonIconPaletteIndices[species];
}
-const u16* GetValidMonIconPalettePtr(u16 species)
+const u16 *GetValidMonIconPalettePtr(u16 species)
{
if (species > NUM_SPECIES)
species = INVALID_ICON_SPECIES;
diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c
index adfef95886..e3ae6623c3 100755
--- a/src/pokemon_jump.c
+++ b/src/pokemon_jump.c
@@ -2613,7 +2613,7 @@ static const struct OamData sOamData_JumpMon =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -2630,7 +2630,7 @@ static const struct OamData sOamData_Vine16x32 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x32),
.x = 0,
@@ -2647,7 +2647,7 @@ static const struct OamData sOamData_Vine32x32 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -2664,7 +2664,7 @@ static const struct OamData sOamData_Vine32x16 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
@@ -2818,7 +2818,7 @@ static const struct OamData sOamData_Star =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -3947,7 +3947,7 @@ static void InitDigitPrinters(void)
.xDelta = 8,
.x = 108,
.y = 6,
- .spriteSheet = (void*) &sSpriteSheet_Digits,
+ .spriteSheet = (void *) &sSpriteSheet_Digits,
.spritePal = &sSpritePalette_Digits,
};
@@ -4377,7 +4377,7 @@ static void Task_ShowPokemonJumpRecords(u8 taskId)
{
RemoveWindow(tWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
break;
}
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index e613a8295f..39b55463c5 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -473,7 +473,7 @@ struct PokemonStorageSystemData
u8 iconScrollCurColumn;
s8 iconScrollDirection; // Unnecessary duplicate of scrollDirection
u8 iconScrollState;
- u8 iconScrollToBoxId; // Unnecessary duplicate of scrollToBoxId
+ u8 iconScrollToBoxId; // Unused duplicate of scrollToBoxId
struct WindowTemplate menuWindow;
struct StorageMenu menuItems[7];
u8 menuItemsCount;
@@ -1119,7 +1119,7 @@ static const struct OamData sOamData_DisplayMon =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -1136,7 +1136,7 @@ static const struct OamData sOamData_Waveform =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x8),
.x = 0,
@@ -1212,7 +1212,7 @@ static const struct OamData sOamData_MonIcon =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -1343,7 +1343,7 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero
winTemplate.height = 2;
windowId = AddWindow(&winTemplate);
FillWindowPixelBuffer(windowId, PIXEL_FILL(zero2));
- tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA);
+ tileData1 = (u8 *) GetWindowAttribute(windowId, WINDOW_TILE_DATA);
tileData2 = (winTemplate.width * TILE_SIZE_4BPP) + tileData1;
if (!zero1)
@@ -1391,7 +1391,7 @@ static void UnusedDrawTextWindow(const u8 *string, void *dst, u16 offset, u8 bgC
tilesSize = winTemplate.width * TILE_SIZE_4BPP;
windowId = AddWindow(&winTemplate);
FillWindowPixelBuffer(windowId, PIXEL_FILL(bgColor));
- tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA);
+ tileData1 = (u8 *) GetWindowAttribute(windowId, WINDOW_TILE_DATA);
tileData2 = (winTemplate.width * TILE_SIZE_4BPP) + tileData1;
txtColor[0] = bgColor;
txtColor[1] = fgColor;
@@ -1553,9 +1553,9 @@ static void Task_PCMainMenu(u8 taskId)
case STATE_LOAD:
CreateMainMenu(task->tSelectedOption, &task->tWindowId);
LoadMessageBoxAndBorderGfx();
- DrawDialogueFrame(0, 0);
+ DrawDialogueFrame(0, FALSE);
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SKIP_DRAW, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, TEXT_SKIP_DRAW, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
CopyWindowToVram(0, COPYWIN_FULL);
CopyWindowToVram(task->tWindowId, COPYWIN_FULL);
task->tState++;
@@ -1579,14 +1579,14 @@ static void Task_PCMainMenu(u8 taskId)
{
task->tSelectedOption = task->tNextOption;
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
break;
case MENU_B_PRESSED:
case OPTION_EXIT:
ClearStdWindowAndFrame(task->tWindowId, TRUE);
- ScriptContext2_Disable();
- EnableBothScriptContexts();
+ UnlockPlayerFieldControls();
+ ScriptContext_Enable();
RemoveWindow(task->tWindowId);
DestroyTask(taskId);
break;
@@ -1595,14 +1595,14 @@ static void Task_PCMainMenu(u8 taskId)
{
// Can't withdraw
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PartyFull, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PartyFull, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->tState = STATE_ERROR_MSG;
}
else if (task->tInput == OPTION_DEPOSIT && CountPartyMons() == 1)
{
// Can't deposit
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_JustOnePkmn, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_JustOnePkmn, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->tState = STATE_ERROR_MSG;
}
else
@@ -1620,7 +1620,7 @@ static void Task_PCMainMenu(u8 taskId)
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->tState = STATE_HANDLE_INPUT;
}
else if (JOY_NEW(DPAD_UP))
@@ -1630,7 +1630,7 @@ static void Task_PCMainMenu(u8 taskId)
Menu_MoveCursor(-1);
task->tSelectedOption = Menu_GetCursorPos();
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->tState = STATE_HANDLE_INPUT;
}
else if (JOY_NEW(DPAD_DOWN))
@@ -1640,7 +1640,7 @@ static void Task_PCMainMenu(u8 taskId)
Menu_MoveCursor(1);
task->tSelectedOption = Menu_GetCursorPos();
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sMainMenuTexts[task->tSelectedOption].desc, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
task->tState = STATE_HANDLE_INPUT;
}
break;
@@ -1661,7 +1661,7 @@ void ShowPokemonStorageSystemPC(void)
u8 taskId = CreateTask(Task_PCMainMenu, 80);
gTasks[taskId].tState = 0;
gTasks[taskId].tSelectedOption = 0;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
static void FieldTask_ReturnToPcMenu(void)
@@ -3886,7 +3886,7 @@ static void CreateMarkingComboSprite(void)
sStorage->markingComboSprite->subpriority = 1;
sStorage->markingComboSprite->x = 40;
sStorage->markingComboSprite->y = 150;
- sStorage->markingComboTilesPtr = (void*) OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(GFXTAG_MARKING_COMBO);
+ sStorage->markingComboTilesPtr = (void *) OBJ_VRAM0 + 32 * GetSpriteTileStartByTag(GFXTAG_MARKING_COMBO);
}
static void CreateWaveformSprites(void)
@@ -3974,7 +3974,7 @@ static void CreateDisplayMonSprite(void)
sStorage->displayMonSprite = &gSprites[spriteId];
sStorage->displayMonPalOffset = palSlot * 16 + 0x100;
- sStorage->displayMonTilePtr = (void*) OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP;
+ sStorage->displayMonTilePtr = (void *) OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP;
} while (0);
if (sStorage->displayMonSprite == NULL)
@@ -5139,7 +5139,7 @@ static u16 TryLoadMonIconTiles(u16 species, u32 personality)
sStorage->numIconsPerSpecies[i]++;
offset = 16 * i;
species &= GENDER_MASK;
- CpuCopy32(GetMonIconTiles(species, personality), (void*)(OBJ_VRAM0) + offset * TILE_SIZE_4BPP, 0x200);
+ CpuCopy32(GetMonIconTiles(species, personality), (void *)(OBJ_VRAM0) + offset * TILE_SIZE_4BPP, 0x200);
return offset;
}
@@ -6593,7 +6593,7 @@ static void InitCanReleaseMonVars(void)
}
GetRestrictedReleaseMoves(sStorage->restrictedMoveList);
- sStorage->restrictedReleaseMonMoves = GetMonData(&sStorage->tempMon, MON_DATA_KNOWN_MOVES, (u8*)sStorage->restrictedMoveList);
+ sStorage->restrictedReleaseMonMoves = GetMonData(&sStorage->tempMon, MON_DATA_KNOWN_MOVES, (u8 *)sStorage->restrictedMoveList);
if (sStorage->restrictedReleaseMonMoves != 0)
{
// Pokémon knows at least one restricted release move
@@ -6659,7 +6659,7 @@ static s8 RunCanReleaseMon(void)
// Make sure party Pokémon isn't the one we're releasing first
if (sStorage->releaseBoxId != TOTAL_BOXES_COUNT || sStorage->releaseBoxPos != i)
{
- knownMoves = GetMonData(&gPlayerParty[i], MON_DATA_KNOWN_MOVES, (u8*)sStorage->restrictedMoveList);
+ knownMoves = GetMonData(&gPlayerParty[i], MON_DATA_KNOWN_MOVES, (u8 *)sStorage->restrictedMoveList);
sStorage->restrictedReleaseMonMoves &= ~(knownMoves);
}
}
@@ -6684,7 +6684,7 @@ static s8 RunCanReleaseMon(void)
// moves the release Pokémon knows
for (i = 0; i < IN_BOX_COUNT; i++)
{
- knownMoves = GetAndCopyBoxMonDataAt(sStorage->releaseCheckBoxId, sStorage->releaseCheckBoxPos, MON_DATA_KNOWN_MOVES, (u8*)sStorage->restrictedMoveList);
+ knownMoves = GetAndCopyBoxMonDataAt(sStorage->releaseCheckBoxId, sStorage->releaseCheckBoxPos, MON_DATA_KNOWN_MOVES, (u8 *)sStorage->restrictedMoveList);
if (knownMoves != 0 && !(sStorage->releaseBoxId == sStorage->releaseCheckBoxId
&& sStorage->releaseBoxPos == sStorage->releaseCheckBoxPos))
{
@@ -8061,7 +8061,7 @@ static void AddMenu(void)
sStorage->menuWindowId = AddWindow(&sStorage->menuWindow);
ClearWindowTilemap(sStorage->menuWindowId);
DrawStdFrameWithCustomTileAndPalette(sStorage->menuWindowId, FALSE, 11, 14);
- PrintMenuTable(sStorage->menuWindowId, sStorage->menuItemsCount, (void*)sStorage->menuItems);
+ PrintMenuTable(sStorage->menuWindowId, sStorage->menuItemsCount, (void *)sStorage->menuItems);
InitMenuInUpperLeftCornerNormal(sStorage->menuWindowId, sStorage->menuItemsCount, 0);
ScheduleBgCopyTilemapToVram(0);
sStorage->menuUnusedField = 0;
@@ -8694,7 +8694,7 @@ static const struct OamData sOamData_ItemIcon =
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -8794,7 +8794,7 @@ static void CreateItemIconSprites(void)
{
spriteSheet.tag = GFXTAG_ITEM_ICON_0 + i;
LoadCompressedSpriteSheet(&spriteSheet);
- sStorage->itemIcons[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * TILE_SIZE_4BPP + (void*)(OBJ_VRAM0);
+ 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;
@@ -9304,16 +9304,16 @@ static bool8 UpdateItemInfoWindowSlideOut(void)
return TRUE;
}
-static void DrawItemInfoWindow(u32 pos)
+static void DrawItemInfoWindow(u32 x)
{
- if (pos != 0)
+ if (x != 0)
{
- FillBgTilemapBufferRect(0, 0x13A, 0, 0xC, pos, 1, 0xFu);
- FillBgTilemapBufferRect(0, 0x93A, 0, 0x14, pos, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x13A, 0, 0xC, x, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x93A, 0, 0x14, x, 1, 0xFu);
}
- FillBgTilemapBufferRect(0, 0x13B, pos, 0xD, 1, 7, 0xFu);
- FillBgTilemapBufferRect(0, 0x13C, pos, 0xC, 1, 1, 0xFu);
- FillBgTilemapBufferRect(0, 0x13D, pos, 0x14, 1, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x13B, x, 0xD, 1, 7, 0xFu);
+ FillBgTilemapBufferRect(0, 0x13C, x, 0xC, 1, 1, 0xFu);
+ FillBgTilemapBufferRect(0, 0x13D, x, 0x14, 1, 1, 0xFu);
ScheduleBgCopyTilemapToVram(0);
}
@@ -9711,7 +9711,7 @@ bool32 AnyStorageMonWithMove(u16 moveId)
{
if (GetBoxMonData(&gPokemonStoragePtr->boxes[i][j], MON_DATA_SANITY_HAS_SPECIES)
&& !GetBoxMonData(&gPokemonStoragePtr->boxes[i][j], MON_DATA_SANITY_IS_EGG)
- && GetBoxMonData(&gPokemonStoragePtr->boxes[i][j], MON_DATA_KNOWN_MOVES, (u8*)moves))
+ && GetBoxMonData(&gPokemonStoragePtr->boxes[i][j], MON_DATA_KNOWN_MOVES, (u8 *)moves))
return TRUE;
}
}
@@ -10095,7 +10095,7 @@ static void UnkUtil_CpuRun(struct UnkUtilData *data)
for (i = 0; i < data->height; i++)
{
- CpuSet(data->src, data->dest, data->size / 2);
+ CpuCopy16(data->src, data->dest, data->size);
data->dest += 64;
data->src += data->unk * 2;
}
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 01637fd26a..2befc159f5 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -47,6 +47,7 @@
#include "constants/region_map_sections.h"
#include "constants/rgb.h"
#include "constants/songs.h"
+#include "constants/battle_config.h"
enum {
PSS_PAGE_INFO,
@@ -186,7 +187,9 @@ static EWRAM_DATA struct PokemonSummaryScreenData
bool8 unk40EF;
s16 switchCounter; // Used for various switch statement cases that decompress/load graphics or pokemon data
u8 unk_filler4[6];
+ u8 splitIconSpriteId;
} *sMonSummaryScreen = NULL;
+
EWRAM_DATA u8 gLastViewedMonIndex = 0;
static EWRAM_DATA u8 sMoveSlotToReplace = 0;
ALIGNED(4) static EWRAM_DATA u8 sAnimDelayTaskId = 0;
@@ -196,8 +199,8 @@ static bool8 LoadGraphics(void);
static void CB2_InitSummaryScreen(void);
static void InitBGs(void);
static bool8 DecompressGraphics(void);
-static void CopyMonToSummaryStruct(struct Pokemon*);
-static bool8 ExtractMonDataToSummaryStruct(struct Pokemon*);
+static void CopyMonToSummaryStruct(struct Pokemon *);
+static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *);
static void SetDefaultTilemaps(void);
static void CloseSummaryScreen(u8);
static void Task_HandleInput(u8);
@@ -205,7 +208,7 @@ static void ChangeSummaryPokemon(u8, s8);
static void Task_ChangeSummaryMon(u8);
static s8 AdvanceMonIndex(s8);
static s8 AdvanceMultiBattleMonIndex(s8);
-static bool8 IsValidToViewInMulti(struct Pokemon*);
+static bool8 IsValidToViewInMulti(struct Pokemon *);
static void ChangePage(u8, s8);
static void PssScrollRight(u8);
static void PssScrollRightEnd(u8);
@@ -235,8 +238,8 @@ static void Task_ShowAppealJamWindow(u8);
static void HandleStatusTilemap(u16, s16);
static void Task_ShowStatusWindow(u8);
static void TilemapFiveMovesDisplay(u16 *, u16, bool8);
-static void DrawPokerusCuredSymbol(struct Pokemon*);
-static void DrawExperienceProgressBar(struct Pokemon*);
+static void DrawPokerusCuredSymbol(struct Pokemon *);
+static void DrawExperienceProgressBar(struct Pokemon *);
static void DrawContestMoveHearts(u16);
static void LimitEggSummaryPageDisplay(void);
static void ResetWindows(void);
@@ -306,7 +309,7 @@ static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *);
static void CreateCaughtBallSprite(struct Pokemon *);
static void CreateSetStatusSprite(void);
static void CreateMoveSelectorSprites(u8);
-static void SpriteCb_MoveSelector(struct Sprite *);
+static void SpriteCB_MoveSelector(struct Sprite *);
static void DestroyMoveSelectorSprites(u8);
static void SetMainMoveSelectorColor(u8);
static void KeepMoveSelectorVisible(u8);
@@ -731,13 +734,73 @@ static const u8 sMovesPPLayout[] = _("{PP}{DYNAMIC 0}/{DYNAMIC 1}");
#define TAG_MON_STATUS 30001
#define TAG_MOVE_TYPES 30002
#define TAG_MON_MARKINGS 30003
+#define TAG_SPLIT_ICONS 30004
+
+static const u16 sSplitIcons_Pal[] = INCBIN_U16("graphics/interface/split_icons.gbapal");
+static const u32 sSplitIcons_Gfx[] = INCBIN_U32("graphics/interface/split_icons.4bpp.lz");
+
+static const struct OamData sOamData_SplitIcons =
+{
+ .size = SPRITE_SIZE(16x16),
+ .shape = SPRITE_SHAPE(16x16),
+ .priority = 0,
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_SplitIcons =
+{
+ .data = sSplitIcons_Gfx,
+ .size = 16*16*3/2,
+ .tag = TAG_SPLIT_ICONS,
+};
+
+static const struct SpritePalette sSpritePal_SplitIcons =
+{
+ .data = sSplitIcons_Pal,
+ .tag = TAG_SPLIT_ICONS
+};
+
+static const union AnimCmd sSpriteAnim_SplitIcon0[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_SplitIcon1[] =
+{
+ ANIMCMD_FRAME(4, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_SplitIcon2[] =
+{
+ ANIMCMD_FRAME(8, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_SplitIcons[] =
+{
+ sSpriteAnim_SplitIcon0,
+ sSpriteAnim_SplitIcon1,
+ sSpriteAnim_SplitIcon2,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_SplitIcons =
+{
+ .tileTag = TAG_SPLIT_ICONS,
+ .paletteTag = TAG_SPLIT_ICONS,
+ .oam = &sOamData_SplitIcons,
+ .anims = sSpriteAnimTable_SplitIcons,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
static const struct OamData sOamData_MoveTypes =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
@@ -919,7 +982,7 @@ static const struct OamData sOamData_MoveSelector =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -1009,7 +1072,7 @@ static const struct OamData sOamData_StatusCondition =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
@@ -1081,6 +1144,23 @@ static const struct SpriteTemplate sSpriteTemplate_StatusCondition =
static const u16 sMarkings_Pal[] = INCBIN_U16("graphics/summary_screen/markings.gbapal");
// code
+static u8 ShowSplitIcon(u32 split)
+{
+ if (sMonSummaryScreen->splitIconSpriteId == 0xFF)
+ sMonSummaryScreen->splitIconSpriteId = CreateSprite(&sSpriteTemplate_SplitIcons, 48, 129, 0);
+
+ gSprites[sMonSummaryScreen->splitIconSpriteId].invisible = FALSE;
+ StartSpriteAnim(&gSprites[sMonSummaryScreen->splitIconSpriteId], split);
+ return sMonSummaryScreen->splitIconSpriteId;
+}
+
+static void DestroySplitIcon(void)
+{
+ if (sMonSummaryScreen->splitIconSpriteId != 0xFF)
+ DestroySprite(&gSprites[sMonSummaryScreen->splitIconSpriteId]);
+ sMonSummaryScreen->splitIconSpriteId = 0xFF;
+}
+
void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void))
{
sMonSummaryScreen = AllocZeroed(sizeof(*sMonSummaryScreen));
@@ -1115,6 +1195,7 @@ void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex,
}
sMonSummaryScreen->currPageIndex = sMonSummaryScreen->minPageIndex;
+ sMonSummaryScreen->splitIconSpriteId = 0xFF;
SummaryScreen_SetAnimDelayTaskId(TASK_NONE);
if (gMonSpritesGfxPtr == NULL)
@@ -1361,6 +1442,8 @@ static bool8 DecompressGraphics(void)
break;
case 12:
LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60);
+ LoadCompressedSpriteSheet(&sSpriteSheet_SplitIcons);
+ LoadSpritePalette(&sSpritePal_SplitIcons);
sMonSummaryScreen->switchCounter = 0;
return TRUE;
}
@@ -1741,7 +1824,7 @@ static s8 AdvanceMultiBattleMonIndex(s8 delta)
}
}
-static bool8 IsValidToViewInMulti(struct Pokemon* mon)
+static bool8 IsValidToViewInMulti(struct Pokemon *mon)
{
if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NONE)
return FALSE;
@@ -1998,6 +2081,7 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr)
{
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
+ DestroySplitIcon();
ScheduleBgCopyTilemapToVram(0);
HandlePowerAccTilemap(0, 3);
HandleAppealJamTilemap(0, 3, 0);
@@ -2024,6 +2108,7 @@ static void CloseMoveSelectMode(u8 taskId)
{
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
+ DestroySplitIcon();
HandlePowerAccTilemap(0, 3);
HandleAppealJamTilemap(0, 3, 0);
}
@@ -2043,7 +2128,7 @@ static void SwitchToMovePositionSwitchMode(u8 taskId)
static void Task_HandleInput_MovePositionSwitch(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE)
{
@@ -2184,7 +2269,7 @@ static void Task_SetHandleReplaceMoveInput(u8 taskId)
static void Task_HandleReplaceMoveInput(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (MenuHelpers_ShouldWaitForLinkRecv() != TRUE)
{
@@ -2250,6 +2335,7 @@ static void ShowCantForgetHMsWindow(u8 taskId)
{
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
+ gSprites[sMonSummaryScreen->splitIconSpriteId].invisible = TRUE;
ScheduleBgCopyTilemapToVram(0);
HandlePowerAccTilemap(0, 3);
HandleAppealJamTilemap(0, 3, 0);
@@ -2260,7 +2346,7 @@ static void ShowCantForgetHMsWindow(u8 taskId)
// This redraws the power/accuracy window when the player scrolls out of the "HM Moves can't be forgotten" message
static void Task_HandleInputCantForgetHMsMoves(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
u16 move;
if (FuncIsActiveTask(Task_ShowPowerAccWindow) != 1)
{
@@ -2941,7 +3027,10 @@ static void ClearPageWindowTilemaps(u8 page)
if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
+ {
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
+ gSprites[sMonSummaryScreen->splitIconSpriteId].invisible = TRUE;
+ }
}
else
{
@@ -3083,13 +3172,13 @@ static void PrintMonOTID(void)
static void PrintMonAbilityName(void)
{
- u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
+ u16 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityNames[ability], 0, 1, 0, 1);
}
static void PrintMonAbilityDescription(void)
{
- u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
+ u16 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum);
PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityDescriptionPointers[ability], 0, 17, 0, 0);
}
@@ -3328,11 +3417,11 @@ static void PrintHeldItemName(void)
const u8 *text;
int x;
- if (sMonSummaryScreen->summary.item == ITEM_ENIGMA_BERRY
+ if (sMonSummaryScreen->summary.item == ITEM_ENIGMA_BERRY_E_READER
&& IsMultiBattle() == TRUE
&& (sMonSummaryScreen->curMonIndex == 1 || sMonSummaryScreen->curMonIndex == 4 || sMonSummaryScreen->curMonIndex == 5))
{
- text = ItemId_GetName(ITEM_ENIGMA_BERRY);
+ text = ItemId_GetName(ITEM_ENIGMA_BERRY_E_READER);
}
else if (sMonSummaryScreen->summary.item == ITEM_NONE)
{
@@ -3646,6 +3735,8 @@ static void PrintMoveDetails(u16 move)
{
if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES)
{
+ if (B_SHOW_SPLIT_ICON == TRUE)
+ ShowSplitIcon(GetBattleMoveSplit(move));
PrintMovePowerAndAccuracy(move);
PrintTextOnWindow(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0);
}
@@ -4080,14 +4171,14 @@ static void CreateMoveSelectorSprites(u8 idArrayStart)
else
StartSpriteAnim(&gSprites[spriteIds[i]], 6); // middle
- gSprites[spriteIds[i]].callback = SpriteCb_MoveSelector;
+ gSprites[spriteIds[i]].callback = SpriteCB_MoveSelector;
gSprites[spriteIds[i]].data[0] = idArrayStart;
gSprites[spriteIds[i]].data[1] = 0;
}
}
}
-static void SpriteCb_MoveSelector(struct Sprite *sprite)
+static void SpriteCB_MoveSelector(struct Sprite *sprite)
{
if (sprite->animNum > 3 && sprite->animNum < 7)
{
diff --git a/src/pokenav_conditions_gfx.c b/src/pokenav_conditions_gfx.c
index d2fb715ab8..5631f5bb2a 100644
--- a/src/pokenav_conditions_gfx.c
+++ b/src/pokenav_conditions_gfx.c
@@ -299,8 +299,8 @@ static u32 LoopedTask_OpenConditionGraphMenu(s32 state)
if (!IsConditionMenuSearchMode())
{
LoadLeftHeaderGfxForIndex(POKENAV_GFX_PARTY_MENU);
- ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, 0);
- ShowLeftHeaderGfx(POKENAV_GFX_PARTY_MENU, TRUE, 0);
+ ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, FALSE);
+ ShowLeftHeaderGfx(POKENAV_GFX_PARTY_MENU, TRUE, FALSE);
}
return LT_INC_AND_PAUSE;
case 16:
@@ -826,7 +826,7 @@ static void CreateConditionMonPic(u8 id)
{
menu->monPicSpriteId = spriteId;
gSprites[menu->monPicSpriteId].callback = MonPicGfxSpriteCallback;
- menu->monGfxPtr = (void*)VRAM + BG_VRAM_SIZE + (menu->monGfxTileStart * 32);
+ menu->monGfxPtr = (void *)VRAM + BG_VRAM_SIZE + (menu->monGfxTileStart * 32);
menu->monPalIndex = (menu->monPalIndex * 16) + 0x100;
}
}
diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c
index bbc07df2c3..f1d4421111 100644
--- a/src/pokenav_conditions_search_results.c
+++ b/src/pokenav_conditions_search_results.c
@@ -267,7 +267,7 @@ static u32 BuildPartyMonSearchResults(s32 state)
item.boxId = TOTAL_BOXES_COUNT;
for (i = 0; i < PARTY_SIZE; i++)
{
- struct Pokemon * pokemon = &gPlayerParty[i];
+ struct Pokemon *pokemon = &gPlayerParty[i];
if (!GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES))
return LT_INC_AND_CONTINUE;
if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG))
@@ -464,8 +464,8 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state)
{
u8 searchGfxId = GetSelectedConditionSearch() + POKENAV_MENUITEM_CONDITION_SEARCH_COOL;
LoadLeftHeaderGfxForIndex(searchGfxId);
- ShowLeftHeaderGfx(searchGfxId, 1, 0);
- ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, 1, 0);
+ ShowLeftHeaderGfx(searchGfxId, TRUE, FALSE);
+ ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, FALSE);
}
PokenavFadeScreen(POKENAV_FADE_FROM_BLACK);
return LT_INC_AND_PAUSE;
@@ -687,17 +687,17 @@ static void CreateSearchResultsList(void)
CreatePokenavList(&sConditionSearchResultBgTemplates[1], &template, 0);
}
-static void BufferSearchMonListItem(struct PokenavMonListItem * item, u8 * dest)
+static void BufferSearchMonListItem(struct PokenavMonListItem * item, u8 *dest)
{
u8 gender;
u8 level;
- u8 * s;
- const u8 * genderStr;
+ u8 *s;
+ const u8 *genderStr;
// Mon is in party
if (item->boxId == TOTAL_BOXES_COUNT)
{
- struct Pokemon * mon = &gPlayerParty[item->monId];
+ struct Pokemon *mon = &gPlayerParty[item->monId];
gender = GetMonGender(mon);
level = GetLevelFromMonExp(mon);
GetMonData(mon, MON_DATA_NICKNAME, gStringVar3);
diff --git a/src/pokenav_list.c b/src/pokenav_list.c
index 350a785042..ed3d40dee2 100644
--- a/src/pokenav_list.c
+++ b/src/pokenav_list.c
@@ -72,7 +72,7 @@ static void InitPokenavListWindowState(struct PokenavListWindowState *, struct P
static void SpriteCB_UpArrow(struct Sprite *);
static void SpriteCB_DownArrow(struct Sprite *);
static void SpriteCB_RightArrow(struct Sprite *);
-static void ToggleListArrows(struct PokenavListSub *, u32);
+static void ToggleListArrows(struct PokenavListSub *, bool32);
static void DestroyListArrows(struct PokenavListSub *);
static void CreateListArrowSprites(struct PokenavListWindowState *, struct PokenavListSub *);
static void LoadListArrowGfx(void);
@@ -503,7 +503,7 @@ static u32 LoopedTask_EraseListForCheckPage(s32 state)
switch (state)
{
case 0:
- ToggleListArrows(&list->sub, 1);
+ ToggleListArrows(&list->sub, TRUE);
// fall-through
case 1:
if (list->eraseIndex != list->windowState.selectedIndexOffset)
@@ -656,7 +656,7 @@ static u32 LoopedTask_ReshowListFromCheckPage(s32 state)
return LT_INC_AND_CONTINUE;
return LT_SET_STATE(4);
case 6:
- ToggleListArrows(subPtr, 0);
+ ToggleListArrows(subPtr, FALSE);
return LT_FINISH;
}
@@ -665,7 +665,7 @@ static u32 LoopedTask_ReshowListFromCheckPage(s32 state)
static void EraseListEntry(struct PokenavListMenuWindow *listWindow, s32 offset, s32 entries)
{
- u8 *tileData = (u8*)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA);
+ u8 *tileData = (u8 *)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA);
u32 width = listWindow->width * 64;
offset = (listWindow->unkA + offset) & 0xF;
@@ -694,7 +694,7 @@ static void EraseListEntry(struct PokenavListMenuWindow *listWindow, s32 offset,
static void SetListMarginTile(struct PokenavListMenuWindow *listWindow, bool32 draw)
{
u16 var;
- u16 *tilemapBuffer = (u16*)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG));
+ u16 *tilemapBuffer = (u16 *)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG));
tilemapBuffer += (listWindow->unkA << 6) + listWindow->x - 1;
if (draw)
diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c
index 7d668c67f2..c51ab10bae 100644
--- a/src/pokenav_main_menu.c
+++ b/src/pokenav_main_menu.c
@@ -50,7 +50,7 @@ static void InitHelpBar(void);
static u32 LoopedTask_SlideMenuHeaderUp(s32);
static u32 LoopedTask_SlideMenuHeaderDown(s32);
static void DrawHelpBar(u32);
-static void SpriteCB_SpinningPokenav(struct Sprite*);
+static void SpriteCB_SpinningPokenav(struct Sprite *);
static u32 LoopedTask_InitPokenavMenu(s32);
static const u16 sSpinningPokenav_Pal[] = INCBIN_U16("graphics/pokenav/nav_icon.gbapal");
diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c
index 056ab2f1d2..fd5b36fae0 100755
--- a/src/pokenav_match_call_gfx.c
+++ b/src/pokenav_match_call_gfx.c
@@ -379,7 +379,7 @@ static u32 LoopedTask_OpenMatchCall(s32 state)
ShowBg(1);
AllocMatchCallSprites();
LoadLeftHeaderGfxForIndex(3);
- ShowLeftHeaderGfx(POKENAV_GFX_MATCH_CALL_MENU, 1, 0);
+ ShowLeftHeaderGfx(POKENAV_GFX_MATCH_CALL_MENU, TRUE, FALSE);
PokenavFadeScreen(POKENAV_FADE_FROM_BLACK);
return LT_INC_AND_PAUSE;
case 7:
diff --git a/src/pokenav_match_call_list.c b/src/pokenav_match_call_list.c
index d56cfdb62e..b00c76b48a 100755
--- a/src/pokenav_match_call_list.c
+++ b/src/pokenav_match_call_list.c
@@ -24,7 +24,7 @@ struct Pokenav_MatchCallMenu
u16 numSpecialTrainers;
bool32 initFinished;
u32 loopedTaskId;
- u32 (*callback)(struct Pokenav_MatchCallMenu*);
+ u32 (*callback)(struct Pokenav_MatchCallMenu *);
struct PokenavMatchCallEntry matchCallEntries[MAX_REMATCH_ENTRIES - 1];
};
diff --git a/src/pokenav_menu_handler.c b/src/pokenav_menu_handler.c
index b72247742c..b81b4c892f 100644
--- a/src/pokenav_menu_handler.c
+++ b/src/pokenav_menu_handler.c
@@ -12,7 +12,7 @@ struct Pokenav_Menu
u16 currMenuItem;
u16 helpBarIndex;
u32 menuId;
- u32 (*callback)(struct Pokenav_Menu*);
+ u32 (*callback)(struct Pokenav_Menu *);
};
static bool32 UpdateMenuCursorPos(struct Pokenav_Menu *);
@@ -28,7 +28,7 @@ static u32 HandleCantOpenRibbonsInput(struct Pokenav_Menu *);
static u32 HandleMainMenuInputEndTutorial(struct Pokenav_Menu *);
static u32 HandleMainMenuInputTutorial(struct Pokenav_Menu *);
static u32 HandleMainMenuInput(struct Pokenav_Menu *);
-static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu*);
+static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu *);
static void SetMenuInputHandler(struct Pokenav_Menu *);
// Number of entries - 1 for that menu type
@@ -186,7 +186,7 @@ static void SetMenuInputHandler(struct Pokenav_Menu *menu)
}
}
-static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu*)
+static u32 (*GetMainMenuInputHandler(void))(struct Pokenav_Menu *)
{
switch (GetPokenavMode())
{
diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c
index b9dd130468..7d78426dcf 100644
--- a/src/pokenav_menu_handler_gfx.c
+++ b/src/pokenav_menu_handler_gfx.c
@@ -579,7 +579,7 @@ static u32 LoopedTask_OpenConditionMenu(s32 state)
case 0:
ResetBldCnt();
StartOptionAnimations_Exit();
- HideMainOrSubMenuLeftHeader(POKENAV_GFX_MAIN_MENU, 0);
+ HideMainOrSubMenuLeftHeader(POKENAV_GFX_MAIN_MENU, FALSE);
PlaySE(SE_SELECT);
return LT_INC_AND_PAUSE;
case 1:
@@ -618,7 +618,7 @@ static u32 LoopedTask_ReturnToMainMenu(s32 state)
case 0:
ResetBldCnt();
StartOptionAnimations_Exit();
- HideMainOrSubMenuLeftHeader(POKENAV_GFX_CONDITION_MENU, 0);
+ HideMainOrSubMenuLeftHeader(POKENAV_GFX_CONDITION_MENU, FALSE);
return LT_INC_AND_PAUSE;
case 1:
if (AreMenuOptionSpritesMoving())
@@ -689,7 +689,7 @@ static u32 LoopedTask_ReturnToConditionMenu(s32 state)
case 0:
ResetBldCnt();
StartOptionAnimations_Exit();
- HideMainOrSubMenuLeftHeader(POKENAV_GFX_SEARCH_MENU, 0);
+ HideMainOrSubMenuLeftHeader(POKENAV_GFX_SEARCH_MENU, FALSE);
return LT_INC_AND_PAUSE;
case 1:
if (AreMenuOptionSpritesMoving())
@@ -1222,7 +1222,7 @@ static void PrintCurrentOptionDescription(void)
{
struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX);
int menuItem = GetCurrentMenuItemId();
- const u8 * desc = sPageDescriptions[menuItem];
+ const u8 *desc = sPageDescriptions[menuItem];
u32 width = GetStringWidth(FONT_NORMAL, desc, -1);
FillWindowPixelBuffer(gfx->optionDescWindowId, PIXEL_FILL(6));
AddTextPrinterParameterized3(gfx->optionDescWindowId, FONT_NORMAL, (192 - width) / 2, 1, sOptionDescTextColors, 0, desc);
@@ -1233,7 +1233,7 @@ static void PrintCurrentOptionDescription(void)
static void PrintNoRibbonWinners(void)
{
struct Pokenav_MenuGfx * gfx = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_GFX);
- const u8 * s = gText_NoRibbonWinners;
+ const u8 *s = gText_NoRibbonWinners;
u32 width = GetStringWidth(FONT_NORMAL, s, -1);
FillWindowPixelBuffer(gfx->optionDescWindowId, PIXEL_FILL(6));
AddTextPrinterParameterized3(gfx->optionDescWindowId, FONT_NORMAL, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s);
diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c
index 828bd525df..39c1659a9a 100755
--- a/src/pokenav_region_map.c
+++ b/src/pokenav_region_map.c
@@ -366,7 +366,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState)
menuGfxId = POKENAV_GFX_MAP_MENU_ZOOMED_IN;
LoadLeftHeaderGfxForIndex(menuGfxId);
- ShowLeftHeaderGfx(menuGfxId, 1, 1);
+ ShowLeftHeaderGfx(menuGfxId, TRUE, TRUE);
PokenavFadeScreen(POKENAV_FADE_FROM_BLACK);
return LT_INC_AND_PAUSE;
case 7:
diff --git a/src/pokenav_ribbons_list.c b/src/pokenav_ribbons_list.c
index 724ced507e..cf5f99104e 100644
--- a/src/pokenav_ribbons_list.c
+++ b/src/pokenav_ribbons_list.c
@@ -22,7 +22,7 @@ enum
struct Pokenav_RibbonsMonList
{
- u32 (*callback)(struct Pokenav_RibbonsMonList*);
+ u32 (*callback)(struct Pokenav_RibbonsMonList *);
u32 loopedTaskId;
u16 winid;
s32 boxId;
@@ -256,7 +256,7 @@ static u32 BuildPartyMonRibbonList(s32 state)
item.boxId = TOTAL_BOXES_COUNT;
for (i = 0; i < PARTY_SIZE; i++)
{
- struct Pokemon * pokemon = &gPlayerParty[i];
+ struct Pokemon *pokemon = &gPlayerParty[i];
if (!GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES))
return LT_INC_AND_CONTINUE;
if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG) && !GetMonData(pokemon, MON_DATA_SANITY_IS_BAD_EGG))
@@ -464,7 +464,7 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state)
if (!menu->fromSummary)
{
LoadLeftHeaderGfxForIndex(POKENAV_GFX_RIBBONS_MENU);
- ShowLeftHeaderGfx(POKENAV_GFX_RIBBONS_MENU, 1, 0);
+ ShowLeftHeaderGfx(POKENAV_GFX_RIBBONS_MENU, TRUE, FALSE);
}
return LT_INC_AND_PAUSE;
case 5:
@@ -669,7 +669,7 @@ static void DrawListIndexNumber(s32 windowId, s32 index, s32 max)
u8 strbuf[16];
u32 x;
- u8 * ptr = strbuf;
+ u8 *ptr = strbuf;
ptr = ConvertIntToDecimalStringN(ptr, index, STR_CONV_MODE_RIGHT_ALIGN, 3);
*ptr++ = CHAR_SLASH;
ConvertIntToDecimalStringN(ptr, max, STR_CONV_MODE_RIGHT_ALIGN, 3);
@@ -696,18 +696,18 @@ static void CreateRibbonMonsList(void)
}
// Buffers the "Nickname gender/level" text for the ribbon mon list
-static void BufferRibbonMonInfoText(struct PokenavListItem * listItem, u8 * dest)
+static void BufferRibbonMonInfoText(struct PokenavListItem * listItem, u8 *dest)
{
u8 gender;
u8 level;
- u8 * s;
- const u8 * genderStr;
+ u8 *s;
+ const u8 *genderStr;
struct PokenavMonListItem * item = (struct PokenavMonListItem *)listItem;
// Mon is in party
if (item->boxId == TOTAL_BOXES_COUNT)
{
- struct Pokemon * mon = &gPlayerParty[item->monId];
+ struct Pokemon *mon = &gPlayerParty[item->monId];
gender = GetMonGender(mon);
level = GetLevelFromMonExp(mon);
GetMonData(mon, MON_DATA_NICKNAME, gStringVar3);
diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c
index c2673db6ae..3bc7cb236c 100644
--- a/src/pokenav_ribbons_summary.c
+++ b/src/pokenav_ribbons_summary.c
@@ -1154,7 +1154,7 @@ static const struct OamData sOamData_RibbonIconBig =
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c
index 5572ef8338..83298b03df 100644
--- a/src/rayquaza_scene.c
+++ b/src/rayquaza_scene.c
@@ -154,7 +154,7 @@ static const struct OamData sOam_64x64 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -171,7 +171,7 @@ static const struct OamData sOam_32x32 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -188,7 +188,7 @@ static const struct OamData sOam_64x32 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -205,7 +205,7 @@ static const struct OamData sOam_32x16 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
@@ -222,7 +222,7 @@ static const struct OamData sOam_16x8 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x8),
.x = 0,
@@ -239,7 +239,7 @@ static const struct OamData sOam_16x32 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x32),
.x = 0,
@@ -256,7 +256,7 @@ static const struct OamData sOam_16x16 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -273,7 +273,7 @@ static const struct OamData sOam_32x8 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
@@ -1627,7 +1627,7 @@ static void Task_DuoFightAnim(u8 taskId)
StopMapMusic();
}
- BlendPalettes(PALETTES_ALL, 0x10, 0);
+ BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK);
SetVBlankCallback(VBlankCB_DuoFight);
PlaySE(SE_DOWNPOUR);
@@ -2284,7 +2284,7 @@ static void Task_RayDescendsAnim(u8 taskId)
LoadDescendsSceneGfx();
SetGpuRegBits(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
- BlendPalettes(PALETTES_ALL, 0x10, 0);
+ BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK);
SetVBlankCallback(VBlankCB_RayquazaScene);
sRayScene->revealedLightLine = 0;
sRayScene->revealedLightTimer = 0;
@@ -2501,7 +2501,7 @@ static void Task_RayChargesAnim(u8 taskId)
InitChargesSceneBgs();
LoadChargesSceneGfx();
SetWindowsHideVertBorders();
- BlendPalettes(PALETTES_ALL, 0x10, 0);
+ BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK);
SetVBlankCallback(VBlankCB_RayquazaScene);
tState = 0;
tTimer = 0;
@@ -2697,7 +2697,7 @@ static void Task_RayChasesAwayAnim(u8 taskId)
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(9, 14));
- BlendPalettes(PALETTES_ALL, 0x10, 0);
+ BlendPalettes(PALETTES_ALL, 0x10, RGB_BLACK);
SetVBlankCallback(VBlankCB_RayquazaScene);
tState = 0;
tTimer = 0;
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 4365f2cb3d..3a831c8ce1 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -363,9 +363,9 @@ static void Task_RecordMixing_Main(u8 taskId)
SetLinkWaitingForScript();
if (gWirelessCommType != 0)
CreateTask(Task_ReturnToFieldRecordMixing, 10);
- ClearDialogWindowAndFrame(0, 1);
+ ClearDialogWindowAndFrame(0, TRUE);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
break;
}
@@ -1174,7 +1174,7 @@ static void ReceiveApprenticeData(struct Apprentice *records, size_t recordSize,
u32 apprenticeSaveId;
ShufflePlayerIndices(mixIndices);
- mixApprentice = (void*)records + (recordSize * mixIndices[multiplayerId]);
+ mixApprentice = (void *)records + (recordSize * mixIndices[multiplayerId]);
numApprentices = 0;
apprenticeId = 0;
for (i = 0; i < 2; i++)
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index 951572636a..e8785b5f82 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -67,7 +67,8 @@ struct RecordedBattleSave
u32 checksum;
};
-STATIC_ASSERT(sizeof(struct RecordedBattleSave) <= SECTOR_DATA_SIZE, RecordedBattleSaveFreeSpace);
+// Save data using TryWriteSpecialSaveSector is allowed to exceed SECTOR_DATA_SIZE (up to the counter field)
+STATIC_ASSERT(sizeof(struct RecordedBattleSave) <= SECTOR_COUNTER_OFFSET, RecordedBattleSaveFreeSpace);
EWRAM_DATA u32 gRecordedBattleRngSeed = 0;
EWRAM_DATA u32 gBattlePalaceMoveSelectionRngValue = 0;
@@ -302,7 +303,7 @@ static bool32 IsRecordedBattleSaveValid(struct RecordedBattleSave *save)
return FALSE;
if (save->battleFlags & ILLEGAL_BATTLE_TYPES)
return FALSE;
- if (CalcByteArraySum((void*)(save), sizeof(*save) - 4) != save->checksum)
+ if (CalcByteArraySum((void *)(save), sizeof(*save) - 4) != save->checksum)
return FALSE;
return TRUE;
@@ -313,9 +314,9 @@ static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct
memset(saveSector, 0, SECTOR_SIZE);
memcpy(saveSector, battleSave, sizeof(*battleSave));
- saveSector->checksum = CalcByteArraySum((void*)(saveSector), sizeof(*saveSector) - 4);
+ saveSector->checksum = CalcByteArraySum((void *)(saveSector), sizeof(*saveSector) - 4);
- if (TryWriteSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void*)(saveSector)) != SAVE_STATUS_OK)
+ if (TryWriteSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void *)(saveSector)) != SAVE_STATUS_OK)
return FALSE;
else
return TRUE;
@@ -481,7 +482,7 @@ bool32 MoveRecordedBattleToSaveData(void)
static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSector *saveBuffer)
{
- if (TryReadSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != SAVE_STATUS_OK)
+ if (TryReadSpecialSaveSector(SECTOR_ID_RECORDED_BATTLE, (void *)(saveBuffer)) != SAVE_STATUS_OK)
return FALSE;
memcpy(dst, saveBuffer, sizeof(struct RecordedBattleSave));
diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c
index e817fdd143..5c93148675 100644
--- a/src/reset_rtc_screen.c
+++ b/src/reset_rtc_screen.c
@@ -159,7 +159,7 @@ static const struct OamData sOamData_Arrow =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index 1b49a374c8..84f2480035 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -63,7 +63,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
gBattle_BG3_Y = 0;
break;
case 1:
- CpuFastFill(0, (void*)(VRAM), VRAM_SIZE);
+ CpuFastFill(0, (void *)(VRAM), VRAM_SIZE);
break;
case 2:
LoadBattleTextboxAndBackground();
@@ -220,6 +220,8 @@ static void CreateBattlerSprite(u8 battler)
{
if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
return;
+ if (gBattleScripting.monCaught) // Don't create opponent sprite if it has been caught.
+ return;
SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler));
diff --git a/src/rom_header.s b/src/rom_header.s
index 9ab7240fba..c5fa5ddf40 100644
--- a/src/rom_header.s
+++ b/src/rom_header.s
@@ -1,5 +1,5 @@
@ Note: ROM header data is empty space here.
-@ It's populated by gbafix using data provided in the Makefile.
+@ It's populated by gbafix using data provided in the Makefile.
.global Start
Start:
@@ -41,20 +41,20 @@ RomHeaderChecksum:
RomHeaderReserved2:
.space 2
- .word 0
+ .word 0
- .global GPIOPortData
+ .global GPIOPortData
GPIOPortData:
- .2byte 0
+ .2byte 0
- .global GPIOPortDirection
+ .global GPIOPortDirection
GPIOPortDirection:
- .2byte 0
+ .2byte 0
- .global GPIOPortReadEnable
+ .global GPIOPortReadEnable
GPIOPortReadEnable:
- .2byte 0
+ .2byte 0
- .2byte 0
+ .2byte 0
- .space 0x34
+ .space 0x34
diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c
index a1dcf4babf..d769d47f82 100644
--- a/src/rom_header_gf.c
+++ b/src/rom_header_gf.c
@@ -15,8 +15,8 @@ struct GFRomHeader
const struct CompressedSpriteSheet * monBackPics;
const struct CompressedSpritePalette * monNormalPalettes;
const struct CompressedSpritePalette * monShinyPalettes;
- const u8 * const * monIcons;
- const u8 * monIconPaletteIds;
+ const u8 *const * monIcons;
+ const u8 *monIconPaletteIds;
const struct SpritePalette * monIconPalettes;
const u8 (* monSpeciesNames)[];
const u8 (* moveNames)[];
@@ -30,7 +30,7 @@ struct GFRomHeader
u32 mysteryEventFlag;
u32 pokedexCount;
u8 playerNameLength;
- u8 unk2;
+ u8 trainerNameLength;
u8 pokemonNameLength1;
u8 pokemonNameLength2;
u8 unk5;
@@ -61,7 +61,7 @@ struct GFRomHeader
u32 unk18;
const struct BaseStats * baseStats;
const u8 (* abilityNames)[];
- const u8 * const * abilityDescriptions;
+ const u8 *const * abilityDescriptions;
const struct Item * items;
const struct BattleMove * moves;
const struct CompressedSpriteSheet * ballGfx;
@@ -79,7 +79,7 @@ struct GFRomHeader
u32 giftRibbonsOffset;
u32 enigmaBerryOffset;
u32 enigmaBerrySize;
- const u8 * moveDescriptions;
+ const u8 *moveDescriptions;
u32 unk20;
};
@@ -109,7 +109,7 @@ static const struct GFRomHeader sGFRomHeader = {
.mysteryEventFlag = FLAG_SYS_MYSTERY_EVENT_ENABLE,
.pokedexCount = NATIONAL_DEX_COUNT,
.playerNameLength = PLAYER_NAME_LENGTH,
- .unk2 = 10,
+ .trainerNameLength = TRAINER_NAME_LENGTH,
.pokemonNameLength1 = POKEMON_NAME_LENGTH,
.pokemonNameLength2 = POKEMON_NAME_LENGTH,
// Two of the below 12s are likely move/ability name length, given their presence in this header
diff --git a/src/rotating_gate.c b/src/rotating_gate.c
index e2fd575a18..d1184dae01 100644
--- a/src/rotating_gate.c
+++ b/src/rotating_gate.c
@@ -233,7 +233,7 @@ static const struct OamData sOamData_RotatingGateLarge =
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
@@ -250,7 +250,7 @@ static const struct OamData sOamData_RotatingGateRegular =
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -874,7 +874,12 @@ static s32 RotatingGate_CanRotate(u8 gateId, s32 rotationDirection)
if (sRotatingGate_ArmLayout[shape][2 * i + j])
{
- if (MapGridIsImpassableAt(x + armPos[armIndex].x, y + armPos[armIndex].y) == TRUE)
+ #ifdef BUGFIX
+ // Collision has a range 0-3, any value != 0 is impassable
+ if (MapGridGetCollisionAt(x + armPos[armIndex].x, y + armPos[armIndex].y))
+ #else
+ if (MapGridGetCollisionAt(x + armPos[armIndex].x, y + armPos[armIndex].y) == 1)
+ #endif
return FALSE;
}
}
diff --git a/src/rotating_tile_puzzle.c b/src/rotating_tile_puzzle.c
index 4581f6e5be..7581b81072 100644
--- a/src/rotating_tile_puzzle.c
+++ b/src/rotating_tile_puzzle.c
@@ -27,33 +27,33 @@ struct RotatingTilePuzzle
static const u8 sMovement_ShiftRight[] =
{
- MOVEMENT_ACTION_STORE_AND_LOCK_ANIM,
+ MOVEMENT_ACTION_LOCK_ANIM,
MOVEMENT_ACTION_WALK_NORMAL_RIGHT,
- MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM,
+ MOVEMENT_ACTION_UNLOCK_ANIM,
MOVEMENT_ACTION_STEP_END
};
static const u8 sMovement_ShiftDown[] =
{
- MOVEMENT_ACTION_STORE_AND_LOCK_ANIM,
+ MOVEMENT_ACTION_LOCK_ANIM,
MOVEMENT_ACTION_WALK_NORMAL_DOWN,
- MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM,
+ MOVEMENT_ACTION_UNLOCK_ANIM,
MOVEMENT_ACTION_STEP_END
};
static const u8 sMovement_ShiftLeft[] =
{
- MOVEMENT_ACTION_STORE_AND_LOCK_ANIM,
+ MOVEMENT_ACTION_LOCK_ANIM,
MOVEMENT_ACTION_WALK_NORMAL_LEFT,
- MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM,
+ MOVEMENT_ACTION_UNLOCK_ANIM,
MOVEMENT_ACTION_STEP_END
};
static const u8 sMovement_ShiftUp[] =
{
- MOVEMENT_ACTION_STORE_AND_LOCK_ANIM,
+ MOVEMENT_ACTION_LOCK_ANIM,
MOVEMENT_ACTION_WALK_NORMAL_UP,
- MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM,
+ MOVEMENT_ACTION_UNLOCK_ANIM,
MOVEMENT_ACTION_STEP_END
};
diff --git a/src/roulette.c b/src/roulette.c
index 5b870fb604..a8be6ad7ca 100644
--- a/src/roulette.c
+++ b/src/roulette.c
@@ -1040,11 +1040,11 @@ static const struct YesNoFuncTable sYesNoTable_KeepPlaying =
static void CB2_Roulette(void)
{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- if (sRoulette->flashUtil.enabled)
- RouletteFlash_Run(&sRoulette->flashUtil);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ if (sRoulette->flashUtil.enabled)
+ RouletteFlash_Run(&sRoulette->flashUtil);
}
static void VBlankCB_Roulette(void)
@@ -1293,7 +1293,7 @@ static void Task_StartPlaying(u8 taskId)
static void Task_AskKeepPlaying(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
- DrawStdWindowFrame(sTextWindowId, 0);
+ DrawStdWindowFrame(sTextWindowId, FALSE);
AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, Roulette_Text_KeepPlaying, 0, 1, TEXT_SKIP_DRAW, 0);
CopyWindowToVram(sTextWindowId, COPYWIN_FULL);
DoYesNoFuncWithChoice(taskId, &sYesNoTable_KeepPlaying);
@@ -3401,7 +3401,7 @@ static void Task_DeclineMinBet(u8 taskId)
{
ClearStdWindowAndFrame(0, FALSE);
HideCoinsWindow();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
}
@@ -3413,7 +3413,7 @@ static void Task_NotEnoughForMinBet(u8 taskId)
gSpecialVar_0x8004 = 1;
HideCoinsWindow();
ClearStdWindowAndFrame(0, TRUE);
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
}
}
@@ -3475,7 +3475,7 @@ static void Task_PrintRouletteEntryMsg(u8 taskId)
void PlayRoulette(void)
{
u8 taskId;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
ShowCoinsWindow(GetCoins(), 1, 1);
taskId = CreateTask(Task_PrintRouletteEntryMsg, 0);
gTasks[taskId].tCoins = GetCoins();
@@ -4516,7 +4516,7 @@ static void SpriteCB_ShroomishExit(struct Sprite *sprite)
// Delay for screen shaking, then exit left
if (sprite->data[1]++ >= sprite->data[3])
{
- sprite->x -= 2;
+ sprite->x -= 2;
if (sprite->x < -16)
{
if (!sRoulette->ballUnstuck)
diff --git a/src/safari_zone.c b/src/safari_zone.c
index 1f13976569..ab4d4736ce 100644
--- a/src/safari_zone.c
+++ b/src/safari_zone.c
@@ -83,7 +83,7 @@ bool8 SafariZoneTakeStep(void)
sSafariZoneStepCounter--;
if (sSafariZoneStepCounter == 0)
{
- ScriptContext1_SetupScript(SafariZone_EventScript_TimesUp);
+ ScriptContext_SetupScript(SafariZone_EventScript_TimesUp);
return TRUE;
}
return FALSE;
@@ -91,7 +91,7 @@ bool8 SafariZoneTakeStep(void)
void SafariZoneRetirePrompt(void)
{
- ScriptContext1_SetupScript(SafariZone_EventScript_RetirePrompt);
+ ScriptContext_SetupScript(SafariZone_EventScript_RetirePrompt);
}
void CB2_EndSafariBattle(void)
@@ -105,15 +105,15 @@ void CB2_EndSafariBattle(void)
}
else if (gBattleOutcome == B_OUTCOME_NO_SAFARI_BALLS)
{
- ScriptContext2_RunNewScript(SafariZone_EventScript_OutOfBallsMidBattle);
+ RunScriptImmediately(SafariZone_EventScript_OutOfBallsMidBattle);
WarpIntoMap();
gFieldCallback = FieldCB_ReturnToFieldNoScriptCheckMusic;
SetMainCallback2(CB2_LoadMap);
}
else if (gBattleOutcome == B_OUTCOME_CAUGHT)
{
- ScriptContext1_SetupScript(SafariZone_EventScript_OutOfBalls);
- ScriptContext1_Stop();
+ ScriptContext_SetupScript(SafariZone_EventScript_OutOfBalls);
+ ScriptContext_Stop();
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
}
diff --git a/src/save.c b/src/save.c
index 52cdaa5ddc..e7c91580e5 100644
--- a/src/save.c
+++ b/src/save.c
@@ -196,7 +196,7 @@ static u8 HandleWriteSector(u16 sectorId, const struct SaveSectorLocation *locat
// Set footer data
gReadWriteSector->id = sectorId;
- gReadWriteSector->security = SECTOR_SECURITY_NUM;
+ gReadWriteSector->signature = SECTOR_SIGNATURE;
gReadWriteSector->counter = gSaveCounter;
// Copy current data to temp buffer for writing
@@ -217,7 +217,7 @@ static u8 HandleWriteSectorNBytes(u8 sectorId, u8 *data, u16 size)
for (i = 0; i < SECTOR_SIZE; i++)
((u8 *)sector)[i] = 0;
- sector->security = SECTOR_SECURITY_NUM;
+ sector->signature = SECTOR_SIGNATURE;
// Copy data to temp buffer for writing
for (i = 0; i < size; i++)
@@ -306,7 +306,7 @@ static u8 HandleReplaceSectorAndVerify(u16 sectorId, const struct SaveSectorLoca
return status;
}
-// Similar to HandleWriteSector, but fully erases the sector first, and skips writing the first security byte
+// Similar to HandleWriteSector, but fully erases the sector first, and skips writing the first signature byte
static u8 HandleReplaceSector(u16 sectorId, const struct SaveSectorLocation *locations)
{
u16 i;
@@ -330,7 +330,7 @@ static u8 HandleReplaceSector(u16 sectorId, const struct SaveSectorLocation *loc
// Set footer data
gReadWriteSector->id = sectorId;
- gReadWriteSector->security = SECTOR_SECURITY_NUM;
+ gReadWriteSector->signature = SECTOR_SIGNATURE;
gReadWriteSector->counter = gSaveCounter;
// Copy current data to temp buffer for writing
@@ -344,8 +344,8 @@ static u8 HandleReplaceSector(u16 sectorId, const struct SaveSectorLocation *loc
status = SAVE_STATUS_OK;
- // Write new save data up to security field
- for (i = 0; i < SECTOR_SECURITY_OFFSET; i++)
+ // Write new save data up to signature field
+ for (i = 0; i < SECTOR_SIGNATURE_OFFSET; i++)
{
if (ProgramFlashByte(sector, i, ((u8 *)gReadWriteSector)[i]))
{
@@ -362,14 +362,14 @@ static u8 HandleReplaceSector(u16 sectorId, const struct SaveSectorLocation *loc
}
else
{
- // Writing save data succeeded, write security and counter
+ // Writing save data succeeded, write signature and counter
status = SAVE_STATUS_OK;
- // Write security (skipping the first byte) and counter fields.
- // The byte of security that is skipped is instead written by WriteSectorSecurityByte or WriteSectorSecurityByte_NoOffset
- for (i = 0; i < SECTOR_SIZE - (SECTOR_SECURITY_OFFSET + 1); i++)
+ // Write signature (skipping the first byte) and counter fields.
+ // The byte of signature that is skipped is instead written by WriteSectorSignatureByte or WriteSectorSignatureByte_NoOffset
+ for (i = 0; i < SECTOR_SIZE - (SECTOR_SIGNATURE_OFFSET + 1); i++)
{
- if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET + 1 + i, ((u8 *)gReadWriteSector)[SECTOR_SECURITY_OFFSET + 1 + i]))
+ if (ProgramFlashByte(sector, SECTOR_SIGNATURE_OFFSET + 1 + i, ((u8 *)gReadWriteSector)[SECTOR_SIGNATURE_OFFSET + 1 + i]))
{
status = SAVE_STATUS_ERROR;
break;
@@ -378,7 +378,7 @@ static u8 HandleReplaceSector(u16 sectorId, const struct SaveSectorLocation *loc
if (status == SAVE_STATUS_ERROR)
{
- // Writing security/counter failed
+ // Writing signature/counter failed
SetDamagedSectorBits(ENABLE, sector);
return SAVE_STATUS_ERROR;
}
@@ -391,16 +391,16 @@ static u8 HandleReplaceSector(u16 sectorId, const struct SaveSectorLocation *loc
}
}
-static u8 WriteSectorSecurityByte_NoOffset(u16 sectorId, const struct SaveSectorLocation *locations)
+static u8 WriteSectorSignatureByte_NoOffset(u16 sectorId, const struct SaveSectorLocation *locations)
{
// Adjust sector id for current save slot
- // This first line lacking -1 is the only difference from WriteSectorSecurityByte
+ // This first line lacking -1 is the only difference from WriteSectorSignatureByte
u16 sector = sectorId + gLastWrittenSector;
sector %= NUM_SECTORS_PER_SLOT;
sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS);
- // Write just the first byte of the security field, which was skipped by HandleReplaceSector
- if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET, SECTOR_SECURITY_NUM & 0xFF))
+ // Write just the first byte of the signature field, which was skipped by HandleReplaceSector
+ if (ProgramFlashByte(sector, SECTOR_SIGNATURE_OFFSET, SECTOR_SIGNATURE & 0xFF))
{
// Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
SetDamagedSectorBits(ENABLE, sector);
@@ -416,15 +416,15 @@ static u8 WriteSectorSecurityByte_NoOffset(u16 sectorId, const struct SaveSector
}
}
-static u8 CopySectorSecurityByte(u16 sectorId, const struct SaveSectorLocation *locations)
+static u8 CopySectorSignatureByte(u16 sectorId, const struct SaveSectorLocation *locations)
{
// Adjust sector id for current save slot
u16 sector = sectorId + gLastWrittenSector - 1;
sector %= NUM_SECTORS_PER_SLOT;
sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS);
- // Copy just the first byte of the security field from the read/write buffer
- if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET, ((u8 *)gReadWriteSector)[SECTOR_SECURITY_OFFSET]))
+ // Copy just the first byte of the signature field from the read/write buffer
+ if (ProgramFlashByte(sector, SECTOR_SIGNATURE_OFFSET, ((u8 *)gReadWriteSector)[SECTOR_SIGNATURE_OFFSET]))
{
// Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
SetDamagedSectorBits(ENABLE, sector);
@@ -440,15 +440,15 @@ static u8 CopySectorSecurityByte(u16 sectorId, const struct SaveSectorLocation *
}
}
-static u8 WriteSectorSecurityByte(u16 sectorId, const struct SaveSectorLocation *locations)
+static u8 WriteSectorSignatureByte(u16 sectorId, const struct SaveSectorLocation *locations)
{
// Adjust sector id for current save slot
u16 sector = sectorId + gLastWrittenSector - 1;
sector %= NUM_SECTORS_PER_SLOT;
sector += NUM_SECTORS_PER_SLOT * (gSaveCounter % NUM_SAVE_SLOTS);
- // Write just the first byte of the security field, which was skipped by HandleReplaceSector
- if (ProgramFlashByte(sector, SECTOR_SECURITY_OFFSET, SECTOR_SECURITY_NUM & 0xFF))
+ // Write just the first byte of the signature field, which was skipped by HandleReplaceSector
+ if (ProgramFlashByte(sector, SECTOR_SIGNATURE_OFFSET, SECTOR_SIGNATURE & 0xFF))
{
// Sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter.
SetDamagedSectorBits(ENABLE, sector);
@@ -500,8 +500,8 @@ static u8 CopySaveSlotData(u16 sectorId, struct SaveSectorLocation *locations)
checksum = CalculateChecksum(gReadWriteSector->data, locations[id].size);
- // Only copy data for sectors whose security and checksum fields are correct
- if (gReadWriteSector->security == SECTOR_SECURITY_NUM && gReadWriteSector->checksum == checksum)
+ // Only copy data for sectors whose signature and checksum fields are correct
+ if (gReadWriteSector->signature == SECTOR_SIGNATURE && gReadWriteSector->checksum == checksum)
{
u16 j;
for (j = 0; j < locations[id].size; j++)
@@ -519,7 +519,7 @@ static u8 GetSaveValidStatus(const struct SaveSectorLocation *locations)
u32 saveSlot1Counter = 0;
u32 saveSlot2Counter = 0;
u32 validSectorFlags = 0;
- bool8 securityPassed = FALSE;
+ bool8 signatureValid = FALSE;
u8 saveSlot1Status;
u8 saveSlot2Status;
@@ -527,9 +527,9 @@ static u8 GetSaveValidStatus(const struct SaveSectorLocation *locations)
for (i = 0; i < NUM_SECTORS_PER_SLOT; i++)
{
ReadFlashSector(i, gReadWriteSector);
- if (gReadWriteSector->security == SECTOR_SECURITY_NUM)
+ if (gReadWriteSector->signature == SECTOR_SIGNATURE)
{
- securityPassed = TRUE;
+ signatureValid = TRUE;
checksum = CalculateChecksum(gReadWriteSector->data, locations[gReadWriteSector->id].size);
if (gReadWriteSector->checksum == checksum)
{
@@ -539,7 +539,7 @@ static u8 GetSaveValidStatus(const struct SaveSectorLocation *locations)
}
}
- if (securityPassed)
+ if (signatureValid)
{
if (validSectorFlags == (1 << NUM_SECTORS_PER_SLOT) - 1)
saveSlot1Status = SAVE_STATUS_OK;
@@ -548,20 +548,20 @@ static u8 GetSaveValidStatus(const struct SaveSectorLocation *locations)
}
else
{
- // No sectors in slot 1 have the security number, treat it as empty
+ // No sectors in slot 1 have the correct signature, treat it as empty
saveSlot1Status = SAVE_STATUS_EMPTY;
}
validSectorFlags = 0;
- securityPassed = FALSE;
+ signatureValid = FALSE;
// Check save slot 2
for (i = 0; i < NUM_SECTORS_PER_SLOT; i++)
{
ReadFlashSector(i + NUM_SECTORS_PER_SLOT, gReadWriteSector);
- if (gReadWriteSector->security == SECTOR_SECURITY_NUM)
+ if (gReadWriteSector->signature == SECTOR_SIGNATURE)
{
- securityPassed = TRUE;
+ signatureValid = TRUE;
checksum = CalculateChecksum(gReadWriteSector->data, locations[gReadWriteSector->id].size);
if (gReadWriteSector->checksum == checksum)
{
@@ -571,7 +571,7 @@ static u8 GetSaveValidStatus(const struct SaveSectorLocation *locations)
}
}
- if (securityPassed)
+ if (signatureValid)
{
if (validSectorFlags == (1 << NUM_SECTORS_PER_SLOT) - 1)
saveSlot2Status = SAVE_STATUS_OK;
@@ -580,7 +580,7 @@ static u8 GetSaveValidStatus(const struct SaveSectorLocation *locations)
}
else
{
- // No sectors in slot 2 have the security number, treat it as empty.
+ // No sectors in slot 2 have the correct signature, treat it as empty.
saveSlot2Status = SAVE_STATUS_EMPTY;
}
@@ -642,12 +642,12 @@ static u8 TryLoadSaveSector(u8 sectorId, u8 *data, u16 size)
u16 i;
struct SaveSector *sector = &gSaveDataBuffer;
ReadFlashSector(sectorId, sector);
- if (sector->security == SECTOR_SECURITY_NUM)
+ if (sector->signature == SECTOR_SIGNATURE)
{
u16 checksum = CalculateChecksum(sector->data, size);
if (sector->id == checksum)
{
- // Security and checksum are correct, copy data
+ // Signature and checksum are correct, copy data
for (i = 0; i < size; i++)
data[i] = sector->data[i];
return SAVE_STATUS_OK;
@@ -660,7 +660,7 @@ static u8 TryLoadSaveSector(u8 sectorId, u8 *data, u16 size)
}
else
{
- // Incorrect security value
+ // Incorrect signature value
return SAVE_STATUS_EMPTY;
}
}
@@ -689,18 +689,18 @@ static u16 CalculateChecksum(void *data, u16 size)
static void UpdateSaveAddresses(void)
{
int i = SECTOR_ID_SAVEBLOCK2;
- gRamSaveSectorLocations[i].data = (void*)(gSaveBlock2Ptr) + sSaveSlotLayout[i].offset;
+ gRamSaveSectorLocations[i].data = (void *)(gSaveBlock2Ptr) + sSaveSlotLayout[i].offset;
gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size;
for (i = SECTOR_ID_SAVEBLOCK1_START; i <= SECTOR_ID_SAVEBLOCK1_END; i++)
{
- gRamSaveSectorLocations[i].data = (void*)(gSaveBlock1Ptr) + sSaveSlotLayout[i].offset;
+ gRamSaveSectorLocations[i].data = (void *)(gSaveBlock1Ptr) + sSaveSlotLayout[i].offset;
gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size;
}
for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //setting i to SECTOR_ID_PKMN_STORAGE_START does not match
{
- gRamSaveSectorLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSlotLayout[i].offset;
+ gRamSaveSectorLocations[i].data = (void *)(gPokemonStoragePtr) + sSaveSlotLayout[i].offset;
gRamSaveSectorLocations[i].size = sSaveSlotLayout[i].size;
}
}
@@ -747,7 +747,7 @@ u8 HandleSavingData(u8 saveType)
for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++)
HandleReplaceSector(i, gRamSaveSectorLocations);
for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++)
- WriteSectorSecurityByte_NoOffset(i, gRamSaveSectorLocations);
+ WriteSectorSignatureByte_NoOffset(i, gRamSaveSectorLocations);
break;
case SAVE_OVERWRITE_DIFFERENT_FILE:
// Erase Hall of Fame
@@ -818,9 +818,9 @@ bool8 LinkFullSave_ReplaceLastSector(void)
return FALSE;
}
-bool8 LinkFullSave_SetLastSectorSecurity(void)
+bool8 LinkFullSave_SetLastSectorSignature(void)
{
- CopySectorSecurityByte(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations);
+ CopySectorSignatureByte(NUM_SECTORS_PER_SLOT, gRamSaveSectorLocations);
if (gDamagedSaveSectors)
DoSaveFailedScreen(SAVE_NORMAL);
return FALSE;
@@ -852,14 +852,14 @@ bool8 WriteSaveBlock1Sector(void)
{
// Write a single sector of SaveBlock1
HandleReplaceSectorAndVerify(gIncrementalSectorId + 1, gRamSaveSectorLocations);
- WriteSectorSecurityByte(sectorId, gRamSaveSectorLocations);
+ WriteSectorSignatureByte(sectorId, gRamSaveSectorLocations);
}
else
{
// Beyond SaveBlock1, don't write the sector.
- // Does write 1 byte of the next sector's security field, but as these
+ // Does write 1 byte of the next sector's signature field, but as these
// are the same for all valid sectors it doesn't matter.
- WriteSectorSecurityByte(sectorId, gRamSaveSectorLocations);
+ WriteSectorSignatureByte(sectorId, gRamSaveSectorLocations);
finished = TRUE;
}
@@ -924,17 +924,17 @@ u16 GetSaveBlocksPointersBaseOffset(void)
return 0;
}
-u32 TryReadSpecialSaveSector(u8 sector, u8* dst)
+u32 TryReadSpecialSaveSector(u8 sector, u8 *dst)
{
s32 i;
s32 size;
- u8* savData;
+ u8 *savData;
if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE)
return SAVE_STATUS_ERROR;
ReadFlash(sector, 0, (u8 *)&gSaveDataBuffer, SECTOR_SIZE);
- if (*(u32*)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTOR_SENTINEL)
+ if (*(u32 *)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTOR_SENTINEL)
return SAVE_STATUS_ERROR;
// Copies whole save sector except u32 counter
@@ -946,18 +946,18 @@ u32 TryReadSpecialSaveSector(u8 sector, u8* dst)
return SAVE_STATUS_OK;
}
-u32 TryWriteSpecialSaveSector(u8 sector, u8* src)
+u32 TryWriteSpecialSaveSector(u8 sector, u8 *src)
{
s32 i;
s32 size;
- u8* savData;
- void* savDataBuffer;
+ u8 *savData;
+ void *savDataBuffer;
if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE)
return SAVE_STATUS_ERROR;
savDataBuffer = &gSaveDataBuffer;
- *(u32*)(savDataBuffer) = SPECIAL_SECTOR_SENTINEL;
+ *(u32 *)(savDataBuffer) = SPECIAL_SECTOR_SENTINEL;
// Copies whole save sector except u32 counter
i = 0;
@@ -978,7 +978,7 @@ u32 TryWriteSpecialSaveSector(u8 sector, u8* src)
// Most notably it does save the PC data.
void Task_LinkFullSave(u8 taskId)
{
- s16* data = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
switch (tState)
{
@@ -1030,7 +1030,7 @@ void Task_LinkFullSave(u8 taskId)
case 8:
if (IsLinkTaskFinished())
{
- LinkFullSave_SetLastSectorSecurity();
+ LinkFullSave_SetLastSectorSignature();
tState = 9;
}
break;
diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c
index 9b32a938ff..877482728f 100644
--- a/src/save_failed_screen.c
+++ b/src/save_failed_screen.c
@@ -50,7 +50,7 @@ static const struct OamData sClockOamData =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 418bf58770..a1262730ad 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -62,6 +62,7 @@ static EWRAM_DATA u16 sMovingNpcMapNum = 0;
static EWRAM_DATA u16 sFieldEffectScriptId = 0;
static u8 sBrailleWindowId;
+static bool8 gIsScriptedWildDouble;
extern const SpecialFunc gSpecials[];
extern const u8 *gStdScripts[];
@@ -84,7 +85,7 @@ static const u8 sScriptConditionTable[6][3] =
1, 0, 1, // !=
};
-static u8 * const sScriptStringVars[] =
+static u8 *const sScriptStringVars[] =
{
gStringVar1,
gStringVar2,
@@ -141,7 +142,7 @@ bool8 ScrCmd_callnative(struct ScriptContext *ctx)
bool8 ScrCmd_waitstate(struct ScriptContext *ctx)
{
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
@@ -605,7 +606,7 @@ bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx)
bool8 ScrCmd_animateflash(struct ScriptContext *ctx)
{
AnimateFlash(ScriptReadByte(ctx));
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
@@ -1305,7 +1306,7 @@ bool8 ScrCmd_messageinstant(struct ScriptContext *ctx)
if (msg == NULL)
msg = (const u8 *)ctx->data[0];
LoadMessageBoxAndBorderGfx();
- DrawDialogueFrame(0, 1);
+ DrawDialogueFrame(0, TRUE);
AddTextPrinterParameterized(0, FONT_NORMAL, msg, 0, 1, 0, NULL);
return FALSE;
}
@@ -1344,7 +1345,7 @@ bool8 ScrCmd_yesnobox(struct ScriptContext *ctx)
if (ScriptMenu_YesNo(left, top) == TRUE)
{
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
else
@@ -1362,7 +1363,7 @@ bool8 ScrCmd_multichoice(struct ScriptContext *ctx)
if (ScriptMenu_Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE)
{
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
else
@@ -1381,7 +1382,7 @@ bool8 ScrCmd_multichoicedefault(struct ScriptContext *ctx)
if (ScriptMenu_MultichoiceWithDefault(left, top, multichoiceId, ignoreBPress, defaultChoice) == TRUE)
{
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
else
@@ -1411,7 +1412,7 @@ bool8 ScrCmd_multichoicegrid(struct ScriptContext *ctx)
if (ScriptMenu_MultichoiceGrid(left, top, multichoiceId, ignoreBPress, numColumns) == TRUE)
{
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
else
@@ -1440,7 +1441,7 @@ bool8 ScrCmd_drawboxtext(struct ScriptContext *ctx)
/*if (Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE)
{
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}*/
return FALSE;
@@ -1477,7 +1478,7 @@ bool8 ScrCmd_showcontestpainting(struct ScriptContext *ctx)
SetContestWinnerForPainting(contestWinnerId);
ShowContestPainting();
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
@@ -1527,7 +1528,7 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
winTemplate = CreateWindowTemplate(0, xWindow, yWindow + 1, width, height, 0xF, 0x1);
sBrailleWindowId = AddWindow(&winTemplate);
LoadUserWindowBorderGfx(sBrailleWindowId, 0x214, 0xE0);
- DrawStdWindowFrame(sBrailleWindowId, 0);
+ DrawStdWindowFrame(sBrailleWindowId, FALSE);
PutWindowTilemap(sBrailleWindowId);
FillWindowPixelBuffer(sBrailleWindowId, PIXEL_FILL(1));
AddTextPrinterParameterized(sBrailleWindowId, FONT_BRAILLE, gStringVar4, xText, yText, TEXT_SKIP_DRAW, NULL);
@@ -1874,15 +1875,33 @@ bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx)
u16 species = ScriptReadHalfword(ctx);
u8 level = ScriptReadByte(ctx);
u16 item = ScriptReadHalfword(ctx);
+ u16 species2 = ScriptReadHalfword(ctx);
+ u8 level2 = ScriptReadByte(ctx);
+ u16 item2 = ScriptReadHalfword(ctx);
+
+ if(species2 == SPECIES_NONE)
+ {
+ CreateScriptedWildMon(species, level, item);
+ gIsScriptedWildDouble = FALSE;
+ }
+ else
+ {
+ CreateScriptedDoubleWildMon(species, level, item, species2, level2, item2);
+ gIsScriptedWildDouble = TRUE;
+ }
- CreateScriptedWildMon(species, level, item);
return FALSE;
}
bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx)
{
- BattleSetup_StartScriptedWildBattle();
- ScriptContext1_Stop();
+ if (gIsScriptedWildDouble == FALSE)
+ BattleSetup_StartScriptedWildBattle();
+ else
+ BattleSetup_StartScriptedDoubleWildBattle();
+
+ ScriptContext_Stop();
+
return TRUE;
}
@@ -1891,7 +1910,7 @@ bool8 ScrCmd_pokemart(struct ScriptContext *ctx)
const void *ptr = (void *)ScriptReadWord(ctx);
CreatePokemartMenu(ptr);
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
@@ -1900,7 +1919,7 @@ bool8 ScrCmd_pokemartdecoration(struct ScriptContext *ctx)
const void *ptr = (void *)ScriptReadWord(ctx);
CreateDecorationShop1Menu(ptr);
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
@@ -1910,7 +1929,7 @@ bool8 ScrCmd_pokemartdecoration2(struct ScriptContext *ctx)
const void *ptr = (void *)ScriptReadWord(ctx);
CreateDecorationShop2Menu(ptr);
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
@@ -1919,7 +1938,7 @@ bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx)
u8 machineId = VarGet(ScriptReadHalfword(ctx));
PlaySlotMachine(machineId, CB2_ReturnToFieldContinueScriptPlayMapMusic);
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
@@ -1947,7 +1966,7 @@ bool8 ScrCmd_getpokenewsactive(struct ScriptContext *ctx)
bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx)
{
ChooseContestMon();
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
@@ -1955,21 +1974,21 @@ bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx)
bool8 ScrCmd_startcontest(struct ScriptContext *ctx)
{
StartContest();
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx)
{
ShowContestResults();
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx)
{
ContestLinkTransfer(gSpecialVar_ContestCategory);
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;
}
@@ -2124,7 +2143,7 @@ bool8 ScrCmd_addelevmenuitem(struct ScriptContext *ctx)
bool8 ScrCmd_showelevmenu(struct ScriptContext *ctx)
{
/*ScriptShowElevatorMenu();
- ScriptContext1_Stop();
+ ScriptContext_Stop();
return TRUE;*/
return FALSE;
}
@@ -2229,7 +2248,7 @@ bool8 ScrCmd_checkmoneventlegal(struct ScriptContext *ctx)
bool8 ScrCmd_trywondercardscript(struct ScriptContext *ctx)
{
- const u8* script = GetSavedRamScriptIfValid();
+ const u8 *script = GetSavedRamScriptIfValid();
if (script)
{
@@ -2268,7 +2287,7 @@ bool8 ScrCmd_setmonmetlocation(struct ScriptContext *ctx)
static void CloseBrailleWindow(void)
{
- ClearStdWindowAndFrame(sBrailleWindowId, 1);
+ ClearStdWindowAndFrame(sBrailleWindowId, TRUE);
RemoveWindow(sBrailleWindowId);
}
diff --git a/src/script.c b/src/script.c
index 4728e739cd..484f8e9662 100644
--- a/src/script.c
+++ b/src/script.c
@@ -14,12 +14,18 @@ enum {
SCRIPT_MODE_NATIVE,
};
-extern const u8* gRamScriptRetAddr;
+enum {
+ CONTEXT_RUNNING,
+ CONTEXT_WAITING,
+ CONTEXT_SHUTDOWN,
+};
-static u8 sScriptContext1Status;
-static struct ScriptContext sScriptContext1;
-static struct ScriptContext sScriptContext2;
-static bool8 sScriptContext2Enabled;
+extern const u8 *gRamScriptRetAddr;
+
+static u8 sGlobalScriptContextStatus;
+static struct ScriptContext sGlobalScriptContext;
+static struct ScriptContext sImmediateScriptContext;
+static bool8 sLockFieldControls;
extern ScrCmdFunc gScriptCmdTable[];
extern ScrCmdFunc gScriptCmdTableEnd[];
@@ -173,79 +179,94 @@ u32 ScriptReadWord(struct ScriptContext *ctx)
return (((((value3 << 8) + value2) << 8) + value1) << 8) + value0;
}
-void ScriptContext2_Enable(void)
+void LockPlayerFieldControls(void)
{
- sScriptContext2Enabled = TRUE;
+ sLockFieldControls = TRUE;
}
-void ScriptContext2_Disable(void)
+void UnlockPlayerFieldControls(void)
{
- sScriptContext2Enabled = FALSE;
+ sLockFieldControls = FALSE;
}
-bool8 ScriptContext2_IsEnabled(void)
+bool8 ArePlayerFieldControlsLocked(void)
{
- return sScriptContext2Enabled;
+ return sLockFieldControls;
}
-bool8 ScriptContext1_IsScriptSetUp(void)
+// The ScriptContext_* functions work with the primary script context,
+// which yields control back to native code should the script make a wait call.
+
+// Checks if the global script context is able to be run right now.
+bool8 ScriptContext_IsEnabled(void)
{
- if (sScriptContext1Status == 0)
+ if (sGlobalScriptContextStatus == CONTEXT_RUNNING)
return TRUE;
else
return FALSE;
}
-void ScriptContext1_Init(void)
+// Re-initializes the global script context to zero.
+void ScriptContext_Init(void)
{
- InitScriptContext(&sScriptContext1, gScriptCmdTable, gScriptCmdTableEnd);
- sScriptContext1Status = 2;
+ InitScriptContext(&sGlobalScriptContext, gScriptCmdTable, gScriptCmdTableEnd);
+ sGlobalScriptContextStatus = CONTEXT_SHUTDOWN;
}
-bool8 ScriptContext2_RunScript(void)
+// Runs the script until the script makes a wait* call, then returns true if
+// there's more script to run, or false if the script has hit the end.
+// This function also returns false if the context is finished
+// or waiting (after a call to _Stop)
+bool8 ScriptContext_RunScript(void)
{
- if (sScriptContext1Status == 2)
+ if (sGlobalScriptContextStatus == CONTEXT_SHUTDOWN)
return FALSE;
- if (sScriptContext1Status == 1)
+ if (sGlobalScriptContextStatus == CONTEXT_WAITING)
return FALSE;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
- if (!RunScriptCommand(&sScriptContext1))
+ if (!RunScriptCommand(&sGlobalScriptContext))
{
- sScriptContext1Status = 2;
- ScriptContext2_Disable();
+ sGlobalScriptContextStatus = CONTEXT_SHUTDOWN;
+ UnlockPlayerFieldControls();
return FALSE;
}
return TRUE;
}
-void ScriptContext1_SetupScript(const u8 *ptr)
+// Sets up a new script in the global context and enables the context
+void ScriptContext_SetupScript(const u8 *ptr)
{
- InitScriptContext(&sScriptContext1, gScriptCmdTable, gScriptCmdTableEnd);
- SetupBytecodeScript(&sScriptContext1, ptr);
- ScriptContext2_Enable();
- sScriptContext1Status = 0;
+ InitScriptContext(&sGlobalScriptContext, gScriptCmdTable, gScriptCmdTableEnd);
+ SetupBytecodeScript(&sGlobalScriptContext, ptr);
+ LockPlayerFieldControls();
+ sGlobalScriptContextStatus = CONTEXT_RUNNING;
}
-void ScriptContext1_Stop(void)
+// Puts the script into waiting mode; usually called from a wait* script command.
+void ScriptContext_Stop(void)
{
- sScriptContext1Status = 1;
+ sGlobalScriptContextStatus = CONTEXT_WAITING;
}
-void EnableBothScriptContexts(void)
+// Puts the script into running mode.
+void ScriptContext_Enable(void)
{
- sScriptContext1Status = 0;
- ScriptContext2_Enable();
+ sGlobalScriptContextStatus = CONTEXT_RUNNING;
+ LockPlayerFieldControls();
}
-void ScriptContext2_RunNewScript(const u8 *ptr)
+// Sets up and runs a script in its own context immediately. The script will be
+// finished when this function returns. Used mainly by all of the map header
+// scripts (except the frame table scripts).
+void RunScriptImmediately(const u8 *ptr)
{
- InitScriptContext(&sScriptContext2, gScriptCmdTable, gScriptCmdTableEnd);
- SetupBytecodeScript(&sScriptContext2, ptr);
- while (RunScriptCommand(&sScriptContext2) == TRUE);
+ InitScriptContext(&sImmediateScriptContext, gScriptCmdTable, gScriptCmdTableEnd);
+ SetupBytecodeScript(&sImmediateScriptContext, ptr);
+ while (RunScriptCommand(&sImmediateScriptContext) == TRUE);
}
u8 *MapHeaderGetScriptTable(u8 tag)
@@ -272,7 +293,7 @@ void MapHeaderRunScriptType(u8 tag)
{
u8 *ptr = MapHeaderGetScriptTable(tag);
if (ptr)
- ScriptContext2_RunNewScript(ptr);
+ RunScriptImmediately(ptr);
}
u8 *MapHeaderCheckScriptTable(u8 tag)
@@ -336,7 +357,7 @@ bool8 TryRunOnFrameMapScript(void)
if (!ptr)
return FALSE;
- ScriptContext1_SetupScript(ptr);
+ ScriptContext_SetupScript(ptr);
return TRUE;
}
@@ -344,12 +365,12 @@ void TryRunOnWarpIntoMapScript(void)
{
u8 *ptr = MapHeaderCheckScriptTable(MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE);
if (ptr)
- ScriptContext2_RunNewScript(ptr);
+ RunScriptImmediately(ptr);
}
u32 CalculateRamScriptChecksum(void)
{
- return CalcCRC16WithTable((u8*)(&gSaveBlock1Ptr->ramScript.data), sizeof(gSaveBlock1Ptr->ramScript.data));
+ return CalcCRC16WithTable((u8 *)(&gSaveBlock1Ptr->ramScript.data), sizeof(gSaveBlock1Ptr->ramScript.data));
}
void ClearRamScript(void)
diff --git a/src/script_menu.c b/src/script_menu.c
index 1680758f21..d25f28cb29 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -107,7 +107,7 @@ static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, bool8 ignoreB
newWidth = ConvertPixelWidthToTileWidth(width);
left = ScriptMenu_AdjustLeftCoordFromWidth(left, newWidth);
windowId = CreateWindowFromRect(left, top, newWidth, count * 2);
- SetStandardWindowBorderStyle(windowId, 0);
+ SetStandardWindowBorderStyle(windowId, FALSE);
PrintMenuTable(windowId, count, actions);
InitMenuInUpperLeftCornerNormal(windowId, count, cursorPos);
ScheduleBgCopyTilemapToVram(0);
@@ -190,7 +190,7 @@ static void Task_HandleMultichoiceInput(u8 taskId)
}
ClearToTransparentAndRemoveWindow(tWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
}
}
@@ -245,7 +245,7 @@ static void Task_HandleYesNoInput(u8 taskId)
}
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 columnCount)
@@ -277,7 +277,7 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignore
gTasks[taskId].tIgnoreBPress = ignoreBPress;
gTasks[taskId].tWindowId = CreateWindowFromRect(left, top, columnCount * newWidth, rowCount * 2);
- SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 0);
+ SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, FALSE);
PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, sMultichoiceLists[multichoiceId].list);
InitMenuActionGrid(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, 0);
CopyWindowToVram(gTasks[taskId].tWindowId, COPYWIN_FULL);
@@ -307,7 +307,7 @@ static void Task_HandleMultichoiceGridInput(u8 taskId)
ClearToTransparentAndRemoveWindow(tWindowId);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
#undef tWindowId
@@ -352,7 +352,7 @@ static void CreatePCMultichoice(void)
{
numChoices = 4;
windowId = CreateWindowFromRect(0, 0, width, 8);
- SetStandardWindowBorderStyle(windowId, 0);
+ SetStandardWindowBorderStyle(windowId, FALSE);
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_HallOfFame, y, 33, TEXT_SKIP_DRAW, NULL);
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_LogOff, y, 49, TEXT_SKIP_DRAW, NULL);
}
@@ -360,7 +360,7 @@ static void CreatePCMultichoice(void)
{
numChoices = 3;
windowId = CreateWindowFromRect(0, 0, width, 6);
- SetStandardWindowBorderStyle(windowId, 0);
+ SetStandardWindowBorderStyle(windowId, FALSE);
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_LogOff, y, 33, TEXT_SKIP_DRAW, NULL);
}
@@ -380,7 +380,7 @@ static void CreatePCMultichoice(void)
void ScriptMenu_DisplayPCStartupPrompt(void)
{
LoadMessageBoxAndFrameGfx(0, TRUE);
- AddTextPrinterParameterized2(0, FONT_NORMAL, gText_WhichPCShouldBeAccessed, 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, gText_WhichPCShouldBeAccessed, 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
}
bool8 ScriptMenu_CreateLilycoveSSTidalMultichoice(void)
@@ -521,7 +521,7 @@ static void CreateLilycoveSSTidalMultichoice(void)
width = ConvertPixelWidthToTileWidth(pixelWidth);
windowId = CreateWindowFromRect(MAX_MULTICHOICE_WIDTH - width, (6 - count) * 2, width, count * 2);
- SetStandardWindowBorderStyle(windowId, 0);
+ SetStandardWindowBorderStyle(windowId, FALSE);
for (selectionCount = 0, i = 0; i < SSTIDAL_SELECTION_COUNT; i++)
{
@@ -595,7 +595,7 @@ bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y)
gTasks[taskId].tMonSpriteId = spriteId;
gSprites[spriteId].callback = SpriteCallbackDummy;
gSprites[spriteId].oam.priority = 0;
- SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 1);
+ SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, TRUE);
ScheduleBgCopyTilemapToVram(0);
return TRUE;
}
@@ -646,27 +646,27 @@ static void DrawLinkServicesMultichoiceMenu(u8 multichoiceId)
{
case MULTI_WIRELESS_NO_BERRY:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptionsNoBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptionsNoBerryCrush[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
break;
case MULTI_CABLE_CLUB_WITH_RECORD_MIX:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sCableClubOptions_WithRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sCableClubOptions_WithRecordMix[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
break;
case MULTI_WIRELESS_NO_RECORD:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
break;
case MULTI_WIRELESS_ALL_SERVICES:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptions_AllServices[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptions_AllServices[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
break;
case MULTI_WIRELESS_NO_RECORD_BERRY:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptions_NoRecordMixBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sWirelessOptions_NoRecordMixBerryCrush[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
break;
case MULTI_CABLE_CLUB_NO_RECORD_MIX:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, FONT_NORMAL, sCableClubOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, FONT_NORMAL, sCableClubOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
break;
}
}
@@ -688,7 +688,7 @@ bool16 ScriptMenu_CreateStartMenuForPokenavTutorial(void)
static void CreateStartMenuForPokenavTutorial(void)
{
u8 windowId = CreateWindowFromRect(21, 0, 7, 18);
- SetStandardWindowBorderStyle(windowId, 0);
+ SetStandardWindowBorderStyle(windowId, FALSE);
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionPokedex, 8, 9, TEXT_SKIP_DRAW, NULL);
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionPokemon, 8, 25, TEXT_SKIP_DRAW, NULL);
AddTextPrinterParameterized(windowId, FONT_NORMAL, gText_MenuOptionBag, 8, 41, TEXT_SKIP_DRAW, NULL);
diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c
index 2e967bdcd0..8a9e65ff8f 100755
--- a/src/script_pokemon_util.c
+++ b/src/script_pokemon_util.c
@@ -139,9 +139,9 @@ static bool8 CheckPartyMonHasHeldItem(u16 item)
bool8 DoesPartyHaveEnigmaBerry(void)
{
- bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
+ bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY_E_READER);
if (hasItem == TRUE)
- GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
+ GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY_E_READER), gStringVar1);
return hasItem;
}
@@ -159,6 +159,29 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item)
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
}
}
+void CreateScriptedDoubleWildMon(u16 species1, u8 level1, u16 item1, u16 species2, u8 level2, u16 item2)
+{
+ u8 heldItem1[2];
+ u8 heldItem2[2];
+
+ ZeroEnemyPartyMons();
+
+ CreateMon(&gEnemyParty[0], species1, level1, 32, 0, 0, OT_ID_PLAYER_ID, 0);
+ if (item1)
+ {
+ heldItem1[0] = item1;
+ heldItem1[1] = item1 >> 8;
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem1);
+ }
+
+ CreateMon(&gEnemyParty[3], species2, level2, 32, 0, 0, OT_ID_PLAYER_ID, 0);
+ if (item2)
+ {
+ heldItem2[0] = item2;
+ heldItem2[1] = item2 >> 8;
+ SetMonData(&gEnemyParty[3], MON_DATA_HELD_ITEM, heldItem2);
+ }
+}
void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
{
diff --git a/src/secret_base.c b/src/secret_base.c
index fa424889e0..74129d3ff5 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -461,7 +461,7 @@ static void EnterNewlyCreatedSecretBase_WaitFadeIn(u8 taskId)
ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_NORTH);
if (IsWeatherNotFadingIn() == TRUE)
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
}
@@ -470,7 +470,7 @@ static void EnterNewlyCreatedSecretBase_StartFadeIn(void)
{
s16 x, y;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
HideMapNamePopUpWindow();
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
x += MAP_OFFSET;
@@ -673,7 +673,7 @@ void WarpIntoSecretBase(const struct MapPosition *position, const struct MapEven
{
SetCurSecretBaseIdFromPosition(position, events);
TrySetCurSecretBaseIndex();
- ScriptContext1_SetupScript(SecretBase_EventScript_Enter);
+ ScriptContext_SetupScript(SecretBase_EventScript_Enter);
}
bool8 TrySetCurSecretBase(void)
@@ -691,7 +691,7 @@ static void Task_WarpOutOfSecretBase(u8 taskId)
switch (gTasks[taskId].data[0])
{
case 0:
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
gTasks[taskId].data[0] = 1;
break;
case 1:
@@ -703,7 +703,7 @@ static void Task_WarpOutOfSecretBase(u8 taskId)
WarpIntoMap();
gFieldCallback = FieldCB_DefaultWarpExit;
SetMainCallback2(CB2_LoadMap);
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
break;
}
@@ -914,13 +914,13 @@ void ShowSecretBaseRegistryMenu(void)
static void Task_ShowSecretBaseRegistryMenu(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
tNumBases = GetNumRegisteredSecretBases();
if (tNumBases != 0)
{
tSelectedRow = 0;
tScrollOffset = 0;
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
sRegistryMenu = calloc(1, sizeof(*sRegistryMenu));
tMainWindowId = AddWindow(&sRegistryWindowTemplates[0]);
BuildRegistryMenuItems(taskId);
@@ -976,7 +976,7 @@ static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *m
static void FinalizeRegistryMenu(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- SetStandardWindowBorderStyle(tMainWindowId, 0);
+ SetStandardWindowBorderStyle(tMainWindowId, FALSE);
tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, tScrollOffset, tSelectedRow);
AddRegistryMenuScrollArrows(taskId);
ScheduleBgCopyTilemapToVram(0);
@@ -1002,7 +1002,7 @@ static void HandleRegistryMenuInput(u8 taskId)
PlaySE(SE_SELECT);
DestroyListMenuTask(tListTaskId, NULL, NULL);
RemoveScrollIndicatorArrowPair(tArrowTaskId);
- ClearStdWindowAndFrame(tMainWindowId, 0);
+ ClearStdWindowAndFrame(tMainWindowId, FALSE);
ClearWindowTilemap(tMainWindowId);
RemoveWindow(tMainWindowId);
ScheduleBgCopyTilemapToVram(0);
@@ -1025,7 +1025,7 @@ static void ShowRegistryMenuActions(u8 taskId)
template = sRegistryWindowTemplates[1];
template.width = GetMaxWidthInMenuTable(sRegistryMenuActions, 2);
tActionWindowId = AddWindow(&template);
- SetStandardWindowBorderStyle(tActionWindowId, 0);
+ SetStandardWindowBorderStyle(tActionWindowId, FALSE);
PrintMenuTable(tActionWindowId, ARRAY_COUNT(sRegistryMenuActions), sRegistryMenuActions);
InitMenuInUpperLeftCornerNormal(tActionWindowId, ARRAY_COUNT(sRegistryMenuActions), 0);
ScheduleBgCopyTilemapToVram(0);
@@ -1073,7 +1073,7 @@ static void ShowRegistryMenuDeleteYesNo(u8 taskId)
void DeleteRegistry_Yes_Callback(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow);
gSaveBlock1Ptr->secretBases[tSelectedBaseId].registryStatus = UNREGISTERED;
BuildRegistryMenuItems(taskId);
@@ -1090,7 +1090,7 @@ static void DeleteRegistry_Yes(u8 taskId)
static void DeleteRegistry_No(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- ClearDialogWindowAndFrame(0, 0);
+ ClearDialogWindowAndFrame(0, FALSE);
DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow);
FinalizeRegistryMenu(taskId);
gTasks[taskId].func = HandleRegistryMenuInput;
@@ -1100,7 +1100,7 @@ static void ReturnToMainRegistryMenu(u8 taskId)
{
s16 *data = gTasks[taskId].data;
AddRegistryMenuScrollArrows(taskId);
- ClearStdWindowAndFrame(tActionWindowId, 0);
+ ClearStdWindowAndFrame(tActionWindowId, FALSE);
ClearWindowTilemap(tActionWindowId);
RemoveWindow(tActionWindowId);
ScheduleBgCopyTilemapToVram(0);
@@ -1110,9 +1110,9 @@ static void ReturnToMainRegistryMenu(u8 taskId)
static void GoToSecretBasePCRegisterMenu(u8 taskId)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) == 0)
- ScriptContext1_SetupScript(SecretBase_EventScript_PCCancel);
+ ScriptContext_SetupScript(SecretBase_EventScript_PCCancel);
else
- ScriptContext1_SetupScript(SecretBase_EventScript_ShowRegisterMenu);
+ ScriptContext_SetupScript(SecretBase_EventScript_ShowRegisterMenu);
DestroyTask(taskId);
}
diff --git a/src/shop.c b/src/shop.c
index 700a53e37a..451fa171cb 100755
--- a/src/shop.c
+++ b/src/shop.c
@@ -63,7 +63,7 @@ static void BuyMenuBuildListMenuTemplate(void);
static void BuyMenuInitBgs(void);
static void BuyMenuInitWindows(void);
static void BuyMenuDecompressBgGraphics(void);
-static void BuyMenuSetListEntry(struct ListMenuItem*, u16, u8*);
+static void BuyMenuSetListEntry(struct ListMenuItem *, u16, u8 *);
static void BuyMenuAddItemIcon(u16, u8);
static void BuyMenuRemoveItemIcon(u16, u8);
static void BuyMenuPrint(u8 windowId, const u8 *text, u8 x, u8 y, s8 speed, u8 colorSet);
@@ -73,7 +73,7 @@ static void BuyMenuCollectObjectEventData(void);
static void BuyMenuDrawObjectEvents(void);
static void BuyMenuDrawMapBg(void);
static bool8 BuyMenuCheckForOverlapWithMenuBg(int, int);
-static void BuyMenuDrawMapMetatile(s16, s16, const u16*, u8);
+static void BuyMenuDrawMapMetatile(s16, s16, const u16 *, u8);
static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src);
static bool8 BuyMenuCheckIfObjectEventOverlapsMenuBg(s16 *);
static void ExitBuyMenu(u8 taskId);
@@ -277,7 +277,7 @@ static u8 CreateShopMenu(u8 martType)
{
int numMenuItems;
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
sMartInfo.martType = martType;
if (martType == MART_TYPE_NORMAL)
@@ -299,7 +299,7 @@ static u8 CreateShopMenu(u8 martType)
numMenuItems = ARRAY_COUNT(sShopMenuActions_BuyQuit);
}
- SetStandardWindowBorderStyle(sMartInfo.windowId, 0);
+ SetStandardWindowBorderStyle(sMartInfo.windowId, FALSE);
PrintMenuTable(sMartInfo.windowId, numMenuItems, sMartInfo.menuActions);
InitMenuInUpperLeftCornerNormal(sMartInfo.windowId, numMenuItems, 0);
PutWindowTilemap(sMartInfo.windowId);
@@ -370,10 +370,10 @@ void CB2_ExitSellMenu(void)
static void Task_HandleShopMenuQuit(u8 taskId)
{
- ClearStdWindowAndFrameToTransparent(sMartInfo.windowId, 2);
+ ClearStdWindowAndFrameToTransparent(sMartInfo.windowId, 2); // Incorrect use, making it not copy it to vram.
RemoveWindow(sMartInfo.windowId);
TryPutSmartShopperOnAir();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
DestroyTask(taskId);
if (sMartInfo.callback)
@@ -747,11 +747,11 @@ static void BuyMenuDrawMapBg(void)
if (metatile < NUM_METATILES_IN_PRIMARY)
{
- BuyMenuDrawMapMetatile(i, j, (u16*)mapLayout->primaryTileset->metatiles + metatile * 8, metatileLayerType);
+ BuyMenuDrawMapMetatile(i, j, (u16 *)mapLayout->primaryTileset->metatiles + metatile * 8, metatileLayerType);
}
else
{
- BuyMenuDrawMapMetatile(i, j, (u16*)mapLayout->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType);
+ BuyMenuDrawMapMetatile(i, j, (u16 *)mapLayout->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType);
}
}
}
@@ -1022,8 +1022,8 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- ClearStdWindowAndFrameToTransparent(4, 0);
- ClearStdWindowAndFrameToTransparent(3, 0);
+ ClearStdWindowAndFrameToTransparent(4, FALSE);
+ ClearStdWindowAndFrameToTransparent(3, FALSE);
ClearWindowTilemap(4);
ClearWindowTilemap(3);
PutWindowTilemap(1);
@@ -1035,8 +1035,8 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- ClearStdWindowAndFrameToTransparent(4, 0);
- ClearStdWindowAndFrameToTransparent(3, 0);
+ ClearStdWindowAndFrameToTransparent(4, FALSE);
+ ClearStdWindowAndFrameToTransparent(3, FALSE);
ClearWindowTilemap(4);
ClearWindowTilemap(3);
BuyMenuReturnToItemList(taskId);
@@ -1131,7 +1131,7 @@ static void BuyMenuReturnToItemList(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- ClearDialogWindowAndFrameToTransparent(5, 0);
+ ClearDialogWindowAndFrameToTransparent(5, FALSE);
BuyMenuPrintCursor(tListTaskId, 1);
PutWindowTilemap(1);
PutWindowTilemap(2);
@@ -1210,19 +1210,19 @@ void CreatePokemartMenu(const u16 *itemsForSale)
CreateShopMenu(MART_TYPE_NORMAL);
SetShopItemsForSale(itemsForSale);
ClearItemPurchases();
- SetShopMenuCallback(EnableBothScriptContexts);
+ SetShopMenuCallback(ScriptContext_Enable);
}
void CreateDecorationShop1Menu(const u16 *itemsForSale)
{
CreateShopMenu(MART_TYPE_DECOR);
SetShopItemsForSale(itemsForSale);
- SetShopMenuCallback(EnableBothScriptContexts);
+ SetShopMenuCallback(ScriptContext_Enable);
}
void CreateDecorationShop2Menu(const u16 *itemsForSale)
{
CreateShopMenu(MART_TYPE_DECOR2);
SetShopItemsForSale(itemsForSale);
- SetShopMenuCallback(EnableBothScriptContexts);
+ SetShopMenuCallback(ScriptContext_Enable);
}
diff --git a/src/slot_machine.c b/src/slot_machine.c
index cb6a380d67..dd2622e2be 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -605,7 +605,7 @@ static bool8 IsReelTimeSmokeAnimFinished(void);
static void DestroyReelTimeSmokeSprite(void);
static u8 CreatePikaPowerBoltSprite(s16, s16);
static void DestroyPikaPowerBoltSprite(u8);
-static u8 CreateDigitalDisplaySprite(u8, void (*callback)(struct Sprite*), s16, s16, s16);
+static u8 CreateDigitalDisplaySprite(u8, void (*callback)(struct Sprite *), s16, s16, s16);
static void LoadSlotMachineGfx(void);
static void LoadReelBackground(void);
static void LoadMenuGfx(void);
@@ -5672,7 +5672,7 @@ static const struct OamData sOam_8x8 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
@@ -5689,7 +5689,7 @@ static const struct OamData sOam_8x16 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x16),
.x = 0,
@@ -5706,7 +5706,7 @@ static const struct OamData sOam_16x16 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -5723,7 +5723,7 @@ static const struct OamData sOam_16x32 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x32),
.x = 0,
@@ -5740,7 +5740,7 @@ static const struct OamData sOam_32x32 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -5757,7 +5757,7 @@ static const struct OamData sOam_32x64 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x64),
.x = 0,
@@ -5774,7 +5774,7 @@ static const struct OamData sOam_64x32 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -5791,7 +5791,7 @@ static const struct OamData sOam_64x64 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
diff --git a/src/sound.c b/src/sound.c
index 731b673342..955895c637 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -156,7 +156,8 @@ void FadeOutAndFadeInNewMapMusic(u16 songNum, u8 fadeOutSpeed, u8 fadeInSpeed)
sMapMusicFadeInSpeed = fadeInSpeed;
}
-void FadeInNewMapMusic(u16 songNum, u8 speed)
+// Unused
+static void FadeInNewMapMusic(u16 songNum, u8 speed)
{
FadeInNewBGM(songNum, speed);
sCurrentMapMusic = songNum;
diff --git a/src/start_menu.c b/src/start_menu.c
index 11189ee831..2a45f8d69c 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -139,7 +139,7 @@ static bool8 FieldCB_ReturnToFieldStartMenu(void);
static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
-static const u8* const sPyramidFloorNames[FRONTIER_STAGES_PER_CHALLENGE + 1] =
+static const u8 *const sPyramidFloorNames[FRONTIER_STAGES_PER_CHALLENGE + 1] =
{
gText_Floor1,
gText_Floor2,
@@ -156,19 +156,19 @@ static const struct WindowTemplate sPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC
static const struct MenuAction sStartMenuItems[] =
{
- {gText_MenuPokedex, {.u8_void = StartMenuPokedexCallback}},
- {gText_MenuPokemon, {.u8_void = StartMenuPokemonCallback}},
- {gText_MenuBag, {.u8_void = StartMenuBagCallback}},
- {gText_MenuPokenav, {.u8_void = StartMenuPokeNavCallback}},
- {gText_MenuPlayer, {.u8_void = StartMenuPlayerNameCallback}},
- {gText_MenuSave, {.u8_void = StartMenuSaveCallback}},
- {gText_MenuOption, {.u8_void = StartMenuOptionCallback}},
- {gText_MenuExit, {.u8_void = StartMenuExitCallback}},
- {gText_MenuRetire, {.u8_void = StartMenuSafariZoneRetireCallback}},
- {gText_MenuPlayer, {.u8_void = StartMenuLinkModePlayerNameCallback}},
- {gText_MenuRest, {.u8_void = StartMenuSaveCallback}},
- {gText_MenuRetire, {.u8_void = StartMenuBattlePyramidRetireCallback}},
- {gText_MenuBag, {.u8_void = StartMenuBattlePyramidBagCallback}}
+ [MENU_ACTION_POKEDEX] = {gText_MenuPokedex, {.u8_void = StartMenuPokedexCallback}},
+ [MENU_ACTION_POKEMON] = {gText_MenuPokemon, {.u8_void = StartMenuPokemonCallback}},
+ [MENU_ACTION_BAG] = {gText_MenuBag, {.u8_void = StartMenuBagCallback}},
+ [MENU_ACTION_POKENAV] = {gText_MenuPokenav, {.u8_void = StartMenuPokeNavCallback}},
+ [MENU_ACTION_PLAYER] = {gText_MenuPlayer, {.u8_void = StartMenuPlayerNameCallback}},
+ [MENU_ACTION_SAVE] = {gText_MenuSave, {.u8_void = StartMenuSaveCallback}},
+ [MENU_ACTION_OPTION] = {gText_MenuOption, {.u8_void = StartMenuOptionCallback}},
+ [MENU_ACTION_EXIT] = {gText_MenuExit, {.u8_void = StartMenuExitCallback}},
+ [MENU_ACTION_RETIRE_SAFARI] = {gText_MenuRetire, {.u8_void = StartMenuSafariZoneRetireCallback}},
+ [MENU_ACTION_PLAYER_LINK] = {gText_MenuPlayer, {.u8_void = StartMenuLinkModePlayerNameCallback}},
+ [MENU_ACTION_REST_FRONTIER] = {gText_MenuRest, {.u8_void = StartMenuSaveCallback}},
+ [MENU_ACTION_RETIRE_FRONTIER] = {gText_MenuRetire, {.u8_void = StartMenuBattlePyramidRetireCallback}},
+ [MENU_ACTION_PYRAMID_BAG] = {gText_MenuBag, {.u8_void = StartMenuBattlePyramidBagCallback}}
};
static const struct BgTemplate sBgTemplates_LinkBattleSave[] =
@@ -535,7 +535,7 @@ void ShowReturnToFieldStartMenu(void)
void Task_ShowStartMenu(u8 taskId)
{
- struct Task* task = &gTasks[taskId];
+ struct Task *task = &gTasks[taskId];
switch(task->data[0])
{
@@ -562,7 +562,7 @@ void ShowStartMenu(void)
StopPlayerAvatar();
}
CreateStartMenuTask(Task_ShowStartMenu);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
static bool8 HandleStartMenuInput(void)
@@ -763,7 +763,7 @@ void ShowBattlePyramidStartMenu(void)
ClearDialogWindowAndFrameToTransparent(0, FALSE);
ScriptUnfreezeObjectEvents();
CreateStartMenuTask(Task_ShowStartMenu);
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
}
static bool8 StartMenuBattlePyramidBagCallback(void)
@@ -804,7 +804,7 @@ static bool8 SaveCallback(void)
case SAVE_ERROR: // Close start menu
ClearDialogWindowAndFrameToTransparent(0, TRUE);
ScriptUnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
SoftResetInBattlePyramid();
return TRUE;
}
@@ -841,8 +841,8 @@ static bool8 BattlePyramidRetireCallback(void)
case SAVE_CANCELED: // Yes (Retire from battle pyramid)
ClearDialogWindowAndFrameToTransparent(0, TRUE);
ScriptUnfreezeObjectEvents();
- ScriptContext2_Disable();
- ScriptContext1_SetupScript(BattlePyramid_Retire);
+ UnlockPlayerFieldControls();
+ ScriptContext_SetupScript(BattlePyramid_Retire);
return TRUE;
}
@@ -901,7 +901,7 @@ static void SaveGameTask(u8 taskId)
}
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
static void HideSaveMessageWindow(void)
@@ -1378,7 +1378,7 @@ static void Task_WaitForBattleTowerLinkSave(u8 taskId)
if (!FuncIsActiveTask(Task_LinkFullSave))
{
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
}
@@ -1398,7 +1398,7 @@ static void HideStartMenuWindow(void)
ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE);
RemoveStartMenuWindow();
ScriptUnfreezeObjectEvents();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
}
void HideStartMenu(void)
diff --git a/src/starter_choose.c b/src/starter_choose.c
index 81a88e7714..cbe0c7ee61 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -160,7 +160,7 @@ static const struct OamData sOam_Hand =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -177,7 +177,7 @@ static const struct OamData sOam_Pokeball =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
@@ -194,7 +194,7 @@ static const struct OamData sOam_StarterCircle =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
diff --git a/src/strings.c b/src/strings.c
index 853c6a3b1b..92253de878 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1187,7 +1187,7 @@ const u8 gText_PsychUp48BP[] = _("PSYCH UP{CLEAR_TO 0x4E}48BP");
const u8 gText_IcePunch48BP[] = _("ICE PUNCH{CLEAR_TO 0x4E}48BP");
const u8 gText_ThunderPunch48BP[] = _("THUNDERPUNCH{CLEAR_TO 0x4E}48BP");
const u8 gText_FirePunch48BP[] = _("FIRE PUNCH{CLEAR_TO 0x4E}48BP");
-const u8 gText_PkmnFainted3[] = _("{STR_VAR_1} fainted…\p\n");
+const u8 gText_PkmnFainted_FldPsn[] = _("{STR_VAR_1} fainted…\p\n");
const u8 gText_Marco[] = _("MARCO");
const u8 gText_TrainerCardName[] = _("NAME: ");
const u8 gText_TrainerCardIDNo[] = _("IDNo.");
diff --git a/src/time_events.c b/src/time_events.c
index 3f56d3ab5e..cec6a44c34 100644
--- a/src/time_events.c
+++ b/src/time_events.c
@@ -95,7 +95,7 @@ static void Task_WaitWeather(u8 taskId)
{
if (IsWeatherChangeComplete())
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
}
diff --git a/src/title_screen.c b/src/title_screen.c
index d64ee6024f..25a1d60d05 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -105,7 +105,7 @@ static const struct OamData sVersionBannerLeftOamData =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_8BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -122,7 +122,7 @@ static const struct OamData sVersionBannerRightOamData =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_8BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
@@ -193,7 +193,7 @@ static const struct OamData sOamData_CopyrightBanner =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
@@ -305,7 +305,7 @@ static const struct OamData sPokemonLogoShineOamData =
.y = DISPLAY_HEIGHT,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
diff --git a/src/trade.c b/src/trade.c
index 1b2b38bd96..ad990e980b 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -4701,7 +4701,7 @@ static void CB2_SaveAndEndTrade(void)
case 42:
if (_IsLinkTaskFinished())
{
- LinkFullSave_SetLastSectorSecurity();
+ LinkFullSave_SetLastSectorSignature();
gMain.state = 5;
}
break;
@@ -4787,7 +4787,7 @@ static void CB2_FreeTradeData(void)
void DoInGameTradeScene(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
CreateTask(Task_InGameTrade, 10);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
}
@@ -4814,7 +4814,7 @@ static void CheckPartnersMonForRibbons(void)
FlagSet(FLAG_SYS_RIBBON_GET);
}
-void InitTradeBg(void)
+void LoadTradeAnimGfx(void)
{
InitTradeBgInternal();
}
@@ -5005,7 +5005,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
case 8:
if (_IsLinkTaskFinished())
{
- LinkFullSave_SetLastSectorSecurity();
+ LinkFullSave_SetLastSectorSignature();
gMain.state = 9;
}
break;
diff --git a/src/trader.c b/src/trader.c
index 040ee695b3..48ce5d2681 100644
--- a/src/trader.c
+++ b/src/trader.c
@@ -15,7 +15,7 @@
#include "task.h"
#include "script_menu.h"
-static const u8 * const sDefaultTraderNames[NUM_TRADER_ITEMS] =
+static const u8 *const sDefaultTraderNames[NUM_TRADER_ITEMS] =
{
gText_Tristan,
gText_Philip,
@@ -109,7 +109,7 @@ void Task_BufferDecorSelectionAndCloseWindow(u8 taskId, u8 decorationId)
RemoveWindow(tWindowId);
ScheduleBgCopyTilemapToVram(0);
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
void Task_HandleGetDecorationMenuInput(u8 taskId)
@@ -186,14 +186,14 @@ void DecorationItemsMenuAction_Trade(u8 taskId)
gSpecialVar_0x8006 = 0xFFFF;
}
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
void ExitTraderMenu(u8 taskId)
{
gSpecialVar_0x8006 = 0;
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
void TraderDoDecorationTrade(void)
diff --git a/src/trainer_card.c b/src/trainer_card.c
index 264f15742a..ab7b3c9131 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -97,8 +97,8 @@ static void CloseTrainerCard(u8 task);
static bool8 PrintAllOnCardFront(void);
static void DrawTrainerCardWindow(u8);
static void CreateTrainerCardTrainerPic(void);
-static void DrawCardScreenBackground(u16*);
-static void DrawCardFrontOrBack(u16*);
+static void DrawCardScreenBackground(u16 *);
+static void DrawCardFrontOrBack(u16 *);
static void DrawStarsAndBadgesOnCard(void);
static void PrintTimeOnCard(void);
static void FlipTrainerCard(void);
@@ -107,10 +107,10 @@ static bool8 LoadCardGfx(void);
static void CB2_InitTrainerCard(void);
static u32 GetCappedGameStat(u8 statId, u32 maxValue);
static bool8 HasAllFrontierSymbols(void);
-static u8 GetRubyTrainerStars(struct TrainerCard*);
+static u8 GetRubyTrainerStars(struct TrainerCard *);
static u16 GetCaughtMonsCount(void);
-static void SetPlayerCardData(struct TrainerCard*, u8);
-static void TrainerCard_GenerateCardForPlayer(struct TrainerCard*);
+static void SetPlayerCardData(struct TrainerCard *, u8);
+static void TrainerCard_GenerateCardForPlayer(struct TrainerCard *);
static u8 VersionToCardType(u8);
static void SetDataFromTrainerCard(void);
static void InitGpuRegs(void);
@@ -147,17 +147,17 @@ static void BufferUnionRoomStats(void);
static void BufferLinkPokeblocksNum(void);
static void BufferLinkContestNum(void);
static void BufferBattleFacilityStats(void);
-static void PrintStatOnBackOfCard(u8 top, const u8* str1, u8* str2, const u8* color);
+static void PrintStatOnBackOfCard(u8 top, const u8 *str1, u8 *str2, const u8 *color);
static void LoadStickerGfx(void);
static u8 SetCardBgsAndPals(void);
static void DrawCardBackStats(void);
static void Task_DoCardFlipTask(u8);
-static bool8 Task_BeginCardFlip(struct Task* task);
-static bool8 Task_AnimateCardFlipDown(struct Task* task);
-static bool8 Task_DrawFlippedCardSide(struct Task* task);
-static bool8 Task_SetCardFlipped(struct Task* task);
-static bool8 Task_AnimateCardFlipUp(struct Task* task);
-static bool8 Task_EndCardFlip(struct Task* task);
+static bool8 Task_BeginCardFlip(struct Task *task);
+static bool8 Task_AnimateCardFlipDown(struct Task *task);
+static bool8 Task_DrawFlippedCardSide(struct Task *task);
+static bool8 Task_SetCardFlipped(struct Task *task);
+static bool8 Task_AnimateCardFlipUp(struct Task *task);
+static bool8 Task_EndCardFlip(struct Task *task);
static void UpdateCardFlipRegs(u16);
static void LoadMonIconGfx(void);
@@ -496,7 +496,7 @@ static void Task_TrainerCard(u8 taskId)
break;
case STATE_WAIT_LINK_PARTNER:
SetCloseLinkCallback();
- DrawDialogueFrame(0, 1);
+ DrawDialogueFrame(0, TRUE);
AddTextPrinterParameterized(0, FONT_NORMAL, gText_WaitingTrainerFinishReading, 0, 1, 255, 0);
CopyWindowToVram(0, COPYWIN_FULL);
sData->mainState = STATE_CLOSE_CARD_LINK;
@@ -772,7 +772,7 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard)
trainerCard->version = GAME_VERSION;
SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD);
trainerCard->linkHasAllFrontierSymbols = HasAllFrontierSymbols();
- *((u16*)&trainerCard->linkPoints.frontier) = gSaveBlock2Ptr->frontier.cardBattlePoints;
+ *((u16 *)&trainerCard->linkPoints.frontier) = gSaveBlock2Ptr->frontier.cardBattlePoints;
if (trainerCard->linkHasAllFrontierSymbols)
trainerCard->stars++;
@@ -799,7 +799,7 @@ void CopyTrainerCardData(struct TrainerCard *dst, struct TrainerCard *src, u8 ga
memcpy(dst, src, 0x60);
dst->linkPoints.frontier = 0;
dst->hasAllFrontierSymbols = src->linkHasAllFrontierSymbols;
- dst->frontierBP = *((u16*)&src->linkPoints.frontier);
+ dst->frontierBP = *((u16 *)&src->linkPoints.frontier);
break;
}
}
@@ -996,7 +996,7 @@ static void BufferTextsVarsForCardPage2(void)
static void PrintNameOnCardFront(void)
{
u8 buffer[32];
- u8* txtPtr;
+ u8 *txtPtr;
txtPtr = StringCopy(buffer, gText_TrainerCardName);
StringCopy(txtPtr, sData->trainerCard.playerName);
ConvertInternationalString(txtPtr, sData->language);
@@ -1009,7 +1009,7 @@ static void PrintNameOnCardFront(void)
static void PrintIdOnCard(void)
{
u8 buffer[32];
- u8* txtPtr;
+ u8 *txtPtr;
s32 xPos;
u32 top;
txtPtr = StringCopy(buffer, gText_TrainerCardIDNo);
@@ -1186,7 +1186,7 @@ static void BufferHofDebutTime(void)
}
}
-static void PrintStatOnBackOfCard(u8 top, const u8* statName, u8* stat, const u8* color)
+static void PrintStatOnBackOfCard(u8 top, const u8 *statName, u8 *stat, const u8 *color)
{
static const u8 xOffsets[] = {8, 16};
static const u8 widths[] = {216, 216};
@@ -1471,7 +1471,7 @@ static void DrawCardScreenBackground(u16 *ptr)
CopyBgTilemapBufferToVram(2);
}
-static void DrawCardFrontOrBack(u16* ptr)
+static void DrawCardFrontOrBack(u16 *ptr)
{
s16 i, j;
u16 *dst = sData->cardTilemapBuffer;
@@ -1570,7 +1570,7 @@ static void BlinkTimeColon(void)
u8 GetTrainerCardStars(u8 cardId)
{
- struct TrainerCard* trainerCards = gTrainerCards;
+ struct TrainerCard *trainerCards = gTrainerCards;
return trainerCards[cardId].stars;
}
@@ -1598,7 +1598,7 @@ static void Task_DoCardFlipTask(u8 taskId)
;
}
-static bool8 Task_BeginCardFlip(struct Task* task)
+static bool8 Task_BeginCardFlip(struct Task *task)
{
u32 i;
@@ -1615,7 +1615,7 @@ static bool8 Task_BeginCardFlip(struct Task* task)
// Note: Cannot be DISPLAY_HEIGHT / 2, or cardHeight will be 0
#define CARD_FLIP_Y ((DISPLAY_HEIGHT / 2) - 3)
-static bool8 Task_AnimateCardFlipDown(struct Task* task)
+static bool8 Task_AnimateCardFlipDown(struct Task *task)
{
u32 cardHeight, r5, r10, cardTop, r6, var_24, cardBottom, var;
s16 i;
@@ -1660,7 +1660,7 @@ static bool8 Task_AnimateCardFlipDown(struct Task* task)
return FALSE;
}
-static bool8 Task_DrawFlippedCardSide(struct Task* task)
+static bool8 Task_DrawFlippedCardSide(struct Task *task)
{
sData->allowDMACopy = FALSE;
if (Overworld_IsRecvQueueAtMax() == TRUE)
@@ -1714,7 +1714,7 @@ static bool8 Task_DrawFlippedCardSide(struct Task* task)
return FALSE;
}
-static bool8 Task_SetCardFlipped(struct Task* task)
+static bool8 Task_SetCardFlipped(struct Task *task)
{
sData->allowDMACopy = FALSE;
@@ -1734,7 +1734,7 @@ static bool8 Task_SetCardFlipped(struct Task* task)
return FALSE;
}
-static bool8 Task_AnimateCardFlipUp(struct Task* task)
+static bool8 Task_AnimateCardFlipUp(struct Task *task)
{
u32 cardHeight, r5, r10, cardTop, r6, var_24, cardBottom, var;
s16 i;
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index dad6b97ea3..206060f1b7 100644
--- a/src/trainer_hill.c
+++ b/src/trainer_hill.c
@@ -36,7 +36,7 @@
struct FloorTrainers
{
- u8 name[HILL_TRAINERS_PER_FLOOR][HILL_TRAINER_NAME_LENGTH];
+ u8 name[HILL_TRAINERS_PER_FLOOR][TRAINER_NAME_LENGTH + 1];
u8 facilityClass[HILL_TRAINERS_PER_FLOOR];
};
@@ -165,30 +165,30 @@ static const u16 sPrizeListAttract[] = {ITEM_TM45_ATTRACT, ITEM_ETHER, I
static const u16 *const sPrizeLists1[NUM_TRAINER_HILL_PRIZE_LISTS] =
{
- sPrizeListRareCandy1,
- sPrizeListLuxuryBall1,
- sPrizeListMaxRevive1,
- sPrizeListMaxEther1,
- sPrizeListElixir1,
- sPrizeListRoar,
- sPrizeListSludgeBomb,
- sPrizeListToxic,
- sPrizeListSunnyDay,
- sPrizeListEarthQuake
+ sPrizeListRareCandy1,
+ sPrizeListLuxuryBall1,
+ sPrizeListMaxRevive1,
+ sPrizeListMaxEther1,
+ sPrizeListElixir1,
+ sPrizeListRoar,
+ sPrizeListSludgeBomb,
+ sPrizeListToxic,
+ sPrizeListSunnyDay,
+ sPrizeListEarthQuake
};
static const u16 *const sPrizeLists2[NUM_TRAINER_HILL_PRIZE_LISTS] =
{
- sPrizeListRareCandy2,
- sPrizeListLuxuryBall2,
- sPrizeListMaxRevive2,
- sPrizeListMaxEther2,
- sPrizeListElixir2,
- sPrizeListBrickBreak,
- sPrizeListTorment,
- sPrizeListSkillSwap,
- sPrizeListGigaDrain,
- sPrizeListAttract
+ sPrizeListRareCandy2,
+ sPrizeListLuxuryBall2,
+ sPrizeListMaxRevive2,
+ sPrizeListMaxEther2,
+ sPrizeListElixir2,
+ sPrizeListBrickBreak,
+ sPrizeListTorment,
+ sPrizeListSkillSwap,
+ sPrizeListGigaDrain,
+ sPrizeListAttract
};
static const u16 *const *const sPrizeListSets[] =
@@ -305,7 +305,7 @@ void GetTrainerHillTrainerName(u8 *dst, u16 trainerId)
s32 i;
u8 id = trainerId - 1;
- for (i = 0; i < HILL_TRAINER_NAME_LENGTH; i++)
+ for (i = 0; i < TRAINER_NAME_LENGTH + 1; i++)
dst[i] = sFloorTrainers->name[id][i];
}
@@ -330,7 +330,7 @@ void InitTrainerHillBattleStruct(void)
for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++)
{
- for (j = 0; j < HILL_TRAINER_NAME_LENGTH; j++)
+ for (j = 0; j < TRAINER_NAME_LENGTH + 1; j++)
sFloorTrainers->name[i][j] = sHillData->floors[sHillData->floorId].trainers[i].name[j];
sFloorTrainers->facilityClass[i] = sHillData->floors[sHillData->floorId].trainers[i].facilityClass;
@@ -899,7 +899,7 @@ void FillHillTrainersParties(void)
// hill trainers.
u32 GetTrainerHillAIFlags(void)
{
- return (AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY);
+ return (AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY);
}
u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
diff --git a/src/trainer_see.c b/src/trainer_see.c
index dc6c3b9177..b333e03241 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -115,7 +115,7 @@ static const struct OamData sOamData_Icons =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .mosaic = 0,
+ .mosaic = FALSE,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
@@ -660,7 +660,7 @@ void DoTrainerApproach(void)
static void Task_EndTrainerApproach(u8 taskId)
{
DestroyTask(taskId);
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
void TryPrepareSecondApproachingTrainer(void)
diff --git a/src/tv.c b/src/tv.c
index 2f3d17ee28..902e5f41af 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -956,22 +956,14 @@ void GabbyAndTyBeforeInterview(void)
else
gSaveBlock1Ptr->gabbyAndTyData.playerUsedHealingItem = FALSE;
- if (!gBattleResults.usedMasterBall)
+ for (i = 0; i < POKEBALL_COUNT; i++)
{
- for (i = 0; i < POKEBALL_COUNT - 1; i++)
+ if (gBattleResults.catchAttempts[i])
{
- if (gBattleResults.catchAttempts[i])
- {
- gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall = TRUE;
- break;
- }
+ gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall = TRUE;
+ break;
}
}
- else
- {
- // Player threw a Master Ball at Gabby and Ty
- gSaveBlock1Ptr->gabbyAndTyData.playerThrewABall = TRUE;
- }
TakeGabbyAndTyOffTheAir();
if (gSaveBlock1Ptr->gabbyAndTyData.lastMove == MOVE_NONE)
@@ -1129,28 +1121,20 @@ void TryPutPokemonTodayOnAir(void)
sCurTVShowSlot = FindFirstEmptyRecordMixTVShowSlot(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1 && IsRecordMixShowAlreadySpawned(TVSHOW_POKEMON_TODAY_CAUGHT, FALSE) != TRUE)
{
- for (i = 0; i < POKEBALL_COUNT - 1; i++)
+ for (i = 0; i < POKEBALL_COUNT; i++)
ballsUsed += gBattleResults.catchAttempts[i];
- if (ballsUsed != 0 || gBattleResults.usedMasterBall)
+ if (ballsUsed != 0)
{
ballsUsed = 0;
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->pokemonToday.kind = TVSHOW_POKEMON_TODAY_CAUGHT;
show->pokemonToday.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
- if (gBattleResults.usedMasterBall)
- {
- ballsUsed = 1;
- itemLastUsed = ITEM_MASTER_BALL;
- }
- else
- {
- for (i = 0; i < POKEBALL_COUNT - 1; i++)
- ballsUsed += gBattleResults.catchAttempts[i];
- if (ballsUsed > 255)
- ballsUsed = 255;
- itemLastUsed = gLastUsedItem;
- }
+ for (i = 0; i < POKEBALL_COUNT; i++)
+ ballsUsed += gBattleResults.catchAttempts[i];
+ if (ballsUsed > 255)
+ ballsUsed = 255;
+ itemLastUsed = gLastUsedItem;
show->pokemonToday.nBallsUsed = ballsUsed;
show->pokemonToday.ball = itemLastUsed;
StringCopy(show->pokemonToday.playerName, gSaveBlock2Ptr->playerName);
@@ -1192,7 +1176,7 @@ static void TryPutPokemonTodayFailedOnTheAir(void)
if (!rbernoulli(1, 1))
{
- for (i = 0, ballsUsed = 0; i < POKEBALL_COUNT - 1; i++)
+ for (i = 0, ballsUsed = 0; i < POKEBALL_COUNT; i++)
ballsUsed += gBattleResults.catchAttempts[i];
if (ballsUsed > 255)
ballsUsed = 255;
@@ -2133,11 +2117,8 @@ void TryPutBreakingNewsOnAir(void)
show->breakingNews.kind = TVSHOW_BREAKING_NEWS;
show->breakingNews.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
balls = 0;
- for (i = 0; i < POKEBALL_COUNT - 1; i++)
+ for (i = 0; i < POKEBALL_COUNT; i++)
balls += gBattleResults.catchAttempts[i];
-
- if (gBattleResults.usedMasterBall)
- balls++;
show->breakingNews.location = gMapHeader.regionMapSectionId;
StringCopy(show->breakingNews.playerName, gSaveBlock2Ptr->playerName);
show->breakingNews.poke1Species = gBattleResults.playerMon1Species;
@@ -2167,10 +2148,7 @@ void TryPutBreakingNewsOnAir(void)
switch (show->breakingNews.outcome)
{
case 0:
- if (gBattleResults.usedMasterBall)
- show->breakingNews.caughtMonBall = ITEM_MASTER_BALL;
- else
- show->breakingNews.caughtMonBall = gBattleResults.caughtMonBall;
+ show->breakingNews.caughtMonBall = gBattleResults.caughtMonBall;
show->breakingNews.balls = balls;
break;
case 1:
diff --git a/src/union_room.c b/src/union_room.c
index 05b41a0880..53fb951707 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -275,7 +275,7 @@ static s32 IsRequestedTypeOrEggInPlayerParty(u32, u32);
static bool32 UR_PrintFieldMessage(const u8 *);
static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *);
static void Task_InitUnionRoom(u8 taskId);
-static bool8 ArePlayersDifferent(struct RfuPlayerData*, const struct RfuPlayerData*);
+static bool8 ArePlayersDifferent(struct RfuPlayerData *, const struct RfuPlayerData *);
static void ItemPrintFunc_PossibleGroupMembers(u8, u32, u8);
static void ListMenuItemPrintFunc_UnionRoomGroups(u8, u32, u8);
static void TradeBoardListMenuItemPrintFunc(u8, u32, u8);
@@ -289,19 +289,19 @@ static void PrintNumPlayersWaitingForMsg(u8 windowId, u8 capacityCode, u8 string
switch (capacityCode << 8)
{
case LINK_GROUP_CAPACITY(0, 2):
- PrintUnionRoomText(windowId, 1, sPlayersNeededOrModeTexts[0][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
+ PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[0][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
break;
case LINK_GROUP_CAPACITY(0, 4):
- PrintUnionRoomText(windowId, 1, sPlayersNeededOrModeTexts[1][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
+ PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[1][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
break;
case LINK_GROUP_CAPACITY(2, 5):
- PrintUnionRoomText(windowId, 1, sPlayersNeededOrModeTexts[2][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
+ PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[2][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
break;
case LINK_GROUP_CAPACITY(3, 5):
- PrintUnionRoomText(windowId, 1, sPlayersNeededOrModeTexts[3][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
+ PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[3][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
break;
case LINK_GROUP_CAPACITY(2, 4):
- PrintUnionRoomText(windowId, 1, sPlayersNeededOrModeTexts[4][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
+ PrintUnionRoomText(windowId, FONT_NORMAL, sPlayersNeededOrModeTexts[4][stringId - 1], 0, 1, UR_COLOR_DEFAULT);
break;
}
@@ -313,10 +313,10 @@ static void PrintPlayerNameAndIdOnWindow(u8 windowId)
u8 text[30];
u8 *txtPtr;
- PrintUnionRoomText(windowId, 1, gSaveBlock2Ptr->playerName, 0, 1, UR_COLOR_DEFAULT);
+ PrintUnionRoomText(windowId, FONT_NORMAL, gSaveBlock2Ptr->playerName, 0, 1, UR_COLOR_DEFAULT);
txtPtr = StringCopy(text, sText_ID);
ConvertIntToDecimalStringN(txtPtr, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5);
- PrintUnionRoomText(windowId, 1, text, 0, 17, UR_COLOR_DEFAULT);
+ PrintUnionRoomText(windowId, FONT_NORMAL, text, 0, 17, UR_COLOR_DEFAULT);
}
static void GetAwaitingCommunicationText(u8 *dst, u8 caseId)
@@ -378,7 +378,7 @@ void TryBecomeLinkLeader(void)
struct WirelessLink_Leader *data;
taskId = CreateTask(Task_TryBecomeLinkLeader, 0);
- sWirelessLinkMain.leader = data = (void*)(gTasks[taskId].data);
+ sWirelessLinkMain.leader = data = (void *)(gTasks[taskId].data);
sLeader = data;
data->state = LL_STATE_INIT;
@@ -431,7 +431,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId)
data->nPlayerModeWindowId = AddWindow(&sWindowTemplate_NumPlayerMode);
FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2));
- PrintUnionRoomText(data->bButtonCancelWindowId, 0, sText_BButtonCancel, 8, 1, UR_COLOR_CANCEL);
+ PrintUnionRoomText(data->bButtonCancelWindowId, FONT_SMALL, sText_BButtonCancel, 8, 1, UR_COLOR_CANCEL);
PutWindowTilemap(data->bButtonCancelWindowId);
CopyWindowToVram(data->bButtonCancelWindowId, COPYWIN_GFX);
@@ -686,12 +686,12 @@ static void Task_TryBecomeLinkLeader(u8 taskId)
data->state++; // LL_STATE_RETRY or LL_STATE_FAILED
break;
case LL_STATE_FAILED:
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
gSpecialVar_Result = LINKUP_FAILED;
break;
case LL_STATE_RETRY:
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN;
break;
@@ -971,7 +971,7 @@ void TryJoinLinkGroup(void)
struct WirelessLink_Group *data;
taskId = CreateTask(Task_TryJoinLinkGroup, 0);
- sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data);
+ sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data);
sGroup = data;
data->state = LG_STATE_INIT;
@@ -1011,7 +1011,7 @@ static void Task_TryJoinLinkGroup(u8 taskId)
data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_PlayerNameAndId);
FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2));
- PrintUnionRoomText(data->bButtonCancelWindowId, 0, sText_ChooseJoinCancel, 8, 1, UR_COLOR_CANCEL);
+ PrintUnionRoomText(data->bButtonCancelWindowId, FONT_SMALL, sText_ChooseJoinCancel, 8, 1, UR_COLOR_CANCEL);
PutWindowTilemap(data->bButtonCancelWindowId);
CopyWindowToVram(data->bButtonCancelWindowId, COPYWIN_GFX);
@@ -1297,7 +1297,7 @@ u8 CreateTask_ListenToWireless(void)
struct WirelessLink_Group *data;
taskId = CreateTask(Task_ListenToWireless, 0);
- sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data);
+ sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data);
data->state = 0;
data->textState = 0;
@@ -1487,7 +1487,7 @@ static void Task_StartUnionRoomTrade(u8 taskId)
case 1:
if (GetBlockReceivedStatus() == 3)
{
- gEnemyParty[0] = *(struct Pokemon*)(gBlockRecvBuffer[GetMultiplayerId() ^ 1]);
+ gEnemyParty[0] = *(struct Pokemon *)(gBlockRecvBuffer[GetMultiplayerId() ^ 1]);
IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES);
ResetBlockReceivedFlags();
gTasks[taskId].data[0]++;
@@ -1744,13 +1744,13 @@ static void Task_StartActivity(u8 taskId)
DestroyTask(taskId);
gSpecialVar_Result = LINKUP_SUCCESS;
if (gPlayerCurrActivity != (ACTIVITY_TRADE | IN_UNION_ROOM))
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
}
static void Task_RunScriptAndFadeToActivity(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 *sendBuff = (u16*)(gBlockSendBuffer);
+ u16 *sendBuff = (u16 *)(gBlockSendBuffer);
switch (data[0])
{
@@ -1779,13 +1779,13 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
SaveLinkTrainerNames();
DestroyTask(taskId);
default:
- EnableBothScriptContexts();
+ ScriptContext_Enable();
data[0] = 1;
break;
}
break;
case 1:
- if (!ScriptContext1_IsScriptSetUp())
+ if (!ScriptContext_IsEnabled())
{
FadeScreen(FADE_TO_BLACK, 0);
data[0] = 2;
@@ -1833,7 +1833,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
}
break;
case 6:
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
break;
case 7:
@@ -1844,7 +1844,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
if (gReceivedRemoteLinkPlayers == 0)
{
DestroyWirelessStatusIndicatorSprite();
- EnableBothScriptContexts();
+ ScriptContext_Enable();
DestroyTask(taskId);
}
break;
@@ -1869,7 +1869,7 @@ void CreateTask_SendMysteryGift(u32 activity)
struct WirelessLink_Leader *data;
taskId = CreateTask(Task_SendMysteryGift, 0);
- sWirelessLinkMain.leader = data = (void*)(gTasks[taskId].data);
+ sWirelessLinkMain.leader = data = (void *)(gTasks[taskId].data);
data->state = 0;
data->textState = 0;
@@ -1950,7 +1950,7 @@ static void Task_SendMysteryGift(u8 taskId)
data->state = 7;
break;
case 7:
- switch (DoMysteryGiftYesNo(&data->textState, &data->yesNoWindowId, 0, gStringVar4))
+ switch (DoMysteryGiftYesNo(&data->textState, &data->yesNoWindowId, FALSE, gStringVar4))
{
case 0:
LoadWirelessStatusIndicatorSpriteGfx();
@@ -2077,7 +2077,7 @@ void CreateTask_LinkMysteryGiftWithFriend(u32 activity)
struct WirelessLink_Group *data;
taskId = CreateTask(Task_CardOrNewsWithFriend, 0);
- sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data);
+ sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data);
sGroup = data;
data->state = 0;
@@ -2246,7 +2246,7 @@ void CreateTask_LinkMysteryGiftOverWireless(u32 activity)
struct WirelessLink_Group *data;
taskId = CreateTask(Task_CardOrNewsOverWireless, 0);
- sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data);
+ sWirelessLinkMain.group = data = (void *)(gTasks[taskId].data);
sGroup = data;
data->state = 0;
@@ -2469,7 +2469,7 @@ static void ScheduleFieldMessageAndExit(const u8 *src)
static void CopyPlayerListToBuffer(struct WirelessLink_URoom *uroom)
{
memcpy(&gDecompressionBuffer[sizeof(gDecompressionBuffer) - (MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer))],
- uroom->playerList,
+ uroom->playerList,
MAX_UNION_ROOM_LEADERS * sizeof(struct RfuPlayer));
}
@@ -2592,7 +2592,7 @@ static void Task_RunUnionRoom(u8 taskId)
gSpecialVar_Result = 0;
}
}
- else if (ScriptContext2_IsEnabled() != TRUE)
+ else if (ArePlayerFieldControlsLocked() != TRUE)
{
if (JOY_NEW(A_BUTTON))
{
@@ -3467,7 +3467,7 @@ static void Task_SearchForChildOrParent(u8 taskId)
{
s32 i, j;
struct RfuPlayerData rfu;
- struct RfuIncomingPlayerList **list = (void*) gTasks[taskId].data;
+ struct RfuIncomingPlayerList **list = (void *) gTasks[taskId].data;
bool8 isParent;
for (i = 0; i < RFU_CHILD_MAX; i++)
@@ -3510,7 +3510,7 @@ static u8 CreateTask_SearchForChildOrParent(struct RfuIncomingPlayerList * paren
static void Task_ListenForCompatiblePartners(u8 taskId)
{
s32 i, j;
- struct RfuIncomingPlayerList **list = (void*) gTasks[taskId].data;
+ struct RfuIncomingPlayerList **list = (void *) gTasks[taskId].data;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
@@ -3553,7 +3553,7 @@ static bool32 HasWonderCardOrNewsByLinkGroup(struct RfuGameData *data, s16 linkG
static void Task_ListenForWonderDistributor(u8 taskId)
{
s32 i;
- struct RfuIncomingPlayerList **list = (void*) gTasks[taskId].data;
+ struct RfuIncomingPlayerList **list = (void *) gTasks[taskId].data;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
@@ -3567,7 +3567,7 @@ static void Task_ListenForWonderDistributor(u8 taskId)
static u8 CreateTask_ListenForCompatiblePartners(struct RfuIncomingPlayerList * list, u32 linkGroup)
{
u8 taskId = CreateTask(Task_ListenForCompatiblePartners, 0);
- struct RfuIncomingPlayerList **oldList = (void*) gTasks[taskId].data;
+ struct RfuIncomingPlayerList **oldList = (void *) gTasks[taskId].data;
oldList[0] = list;
gTasks[taskId].data[2] = linkGroup;
return taskId;
@@ -3576,7 +3576,7 @@ static u8 CreateTask_ListenForCompatiblePartners(struct RfuIncomingPlayerList *
static u8 CreateTask_ListenForWonderDistributor(struct RfuIncomingPlayerList * list, u32 linkGroup)
{
u8 taskId = CreateTask(Task_ListenForWonderDistributor, 0);
- struct RfuIncomingPlayerList **oldList = (void*) gTasks[taskId].data;
+ struct RfuIncomingPlayerList **oldList = (void *) gTasks[taskId].data;
oldList[0] = list;
gTasks[taskId].data[2] = linkGroup;
return taskId;
@@ -3585,7 +3585,7 @@ static u8 CreateTask_ListenForWonderDistributor(struct RfuIncomingPlayerList * l
static bool32 UR_PrintFieldMessage(const u8 *src)
{
LoadMessageBoxAndBorderGfx();
- DrawDialogueFrame(0, 1);
+ DrawDialogueFrame(0, TRUE);
StringExpandPlaceholders(gStringVar4, src);
AddTextPrinterWithCustomSpeedForMessage(FALSE, 1);
return FALSE;
@@ -3605,7 +3605,7 @@ static bool8 PrintOnTextbox(u8 *textState, const u8 *str)
{
case 0:
LoadMessageBoxAndBorderGfx();
- DrawDialogueFrame(0, 1);
+ DrawDialogueFrame(0, TRUE);
StringExpandPlaceholders(gStringVar4, str);
AddTextPrinterForMessage_2(TRUE);
(*textState)++;
@@ -3656,7 +3656,7 @@ static u8 CreateTradeBoardWindow(const struct WindowTemplate * template)
u8 windowId = AddWindow(template);
DrawStdWindowFrame(windowId, FALSE);
FillWindowPixelBuffer(windowId, PIXEL_FILL(15));
- PrintUnionRoomText(windowId, 1, sText_NameWantedOfferLv, 8, 1, UR_COLOR_TRADE_BOARD_OTHER);
+ PrintUnionRoomText(windowId, FONT_NORMAL, sText_NameWantedOfferLv, 8, 1, UR_COLOR_TRADE_BOARD_OTHER);
CopyWindowToVram(windowId, COPYWIN_GFX);
PutWindowTilemap(windowId);
return windowId;
@@ -3781,7 +3781,7 @@ static void UR_ClearBg0(void)
static void JoinGroup_EnableScriptContexts(void)
{
- EnableBothScriptContexts();
+ ScriptContext_Enable();
}
static void PrintUnionRoomText(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx)
@@ -3971,17 +3971,17 @@ static void PrintGroupMemberOnWindow(u8 windowId, u8 x, u8 y, struct RfuPlayer *
ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
StringAppend(gStringVar4, sText_Colon);
- PrintUnionRoomText(windowId, 1, gStringVar4, x, y, UR_COLOR_DEFAULT);
+ PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, x, y, UR_COLOR_DEFAULT);
x += 18;
activity = player->rfu.data.activity;
if (player->groupScheduledAnim == UNION_ROOM_SPAWN_IN && !(activity & IN_UNION_ROOM))
{
CopyAndTranslatePlayerName(gStringVar4, player);
- PrintUnionRoomText(windowId, 1, gStringVar4, x, y, colorIdx);
+ PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, x, y, colorIdx);
ConvertIntToDecimalStringN(trainerId, player->rfu.data.compatibility.playerTrainerId[0] | (player->rfu.data.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
StringCopy(gStringVar4, sText_ID);
StringAppend(gStringVar4, trainerId);
- PrintUnionRoomText(windowId, 1, gStringVar4, GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x88), y, colorIdx);
+ PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x88), y, colorIdx);
}
}
@@ -3992,11 +3992,11 @@ static void PrintGroupCandidateOnWindow(u8 windowId, u8 x, u8 y, struct RfuPlaye
if (player->groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
CopyAndTranslatePlayerName(gStringVar4, player);
- PrintUnionRoomText(windowId, 1, gStringVar4, x, y, colorIdx);
+ PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, x, y, colorIdx);
ConvertIntToDecimalStringN(trainerId, player->rfu.data.compatibility.playerTrainerId[0] | (player->rfu.data.compatibility.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
StringCopy(gStringVar4, sText_ID);
StringAppend(gStringVar4, trainerId);
- PrintUnionRoomText(windowId, 1, gStringVar4, GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x68), y, colorIdx);
+ PrintUnionRoomText(windowId, FONT_NORMAL, gStringVar4, GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 0x68), y, colorIdx);
}
}
@@ -4094,24 +4094,24 @@ void ItemPrintFunc_EmptyList(u8 windowId, u32 itemId, u8 y)
{
}
-static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct RfuGameData * data, const u8 * playerName, u8 colorIdx)
+static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct RfuGameData * data, const u8 *playerName, u8 colorIdx)
{
u8 levelStr[4];
u16 species = data->tradeSpecies;
u8 type = data->tradeType;
u8 level = data->tradeLevel;
- PrintUnionRoomText(windowId, 1, playerName, 8, y, colorIdx);
+ PrintUnionRoomText(windowId, FONT_NORMAL, playerName, 8, y, colorIdx);
if (species == SPECIES_EGG)
{
- PrintUnionRoomText(windowId, 1, sText_EggTrade, 68, y, colorIdx);
+ PrintUnionRoomText(windowId, FONT_NORMAL, sText_EggTrade, 68, y, colorIdx);
}
else
{
BlitMenuInfoIcon(windowId, type + 1, 68, y);
- PrintUnionRoomText(windowId, 1, gSpeciesNames[species], 118, y, colorIdx);
+ PrintUnionRoomText(windowId, FONT_NORMAL, gSpeciesNames[species], 118, y, colorIdx);
ConvertIntToDecimalStringN(levelStr, level, STR_CONV_MODE_RIGHT_ALIGN, 3);
- PrintUnionRoomText(windowId, 1, levelStr, 198, y, colorIdx);
+ PrintUnionRoomText(windowId, FONT_NORMAL, levelStr, 198, y, colorIdx);
}
}
@@ -4403,7 +4403,7 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 mult
static void HandleCancelActivity(bool32 setData)
{
UR_ClearBg0();
- ScriptContext2_Disable();
+ UnlockPlayerFieldControls();
UnionRoom_UnlockPlayerAndChatPartner();
gPlayerCurrActivity = ACTIVITY_NONE;
if (setData)
@@ -4415,7 +4415,7 @@ static void HandleCancelActivity(bool32 setData)
static void StartScriptInteraction(void)
{
- ScriptContext2_Enable();
+ LockPlayerFieldControls();
FreezeObjects_WaitForPlayer();
}
diff --git a/src/union_room_battle.c b/src/union_room_battle.c
index 1ec8be77b5..38866c940d 100644
--- a/src/union_room_battle.c
+++ b/src/union_room_battle.c
@@ -73,7 +73,7 @@ static void CB2_SetUpPartiesAndStartBattle(void)
SetMainCallback2(CB2_InitBattle);
}
-static void AddTextPrinterForUnionRoomBattle(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed)
+static void AddTextPrinterForUnionRoomBattle(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed)
{
s32 letterSpacing = 0;
s32 lineSpacing = 1;
@@ -81,7 +81,7 @@ static void AddTextPrinterForUnionRoomBattle(u8 windowId, const u8 * str, u8 x,
AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, letterSpacing, lineSpacing, sTextColors, speed, str);
}
-static bool32 PrintUnionRoomBattleMessage(s16 * state, const u8 * str, s32 speed)
+static bool32 PrintUnionRoomBattleMessage(s16 * state, const u8 *str, s32 speed)
{
switch (*state)
{
diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c
index 908eb8f21f..923f6692f1 100644
--- a/src/union_room_player_avatar.c
+++ b/src/union_room_player_avatar.c
@@ -180,7 +180,7 @@ static void RemoveUnionRoomPlayerObjectEvent(u32 leaderId)
RemoveObjectEventByLocalIdAndMap(sUnionRoomLocalIds[leaderId], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
}
-static bool32 SetUnionRoomPlayerEnterExitMovement(u32 leaderId, const u8 * movement)
+static bool32 SetUnionRoomPlayerEnterExitMovement(u32 leaderId, const u8 *movement)
{
u8 objectId;
struct ObjectEvent * object;
@@ -205,7 +205,7 @@ static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 leaderId)
if (!ObjectEventClearHeldMovementIfFinished(object))
return FALSE;
- if (!ScriptContext2_IsEnabled())
+ if (!ArePlayerFieldControlsLocked())
UnfreezeObjectEvent(object);
else
FreezeObjectEvent(object);
@@ -394,7 +394,7 @@ void DestroyUnionRoomPlayerObjects(void)
DestroyTask_AnimateUnionRoomPlayers();
}
-void CreateUnionRoomPlayerSprites(u8 * spriteIds, s32 leaderId)
+void CreateUnionRoomPlayerSprites(u8 *spriteIds, s32 leaderId)
{
s32 memberId;
for (memberId = 0; memberId < MAX_RFU_PLAYERS; memberId++)
@@ -409,7 +409,7 @@ void CreateUnionRoomPlayerSprites(u8 * spriteIds, s32 leaderId)
}
}
-void DestroyUnionRoomPlayerSprites(u8 * spriteIds)
+void DestroyUnionRoomPlayerSprites(u8 *spriteIds)
{
s32 i;
for (i = 0; i < NUM_UNION_ROOM_SPRITES; i++)
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index 8f041a6ff2..2f16f220aa 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -497,7 +497,7 @@ static void LoadUsePokeblockMenu(void)
break;
case 2:
SetVBlankCallback(NULL);
- CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+ CpuFill32(0, (void *)(VRAM), VRAM_SIZE);
sInfo->mainState++;
break;
case 3:
@@ -1232,7 +1232,7 @@ static void UpdateMonPic(u8 loadId)
sMenu->curMonSpriteId = spriteId;
gSprites[sMenu->curMonSpriteId].callback = SpriteCB_MonPic;
gSprites[sMenu->curMonSpriteId].y2 -= 34;
- sMenu->curMonTileStart = (void*)(OBJ_VRAM0 + (sMenu->curMonSheet * 32));
+ sMenu->curMonTileStart = (void *)(OBJ_VRAM0 + (sMenu->curMonSheet * 32));
sMenu->curMonPalette = (sMenu->curMonPalette * 16) + 0x100;
}
}
diff --git a/src/util.c b/src/util.c
index a4e3fa4cfc..32f31a26dd 100644
--- a/src/util.c
+++ b/src/util.c
@@ -253,7 +253,7 @@ u16 CalcCRC16WithTable(const u8 *data, u32 length)
return ~crc;
}
-u32 CalcByteArraySum(const u8* data, u32 length)
+u32 CalcByteArraySum(const u8 *data, u32 length)
{
u32 sum, i;
for (sum = 0, i = 0; i < length; i++)
diff --git a/src/walda_phrase.c b/src/walda_phrase.c
index aa85c0d60b..025f900e5a 100644
--- a/src/walda_phrase.c
+++ b/src/walda_phrase.c
@@ -140,7 +140,7 @@ static u8 GetLetterTableId(u8 letter)
#define KEY data[8]
#define NUM_WALLPAPER_DATA_BYTES 9
#define TO_BIT_OFFSET(i) (3 + (8 * (i))) // Convert a position in the phrase to a bit number into the wallpaper data array
-static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase)
+static bool32 TryCalculateWallpaper(u16 *backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase)
{
s32 i;
ALIGNED(2) u8 data[NUM_WALLPAPER_DATA_BYTES];
@@ -186,10 +186,10 @@ static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *
return FALSE;
// Successful phrase, save resulting wallpaper
- ptr = (u16*) &BG_COLOR_LO;
+ ptr = (u16 *) &BG_COLOR_LO;
*backgroundClr = *ptr;
- ptr = (u16*) &FG_COLOR_LO;
+ ptr = (u16 *) &FG_COLOR_LO;
*foregroundClr = *ptr;
*iconId = ICON_ID;
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 4b3402e5ac..8e197d547e 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -14,9 +14,11 @@
#include "tv.h"
#include "link.h"
#include "script.h"
+#include "battle_debug.h"
#include "battle_pike.h"
#include "battle_pyramid.h"
#include "constants/abilities.h"
+#include "constants/battle_config.h"
#include "constants/game_stat.h"
#include "constants/items.h"
#include "constants/layouts.h"
@@ -52,11 +54,13 @@ static void FeebasSeedRng(u16 seed);
static bool8 IsWildLevelAllowedByRepel(u8 level);
static void ApplyFluteEncounterRateMod(u32 *encRate);
static void ApplyCleanseTagEncounterRateMod(u32 *encRate);
-static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex);
+static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u16 ability, u8 *monIndex);
static bool8 IsAbilityAllowingEncounter(u8 level);
EWRAM_DATA static u8 sWildEncountersDisabled = 0;
EWRAM_DATA static u32 sFeebasRngValue = 0;
+EWRAM_DATA bool8 gIsFishingEncounter = 0;
+EWRAM_DATA bool8 gIsSurfingEncounter = 0;
#include "data/wild_encounters.h"
@@ -285,7 +289,7 @@ static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon)
// check ability for max level mon
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
{
- u8 ability = GetMonAbility(&gPlayerParty[0]);
+ u16 ability = GetMonAbility(&gPlayerParty[0]);
if (ability == ABILITY_HUSTLE || ability == ABILITY_VITAL_SPIRIT || ability == ABILITY_PRESSURE)
{
if (Random() % 2 == 0)
@@ -363,7 +367,7 @@ static u8 PickWildMonNature(void)
// check synchronize for a pokemon with the same ability
if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)
&& GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE
- && Random() % 2 == 0)
+ && ((B_SYNCHRONIZE_NATURE >= GEN_8) || Random() % 2 == 0))
{
return GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY) % NUM_NATURES;
}
@@ -422,12 +426,30 @@ static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 ar
break;
if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex))
break;
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex))
+ break;
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex))
+ break;
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex))
+ break;
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex))
+ break;
wildMonIndex = ChooseWildMonIndex_Land();
break;
case WILD_AREA_WATER:
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex))
+ break;
if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex))
break;
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex))
+ break;
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex))
+ break;
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex))
+ break;
+ if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex))
+ break;
wildMonIndex = ChooseWildMonIndex_WaterRock();
break;
@@ -512,6 +534,14 @@ static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility)
encounterRate *= 2;
else if (ability == ABILITY_SAND_VEIL && gSaveBlock1Ptr->weather == WEATHER_SANDSTORM)
encounterRate /= 2;
+ else if (ability == ABILITY_SNOW_CLOAK && gSaveBlock1Ptr->weather == WEATHER_SNOW)
+ encounterRate /= 2;
+ else if (ability == ABILITY_QUICK_FEET)
+ encounterRate /= 2;
+ else if (ability == ABILITY_INFILTRATOR)
+ encounterRate /= 2;
+ else if (ability == ABILITY_NO_GUARD)
+ encounterRate = encounterRate * 3 / 2;
}
if (encounterRate > MAX_ENCOUNTER_RATE)
encounterRate = MAX_ENCOUNTER_RATE;
@@ -609,7 +639,17 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi
// try a regular wild land encounter
if (TryGenerateWildMon(gWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE)
{
- BattleSetup_StartWildBattle();
+ if (TryDoDoubleWildBattle())
+ {
+ struct Pokemon mon1 = gEnemyParty[0];
+ TryGenerateWildMon(gWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_KEEN_EYE);
+ gEnemyParty[1] = mon1;
+ BattleSetup_StartDoubleWildBattle();
+ }
+ else
+ {
+ BattleSetup_StartWildBattle();
+ }
return TRUE;
}
@@ -641,7 +681,18 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi
{
if (TryGenerateWildMon(gWildMonHeaders[headerId].waterMonsInfo, WILD_AREA_WATER, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE)
{
- BattleSetup_StartWildBattle();
+ gIsSurfingEncounter = TRUE;
+ if (TryDoDoubleWildBattle())
+ {
+ struct Pokemon mon1 = gEnemyParty[0];
+ TryGenerateWildMon(gWildMonHeaders[headerId].waterMonsInfo, WILD_AREA_WATER, WILD_CHECK_KEEN_EYE);
+ gEnemyParty[1] = mon1;
+ BattleSetup_StartDoubleWildBattle();
+ }
+ else
+ {
+ BattleSetup_StartWildBattle();
+ }
return TRUE;
}
@@ -665,7 +716,7 @@ void RockSmashWildEncounter(void)
{
gSpecialVar_Result = FALSE;
}
- else if (DoWildEncounterRateTest(wildPokemonInfo->encounterRate, 1) == TRUE
+ else if (DoWildEncounterRateTest(wildPokemonInfo->encounterRate, TRUE) == TRUE
&& TryGenerateWildMon(wildPokemonInfo, WILD_AREA_ROCKS, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE)
{
BattleSetup_StartWildBattle();
@@ -782,6 +833,7 @@ void FishingWildEncounter(u8 rod)
}
IncrementGameStat(GAME_STAT_FISHING_CAPTURES);
SetPokemonAnglerSpecies(species);
+ gIsFishingEncounter = TRUE;
BattleSetup_StartWildBattle();
}
@@ -852,7 +904,7 @@ bool8 UpdateRepelCounter(void)
VarSet(VAR_REPEL_STEP_COUNT, steps);
if (steps == 0)
{
- ScriptContext1_SetupScript(EventScript_RepelWoreOff);
+ ScriptContext_SetupScript(EventScript_RepelWoreOff);
return TRUE;
}
}
@@ -884,7 +936,7 @@ static bool8 IsWildLevelAllowedByRepel(u8 wildLevel)
static bool8 IsAbilityAllowingEncounter(u8 level)
{
- u8 ability;
+ u16 ability;
if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
return TRUE;
@@ -921,7 +973,7 @@ static bool8 TryGetRandomWildMonIndexByType(const struct WildPokemon *wildMon, u
return TRUE;
}
-static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex)
+static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u16 ability, u8 *monIndex)
{
if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
return FALSE;
@@ -946,3 +998,16 @@ static void ApplyCleanseTagEncounterRateMod(u32 *encRate)
if (GetMonData(&gPlayerParty[0], MON_DATA_HELD_ITEM) == ITEM_CLEANSE_TAG)
*encRate = *encRate * 2 / 3;
}
+
+bool8 TryDoDoubleWildBattle(void)
+{
+ if (GetSafariZoneFlag() || GetMonsStateToDoubles() != PLAYER_HAS_TWO_USABLE_MONS)
+ return FALSE;
+ else if (B_FLAG_FORCE_DOUBLE_WILD != 0 && FlagGet(B_FLAG_FORCE_DOUBLE_WILD))
+ return TRUE;
+ #if B_DOUBLE_WILD_CHANCE != 0
+ else if ((Random() % 100) + 1 < B_DOUBLE_WILD_CHANCE)
+ return TRUE;
+ #endif
+ return FALSE;
+}
diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c
index 1fbd83fcda..40e4bb84df 100644
--- a/src/wireless_communication_status_screen.c
+++ b/src/wireless_communication_status_screen.c
@@ -311,7 +311,7 @@ static void Task_WirelessCommunicationScreen(u8 taskId)
#undef tState
-static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode)
+static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 mode)
{
u8 color[3];
diff --git a/sym_common.txt b/sym_common.txt
index 938b78fbe4..407b183a7f 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -3,35 +3,35 @@
@ ../gflib/bg.o
.align 2
gWindowTileAutoAllocEnabled:
- .space 4
+ .space 4
@ ../gflib/window.o
- .align 4
+ .align 4
gTransparentTileNumber:
- .space 1
- .align 4
+ .space 1
+ .align 4
gWindowBgTilemapBuffers:
- .space 16
+ .space 16
@ ../gflib/text.o
- .align 4
+ .align 4
gFonts:
- .space 4
- .align 2
+ .space 4
+ .align 2
gDisableTextPrinters:
- .space 1
- .align 4
+ .space 1
+ .align 4
gCurGlyph:
- .space 132
- .align 2
+ .space 132
+ .align 2
gTextFlags:
- .space 4
+ .space 4
@ ../gflib/sprite.o
- .align 2
+ .align 2
gOamMatrixAllocBitmap:
- .space 4
- .align 2
+ .space 4
+ .align 2
gReservedSpritePaletteCount:
- .space 1
- .align 4
+ .space 1
+ .align 4
.include "link.o"
.include "AgbRfu_LinkManager.o"
.include "link_rfu_2.o"
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 414b7a3b23..3e2c3b28da 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -91,7 +91,7 @@
.include "src/region_map.o"
.include "src/decoration.o"
.include "src/slot_machine.o"
- .include "src/battle_ai_script_commands.o"
+ .include "src/battle_ai_main.o"
.include "src/fldeff_misc.o"
.include "src/pokeblock.o"
.include "src/field_specials.o"
diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c
index 4e85953fdc..832e9bb397 100644
--- a/tools/gbagfx/gfx.c
+++ b/tools/gbagfx/gfx.c
@@ -397,7 +397,7 @@ void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int
free(buffer);
}
-void WriteImage(char *path, int numTiles, 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)
{
int tileSize = bitDepth * 8;
@@ -424,7 +424,8 @@ void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int m
FATAL_ERROR("The specified number of tiles (%d) is greater than the maximum possible value (%d).\n", numTiles, maxNumTiles);
int bufferSize = numTiles * tileSize;
- unsigned char *buffer = malloc(bufferSize);
+ int maxBufferSize = maxNumTiles * tileSize;
+ unsigned char *buffer = malloc(maxBufferSize);
if (buffer == NULL)
FATAL_ERROR("Failed to allocate memory for pixels.\n");
@@ -433,17 +434,36 @@ void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int m
switch (bitDepth) {
case 1:
- ConvertToTiles1Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
+ ConvertToTiles1Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
break;
case 4:
- ConvertToTiles4Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
+ ConvertToTiles4Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
break;
case 8:
- ConvertToTiles8Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
+ ConvertToTiles8Bpp(image->pixels, buffer, maxNumTiles, metatilesWide, metatileWidth, metatileHeight, invertColors);
break;
}
- WriteWholeFile(path, buffer, bufferSize);
+ bool zeroPadded = true;
+ for (int i = bufferSize; i < maxBufferSize && zeroPadded; i++) {
+ if (buffer[i] != 0)
+ {
+ switch (numTilesMode)
+ {
+ case NUM_TILES_IGNORE:
+ break;
+ case NUM_TILES_WARN:
+ fprintf(stderr, "Ignoring -num_tiles %d because tile %d contains non-transparent pixels.\n", numTiles, 1 + i / tileSize);
+ zeroPadded = false;
+ break;
+ case NUM_TILES_ERROR:
+ FATAL_ERROR("Tile %d contains non-transparent pixels.\n", 1 + i / tileSize);
+ break;
+ }
+ }
+ }
+
+ WriteWholeFile(path, buffer, zeroPadded ? bufferSize : maxBufferSize);
free(buffer);
}
diff --git a/tools/gbagfx/gfx.h b/tools/gbagfx/gfx.h
index edb9e62c41..f1dbfcf4f7 100644
--- a/tools/gbagfx/gfx.h
+++ b/tools/gbagfx/gfx.h
@@ -44,8 +44,14 @@ struct Image {
bool isAffine;
};
+enum NumTilesMode {
+ NUM_TILES_IGNORE,
+ NUM_TILES_WARN,
+ NUM_TILES_ERROR,
+};
+
void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors);
-void WriteImage(char *path, int numTiles, 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 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 cf30316961..5d4faacab0 100644
--- a/tools/gbagfx/main.c
+++ b/tools/gbagfx/main.c
@@ -77,7 +77,7 @@ void ConvertPngToGba(char *inputPath, char *outputPath, struct PngToGbaOptions *
ReadPng(inputPath, &image);
- WriteImage(outputPath, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette);
+ WriteImage(outputPath, options->numTilesMode, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette);
FreeImage(&image);
}
@@ -179,6 +179,7 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a
char *outputFileExtension = GetFileExtensionAfterDot(outputPath);
int bitDepth = outputFileExtension[0] - '0';
struct PngToGbaOptions options;
+ options.numTilesMode = NUM_TILES_IGNORE;
options.numTiles = 0;
options.bitDepth = bitDepth;
options.metatileWidth = 1;
@@ -203,6 +204,12 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a
if (options.numTiles < 1)
FATAL_ERROR("Number of tiles must be positive.\n");
}
+ else if (strcmp(option, "-Wnum_tiles") == 0) {
+ options.numTilesMode = NUM_TILES_WARN;
+ }
+ else if (strcmp(option, "-Werror=num_tiles") == 0) {
+ options.numTilesMode = NUM_TILES_ERROR;
+ }
else if (strcmp(option, "-mwidth") == 0)
{
if (i + 1 >= argc)
diff --git a/tools/gbagfx/options.h b/tools/gbagfx/options.h
index 3b038f572d..250b723450 100644
--- a/tools/gbagfx/options.h
+++ b/tools/gbagfx/options.h
@@ -4,6 +4,7 @@
#define OPTIONS_H
#include
+#include "gfx.h"
struct GbaToPngOptions {
char *paletteFilePath;
@@ -18,6 +19,7 @@ struct GbaToPngOptions {
struct PngToGbaOptions {
int numTiles;
+ enum NumTilesMode numTilesMode;
int bitDepth;
int metatileWidth;
int metatileHeight;